13 Cielos
The landing page shows which lots are still available the moment someone opens it. Behind it, a panel manages lots, clients, users and sales, and every buyer logs into their own portal.
The challenge
- 01Lot availability changes every day; a static list stops being true within hours.
- 02Leads came from Facebook, Google and TikTok campaigns, each with its own format.
- 03Buyers needed to know how much they had paid without calling the office.
What I built
Real-time inventory
The landing page listens to database changes: when a lot is held or sold, it updates itself.
Admin panel
Lots, clients, users and sales in one place.
Client portal
Total paid, outstanding balance, payment history per lot and PDF receipts. Temporary password with a forced change on first login.
Campaign import
Upload the Facebook, Google or TikTok Ads CSV; the system detects the platform and maps the fields.
Protected form
reCAPTCHA verified on its own backend before every lead is saved.
How it is built
- Public landing
- Admin panel
- Client portal
- Postgres (Supabase)
- Realtime
- RPC functions
- reCAPTCHA with Express backend
- Campaign CSVs
- Apache hosting
The outcome
Sales, administration and buyers work on the same data. It also became the blueprint for the next development: Los Cedros.