This project is a Markdown-first Hugo website for the CORE-AIx lab.
- Install Hugo (extended recommended):
- macOS (Homebrew):
brew install hugo
- macOS (Homebrew):
- Start the local server:
hugo server -D
- Open:
http://localhost:1313
- Blog:
hugo new blog/my-new-post.md - News:
hugo new news/my-news-item.md
Each file uses archetypes with front matter, including an author field.
- Authors are defined in
data/authors.yaml. - In blog/news markdown, set front matter like:
author = "core-team"The page automatically renders author name, role, and bio.
This repo includes netlify.toml with Hugo build settings.
On Netlify:
- Create a new site from this repo.
- Build command:
hugo --gc --minify - Publish directory:
public - Deploy.
Netlify will render all Markdown content through Hugo templates.
Each blog post can have a matching MP3 file at static/audio/blog/<slug>.mp3.
- Set your API key:
export OPENAI_API_KEY="<your-key>"
- (Optional) choose model/voice:
export OPENAI_TTS_MODEL="gpt-4o-mini-tts"export OPENAI_TTS_VOICE="alloy"
- Generate audio files:
python3 scripts/generate_podcasts.py
Useful flags:
python3 scripts/generate_podcasts.py --dry-runpython3 scripts/generate_podcasts.py --force
When deployed at https://core-aix.org/, these feeds are available:
- Blog RSS:
https://core-aix.org/blog/index.xml - News RSS:
https://core-aix.org/news/index.xml - Podcast RSS (audio episodes from blog posts with MP3 files):
https://core-aix.org/blog/podcast.xml
Podcast mapping rule:
- Blog file
content/blog/my-post.mdexpects audio atstatic/audio/blog/my-post.mp3 - Only posts with matching MP3 files are included in
podcast.xml
- Generate and upload episode MP3 files under
static/audio/blog/. - Deploy the site so
https://core-aix.org/blog/podcast.xmlis public. - Validate your feed (recommended):
- Cast Feed Validator:
https://castfeedvalidator.com/
- Cast Feed Validator:
- Submit to directories:
- Spotify for Creators (RSS submission)
- Apple Podcasts Connect (RSS submission)
- YouTube Music (podcast RSS)
Tip: After approval, publishing a new episode is just adding a new blog post + matching MP3 file, then redeploying.