Servixo Roadmap

v5 · last review 2026-10-18 · data 2026-10-27 05:36 UTC
57 open 176 resolved 1 deferred · 234 total items
9 Must-have 29 Secondary 27 Optional/Later 18 Deferred
Recently shipped (last 8 updates)
2026-10-26 #243 notifications bell: office + tech bell with live unread count, latest-20 panel, Notifications page (50 per page), mark one / mark all read, DsPopover (§76), DsTimePicker (§77) iPhone time boxes; migration 202610260… #243
2026-10-25 #63 paging + Payouts filters: Bookings and Customers paged 50 per page, Payouts Status dropdown (replaces the Unpaid / Paid / All tabs) + Tech / date / method filters, tech-or-reference search, Labor / Expenses / Total … #63 #304 PR #304
2026-10-23 #242 PR 3 Finances: Payouts menu → Finances (Payments | Payouts tabs), Payments ledger with filters, totals and CSV export, Payouts paged 50 per page, booking Payment history card, phone menu scrolls, DsPagination (§75)… #242 #126 #231 #237 #238 #239 PR 3
2026-10-23 #242 PR 2 live-test fixes round 2: customer "Refund issued" email per card refund, one refund line per payment at page level and on Packages cards, "Our team reviewed" line, info-box deposit and resolved lines, refund-i… #242 #245 PR 2 PR 3
2026-10-23 #242 PR 2 live-test fixes: neutral "Payment received" message, customer review line at the top of the booking page, per-reason admin review lines on every quote / invoice state, Mark as resolved + Card payments needing … #242 #244 PR 2
2026-10-23 #242 PR 2 card invoices and quote deposits: Pay by card on unpaid invoices, Approve & pay deposit on quotes, webhook applies through approve_quote's own checks, refund / review lines on booking panels, deposit_received … #242 PR 2
2026-10-22 #242 PR 1 card payments for packages: Stripe Payment Element (card, Apple Pay, Google Pay) on the customer Packages page, webhook turns the package on, office emails for payment / refund / needs review, customer "packag… #242 PR 1
2026-10-22 Admin bookings: Quotes tab after Pending (Quote Sent / Approved / Rejected); help "Find a booking" updated; `/review-pr` rule c.12 kitchen-sink check (mismatch = major).
Strategic Roadmap — v5
Last manual review 2026-10-18 · data 2026-10-27 05:36 UTC
~254.5–331h
remaining to Phase 3 launch

Locked rules

  • New pages = DS v1 from day one
  • Spec first for big slices only
  • Impact analysis for shared code, DB, RPCs and security
  • All native rebuild items ship in the initial Phase 3 scaffold
  • Every AI feature respects an admin toggle. ANTHROPIC_API_KEY server env only
  • Claude Code handoff protocol (5-field header)
  • All dev migrations via db:push, never Supabase Studio

Current status snapshot

Where we are
Pre-launch: launch gate (deploy checklist d open)
Next
Marketing screenshots, then d test-data wipe (owner go-ahead), then launch, then #226 refunds
15 / 25
Waves done
57
Open backlog items · 1 must-have
52h
Recorded hours burned (other waves not tracked)

Recently shipped

2026-10-26
#243 notifications bell: office + tech bell with live unread count, latest-20 panel, Notifications page (50 per page), mark one / mark all read, DsPopover (§76), DsTimePicker (§77) iPhone time boxes; migration 202610260…
#243
2026-10-25
#63 paging + Payouts filters: Bookings and Customers paged 50 per page, Payouts Status dropdown (replaces the Unpaid / Paid / All tabs) + Tech / date / method filters, tech-or-reference search, Labor / Expenses / Total …
#63#304PR #304
2026-10-23
#242 PR 3 Finances: Payouts menu → Finances (Payments | Payouts tabs), Payments ledger with filters, totals and CSV export, Payouts paged 50 per page, booking Payment history card, phone menu scrolls, DsPagination (§75)…
#242#126#231#237#238#239PR 3

Core wave plan

1 Stabilization sweep
Done22h (burned)
completed 2026-06-19 · 22h burned
Type-safety audit + 3 cast sweep slices
2 Operational carve-outs
Done30h (burned)
100% done · completed 2026-09-01 · 30h burned
#76 and #81 moved to Optional / Later (2026-08-31); #95 moved to the CI wave.
Done:
#5 2–3h#6 8–11h#30 2–4h#33 4h#34 4h#35 4h#44 0.5–1h#45 0.08h#46 1h#47 0.5h#51 1–2h#52 4–6h#53 2–3h#54 8–12h#56 1–2h#57 0.5–1h#58 3–5h#60 1–2h#61 2–3h#62 4–6h#67 0.5h#68 0.5h#69 1–2h#71 1–2h#77 1h#78 2–3h#79 1–2h#80 0.5h#87 4h#97 4h#98 2–3h#103 0.17h#107 0.25h#109 48h#110 4h#116 4h#117 4h
3 DS v1 expansion
Doneest. 17.25–18.25h
100% done
Done:
#31 5–6h#82 0.25h#108 4h#124 4hLoyaltyBadge primitive 4h
5 Invoices & Payments
Doneest. 13.08–17.08h
100% done · completed 2026-07-26
Invoicing end to end (#165, PRs 175-177) + down payment (#183, PRs 147-149).
Done:
#165 4h#183 6–8h
🎨 Drop B — Services + Settings 3.08–5.08h
Done:
#3 0.08h#4 0.5h#18 0.5h#114 0.5–1h
Remaining:
#2 1–2h#64 0.5–1h
6 Missing admin pages
Doneest. 11.5–13.5h
100% done
profiles.address marked obsolete 2026-10-18 (owner): addresses live in the addresses table.
Done:
specialties + tech_specialties tables 4hprofiles.address column (obsolete) 4h
🎨 Drop C — Techs + Customers lists 3.5–5.5h
Done:
#41 2–3h#42 1–2h#80 0.5h
7 Auth, signup, roles
Doneest. 35.5–44h
100% done · completed 2026-10-08
#43 moved to Optional / Later.
Done:
#49 3–5h#152 4h#188 4h#192 4h#195 4h#197 1–2hRoles read live (#230, PR 278) 4h
🎨 Drop D — Blackouts + Payouts + Dashboard 11.5–17h
Done:
#65 6–8h#69 1–2h#83 1–2h#84 1.5–2h
Remaining:
#85 2–3h
8 Customer portal UI alignment
Doneest. 12.5–16.5h
100% done · completed 2026-09-25
Customer restyle slices 1-2 (PRs 252, 253).
Done:
#26 0.5h#30 2–4h#50 4h#148 4h#143 2–4h
11 Notifications + email hardening
Doneest. 13–14h
100% done · completed 2026-10-07
Done:
#13 4h#99 1–2hNotifications audit (PR 271) 4hEmail-link fix (PR 276) 4h
13 Realtime
Doneest. 13–16h
100% done · completed 2026-09-23
PRs 245, 247, 250. #200 and #186 are in Optional / Later.
Done:
#72 3–4h#73 3–4h#74 3–4h#199 4h
14 Chat (Phase 2b)
Doneest. 24h
100% done · completed 2026-09-26
PRs 254-261.
Done:
Chat 1 — DB foundation 4hChat 2 PR 1 — backend + contact lockdown 4hChat 2 PR 2 — chat screens 4hChat 3a — unread badges, nudge, mutes 4hChat 3b-1 — auto-close + reopen 4hChat 3b-2 — photo attachments 4h
15 Next.js 15 → 16 upgrade
Doneest. 8h
100% done · completed 2026-08-15
Done:
#32 4hNext 16.3.8 security patch (PR 270) 4h
A Business-rules audits (pre-launch)
Doneest. 52h
100% done · completed 2026-10-08
Audits 1-7. #209 and #210 moved to Rolling (after launch, owner decision 2026-10-18).
Done:
#198 4h#205 4h#207 4h#208 booking hardening (PR 262) 4h#211 4h#218 capacity math (PR 264) 4h#219 capacity guards (PR 265) 4h#221 tech time-off privacy (PR 266) 4h#223 4h#224 4h#225 4h#229 4h#230 4h
DS DS clean-up (Batches 1–4)
Doneest. 22–24h
100% done · completed 2026-10-18
PRs 284-289; docs/ds-audit.md.
Done:
#201 1–2h#202 1–2hDS Batch 1 (PR 284) 4hDS Batch 2 (PR 285) 4hDS Batch 3a (PR 287) 4hDS Batch 3b (PR 288) 4hDS Batch 4 (PR 289) 4h
H Hosting & launch readiness
Doneest. 44h
100% done · completed 2026-10-17
Both apps live on Hostinger since 2026-10-07.
Done:
Hostinger deploy config (PR 239) 4hpnpm / corepack chain (PRs 240-243) 4hTurbopack + hoisted linker (PR 274) 4hSelf-contained standalone (PR 275) 4h#232 4h#233 4h#234 4h#235 4hPlaywright e2e library (PR 282) 4hNew Supabase API keys, legacy off (PR 283) 4hTech performance page (PR 286) 4h
L Launch gate (deploy-hostinger.md pre-launch checklist)
In progress1–3h
92% done
Standing rule: auto-deploy OFF before any merge that carries a migration.
Done:
a. Hostinger deploy 0hb. Supabase Site URL 0hc. Dev points at local 0he. Email links 0hf. Security pass 0hg. Widget embed over HTTPS 0hh. HTTP smoke test of writing RPCs (done 2026-10-19) 0hi. Book through the embedded widget 0hj. CRON_SECRET + purge 200 0hk. Email Vault secrets 0hl. Edge Functions off legacy key 0hTech start cut-off + admin confirmation (PR 291) 0h
Remaining:
d. Test-data wipe (owner go-ahead) 1–3h
PL Post-launch — first up
In progress60–68h
14% done
Order: #226 → #228 → #231 → #236 → #212 + #213 → #214.
Done:
#231 4h
Remaining:
#226 16–24h#228 24h#236 4h#212 4h#213 4h#214 4h
4 Quote flow completion (v1.4)
Done42.5–53.5h
100% done
#96 moved to Optional / Later (needs a decision).
Done:
#20 1h#21 4h#24 0.5h#48 4–6h#126 4h#163 4h
🎨 Drop A — Bookings module + responsive shell 25–34h
Done:
#65 6–8h#79 1–2h#105 2–4h
Remaining:
#63 8–12h#106 4h#115 4h
12 Hardening
In progress17.5–22.5h
40% done
Done:
#119 1–2h#120 0.5h
Remaining:
#66 8–12h#118 4h#127 4h
CI CI + type-safety close-out
Next11.5–13.5h
0% done
Remaining:
#123 4h#95 1h#140 4h#90 1–2h#91 1–2h#92 0.5h
16 Phase 3 prep (admin + tooling)
Planned12–14h
0% done
Remaining:
#12 4–6h#182 4h#193 4h
9 AI infrastructure AI
Planned24h
0% done
Remaining:
ANTHROPIC_API_KEY 4happ_settings AI toggle columns 4hai_usage_log table 4hclaude-client.ts helper 4hSettings AI tab 4hmarket_baselines table 4h
10 AI features — pre-mobile pack AI
Planned28–42h
0% done
Remaining:
Intake summary 3–5hTech-matching 5–7hNo-show risk 5–7hFAQ chat 6–10hDynamic pricing 9–13h
14.5 AI sentiment flag on chat AI
Planned3–5h
Chat is done; still needs Wave 9 AI infrastructure.
R Rolling / late (after launch)
Planned33.5–36.5h
0% done
Remaining:
#209 4h#210 4h#16 2–3h#17 2–3h#70 1–2h#89 4h#112 4h#113 0.5h#145 4h#159 4h#160 4h
OL Optional / Later (off the open count)
Planned99–121h
0% done
Remaining:
#43 1–2h#59 2–3h#75 4–6h#76 2–3h#81 2–3h#96 4h#131 4h#153 4h#154 4h#155 4h#161 4h#172 4h#177 4h#186 24h#200 4h#204 16–24h#206 8–16h#215 4h

AI infrastructure & features

FeatureLocationWhenEffortPriorityNative
Intake summary Admin bookings list Wave 10 3-5h LOW web
Tech-matching suggestion Assign-tech modal Wave 10 (needs the #131 service↔specialty decision first) 5-7h MED web
No-show risk flag Booking detail Wave 10 5-7h MED web
Customer FAQ chat Widget pre-booking Wave 10 6-10h MED web
Dynamic pricing Quote flow + admin price input Wave 10 9-13h HIGH web
Sentiment on chat Customer ↔ tech chat Wave 14.5 (Chat done; after Wave 9 AI infra) 3-5h LOW web
Photo-to-quote Quote flow Post-Phase 3 OTA (web-first possible: photo upload already ships in chat) 25-40h HIGH native scaffold
Receipt scan Tech completion Post-Phase 3 OTA 4-6h LOW native scaffold

Phase 3 — native scaffold

Permissions

  • ☐ Camera
  • ☐ Photo library (read)
  • ☐ Push notifications
  • ☐ Location (when in use)
  • ☐ Microphone
  • ☐ File picker
  • ☐ Background fetch
  • ☐ Universal / app links

SDKs

  • ☐ expo-camera + expo-image-picker
  • ☐ expo-notifications + Expo Push token registration
  • ☐ expo-location
  • ☐ expo-secure-store
  • ☐ expo-document-picker
  • ☐ expo-linking
  • ☐ expo-av → swap for expo-audio + expo-video at Phase 3 kickoff (expo-av deprecated; check current SDK)
  • ☐ @stripe/stripe-react-native (feature-gated for v2.0)
  • ☐ Sentry crash reporter
  • ☐ react-native-reusables

Phase 3 — mobile build

Effort: 90–130h

Customer flows

HomeBookMy BookingsPackagesProfileInvoices (port of shipped web flow)Chat (port of shipped web flow)

Tech flows

Today's JobsWeek scheduleJob detailStatus transitionsExpense submission (port of shipped web flow)Open in Maps deep linkChat (port of shipped web flow)

Post-Phase 3 OTA roadmap

v1.6

ItemEffort
AI photo-to-quote (Haul Pros first)25-40h
AI receipt scan4-6h
Intake photo-upload question type (reuses the chat photo-upload pipeline — estimate may drop)6-10h
Dynamic pricing engine (full)30-50h
Per-service service areas15-25h
General support chat10-15h
Admin Dashboard expansion (partly shipped: Quote follow-up + Tech reliability groups)15-25h
Reporting suite (partly shipped: tech Performance page, PR 286; next is #236)25-40h
Invoice PDF in the mobile app (web PDF shipped 2026-08-02; reuse invoice-pdf package — estimate may drop)8-12h
#76 — auto start / auto no-show (builds on #223's manual tech no-show record)TBD

v2.0

ItemEffort
Stripe in-app payment (SDK pre-installed)15-25h
Settings → Integrations tab6-10h
Loyalty discount shown in Stripe checkout (discount already applied on invoices, #225)4-6h

Future

Customer tech preferenceReviews / ratingsRecurring bookingsGeo-routed availabilityReferral codesVoice notes in chat

Deferred / parked

#131 Rule-based tech matching in AssignTechsM

Effort summary

WaveTitleStatusEffortCumulative (remaining)
1 Stabilization sweep Done 22h —
2 Operational carve-outs Done 30h —
3 DS v1 expansion Done est. 17.25–18.25h —
5 Invoices & Payments Done est. 13.08–17.08h —
6 Missing admin pages Done est. 11.5–13.5h —
7 Auth, signup, roles Done est. 35.5–44h —
8 Customer portal UI alignment Done est. 12.5–16.5h —
11 Notifications + email hardening Done est. 13–14h —
13 Realtime Done est. 13–16h —
14 Chat (Phase 2b) Done est. 24h —
15 Next.js 15 → 16 upgrade Done est. 8h —
A Business-rules audits (pre-launch) Done est. 52h —
DS DS clean-up (Batches 1–4) Done est. 22–24h —
H Hosting & launch readiness Done est. 44h —
L Launch gate (deploy-hostinger.md pre-launch checklist) In progress 1–3h 1–3h
PL Post-launch — first up Planned 60–68h 61–71h
4 Quote flow completion (v1.4) In progress 42.5–53.5h 103.5–124.5h
12 Hardening In progress 17.5–22.5h 121–147h
CI CI + type-safety close-out Planned 11.5–13.5h 132.5–160.5h
16 Phase 3 prep (admin + tooling) Planned 12–14h 144.5–174.5h
9 AI infrastructure Planned 24h 168.5–198.5h
10 AI features — pre-mobile pack Planned 28–42h 196.5–240.5h
14.5 AI sentiment flag on chat Planned 3–5h 199.5–245.5h
R Rolling / late (after launch) Planned 33.5–36.5h 233–282h
OL Optional / Later (off the open count) Planned 99–121h 332–403h

Backlog coverage map (wave → items)

Wave 2#5 #6 #30 #33 #34 #35 #44 #45 #46 #47 #51 #52 #53 #54 #56 #57 #58 #60 #61 #62 #67 #68 #69 #71 #77 #78 #79 #80 #87 #97 #98 #103 #107 #109 #110 #116 #117
Wave 3#31 #82 #108 #124
Wave 5#2 #3 #4 #18 #64 #114 #165 #183
Wave 6#41 #42 #80
Wave 7#49 #65 #69 #83 #84 #85 #152 #188 #192 #195 #197
Wave 8#26 #30 #50 #143 #148
Wave 11#13 #99
Wave 13#72 #73 #74 #199
Wave 15#32
Wave A#198 #205 #207 #211 #223 #224 #225 #229 #230
Wave DS#201 #202
Wave H#232 #233 #234 #235
Wave PL#212 #213 #214 #226 #228 #231 #236
Wave 4#20 #21 #24 #48 #63 #65 #79 #105 #106 #115 #126 #163
Wave 12#66 #118 #119 #120 #127
Wave CI#90 #91 #92 #95 #123 #140
Wave 16#12 #182 #193
Wave R#16 #17 #70 #89 #112 #113 #145 #159 #160 #209 #210
Wave OL#43 #59 #75 #76 #81 #96 #131 #153 #154 #155 #161 #172 #177 #186 #200 #204 #206 #215
⚠ Read this first

You are here: launch gate. Non-launch work waits until after launch (owner decision 2026-10-18).

  • Now: #246 → B6 SMS/Push → marketing screenshots → Stripe go-live → d test-data wipe → launch.
  • After launch: #226 → #228 → #236 → #212 + #213 → #214.
  • Full history: docs/archive/build-order-history.md.
Anti-proliferation rules — check for changes
Anti-proliferation rules (resolve-1-file-3)

The data shows the source: #98 spawned #100/#101/#102; #62 spawned ~7; the tech feature spawned ~14 (#175–#182 etc.). Six rules kill most of it:

  1. Fold edge-case siblings into the same slice. If a discovered gap hits the same file + same risk class as the current item, fix it now — don't file it.
  2. Scope by surface, not symptom — use the §3 clusters. One file open = everything queued for it.
  3. Per-slice scratch parking lot, reconciled at close (you did this on #61). Collect gaps during the slice; at close, triage fold-in / same-wave-sibling / genuine-new. Only the last gets a number.
  4. Merge overlaps as they surface (e.g. #64/#114 done; the five cast items → one sweep).
  5. Decision-items don't count as open work. #154, #161, #177, #96, #131, #153, #155, #172, #215 → a separate Decisions list; they re-enter as scoped items only once decided. (#147 is the worked example: decided, re-entered as scoped slices, and shipping.)
  6. Batch hygiene into one sweep per wave boundary — #112, #113, #140 are one sweep, not three tickets.

Corrected build sequence (the spine)

Ordered so each layer unblocks the next. Items inside a layer can run in parallel unless an edge in §2 says otherwise.

Before launch — open pre-launch gates (docs/deploy-hostinger.md)
#63 rest — "+ New Booking", status chips, date filter; paging and Payouts filters done.
#246 — customer notifications bell (apps/web); dep: #243.
B6 SMS/Push switches — owner decision pending (rec: hide Push until mobile app; SMS via Telnyx).
Marketing screenshots — before the wipe.
Stripe go-live — LevelSquad LIVE keys, webhook, dashboard setup; card switch stays OFF until launch.
d Test-data wipe — owner go-ahead only, includes the test tech.
Standing rule: auto-deploy OFF before a migration merge (db:push first).
Done: a, b, c, e, f, g, h, i, j, k, l, In-app Help (PR 293), #237 customer booking fixes (PR 294), #238 expense payback (PR 295), tech start cut-off (PR 291), #239 packages, #242 PR 1 card payments for packages, #242 PR 2 card invoices and deposits, #242 PR 3 Finances (PR 303), #63 paging + Payouts filters (PR 304), #243 notifications bell (PR 305).
Layer 0 — Now, no blockers
Nothing open.
Done: Layer 0 fixes, audits 1–7, email-link fix, embedded box, security headers (PRs 220–281).
Layer 1 — Design-system foundation ✅ complete
Complete — #128 · #108 · #30-visual · #130 · #201 · #202 · LoyaltyBadge · responsive admin shell (PRs 165–169, 252, 279, 285).
Layer 2 — Quote-flow keystone
Done: #48 · #183 · #163 (PRs 147–149, 205).
#126 — superseded by the Bookings Quotes tab (PR 300).
Layer 3 — Bookings-ops correctness
Done: #65 · #79 · #83 + #84 · #105 A+B · #203 (PRs 204, 213, 214, 265, 267).
#85 — amber bookings in Needs Attention; only show=attention left (secondary; dep: #65 done).
#63 — bookings-list UI; pagination done (PR 304), then "+ New Booking" (secondary).
Layer 4 — Reschedule / cancel policy ✅ complete
Complete — #119 · #109 · #224 (PRs 215, 217, 268).
Layer 5 — Ops automation & guards
Done: #80 · #78 · #194 · #195 (+195b) · #189 · #100 · #101 · #102 · #147 slices 1–4b (PRs 180–191, 210, 221, 224, 233, 244).
Frozen-bookings capacity residual (D-3) → #215 (OL, needs a decision).D
Layer 6 — Invoicing ✅ complete
Complete — #165 (PRs 175–177). Web push #186 lives in Layer 9.
Layer 7 — Type-safety close-out + CI
Cast sweep in one db:gen-types run: #90 (D) · #91 · #92 (#93, #175 done).D
CI chain: #123 → #95 lint gate; #140 rides with #123.
Layer 8 — AI infrastructure → AI features
AI infra wave (D) strictly before any AI feature — not started.
Layer 9 — Realtime
Done: #72 · #73 · #74 · #199 (PRs 245, 247, 250).
#200 — quotes / invoices have no broadcast triggers (D; dep: #72 done).D
#186 — web push subsystem (D; dep: #72 done).D
#75 — tech mobile realtime (Phase 3 only).
Layer 10 — Pre-mobile infrastructure
Done: ESLint codemod · #32 · Next 16.3.8 patch · #191 · #143 · #171 · Hostinger deploy chain (PRs 218–223, 239–243, 270, 274, 275).
#193 — resize images on upload (Option C; absorbed #138) (secondary).
#12 — remove tsconfig baseUrl (#15 merged in) (deferred).
#182 — extract shared decision logic before the first native screen (secondary; dep: Phase 3 kickoff).
Watch: another Next.js patch bump is expected — rerun PR 270's gate.
Phase 2b — Chat ✅ complete
Complete — Chat 1 → Chat 3b-2 (PRs 254–261).
#204 — masked calling via Twilio (optional_later; dep: Chat 2 PR 1 done).
#206 — OCR scan of chat photos for contact data (optional_later; dep: Chat 3b-2 done).
Post-launch — first up
1. #226 — record and track refunds (secondary, D; dep: #224, #225 done).
2. #228 — email retry + failed-email count (secondary, D; dep: #227 done).
#231 — folded into #238 (pre-launch, 2026-10-20).
3. #236 — admin tech activity report (secondary, D; dep: PR 286 + #159).
4. #212 + #213 — multi-day jobs + available_tech_count (secondary, D, co-resolve).
5. #214 — DST-day grid slot (deferred, D).
#240 — multi-service packages: clearer shared-credit wording, then per-service quantities (optional_later).
#241 — database hygiene from Supabase advisor (optional_later, D).
#244 — dashboard This Month Expenses card beside Revenue (secondary, D).
#245 — apply a reviewed card payment to a new quote or invoice (build only if needed).
DS clean-up (Batches 1–4) ✅ complete
Complete — Batches 1–4, PRs 284–289 (docs/ds-audit.md).
Rolling / late / deferred
#209 — timezone sweep: browser-clock "today" + hardcoded LA constants (secondary; dep: #208 done).
#210 — archived intake questions count as required (secondary, D; needs a decision; dep: #208 done).
Hardening: #66 (D) → #127 audit-log page (#180 done).D
#17 — drop legacy services.price/duration; irreversible, late (D).D
#118 — DB buffer constraint; gated by the first auto-assign feature (D).D
Hygiene sweep, one batch: #112 · #113 · #140.
#2 — form field a11y/autofill warning (deferred).
#16 — hard-delete unused intake questions (deferred).
#64 — Services list "Techs required" column (secondary).
#70 — admin-pages.md ship-status audit (deferred).
#89 — patterns.md additions (deferred).
#106 — bookings search by customer name (secondary).
#115 — sortable column headers (secondary).
#145 — Customer Detail mockup alignment (optional_later).
#159 — tech job timeline start/complete times (secondary, D).
#160 — tech screens DS layout polish (optional_later).
#168 — closed as accepted by #229.
OL — Optional / Later
Not now. Not blocking launch. Off the open count. Item bodies stay in docs/phase-2a-backlog.md.
Decided, waiting: #43 no-schedule warning · #59 tech availability pill · #76 auto assigned → in_progress.
Needs a decision: #96 · #131 · #153 · #154 · #155 · #161 · #172 · #177 · #215.
Deferred on scale: #81 batch get_tech_status (revisit at ~20 techs).
Closed 2026-10-18: #170 · #181 · #196.

Dependency edges (the map)

Only open items that will break or double-build if mis-ordered. A → B = A depends on B (B first). Done edges: history file.

ItemDepends on / must followWhy
#75#72 ✅Consumes the shared realtime hook; Phase 3 only.
#126 ✅#48 ✅Superseded — Quotes tab on Bookings (PR 300).
#85#65 ✅Reuse conflictLabel, don't re-derive the amber rule.
#95#123No lint gate without a CI pipeline.
#123— nonepnpm lint green; re-count warnings before gating #95.
#154#159#159 stamps started_at / completed_at.
#106#97 (shipped)Extends reference search with a customer-name join.
#17Read surfaces on base_price/base_durationIrreversible column drop; audit first.
#12— none (independent)No TypeScript bump rode #32.
#193— none (Option C)Resize on upload + backfill; clears 6 of #95's warnings.
#118First auto-assign feature (post-launch)Backstop only when code writes assignments without a human.
#182, #75Phase 3 mobile kickoffNative-only / pre-native-rebuild work.
#127#66 (soft)Thin data until audit wiring lands.
#228#227 mergedRetries through #227's trigger + sender contract.
#226#224, #225 mergedReuses deposit-reminder + refund-owed rules; #211's auth block.
#238 ✅#229 merged (folds in #231)Done — expense review state, per-job limit, payback with payout.
#239 ✅#238 mergedDone — buy (Venmo), confirm, assign, remove, use per item.
#242 ✅#239 mergedDone — card payments, Finances page, booking payment history.
#243 ✅#242 PR 1 mergedDone (PR 305) — bell, mark read, delete, cleanup, cancelled jobs.
#246#243 mergedCustomer bell on apps/web; reuses the shared module + a topic.
#244#242 merged, launch (owner decision)Expenses card beside Revenue; decide which card it replaces.
#245#242 merged, launch, real need (owner)Apply a reviewed card payment to a new quote or invoice.
#236PR 286 merged, #159Declined late + no-show from tech_performance; start/finish times.
#212, #213launch (owner decision)After launch; co-resolve (same capacity surface).
#209, #210#208 ✅, launch (owner decision)Wait until after launch.

Co-resolution clusters — "one surface, one slice"

Same file / same RPC → open it once. Resolved clusters: history file.

SurfaceItems
dashboard needs-attention / RPC#85 (#83, #84 ✅ done)
type-safety casts (one db:gen-types)#90 + #91 + #92 (#93, #175 ✅ done)
worked-hours chain#159 → #154 → #161, #236
image delivery size#193 (Option C; absorbed #138)
capacity surface (post-launch)#212 + #213
Corrections applied (baked into this doc)

All corrections are applied; the full table is in docs/archive/build-order-history.md.

Full open-item index

Grouped by layer. D = Docker required for the fix. dep = must follow. Done items: history file.

Before launch
#246dep: #243 · B6 SMS/Push switches (owner decision) · marketing screenshots · Stripe go-live · d test-data wipe (owner go-ahead)
Layer 0 (now)
nothing open
Layer 1 (DS foundation)
complete
Layer 2 (quote flow)
nothing open (#126 superseded by the Quotes tab)
Layer 3 (bookings-ops)
#85dep: #65 ✅ · #63
Layer 4 (reschedule/cancel)
complete
Layer 5 (ops guards)
complete (D-3 residual → #215, OL)
Layer 6 (invoicing)
complete
Layer 7 (type-safety + CI)
#90D · #91 · #92 · #123 · #95dep: #123 · #140
Layer 8 (AI)
AI infra wave (D) → AI features
Layer 9 (realtime)
#200D · #186D · [#75 Phase 3]
Layer 10 (pre-mobile)
#193 · #12 · #182dep: Phase 3 kickoff
Phase 2b (chat)
complete — #204 (optional_later) · #206 (optional_later)
Post-launch (first up)
#226D · #228D · #236D (dep: #159) · #212 + #213D (co-resolve) · #214D · #244D (dep: #242) · #245D (dep: #242, only if needed)
Rolling/late
#209 · #210D · #66D · #127dep: #66 · #17D · #118D (gated) · #70 · #89 · #16 · #2 · #64 · #106 · #115 · #145 · #159D · #160 · #112 · #113
OL — Optional / Later (off the open count)
decided-waiting #43 · #59 · #76 — needs-decision #96 · #131 · #153 · #154 · #155 · #161 · #172 · #177 · #215 — deferred-on-scale #81D — after launch #240 · #241D
Housekeeping (archive/close)
#148 ✅ · #167 ✅ · #166 ✅ — all archived 2026-07-26