# How this was built
This site is one slice of a private monorepo that also holds my real personal data (identity, job-search logs, drafts). That constraint drove the most interesting decision here: how do you build a public site out of a repo full of things that must never go public?
The data boundary
A build-time generator reads my private source files and emits a single sanitized artifact through an explicit field-level allowlist. Anything not on the list is dropped by construction, not by filtering, so a new private field can never leak by accident. The site and the AI chat read only that generated artifact and a web-trimmed copy of my CV. They never touch the raw private data. My CV lives in one place; the page and the PDF download are both generated from it, so they can never drift.
The filesystem idea
Rather than a conventional portfolio, the site is a small dev environment: every section is a file rendered as its own format. The CV is markdown, the stack is YAML, contact is a spreadsheet, chat.app is a running process. The medium is part of the message.
Stack
- Next.js (App Router), statically prerendered (SSG) for speed and SEO.
- TypeScript, Tailwind, semantic HTML with an accessibility budget.
- Deployed on Vercel. The only dynamic island is the chat (an edge function).
Built (almost entirely) with AI
This site was built almost entirely by AI — that's the point, not a footnote. Most of this repo is worked by scheduled agents: an orchestrator that plans and dispatches engineer and reviewer agents which open pull requests, with me as the merge gate. This site was built the same way, in the open, one reviewable PR at a time. The code is open; the data is not.
Live now
What's already shipped:
- Live AI career chat (Gemini), grounded only in the public profile, with cited sources and a prompt-injection guard.
- The filesystem concept: every section rendered as its own format (md, yaml, json, a running app, a dir).
- Build-time data allowlist: one sanitized artifact, so a private field can never leak by accident.
- One-source CV: the changelog page and the PDF/Doc download are generated from the same file.
- A photo gallery from the field, teams and curiosities, with hover previews and deep links.
- An achievements layer with hidden pages and a few easter eggs (there is a flag to find).
- Static SSG on Vercel, responsive, keyboard-accessible, and reduced-motion aware.
Roadmap
What's next, roughly in order:
- A shared-element transition: files fly from the sidebar into the content pane.
- An ambient audio toggle (default muted).
- Theme picker (Dracula / Nord / Solarized) + a Matrix dev mode.
- i18n: EN/PT curated, then ES/JA, plus on-demand AI translation.
- Accessibility toggle: colorblind-safe + high-contrast.
- Swappable chat skins.