Agency CMS Platform
A bilingual, headless portfolio platform built on Next.js and Strapi 5.
The open source monorepo that powers this very website: a Next.js frontend rendering CMS-driven page sections, a Strapi 5 backend with EN/DE localisation, and a zero-dependency media pipeline that stores uploads directly in SQLite.
- Role
- Author & maintainer
- Started
- License
- MIT
About the project
Agency CMS Platform is the codebase behind vedrankrizic.com. It started as an experiment in how far a single developer, supported by a crew of AI coding agents, can push a production-grade headless stack without a large team.
Why it exists
Most portfolio and small-business sites end up either as rigid templates or as over-engineered CMS projects. This platform sits in between: editors compose pages from typed, reusable sections in Strapi, while the Next.js frontend stays fast, accessible and fully statically optimisable.
Highlights
- Section-driven pages: 35+ typed section components mapped 1:1 to React components.
- Bilingual by design: English and German content with locale-aware slugs and hreflang alternates.
- Single-file deployments: media is stored in SQLite, so the whole site ships as one database file.
- Core Web Vitals first: image optimisation, minimal client JavaScript and performance budgets in CI.
Boring infrastructure, delightful content editing.
Features
Composable page builder
Pages are dynamic zones of typed sections: hero, skills, project lists, FAQs and more.
EN/DE localisation
Strapi i18n with per-locale slugs, translated SEO metadata and hreflang support.
SQLite media provider
A custom Strapi upload provider that stores binaries in the same SQLite database.
Performance budgets
Lighthouse and Core Web Vitals checks keep the frontend fast as features grow.
Privacy by default
Consent-aware analytics, no third-party fonts and GDPR-ready legal page templates.
One-command deploys
Docker Compose and Caddy with automatic HTTPS on a small VPS.
Tech stack
- Languages
- Backend
Storing Strapi media in SQLite: a pragmatic upload provider
Why a small site does not need object storage, and how a 100-line upload provider ships the whole site as one file.
- Architecture
Building a bilingual headless portfolio with Next.js and Strapi 5
How typed page sections, locale-aware slugs and a strict content contract keep a two-language site maintainable.
- Architecture
Compliance is a trust signal, not a burden
Why GDPR, accessibility and a correct imprint belong in the architecture from day one, and how this site handles them.