Create new stories,
events, podcasts, and CIO updates faster
This internal workflow gives the team one safe starter command for each content type. It creates a draft JSON template outside the live build by default, then lets you promote it into the real source folder when it is ready.
scripts/new_content_starter.pytmp/content-starters/src/content/posts/ or src/content/events/python3 scripts/rebuild_site.pyThe simplest way for the team to use it
Generate a draft starter
Run the script with a content type and title. By default it writes a starter JSON file into tmp/content-starters/, which is safe because draft files there do not publish to the site.
Fill in the real details
Edit the draft file and replace the placeholder copy, dates, links, tags, and image fields. Leave the hero image blank if you want the shared fallback hero pool.
Promote it to live content
Rerun the same command with --live when the file is ready, or copy the draft into the real source folder. The script writes to src/content/posts/ or src/content/events/ automatically.
Rebuild and verify
Run the rebuild, then check the generated page plus the archive page where it should appear. Use the internal operations pages if you want a fast metadata and media check.
Exact commands for each content type
Standard newsroom story
python3 scripts/new_content_starter.py story "OpenAI Visits Campus for a Day of Training and Building"This creates a draft file in tmp/content-starters/posts/. Add --live when the story is ready to publish.
ET Talk podcast episode
python3 scripts/new_content_starter.py podcast "ET Talk: AI Literacy and the Campus Future"The starter includes the ET Talk structure: episode metadata, listen links, embed field, highlights, and summary sections.
Monthly CIO update
python3 scripts/new_content_starter.py cio "March 2026 CIO Updates"The starter includes stats, intro paragraphs, update cards, and the shared CIO update structure.
Event
python3 scripts/new_content_starter.py event "AI and the Academy"The starter includes the event schema fields, agenda, sections, and default date formatting for a draft event record.
What the script options do
--live--slug your-slug--published 2026-03-14--stdout--forceThe team-friendly way to work
Best default
Use draft mode first. It keeps incomplete content out of the live site and gives the team a repeatable place to start from.
python3 scripts/new_content_starter.py story "Your Title"When to use live mode
Use --live only when the copy, dates, links, tags, and image choices are ready enough to rebuild and check immediately.
python3 scripts/new_content_starter.py story "Your Title" --live