← Back to all projects

Portfolio

Python Flask Supabase LLMs Groq HTML/CSS Jinja2 REST API
Portfolio screenshot 1
Portfolio screenshot 2
Portfolio screenshot 3
Portfolio screenshot 4
1 / 4

Full-stack portfolio with Supabase-backed projects, admin CMS, image optimization, dark/light theme, and a Groq LLM assistant that answers questions about my work.

Case study

01 Problem

Static portfolio templates don’t show backend skill. I needed a site that is the product itself: dynamic projects from a database, an admin I control, case-study fields, and an assistant that can talk about real work — not hardcoded HTML.

02 Approach

Built a Flask app with Jinja templates, Supabase for project data and image storage, session-based admin auth for create/edit/delete, Pillow-based image optimization on upload, SEO basics (sitemap, robots, meta), and a rate-limited chat endpoint powered by Groq (Llama 3.1) with live project context from the database.

03 Architecture

Browser → Flask routes → Supabase (Postgres + Storage). Chat: user message + history + project summaries → Groq API → short reply. Admin session auth; public pages read-only. Optional contact form via SMTP.

04 Challenges

Keeping chatbot answers short and accurate; dependency conflicts in production; making the UI feel intentional without looking like a generic AI template; environment-specific URLs for sitemap and canonical tags; safe uploads (type checks, size limits, CSRF).

05 Results

Live portfolio with CMS, optimized uploads, dark/light theme, services and contact pages, and an assistant grounded in project fields (problem / approach / results). The site itself demonstrates full-stack and LLM integration end to end.

06 Lessons

Shipping the full loop (data → admin → public UI → assistant) taught more than isolated demos. Small product decisions — rate limits, image size, theme persistence, honest case studies — compound fast.

07 Next steps

Deeper case studies on every project, custom domain, light analytics on which case studies get read, and tighter LinkedIn/CV alignment with the same top three projects.