CRM Portal

Present

Full-stack CRM and admin portal for a Sydney-based company, with a public contact form and a staff-only dashboard, containerised using Docker and docker-compose. Google OAuth with a server-enforced staff allowlist controls access, and Next.js middleware and httpOnly session cookies guard admin routes. A Flask REST API serves a normalised PostgreSQL schema, with migrations and seed data managed via the Supabase CLI. The Next.js frontend deploys to Vercel and the Dockerised Flask backend runs on a cloud droplet.

Tech: Next.js, React, Flask, Python, Supabase, PostgreSQL, Docker, Google OAuth, Vercel