Project-centric collections — with default sensitivity + retention inheritance
Cabinets, drawers, projects — pick the kind that matches your firm's vocabulary. A submittal can sit in the project AND in the discipline cabinet AND in a closeout matter, without a duplicate copy of the bytes. Configure default sensitivity and / or default retention class on a project once and every doc filed there inherits automatically. Sensitivity is highest-tier-wins (a confidential geotech report dropped into a regulated jobsite stays regulated; an internal RFI dropped into a confidential project escalates). Retention is no-override (a doc with an existing 10-year retention won't silently shorten because someone moved it into a 7-year project). Tell the agent: "set Tower 2 to confidential and 10-year retention" and the rules apply on every future filing.
Version control for drawing sets
Content-addressable identity means there's no "rev_12_FINAL_v2" guessing. Each revision is immutable. The current one is unambiguous. Compare any two revisions with a server-rendered text diff; older revisions re-extract on demand.
Email-to-DMS for subs and consultants
Each project gets an unguessable ingest address. Forward to it from any email client. The agent auto-classifies sensitivity, suggests the right project collection, and proposes RFI / submittal / change-order tags — you confirm, it files.
Hybrid search across the project record
FTS for spec section numbers, RFI numbers, and party names; embeddings for conceptual phrases ("change orders related to scope creep"). Fused via Reciprocal Rank Fusion. Sub-second on a 50,000-document project.
Hash-chained audit for closeout and claims
Every consequential action appends to a per-tenant tamper-evident log. The project record assembles itself — closeout becomes an API export, not a paralegal sprint. Defensible at delay claims, dispute resolution, or warranty audits.
Retention for permits, plans, and warranties
Define classes ("Permit drawings — 10 years", "Warranty correspondence — until 1 year past warranty expiry"). Records that elapse appear in a review queue with defer + dispose actions, captured reasons, and held-doc deny-wins for active disputes.
Pre-trained recognition for AEC document types
Kodori's deterministic doc-type matcher recognizes RFIs, submittals, change orders, meeting minutes, and inspection / daily reports on sight — no LLM call needed for the unambiguous cases. Keeps tagging consistent across thousands of documents per project.
RFI tracker — morning-stand-up view at /rfi-tracker
When the auto-classifier flags a doc as RFI / Request For Information, Kodori extracts RFI number, subject, project ref, requested by → requested of, location (spec section, drawing reference), and due date. Lands on /rfi-tracker with five status counters (Open / Overdue / Due in 7d / Answered / Rejected) plus top-projects-by-open-count. Open RFIs past their due date highlight in red — the "what's blocking the project right now" view a superintendent looks at every morning.
Submittal tracker — by CSI spec section at /submittal-tracker
Sister surface to RFI tracker for the second-highest-volume AEC document. Auto-classifies shop drawings, product data sheets, material samples, mock-ups, and test reports; pulls CSI MasterFormat spec section as the canonical anchor. Five status counters (Under review / Overdue / Due in 7d / Approved / Rejected) plus top-spec-sections-by-pending-count breakdown surface "where are reviews piling up?" Disposition wording preserved verbatim ("Approved as noted — rev. mullion finish to RAL 9006") while the derived status bucket drives the queue.
Project lifecycle metadata at /projects/<ref>
Per-project header card on the drill-in with owner / contract value / target completion / status (active / on-hold / closed) / free-text notes. Inline Edit form. The /projects rollup keeps deriving from the trackers (so a doc filed with a new projectRef shows up immediately) — this is OPTIONAL enrichment that surfaces the project executive view for jobs the team has chosen to curate. Pre-create metadata before any docs land for jobs you just won.
Projects dashboard — every active job's health on one screen at /projects
Cross-project executive view. Each row is a project; columns show open / total RFIs, under-review submittals, pending / executed / rejected COs, executed cost impact, pipeline cost impact, executed + pipeline schedule days. Sort: hottest project first. Top-line stats roll up project count, open RFI / submittal / CO totals, and project-wide executed cost impact. Pure read-side aggregation over the existing tracker projection tables — no project lifecycle schema needed.
Drawing-set integrity check — expected ranges + gap detection
On every project drawing register, define expected sheet ranges ("A-100 to A-501", "S-100 to S-308") per discipline and Kodori cross-checks against the indexed drawings. Per-range expected/found counts, missing-major list ("Missing: A-205, A-206 …"), top-of-section completeness chip (green at 100%, amber ≥90%, red below), and an unexpected-sheets warning panel for sheets outside every range. Closeout-review answer: "do we have every sheet on the contract drawing list?" — without scrolling 800 rows.
Drawing register — sheet extraction + per-project rollup
Click "Extract drawings" on any drawing PDF and Kodori scans the text against AIA/CSI sheet-numbering patterns (A-201, S-101, M3.05, etc.) covering 14 disciplines (architectural, structural, MEP, fire, civil, landscape, telecom, equipment, security, demolition, general). Per-doc panel surfaces the discipline-grouped index with sheet titles + occurrence counts. Per-project rollup at /collections/[id]/drawing-register aggregates every readable doc's sheets across the project, grouped by discipline, with traceable source documents per sheet — the "drawing register" output every AEC project requires, built from the same regex-driven extraction surface. Permission-trimmed; idempotent on re-run; lands a drawings.extracted event on the doc audit stream alongside every other governance signal.
Spec-section directory — project heatmap by CSI MasterFormat at /spec-sections
The Monday-morning project-manager view: joins RFIs, submittals, and change orders by CSI spec section into one table. Per row: open / total RFIs (matched by location text containing the section number), under-review submittals, pending / executed / rejected COs, executed cost impact (red for additive, emerald for credits), pipeline cost impact. Sections sort hottest-first across all three artifact types — overdue RFIs, overdue submittals, and PCOs older than 14 days surface as red badges on the same row. No "review log" spreadsheet that goes stale; the page is live against the three projection tables.
Inspection / daily-report tracker at /inspection-tracker
Fourth AEC daily-action surface. Auto-classified inspection reports + daily reports + punch lists land here with inspector, inspection date, location, trade, verbatim result, open-finding count, and a 1-2 sentence Haiku-extracted summary of what's still blocking. Top-line stats include total open findings across all rows; "by trade" breakdown ("MEP 27 · structural 4 · envelope 2") shows where the issues live. Sort order: open-with-findings first (the actionable queue), then pass-no-findings, then closed-out for historical reference.
Change-order tracker — every PCO and CO with cost + schedule impact at /change-order-tracker
Third AEC daily-action surface alongside RFIs and submittals. Auto-classifier flags change orders / PCOs / construction change directives; a Haiku-backed extractor pulls CO number, subject, project ref, spec section, originator, approver, signed cost impact (additive vs deductive), schedule days, reason category, dates, and signature status. Five status counters (Pending / PCO / Overdue signature / Executed / Rejected), executed-vs-pipeline cost aggregates with red for additive and emerald for credits, schedule-day aggregates, top reason categories ("owner request" / "design change" / "field condition" / "RFI response" / "errors and omissions" / etc.), and overdue-PCO highlighting at 14 days. Replaces the manual "change order log" spreadsheet — every PCO and CO in the workspace surfaces here automatically with a continuous audit trail.
AP-invoice three-way match for trade billings
Vendor invoices upload, Kodori extracts vendor / total / PO / currency / line items, scans for a matching purchase-order doc AND a receipt (packing slip / goods received note) sharing that PO. Three-way match status (matched / price-variance / awaiting receipt / 2-way only) with signed cents variance, plus per-line pairing (item-code → exact description → line number) with per-line ✓ matched / ! variant / unpaired badges. Late-arriving receipts retroactively reconcile invoices in place. Approval / rejection emits webhook-deliverable events for accounting-system sync.
Check-in / check-out for spec coordination
Two consultants editing the same spec section is the classic AEC version-collision. Kodori's soft check-out lets one engineer claim the lock before opening a draft; everyone else gets "Held by jane@…" instead of an overwrite. Lock clears atomically on the next version commit.
Typed AEC metadata + currentSet enforcement
Stamp project / phase / discipline / spec section / drawing number / revision / sheet on every document. Mark a revision currentSet=true and Kodori automatically demotes every prior revision of the same drawing on the same project — exactly one current revision per drawing per project at any time. The agent can answer "what's the current A-101?" without guessing.
External connectors — pull RFI threads from Outlook, drawings from SharePoint, sub messages from Slack
AEC document gravity is split across email + SharePoint + Slack + (sometimes) Drive. Connect all of them from /integrations: Slack, Gmail, Outlook, SharePoint, OneDrive, Google Drive — six vendors live. Messages and file attachments index into the same FTS + pgvector retrieval Kodori uses for native uploads, and the agent's `unifiedSearch` tool fires both legs in parallel + fuses via Reciprocal Rank Fusion. The superintendent asks "every change-order discussion about the staircase rebuild" and gets hits from the Procore-exported documents in SharePoint AND the Slack threads where the GC and structural engineer hashed it out AND the Outlook chain where the architect formally responded — one query, ranked together. Tenant-scoped. OAuth tokens encrypted at rest. Connector text extraction for PDFs / drawings / Office files runs the same Azure Doc Intel / Claude PDF cascade — extracted text is searchable, but the bytes stay at the vendor (no mirror, no compounded breach blast-radius).