Build Log · July 30, 2026

MedinaCHF — from scaffold to live production

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.

  • MedinaCHF
  • Vertical
  • Deploy
  • Backfill
commits retro'd here (initial scaffold through Clerk-role fix) — a separate retro already covers the 11th, the AI polls/drafts commit
10

commits retro'd here (initial scaffold through Clerk-role fix) — a separate retro already covers the 11th, the AI polls/drafts commit

production deploy — live at medinachf.forgekits.build
1

production deploy — live at medinachf.forgekits.build

session JSONs written while any of this work actually happened — this retro is a same-week backfill, not a live record
0

session JSONs written while any of this work actually happened — this retro is a same-week backfill, not a live record

Timeline

  1. Day 1

    Scaffold + Resend + dues reminders

    Full app scaffold, Clerk auth, Neon/Drizzle schema, first email triggers, scheduled dues-reminder cron

  2. Day 1

    Milestone 3 — Events/RSVP, Announcements, Family Profile, Member Home

    Plus a real Clerk org-activation bug found and fixed live

  3. Day 1

    Milestone 4 — coordinator operations

    Attention Needed, Age Distribution, Event/Planner assignment, payments CSV export

  4. Day 1

    Our Year Together planning board + Notification Preferences

    Opportunities/claims workflow; the one real §16.2 opt-out

  5. Day 2

    Drop Clerk Organizations — plain role-based auth

    Production Clerk org plan would have gated at 20 members; MCHF needs ~60-80

  6. Day 2

    First production deploy

    New Vercel project, custom domain, real Google OAuth, Deploy Gate transcript layer added

  7. 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)