Francisco Barros
Back to projects
Side project2026 · Design, architecture & development (solo build, AI-assisted)

This portfolio — built with an AI orchestrator

The site you are looking at: a bilingual CV + portfolio in Next.js 15, built with a custom Claude Code orchestrator (subagents, skills, hooks and ADRs).

AI OrchestrationNext.jsClaude CodeFull-stack
01

Problem

I wanted a portfolio that not only looked good but showed how I work: end-to-end AI-assisted development with real engineering discipline (strict types, tests, i18n, consent-based analytics, SEO). The challenge was orchestrating all of that without the AI improvising — keeping the design source separate from its integration, with verifiable quality at every step.

02

Solution

I designed a bespoke Claude Code orchestrator in `.claude/`: 5 subagents with scoped roles (planner for read-only plans; frontend-builder for UI/layout base; data-layer for typed content and Zod schemas; design-integrator to port the design with a presentational+container pattern; code-reviewer as a critical gate), 4 reusable skills (integrate a design section, add a project, declare a typed analytics event, and migrate from one design version to the next), and 7 hooks that enforce quality on every save/commit (typecheck, prettier, ES/EN i18n parity, localized content, zero hardcoded strings, a pre-commit quartet, and subagent logging). GitHub and PostHog MCP are declared to automate PRs and analytics. The design is generated separately in Claude.ai and *ported* by value (never imported). Execution ran in phases (F0–F7) with decisions recorded as ADRs.

03

Impact

A production-ready site: bilingual (ES/EN), accessible (WCAG AA, a single h1 per page), with full SEO (dynamic metadata, sitemap, hreflang, JSON-LD, Open Graph), consent-gated analytics with no raw IP, and initial JS under 50 kB gzip. But the real deliverable is the method: an orchestrated, auditable, repeatable AI workflow — exactly what I build to automate real work.

04

Metrics

5+4+7
Orchestrator
57 + 10
Tests (unit + e2e)
<50 kB
Initial JS (gzip)