SCP · Build Log

48 Weeks to Full MVP

This was originally scoped as a 48-week plan, then compressed to a 2-month lean slice to hit a hard deadline. Engineering ran far ahead of that lean plan's own pace, so as of 2026-09-09 this page switches back to the full Master Concept scope — nothing already shipped gets re-cut, it just gets folded into the phase it actually belongs to. Nine phases, five tracks running in parallel: Claude Code carries Engineering; you carry Legal, Business Infra, Content, and Pilot development.

Day
52 / 336
Week
8 / 48
Tasks done
20 / 35
On track
Last updated 2026-09-09 (observability baseline, nightly logical backups, and a restore-tested recovery drill) · this page is the daily status — Claude edits it as work ships and redeploys
P0
4/5
P1
2/4
P2
2/5
P3
3/4
P4
1/2
P5
3/3
P6
4/6
P7
1/3
P8
0/3
Engineering (Claude Code)Legal & Compliance (you + counsel)Business Infra & Payments (you)Content & Curriculum (you)Pilot & Business Development (you)
P0

Foundation & ADRs

Weeks 1–4
4 / 5

Lock the technical decisions and data model so every later phase builds on solid ground — before writing feature code.

ENGLock architecture decisions (Vercel + Next.js hosting, Neon Postgres, Prisma 7 with driver adapters, hand-rolled session auth) and ship entity schema v1 + permission matrix (authz.ts) to production
INFRAHosting + database vendor chosen and provisioned (Vercel project, Neon Postgres via Marketplace integration)
INFRAObject storage vendor chosen and wired up — Vercel Blob, real image upload for club logo/banner and profile avatars (URL fields kept as a manual fallback). Search still not needed — nothing to search yet with one club's worth of content.
CONTENTFinalize brand identity and logo
PILOTPilot club identified — already lined up rather than sourced through a scouting process
MILESTONEFoundation locked — hosting/DB/auth decided, entity schema v1 live in production
P1

Identity, Auth & Learning Core

Weeks 5–10
2 / 4

Everything else depends on identity, permissions, and the learning state machine being correct — get this right before building on top of it.

ENGIdentity, sessions, org roles/relationships, and the Learning Engine core: learning states, Coach-Assessed flow (PASS/PARTIAL/NOT_YET/REASSESS) with evidence, append-only Learning Record ledger
ENGGuardian relationships — real account-to-account linking (minor names a guardian's email, guardian confirms from their own account), not just a signup checkbox
LEGALEngage Indonesian counsel; first drafts of Privacy Policy, Terms of Use, Guardian Agreement
INFRAApply for a payment gateway business account and start KYC — worth starting now in parallel, since this is a calendar-time blocker regardless of when engineering gets to billing
MILESTONEIdentity + Learning Engine working end-to-end
P2

Public MVP Surface

Weeks 11–16
2 / 5

The part of SCP anyone can open without a club relationship — this is what "public launch" means in the Master Concept.

ENGDiscover surface: Skate Spots with a real verification workflow (propose → admin publishes status), Communities, portable Coach public profiles, Events
ENGOnboarding questionnaire: a one-question dashboard prompt ("which discipline are you here for?") once 2+ disciplines have real content, sets a UI-only preference — never gates any discipline's content
LEGALIterate on guardian consent UX and a data retention/deletion matrix with counsel
INFRASandbox payment integration and a webhook test harness
CONTENTPractitioner workshop to validate the skill taxonomy (Urban, Slalom, Aggressive, Speed)
MILESTONEPublic MVP browsable
P3

Club Academy Core

Weeks 17–23
3 / 4

The commercial product itself — a club can run its whole academy on SCP, seats aside.

ENGClub onboarding, branding, roster/roles, curriculum builder mixing SCP Core with Club Original content, seat/capacity tracking
ENGProgress Pass: OLD CLUB issues a snapshot, student shares the link, NEW CLUB reviews each skill (Accept/Partial/Reassess/Not yet) — a decision creates a real assessment at the reviewing club, never a blind copy. Built and verified against two real mock clubs since the pilot only has one.
CONTENTUrban beginner curriculum live: 4 modules, 9 lessons, 7 skills — researched against the real ICP Level 1 instructor syllabus and cross-checked across 7 independent coaching sources, not invented. Demo photos/video intentionally left for real instructor footage.
PILOTSign a pilot agreement with the lined-up club
MILESTONEClub Academy core complete
P4

Billing & Entitlements

Weeks 24–27
1 / 2

Turn seat capacity into a real, provider-neutral billing ledger — this is what makes the SaaS a business.

ENGBilling ledger: Subscription (TRIAL/ACTIVE/PAST_DUE/SUSPENDED/CANCELLED) + Invoice per club, superadmin console to create/mark-paid/void
ENGPayment provider adapter, idempotent webhooks, automated seat entitlement enforcement — blocked on a real gateway account existing
MILESTONEBilling live
P5

Trust, Governance & Admin

Weeks 28–31
3 / 3

Give SCP Admins the tools the manual-first MVP philosophy assumes they will eventually need.

ENGAudit log for sensitive actions (role changes, membership changes, assessments, invoices, session revocation)
ENGGovernance: clubs can propose additions to the shared SCP Core taxonomy, staff can file a dispute against an assessment on a student's behalf, superadmin reviews both at /admin/governance — approving a proposal creates the real skill, no blind auto-accept. Built and verified against a mock club since the pilot only has one.
ENGObservability baseline, hand-rolled like the rest of the stack: every uncaught server error is captured via Next's onRequestError hook (plus a browser-side error boundary), a public /api/health endpoint answers 200/503 on a real Postgres round-trip and keeps a debounced latency history, and /admin/ops shows errors grouped by route, p50/p95 latency, and backups. Still needs an external uptime pinger pointed at /api/health — nothing inside the app can page you about itself.
P6

Security, Compliance & DR

Weeks 32–34
4 / 6

Close the gap between "it works" and "it is safe to put real students, minors, and money through it."

ENGSecurity baseline: DB-backed login rate limiting, session revocation ("sign out everywhere")
ENGMFA — TOTP-based two-factor auth (authenticator app), opt-in per account, enrollment + login challenge + rate-limited code attempts
ENGEncryption at rest — verified, not built: Neon encrypts all data with AES-256 non-optionally, and enforces TLS 1.2/1.3 in transit, so no app-level work was needed here
ENGLogical backups + a restore-tested drill: nightly Vercel Cron (and on demand from /admin/ops) dumps every table to a JSON snapshot in a private Blob store with 30-day retention; scripts/restore-snapshot.mjs restores any snapshot into a scratch schema in foreign-key order and verifies every row count plus a sampled row per table — drilled successfully against a live snapshot
ENGNeon point-in-time recovery drill — Neon's own PITR is the second line of defence, but restoring a branch from it has never been exercised; needs a supervised session since it touches the production project, not something to do solo
LEGALCounsel-drafted Privacy Policy, Terms, and Guardian Agreement wired into the actual consent flows (the linking mechanism and lightweight notice cover the pilot for now, but the wording itself isn't counsel-reviewed)
MILESTONELegal, security & DR signed off
P7

Migration & Pilot Kit

Weeks 35–38
1 / 3

Build the one-time tooling a real pilot club needs to bring its existing roster onto SCP.

ENGMigration importer: CSV roster upload with a real staged pipeline (parse → validate → preview → confirm), an existing SCP account auto-joins, everyone else gets a named invite link to send manually — no email pipeline yet. Pilot onboarding kit tooling still not built; built and verified against mock roster data since the pilot only has one club so far.
CONTENTOnboarding kit content (guides, templates)
PILOTCollect the pilot club's legacy roster/data for migration mapping
MILESTONEMigration tool + pilot kit ready
P8

Pilot Launch & Validation

Weeks 39–48
0 / 3

Put the real club on the platform and find out which of the docs' PROPOSED and OPEN items were right.

ENGDaily monitoring and fast fixes while the pilot club runs real classes
PILOTOnboard the pilot club live — enter the real roster and curriculum content, brief the instructor(s)
PILOTMonitor usage; validate seat pricing and Discover engagement against real behavior
MILESTONEPilot club fully onboarded and running real classes

Still blocked on external factors

Not cut — each of these needs something other than more code: a KYC'd provider account, a lawyer, a second club, or domain expertise that can't be compressed.