DOC · BUILD-PLAN-01 · pairs SYS-MAP-01 + WASC-MAP-01 · squared

Build & delivery plan — draft every page, wire it to Supabase, gated

Custom Image · DRGx Design
59 pages · 8 gates
clean unlock · client acceptance per gate
METHOD

Two plans, one gate at a time

● Plan A — draft all pages

Front-end first, on seeded data

  • One squared design system + shared app shell; the built ops core is the template.
  • Every page drafted as a real screen with seeded data before any backend.
  • Each page ships its true states: empty, loading, error, populated.
  • Output: a clickable, seeded prototype of all 59 pages.
● Plan B — wire to Supabase

Schema, then policies, then live data

  • Schema + multi-tenant RLS first, then auth/roles.
  • Swap each page's seed for live queries — no UI rework.
  • Edge functions for workflows; Storage for files; Realtime where it earns it.
  • Output: each gate flips seeded → live in place.
● Unlock model — clean gates

Three layers of gating

  • Roles (auth): applicant · student · instructor · staff.
  • RLS: every row scoped by tenant_id + role policy.
  • Entitlements: feature_flags per tenant — a feature stays locked until its gate is accepted.
  • Delivery = gates: each has exit criteria + client sign-off before the next opens.
GATES

The eight gates

draft ▸ wire ▸ unlock
G0Foundation & accessthe base every other gate stands on~3–4 wks
draft

Design system (squared), shared shell, and the sign-in screens for each role.

design-systemapp-shellAPP-01INS-01
wire

Supabase project, core schema, multi-tenant RLS, auth roles, and the feature-flag system itself.

tenantsprofiles·rolesRLS policiesfeature_flagsaudit_log
unlocksA user signs in, lands in the right role, sees only their tenant — and a flag can lock or unlock any feature.
G1School ops core — livethe enrollment + tracking demo, made real~4–5 wks
draft

Already drafted as the working demo — refit to squared and the real catalog.

OPS-01OPS-02OPS-03OPS-04OPS-05OPS-06
wire

The curriculum, cohorts, enrollments and per-track progress persist; the enroll workflow runs server-side.

coursesmodulescohortsenrollmentsenroll-student()
unlocksStaff enrolls a real student into a real cohort; progress persists; the dashboard reflects live data.
G2Marketing + applicant pipelinethe tools that build enrollment~5–6 wks
draft

Public school-first site on real content, plus the full intake-to-offer pipeline.

MKT-01…11ENR-01…09
wire

Public forms write to the DB; staff move applicants through stages; the waitlist auto-offers lab seats.

applicantsinfo_sessionsofferswaitlistsubmit-application()promote-waitlist()
unlocksThe public applies; staff process the funnel to an offer; accepting an offer creates an enrollment.
G3Student app + onboardinggetting through the program~5–7 wks
draft

Onboarding, dashboard, course & online player, lab sessions, schedule, submissions, certificate.

APP-02…12
wire

Submissions to Storage, progress per track, attendance, and certificate issuance on completion.

submissionsStorageattendancecertificatesissue-certificate()
unlocksA student logs in, finishes an online module and a lab session, submits a project, and earns a certificate.
G4Instructor apprun cohorts, grade, author~4–6 wks
draft

Instructor onboarding, dashboard, cohort detail, attendance, review, curriculum builder.

INS-02…08
wire

Attendance + grading persist; curriculum authoring writes courses/modules; instructor quals on file.

reviewsinstructor_qualstake-attendance()review-submission()publish-module()
unlocksAn instructor takes attendance, reviews a submission, and publishes a module to a cohort.
G5Scheduling — equipment-awarethe hard constraint~4–5 wks
draft

Term planner, equipment/resource manager, schedule builder, conflict view, master calendar.

SCH-01…05
wire

Equipment and rooms as bookable resources; sessions generated from the 12-week pattern; conflicts blocked.

resourcessessionsbookingsgenerate-sessions()check-conflicts()
unlocksStaff plan a term across all six trades and the system blocks an equipment double-booking.
G6Accreditation layer — WASCevidence, self-study, reporting~5–6 wks
draft

SLOs, standards crosswalk, evidence repository, self-study, action plan, CI dashboard, report generator.

ACC-01…08
wire

Standards + SLO tables, a mapping table, and an evidence flag added to existing records; reports build from live data.

standardsslosstandard_mappingsevidenceaction_plangenerate-report()
unlocksA course maps to standards + SLOs, a submission is flagged as evidence, and an annual report drafts itself from live data.
G7Funding, verification & scaleclose the loop, open the doors~4–5 wks
draft

Instructors mgmt, reporting, donations, public certificate verification, settings, donate page.

OPS-07…11MKT-09
wire

Donations + tuition credits, a public verify endpoint, and tenant onboarding for a second campus.

donationstuition_creditsrecord-donation()verify-certificate()onboard-tenant()
unlocksA donation ties to tuition credit, a certificate verifies publicly, and a second tenant runs fully isolated.
DELIVERY

How the gates bill & accept

G0 + G1 = the foundation milestone — Supabase stood up and the ops core live — anchored at the $5,000 starting build. $750/mo managed infrastructure runs from G1 onward (hosting, monitoring, backups, security upkeep).

G2 → G7 are scoped and quoted per gate, each a clean acceptance milestone: the client reviews the gate against its exit criterion, signs off, and that gate's features unlock for their tenant. Gates are sized to map onto grant cycles, so the build can be funded the way tuition is — a school that seeks grants for student tuition can seek them gate by gate for the platform too.
Why front-end-first matters for a client delivery: the seeded prototype (Plan A) is something Custom Image can show a board or a funder before the backend exists — it de-risks every gate. Plan B then lights each screen up without changing what was approved. Nothing the client signed off on gets rebuilt; it just goes live.