| Feature | Location | When | Effort | Priority | Native |
|---|---|---|---|---|---|
| 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 |
| Item | Effort |
|---|---|
| AI photo-to-quote (Haul Pros first) | 25-40h |
| AI receipt scan | 4-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 areas | 15-25h |
| General support chat | 10-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 |
| Item | Effort |
|---|---|
| Stripe in-app payment (SDK pre-installed) | 15-25h |
| Settings → Integrations tab | 6-10h |
| Loyalty discount shown in Stripe checkout (discount already applied on invoices, #225) | 4-6h |
| Wave | Title | Status | Effort | Cumulative (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 |
| 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 |
Ordered so each layer unblocks the next. Items inside a layer can run in parallel unless an edge in §2 says otherwise.
db:push first).show=attention left (secondary; dep: #65 done).db:gen-types run: #90 (D) · #91 · #92 (#93, #175 done).DbaseUrl (#15 merged in) (deferred).available_tech_count (secondary, D, co-resolve).docs/ds-audit.md).services.price/duration; irreversible, late (D).Dadmin-pages.md ship-status audit (deferred).patterns.md additions (deferred).docs/phase-2a-backlog.md.assigned → in_progress.get_tech_status (revisit at ~20 techs).Only open items that will break or double-build if mis-ordered. A → B = A depends on B (B first). Done edges: history file.
| Item | Depends on / must follow | Why |
|---|---|---|
| #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 | #123 | No lint gate without a CI pipeline. |
| #123 | — none | pnpm 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. |
| #17 | Read surfaces on base_price/base_duration | Irreversible 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. |
| #118 | First auto-assign feature (post-launch) | Backstop only when code writes assignments without a human. |
| #182, #75 | Phase 3 mobile kickoff | Native-only / pre-native-rebuild work. |
| #127 | #66 (soft) | Thin data until audit wiring lands. |
| #228 | #227 merged | Retries through #227's trigger + sender contract. |
| #226 | #224, #225 merged | Reuses 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 merged | Done — buy (Venmo), confirm, assign, remove, use per item. |
| #242 ✅ | #239 merged | Done — card payments, Finances page, booking payment history. |
| #243 ✅ | #242 PR 1 merged | Done (PR 305) — bell, mark read, delete, cleanup, cancelled jobs. |
| #246 | #243 merged | Customer 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. |
| #236 | PR 286 merged, #159 | Declined late + no-show from tech_performance; start/finish times. |
| #212, #213 | launch (owner decision) | After launch; co-resolve (same capacity surface). |
| #209, #210 | #208 ✅, launch (owner decision) | Wait until after launch. |
Same file / same RPC → open it once. Resolved clusters: history file.
| Surface | Items |
|---|---|
| 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 |
All corrections are applied; the full table is in docs/archive/build-order-history.md.
Grouped by layer. D = Docker required for the fix. dep = must follow. Done items: history file.