ForgeKitFORGEKIT

Build Log

MedinaCHF — from scaffold to live production

July 30, 2026

The whole MedinaCHF community platform, built and shipped over two days: scaffold, RSVP/events, coordinator ops, notifications, planning board, an auth-model rework, and a real production deploy at medinachf.forgekits.build.

MedinaCHFVerticalDeployBackfill
10
commits retro'd here (initial scaffold through Clerk-role fix) — a separate retro already covers the 11th, the AI polls/drafts commit
1
production deploy — live at medinachf.forgekits.build
0
session JSONs written while any of this work actually happened — this retro is a same-week backfill, not a live record

Timeline

Day 1
Scaffold + Resend + dues reminders
Full app scaffold, Clerk auth, Neon/Drizzle schema, first email triggers, scheduled dues-reminder cron
Day 1
Milestone 3 — Events/RSVP, Announcements, Family Profile, Member Home
Plus a real Clerk org-activation bug found and fixed live
Day 1
Milestone 4 — coordinator operations
Attention Needed, Age Distribution, Event/Planner assignment, payments CSV export
Day 1
Our Year Together planning board + Notification Preferences
Opportunities/claims workflow; the one real §16.2 opt-out
Day 2
Drop Clerk Organizations — plain role-based auth
Production Clerk org plan would have gated at 20 members; MCHF needs ~60-80
Day 2
First production deploy
New Vercel project, custom domain, real Google OAuth, Deploy Gate transcript layer added
Day 2
Defensive fix — Courtney's role metadata
Doubly-nested public_metadata silently broke her coordinator check

What shipped

products/medinaCHF/ — full app scaffold: public pages, coordinator dashboard, applications/inquiries/payments actions, Clerk auth, Neon/Drizzle schema (e98969c)

products/medinaCHF/ — Resend email wrapper (5 real triggers) + scheduled dues-reminders cron route, bearer-secret authed (ab0c166)

products/medinaCHF/ — Events/RSVP schema + 3-tier visibility query layer + requireMember guard + real Clerk org-activation fix (c482cbe)

products/medinaCHF/ — Milestone 4 coordinator ops: Attention Needed default landing page, deterministic Age Distribution, Event/Planner assignment, payments CSV export (be38ca4)

products/medinaCHF/ — Announcements schema + compose/feed/detail, Family Profile self-edit, real /member Home landing page, nav access fixes (712d1da)

products/medinaCHF/ — clearer coordinator-facing invitation button labels (f497c92)

products/medinaCHF/ — Our Year Together planning board: opportunities/claims workflow, coordinator confirm queue, member claim/progress screens, automated planning-commitment reminder (b2d15f3)

products/medinaCHF/ — Notification Preferences: families.routineEmailOptOut, the one real §16.2 opt-out; createAnnouncement now respects it (c417e3e)

products/medinaCHF/ — dropped Clerk Organizations entirely, moved to plain role-based auth (MCHF_ORG_ID constant + publicMetadata role claim) to avoid a paid-plan member-count gate (b56831e)

products/medinaCHF/ — first production deploy to medinachf.forgekits.build: new Vercel project, custom domain via Cloudflare DNS, CLERK_DISABLE_AUTO_PROXY fix, real Google OAuth credentials, Deploy Gate transcript layer (gate-typecheck.mjs) added to this app for the first time (94427c6)

products/medinaCHF/components/SiteHeader.tsx — force-dynamic guard + fixed Courtney's doubly-nested Clerk role metadata (884b15c)