Bodi ↔ Estym8 — Write path boundary
Product context: Estym8 is built from scratch as an AI-first construction preconstruction platform—not a legacy takeoff stack with AI bolted on. AI runs across the product: bid-package ingestion and classification, multi-model takeoff and vision, plan intelligence, cross-file synthesis, Estee, estimate-to-submittal draft review, and optimization recommendations. Canonical framing: AI-first positioning.
Purpose: State clearly which product owns writes for each kind of data today, and what is allowed when integration moves from one-way export (Estym8 → file / future API) toward two-way sync. Pair with Bodi + Estym8 integration for options (export file, push claims, shared project link).
Last updated: May 2026.
Audience: Engineers in both codebases, solutions/partners, and anyone designing OAuth or service-to-service flows.
1. Systems of record (current)
- Estym8 (this repo) — Projects, estimates, folder runs, symbol takeoffs, plan harvest outputs, submittal catalog (products + PDFs), submittal packages (sections, items, exports), user & billing (Stripe), harvest overrides, reviewed RFI/concern flags, exports derived from the above. All persistence goes through Estym8’s APIs and Postgres schema.
- Bodi (separate app / repo) — Sources, claims, BOD documents, Bodi-native project brain state. Bodi does not store Estym8
rawOutputas authoritative—imports become sources or claims.
Rule of thumb: If it affects MEP takeoff math, PDF harvest, submittal catalog/packages, or Stripe billing, the only writer is Estym8. If it affects ICT/LV BOD structure and claim graphs, the only writer is Bodi.
2. Today’s integration surface (Estym8)
Shipped in Estym8:
- Export for Bodi —
GETon estimate export withformat=bodi(Markdown download). User-controlled, read-only generation; no Estym8 write triggered by Bodi.
Not shipped yet (see integration doc): server push to Bodi (POST sources/claims), shared project IDs, or Bodi-led GET of a Bodi-export JSON endpoint with partner auth.
Inbound to Estym8 from Bodi: None in production. There is no supported route for Bodi to mutate Estym8 Estimate, Project, or rawOutput without a user acting inside Estym8.
3. Two-way sync — allowed write directions (policy)
This section is policy for future implementation; it does not imply features are live until shipped in product.
3.1 Bodi → Estym8 (narrow)
| Intent | Allowed? | How |
|---|---|---|
Overwrite estimate counts / rawOutput | No | Would break audit trail and plan-review truth. Estym8 remains system of record for takeoff. |
| Inject context for Estee / future prompts (client standards, meeting notes) | Yes, when designed | Prefer attachments or “context documents” stored as Estym8-owned metadata, or read-only payloads the user pastes/imports—not silent merges. Any automated path needs explicit user confirmation and versioning. |
| Create a new Estym8 project/estimate on behalf of user | Only via future OAuth + user consent | Not a silent server merge; same patterns as “create from template.” |
3.2 Estym8 → Bodi (broad)
| Intent | Allowed? | How |
|---|---|---|
| Append sources (Markdown / JSON export) | Yes | Matches integration Options A–C; Bodi treats content as new sources and derives claims. |
| POST claims with traceability to an Estym8 source id | Yes (when API exists) | Estym8 never overwrites Bodi claims in place; it creates or updates via Bodi’s API using Bodi ids. |
Link projects (estym8ProjectId / bodiProjectId) | Yes | Stored in each product for the same pursuit; no automatic merge of conflicting fields—link is navigational. |
4. Implementation rules for the Estym8 codebase
- No trusted writes from Bodi until partner auth is defined (e.g. signed webhooks, mutual TLS, or per-org API keys scoped to “ingest context only”). Until then, treat any external writer as invalid.
- Secrets: outbound Bodi integration must use server-only env (e.g.
BODI_API_BASE,BODI_SERVICE_SECRETwhen added)—never expose to the browser bundle. - Conflict resolution: if the same field could be edited in both tools, do not last-write-wins across services. Either partition fields (name in Estym8 vs BOD title in Bodi) or require human merge in one UI.
5. Related links
- Bodi + Estym8 integration — product options and data mapping
- Investor overview — portfolio positioning