Single SourceStudios Engage SSS
Single-client deployment · building toward multi-tenant SaaS

Cloud-native Bill of Quantities and construction cost management.

QuantiCraft is a SaaS platform for quantity surveyors, estimators, main contractors, and project managers: digital takeoff from PDF drawings, a BOQ editor built for real construction hierarchy, a rate library with first-principles cost build-ups, and tender management, under one multi-tenant roof with row-level security.

NestJS + React monorepo
PostgreSQL 16 + ltree + RLS
ASAQS primary, NRM2/CESMM4/CSI supported
Verified against the code, July 2026

What's actually true right now, corrected from an aspirational project doc

  • Auth runs on Supabase, not Clerk, the API uses @supabase/supabase-js + passport-jwt, confirmed by recent commit history being entirely Supabase-auth fixes.
  • Deploy runs on Vercel, not Railway or Render, the NestJS app bootstraps per serverless invocation.
  • Modules for billing, tender, rate-library, measurements, plan-analysis, leads, clients, and reports already exist, well beyond where the build-plan table below claims the project stopped.
  • There is one automated test file, measurement-calculations.spec.ts in packages/shared, 24 unit tests covering four pure geometry functions; the NestJS API itself has zero .spec.ts/.e2e-spec.ts files, and its pnpm test passes vacuously via jest --passWithNoTests.
Who it's for

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.

Quantity Surveyors
Estimators
Main Contractors
Project Managers
ASAQS, South Africa, primary
NRM2, UK
CESMM4, Civil
CSI MasterFormat, US
Stack

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.

LayerPurposeTech
FrontendApp shell, BOQ editor, dashboardsReact 18 + Vite 6 + TypeScript
UIComponent systemTailwindCSS + shadcn/ui + Lucide
BOQ gridHierarchical spreadsheet editorAG Grid, tree data mode
Takeoff canvasMeasure quantities off drawingsKonva.js + PDF.js
Real-timeMulti-user BOQ collaborationYjs + y-websocket + y-indexeddb
StateClient / server state splitZustand + TanStack Query
BackendAPI, business logic, RBACNestJS 10 + Drizzle ORM
DatabaseTenant-isolated relational storePostgreSQL 16 (ltree + RLS)
QueueBackground jobsBullMQ + Redis
AuthJWT-based identitySupabase Auth via passport-jwt
StorageDrawing and document filesCloudflare R2 / MinIO (dev)
BillingSubscriptions and plan limitsPayFast (South Africa)
DeployFrontend + serverless APIVercel
What's already built

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.

auth tenants users projects boq rate-library measurements documents tender reports dashboard notifications billing admin plan-analysis leads clients audit-log health

Domain concepts

BOQItemized list of materials, labor, and costs for a construction project.
TakeoffThe process of measuring quantities from construction drawings (PDFs).
Rate LibraryA tenant's proprietary database of unit rates with first-principles build-ups.
ltreePostgreSQL hierarchical data type used for the BOQ tree structure.
RLSRow-Level Security, database-level tenant isolation on every query.
TenderThe procurement process: issue BOQ → collect bids → analyze → award.
Build plan

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.

0CompleteProject scaffold & architecture
1CompleteDatabase & multi-tenancy foundation
2CompleteAuthentication, multi-tenancy & RBAC
3Listed as nextPDF viewer & digital takeoff engine
4PlannedBOQ editor (core product)
5PlannedRate library & costing engine
6PlannedProject dashboards & reporting
7PlannedTender management workflow
8PlannedDocument management & collaboration
9PlannedSettings, billing & SaaS infrastructure
10PlannedDeployment, observability & production hardening
Housekeeping, honestly stated

Small, real cleanup items, not hidden.

Open items
  • Root package.json has a corrupted pnpm.onlyBuiltDependencies array plus redundant keys pnpm ignores; a stale npm lockfile coexists with the real pnpm-lock.yaml.
  • A public /debug route 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.local is gitignored and untracked.
  • Test coverage is the named gap: the NestJS API (apps/api) has zero *.spec.ts or *.e2e-spec.ts files and its pnpm test passes vacuously via jest --passWithNoTests; the repo's only test file is packages/shared/src/utils/measurement-calculations.spec.ts, 24 unit tests for four pure geometry functions.
Single-client, building toward multi-tenant

A real BOQ platform, not a demo.

Internal project, Single Source Studios. ASAQS-first, SADC construction context by design.

Single-client deployment, active development
Evidence

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.

Single Source

Every number on the dossier and whitepaper pages traces to a file path or command output in the source tree.

LinkedIn Facebook (c) 2026 Single Source Studios (Pty) Ltd