all projects

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.

Gallery

Portfolio | Personal Portfolio: CMS-driven portfolio website