Store the enquiry before sending email.
The contact flow persists valid enquiries to PostgreSQL first. Email notifications are an optional later step; a delivery problem should not lose the original client brief.
CASE STUDY / 002 / INDEPENDENT PROJECT
An evolving Next.js application: originally built as a development studio, now transitioning into a Developer Lab with projects, software and practical tools.
Visit the live siteWHY IT EXISTS
The public website needs to explain real work clearly and make it easy to start a conversation. Behind it, a private Studio handles the practical tasks: enquiries, publishing and availability.
Building both sides means considering UI, forms, access control, persistence, spam prevention, production networking and maintainability together.
THE APPLICATION / HOW IT FITS TOGETHER
This is a system overview, not a screenshot or a claim about user volume.
Portfolio, services, projects, contact journey and accessible light/dark layouts.
Turnstile challenge, origin checks, server-side field validation and abuse controls.
Persistent enquiries, project entries, journal posts and site settings.
Authenticated enquiry triage, content publishing and availability controls.
ENGINEERING NOTES
The contact flow persists valid enquiries to PostgreSQL first. Email notifications are an optional later step; a delivery problem should not lose the original client brief.
An initial production submission returned HTTP 403 because origin verification compared the browser's HTTPS address against an internal HTTP URL. The validation now uses the configured public site origin while retaining the security check.
Studio pages require authentication. The site publishes only marked projects and articles, with draft content kept out of the public route. Sensitive configuration remains on the server.
WHAT THIS DEMONSTRATES
The live website demonstrates frontend design, a working backend and the process of diagnosing problems after deployment. It continues to be refined as the studio develops.