Portfolio

A self-hosted portfolio platform for presenting projects, skills, publications, talks, and a personal intro — with inline editing on the live page, a full admin backend, bilingual content, and an AI assistant that manages content in natural language.

This platform is a personal portfolio system designed to present professional work across multiple dimensions: projects with associated skills and roles, academic publications, conference talks, a blog, and a personal intro on the landing page. The goal was to build a self-hosted solution that gives full ownership over content and structure, while making everyday updates — editing a project description, adding a new publication, translating a page — as frictionless as possible.

The result is a full-stack monorepo combining a public-facing Next.js website, a dedicated admin application, and a PocketBase backend, all deployable via Docker with a single command.

Content is managed through three layers that cover different use cases:

  • Inline editing lets you click any field directly on the live page — titles, summaries, dates, skills, cover images — and save without leaving the view; this covers the 80% of quick day-to-day updates.
  • The admin application provides form-based panels for all content types: projects, publications, talks, blog posts, pages, tags, persons, and site configuration.
  • The AI assistant, accessible via a floating widget (Cmd+K) or a standalone chat page, handles the rest: creating a project from a URL, translating content to the secondary language, bulk-updating tags, or writing a new blog post from a brief description.

The backend runs on PocketBase (SQLite, zero external dependencies), with schema migrations tracked in version control and auto-applied on startup. All content types support bilingual fields — an _alt suffix convention for the secondary language, with locale codes configurable at runtime without a rebuild.

I designed and built the entire platform as a solo project, covering frontend architecture, backend schema, infrastructure, and AI integration. The AI layer uses the Vercel AI SDK with streaming and tool use, supports OpenAI and Azure models, and has a dynamically assembled system prompt that fetches real portfolio entries to match tone and length before writing new content. Infrastructure uses Docker Compose with automatic SSL via nginx-proxy and a one-command update workflow.

Similar Projects