Cover image for SleekFolio

SleekFolio

2025 - 2026

Portfolio
Personal Site
CMS
Firebase
Web Development
AI Agents
AI Tools
API Integration
View Live Demo
About the Project

What. SleekFolio is this site: a Firebase-backed portfolio CMS with an agentic ingestion pipeline bolted to the front of it. Projects, galleries, and video are managed from an admin console. What makes it unusual is the write path — an AI agent can read a repo on my machine and draft the portfolio entry for it, but nothing it writes reaches the live page without my approval.

Why. The portfolio was permanently out of date, because writing the entry is the least interesting part of finishing a project. Now an agent reads the repo and drafts it; I review a diff and hit publish. Handing agents a write key only works if there is a real editorial gate behind it — so that gate is the architecture, not an afterthought.

How. Every agent write lands as a draft or a staged revision. Editing a published project never mutates the live document — it stages a pending revision instead. /admin/review shows field-level diffs with approve/reject alongside drafts awaiting publish. The /api/v1 surface authenticates three ways — a Firebase ID token from the browser, a hashed sfd_ device token from the CLI, and a SleekFolio-issued JWT — and all three must resolve to an admin email or they get a 403.

On top of that:

  • MCP server — a streamable-HTTP endpoint exposing nine tools, so Claude Code, Codex, or ChatGPT can list, create, and update projects directly. Publishing is a tool too, but the agent skills are instructed never to call it.
  • OAuth 2.1 facade — dynamic client registration, PKCE-only authorization codes, rotating refresh tokens, and RFC 8414/9728 discovery metadata, so the ChatGPT connector can authenticate against it.
  • sleekfolio CLI — paired in one command: curl -fsSL <site>/install.sh | bash -s -- --pair <code>. It installs the CLI, exchanges the pairing code for a device token, drops the agent skills into ~/.claude/skills, and registers the MCP with Claude Code and Codex. Idempotent, and it never echoes the token.
  • Agent skills — discovery (find portfolio-worthy repos and reconcile them against what is already live), ingestion (write the entry), and screenshots (capture the visuals).
  • What's New — a public activity feed of project updates with AI-written summaries.

Gemini, via Genkit, assists in the editor with summaries and tag generation. Images live in PhotonLink albums rather than Firebase Storage.

Stack: Next.js 15 App Router, React 19, TypeScript, Firebase (Auth, Firestore, App Hosting), Tailwind + shadcn/ui, Genkit + Gemini, the MCP SDK, Vitest.

Links: Live site

Built Dec 2025 – Jul 2026. It started as a weekend CMS; the agentic half arrived later.