Four measurement standards, four construction sectors.
Built around ASAQS (South Africa, the primary target) with NRM2 (UK), CESMM4 (Civil), and CSI MasterFormat (US) supported alongside it, spanning Residential, Commercial, Civil/Infrastructure, and Industrial work.
A real-time, tenant-isolated monorepo.
Every table carries tenant_id, every query runs through Postgres row-level security, and BOQ trees use ltree for hierarchical structure. Real-time collaboration on the BOQ editor rides Yjs CRDTs.
| Layer | Purpose | Tech |
|---|---|---|
| Frontend | App shell, BOQ editor, dashboards | React 18 + Vite 6 + TypeScript |
| UI | Component system | TailwindCSS + shadcn/ui + Lucide |
| BOQ grid | Hierarchical spreadsheet editor | AG Grid, tree data mode |
| Takeoff canvas | Measure quantities off drawings | Konva.js + PDF.js |
| Real-time | Multi-user BOQ collaboration | Yjs + y-websocket + y-indexeddb |
| State | Client / server state split | Zustand + TanStack Query |
| Backend | API, business logic, RBAC | NestJS 10 + Drizzle ORM |
| Database | Tenant-isolated relational store | PostgreSQL 16 (ltree + RLS) |
| Queue | Background jobs | BullMQ + Redis |
| Auth | JWT-based identity | Supabase Auth via passport-jwt |
| Storage | Drawing and document files | Cloudflare R2 / MinIO (dev) |
| Billing | Subscriptions and plan limits | PayFast (South Africa) |
| Deploy | Frontend + serverless API | Vercel |
Modules that exist today under apps/api/src/modules/.
Well past the "scaffold and auth" stage the original build plan implies, these are real, present modules in the codebase, verified against the source rather than assumed from a roadmap.
Domain concepts
| BOQ | Itemized list of materials, labor, and costs for a construction project. | |
| Takeoff | The process of measuring quantities from construction drawings (PDFs). | |
| Rate Library | A tenant's proprietary database of unit rates with first-principles build-ups. | |
| ltree | PostgreSQL hierarchical data type used for the BOQ tree structure. | |
| RLS | Row-Level Security, database-level tenant isolation on every query. | |
| Tender | The procurement process: issue BOQ → collect bids → analyze → award. | |
Where the original phase table over- and under-states reality.
The phase table below is the project's own build plan. Per the verified panel above, phases well past "3, next" already have real modules in the codebase, treat this as the planning document it is, not a live status feed.
| 0 | Complete | Project scaffold & architecture |
| 1 | Complete | Database & multi-tenancy foundation |
| 2 | Complete | Authentication, multi-tenancy & RBAC |
| 3 | Listed as next | PDF viewer & digital takeoff engine |
| 4 | Planned | BOQ editor (core product) |
| 5 | Planned | Rate library & costing engine |
| 6 | Planned | Project dashboards & reporting |
| 7 | Planned | Tender management workflow |
| 8 | Planned | Document management & collaboration |
| 9 | Planned | Settings, billing & SaaS infrastructure |
| 10 | Planned | Deployment, observability & production hardening |
Small, real cleanup items, not hidden.
- Root
package.jsonhas a corruptedpnpm.onlyBuiltDependenciesarray plus redundant keys pnpm ignores; a stale npm lockfile coexists with the realpnpm-lock.yaml. - A public
/debugroute reports which env vars are set (no values), leaks no secrets but is unnecessary public information disclosure; slated for removal from prod routing. - Secret handling is otherwise clean: no secrets in tracked source,
.env.localis gitignored and untracked. - Test coverage is the named gap: the NestJS API (
apps/api) has zero*.spec.tsor*.e2e-spec.tsfiles and itspnpm testpasses vacuously viajest --passWithNoTests; the repo's only test file ispackages/shared/src/utils/measurement-calculations.spec.ts, 24 unit tests for four pure geometry functions.
A real BOQ platform, not a demo.
Internal project, Single Source Studios. ASAQS-first, SADC construction context by design.
Evidence: compiled from the quanti-craft repository on 2026-08-03. Every number on this page traces to a file path or command output in the source tree. Last updated: 2026-08-03.