Audience: Product, design, engineering, QA
Purpose: Detailed tasks, expected outcomes, testing, and exit criteria for each wave
Last updated: June 2026
How to use this document
Each section maps to a milestone in 02-roadmap-and-milestones.md. For every wave:
- Complete action items in order where dependencies exist.
- Run tests before claiming exit criteria met.
- Update personal-loan-appflow-master-plan.md when AppFlow status changes.
Phase 0 — Publish sprint (Weeks 1–2)
Dates: Jun 29 – Jul 13, 2026
Milestone: M1 — Application Flow publish
Inspired risk focus: Value + Usability (can we demo the product story?)
Objective
Ship a clickable, stakeholder-ready Application Flow that proves the design system works as a product building block.
Action items
| ID | Task | Owner | Files / location | Depends on |
|---|---|---|---|---|
| P0-1 | Build step 1 landing (start) | Engineer + Designer | AppFlowStartScreen.tsx, personalLoanFlow.ts | Figma landing node |
| P0-2 | Analyzing → outcome demo routing | Engineer | AppFlowAnalyzingApplicationScreen.tsx, options helper | P0-1 |
| P0-3 | Verify bank prototype Continue | Engineer | AppFlowVerifyBankScreen.tsx | — |
| P0-4 | Confirm standalone app parity | Engineer | apps/personal-loan, @spring/personal-loan-appflow | P0-1, P0-2, P0-3 |
| P0-5 | Manual walkthrough checklist | PM + Designer | Appendix below | P0-1–P0-4 |
| P0-6 | Component swap efficiency audit | Designer + Engineer | Spreadsheet per screen | P0-4 |
| P0-7 | Validation gate | Engineer | CI-local | All above |
P0-2 approach options (pick one)
| Option | Description | Pros |
|---|---|---|
| A — Query param | ?outcome=success|foundation|declined auto-redirect after delay | Clean for demos |
| B — Dev buttons | In-screen "Simulate approved / declined / foundation" | Easier stakeholder testing |
P0-1 acceptance
- Email/value prop + CTA →
name - Shell progress ~7%
- Mobile floating CTA
- Registered in
personalLoanFlow.tswithstatus: 'ready'
Component swap efficiency test
Run during the publish sprint to validate DS product efficiency.
| Test | Method | Pass criteria |
|---|---|---|
| Coverage audit | Inventory each AppFlow screen → @spring/ds-react imports vs raw HTML/custom | ≥90% interactive UI uses DS components |
| Swap test | Pick 3 screens; replace one custom element with nearest DS component | Swap in <2 hours; no visual regression in PageMapPopup |
| Token compliance | Scan for hardcoded hex outside token fallbacks | No new literals; log existing for P2 cleanup |
| Restyle test | Change one semantic token → npm run tokens:sync → restart dev | AppFlow restyles globally without per-screen edits |
Testing
npm run lint
npm run build
npm run build:personal-loan
Manual walkthrough (minimum paths):
- Happy path:
start → name → loan-amount → … → verify-income → analyzing → application-success - Declined outcome: analyzing →
application-declined - Foundation cross-sell: analyzing →
application-foundation - Flow map: click tile → Open view → mobile toggle
- Standalone: repeat path 1 on
/personal-loans/start
Exit criteria (M1)
- All P0 action items complete
- Component coverage ≥90%
- Walkthrough checklist signed by PM + designer
- lint + build pass for both apps
Manual walkthrough checklist (appendix)
| # | Step | Desktop | Mobile popup | Pass |
|---|---|---|---|---|
| 1 | Start landing renders; CTA → name | |||
| 2 | Name → loan-amount → purpose-of-loan chain | |||
| 3 | Employment branch (at least one path) | |||
| 4 | Verify bank → verify identity (not dead-end) | |||
| 5 | Analyzing → each outcome without manual URL | |||
| 6 | Flow map tile preview matches live step | |||
| 7 | Standalone app matches gallery flow |
Phase 1 — Internal validation loop (Weeks 3–4)
Dates: Jul 14 – Jul 27, 2026
Milestone: M2 — Internal validation complete
Inspired risk focus: Value + Usability + Business viability
Objective
Gather structured feedback from designers, stakeholders, and developers; produce a risk-ranked backlog.
Action items
| ID | Task | Owner | Output |
|---|---|---|---|
| W1-1 | Schedule designer review (90 min) | PM | Calendar invite + PageMapPopup demo |
| W1-2 | Schedule stakeholder demo (60 min) | PM | End-to-end narrative script |
| W1-3 | Schedule developer architecture review (90 min) | PM + Eng lead | Architecture notes |
| W1-4 | Run feedback sessions | All | Session notes per template below |
| W1-5 | Prioritize backlog by four risks | PM | Ranked backlog in master plan or tracker |
| W1-6 | Begin P1 delivery (parallel) | Engineer | See P1 tasks below |
P1 parallel delivery (if capacity allows)
| ID | Task | Source |
|---|---|---|
| P1-1 | Build complete-skipped-steps (step 21) | Master plan P1 |
| P1-2 | Wire skip/recovery paths | Master plan P1 |
| P1-3 | Purpose variant flag on loan-amount | Master plan P1 |
| P1-4 | Mobile pass on high-traffic screens | Master plan P1 |
| P1-5 | Promote loan-amount, purpose-of-loan to ready | Master plan P1 |
Review session templates
Designer review
| Topic | Questions |
|---|---|
| Visual fidelity | Does each screen match Figma intent? |
| Token fit | Are colours/spacing from tokens, not literals? |
| State coverage | Hover, focus, error, disabled — what's missing? |
| Component reuse | Any screen using custom UI that should be DS? |
Output: Design sign-off OR numbered change list with screen slugs.
Stakeholder demo
| Topic | Questions |
|---|---|
| Narrative | Does the flow tell a coherent product story? |
| Conversion moments | Are trust, urgency, and clarity right at key steps? |
| Outcomes | Do success/declined/foundation feel right? |
| Share readiness | Can we show this outside the team? |
Output: Go / no-go for broader sharing + top 3 concerns.
Developer review
| Topic | Questions |
|---|---|
| Package boundaries | Is DS / AppFlow / app separation clear? |
| Reuse | Can product teams import without copying gallery code? |
| Integration pain | What's hardest about consuming @spring/ds-react? |
| CI / deploy | What's missing for production-grade pipeline? |
Output: Architecture notes → input for Wave 2 RFC.
Testing
- Re-run M1 walkthrough checklist after any P1 changes
- Update master plan step statuses
Exit criteria (M2)
- All three review sessions completed
- Backlog prioritized with risk tags
- Stakeholder go/no-go recorded
- Master plan updated
Phase 2 — Architecture and DevOps alignment (Weeks 5–6)
Dates: Jul 28 – Aug 10, 2026
Milestone: M3 — Architecture aligned
Inspired risk focus: Feasibility
Objective
Align developers and DevOps on package consumption, CI, deployment, and publish path.
Action items
| ID | Task | Owner | Output |
|---|---|---|---|
| W2-1 | Draft Architecture RFC | Eng lead | docs/planning/architecture-rfc.md (create during wave) |
| W2-2 | Review RFC with DevOps | Eng + DevOps | Signed agreement |
| W2-3 | Add manual QA to CI | DevOps + Engineer | Updated .github/workflows/ci.yml |
| W2-4 | Build both apps in CI | DevOps | CI job covers gallery + personal-loan |
| W2-5 | Write deployment doc | DevOps | Hosting for each app |
| W2-6 | Add manual browser journey test | Engineer | start → analyzing → application-success |
Architecture RFC topics
| Topic | Current state | Decision needed |
|---|---|---|
| Package consumption | file: workspace, source-only | Keep vs add tsup build |
| App boundaries | Gallery + personal-loan + appflow package | Ownership diagram |
| External publish | Not published | Internal registry vs npm private — criteria |
| Token changes | Manual sync + dev restart | Document in CONTRIBUTING |
| manual QA | Local only | CI integration |
Testing
npm run lint
npm run build
npm run build:personal-loan
CI must pass on a clean PR before M3 sign-off.
Exit criteria (M3)
- Architecture RFC approved
- manual QA smoke in CI
- Both apps build in CI
- Deployment doc exists
Phase 3 — Injectable design system (Weeks 7–9)
Dates: Aug 11 – Aug 31, 2026
Milestone: M4 — Injectable DS proven
Inspired risk focus: Feasibility + Value
Objective
Prove Spring look-and-feel can be applied to any host app — even when not all components exist.
Adoption layers
| Layer | What ships | Host requirements | Available today |
|---|---|---|---|
| L1 — Tokens | css-variables.css + Tailwind theme | CSS import + Tailwind config | Yes |
| L2 — Primitives | Typography/spacing utilities | Tailwind + token CSS | Yes |
| L3 — Component bridge | Mapping doc: DS ↔ fallback | React + optional package | Partial |
| L4 — Full DS | @spring/ds-react install | React 19, Next transpile | After M3 publish decision |
Action items
| ID | Task | Owner | Output |
|---|---|---|---|
| W3-1 | Write injectable DS guide | Engineer | injectable-ds-guide.md |
| W3-2 | Pilot A — blank Next.js + L1 | Engineer | Timing log + screenshots |
| W3-3 | Pilot B — vibe-coded page + L1+L2 | Designer + Engineer | Timing log + before/after |
| W3-4 | Pilot C — confirm standalone app | Engineer | Parity checklist |
| W3-5 | Component gap matrix | Designer | DS component vs fallback table |
| W3-6 | Define fallback rules | PM + Designer | When to use raw HTML vs wait for DS |
Pilot pass criteria
- External-style app reaches typography/color/spacing parity in <4 hours using L1+L2 alone
- Gap matrix covers all AppFlow-critical inputs (TextField, SpringButton, modals, etc.)
Testing
| Pilot | Steps | Measure |
|---|---|---|
| A | New Next.js app → import token CSS → style a form | Time to Spring look |
| B | AI-generated page → apply L1+L2 → compare to gallery | Time + visual diff |
| C | Run personal-loan outside gallery chrome | Feature parity checklist |
Exit criteria (M4)
- Injectable guide published
- Pilots A, B, C pass
- Gap matrix complete
- M3 RFC gate satisfied (no premature npm publish)
Phase 4 — Playground and vibe coding (Weeks 10–12)
Dates: Sep 1 – Sep 21, 2026
Milestone: M5 — Playground operational
Inspired risk focus: Value (discovery lane) + Usability
Objective
Operationalize the Playground as the discovery lane where anyone can vibe-code before package graduation.
Current base
- Registry:
apps/design-library/src/gallery/playground/playgroundProjects.ts - Categories: Components, Pages, Live Prototyping
- 3 existing projects (Bloom V1/V2, application-flow live prototype)
Action items
| ID | Task | Owner | Output |
|---|---|---|---|
| W4-1 | Document submission workflow | PM | Template in playbook or CONTRIBUTING |
| W4-2 | Define status lifecycle | PM | exploration → pending-approval → graduated |
| W4-3 | Document graduation path | Engineer | Playground → package PR → gallery doc |
| W4-4 | Run one full graduation cycle | Designer + Engineer | ≥1 component or page in package |
| W4-5 | Embed preview guide | PM | How to share ?embed=1 URLs |
| W4-6 | Connect agentic workflow | Eng lead | Link to operational-manifesto.md |
Graduation criteria (component → package)
- Full state coverage (default, hover, focus, disabled, error where applicable)
- Token fit — no raw hex
- Designer approval goal met in playground project
- Gallery doc page created
- Exported from
packages/spring-ds-react/src/index.ts
Testing
Run one end-to-end cycle:
- Create playground project (exploration)
- Vibe-code or agent-generate UI
- Designer review → pending-approval
- Engineer PR to package
- Gallery doc page live
Exit criteria (M5)
- Workflow documented
- ≥1 graduation completed
- Embed URLs verified for stakeholder review
Inspired note: Playground is discovery — unapproved playground code is not production DS.
Phase 5 — Multi-brand and theme switching (Weeks 13–15)
Dates: Sep 22 – Oct 12, 2026
Milestone: M6 — Multi-brand theme demo
Inspired risk focus: Feasibility + Business viability (DPP/partner)
Objective
Demonstrate theme switching when core DS is stable and injectability is proven.
Prerequisites (gates)
- M4 injectable guide validated
- Token architecture supports semantic overrides (
--spring-semantic-*) - AppFlow critical path covered by DS components
Action items
| ID | Task | Owner | Output |
|---|---|---|---|
| W5-1 | Theme provider pattern | Engineer | data-theme CSS variable swap at root |
| W5-2 | Gallery theme switcher | Engineer + Designer | Toggle on foundation + AppFlow demo |
| W5-3 | Foundation flow as second brand | Designer | /library/page/appflow/foundation themed |
| W5-4 | Partner override spec | PM + Designer | DPP token override rules (not forked components) |
| W5-5 | Screenshot diff test | QA | 3 screens × N themes |
Testing
| Test | Pass criteria |
|---|---|
| Theme switch | AppFlow restyles without per-screen code changes |
| Partner override | Only brand tokens change; layout/spacing unchanged |
| Injectable compatibility | L1+L2 adoption still works with theme swap |
| Regression | M1 walkthrough still passes on default theme |
Exit criteria (M6)
- Theme switcher demo in gallery
- Foundation brand pilot complete
- Partner override spec documented
- No regression on default Spring theme
Cross-cutting testing matrix
| Layer | What | When | Command / method |
|---|---|---|---|
| Build | No regressions | Every PR | npm run lint && npm run build |
| Visual | Step preview | AppFlow work | PageMapPopup mobile/desktop |
| Journey | End-to-end click-through | M1, M3+ | manual browser or manual checklist |
| Component swap | DS efficiency | M1 sprint | Coverage audit spreadsheet |
| Token | Global restyle | Token changes | tokens:sync + clear .next + visual check |
| Injectable | External adoption | M4 | Pilot timing benchmarks |
| Human | Stakeholder sign-off | M2, each wave end | Review session templates |
Team responsibilities by wave
| Role | M1 publish | M2 validation | M3 arch | M4 inject | M5 playground | M6 theme |
|---|---|---|---|---|---|---|
| PM | Checklist, scope lock | Facilitate reviews | RFC input | Pilot criteria | Workflow owner | Partner spec |
| Designer | Start screen, QA | Lead review | Token gaps | Pilot B, gap matrix | Experiments | Theme visuals |
| Engineer | P0 tasks | P1 parallel | RFC, CI, manual QA | Pilots, guide | Graduation PR | Theme provider |
| DevOps | — | — | CI, deploy doc | Publish path | — | Hosting themes |
| Stakeholder | — | Demo + sign-off | — | — | — | Brand approval |
Related documents
| Document | Role |
|---|---|
| 02-roadmap-and-milestones.md | Dates and milestone summary |
| 04-product-decision-framework.md | When to rebrand vs feature vs UX |
| personal-loan-appflow-master-plan.md | P0/P1/P2 engineering detail |
| review-checklist.md | Pre-PR quality gate |