# 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
I'll say it plainly, because it's the point: this site was built almost entirely by AI, and I'm proud of that. 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. Knowing how to direct, review, and trust (but verify) AI is the skill now; the code is open, the data is not.
Roadmap
What's next, roughly in order:
- Live AI chat (Gemini) replacing the seeded answers.
- 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 and a couple of easter eggs.