Personal Project
Client portal
An authenticated delivery portal, built so client work did not live in email threads.
- Impact
- Row-level security, 9 migrations
- Timeline
- February 2026
- Role
- Design, build and database
Record
The Challenge
Running a project through email means the brief, the feedback and the final files end up in three different inboxes, and the client has no idea what state anything is in. I built a portal instead: clients sign in, see where their project has got to, review brand strategy and approve it, leave feedback against specific pieces of work, and collect the finished assets. There is an admin side behind it where I ran the projects, reviewed discovery answers and published strategy to the client when it was ready.
The Solution
Next.js and Supabase. Authentication takes email and password, Google or GitHub. Access is enforced in the database rather than in the interface: row-level security across nine migrations, a role column on profiles with an is_admin helper behind the policies, separate policies for storage and for admin project access, and a trigger that creates a project when an account is created. That distinction matters. A portal that only hides the admin routes in the front end is not access control, it is a menu. This one refuses at the database no matter what asks. It is no longer running, because I no longer take clients. It is here because it is the most complete thing I have built on my own, not because it is for sale.