Full Deployment, End to End
Today was about closing the loop: generate everything, move assets, and ship.
Key wins:
- Generated all 37 personality cards with stable API runs.
- Deployed story JSON, 56 markdown nodes, scenes, and cards.
- Added the content collection entry so Astro picks up the new story.
I also validated the actual on-site experience path-by-path. It is easy to say “deployed,” but the story needs to load cleanly from the library page, render the cover, and preserve navigation between choice nodes. The build was green, but I still verified the full flow to make sure static generation produced all 56 pages.
The biggest relief: the card pipeline finally felt predictable. The earlier instability forced manual retries, so having a clean full batch run was a big step toward a dependable production cadence.
What Was Actually Shipped
Here is the real deployment footprint:
- Story JSON and 56 markdown nodes in
public/stories/i-robot/ - 56 scene images in both
public/andsrc/assets/for Astro optimization - 37 personality cards in
public/stories/i-robot/cards/ - Cover image in
public/covers/ - Content collection entry in
src/content/novels/i-robot.md
If any one of those is missing, the site builds but the experience feels broken. That’s a dangerous state because it looks “fine” until you click into the story.
The Image Gotcha
One real-world problem surfaced during deployment: images didn’t render unless they were also in src/assets/. Astro’s optimization pipeline expects assets there, even if the files are in public/.
Fix:
- Keep scenes in both
website/public/stories/andwebsite/src/assets/stories/.
I wrote down a new deployment checklist so I do not regress:
- Story JSON in
public/stories/ - Markdown nodes in
public/stories/[titleId]/ - Scenes duplicated in
src/assets/stories/[titleId]/ - Covers in
public/covers/ - Content collection entry in
src/content/novels/
The Hidden Cost: Card Reliability
Cards are the shareable reward at the end, which means they are the product’s “viral artifact.” If card generation is unstable, everything downstream breaks: social sharing, screenshots, and even the final emotional punch of the story.
This is why today’s stable batch run mattered. It wasn’t just a technical fix. It was a product milestone.
Insight
The generator is only half the pipeline. The “deployment path” is just as important. A simple checklist for assets and content collections prevents hours of confusion later.
This also reinforced a broader principle: if deployment isn’t standardized, every story becomes a new “special case.” The goal is repeatable steps, not heroic debugging.
Next
I want to turn the checklist into a single scripted deploy command. If I can automate asset placement and content collection updates, then each story pack becomes a predictable, low-friction release.