An end-to-end real-estate sales platform for Venus Group and its flagship launch, The Universe. A reception kiosk, an Expression-of-Interest engine, and a full sales CRM — three products, one shared database, one identity, one project truth.
Most suites bolt separate tools together and reconcile later. Venus was built inside-out: a single Postgres brain, with each surface reading and writing the same truth in real time. There is never a second copy of the customer.
Every prospect is one leads row. The kiosk and the EOI engine never keep a parallel customer list — they write into, or link to, the CRM.
public.projects is the single registry. The Universe is project one. GRE is Universe-only; EOI is multi-project; the CRM scopes everything by project.
All three log in against the CRM's Supabase Auth. Users and roles are managed once, in CRM → Settings → Users, and mapped into each app.
Cross-app writes go through a handful of SECURITY DEFINER Postgres functions. The apps stay dumb; the database stays correct.
A visitor enters at reception, travels a single pipeline, and — if they book — becomes a customer through one atomic transaction. Every app is just a lens onto a stage of this journey.
Gold stages are where GRE and the EOI Engine hand the lead back to the CRM.
A full real-estate sales CRM: capture, pipeline, inventory, channel partners, commissions and reporting — organised the way a sales floor actually works, from Capture to Deliver.










Expression-of-Interest management for high-demand launches: turn a cheque and a KYC into a fair, auditable allotment — without a spreadsheet or a fistfight at the sales gallery.
The Guest Reception Experience is a cinematic, full-screen kiosk at the sales gallery. A visitor is greeted, verified by OTP, and gently profiled; the moment they finish, a lead lands in the CRM at site-visit-done. Its own design language — gold on black, Cinzel & Cormorant — sets it apart from the SaaS tools behind it.






Every cross-app write is a single Postgres function — atomic, auditable, and impossible to get half-done. This is the entire integration surface.
name, phone, project,
budget, source →
lead_id (uuid)
De-dupes by phone, advances the lead to site-visit-done, and never regresses a booked or lost lead.
phone, name, email,
project →
lead_id (uuid)
Find-or-create on every applicant; new ones enter as source = 'EOI'. The lead id is stored on the applicant.
lead_id, sale_amount,
unit, partner →
customer_id (uuid)
One atomic move: stage → booked, insert the customer, and auto-fire the partner commission.
+ user_app_role() — the shared-auth contract every app calls to authorise a signed-in CRM user.
The whole suite runs on one hardened Ubuntu box behind Caddy, with a self-hosted Supabase brain. Owned end-to-end, deployable in an afternoon.
Postgres 17 with Auth (GoTrue), PostgREST and Realtime, behind a Kong gateway.
Every app on its own subdomain, Let's Encrypt certificates, localhost-only app ports.
Vite SPAs where interactivity leads; Express relays where the server must hold a secret.
Each service supervised by systemd; nightly uniform backups per project.
Tools for the sales team should be fast and legible; the moment a customer sees, should feel like luxury. Both are built on the Khosha Design System — the same tokens, re-branded, never rewritten.
Dense tables, hairline borders, instant feedback. Red as a decisive accent on near-white. Built for speed, hundreds of times a day.
Gold on black, Cinzel & Cormorant, choreographed motion. Every step is paced like a private viewing, not a data-entry form.
This very page is KDS too — Marquee editorial scale over a Filter-Coffee palette, ~9KB of tokens, zero UI dependencies.