Governed Portfolio Assistant – sebastianbalderas.com
A working assistant recruiters use instead of a contact form — designed, built, deployed and tested end to end on my own.
There is no contact form on this site. The assistant is the way in: a recruiter asks it questions or pastes a job description, and it answers from my real source material — including where I don't fit.
The problem
A recruiter has a few seconds and a job description. They need an honest answer on fit, not a sales pitch — and a portfolio that only argues for itself can't give one.
What it does
Routes by intent
When a question is about a specific page — a case study, Services, About or the Storybook — it can open that page. The destination comes from a fixed list: the server sends a key, never a URL.
Maps a job description
Paste a posting and it answers requirement by requirement, in three blocks: documented fit, each line tied to the source it comes from; what isn't documented, to confirm with me directly; and what only exists on this portfolio.
Hands over contact
It gives the email and the booking link itself. It is the contact surface, not a widget on top of one.
Answers by voice
Typed or spoken questions, in English and Spanish.
Boundaries
It says what doesn't fit
A requirement the sources don't document is listed as not documented — never quietly dropped, never stretched to look like a match.
It doesn't inflate my profile
Metrics that aren't safe to cite are fenced off in the source itself, and a figure is never moved onto a claim it doesn't belong to.
It speaks as my assistant, not as me
My source material is written in first person, so every retrieved passage is wrapped with who wrote it before it reaches the model.
It holds for any role
An architect's or an electrician's job description gets the same treatment as a design role: what fits, what doesn't, and nothing invented to close the gap.
How I evaluated it
I ran real job descriptions through the live assistant and read every answer in full. Two kinds: control postings far outside my profile — an architect and an electrician — where any match would be invented, and real postings close to it, where the risk is stretching a near-match into a fit.
For each run I counted documented fits and requirements listed as not documented, checked that no requirement disappeared, looked for leaked instructions, and measured the tokens each answer costs.
| Job description | Documented fit | Not documented |
|---|---|---|
| Licensed ArchitectControl: outside my profile | 0 | 4 |
| Journeyman ElectricianControl: outside my profile | 0 | 5 |
| Senior Product Designer, B2B SaaSClose to my profile | 8 | 1 |
| UI/UX Designer, AI startupClose to my profile | 8 | 15 |
| Senior Product Designer, climate nonprofitClose to my profile | 10 | 8 |
| A posting in SpanishClose to my profile | 6 | 1 |
No false fits and no leaked instructions in any run. Every requirement comes back either as a fit or as not documented — none is dropped.
The rules that have to hold every time don't live in the prompt: the code that assembles the answer enforces them. Against the previous version, that step moved between −1.2% and +4.8% in tokens — inside the +15% budget my tests enforce — and the ~12.4k-token source selector is served 99% from cache.
Limits: no posting I tested asked for team size, so that case is still unproven — and I haven't yet checked it on a real phone.
Evidence in Storybook
The interface behind those boundaries is documented as working components: what the assistant shows when it is unsure, when something fails, and where an answer came from.
Why it matters
On the home page I sequence AI adoption across three levels — L1, L2 and L3 — and deciding where to stop is the design work. This assistant applies that rule to my own product: it acts only inside a narrow, bounded decision surface — opening a page from a fixed list, assembling an answer from documented sources — and it says when it shouldn't act.
When I reviewed them in August 2026, IBM Carbon, AWS Cloudscape, Atlassian Rovo and GitLab Pajamas all documented AI patterns. All four were missing the same thing: uncertainty, hallucination risk, the limits of confidence. The Uncertainty and Provenance sections of my Storybook are built to fill that gap.
Stack
- Next.js
- React
- TypeScript
- Tailwind CSS
- Design tokens mapped to code
- Retrieval routing and guardrails