Sprint Plans
6,253 words
This plan turns the PRD's v1 scope — founder-side search/booking/payment/review, mentor-side profile/availability/payout, and platform-side manual vetting/dispute handling — into a sprint-by- sprint build sequence a solo technical founder can execute directly, with an AI coding tool doing much of the line-level implementation. It assumes the recommended stack below, a 2-week sprint length, and a hard 4-month (17-18 week) ceiling to a public v1 launch. Nothing here invents scope beyond the PRD: no mobile app, no Structured Track package, no automated mentor-quality scoring. Where a task depends on a decision the founder hasn't made yet (e.g., which identity-verification vendor to use for mentor vetting), that's called out explicitly rather than silently assumed.
Sprint Overview & Assumptions
Team: one technical co-founder (former hardware PM, writing the code — likely with an AI coding tool such as Claude Code or Cursor doing a meaningful share of implementation) plus one part-time contract designer. No engineering co-founder, no QA hire, no dedicated DevOps. This shapes every sequencing decision below: nothing is scheduled that assumes a second engineer's parallel throughput, and every sprint budgets real founder-only hours, not a two-person team's combined hours.
Sprint length: 2 weeks. At a 4-month (roughly 17-18 week) timeline, that yields 8 sprints of 2 weeks each plus a half-sprint hardening/launch buffer (Sprint 8 is intentionally lighter). A 1-week sprint was considered and rejected: for a solo engineer context-switching between backend, frontend, and a marketplace payments integration, a 1-week cadence produces too much overhead in planning/review relative to actual build time, and a 2-week cadence gives enough room to land a vertical slice (e.g., "founders can complete a real booking") rather than partial horizontal layers.
Recommended tech stack (no strong founder preference stated, so recommended for a 2-person team that needs to move fast and will need marketplace payouts):
- Next.js (App Router) + TypeScript for the web app — one codebase for the founder-side and mentor-side experiences (both are "logged-in web app" surfaces, not fundamentally different products), server components for read-heavy pages (search, profiles), and Vercel or a comparable platform for zero-ops deployment, which matters a great deal when there is no DevOps role.
- PostgreSQL (via a managed provider — Neon, Supabase, or RDS) as the system of record. A marketplace's core entities (bookings, payouts, disputes) are inherently relational and need real transactions; this is not a data shape that benefits from a NoSQL store.
- Prisma as the ORM, for schema-as-code migrations a solo founder can review and roll back confidently, and because its generated types pair well with an AI coding tool inferring correct query shapes from the schema file directly.
- Stripe Connect (Express accounts) for mentor payouts and Stripe Checkout / Payment Intents for founder-side payment collection. This is the single highest-risk piece of technical/compliance surface in the whole build (see Risks & Mitigations) and is treated as its own sprint, not a bolt-on task inside a later sprint.
- Auth.js (NextAuth) with email magic-link plus Google OAuth for both founder and mentor accounts — no custom password storage to build or secure.
- Resend for transactional email (booking confirmations, payout notifications, dispute correspondence), Twilio deferred (SMS reminders are a nice-to-have, explicitly out of v1 scope per the PRD's own scope boundary).
- Cloudinary or Vercel Blob for mentor profile photo/credential-document uploads.
- Vitest + Playwright for automated testing — Playwright specifically because a marketplace's riskiest paths (booking → payment → payout) are end-to-end flows across two user roles, which unit tests alone can't meaningfully cover.
Assumptions made explicit because they shape sequencing:
- The contract designer delivers Figma for a given sprint's screens one full sprint ahead of the engineering work that implements them — e.g., Sprint 3's mentor-search UI is designed during Sprint 2, so engineering never blocks on design mid-sprint. This is the single most important process assumption in this plan; without it, a solo engineer has nothing to build against on day one of a sprint.
- The founder is the only engineer. Every task list below is sized against roughly 30-35 effective coding hours per 2-week sprint (accounting for founder time also spent on mentor recruitment, admin vetting, and general operating work that a solo founder can't delegate away).
- Manual, founder-performed mentor vetting (per the PRD's explicit v1 scope: "manually vet new mentor applications") is treated as an operational process running in parallel with engineering from Sprint 1 onward, not a feature to build — the only engineering work it requires is an admin interface to review and approve/reject applications (Sprint 2) and a status field driving what a pending mentor sees (Sprint 2).
- Stripe Connect's own onboarding review (Know Your Customer checks on mentor payout accounts) has turnaround time outside the founder's control — this plan front-loads Connect integration (Sprint 3) specifically so there's slack before payouts must work end-to-end for launch.
- No automated mentor-quality scoring, no mobile app, and no Structured Track package appear anywhere in this plan, matching the PRD's explicit v1 exclusions. Session video/calling is assumed to be external (Zoom/Google Meet link shared at booking confirmation, not an embedded video product) — building a native video layer inside a 4-month solo-founder timeline would consume a disproportionate share of the budget for a feature that off-the-shelf tools already solve well.
These are working assumptions to be pressure-tested, not confirmed outcomes.
Milestone/Sprint Breakdown
Sprint 1: Auth & Marketplace Foundations
### Sprint 1: Auth & Marketplace Foundations The skeleton every later sprint depends on: user accounts (both roles), the base data model, and a deployable app. No booking, search, or payment logic yet — this sprint exists so that Sprint 2 onward has real accounts and a real database to build against instead of mocked data. - Next.js App Router project scaffolded (TypeScript strict mode), deployed to a staging environment from day one (Vercel preview deployments on every PR) so "does it actually deploy" is never a surprise late in the project. - Postgres provisioned (managed, e.g. Neon), Prisma schema v1: `User` (with a `role` enum — `FOUNDER` / `MENTOR` / `ADMIN` — a single user table with a role flag, not separate tables per role, since a user's core identity fields are identical across roles and this avoids duplicate auth logic), `MentorProfile`, `Booking`, `Review`, `Payout`, `DisputeCase` stub tables (empty for now, populated by later sprints). - Auth.js wired: email magic-link (Resend) + Google OAuth, session handling, role-aware route protection (`/mentor/*` requires `MENTOR` role, `/admin/*` requires `ADMIN` role). - Base app shell: top nav (role-aware — a founder sees "Find a mentor," a mentor sees "My availability"), responsive layout (mobile-first, since founders will realistically check booking status from a phone even though there's no native app), design tokens landed from the designer's Sprint 0 exploratory Figma (colors, type scale, spacing) so every later screen inherits a consistent look from the start rather than a redesign pass at the end. - Signup flow: role selection at signup (founder vs. mentor), minimal required fields at this stage (email, name) — richer profile fields belong to Sprint 2's mentor-profile work. - CI: lint + typecheck + unit tests on every PR, blocking merge on failure — set up now, while the codebase is small enough that retrofitting CI later would mean fixing a backlog of violations instead of never accumulating them.
Sprint 2: Mentor Profiles & Manual Vetting
### Sprint 2: Mentor Profiles & Manual Vetting Mentors need somewhere to describe their expertise before search can mean anything, and the platform needs a way to keep unvetted mentors out of the public search index — this sprint builds both halves of that gate. - Mentor profile creation flow: company history (structured, repeatable fields — company name, years, role, not a single free-text bio blob, since search/filtering in Sprint 3 needs to query against structured expertise tags, not parse prose), named expertise tags (a curated, admin- maintained taxonomy — e.g. "DFM," "Supply Chain," "EMC/Safety Certification," "Tooling Negotiation," "Contract Manufacturer Selection" — picked from a fixed list, not free text, so Sprint 3's filtering is exact-match rather than fuzzy), hourly rate, headline, profile photo upload, and a short bio. - Mentor application status field (`PENDING_REVIEW` / `APPROVED` / `REJECTED`) — a mentor profile in `PENDING_REVIEW` is fully saved but never appears in public search, and the mentor sees a clear "Your application is under review" state instead of their own live profile. - Admin review queue: a simple internal list view (admin-role-gated) of `PENDING_REVIEW` mentors with their full submitted profile, an Approve/Reject action, and an optional rejection-reason note emailed to the applicant. This is intentionally the simplest possible interface — a table and two buttons — since the PRD scopes vetting as a manual founder process, not a feature requiring workflow automation. - Mentor-side availability groundwork: a calendar data model (`AvailabilitySlot` — day/time-range, recurring weekly pattern, timezone stored per mentor) even though the founder-facing booking UI that reads it doesn't land until Sprint 4 — building the data model here means Sprint 4 has real data to book against rather than needing to retrofit both the schema and a UI simultaneously. - Designer delivers: mentor profile creation form, admin review queue, and founder-side profile *view* screens (the read-only card a founder will eventually see in search results).
Sprint 3: Payments Foundation — Stripe Connect & Checkout
### Sprint 3: Payments Foundation — Stripe Connect & Checkout The highest-risk, most compliance-heavy piece of the entire build, deliberately scheduled as its own sprint before any booking UI exists, so integration problems surface with weeks of runway left rather than during launch week. - Stripe Connect Express account onboarding: mentors are prompted to complete Stripe's own hosted onboarding flow (identity verification, bank account linkage) from their profile settings — the platform never collects or stores raw bank details itself, Stripe's hosted flow handles that entirely, which meaningfully reduces both PCI/KYC surface area and the founder's own compliance burden. - `MentorProfile.stripeConnectAccountId` + `payoutsEnabled` boolean, kept in sync via Stripe Connect webhooks (`account.updated`) — a mentor cannot be marked bookable until `payoutsEnabled` is true, independent of their admin-vetting status; both gates must pass. - Stripe Payment Intents integration for founder-side payment collection at booking time, using Stripe Connect's **destination charges** model: the founder pays the full session amount, Stripe automatically splits it (80% to the mentor's connected account, 20% platform fee retained), which means the platform never has to run its own separate payout-calculation job — Stripe's own `application_fee_amount` parameter does the split atomically at charge time. - Webhook handler for `payment_intent.succeeded` / `payment_intent.payment_failed` / `charge.refunded`, each updating a `Booking.paymentStatus` field — built now, against test-mode bookings created directly in a seed script, since the real booking flow that creates these Payment Intents doesn't exist until Sprint 4. This intentionally decouples "does the payment plumbing work" from "does the booking UI work," so each can be debugged independently. - Test-mode end-to-end proof: a seeded mentor with a completed Connect onboarding, a seeded booking, a real Stripe test-mode card charge, and a real payout line item visible in the Stripe (test-mode) dashboard — the sprint's own concrete bar for "payments actually work," not just "the API calls don't throw." - No designer dependency this sprint (Stripe's own hosted onboarding UI is used as-is) — this is deliberate slack, since Sprint 3 is the highest engineering-risk sprint and shouldn't also be gated on design availability.
Sprint 4: Search, Filtering & Booking Flow
### Sprint 4: Search, Filtering & Booking Flow The first sprint where a founder can actually do the thing the product exists for: find a specific mentor and book time with them. - Mentor search page: expertise-tag filtering (multi-select against the Sprint 2 taxonomy — a founder can filter for "DFM" and "Supply Chain" simultaneously), plus filters for hourly rate range and general availability window (e.g. "available this week"). Server-rendered for the default (unfiltered) view for fast first paint; client-side re-fetch on filter change. Explicitly **not** in v1: any ranking/matching algorithm beyond a simple relevance/recency sort — the PRD scopes "search/filter," not automated matching. - Mentor profile detail page (public, once approved): full bio, expertise tags, rate, aggregate review rating (wired once Sprint 6 ships reviews; shows "No reviews yet" until then), and a "Book a session" CTA. - Booking calendar UI: renders a mentor's `AvailabilitySlot` data as bookable time blocks in the **founder's own local timezone**, converted from the mentor's stored timezone — this is a real correctness risk (see Dependencies & Sequencing and Risks & Mitigations), tested explicitly with a mentor in one timezone and a founder in another as a seeded test case, not just "looks right on one developer's machine in one timezone." - Booking creation flow: select a slot → confirm session length/rate → Stripe Payment Intent created (Sprint 3's plumbing) → on `payment_intent.succeeded`, `Booking` flips to `CONFIRMED`, the selected `AvailabilitySlot` is marked unavailable (preventing a double-book), and both parties get a confirmation email (Resend) containing session time in their own timezone and a placeholder for the video-call link. - Manual video-link step (matching the "external video tool" assumption above): the mentor pastes a Zoom/Meet link into the confirmed booking, which triggers a follow-up email to the founder — simple, explicitly not automated calendar/video API integration, which is out of scope for v1. - Designer delivers: search results grid/list, mentor detail page, and the booking calendar/ confirmation flow.
Sprint 5: Mentor Dashboard, Session Lifecycle & Payouts
### Sprint 5: Mentor Dashboard, Session Lifecycle & Payouts Mentor-side operational tools: managing upcoming sessions, marking them complete (which is what actually releases payment), and a payout history view. - Mentor dashboard: upcoming confirmed sessions, past sessions, and availability management (add/ edit/remove recurring `AvailabilitySlot`s from Sprint 2's data model, now with a real UI). - Session completion flow: after a session's scheduled end time passes, both the founder and mentor can mark it "Completed" (either can trigger it — this deliberately doesn't require both parties' confirmation, since a mentor waiting on an unresponsive founder to confirm would otherwise never get paid). A completed session is what triggers the Stripe Connect payout to actually settle (Stripe's own payout schedule handles the mentor's bank transfer timing; the platform's job is only correctly marking `Booking.status = COMPLETED` and letting the destination-charge split from Sprint 3 do its job). - No-show handling groundwork: a "Mark as no-show" action available to either party, which does **not** auto-refund or auto-pay — it flags the booking `NEEDS_ADMIN_REVIEW` and routes into the admin dispute queue (built fully in Sprint 7), since the PRD scopes no-show/dispute resolution as a manual admin process, not an automated one. - Payout history: a mentor-facing read-only list of completed, paid sessions and their net payout amount (rate minus 20% fee), sourced directly from Stripe Connect's own transfer records via the Stripe API rather than a separately maintained ledger table — avoids a whole class of "our numbers don't match Stripe's numbers" reconciliation bugs. - Founder-side session history: mirrors the mentor dashboard's past-sessions view, from the founder's side, as the anchor point for Sprint 6's review flow. - Designer delivers: mentor dashboard, availability management UI, payout history screen.
Sprint 6: Reviews & Founder-Side Polish
### Sprint 6: Reviews & Founder-Side Polish Reviews close the trust loop the whole marketplace depends on (a founder choosing between two similarly-tagged mentors needs a signal beyond a self-written bio), and this sprint also absorbs UI-polish debt intentionally deferred from the faster-moving earlier sprints. - Review flow: after a session is marked `COMPLETED`, the founder gets a one-time prompt (in-app + emailed) to leave a 1-5 star rating plus a short written review, tied to that specific booking (one review per completed booking, not a general "rate this mentor" free-for-all that could be duplicated or gamed). - Aggregate rating shown on mentor search results and profile pages (average of all their reviews, count shown alongside it — "4.8 (11 reviews)" rather than a bare average, since a bare 5.0 from one review reads very differently from a genuine 4.8 across a dozen). - Mentor-side visibility into their own reviews (read-only — no response/rebuttal feature in v1, matching the PRD's scope boundary against building a full reputation-management system). - Polish pass across Sprints 1-5's shipped screens: empty states (no bookings yet, no reviews yet, no availability set), loading states, and form-validation error messaging — deliberately batched here rather than gold-plated sprint-by-sprint, so early sprints could move at full speed on core mechanics first. - Email notification audit: confirm every state transition that should send an email actually does (booking confirmed, booking cancelled, session completed, review requested, payout sent) — a marketplace's trust depends heavily on both sides always knowing what just happened, and it's easy for one transition to get missed while iterating quickly through Sprints 3-5. - Designer delivers: review submission modal, review display components, and the empty/loading/ error states audited above.
Sprint 7: Admin Console — Disputes, Cancellations & Platform Health
### Sprint 7: Admin Console — Disputes, Cancellations & Platform Health The platform-side half of the PRD's scope that isn't "manually vet mentors" (already covered, Sprint 2): dispute/no-show handling and basic operational visibility, so the founder can actually run the marketplace day-to-day once real users are on it. - Dispute/no-show admin queue: every booking flagged `NEEDS_ADMIN_REVIEW` (from Sprint 5's no-show flow, plus a new founder/mentor-initiated "Report an issue" action on any completed or in-progress booking) lands here with the full booking context (both parties, session time, payment status). - Admin resolution actions: issue a full or partial refund (Stripe refund API, correctly reversing the destination-charge split so the mentor's portion is also clawed back when appropriate — tested explicitly against Stripe's own documented behavior for refunding a destination charge, not assumed), mark resolved with no refund, or manually re-open a booking for rescheduling. - Cancellation policy enforcement: a founder or mentor can cancel a confirmed booking up to a configurable cutoff (e.g. 24 hours before the session) for a full automatic refund with no admin involvement; a cancellation inside that window routes to the same admin queue above rather than auto-refunding, since that's exactly the judgment call the PRD scopes as manual. - Basic admin metrics view: total bookings, gross booking value, platform fee revenue, and open dispute count — a single dashboard page, not a full analytics product, but enough for the founder to sanity-check the marketplace's health without querying the database directly. - Mentor/founder account suspension: an admin action to disable an account (e.g. a mentor with repeated no-shows or a founder attempting chargeback abuse), which immediately removes a mentor from search and blocks a founder from booking, without deleting either party's historical data. - Designer delivers: admin queue table + detail panel, admin metrics dashboard (can be visually simple — this is an internal tool, not a customer-facing surface, so it gets proportionally less design investment than any founder- or mentor-facing screen in prior sprints).
Sprint 8: Hardening, Security Review & Launch
### Sprint 8: Hardening, Security Review & Launch A deliberately lighter half-sprint (roughly 1.5-2 weeks of the total 4-month budget) whose entire purpose is de-risking launch rather than adding features — no new user-facing functionality is planned here. - Full Playwright end-to-end suite covering the three riskiest cross-role flows: founder search → book → pay → mentor marks complete → payout settles → founder leaves a review; a no-show → admin dispute → refund; and a mentor's Stripe Connect onboarding from signup through `payoutsEnabled`. - Security pass: confirm every `/mentor/*`, `/admin/*`, and API route enforces role checks server- side (not just hidden client-side nav — a role check that only hides a link is not a security boundary), confirm Stripe webhook signatures are verified on every webhook endpoint, confirm no Stripe secret keys or database credentials are exposed to the client bundle, and run a dependency vulnerability scan. - Load/cost sanity check: confirm the hosting and database tier can handle a realistic launch-week load (a few hundred concurrent sessions, not thousands) without surprising cost spikes, and confirm Stripe is switched from test mode to live mode with a real bank account connected for platform-fee settlement. - Legal/compliance groundwork the PRD assumes exists but doesn't specify as an engineering task: Terms of Service and a mentor-facing independent-contractor agreement (drafted with counsel, not by the founder alone — flagged here as a hard external dependency, not an engineering deliverable) is linked from signup and Stripe Connect onboarding. - Soft launch: a small, hand-picked cohort of 5-10 real mentors (from whatever sourcing channel the founder pursued in parallel with engineering, per the Sprint Overview's assumptions) fully onboarded and bookable, and a handful of real founder users invited directly, before any public/marketing launch — this is the actual bar for "launched," not a big-bang public opening on day one of Sprint 8's end. - No new designer deliverables this sprint — any polish surfaced by the security/hardening pass gets triaged as a fast follow, not folded back into the launch-blocking scope.
This synthesis is model-generated analysis, not an independently verified fact.
Task-Level Detail per Sprint
The three highest-risk sprints get expanded task-level detail below; the remaining five sprints' Milestone/Sprint Breakdown descriptions above are already close to task-level granularity and are not repeated here.
Sprint 3 (Stripe Connect & Checkout) — expanded task list:
- Create a Stripe platform account in test mode; enable Connect; configure Express account settings (capabilities: transfers, card payments).
- Build
POST /api/mentor/connect/onboard— creates a Connect Express account for the current mentor user (if one doesn't exist) and returns a Stripe-hosted Account Link URL; redirect the mentor there from their settings page. - Build the Connect return/refresh URL handlers (
/mentor/connect/return,/mentor/connect/refresh) per Stripe's documented Account Link flow. - Build
POST /api/webhooks/stripe-connect— verify signature, handleaccount.updated, persistpayoutsEnabled/detailsSubmittedontoMentorProfile. - Build
POST /api/bookings/:id/pay— creates a Payment Intent withapplication_fee_amountset to 20% of the session amount andtransfer_data.destinationset to the mentor's Connect account id (destination charge). - Build
POST /api/webhooks/stripe— verify signature, handlepayment_intent.succeeded,payment_intent.payment_failed,charge.refunded; updateBooking.paymentStatusaccordingly. - Seed script: create a test mentor, drive them through Connect test-mode onboarding via Stripe's
test data helpers, create a manually-inserted test
Booking, charge it with a real Stripe test-mode card (4242 4242 4242 4242), and confirm the fee split and payout line item appear correctly in the Stripe test dashboard. - Write integration tests against a Stripe test-mode webhook fixture (Stripe's CLI can forward and replay real test-mode webhook events into a local dev server) — not a hand-mocked payload, since a hand-mocked payload can silently drift from Stripe's real event shape.
Sprint 4 (Search, Filtering & Booking) — expanded task list:
- Build
GET /api/mentors/search?tags=&minRate=&maxRate=— server-side filtering againstMentorProfile,APPROVEDstatus andpayoutsEnabled = trueboth required for a result to appear (the two independent gates from Sprints 2 and 3 converging here for the first time). - Build the search results UI consuming that endpoint, with tag multi-select and rate-range controls as URL query params (so a search is shareable/bookmarkable, and the browser back button behaves correctly).
- Build
GET /api/mentors/:id(public profile) andGET /api/mentors/:id/availability?from=&to=— returns bookable slots within a date range, with server-side timezone conversion applied before the payload is sent to the client (never trust the client to do timezone math against raw stored times). - Build the booking calendar component: render available slots grouped by day in the viewer's local timezone (derived from the browser, with an explicit override control in case it's wrong), selecting a slot opens a confirmation step showing session length, total price, and platform fee breakdown before payment.
- Build
POST /api/bookings— creates aPENDING_PAYMENTbooking and locks the selected slot (a short-lived lock, e.g. 10 minutes, released if payment isn't completed — prevents two founders from racing to book the same slot). - Wire the booking confirmation step to Sprint 3's
POST /api/bookings/:id/pay, then to Stripe's client-side payment confirmation (Stripe.js), then poll or webhook-drive the booking toCONFIRMED. - Build the two confirmation emails (Resend templates) and the mentor's post-confirmation "add your video link" prompt.
- Timezone test case: seed a mentor in
America/New_Yorkwith a fixed availability slot, and a test session inEurope/Berlin, and assert the rendered slot time is correct in both directions — this exact test is what actually catches an off-by-one-DST-hour bug, which a same-timezone development setup would never surface.
Sprint 7 (Admin Console — Disputes) — expanded task list:
- Build
GET /api/admin/disputes— list bookings withstatus = NEEDS_ADMIN_REVIEW, joined with founder/mentor identity and payment status. - Build the "Report an issue" action available on any founder/mentor booking-detail view, which
sets
status = NEEDS_ADMIN_REVIEWand stores a free-text reason. - Build
POST /api/admin/disputes/:id/resolve— accepts an action (REFUND_FULL/REFUND_PARTIAL/NO_REFUND/REOPEN), callingstripe.refunds.create()with the correctreverse_transfer: truefor the destination-charge case when a refund is issued, so the mentor's payout is correctly clawed back rather than leaving the platform out of pocket. - Build the cancellation-cutoff logic: a scheduled check (a cron-style job, run e.g. hourly) or an on-request check at cancellation time comparing "now" to the session start time against the configurable cutoff constant, branching to auto-refund vs. admin queue accordingly.
- Build the admin metrics query — aggregate
SUM/COUNTqueries againstBookingfor gross volume and fee revenue, filtered by date range, plus a live count of openNEEDS_ADMIN_REVIEWrows. - Build the account-suspension action (
User.status = SUSPENDED), and confirm it's actually enforced at the search-query and booking-creation layers (a suspended mentor must disappear from search immediately, not just show a "suspended" badge while still being bookable). - Manual test script: simulate a no-show end to end (book, don't complete, mark no-show, appear in admin queue, issue a partial refund, confirm both the founder's refund and the mentor's clawback show correctly in Stripe test mode).
This synthesis is model-generated analysis, not an independently verified fact.
Dependencies & Sequencing
- Auth and the base data model (Sprint 1) block everything. No other sprint can meaningfully
start without real
User/role/session infrastructure — this is why it is Sprint 1 with no exceptions. - Mentor profiles must exist before search/filtering has anything to search (Sprint 2 before Sprint 4). Building search UI against an empty or fake mentor table would produce a search experience that has to be substantially reworked once real profile data and the expertise-tag taxonomy exist — sequenced to avoid that throwaway work.
- Stripe Connect onboarding must land, and be provably working in test mode, before booking/ payment logic can be tested end-to-end (Sprint 3 before Sprint 4). A booking flow that collects payment but has nowhere valid to route the mentor's share is not testable as a real flow, only as a UI mockup — this is the single most important sequencing decision in this plan, and is why Sprint 3 is scheduled as its own dedicated sprint rather than folded into Sprint 4 alongside the booking UI it depends on.
- The admin mentor-vetting gate (Sprint 2) and the Stripe Connect payout gate (Sprint 3) are independent but must both be satisfied before a mentor is publicly bookable (both feed Sprint 4's search query). They can be built in parallel with each other (they touch different systems — internal admin state vs. an external Stripe API) but Sprint 4's search endpoint is the first point where both conditions are checked together, and that combined check needs both pieces to already exist.
- The booking/session lifecycle (Sprint 4-5) must exist before reviews are meaningful (Sprint 6).
A review is anchored to a specific completed booking; there is no reviewable unit before a real
booking can reach
COMPLETEDstatus. - No-show flagging (Sprint 5) is a prerequisite for the admin dispute queue (Sprint 7) — Sprint
7 builds the resolution UI and refund logic against a
NEEDS_ADMIN_REVIEWstate that Sprint 5 already introduced; Sprint 7 does not re-invent that state. - Refund logic (Sprint 7) depends on the destination-charge payment model established in Sprint 3. A refund against a Stripe Connect destination charge must explicitly reverse the transfer to the mentor, a materially different API call than refunding a normal, non-split charge — this is why refund logic is sequenced after, and explicitly tested against, Sprint 3's exact charge model, not designed in the abstract.
- The full Playwright suite (Sprint 8) depends on every cross-role flow it exercises already being individually functional — it is intentionally the last sprint, not run continuously from Sprint 1, because there is no complete flow to test end-to-end until search, booking, payment, session completion, payout, and review all separately exist.
- Design leads engineering by one sprint throughout (per the Sprint Overview's explicit assumption) — e.g., Sprint 4's booking-calendar UI is designed during Sprint 3, Sprint 6's review UI is designed during Sprint 5. Sprint 3 and Sprint 8 are the two exceptions (Sprint 3 uses Stripe's own hosted UI; Sprint 8 has no new UI), which is precisely what gives the designer slack to work ahead again after Sprint 3 rather than falling permanently behind.
This synthesis is model-generated analysis, not an independently verified fact.
Definition of Done
A sprint is done when every item below is true — not when the code merges, and not when it "looks right" in the founder's own local testing:
- Every task-level item listed for that sprint is merged to the main branch and deployed to the staging environment, not sitting in an open, unmerged pull request.
- The sprint's core flow is provably exercised in Stripe test mode where payments are involved — e.g. Sprint 3 is only done once a real Stripe test-mode card charge produces a real, correctly- split payout visible in the Stripe test dashboard; Sprint 4 is only done once a founder can complete a real Stripe test-mode payment end to end, from search through a confirmed, paid booking, in a single unbroken session with no manual database edits in between.
- Automated tests exist and pass for the sprint's new API routes and critical UI flows — at minimum, unit tests for new server logic (e.g., the fee-split calculation, the timezone conversion) and, from Sprint 4 onward, at least one Playwright test per newly-completed end-to-end flow.
- No
TODO/placeholder logic remains in a path the Definition of Done above claims is working — e.g., a "mark as no-show" button that doesn't yet route to a real admin queue does not count as Sprint 5 being done; it means the no-show groundwork task is incomplete. - The designer's screens for that sprint are implemented pixel-reasonably (not pixel-perfect — a solo founder does not have the bandwidth for exhaustive design QA — but no obviously broken layout, no missing responsive behavior at common breakpoints, and no missing empty/loading/error state for anything the sprint's own scope introduces).
- Every webhook consumed in that sprint (Stripe payment, Stripe Connect) has its signature verification tested against a real Stripe-generated test event, not only a hand-constructed mock payload.
- A one-paragraph sprint-close note is written (timeline actually spent vs. planned, anything descoped or deferred, anything discovered that changes a later sprint's plan) — cheap to produce, and the only reliable way a solo founder catches slow scope drift before it compounds across 8 sprints.
This synthesis is model-generated analysis, not an independently verified fact.
Risks & Mitigations
- Scope creep from the founder's own hardware-industry conviction. A technical founder who deeply understands the DFM/certification problem space is at real risk of over-building the mentor-matching or expertise-taxonomy side of the product (e.g., adding a matching algorithm, or a much richer credential-verification flow) beyond what the PRD scopes, because it feels more "real" than plumbing work like Stripe Connect. Mitigation: the PRD's explicit v1 exclusions (no automated mentor-quality scoring, no Structured Track) are treated as hard sprint-boundary constraints in this plan, not aspirational notes — any mid-sprint feature idea outside the Milestone/Sprint Breakdown above goes into a backlog for a fast-follow release, not into the current sprint, full stop.
- Stripe Connect's own onboarding, compliance, and refund-reversal complexity is genuinely hard and only partially within the founder's control. Express account KYC review times, edge cases in destination-charge refund reversal, and jurisdictional differences between US and Germany-based mentors (Stripe Connect's own supported-country and payout-currency rules differ by country) are real risks a solo founder with no prior payments-infrastructure experience can easily underestimate. Mitigation: Sprint 3 is scheduled early and treated as its own dedicated sprint specifically so a Stripe integration surprise (e.g., a mentor's country requiring additional verification steps) surfaces in month 1-2 with runway to resolve it, not in month 4 during launch week; Stripe's own test-mode tooling (test clocks, test bank accounts, the CLI's webhook-replay feature) is used throughout rather than only hand-written mocks, so integration bugs are caught against Stripe's real event shapes early.
- Cold-start mentor supply before the product is ready to demonstrate to them. Retired engineers are, per the PRD's own target-user research, not reliably found through ordinary channels like LinkedIn search, and a marketplace with zero bookable mentors has nothing to show a founder-side user either. Mitigation: mentor sourcing (industry alumni associations, professional engineering societies, direct retiree-network outreach — the actual channel is a business decision outside this plan's engineering scope) runs in parallel with engineering starting in Sprint 1, not after Sprint 8; the manual vetting flow (Sprint 2) is deliberately simple specifically so it doesn't become its own bottleneck once real applications start arriving; and Sprint 8's soft launch is explicitly gated on having 5-10 real, fully onboarded mentors in hand before any public opening, rather than opening publicly on a fixed calendar date regardless of actual supply-side readiness.
- Solo-founder bus-factor and burnout risk across a dense 4-month timeline with no engineering co-founder. Every sprint above assumes the founder personally ships 30-35 hours of coding work every two weeks on top of mentor recruitment, vetting, and general operating work — there is no slack for a multi-week illness, a distracting fundraising process, or simple underestimation compounding across 8 sprints. Mitigation: Sprint 8 is deliberately a lighter half-sprint that functions as schedule slack if any earlier sprint runs long; the sprint-close note required by the Definition of Done exists specifically to surface slippage after Sprint 2 or 3, while there is still enough runway to compress a later sprint's scope, rather than discovering the timeline has slipped only in month 4.
- Legal/liability exposure between founders and mentors is a real gap this plan does not engineer around. Mentor advice on a certification or design decision that turns out to be wrong, or IP exposure during a session, is a genuine open question the PRD inherits from the underlying idea brief, and no engineering task in this plan resolves it. Mitigation: a Terms of Service and mentor independent-contractor agreement, reviewed by actual counsel (not drafted solo by the founder), is called out explicitly in Sprint 8 as a hard external dependency, not an engineering deliverable — and it blocks the soft launch, not just the public launch, since even a 5-10 mentor soft launch involves real paid sessions and real liability exposure.
- Disintermediation risk (a founder and mentor take their second session off-platform to avoid the 20% fee) is a business-model risk, not a pure engineering one, but it does shape what gets built. Mitigation, reflected directly in this plan: reviews (Sprint 6) and payout/session history (Sprint 5) exist partly to make staying on-platform genuinely more valuable than a bare payment-processing relay — a mentor with a growing on-platform review history has a real incentive to keep booking through the platform rather than routing around it, which this plan treats as a reason reviews are scheduled before launch rather than deferred to a post-launch fast-follow.
These points rest on assumptions and need primary research before the plan relies on them.
Open questions
The biggest unresolved questions from this phase — around pricing, channel, and sequencing — should be answered before the next commitment of time or capital.
Needs real-world validation
Several claims here rest on assumptions rather than evidence and should be checked against primary research — customer interviews, live pricing tests, and supply-side outreach — before they are treated as settled.
What to do next
Carry the confirmed points forward into the next spine phase as input, and treat the open questions above as the first things to test.
Downstream Summary
This is an 8-sprint, 2-week-per-sprint plan (roughly 4 months) for a solo technical founder plus one part-time contract designer to build MentorLoop v1 on Next.js/TypeScript, PostgreSQL/Prisma, Stripe Connect (Express, destination charges), and Auth.js. Sprint 1 builds auth and the core data model; Sprint 2 builds mentor profiles and manual admin vetting; Sprint 3 is dedicated to Stripe Connect onboarding and payment plumbing, proven in Stripe test mode before any booking UI exists; Sprint 4 builds mentor search/filtering by expertise tag and the full booking-and-payment flow, including timezone-correct calendar handling; Sprint 5 builds the mentor dashboard, session completion, and payout history; Sprint 6 adds reviews and a UI-polish pass; Sprint 7 builds the admin console for disputes, no-shows, cancellations, and refunds (reversing Stripe Connect's transfer split); Sprint 8 is a lighter hardening/security/launch sprint ending in a soft launch to 5-10 real mentors before any public opening. The designer works one sprint ahead of engineering throughout. Key sequencing: mentor profiles and Stripe Connect onboarding must both exist before search can show a bookable mentor; Sprint 3's payment model determines how Sprint 7's refund logic must work. The single biggest execution risk is Stripe Connect's own onboarding/compliance/refund complexity, mitigated by scheduling it early with dedicated runway; the second is cold-start mentor supply, mitigated by sourcing mentors in parallel with engineering from Sprint 1 and gating the soft launch on real supply-side readiness, not a fixed calendar date.
Get this for your idea
Analyze free