Gallardo Propiedades

A real-estate platform for an agency in Córdoba: public property site and custom admin panel, two Next.js apps on one Supabase backend. Plus the story of a production incident I diagnosed and fixed.

Role
Independent project through my studio: design, build and operations, end to end.
Stack
Next.js 14 · Supabase · Cloudflare R2
Status
In production, in daily use by the agency

The agency managed its listings by hand and had no web presence that reflected the business. It needed a public site clients could browse, and a panel its own staff (non-technical people) could use to manage properties, photos and inquiries without calling anyone.

Two Next.js applications share a single Supabase backend: the public site reads the catalog; the admin panel gives the staff full control over listings, photos and inquiries with zero code. Property photos are served from Cloudflare R2.

Gallardo Propiedades public site, property listing page
the public property site, in production

Months into production, the Supabase project was moving 6.46 GB of egress a month, wildly out of proportion for a small agency site. I traced the root cause: a public endpoint was fetching all four database tables, including years of accumulated inquiries, on every request, with caching explicitly disabled (cache: 'no-store').

The fix: a dedicated endpoint that returns only the fields the public site actually renders, plus Next.js revalidate caching so the catalog is served from cache and refreshed on an interval instead of hitting the database per visit.

Applications
Two Next.js 14 apps, public site and admin panel, on one Supabase (Postgres) backend.
Data model
Four tables: properties, agency users, inquiries, and internal notes per inquiry.
Read path
The public site consumes an internal API exposed by the panel. Only the panel talks to Supabase directly.
Catalog
Filters by operation, category, city and price, plus a map view and per-property galleries.
Media
Property photos on Cloudflare R2, with no per-image egress cost.
SEO
Technical, in full: JSON-LD, dynamic sitemap, per-property Open Graph.
Livein production and in daily use by the agency's staff
6.46 GBof monthly egress diagnosed to its root cause and eliminated
2apps, public site and admin panel, on one shared backend