Personal Portfolio: CMS-driven portfolio website
CMS-driven portfolio with a Next.js frontend, a Supabase backend and a custom admin panel.
About the project
A personal portfolio website where every project is managed from a private admin panel instead of being hard-coded. Visitors can browse featured and published projects, filter them by category and role, and open detailed case-study pages with galleries. I designed and built the whole thing myself, from the database schema to the interface.
My contribution
I was solely responsible for the project, end to end.
Database and backend. Designed the Supabase (PostgreSQL) schema, with projects, categories, roles and image galleries linked through relations, and managed it with versioned migrations.
Admin panel. Built a protected admin area with Supabase authentication, where I create, edit, publish and feature projects, and manage their categories, roles, technologies and images.
Rich content editing. Integrated a Tiptap editor so project descriptions and case studies can be written with formatting directly from the admin.
Rendering and performance. Used Next.js App Router with Server Components, static generation for project pages and incremental revalidation, so pages load fast while content stays editable without redeploying.
SEO. Added dynamic metadata per project, with a “Portfolio | Project” title template and Open Graph data for link previews.
Filtering. Implemented project filtering by category and role through URL parameters, so filtered views can be shared and bookmarked.
Interface. Designed a dark, developer-themed UI with a custom component system on Tailwind CSS 4 and shadcn/ui, an animated hero, an image gallery with lightbox and reveal-on-scroll animations, with support for reduced-motion preferences.
Deployment and analytics. Deployed on Vercel with Vercel Analytics.