Tophat
An enterprise business suite for a commercial real estate brokerage, with an assistant that answers from the brokerage's own rows and cites the record it read.
Open tophatapp.com
A commercial real estate investment brokerage running clients, properties, listings, projects and proposals across tools that did not talk to each other. The brokerage wanted the system on its own network rather than in somebody else's cloud, which set the architecture before anything else did.
Three things the brokerage said it could not track at all, plus a listing workflow that depended on people remembering the order of operations. An exclusive listing agreement signed late would silently let the marketing plan run early, and nothing in the software objected.
- Clients, properties, listings, projects, proposals and documents in one system, with a rent roll, comparables and the reporting over all of it.
- A request workflow that enforces order: a step that depends on the exclusive listing agreement refuses to be marked done by name until the agreement is done, and a step declaring a required link or file refuses to complete without one.
- An assistant in command mode that answers from live rows and returns the record identifier behind each claim, so an answer can be resolved back to the row or fail loudly as not found.
- A CSV importer that survives real-world files: encoding fallback for Windows-1252 with CRLF, a staged review that separates ready from warned from failed from duplicate, a single-transaction commit, and a refusal to commit the same job twice.
- An offline edge node that indexes its own corpus with no database in its require graph, so retrieval keeps working where the network does not.
- Valuation functions that return null on a missing input rather than a plausible zero.
- PostgreSQL 16 on the brokerage's own hardware. pgvector optional: without it retrieval runs lexical-only and the boot banner says so rather than pretending.
- Map tiles are the only external service the core product requires.
- Media handling refuses SVG by name and refuses a generated asset in a property-photo slot.
- The full request workflow was walked end to end against the live database: a request minted its identifier, copied nine checklist items from a template, added four watchers, and wrote thirteen events and fifty-two notifications across the walk.
- The out-of-order guard held: completing the listing step before the exclusive listing agreement was refused by name, and marking the agreement done unblocked it.
- Citation resolution was verified both ways — a real identifier resolves to its live row, a fabricated one returns not-found rather than a confident guess.
- Every page returns 200 for a signed-in staff account, redirects an anonymous visitor to the login gate, and returns 401 on a wrong password, verified over HTTPS.
- The tenancy check passes across every module.
No revenue, saving or headcount figure appears on this page. Where a client has not approved a number for publication, we leave it out rather than estimate one.
- The assistant's tool-calling loop has never completed against a live model. The provider account returns an inactive-account error, which was probed directly rather than assumed. The integration is built against the real contract and the degradation path is exercised; the loop itself is not.
- Vision extraction and image generation are written against documented API shapes and are unexercised.
- The site-intelligence layer has schema, loaders and query code but no public dataset loaded behind it, so its geographic aggregates are untested.
- Retrieval is lexical-only on the current deployment, so a question phrased entirely in words absent from the stored records will miss. Installing the vector extension fixes it with no code change.
- SOPHIA XT
- Product architecture, application engineering, the grounded assistant, and the on-premise deployment.
- 3 Point Forward
- No consulting engagement on this one — it was delivered by the engineering arm directly for the client.
Want one of these?
If you already know what needs building, talk to us directly. If the operational problem is not pinned down yet — which is more often the case — start with the business systems assessment on the consulting side and come back with a plan.