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/ and src/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/ and website/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.