docs(phase9): document commerce integration and Winter Break launch readiness

New: PHASE9_COMMERCE_AND_LAUNCH.md, WEBSITE_REGISTRATION_AND_CHECKOUT.md,
STRIPE_INTEGRATION_RUNBOOK.md, WINTER_BREAK_LAUNCH_CHECKLIST.md. Updated:
ROOTNODE_ACADEMY_BUSINESS_AND_PRODUCT_ARCHITECTURE.md (commerce boundary + PHASE 9 BUILT rows),
OFFERING_AND_REGISTRATION_MODEL.md (pricing, the payment/commerce boundary, three-status
principle), WEBSITE_ENROLLMENT_INTEGRATION.md (price fields, real agreement/checkout/webhook
sections replacing Phase 8 placeholders), WINTER_BREAK_CAMP_OPERATIONS.md (real payment step
replacing the manual placeholder).
This commit is contained in:
2026-08-27 09:06:04 -05:00
parent 281d60bc2d
commit 80a5f6e457
8 changed files with 884 additions and 74 deletions
@@ -98,15 +98,19 @@ unchanged). A registration becomes a real enrollment only once `confirmed`, via
`agreement_definitions`/`agreement_acceptances`): a versioned ACCEPTANCE RECORD, never legal
text authored by this codebase. See `docs/OFFERING_AND_REGISTRATION_MODEL.md`.
## Commerce boundary — unchanged, extended in documentation only
## Commerce boundary — real as of Phase 9
The existing boundary (`docs/WEBSITE_ENROLLMENT_INTEGRATION.md`) stands: the website owns
marketing/pricing/checkout, RootNode's platform owns everything after a verified commerce event.
Phase 7 adds a documented FUTURE flow (website → offering selection → registration → checkout →
verified commerce event → registration confirmed → enrollment activated) without implementing
any payment code. **BUILT NOW**: the existing `/api/integrations/enrollments` endpoint,
unchanged. **PHASE 7 BUILT**: the registration/offering model that future flow will plug into.
**FUTURE**: an actual commerce-event webhook confirming a registration.
The boundary itself is unchanged: the website owns marketing/pricing DISPLAY and the hosted
checkout experience, RootNode's platform owns the actual price (server-controlled, never
browser-supplied), payment verification, and everything after a verified commerce event. Phase 7
documented the flow; **Phase 9 built it for real**: an offering can carry a price
(`offerings.price_amount`/`price_currency`), a payment-provider abstraction (Stripe or a
deterministic in-process test provider — see `docs/PHASE9_COMMERCE_AND_LAUNCH.md`) creates a
hosted checkout session server-side, and a verified, idempotent webhook is the ONLY thing that
ever confirms payment and drives `registration confirmed → enrollment activated` — a browser
`?paid=true` redirect proves nothing and is never trusted. See `docs/
WEBSITE_REGISTRATION_AND_CHECKOUT.md` for the website's contract and `docs/
STRIPE_INTEGRATION_RUNBOOK.md` for going live with real Stripe.
## First commercial target: Winter Break Camp
@@ -141,6 +145,13 @@ planned this phase.
| Guardian communications (5 new notification templates, guardian recipient fallback) | PHASE 8 BUILT |
| Public offering read API + website registration submission contract | PHASE 8 BUILT (`docs/WEBSITE_ENROLLMENT_INTEGRATION.md`) |
| Offering agreement requirements + conversion blocking | PHASE 8 BUILT |
| Public registration flow (a real website-side form), payments, subscriptions | FUTURE |
| Offering pricing, payment-provider abstraction, hosted checkout, verified webhook | **PHASE 9 BUILT** (`docs/PHASE9_COMMERCE_AND_LAUNCH.md`) — Stripe test-mode + a deterministic in-process test provider; real Stripe live-mode validation is pending real credentials. |
| Agreement acceptance on the public registration contract | **PHASE 9 BUILT** — closes the gap Phase 8 left open. |
| Refund/cancellation recording (commerce status only, never auto-cascading) | PHASE 9 BUILT |
| Abandoned-reservation reaper, reservation expiry for paid offerings | PHASE 9 BUILT |
| Admin payment UI (price, payment/refund status, no card data) | PHASE 9 BUILT |
| A real website-side registration/checkout form (rootnodeacademy.com itself) | FUTURE — contract ready, form not built in this repo (separate repo, not RootNode-owned). |
| Live Stripe validation (real credentials, real card, real webhook from Stripe's servers) | FUTURE — application layer is done and Stripe-test-mode-tested; pending real Stripe credentials. |
| Subscriptions, membership billing, coupons, gift cards, installment plans, tax automation | FUTURE, explicitly out of scope |
| INIT_/COMPILE_ curriculum | FUTURE |
| School/library SIS integrations, parent portal | FUTURE, explicitly out of scope |
| School/library SIS integrations, parent portal, guardian login | FUTURE, explicitly out of scope |