Familia Viñas Cheesman
Private application with database-level security
A five-generation family tree where privacy is not cosmetic: the barrier lives in Postgres.
- generations in the tree
- 5generations in the tree
- access roles
- 5access roles
- data exposed without a session
- 0data exposed without a session
The challenge
A family archive with names, dates of birth, phone numbers, emails and photos of minors. The usual approach — blur the content with CSS and ask for a login — protects nothing: the name still travels to the browser and can be read from view-source, or by asking the API with the anonymous key, which is public by design. Any solution that let the data leave the server was, plainly, a leak.
The solution
We moved the restriction into the database. Public views do not send names: they return a placeholder, so anyone without a session cannot read them even by inspecting the network response. Row-level security policies filter record by record according to who you are, across five distinct roles (no session, pending, member, admin, revoked). Photos live in a private bucket and are served with one-hour signed URLs. Signing up with email, Google or Facebook always ends in a pending state until the admin approves and links the account to a person in the tree. The blur is still there, but it is purely cosmetic.
The outcome
A genuinely private site, not a public site with a private area. Beyond the per-person profile it includes a shared gallery, an automatic timeline, a surname glossary, a country map and birthday email reminders driven by a daily scheduled job.
Facing something similar?
Tell us what your business needs and we will tell you whether we can solve it, at what scope and in what timeframe.
Message us on WhatsApp