Skip to main content
Jon Legene Kolstrup

Personal Project

Client portal

An authenticated delivery portal, built so client work did not live in email threads.

Record

Impact
Row-level security, 9 migrations
Timeline
February 2026
Role
Design, build and database

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.