| Method |
Endpoint |
Purpose |
| GET |
/api/projects |
List all projects |
| POST |
/api/projects |
Create project |
| GET |
/api/projects/:id |
Get project with floors, calculations, quotes |
| PUT |
/api/projects/:id |
Update project details |
| DELETE |
/api/projects/:id |
Delete project |
| PUT |
/api/projects/:id/floors |
Set floor configuration (building blocks) |
| GET |
/api/projects/:id/equipment-overrides |
Load equipment qty/cost overrides |
| PUT |
/api/projects/:id/equipment-overrides |
Save equipment overrides (replace all) |
| GET |
/api/projects/:id/cost-overrides |
Load cost summary overrides |
| PUT |
/api/projects/:id/cost-overrides |
Save cost summary overrides (replace all) |
| Method |
Endpoint |
Purpose |
| POST |
/api/calculations |
Run calculation for a project |
| POST |
/api/calculations/preview |
Preview calculation without saving |
| GET |
/api/calculations/project/:id |
Get calculation history for project |
| GET |
/api/calculations/:id |
Get specific calculation result |
| Method |
Endpoint |
Purpose |
| POST |
/api/quotes |
Generate PDF quote |
| GET |
/api/quotes/:id |
Get quote metadata |
| GET |
/api/quotes/:id/download |
Download PDF file |
| DELETE |
/api/quotes/:id |
Delete quote |
| Method |
Endpoint |
Purpose |
| GET |
/api/reference-data |
Full summary of all reference data |
| GET |
/api/reference-data/regions |
Regions list |
| GET |
/api/reference-data/countries |
Countries list |
| GET |
/api/reference-data/project-types |
Project types with scopes |
| GET |
/api/reference-data/building-blocks |
Building blocks with defaults |
| GET |
/api/reference-data/equipment |
Equipment items with prices |
| GET |
/api/reference-data/site-sizes |
Site size tiers with fees |
| GET |
/api/reference-data/scope-considerations |
Scope toggles |
| POST |
/api/reference-data/import |
Import Excel spreadsheet |
| GET |
/api/reference-data/imports |
Import history |
- regions (4) — ASA, GCNA, EA, AME
- countries (62) — Each linked to a region
- site_sizes (6) — Mini to Critical, with fees (PMS, design, voice, server, WiFi, CCTV)
- equipment_categories (9) — Network, Workstation, AV, Property, Security, etc.
- equipment_items (~90) — Individual equipment pieces
- equipment_prices (~360) — Regional unit costs (4 regions x ~90 items)
- building_blocks (~89) — Workspace types with data point defaults
- building_block_equipment_map (~122) — Equipment multipliers per building block
- network_designs — Site-size-specific network equipment with quantity and cost overrides
- project_types (5) — New Build, Refurbishment, Relocations, etc.
- project_scopes (17) — Sub-types under each project type
- cost_line_items (15) — The fixed 15-row cost summary structure
- scope_considerations (9) — Toggle options affecting calculation
- property_package_items (9) — Property cost categories
- projects — Project details (name, region, country, site size, headcount, etc.)
- project_floors — Floor definitions per project
- project_floor_items — Building block quantities per floor
- project_scope_considerations — Per-project scope toggle values
- project_property_packages — Per-project property CAPEX values
- project_equipment_overrides — Manual equipment qty/cost overrides per item (added 2026-02-23)
- project_cost_overrides — Manual cell overrides (any row, any column)
- project_calculations — Calculation results (JSON blob)
- quotes — Generated PDF metadata
| Column |
Type |
Purpose |
| id |
SERIAL PK |
Auto-increment |
| project_id |
INTEGER FK |
References projects(id) ON DELETE CASCADE |
| item_name |
VARCHAR(200) |
Equipment item name |
| category |
VARCHAR(100) |
Equipment category |
| quantity_override |
NUMERIC(10,2) |
Override quantity (null = keep auto value) |
| unit_cost_override |
DECIMAL(12,2) |
Override unit cost (null = keep regional price) |
| is_addition |
BOOLEAN |
false = override existing, true = new item |
| created_at |
TIMESTAMP |
Auto-set |
Unique constraint on (project_id, item_name).
- Create — POST /api/projects with project details
- Configure Floors — PUT /api/projects/:id/floors with building blocks per floor
- Calculate — POST /api/calculations with project_id
- Review — View in Web View or Spreadsheet View mode
- Override Equipment — Edit quantities/costs in tech breakdown, add new items
- Override Costs — Edit individual cells in cost summary table
- Save and Recalculate — Persist overrides to DB, recalculate with overrides applied
- Generate PDF — POST /api/quotes to create 3-page landscape Design Brief
The pg driver returns NUMERIC(12,2) columns as JavaScript strings. The calculator uses a num() helper to safely parse all values. Without this, string concatenation bugs occur (e.g., “296182” + “3000.00” becomes “2961823000.00”).