Trevor PaughSystems engineer
Trevor PaughProject Chronicles

Chronicles / Cookbook

CI/CD and one item per recipe

Milestone

Deploys moved to GitHub Actions with OIDC, no long-lived keys, and a verify step that hashes what CloudFront serves against what was built. The database changed from one document per book to one item per recipe, with revision snapshots and an admin restore.

A push to main is a deploy

From 2026-09-20 to 2026-09-22 deployment moved out of a terminal. GitHub Actions assumes an AWS role through OIDC, so there are no access keys to rotate or leak. After each deploy a verify step fetches the live page and the Lambda’s reported version and compares hashes against the build, failing the run if they differ. The rule the runbook states is simple: a push to main is a deploy, and a deploy either verifies or fails.

One item per recipe

The one-document-per-book shape hit DynamoDB’s 400 KB item limit as the starter books grew. On 2026-09-22 the storage became one item per recipe, with the book’s metadata in its own item.

Two things came with that:

  • Revision snapshots. Each save of a recipe keeps the previous version, so an accidental overwrite is recoverable.
  • Admin restore. A small tool to put a snapshot back, used once already after a user wrote to the wrong recipe.

The optimistic-concurrency check moved from the book to the recipe, which also meant two people editing different recipes in the same book no longer collide.