Deck ↔ heywood-inventory/
M1–M10. Each row is a 60-second recovery: open the file, re-paste the prompt, walk the 5-min demo.
| Module | File(s) to open in heywood-inventory/ |
Prompt block in docs/PROMPTS.md |
If you only have 5 minutes |
|---|---|---|---|
| M1Full-Stack Frontierframing | No code. Project deck slide 0.6. | (no prompt — talk track only) | Open the running app and walk Dashboard → Chat (“morning brief”) → Settings → role picker. Two minutes, wide-angle, no editor. |
| M2Environment Setupsetup | Nothing in repo to demo — this is install-and-verify only. | “Module 2 · Environment Setup” — Install + verify + Scaffold the project skeleton. | Run go version, node -v, docker --version on your laptop. Then mkdir my-staff-app && cd my-staff-app && go mod init my-staff-app. Show the empty skeleton. |
| M3Backend from Scratcharch 1/4 | cmd/server/main.gointernal/api/router.go |
“Module 3 · Backend from Scratch” — Prompt 1 health endpoint, Prompt 2 extract router + helpers, Prompt 3 hardcoded items. | go run ./cmd/server -dev, then curl localhost:8080/api/v1/health. Twenty-second silence. curl localhost:8080/api/v1/items returns five items. |
| M4Data Layerarch 2/4 | internal/data/store.go (interface)internal/data/json_store.godata/items.jsoninternal/api/handlers.go (items) |
“Module 4 · Data Layer” — Prompt 1 Store interface + JSONStore, Prompt 2 seed data, Prompt 3 rewire /items + add /items/{id}. |
Open store.go and read the interface aloud. Then curl localhost:8080/api/v1/items/1. The interface is the lever — everything M9 depends on this. |
| M5Frontend from Scratcharch 3/4 | web/vite.config.tsweb/tailwind.config.tsweb/src/api/client.tsweb/src/pages/Items.tsx |
“Module 5 · Frontend from Scratch” — single combined prompt: Tailwind + proxy + items table. | Two terminals. npm run dev in web/. Load localhost:5173 — the items table renders. If CORS errors hit, project vite.config.ts proxy block, do not patch the backend. |
| M6Pages & Navigationbuild | web/src/App.tsxweb/src/layouts/Layout.tsxweb/src/pages/Dashboard.tsxweb/src/pages/ItemDetail.tsx |
“Module 6 · Pages & Navigation” — Prompt 1 routing + sidebar layout, Prompt 2 item detail, Prompt 3 dashboard + /stats. |
From the running app: click an item title → detail page loads via /items/:id. Click Dashboard → four stat cards + recent activity. Same data, three views. |
| M7AI Chat Integrationapex | internal/ai/chat.goweb/src/pages/ChatPage.tsxinternal/api/handlers.go (chat wire-up) |
“Module 7 · AI Chat Integration” — Prompt 1 chat service, Prompt 2 lookup_items tool, Prompt 3 chat page + markdown. |
Open /chat. Ask “what are my high-priority items?” Watch the server log a tool call before the answer comes back. Applaud once. |
| M8Auth & Middlewarebuild | internal/middleware/middleware.gointernal/api/handlers.go (auth)web/src/components/RolePicker.tsx |
“Module 8 · Auth & Middleware” — Prompt 1 middleware package, Prompt 2 auth endpoints + role picker, Prompt 3 RBAC across handlers. | Open the role picker in the header. Switch User → fewer items, no Settings link. Switch Admin → everything. DevTools → Application → Cookies → show heywood_role. |
| M9External Integrationscompress | Path A: internal/data/sqlite_store.go (build tag sqlite) + sqlite_stub.go.Path B: internal/integrations/graph.go. |
“Module 9 · External Integrations” — Path A · SQLite (default) or Path B · Microsoft Graph. | Path A: go get modernc.org/sqlite && go build -tags sqlite ./cmd/server && ./server -db sqlite -dev. POST a new item, restart, GET to confirm persistence. Same Store interface — that’s the receipt for M4. |
| M10Docker & Deployarch 4/4 | Dockerfileinternal/api/router.go (SPA fallback, second half).dockerignore |
“Module 10 · Docker & Deployment” — single combined prompt: SPA fallback + multi-stage Dockerfile. Optional Azure block at end. | docker build -t my-staff-app . then docker run -p 8080:8080 -e OPENAI_API_KEY=$OPENAI_API_KEY my-staff-app. Stop local dev servers. Reload localhost:8080 — whole app from one container. |
How to use this sheet during the live build
- 3-Minute Rule fires twice on a student. Glance at this sheet. Read the row.
- Open the file(s) on your second monitor — never the projector. Describe the diff aloud as a hint.
- Re-paste the prompt block from
docs/PROMPTS.mdinto the student’s chat. Watch one more turn. - If still stuck and the room is waiting, walk the 5-minute demo path on the running reference app, then pair the student with a buddy and move on.
Anchor. The reference exists to recover, not to lead. Never start a module by reading from heywood-inventory/. The whole point of the day is the prompt → AI → debug loop.