Corzova ERPDesign mockup

The operating system for service businesses, in design.

This is the working sitemap. Every route is clickable, every decision is captured. Use it to explore the product, see what's been built, and see what's still being worked out.

Vision
2
Domain & UI-first design
3
Architecture (ADRs)
4
Roadmap & build sequencing

Entry points

Three ways to step into the mockup.

Strategic wedges

The differentiators we're betting on. Each one is something incumbents can't structurally match in their current architecture.

Integrated suite vs. silos
Designed
Modules share data natively: pipeline → project → time → invoice → GL. No integration layer between Corzova's own modules.
/pipeline/dashboardvision.md §2
Multi-tenant customer portal
Built
Global PortalAccount + per-tenant PortalGrants (the Stripe / Plaid / Apple ID model). One customer login spans every vendor relationship — services firm, HOA, utility, anything that bills a customer.
/portal/selectvision.md §2, Invariant #11
Configurable terminology per tenant
Built
Industry templates + per-tenant overrides. 'Project' becomes 'Matter' for law, 'Job' for construction, 'Engagement' for consulting.
Pipeline-to-project handoff
Built
Accepted bid promotes to a project in one click — line items become planned phases, sales rep + commission snapshot freeze, work site address carries. Same data, same tenant. No integration layer between sales and ops.
Global from day one
Designed
Multi-currency (transaction / functional / reporting), multi-region tax, multi-language — designed in, not retrofitted.
/onboarding/localeInvariant #2
AI-assisted, not AI-first
Concept
AI as accelerator (smart defaults, anomaly detection, drafts) rather than the product. Works without AI investments.
vision.md §2
Modern UX (Linear for ERP)
Built
Opinionated, fast, keyboard-friendly. shadcn/ui + Base UI primitives. Density over decoration.

Use cases demonstrated

Click through these in order to see the whole product story end-to-end.

New tenant onboarding
Five-step flow: signup → industry → locale → invite team → welcome. Each step captures real state into context.
/onboarding
Industry vocabulary preview
Pick an industry, see eight canonical entities (customer / project / task / deal / estimate / invoice / etc.) rebrand live.
/onboarding/business
Locale + currency setup
Country auto-fills currency and timezone. 'Use browser-detected' link for timezone. Multi-currency primer (Invariant #2).
/onboarding/locale
Sales pipeline kanban
Mock deals across 6 stages. Stage probabilities, weighted totals, contact avatars, activity notes, owner.
/pipeline
Sales performance — quota, pacing, coverage
Per-rep YTD attainment vs annual target with pacing (ahead / on-pace / behind), weighted pipeline coverage ratio (3x is the rule-of-thumb minimum), and leaderboard. Period switcher (Q2 / YTD / annual). Vocabulary-aware label: 'Booking target' for services, 'Origination target' for law, 'Bid close target' for construction. Hidden for HOA + Apartment PM (different KPIs — see leasing velocity).
/sales/performance
Leasing velocity (apartment PM)
Multifamily equivalent of sales performance: per-agent leases signed MTD vs target, days-to-lease, application conversion, renewal rate. Per-building occupancy table showing where vacancy lives + expiring leases. Renewal pipeline counts (expiring 60d, offer pending, on notice). Only meaningful for apartment-pm industry.
/leasing/velocity
Customer list
Searchable table of accounts (business + household) with deal counts, pipeline value, primary contact, last activity. Rows link to the detail view.
/customers
Customer detail — Salesforce-style CRM
Open Maya Park's household. Multi-contact cards with personal intel chips (birthday, family, hobbies, favorite teams, alma mater). Activity timeline mixing logged calls/emails/site visits with system events (portal logins, deal stage changes, invoice payments). Decision-maker / billing / gatekeeper role tags, channel preferences, addresses by kind (billing / work site), and a tenant-side portal-access management block honoring Invariant #11.
/customers/c10
Estimates list (Bids / Proposals)
All estimates across customers, grouped by status. Open / accepted-awaiting-convert / accepted-active / declined. Construction bids and services proposals coexist — same shape, vocab-resolved.
/estimates
Estimate detail — construction bid
Open BID-2026-038 (Park household attic insulation). Phases with line items mixing labor + material, R-value units, optional add-ons (garage ceiling) called out separately. Status timeline (drafted → sent → viewed → accepted with e-signature), commission snapshot, work site, internal cost + margin chips visible only to admin (Invariant #10 field-level RBAC).
/estimates/est-007
Estimate detail — services proposal
Open PROP-2026-021 (Riverbend e-commerce build). Multi-section scope with an alternate (native mobile app) shown as optional. Per-line cost-and-margin chips for admin. Demonstrates the same template handles services and trades.
/estimates/est-003
Bid → Job conversion preview
The integration-wedge moment made visible: side-by-side preview of what the bid contains and what the project will inherit. Customer, contact, work site, sales rep, commission rule (frozen), phases, parked add-ons. Idempotency-keyed per Invariant #9. Click Create to land on the project.
/estimates/est-007/convert
Jobs list
All projects/jobs (created by promoting an accepted bid). Contract under management, cost-to-date, progress bar, open work orders. Services projects coexist with construction jobs — same schema, different execution model.
/projects
Job detail — live insulation install
Park household, mid-installation. Profitability hero (revenue + change orders, cost-to-date split labor/material, projected margin vs planned, % complete weighted by cost). Phases with Work Areas inside; each line shows planned vs installed quantity with traffic-light variance chips. Live work order pulses. Change order CO-001 (garage ceiling) promotes a parked add-on from the bid. Site photos by work area. Crew avatars on each work order.
/projects/pr-c10-1
Job detail — services engagement (fallback)
Greentree brand workshop. Same /projects/[id] route, but no work areas / inventory / work orders — the page detects a services project and falls back to a timesheet link. Demonstrates one schema, two execution models.
/projects/pr-c8-1
Work order detail — live execution
WO-2026-122 (wall cavities, in progress today). Crew avatars + lead, pay-rule hints, scheduled vs actual hours, material allocation (planned → issued → installed → returned with variance chips), per-worker time logs with hourly snapshot for admin, photos by work area, awaiting-verify CTA. Status-driven action bar — Dispatch / Mark complete / Verify / In pay run.
/work-orders/wo-002
Work order detail — verified & in pay run
WO-2026-118 (attic, completed two days ago, supervisor-verified). Locked-for-pay banner: piece-rate earnings flowed to the May 11-17 pay run. Reopening is audited (Invariant #4). Variance chips show the attic came in slightly under on material — the gold margin signal.
/work-orders/wo-001
Crew pay rules
Per-worker rule editor: hourly / piece / hybrid; hourly floor for piece-rate workers; OT threshold + multiplier; piece rates per scope (blown_per_bag, spray_per_sqft, etc.). Grouped by crew. The HR-light wedge: native earnings calc, integrated payroll (Gusto/Rippling).
/team/pay-rules
Pay run preview — May 11-17
What each crew member earned this period from verified work orders. Hybrid math is transparent: hourly base + piece bonus, side-by-side with the pure-hourly alternative. Held earnings callout for work-in-progress that hasn't cleared the supervisor verification gate. Send-to-Gusto handoff with idempotent submission (Invariant #9).
/team/pay-run
Invoices list
All invoices grouped by status. Open AR, paid-this-month, drafts. Mix of progress billing from jobs and fixed services invoices. Overdue surfaced automatically (sent + past due date).
/invoices
Invoice detail — progress billing with GL preview
INV-2026-091 Park household, draft progress invoice. Phase 1 (Attic) billed at 100%, Phase 2 partial, less deposit applied. The headline: a 'Preview · on send' journal-entry card shows the exact debits/credits that will post when sent — including drawing down the customer deposit liability into revenue. Balance enforced visually (Invariant #3).
/invoices/inv-091
Invoice detail — paid + posted
INV-2026-080 Greentree workshop. Both journal entries shown: invoice.sent (DR AR, CR Revenue) and payment.received (DR Cash, CR AR). Status timeline drafted → sent → viewed → paid. Demonstrates the full revenue + cash cycle inside one tenant.
/invoices/inv-080
Invoice detail — overdue
INV-2026-042 Acme Studios. Sent April 15, due April 29, still unpaid. Overdue auto-promotes the status; reminder CTA replaces the resend button.
/invoices/inv-042
Portal — homeowner sees their live install
Sign in as Maya Park (?as=maya). Her single vendor is Cascade Insulation, mid-install. The vendor view adds a 'Your installation' section pulling from the same Corzova Job the contractor is running: % complete bar, next-visit callout (rim joists tomorrow at 10am), phase timeline, field photos, signed change order, and the crew (with spray-foam cert badge). Customer and contractor see the same data, no integration layer.
/portal/v/cascade-insulation?as=maya
Portal switchboard — two demo accounts
Sarah's switchboard shows 5 vendor relationships (agency, healthcare consulting, financial advisor, HOA, water utility). Maya's shows 1 — her insulation contractor. Same PortalAccount model, different grants. Privacy boundary (Invariant #11) means neither tenant sees the other side of the global identity.
/portal
Change order create — contractor side
Crew opened the crawlspace and found rotten R-19 batt. Form is pre-populated for CO-002 (discovery, $1,250, 4 line items including low-clearance labor premium). Customer-facing subtotal + admin-only cost/margin shown side-by-side. Send for signature → routes to portal sign view.
/projects/pr-c10-1/change-orders/new
Change order sign — customer portal side
Maya sees CO-002 in her portal with line items (no internal cost), promoted-phase callout when applicable, and a vendor-accent Sign-and-approve button. Idempotency-keyed (Invariant #9). Click sign — optimistic UI flips to the signed state with typed signature and IP-stamped timestamp.
/portal/v/cascade-insulation/change-orders/co-002?as=maya
Change order sign — already approved
Same flow, CO-001 (garage ceiling) shown post-signature. Vendor-side and customer-side resolve to the same record.
/portal/v/cascade-insulation/change-orders/co-001?as=maya
Materials catalog
Insulation SKUs: cellulose, spray foam (open + closed), R-30 batt, baffles, vapor barrier, foam-can. On-hand / reserved / available per material, reorder alerts (Demilec closed-cell down to 2 — flag), lifetime variance trends across jobs (the estimator-calibration signal).
/materials
Material detail — cross-job usage + variance
GreenFiber cellulose: stock card, default sell + margin, usage across the Park job (planned vs installed per work area with traffic-light variance chips), active reservations holding stock until WO verification.
/materials/mat-001
Industry pack manifest — the extensibility wedge made real
Settings page showing the active Construction · Insulation pack: 9 UOMs (bag, R-value, kit, ...), 6 phase templates with default line items, 8 custom-field schemas grouped by entity (project / material / worker), 4 cert-gating rules (spray-foam cert gates dispatch on foam line items), 5 report templates, 6 document/PDF templates with variable placeholders, 6 pipe-bot workflow defaults. Side-by-side comparison with Professional Services pack proves a vertical is configuration, not a fork.
/settings/industry
Parties — unified counterparty registry
Customers, residents (apartment tenants), and building owners share a Party identity. Single unified registry under Settings showing every counterparty the tenant has a financial or portal relationship with, regardless of source kind. Any surface that needs to bill, message, or grant portal access iterates the same list — aging reports, statement runs, portal grants, audit identity. Backed by a single party table with kind discriminator in production.
/settings/parties
Locations — tenant org hierarchy with industry-aware vocab
Tenant's own organizational units (where workers are based, materials stocked, jobs cost-attributed). Vocabulary-aware naming per industry (Office for prof services, Yard → Branch → Region for construction, Subdivision → District for HOA, Studio for creative production). Dynamic hierarchy via configurable LocationLevels. Single-location tenants get an auto-created Main and never see the concept; multi-location tenants opt in. Worker rows show their primary location; Material detail shows per-yard stock breakdown when applicable.
/locations
Apartment PM — unit inventory by building
Multifamily operator view: 80 units across 3 buildings (Maple Grove, Riverstone, Eastside Lofts) with status badges (occupied / vacant ready / turn / notice / off-market). Building filter chips, occupancy %, rent roll actual vs potential, expiring-leases-60d pipeline. Click any unit for current lease, history, maintenance log, specs.
/units
Apartment PM — lease pipeline + renewal lifecycle
Lease management grouped by lifecycle: expiring within 60 days (renewal action needed), notice given (queue for turn), active. Lease detail page surfaces tenant, unit, payment history, deposit, lifecycle timeline (drafted → signed → move-in → renewal/notice → end), and renewal offer state. Demonstrates lease as the core entity of the multifamily vertical.
/leases
Apartment PM — owner statements per building
Monthly P&L per (building × owner). Demonstrates pro-rata distribution on Riverstone (60% Pacific NW / 40% Maple Grove Capital). Each statement shows income (rent, parking, late fees), operating expenses by category, management fee deduction, reserve contribution, and final owner distribution wired. The accounting backbone of multifamily PM.
/owner-statements
HOA member financial transparency portal
Member-visible community financials (P&L + balance sheet + reserve fund status + budget vs actual + dues collections). Sarah Chen as a Sunset Ridge HOA dues-payer sees how her association is run: current period vs YTD, reserve funded % vs target, next major capex (roof 2028, $195K), aggregate delinquencies (no names). The wedge no incumbent (AppFolio, Buildium, FirstService) does well — they email PDFs quarterly.
/portal/v/sunset-ridge-hoa/financials?as=sarah
Forecasting — cross-job profitability
Existing capacity + utilization view extended with an Active Jobs section: aggregate contract under management, cost-to-date, projected margin (weighted), billed vs collected. Per-job rows expandable to per-phase rollups. Same rollup math as the per-job page (Invariant #7 reuse).
/forecasting
Document upload flow (portal-side)
Click Upload in any vendor's documents card to see the sheet: file picker + type chips + optional note, then a 4-step progress (File → Upload via signed URL → Cloud Security Scanner → Notify vendor). New doc appears live in the documents list. Demonstrates the events bus (portal_doc.uploaded fires once scan clears).
/portal/v/cascade-insulation?as=maya
Industry-aware workforce roster
Workers, titles, departments, top skills, billable rates, internal costs, margin, utilization. The roster swaps content per industry: Construction shows Crew Chief / Installer / Apprentice; Law shows Senior Partner / Associate / Paralegal.
/team
Skills inventory & succession risk
Aggregated view of every skill across the roster with coverage bars, expertise mix (expert / intermediate / beginner), avg rate, top expert. Surfaces single-coverage skills as succession risks.
/team/skills
Time off — roster calendar + balances
Who's out the next two weeks, color-coded by policy (PTO/Sick/Jury/Bereavement/Unpaid). Pending requests with one-click Approve/Deny. Per-worker balances with accrual schedules. Holiday calendar shaded.
/team/time-off
Compliance certifications & expirations
Licenses, certifications, and required training across the roster. Critical alert for expired or expiring-within-60-days credentials. Real differentiator for construction/field-services — expired creds become dispatch blocks.
/team/certifications
Equity grants (tenant-side roster)
All employee grants sourced from Carta — type (ISO/NSO/RSU), shares, strike, vesting progress, current value at latest 409A. Corzova displays; Carta administers. 'Sourced from Carta' badge keeps the integration philosophy visible.
/team/equity
Employee self-view (My profile + equity)
First-person dashboard for an employee: profile, time-off balances, certifications, and the equity hero — vested shares, current value, unrealized gain, per-grant vesting timeline with cliff marker. The retention narrative made visible.
/me
Chart of accounts
Standard SMB chart of accounts grouped by type (Assets, Liabilities, Equity, Revenue, COGS, OpEx, Other). Account numbers, tax-line mappings for year-end export, contra accounts, balances. CPA-ready foundation.
/books/accounts
Transactions journal
Every journal entry chronologically. Source-coded (Invoice / Payment / Bill / Payroll / Manual / Adjustment / Bank). Click any entry to expand its lines and verify debits = credits. Auto-posted entries from invoices/payroll alongside the CPA's manual adjustments.
/books/journal
Profit & Loss statement
CPA-grade P&L with FY2026 YTD vs prior-year YTD comparison and % change. Revenue → COGS → Gross Profit → OpEx → Operating Income → Other → Net Income. Mono-font financial styling.
/books/reports/profit-loss
Balance Sheet
Period-end Balance Sheet vs beginning-of-year, sub-grouped into Current/Fixed Assets, Current Liabilities, Equity (including current-period Net Income). Final check confirms Assets = Liabilities + Equity (Invariant #3 enforced visibly).
/books/reports/balance-sheet
Trial Balance
All accounts with debit and credit columns. Totals must match — the accountant's verification of double-entry integrity. A green banner confirms balance.
/books/reports/trial-balance
Weekly time sheet (xworkforce port)
Weekly grid: rows are (Project × Category), columns are weekdays, cells are hours. Daily and row totals. Billable vs non-billable color-coding with the effective rate visible per row. Submit-week locks all entries. Ported from xworkforce-ui's proven UX pattern.
/time
Expense sheet with receipts + mileage
Per-week expense entries: date, category, project, amount, receipt status. Receipt-required threshold per category. Mileage tracking with rate-per-mile. Reimbursable vs company-card distinction.
/time/expenses
Project rate cascade
Three-level rate hierarchy: worker default → project override → category override. Project picker; table of workers × categories showing effective rate with source badge. Inherits from xworkforce model with extensibility for customer-specific rates planned.
/team/rates
Planning & forecasting
Capacity vs booked across the active roster, per-worker availability bars, projected billable run-rate (weekly / monthly / annualized), project budget vs actual with at-risk / over-budget pills. Pipeline-to-staffing math planned for the next iteration.
/forecasting
Portal vendor switchboard
Sarah Chen sees three vendor relationships at once. Balance summary per vendor. The wedge made visible.
/portal/select
Per-vendor portal view
Hybrid branding (vendor accent + Corzova chrome). Balance hero, invoices, contact card, documents, activity timeline.
/portal/v/acme-studios
Cross-tenant portal account
Sarah manages her global Corzova Portal identity once. Privacy boundary disclosed in UI copy.
/portal/account
Portal as HOA member view
Sarah as a Resident of Sunset Ridge HOA. Annual dues + special assessment, pinned announcements, governing documents (CC&Rs, financial reports), architectural review request she uploaded.
/portal/v/sunset-ridge-hoa
Portal as utility customer view
Sarah as an Account holder at Cascade Water District. Monthly bills, meter readings (start/end), fixed + variable rate breakdown, six months of usage history.
/portal/v/cascade-water
Vendors list
AP-side counterparty registry. Category, W-9 status, YTD paid, open AP. Vendor as a Party kind. 1099-eligibility flagged, with W-9 alerts blocking 1099 filing.
/vendors
Vendor detail — Lumis Cloud
Contact + tax compliance + payment defaults. AP aging buckets, bill history, payment history. Drill-through to every related entity.
/vendors/v-001
Bills list
AP register sorted by urgency (overdue → open → approved → partial → paid). Bill # + vendor invoice #, category, status, total, due. Mirror of invoice list but on the payable side.
/bills
Bill detail — vendor invoice with GL preview
Castro Drywall subcontract: vendor + project coding + line-by-line GL accounts. Open-status bill shows the balanced JE that will post on approval (DR Subcontractor Costs / CR AP).
/bills/bill-002
Bill detail — paid + posted
Mariposa rent — full cycle: bill recorded (DR Rent / CR AP) → payment sent (DR AP / CR Cash). Both balanced JEs visible.
/bills/bill-004
Bill detail — overdue + disputed
BlueFlame Foam: past due, line item disputed, awaiting credit memo. Real AP friction modeled.
/bills/bill-009
Bill on hold — W-9 outstanding
Rivera Hauling sub bill held in draft because vendor's W-9 hasn't returned. Bookkeeper rule: no payment above $599 YTD without W-9.
/bills/bill-013
Pay bills — multi-vendor workflow
Select bills (approved + overdue pre-checked) → pick funding account (operating / savings / Amex CC) → see vendor-grouped totals and projected GL postings. Hard-blocks payments to vendors with missing W-9. Insufficient-funds guard.
/bills/pay
Banking — connected accounts
Three Plaid-connected feeds (Mercury operating, Mercury savings, Amex business CC). Last-synced + last-reconciled timestamps. Pending-match counts surface attention items.
/books/banking
Bank feed — match status per transaction
Mercury operating: each Plaid transaction tagged matched / needs-review / unmatched. Auto-matched entries link back to the originating invoice payment / bill payment / payroll JE. Bookkeeper coding suggestions on unmatched.
/books/banking/1000
Bank reconciliation workflow
Statement balance vs cleared-in-Corzova with the difference highlighted. Period transaction list with cleared checkboxes. Blockers panel (review queue, unmatched) prevents closing the period until clean.
/books/banking/1000/reconcile
Credit card statement reconciliation
Amex business card — recurring SaaS auto-charges matched, two card swipes pending categorization. CC payable account flows into the AP / bill-pay cycle.
/books/banking/2100
Reports library
Centralized catalog: financial statements (P&L, BS, TB), receivables/payables (AR/AP aging, 1099, vendor expense), sales (by customer, by rep, tax), operations (time by employee, project profitability, materials variance). 'Coming soon' for not-yet-built reports.
/books/reports
A/R aging report
Outstanding receivables by customer in 0/1-30/31-60/61-90/90+ buckets. Reconciles to Accounts Receivable (1100). Past-due cells color-graded amber → red.
/books/reports/ar-aging
A/P aging report
Outstanding payables by vendor in standard QBO buckets. Reconciles to Accounts Payable (2000). Drill into vendor for underlying bills.
/books/reports/ap-aging
Sales by customer
Revenue + invoice count per customer, YoY% vs prior YTD, % of total. Sortable, drillable into customer detail.
/books/reports/sales-by-customer
Time by employee
Hours by employee + utilization% (billable / total). Per-project rollup using the 3-level rate cascade for billable $ at rate. Color-graded utilization signal.
/books/reports/time-by-employee
Project profitability
Revenue (invoiced) vs cost (labor at burdened rate + vendor bills tagged to project) → margin + margin %. Green / amber / red signals on margin health.
/books/reports/project-profitability
1099-NEC summary
Year-end vendor 1099 prep. Threshold filter ($600 services / non-corp), W-9 status, YTD paid, masked TIN. Filing-blocker panel for vendors with missing W-9. Distinct from W-2 (handled by Gusto).
/books/reports/1099
Sales tax setup
Nexus by jurisdiction with Avalara integration card. Economic-nexus threshold alerts (Texas approaching $500K). Per-jurisdiction registration #, combined rate, filing frequency.
/settings/tax
Sales tax liability report
Tax collected by jurisdiction and period. Filed / paid / open status with confirmation numbers. Reconciles to Sales Tax Payable (2200).
/books/reports/sales-tax
Project → invoice composer
Bill Maya's Acme brand project: unbilled time grouped by category × worker with effective rate from the 3-level cascade, reimbursable expenses, invoice-type picker (deposit/progress/final/fixed), live totals, GL preview. Save → draft invoice in Corzova.
/invoices/new?projectId=pr-ps-1
Draft invoice from composer output
INV-2026-095 generated by the composer — 30 billable hours + reimbursable expenses, total $9,819.62. Preview JE showing what posts on Send.
/invoices/inv-095
Portal pay — step 1, choose method
ACH (free, 1-3 days via Plaid) vs Card (instant, 2.9% + $0.30 via Stripe). Wizard chrome with step indicator; secured-by-Corzova-Pay framing.
/portal/v/cascade-insulation/pay/i-ci-091?as=maya
Portal pay — step 2, Plaid bank picker
Simulated Plaid Link: three connected accounts with balances. Plaid privacy framing — read-only verification, write only for this transaction.
/portal/v/cascade-insulation/pay/i-ci-091?as=maya
Portal pay — step 3, review + confirm
Review screen with explicit authorization copy. Loading state on submit simulates the Plaid/Stripe round-trip, then redirects to receipt.
/portal/v/cascade-insulation/pay/i-ci-091?as=maya
Portal pay — receipt
Success hero, confirmation #, what-happens-next timeline. 'Behind the scenes' panel deep-links to the resulting invoice, bank feed, and reconciliation in the back office.
/portal/v/cascade-insulation/pay/i-ci-091/receipt?as=maya
Portal — invoice flips to paid on return
After paying, returning to the portal home shows the paid state. ?paid=<id> locally overrides the static mock so the demo round-trips cleanly.
/portal/v/cascade-insulation?as=maya&paid=i-ci-091
Bank feed — portal payment auto-matched
The Stripe ACH from the portal lands in the Mercury operating feed today, auto-matched to pmt-091 with Plaid-tagged-sender confidence. Closes the loop from portal pay to bank rec.
/books/banking/1000
Settings overview
Catalog of every tenant settings section with status (configured / default / attention) and counts. Threshold-attention surfaces (TX nexus approaching) bubble to the top.
/settings
Integrations dashboard
Stripe / Plaid / Avalara / Gusto / Carta / pipe-bot connected; DocuSign / Twilio / QBO available. Per-card account refs, last sync, 24h event counts, errors, webhook URLs. Recent activity feed (inbound/outbound) on the right.
/settings/integrations
Vocabulary editor
Industry defaults vs tenant overrides for every vocabulary key. Live preview shows sidebar, kanban, project header, portal copy with current vocabulary applied.
/settings/vocabulary
Pipelines & stages editor
Three pipelines (Sales / Customer success / Onboarding) with stage editor: name, color, probability, outcome (won/lost/in_progress/stalled), required-fields-per-stage, auto-advance flags.
/settings/pipelines
Roles & permissions matrix
Six built-in roles (Owner, Admin, Manager, Bookkeeper, Member, Crew lead) × 17 modules with per-cell permission level. Field-level rules (Invariant #10) panel for global gates that layer on top.
/settings/roles
Custom fields editor
Per-entity (Customer / Project / Invoice / etc.) custom field definitions with type, visibility (admin-only / all-roles / portal-visible), required flag, populated-vs-total stats.
/settings/custom-fields
Branding configuration
Logo, accent color (preset + hex), email-from with SPF/DKIM status, portal subdomain. Live preview shows portal header, invoice PDF, notification email — all with current branding applied.
/settings/branding
Requests inbox (triage kanban)
Five-column status kanban (New → Triaged → In progress → Blocked → Resolved). Per-card priority chip, SLA badge (overdue / due-today), assignee. Cross-industry: HOA maintenance, construction change request, professional-services revision, apartment-PM urgent HVAC. Stats header: open, overdue, due today, urgent.
/work/requests
Request detail — Park garage ceiling change
Maya's portal-submitted change request decomposed into 3 tasks (estimate, write CO, schedule install). Properties panel with channel (Portal), submitted/triaged/resolved timestamps, SLA target, assignee. Portal-status-note showing what the requester sees.
/work/requests/req-001
Request detail — urgent + new
Apartment resident Jasmine submits 'Heat not working' as urgent — same-day SLA, not yet triaged, no tasks yet. SLA alert banner; Triage + assign CTA.
/work/requests/req-003
Request detail — blocked + overdue
Warranty call where the inspection task is blocked waiting on parts. SLA breached, escalation policy primed. Real AP/operational friction modeled.
/work/requests/req-007
Tasks list with workstream grouping
Mine / All toggle, status filters (Open / In progress / Blocked / Done). Tasks grouped by Workstream (Visual identity, Park Phase 2, Eastfield lobby refresh) with project context. Vocabulary-aware labels per industry (Phase / Activity / Maintenance request).
/work/tasks
Workstream detail — Visual identity system
Maya's brand-refresh workstream with 5 tasks (logo r2/r3 done, color system done, type system in-progress, brand guidelines open). Progress %, in-progress / blocked counts, hours logged vs estimated, target date, owner, linked project. Per-task table.
/work/workstreams/ws-ps-1
Workstream detail — Eastfield lobby refresh
HOA capital project workstream. Tenant-scoped (no project link). Vendor RFPs in progress, board-approved $42K, July install target. Demonstrates workstream-as-initiative pattern outside a single project.
/work/workstreams/ws-hoa-1
Portal — submit a request
Industry-aware intake form: type picker per vendor (HOA: Maintenance / ARC / Violation; Contractor: Change request / Warranty call; Services: Revision / New deliverable). Priority with urgent-warning copy (call 911 first), attachments. Submit handoff with what-happens-next.
/portal/v/sunset-ridge-hoa/requests/new?as=sarah-chen
Portal — my submitted requests
Sarah Chen's view of her requests to Sunset Ridge HOA — pool grip request (triaged, high) and ARC violation complaint (new). Per-card status + priority + SLA. The portal wedge applied to operational work intake.
/portal/v/sunset-ridge-hoa/requests?as=sarah-chen
Portal — request status detail
Requester's view of one request with status updates from the vendor, progress bar across tasks (admin-only details hidden — portal sees titles + done/blocked state), and a message thread for follow-up questions.
/portal/v/sunset-ridge-hoa/requests/req-002?as=sarah-chen

Discussed, not built yet

Concrete features we've talked about but haven't surfaced in the mockup. Captured here so we don't forget.

Estimate → invoice (billing the project)
Bid is the contract; project work generates invoices against the contracted amount. Progress billing, deposit handling, retainage for trades. Posts to AR + GL (Invariant #3).
Real payment processing
'Pay $4,500' button on portal is a stub. Real Stripe / ACH / bank push flow with confirmation + receipt.
Time tracking against projects
Listed on the dashboard setup checklist. Needs a Time module with start/stop timer, manual entry, billable vs non-billable, weekly review.
Invoice creation from time entries
Pull unbilled time on a project, generate invoice, post to GL (Invariant #3), surface in portal for customer.
Document upload + e-signature flow
'Upload' button on portal documents is a stub. Real flow: file picker → signed URL → virus scan → storage → notification. E-sign as separate workflow.
Portal grant revoke + audit log
Customer detail surfaces the access roster (built). Still to do: revoke action, per-scope edit, audit trail of grant changes.
Unified cross-vendor portal inbox
Sarah's notifications from all vendors in one feed. Each notification deep-links into the relevant vendor view.
Per-tenant pipeline configuration
Multiple pipelines per tenant (Sales / Customer success / Onboarding). Stage editor. Required fields per stage.
pipe-bot event & action surface
Every domain mutation emits a structured event; every action is callable. pipe-bot consumes the same API humans do (Invariant #7).

Out of scope

Explicit anti-goals. We will not build these. Some are forever; some are 'not in v1.'

Native payroll
50-state + per-country compliance is a full product. Always integrate Gusto / Rippling.
On-prem / self-hosted
Cloud-only, forever. Preserves SaaS economics and security posture.
POS, EHR, MRP (vertical deep features)
Stay horizontal. Each of these is its own product.
Native banking / money movement
Use Plaid for connections, Stripe Treasury (or similar) for movement.
E-commerce storefront
Corzova is back-office. Integrate Shopify when product businesses become a target.
Native mobile apps in v1
Responsive web + PWA. Native iOS / Android only after PMF.
Native no-code workflow builder
Delegated to pipe-bot (Databurst's separate workflow automation product).

Open questions

Decisions that aren't made yet. Each will be locked as we move through Phase 3 (architecture) and pre-launch.

Multi-tenancy data isolation model
Phase 3 ADR
Pooled (shared DB + tenant_id), silo (DB-per-tenant), or bridge (schema-per-tenant)? Drives cost, blast radius, per-tenant CMEK feasibility, scaling profile.
Compute platform
Phase 3 ADR
Cloud Run (serverless, autoscaling, scale-to-zero) vs. GKE Autopilot (more control, easier stateful, higher floor cost).
Backend language
Phase 3 ADR
Go, TypeScript/Node, Python, or Kotlin/JVM. Affects hiring, ecosystem, performance profile, team velocity.
Identity provider
Phase 3 ADR
Identity Platform (GCP-native), Auth0 (DX), or built on Firebase Auth. Cost vs. DX vs. lock-in tradeoffs.
API style
Phase 3 ADR
REST + OpenAPI (boring, tooled), GraphQL (UI flexibility), or gRPC-internal + REST-edge.
Trust model on portal invitations
Portal v2
When a new tenant adds an existing PortalAccount, require explicit invitation acceptance or auto-attach silently?
Vendor-side branding configuration
Portal v2
Tenants configure their logo, accent color, custom domain for portal. Where in Settings? What's editable?
xworkforce migration plan
Pre-launch
Existing xworkforce customers — what's the migration path to Corzova? When do they get cut over?
Pricing model fine details
Commercial planning
Per-seat at $40–80/user/month is committed. Free tier? Annual discount? Volume tiers? Starter for sub-5-person?
Role / permission model depth
Phase 3 ADR
Currently RBAC with Admin / Manager / Member / Bookkeeper. ABAC for fine-grained? ReBAC for sharing across customers?

Technologies

Cross-cutting infrastructure: data model, observability, real-time, mobile. Some have working demos; others are in design discussion.

Entity model (ER diagram)
Built
High-level ER diagram of the 32 entities in main, color-coded by domain (tenant/config, identity, CRM/sales, delivery/execution, workforce, books) with crow's-foot cardinality. Pan and zoom in the embedded viewer; .drawio source downloadable.
/architecture/er-diagram
Full audit log
Designed
Append-only event log of every state change — who, what, when, before/after. CDC from Postgres (Debezium / wal2json) feeds an audit table; per-row JSONB before/after snapshots diff on display. Tiered retention: hot 90 days in Postgres, warm 7 years in object storage. Customer-portal-visible event allowlist (Sarah Chen sees 'your invoice was edited' but not internal renumbers). PII fields excluded or audit-via-hash.
Real-time channel (SSE-first)
Designed
SSE for long-running reports (P&L, exports), notifications (badge counters, toasts), and background job status. WebSockets reserved for true bidirectional cases only — SSE rides HTTP/2, traverses corporate proxies, and reconnects natively. Record conflicts via optimistic concurrency (version column + 409 with reconciliation UI) — no CRDT/OT. Corzova is records-oriented, not document-oriented; concurrent-edit presence is deferred until a real customer asks.
Mobile app — workforce companion
Designed
React Native via Expo (one codebase, two platforms). Native geofence APIs for auto clock-in/out at job sites (battery-friendly, fraud prevention), GPS-stamped time logs against work orders, before/after photo capture with EXIF retention for legal evidence. Offline-first with sync queue. PWA rejected — iOS Safari geofence + background tasks are too unreliable to be the wedge feature. Shared-device pattern (the truck iPad) with fast biometric user-switch.
Integration layer (pipe-bot)
Designed
Corzova connects to external systems via Databurst's existing pipe-bot workflow product (Zapier pattern: events → actions). Rather than building dozens of native integrations, Corzova emits canonical events (invoice.paid, lease.signed, work_order.completed, equity.granted, dues.collected, change_order.approved) and pipe-bot routes them to QuickBooks / Xero, Stripe / Plaid, DocuSign, Carta, Slack, Twilio SMS, Google Workspace, HRIS (Gusto / Rippling / ADP), screening (Checkr / Experian), MLS + listing syndication (Zillow / Apartments.com), and county recorder feeds. Tenants build their own workflows on the same event stream. Source: ../projects/pipe-bot.

Design documents

The authoritative written record. Open these files in your editor; they are the source of truth, not the mockup.

docs/vision.md
Product vision: target customer, wedge, MVP modules, anti-goals, risks.
docs/domain/invariants.md
11 non-negotiable backend rules every mockup and module must respect.
docs/architecture/overview.md
Architecture overview with cross-cutting constraints + ADRs to come.
docs/architecture/adr/0001-record-architecture-decisions.md
Accepted: we use ADRs to record decisions.
docs/security.md
Encryption, tenant isolation, compliance posture.
docs/roadmap.md
Phase tracker for design and build.