Portfolio Platform
A multilingual, statically generated portfolio with detailed case studies, screenshot galleries, a contact form and a ⌘K command palette — built as a small product, not a landing page.
- Role
- Design & development
- Year
- 2026
- Stack
- Nuxt 4TypeScriptNuxt ContentTailwind CSS v4i18nVitest

Problem
My previous portfolio was a single Vue 2 page: content hard-coded in templates, no SEO, no way to describe real projects in detail, and a build that no longer ran on modern Node.
Approach
- Static generation with Nuxt 4 — every page in three languages is pre-rendered to HTML, so it loads instantly and is fully indexable.
- Content as data — projects and experience are Markdown/YAML files validated by Zod schemas in Nuxt Content. Adding a case study never touches a component.
- Honest case studies — commercial projects are marked as private, with a note that company policy keeps the code closed, and screenshot galleries with personal data blurred.
- Three languages — English, Uzbek and Russian with locale-prefixed routes,
hreflangtags and an English fallback for untranslated entries. - Design system — semantic color tokens on Tailwind CSS v4, automatic light/dark theme and reduced-motion friendly animations.
- Contact that always works — a short form that composes the email in Gmail or the visitor’s mail app, plus phone and copy-to-clipboard.
- Keyboard first — a
⌘Kcommand palette to jump to any page, project or action.
Architecture
content/<locale>/{projects,experience} → typed collections
app/composables/useLocalizedContent.ts → locale-aware queries with fallback
app/pages/* → fetch data, compose sections
app/components/{home,project,site,ui} → presentational components
server/routes/{sitemap.xml,robots.txt} → pre-rendered SEO files
Outcome
A fast, accessible site that is easy to keep up to date — publishing a new project is a single Markdown file per language.
Next project
Fendos