01 / Platform
New Dev OS
A sales, marketing, and inventory platform for luxury condo developments, designed and built solo.

Summary
Luxury new-development sales teams run on a patchwork of tools: a CRM for leads, spreadsheets for inventory and pricing, a separate calendar for tours, an events tool for launch parties, ad dashboards for spend, and slide decks for the weekly developer meeting. Nothing reconciles, and every Monday someone rebuilds the same numbers by hand. I built a single operating system for the whole motion: one workspace per development, where leads, residences, contracts, events, ad spend, and reporting all live against the same data and the same definitions. It is live today, syncing overnight without supervision, and used by sales executives, marketing staff, and the developer clients themselves.
Context
Working with new-development sales teams, the same failures kept surfacing. Inventory lived in spreadsheets, so price, status, and availability drifted between the sales office, the broker network, and the developer, and availability sheets were stale the day they were sent. Lead numbers could not be trusted, because the CRM counted every imported broker contact as a lead and monthly reports overstated performance three to four times over. Event RSVPs never made it back to the CRM as attributed leads, so event spend looked like it produced nothing. The weekly developer meeting was rebuilt by hand, every week, for every project. And every project was different, with its own branding, unit economics, and sales stages, so an off-the-shelf product was never going to fit.
What I built
- A project-scoped workspace: every development is its own tenant with its own branding, terminology, sales stages, team, and client access. Developer clients only ever see the one project they own, read-only, and access is enforced in the database rather than the interface
- Live inventory and a stacking plan: the full building renders as a proportional stacking plan, color-coded by status, with a detail page per residence covering pricing, layout, exposure, floor plans, media, documents, unit history, and contracts. Every field change is written to an activity log, so pricing disputes are settled by reading the record
- Building-level pricing formulas for co-op style buildings: change the multiplier once and every unsold unit recalculates through a database trigger, replacing hundreds of re-keyed rows
- A CRM that stays honest: two-way contact sync with the sales team's CRM, broker and buyer relationships modeled explicitly, and a qualified-lead definition that filters imported contacts so reported volume reflects real inbound demand
- Events, RSVPs, and on-site check-in: public RSVP pages, a waitlist, a tablet kiosk for the door, and branded transactional email, all per project, with two-way sync to a partner events system over signed requests and nightly reconciliation
- Contracts with deposit and commission installments, visible from the buyer's page and the residence's page alike
- Marketing attribution: paid search and paid social spend pulled nightly and joined to lead source, so cost per lead and cost per tour are computed rather than estimated. Search Console for organic visibility, and QR codes on physical signage tracked to the scan
- The weekly meeting, automated: a structured notes editor with slash commands that link to contacts, contracts, units, and events, funnel figures as of the meeting date or as of now, and export to a branded PDF
- Client-facing collateral: availability lists exported as branded PDFs in the developer's own logo and type, and a curated mode that sends a buyer a personalized selection while logging those residences against their record
- Strategy reports with an assistant that reads the project's own meeting notes and performance data to draft takeaways and action items for staff to edit
Screens




Client and project names are anonymized. Interface visuals use representative sample data.
How it works
01
Tenant
One workspace per development. Branding, stages, team, and client access are scoped by project, and the database enforces the boundary.
02
Inventory
Residences, pricing, and status in one record with an activity log. Building-level formulas recalculate every unsold unit by trigger.
03
CRM sync
Contacts flow both ways with the sales CRM. A qualified-lead definition keeps imported contacts out of the numbers.
04
Events
RSVP, waitlist, kiosk check-in, and branded email, synced with a partner events system over signed requests.
05
Attribution
Ad spend, organic visibility, and QR scans are joined to lead source nightly, so cost per lead is computed, not estimated.
06
Reporting
The weekly meeting, the developer's read-only view, and branded collateral all read from the same data.
Detail
Authorization in the database, not the UI
Two security-definer functions, one for project access and one for admin, back all 209 row-level security policies. Adding a screen cannot accidentally leak another tenant's data, because the query itself returns nothing. The same instinct runs through the rest of the build: every integration writes its own run and failure log, deduplication is handled with unique constraints and nightly reconciliation instead of manual cleanup, and pricing formulas live in the database with full change history so the number on screen, in the PDF, and in the export can never disagree.
Outcome
One source of truth for inventory, replacing spreadsheets circulated by email. Reported lead volume corrected to real qualified demand, in one project from 343 to 92 for a single month, which made cost per lead a usable number for the first time. The weekly developer meeting is assembled from live data with an as-of-meeting-date view for honest week-over-week comparison. Event RSVPs, tours, and contracts attribute back to their source, so event and ad spend can be judged on contracts rather than impressions. Developer clients have their own read-only login instead of waiting for a monthly deck.
0
Database tables behind one workspace per development
0
Row-level security policies enforcing tenant access
0
Backend services, four of them running nightly unattended
0
External systems kept reconciled
What I would highlight
This was not a greenfield product built to a spec. It grew inside a working sales operation, shipped continuously against real users, and had to stay correct while the schema, the client roster, and the sales process all changed underneath it. The interesting engineering is not any single feature. It is keeping eight external systems, multiple tenants, and a decade of real-estate edge cases reconciled well enough that a sales director trusts the number on the screen.
My role
Product lead and sole builder. Product scoping, data model, interface, integrations, deployment, and the operational tooling around the edges. I also run the operation that uses it, so I ship against my own bug reports.
Stack
- React 18
- Vite
- TypeScript
- Tailwind
- Postgres
- Row-level security
- Edge functions
- Follow Up Boss API
- Google Calendar
- Search Console
- Paid search and social APIs