Features
Canonical system design intent for the Metrognome codebase. Each feature is a folder containing the spec plus implementation plans, ralph prompts, research notes, and post-mortems. See ADR-016 for the source-of-truth chain (business > spec > code) and the spec/code coexistence rule. Spec/plan/prompt conventions: aaron-hogan/ralph.
When a spec disagrees with code, fix one of them — they never coexist contradicted. Authority chain: business > spec > code.
Layout per feature
features/<name>/
spec.md canonical design intent
plan.md implementation plan with **Status:** + checkboxes (ralph)
prompt.md ralph protocol for this divergence
progress.txt cross-iteration learnings (auto-grown)
research.md background, when needed
runbook.md ops procedure when applicable (e.g., burst-runbook for incidents)
retro.md post-mortem when applicable
deploy-checklist.md one-time deploy artifacts
Strict folder-always — every feature is a folder, even single-file ones.
Index
| Feature | Code | Purpose | Status |
|---|---|---|---|
| stripe-webhook-ingress | apps/api/src/app/api/stripe/webhooks/route.ts, apps/api/src/services/shared/WebhookEventService.ts |
Ingress/transport: signature verification, durable persistence, idempotency, claim/lease/retry, reconciliation | initial (done) · hardening (done) |
| posthog | apps/web/src/lib/tracking.ts, apps/api/src/lib/analytics/, apps/web/src/app/providers.tsx |
Replace Umami with PostHog Cloud — funnels, session replay, identification | in-progress |
| privacy-compliance | apps/web/src/app/(marketing)/privacy/page.tsx, apps/web/src/lib/tracking.ts, apps/api/src/lib/meta/, apps/web/src/app/layout.tsx |
US-only privacy floor: accurate policy, opt-out propagated to Pixel + CAPI + Google Ads, GPC honoring, DSAR intake | in-progress |
| bookkeeping | (data project) | Per-location LLC bookkeeping with penny-perfect Stripe reconciliation. Multi-layer pipeline. | research / planning |
| payment-record-architecture | apps/api/src/services/**/*Payment*.ts |
ADR-008 unified Payment model. Eliminates Stripe metadata dependencies, creates records at checkout not in webhooks. | shipped (see deploy-checklist.md) |
| permission-redesign | apps/api/src/utils/auth/role-check.ts |
ADR-006 permission system redesign — scoped role checks | planning |
| sms | (not started) | SMS via Twilio for member notifications | research |
| stripe-data-pipeline | (foundational for bookkeeping) | ADR-007 Stripe data sync pipeline | planning |
| studio-reference | apps/web/src/app/(staff)/studios/ |
Staff studio reference page | planning |
| staff-ui-redesign | apps/web/src/app/(app)/staff/, apps/web/src/components/organisms/forms/ |
Replace mixed edit/display detail pages across all staff entities with read-only views + Vaul drawer sheets; canonical Activity (audit log) section, entity-bound row actions, single Stripe URL helper, User MG ID added | spec · design |
| unified-cherry-city-lp | apps/web/src/app/(landing)/lp/cherry-city/, apps/web/src/lib/tracking.ts, apps/api/src/lib/meta/ |
Replace dual /cherry-city/{tour,hourly} LPs with a unified /lp/cherry-city; pain-led hero, monthly/hourly fork, new LandingFunnelChoice Pixel + CAPI event for unified Meta optimization |
spec · done |
| cherry-city-ppc-prospecting | (Meta Ads Manager — no code) | Phase 1 Meta paid prospecting campaign driving the unified LP — Traffic objective, LPV optimization, awareness + retargeting-pool building. Companion to unified-cherry-city-lp. |
spec |
| market-landing-pages | apps/web/src/app/(landing)/lp/[marketSlug]/, apps/web/src/components/organisms/marketing/, apps/api/prisma/schema.prisma (LocationGroup) |
Tour-driven /lp/[marketSlug] template (Salem first, Portland for free). Replaces /lp/cherry-city. Hero tour-form → direct TourSchedulerModal hand-off (no auth), locations-near-you (IP geo), 3-fork to /monthly /hourly /groups. |
spec · done |
| ai-workspace | (Claude Cowork plugin library — separate mg-plugins repo, no code in this monorepo) |
Private library of Claude Cowork plugins shaped by the Metrognome org model — Platform services + Pillars + Universal layer. Plugins encode procedure (SOPs); Drive remains the human artifact surface. | spec |
| make-music-salem-comp | apps/web/src/app/(landing)/lp/make-music-salem/, apps/api/src/services/scheduling/mms-comp.ts, apps/api/src/app/api/mms-comp/ |
Time-bounded free hourly rehearsal at MG10 Cherry City for Make Music Salem 2026 artists. Manual STUDIO_MONTHLY→HOURLY flip, dedicated LP + modal booker, paymentMethod: 'FREE' with hardcoded resource-ID/window allowlist. One-off. |
spec · in-progress |