This site + Digital Twin
My online CV and portfolio, built with Nuxt 4 and Nuxt UI. Its standout feature is the Digital Twin: an AI chat that answers questions about my career in the first person, grounded only in the facts from my CV, so recruiters can ask what they actually want to know.
How it works
- 1Ask
A visitor types a question on the Digital Twin page.
- 2Server route
A Nuxt server route receives the conversation, keeps the last 20 valid messages and drops anything malformed.
- 3Grounded prompt
The system prompt is built from the same typed profile data the pages render, with rules against inventing technologies, metrics or client names.
- 4Model with fallbacks
OpenRouter tries a list of free models in order until one answers.
- 5Answer
The reply comes back to the chat, written as me, in the language the question was asked in.
- Career facts and projects live in typed data files shared by the pages and the server
- Updating the CV means editing one file; the site and the Digital Twin can’t drift apart
- Adding a project means adding one entry; its card and case study page are generated
- Nuxt 4, Nuxt UI and Tailwind CSS 4, written in TypeScript
- English and European Portuguese versions with @nuxtjs/i18n
- Deployed on Vercel with Vercel Analytics
- Home page prerendered for fast first load
Design decisions
Low temperature and explicit rules: the twin says it doesn’t have the information rather than guessing.
The browser only talks to the site’s own endpoint; the OpenRouter key never reaches the client.
Free models get rate-limited or retired without notice, so the twin lists several and uses the first that answers.
A per-visitor limit (5 a minute, 50 a day) stops bots from using up the daily free-model quota.
Pages are templates over typed data, which keeps the content easy to update and type-checked.



