of operating budget
spent on workplace real estate by corporate occupiers[1]. Re-stacking decisions therefore move material money on the income statement.
SPACESENSE is a decision-support tool for corporate workplace planning. It takes your portfolio of buildings and your demand for sections, runs a constraint-programming solver against an explicit business-utility function, then translates the chosen layout into a CFO-grade financial scorecard with a per-constraint audit trail.
app.jsThe corporate workplace planning problem is large in money, large in combinatorics, and currently solved by intuition. SPACESENSE replaces that with constraint programming and corporate-finance methodology.
spent on workplace real estate by corporate occupiers[1]. Re-stacking decisions therefore move material money on the income statement.
is the typical cost of a single mid-size re-stacking exercise[2] — spreadsheet versions, AutoCAD overlays, committee revisions. The output is rarely defensible without an audit trail.
for a modest 50-section, 8-floor problem — beyond enumeration, beyond intuition. Tools that only visualise a stack don't solve it; they let a planner guess faster.
Incumbents — Serraview, OfficeSpace, Archibus, FM:Systems, JLL Blackbird — excel at visualisation and space inventory. None of them couples a real combinatorial optimiser to a CFO-grade financial layer with industry-benchmarked validation. That is the gap SPACESENSE fills.
Each layer uses the right tool for its job, can be reviewed independently, and contributes a piece the committee can defend in writing. The planner picks the solver budget per the stakes of the decision: 30 seconds for triage, 30 minutes for sign-off.
maximise Σ ( w_stay · stay_put
+ w_reuse · fitout_reuse
+ w_floor · floors_freed
+ w_block · blocks_freed
+ w_bldg · buildings_exited
+ utility_terms )
objective_weights table and are surfaced in the UI as labelled sliders.A constraint-programming solver assigns every section to a specific block. Decision variables are booleans x[section, block]; the objective is an explicit business-utility sum (location bonus, floor-exit reward, reuse bonus, building-exit reward, stay-put weight).
Every run carries its honesty stamp into the scorecard so the room knows what kind of answer they are reading.
Every soft-constraint contribution is logged to allocation_constraint_audit with the rule that fired, the rows it touched, and the delta_score it added. "Why is Risk on Floor 12?" is a one-line SQL query, not an explanation a planner has to remember.
num_search_workers = 1 + random_seed = 42 + SHA-256 input_hash. Two runs from identical inputs produce byte-identical outputs — a hard requirement for any model presented to a finance committee.
The chosen layout is evaluated against a block-level connectivity graph weighted by stairs and lift-bank travel time. Cross-team meeting demand is then scored against the realised distances to produce a single collaboration index on a 0–100 scale.
The layout is translated into money: annual lease-exit saving, productivity recovery, fit-out cost, 5-year NPV at 10% discount, payback, IRR[9] via Newton's method, and a 3×3 NPV sensitivity grid. Every number is sourced from a labelled input row — the audit trail is the deliverable, not a side-effect.
A hybrid that couples constraint programming with corporate-finance methodology compresses the four-to-eight-week stacking exercise into single-digit minutes while producing a more defensible answer.— §2.4, Hypothesis
Reference scenario SCN_2026_BASE — 4 buildings (Z01–Z04) across two campus clusters, ~50 floors, 10 sections. Numbers in USD. Indicative magnitudes; values vary slightly run-to-run as the underlying seed evolves.
| Discount \ Horizon | 3 yr | 5 yr | 7 yr |
|---|---|---|---|
| 6 % | ~$11 M | ~$22 M | ~$31 M |
| 10 % | ~$9 M | ~$18 M | ~$24 M |
| 14 % | ~$7 M | ~$15 M | ~$19 M |
The point is not any single number — it is that all three plans are produced from the same input in a single solver budget, accompanied by a 3×3 sensitivity grid, industry-benchmark bands on every KPI, and a per-constraint audit trail.
Approximately 16k lines of app.js, 8k lines of style.css, 2.3k lines of Python solver — 65 idempotent migrations behind a versioned JSON contract[10].
Google's constraint-programming engine. Chosen over MILP / GA / heuristics because section-to-block is a pure combinatorial problem with proven optimality bounds on this size class.
Thin HTTPS wrapper around the solver, hosted on Railway. The frontend POSTs a typed JSON contract (OR_CONTRACT_VERSION = 1) and reads the solution back.
Magic-link authentication, 65 idempotent migrations, JSONB input_snapshot on every run so any analysis can be re-built from its input_hash.
No framework. ~16k lines of app.js + ~8k lines of style.css + or_engine.js for the financial layer. Loads on Vercel as a static bundle, zero web-font network requests.
All-pairs shortest paths over the block-connectivity graph. Pre-computed at scenario open; the collaboration index is then a weighted sum over realised section-pair distances.
Three solver runs (Cost / Balanced / Collab) instead of true NSGA-II — pragmatic, deterministic, and produces the trade-off frontier the planner can defend in committee.
app.js preflight modal.OR_CONTRACT_VERSION = 1 — pins the frontend↔solver wire format. Source: or_engine.js.From open to signed-off plan in a single run — you choose 30 seconds for triage or 30 minutes for sign-off.
Launch SPACESENSE