Suite backlog — per-product inventory
Work from ../TODO.md. This file is the public inventory of IDs per product — not a second Now list.
Product context: One company · one plan-reading spine · peer products. Raise funds suite development (suite value & return). Estym8 remains the near-term revenue wedge.
Purpose: Published per-product ID tables (Estym8, Bodi, ColdEyes pointer, PlanM8, SiteM8, spine).
Public: /docs/suite-backlog
Work order: TODO.md
Partner view: PARTNER_BACKLOG.md
Vision map: product/plan-intelligence-skus.md · Paul notes
Lines of revenue / ancillary products: SUITE_LINES_OF_REVENUE.md
Ranked expansion (similar / supporting / ancillary + GTM): SUITE_EXPANSION_BOARD.md
Autonomy / “run itself”: ops/suite-autonomy.md
Last updated: September 2026.
Statuses: [ ] open · [/] doing · [x] done.
Portfolio at a glance
Canonical routes/hosts: lib/seo/suite-hosts.ts. Public PlanM8 is the A/E SKU; Prisma PlanM8* stays ColdEyes internals.
| Product | Route on estym8.ai | Dedicated host | Status | Deep brief |
|---|
| Estym8 | / | estym8.ai | Closed beta | folder workflow |
| ColdEyes | /coldeyes | coldeyes.ai | Closed beta — city not ready | landing · municipal |
| PlanM8 | /planm8 | planm8.ai | Discovery waitlist — landing live (no A/E app) | ae-design-review · landing |
| Bodi | /bodi | getbodi.ai (canonical; not bodi.ai) | Discovery waitlist — landing live on host | landing · bodi |
| SiteM8 | /sitem8 | sitem8.ai | Discovery waitlist — landing live (no site-read app) | feasibility · landing |
1. Estym8 — takeoff + estimate (+ ROM/WAG)
Job: Organic multi-trade takeoffs from plan sets / bid folders; plan intelligence; estimate docs; ROM/WAG screening depth.
Raise role: Near-term revenue and case studies.
Now (execution lives in TODO.md)
Ordered queue: TODO.md. ROM subtasks: UNIFIED_BACKLOG.md.
| ID | Item | Notes |
|---|
| E0 | Pipeline solid (Dogtopia / Castle) | P0 — organic accuracy |
| E1 | Workflow / UI / UX for beta | P1 |
| E1b | ROM / WAG UX — chooser, badge, promote CTA, QA path | P1 #5b — do not skip |
| E2 | Closed beta expansion | After E0–E1 |
| E3 | Stripe charging go-live | Post-beta — UNIFIED Appendix A |
Next / Later (Estym8-specific)
| ID | Item | Status |
|---|
| E10 | Promote-to-full from completed ROM | [ ] UNIFIED #38 |
| E11 | ROM indicative $ band (rate book / defaults) | [ ] UNIFIED #39–40 |
| E12 | ROM eval (chase-vs-pass ranking, not F4c) | [ ] |
| E13 | RSMeans / licensed cost API | [ ] procurement-gated |
| E14 | Estimate-to-submittal depth (substitution, richer specs) | [ ] §P10 ongoing |
| E15 | Deeper trade verticals outside MEP core | [ ] roadmap / App B |
| E16 | PDF overlay on the counted sheet: legend boxes, schedule cues, gaps, overlaps, printed scale, and the line that you confirm a count before it is the bid | [/] Estym8 viewer. Keep it on the symbols the count actually found |
Done (selected)
| ID | Item |
|---|
| Ex1 | runDepth ROM | FULL + API + UI default FULL |
| Ex2 | ROM early-exit + labeled romJson |
| Ex3 | Folder classify → plan → execute spine |
2. Bodi — ICT / LV project brain → BOD
Job: Sources → claims → Basis of Design for security, AV, cabling, Wi‑Fi.
Raise role: Peer product; shared org/auth and Estym8→Bodi feeds funded as suite work.
Surface: Landing /bodi on estym8.ai + dedicated host getbodi.ai attached to the Estym8 Vercel project (middleware rewrite / → /bodi). Marketing waitlist is live; /bodi/app does not exist — same honesty as PlanM8. The separate Bodi GitHub is abandoned; do not merge it into this workspace. Rebuild the BOD draft workflow on this spine (A0).
Boundary: BODI_ESTYM8_WRITE_BOUNDARY.md · integration · vs Estym8.
Now / Next
| ID | Item | Status |
|---|
| B0 | Suite-surface waitlist landing /bodi + getbodi.ai host on Estym8 | [x] 2026-09 — marketing + access; no product app yet |
| A0 | BOD draft workflow on the Estym8 spine (sources → claims → confirm) | [ ] next product — do not port the old Bodi repo |
| B1 | Keep write-boundary enforced in any cross-product code | [x] docs; [ ] CI/review habit |
| B2 | Shared org / auth story (SSO or linked accounts) | [ ] |
| B3 | Estym8 → Bodi structured export (claims/sources feed) beyond Markdown | [ ] |
| B4 | Push / pull APIs (read Estym8 concerns/RFIs into Bodi sources) | [ ] |
| B5 | Bundle packaging narrative (sell Estym8 + Bodi on same pursuit) | [ ] GTM |
| B6 | Email / .msg ingestion path (Bodi-native; Estym8 stays supporting-only) | [ ] Estym8-spine, not the abandoned repo |
| B7 | BOD draft UX polish for design-partner pilots | [ ] after A0 |
| B8 | Claim lineage audit export for GC / owner review | [ ] |
| B9 | Email, design standard, and meeting minutes become claims with a source (Shannon 2026-09-29, item 4). ICT / LV basis of design. Do not copy BICSI TDMM or RSMeans into the product. | [ ] after A0 |
| B10 | A confirmed claim checked against a Revit element. Bodi keeps the claim. PlanM8 writes the finding. | [ ] after the Revit pipe prove |
| B11 | PDF overlay for a claim: pin the sentence to the page it was read from. Not a device count. You decide. | [ ] after A0 |
Later
| ID | Item | Status |
|---|
| B20 | Expand “project brain” framing beyond ICT/LV only if product scope expands | [ ] |
| B21 | Two-way sync without overwriting Estym8 counts | [ ] after B3–B4 |
| B22 | Pricing / seating model for Bodi (standalone vs bundle) | [ ] |
Non-goals
- Bodi does not become the system of record for Estym8 device counts or
rawOutput.
- Do not silently merge Bodi into Estym8.
3. ColdEyes — municipal plan check — P1 ACTIVE (design partner)
Job: City / AHJ permit review workflow — completeness, comment log, back-check; staff keep the stamp.
Raise role: Active P1 — municipal design partner willing to test (elevated 2026-08-04; partner city name private / internal only).
Single backlog home (do not duplicate PM8 tables)
→ COLDEYES_BACKLOG.md — PM8 Now / Next / Later + shipped shell checklist.
Workflow: product/coldeyes-workflow.md · Brief: product/municipal-plan-check.md · Internal: ops/coldeyes-internal.md
Elevate status
Fired. ColdEyes Now items are P1 in parallel with Estym8 takeoff trust — do not thrash Dogtopia/Castle for city UI. Public brand ColdEyes. Track all PM8 IDs in COLDEYES_BACKLOG only.
Snapshot (see COLDEYES_BACKLOG for full table)
| Focus | State |
|---|
| Landing + brand ColdEyes | Done |
/coldeyes/app shell + human act loop | Doing (PM8-5) |
| PDF overlays (PM8-5a) | Next |
| Completeness / AI drafts / export / back-check | Open (PM8-1–4, PM8-6–7) |
Non-goals
- City BOM / cost estimating · auto-approve permits · replace examiners · “AI chatbot for cities” as the product.
4. PlanM8 — design agency / A/E pre-issue QA
Job: Internal design QA before seal / issue; optional city-style pre-submit checks.
Raise role: Funded discovery with Paul → design-agency pilot.
Public brand: PlanM8 (was ClearToIssue → CheckSet). Landing /planm8, host planm8.ai. Marketing waitlist is live; /planm8/app does not exist.
Brief: product/ae-design-review.md
Now / Discovery
| ID | Item | Status |
|---|
| CTI1 | Confirm PlanM8 brand vs Estym8 module (one login vs separate surface) — Paul | [/] Public brand is PlanM8; module fallback still open |
| CTI2 | v1 firm QA checklist (title-block / index first?) — Paul | [ ] |
| CTI3 | Ingest design set / revision package on shared spine | [ ] |
| CTI4 | Coordination / completeness flag list with sheet citations | [ ] |
| CTI5 | Human confirm / dismiss workflow | [ ] |
| CTI6 | Redline / issue register export | [ ] |
| CTI7 | City-style pre-submit run (shared packs with ColdEyes) | [ ] |
| CTI8 | Design-agency pilot plan (1–2 firms, success metrics) | [ ] |
| CTI9 | UX: checklist → flags → revision track (not chatbot-first) | [ ] |
Next
| ID | Item | Status |
|---|
| CTI20 | Design-phase memory (SD → IFC; flag regressions) | [ ] |
| CTI21 | Discipline-lead queues (E/M/P/S/A) | [ ] |
| CTI22 | Firm seat pricing | [ ] |
| CTI23 | Link issues forward into ColdEyes applicant package | [ ] |
| CTI24 | Revit pre-issue check (Paul 2026-09-01, sharpened 2026-09-29): connector reads the live model, a finding names the element and the requirement, human confirms. Not judged if the model has no measurement. Paul has a harness on his work laptop (MCP connector and a tab inside Revit) and is waiting on models. After his tests, a zip of the build goes to Quinn. Do not start a second connector. Do not auto-move geometry in the first prove. PDF check stays first. Not a chatbot HUD. Do not promise live Revit on the waitlist. Shared with S8 / PM8-20. Brief: docs/product/from-paul/Jurisdiction_Aware_BIM_QA_PRD.md. When: docs/product/from-paul/README.md. | [ ] |
| CTI25 | A city comment names the element. The next issue shows whether that element changed. Humans keep the stamp. | [ ] after CTI24 |
| CTI26 | A finding the architect confirmed travels with the package. The examiner still decides. | [ ] after CTI24 |
| CTI27 | Drawing consistency on low-voltage sheets (Paul 2026-10-08, v2.1). Plans, reflected ceiling plans, schedules, risers, details, legends, and notes agree. IDs match. Devices are accounted for. Output is a workbook a drafter works sheet by sheet. Does not judge design or code. Fire alarm stays out unless asked. Electrical, mechanical, plumbing, fire protection, architectural, structural, and civil stay out. He tested it on SJMC Parking Structure CYC 6 (T and TY). His write-up says a blind run found 54 items and his check found no false findings. That is his test, not a PlanM8 prove. Spec and Revit-export add-ons run only when he supplies them. The issued PDF is what gets judged. Not the Peoria list. Not CTI24. Do not start the PlanM8 app from this package. Files: docs/product/from-paul/. When: docs/product/from-paul/README.md. | [ ] Paul runs it. Not in the app. |
| CTI28 | PDF overlay on the issued set: a confirmed finding sits on the sheet it names. You issue. Do not start the PlanM8 app from this line. | [ ] after the app exists |
Later
| ID | Item | Status |
|---|
| CTI40 | Multi-office checklist templates | [ ] |
| CTI41 | PE/stamp responsibility reminders (never auto-seal) | [ ] |
Non-goals
- GC BOM · PE stamp replacement · municipal enforcement as the primary job.
5. SiteM8 — parcel / zoning buildable envelope
Job: Early site go/no-go for architects / developers.
Raise role: Funded discovery after ClearTo* rule-pack habits; public-data path.
Public brand: SiteM8 — host sitem8.ai, route /sitem8, favicon Si. Waitlist landing live; no /sitem8/app yet.
Brief: product/feasibility.md
Now / Discovery
| ID | Item | Status |
|---|
| F1 | Working brand / registrar decision — SiteM8 / sitem8.ai | [x] purchased; landing live |
| F2 | Public parcel / plat / zoning data sources shortlist | [ ] |
| F3 | Ingest path for site docs + optional GIS/parcel IDs | [ ] |
| F4 | Buildable-envelope themes output (coverage, parking, setbacks, variance likelihood) with citations | [ ] |
| F5 | Go/no-go memo export | [ ] |
| F6 | Success metrics: time-to-decision + evidence quality | [ ] |
| F7 | Designer / developer pilot candidate list | [ ] |
Next
| ID | Item | Status |
|---|
| F20 | Jurisdiction zoning pack v0 (1–2 metros) | [ ] |
| F21 | Hand-off into ClearToIssue schematic checklist | [ ] |
| F23 | A stated parcel constraint can be asked of the model later. SiteM8 owns the statement. PlanM8 asks whether the model still fits it. Do not invent zoning. | [ ] after F4 |
| F24 | PDF overlay when the source is a drawing: pin the parcel note to the sheet it was read from. Do not invent zoning on a map. | [ ] after F4 |
| F22 | Pricing (per site vs seat) | [ ] |
Later
| ID | Item | Status |
|---|
| F40 | Variance likelihood model (explicitly non-legal advice) | [ ] |
| F41 | Portfolio site screening for developers | [ ] |
Non-goals
- Replace land-use counsel · auto-approve entitlements · GC estimating.
6. Shared spine (funded once — benefits all products)
| ID | Item | Status |
|---|
| S1 | Folder / multi-PDF ingest + classify | [x] Estym8 |
| S2 | Sheet / discipline intelligence | [x] ongoing depth |
| S3 | Organic legend / schedule / conflict patterns | [x] ongoing |
| S4 | Multi-model routing + capability preflight | [x] ongoing |
| S5 | Citation-backed concern / comment primitives reusable by ClearTo* | [/] lib/suite/decision-trace.ts — ColdEyes findings consume; PlanM8 next |
| S6 | Jurisdiction / checklist config schema (cities + firms) | [ ] |
| S7 | Audit log primitive (actor, timestamp, artifact) | [ ] shared |
| S8 | Revit/BIM extract module (owned with ColdEyes flagship; PlanM8 CTI24 consumes the same trace) | [ ] spike — live model → element → measured vs required → citation → verdict or not judged. 2026-09-29: prove the pipe (read + select an element) before writing geometry. Estym8 quantities and Bodi pathway rules are later jobs on the same connector. Not a chatbot HUD |
| S10 | One job: SiteM8 states the parcel, Bodi holds the claim, PlanM8 checks before print, Estym8 counts, ColdEyes decides. Same finding shape. product/suite-one-job.md | [x] path locked 2026-09-29 · [ ] each step still proves on its own |
| S9 | Cost / cache controls for resubmittals and ROM promote | [ ] |
7. Cross-product GTM & docs (suite raise)
| ID | Item | Status |
|---|
| G1 | Public suite docs + landing peer section | [x] 2026-08 |
| G2 | Suite value & return doc for investors | [x] this pack |
| G3 | Per-product backlog (this file) kept current with UNIFIED | [ ] ongoing |
| G4 | Partner asks tracked (Paul CTI checklist; municipal PM8 pilot) | [ ] |
| G5 | Pitch / one-pager: raise funds entire suite | [x] 2026-08 investor pack sync |
| G6 | Registrar buys for suite hosts | [x] coldeyes.ai = ColdEyes. planm8.ai = PlanM8 / A/E. getbodi.ai = Bodi. sitem8.ai = SiteM8. |
| G7 | Suite lines of revenue + ancillary board kept current | [x] SUITE_LINES_OF_REVENUE.md · ranked board SUITE_EXPANSION_BOARD.md 2026-09-01 |
| G8 | Suite autonomy plan (self-running products / exception-only ops) | [x] ops/suite-autonomy.md — 2026-09-01: People product filter + NOTIFY_FAILED dead-letter. Keep executing remaining A2–A4 as products ship |
| G9 | Ranked similar / supporting / ancillary + monetize / market | [x] SUITE_EXPANSION_BOARD.md 2026-09-01 — execution IDs in §9 |
| G10 | News radar (scour → post → notify) | [x] 2026-09-01 — unattended publish on each app’s /news; cron /api/cron/news-radar; Shannon only dismisses a bad story |
8. How this relates to TODO.md
| Concern | Where to work |
|---|
| What to do next | TODO.md |
| Dogtopia / Castle diaries, ROM subtasks | UNIFIED appendix |
| ColdEyes PM8 IDs | COLDEYES_BACKLOG |
| Per-product ID tables (this file) | Inventory only |
| Partner-facing summary | PARTNER_BACKLOG |
| Investor $ story | SUITE_VALUE_AND_RETURN + fundraise brief |
Partner city name stays in internal ops only.
9. Expansion board (Later — do not start apps)
Canonical ranks + monetize + market: SUITE_EXPANSION_BOARD.md. Not Now. Promote only when the parent product has an A0 golden path.
| ID | Rank | Item | Status |
|---|
| X1 | S1 | Owner / CM diligence as Estym8 mode (brand later if GTM needs it) | [ ] after ColdEyes A0 or owner inbound |
| X2 | S2 | Applicant pre-check copy + later submitter credits (inside ColdEyes) | [ ] after city notify loop |
| X3 | P1 | Addenda / revision delta memo on Estym8 | [ ] after Firm folder trust |
| X4 | P2 | Shop drawing vs issued set (Estym8 CA) | [ ] after estimate-to-submittal depth |
| X5 | P3 | Sub bid-leveling vs organic takeoff | [ ] Firm-only; after X3 |
| X6 | P4 | First discipline pack (fire or accessibility or energy) | [ ] after S5 citation + S6 schema |
| X7 | A1 | ColdEyes implementation / training rate card | [ ] with first paid city logo |
| X8 | A4 | Insurance / surety partner conversations (not a product) | [ ] after citation UX + counsel |
| X9 | S3 | Outsourced plan-check firm tenancy | [ ] PM8-28 memberships |
| X10 | P6 | Model audit GA decision | [ ] after S8 / CTI24 / PM8-20 spike bar |
Non-goals stay in the expansion board §1 / revenue §3.4 — no city BOM, no auto-stamp, no HOA/managed-review apps until A0 is boring.