Skip to content
Henry Rincón
Chat with my résuméRecruitingInside CV Viva30 sprints closed

Ask the résumé: it answers with what's on record and cites its source.

CV Viva's chat answers in Spanish or English about Henry Rincón's career, always in the third person and only with the site's content: the résumé, 25 in-depth documents, every Portfolio piece and the Methods publications. Every claim carries its citation to the section that backs it, and if the AI provider goes down, it keeps answering with local search.

Every claim, with its citation
0 tokens on what isn't on record
If the provider fails, local search

An answer with its citations: the chips lead to Vesting and BI & decision

10 real screens
From the map to the chapterTap a box on the map to open its chapter; “Back to the map” returns you to that box, and “↩ Back” to where you were.
Boxes and arrowsEvery chapter has its flow. A box with the screen icon shows it: hover or tap it.
Cards that flipConcept, difference and decision. Tap a card to see the answer.
The app tourEvery screen, full screen. Use ← and → on your keyboard.
01 · What changes

01 · What changes when the résumé answers back

Today0
With the chat25

in-depth documents within reach: the site doesn't publish them, the chat reads and cites themmeasured

Besides the résumé, the Portfolio and Methods, the chat reads 25 in-depth documents Henry wrote and the site doesn't publish as pages: all 25 are approved and indexed in Spanish and English. A citation doesn't open the document: it says where the sentence came from (AF-09, for example) and leads to the section of the site that backs it.

  1. Today: You read whole pages to find one fact, and you can't tell where it comes from.
    With the chat: You ask in your own words, and every claim carries its number, which leads to the section that backs it.
  2. Today: Faced with what isn't written down, a model may fill the gap.
    With the chat: What isn't on record gets a fixed text, without calling the model or spending a token.
  3. Today: You ask why he left a job, and the answer may assume a motive.
    With the chat: “Why did he leave Vesting?” has a fixed answer: how the stage closed, with its citation and no added causes.
  4. Today: The apps and the methods live on other pages, far from the question.
    With the chat: A question about an app or a method brings its citation to the brochure, the sheet or the exact block.
  5. Today: If the AI service goes down or runs out of quota, the chat goes silent.
    With the chat: It switches to “Local search” and keeps showing the fragments that best answer.
  6. Today: You reload the page or switch language, and the conversation is lost.
    With the chat: It survives reloads, navigation and a language switch; it expires after 8 hours and you clear it with one click.

Who it is for, and why

Who it is for

For recruiters who want a specific answer (“what did he do at Vesting?”, “what does he know about Microsoft Fabric?”) without reading the whole site, and for anyone who wants to check it: every answer says where it comes from and takes you there. What isn't on record isn't answered, and the chat says so.

What sets it apart

A résumé chat that doesn't make things up takes more than a good prompt. Here, what isn't on record (what he didn't do, what he doesn't know, salary, a credential he doesn't hold) gets a fixed text before it reaches the model, without spending a token; leaving Vesting has its own fixed answer with its citation, and the panel shows only the sources the answer cites. Behind it sit an index rebuilt on every publish and a bank of 175 outside questions per language that proves, on every change, that the content answers. And it never goes silent: if the provider fails, the same search runs in the browser.

02 · The map

Top to bottom, in the order a question happens: the visitor comes through the gate, asks and gets an answer with its source or a fixed text, and the chat stays up even if the provider fails or the page reloads. On the right, what runs through everything.

1Through the gateName, email and a code; a quota per person
2Asks and gets an answerWith its citation, or a fixed text if it isn't on record
3Stays upIf the provider fails, and on reload or a language switch
02 · The map’s chapters

One chapter per group: what it solves, when it fits, how it works, its screens and its cards.

2.1 · Answers with the source in sight★ The starEvery claim carries its number, and every number leads to the section of the site that backs it. · 3 features

What it solves

You can't ask a résumé anything, and an answer without a source can't be checked. Here whoever asks gets two or three paragraphs in the third person, built only from the site's content, and every claim carries the number of its source, which leads to the section that backs it.

It fits if

  • You recruit and want a specific answer without reading the whole site.
  • You want to check an answer: the chip takes you to the section of the site that backs it.
  • You ask about a Portfolio app or a method, and want its page or the exact block.

What it is not

  • It doesn't speak as Henry: it speaks about him, always in the third person.
  • It doesn't show sources it retrieved and didn't use: only the ones its answer cites.

How it works · From the question to the section that backs it

  • Start · Chat with my résumé: A question about the career arrives
  • Step · Chat with my résumé: Finds the four fragments that best answer
  • Step · Chat with my résumé: Asks for two or three paragraphs in the third person, citing [n]
  • Decision · Chat with my résumé: Does the answer cite any source?
  • Step · Chat with my résumé: Shows one chip per cited source
  • End: Answers with no chips
  • Step · Chat with my résumé: The chip leads to the section, the piece or the Methods block
  • End: Without losing the conversation

Its pieces 3

CH-01Answers that cite the résumé

Whoever asks gets two or three paragraphs based only on the site's content, and every claim ends with its citation. The chip says which source the sentence came from and which section it leads to, without losing the conversation.

An answer with its citations: the chips lead to Vesting and BI & decision
No screen of its own
CH-02Always in the third person

The chat talks about Henry, never as Henry. The in-depth content is in the first person because it is his voice, and the answer moves it to the third; a test flags the owner's voice if it slips in.

It runs through the whole app.
CH-03The Portfolio and Methods, citable too

The index adds every Portfolio piece and the Methods publications, block by block: a question about an app, an agent or a method brings its citation, which leads to the app's brochure, the piece's sheet or the exact block.

The answer cites the Profile, Vesting and a Methods publication

Cards 4

Concept

What does a chip like “[1, 2] AF-09 · Vesting” say?

Answer

The numbers are the marks in the answer that come from that source. The code says where the sentence came from: AF for an in-depth document, CV for the résumé, APP for the apps list, FT for a Portfolio piece, and the publication's number for Methods (T4, for example). The last part says where it leads: the section of the site that backs the sentence.

Difference

Who is speaking in the chat?

Answer

The chat may talk about itself, but it always talks about Henry in the third person. His in-depth documents are in the first person because they are his voice, and the answer moves them to the third.

The assistant

It may say “I only answer from what the résumé actually shows”: it talks about itself, not about Henry.

Henry

Always “Henry”, “he”, “his”; never “I” or “my” for his experience. A test flags the owner's voice if it slips in.

Decision

You ask about a Portfolio app: what wins, what the Portfolio publishes or Henry's documents?

Answer

If the question is about a piece, what the Portfolio publishes wins and the citation leads to its page; if it is about Henry, his document wins. In the search, Portfolio fragments weigh half as much as in-depth documents: they are evidence of one piece, and Henry's voice is his documents.

Decision

The answer uses two parts of the same document: do two chips show up?

Answer

No. One chip shows up with both numbers, like “[3, 4] AF-17 · BI & decisión”, and on hover it shows the titles of both parts. No number is lost, because the answer cites by number.

2.2 · Not on record, not answeredAbsences, salary or an unrelated question get a fixed text, without calling the model or spending a token. · 3 features

What it solves

A model asked about what isn't written down may fill the gap. Here absences, salary, availability or an unrelated topic get a fixed text before reaching the model, without spending a token, and leaving Vesting has its own fixed answer, with its citation.

It fits if

  • You want to know whether he holds a credential and would rather the chat didn't guess.
  • You ask why he left Vesting and want what's on record, with its citation.
  • You need to talk about salary or availability: the chat points you to Contact.

What it is not

  • It doesn't say Henry didn't do, doesn't know or doesn't have something: what isn't on record isn't answered, and it says so.
  • The lists are a floor, not a ceiling: an unusual question can reach the model, and the prompt stops it there.

How it works · Before calling the model

  • Start · Chat with my résumé: A question arrives
  • Decision · Chat with my résumé: Does it ask for what isn't on record?
  • Step · Chat with my résumé: Gives the fixed text, with no sources or tokens
  • Decision · Chat with my résumé: Is it about leaving Vesting?
  • Step · Chat with my résumé: Tells how the stage closed, with its citation
  • Decision · Chat with my résumé: Is it unrelated to the career?
  • Step · Chat with my résumé: Invites a question about the career
  • End: Goes on to search and the model

Its pieces 3

CH-04One text for what isn't on record

“What has he never done?”, his weaknesses, a credential he doesn't hold, salary or availability all get the same fixed text, in the page's language, with no sources and without calling the model.

«What are his weaknesses?»: the fixed text, with no sources
CH-05Leaving Vesting, with its citation

“Why did he leave Vesting?” has a fixed answer that tells how the stage closed, with its citation to the Career section. It adds no causes the content doesn't give and spends no tokens.

«Why did he leave Vesting?»: the fixed answer, with its citation
CH-06Unrelated questions, out

The weather, a joke, a recipe or a request for code get a friendly fixed answer that invites a question about the career, with no sources and without calling the model.

A joke gets no answer: the chat invites a question about the career

Cards 4

Concept

What does “not on record” mean?

Answer

What the résumé doesn't say: what Henry didn't do, doesn't know or doesn't have, a credential that isn't listed, salary, availability or whether he travels. The content isn't the absolute truth and something may slip through, so the chat never claims an absence: it gives one fixed text, in the page's language, and invites you to write from Contact.

Difference

“What doesn't HackGuard do?”: does that get refused too?

Answer

No. A piece's limits are written in the Portfolio and get answered; what gets refused is the person's absences. And “what does he do when a role asks for something he hasn't used?” gets answered too: it is his method.

The person

“What has he never done?”, his weaknesses, a credential he doesn't hold: fixed text, no sources.

A piece

“What doesn't HackGuard do?”: its limits are on record in its brochure, and the answer cites them.

Decision

You ask “Why did he leave Vesting?”: what does it answer?

Answer

A fixed answer, in the third person, that tells how the stage closed in January 2025, with its citation to the Career section. It adds no causes the content doesn't give, doesn't call the model and works in local search too. Two prompt rules in a row didn't get the model to answer only with what's on record; that's why this question no longer reaches it.

Concept

How does the chat know a question is unrelated?

Answer

In two ways: a closed list (the weather, a joke, a recipe, a request for code) and a strict search of the index that finds nothing. Either way it gives a fixed invitation to ask about the career, with no sources and without calling the model. Whatever slips through reaches the model, and the prompt declines it.

2.3 · It never goes silentIf the provider fails or runs out of quota, local search takes over; switching provider is switching a variable. · 3 features

What it solves

A chat that depends on a single AI service goes quiet when that service fails or runs out of quota. Here it switches to local search over the same index and says so; the provider is chosen with an environment variable, without touching code, and another variable turns the whole chat off.

It fits if

  • You ask right when the provider fails and still want the fragments that answer.
  • You're interested in how the AI provider is switched without touching the code.
  • You're assessing how an AI chat is run: there is a switch that turns it all off.

What it is not

  • Local search doesn't write: it shows the fragments as they are, trimmed and numbered.
  • It doesn't jump from one provider to another by itself: if the chosen one fails, it switches to local search.

How it works · When the provider fails

  • Start · Chat with my résumé: A question with content arrives
  • Step · Chat with my résumé: Asks the provider for the answer, unless it's paused
  • Decision · Chat with my résumé: Does the provider answer?
  • End: Answers with its citations
  • Step · Chat with my résumé: Counts the failure: three in a row pause it for a minute
  • Step · Chat with my résumé: Shows “Local search” and the fragments that answer
  • End: The panel logs the answer as local

Its pieces 3

CH-07Local search if the provider fails

If the provider goes down or runs out of quota, the chat switches to “Local search” and shows the fragments that best answer. After three failures in a row it stops trying for a minute.

With no provider, local search shows the fragments that answer
No screen of its own
CH-08Five providers, one variable

Groq, Gemini, Azure with Microsoft Foundry (formerly Azure AI Foundry), Anthropic or a self-hosted OpenAI-compatible server: switching provider is switching an environment variable, without touching code.

It runs through the whole app.
No screen of its own
CH-09A switch that turns it off

One variable turns the whole chat off: the button disappears from every page and the server route answers that it is off.

It runs through the whole app.

Cards 4

Concept

What is “Local search”?

Answer

It is the fallback mode. When the AI provider fails, the browser downloads the same index the server uses and shows the four fragments that best answer, trimmed and numbered, with the “Local search” label in plain sight. It doesn't write: it shows the evidence as it is. The index is downloaded only at that moment.

Difference

Model answer or local search?

Answer

Both come from the same index and the same number of fragments; what changes is who puts the answer together.

The model

Two or three paragraphs in the third person, with their [n] citations, built from the four fragments.

Local search

The same four fragments, unwritten, numbered and with their chips; the fixed texts still answer too.

Decision

The provider retires the model the chat uses: what happens?

Answer

Answers keep coming, in local search and with the label in plain sight. The automated tests can't see it, because they use a simulated provider; the owner notices it in the label or in the server logs, and fixes it by choosing another model with a variable, without touching code. It has happened once, and the chat didn't go silent.

Decision

The owner wants to turn the chat off right now: how?

Answer

He sets the switch variable to false and republishes: the button disappears from every page and the server route answers that the chat is off. To turn it back on, he deletes the variable or sets it to true.

2.4 · A gate and a quotaName, email and a code before the first question; a quota per person and a blocklist. · 4 features

What it solves

An open chat can be used up by anyone, and on the other side nobody knows who asked. Here the visitor leaves their name and email, accepts the Law 1581 notice and gets in with a code; each person has 20 questions every 24 hours, an email can be blocked and every conversation goes into a log only the owner reads.

It fits if

  • You want Henry to know who is asking and to be able to follow up.
  • Something fails and you want to tell him without leaving the chat.
  • You want to know what is kept about you and how to ask for it to be deleted.

What it is not

  • It isn't an account: there is no password; the code proves the email is yours and the session lasts 30 days in that browser.
  • It isn't a public log: only the owner reads it, and no visitor can see it.

How it works · From the gate to the question

  • Start · Chat with my résumé: The chat opens with no session
  • Step · Chat with my résumé: Asks for name, email and the Law 1581 notice
  • Decision · Chat with my résumé: Is the email on the blocklist?
  • End: Sends no code
  • Step · Chat with my résumé: Sends a code: ten minutes, five tries
  • Decision · Chat with my résumé: Does the code match?
  • Decision · Chat with my résumé: Any questions left today?
  • End: Answers and logs the conversation
  • End: Asks them to come back tomorrow

Its pieces 4

CH-10The gate: name, email and a code

Before the first question, the visitor leaves their name and email, accepts the Law 1581 notice and receives a six-digit code valid for ten minutes. With it they get in and don't register again for 30 days.

The chat's gate: name, email and the Law 1581 notice
No screen of its own
CH-11Every conversation, logged with consent

Every question is logged with its answer, its sources and its mode (AI, fixed text or local search), and only the owner reads it. Anyone who wants it deleted asks from Contact.

It runs through the whole app.
CH-12A quota per person and a blocklist

Each email gets 20 questions every 24 hours, counted in the log, and whoever hits the cap is asked to come back tomorrow. An email on the blocklist gets no code and can't ask.

The daily cap: you reached today's maximum of questions
CH-13Tell Henry without leaving the chat

If something fails, “Something not working? Tell Henry” sends a report with an optional note. Inside the chat it doesn't ask for the email: the server takes it from the session.

«Tell Henry», opened inside the chat without asking for the email

Cards 4

Concept

Why does the chat ask for a name and email?

Answer

So Henry knows who is asking and can follow up, and so someone who only comes to poke around doesn't use up everyone's chat. There are no passwords or accounts: the six-digit code proves the email belongs to whoever typed it, and with it the session lasts 30 days in that browser.

Difference

The daily cap or the per-minute rate?

Answer

They are two different brakes: the quota counts the person; the rate, the connection.

The daily cap

20 questions every 24 hours per email, counted in the log: it holds across every server and is exact.

The rate

10 questions per minute per connection, in each server's memory: it stops bursts, but it isn't exact.

Decision

You've already asked 20 questions today: what happens to the next one?

Answer

You see that you've reached today's question limit: come back tomorrow or write to Henry from Contact. It isn't a failure, so the chat doesn't switch to local search. Every question counts, including the ones that get a fixed text.

Decision

Something isn't working inside the chat: how do you report it?

Answer

With “Something not working? Tell Henry”, at the foot of the panel: you write what happened, if you want, and the report reaches him by email. Inside the chat it doesn't ask for your email: the server takes it from your session and never sends it back to the browser. If what fails is the gate itself, the same report is on the first step.

2.5 · The conversation is yoursIt survives reloads, navigation and a language switch; it expires after 8 hours and clears with one click. · 2 features

What it solves

A conversation that's lost on reload or a language switch forces you to start over. Here it stays in the browser when you reload, follow a link or switch language; it expires by itself 8 hours after the last message and “Delete conversation” removes it with one click. All of it, in Spanish and English.

It fits if

  • You browse the site while you ask and don't want to lose the thread.
  • You read in English: the panel, the fixed answers and the sources come out in the page's language.
  • You're on a shared computer and want to delete what you asked.

What it is not

  • “Delete conversation” doesn't delete the server log: that is requested from Contact.
  • The browser keeps neither your name nor your email: only the questions and answers.

How it works · The life of a conversation

  • Start · Chat with my résumé: An answer arrives
  • Step · Chat with my résumé: Keeps it in this browser, without name or email
  • Decision · Chat with my résumé: What happens next?
  • Step · Chat with my résumé: Shows it again; the panel reopens if it was open
  • Step · Chat with my résumé: Expires and clears itself
  • Step · Chat with my résumé: Removes it from this browser
  • End: The server log is kept
  • End: Picks up where it left off

Its pieces 2

CH-14It stays in your browser, and you delete it

The conversation survives a page reload, following a link or switching language. It clears itself 8 hours after the last message, and “Delete conversation” removes it from that browser.

Conversation cleared from the browser; the server log is kept
No screen of its own
CH-15In Spanish and English

The panel, the fixed answers and the sources come out in the page's language, and the refusal lists read both languages, whatever the page's language.

It runs through the whole app.

Cards 3

Difference

Browser or server?

Answer

They are two copies with different purposes: the browser's is for you; the server's, so Henry knows who asked and what was answered.

In your browser

Up to 40 messages with their sources, without name or email. It expires 8 hours after the last message and you clear it with one click.

On the server

Every question with its answer, sources, mode, your name and your email. Only the owner reads it, and it is deleted on request from Contact.

Decision

You open the site in a private window: does the chat work?

Answer

Yes, the same, but without memory: if the browser doesn't allow storage, the conversation doesn't survive a page reload.

Decision

You write in English on a Spanish page: what happens?

Answer

The chat answers in the page's language. The refusal and leaving-Vesting lists read both languages, so a question about salary written in English still gets the fixed text.

2.6 · Tested question by questionAn index rebuilt on every publish and a question bank that proves, in two languages, that the content answers. · 3 features

What it solves

A chat that searches by words only finds what the content says in the asker's words. Here the index is rebuilt on every publish, only from what's approved, and a bank of 175 questions per language, written in a recruiter's words, requires on every test run that each one brings the source that should answer it.

It fits if

  • You're interested in how an AI chat is tested without calling a model on every change.
  • You want to know where the answers come from: the résumé, 25 in-depth documents, the Portfolio and Methods.
  • You wonder what happens to the questions the content doesn't answer yet.

What it is not

  • Continuous integration never calls a real model: it uses a simulated one; the real one is measured separately, with the owner's permission.
  • It isn't a search by meaning: it is lexical. If the content doesn't use the word, it won't find it, and the bank watches for that.

How it works · From an approved document to a tested answer

  • Start · Owner: Writes or edits an in-depth document
  • Decision · Owner: Does he mark it approved?
  • End: Stays a draft, out of the index
  • Decision · Chat with my résumé: Does it have its full English twin?
  • End: Publishing stops and says what's missing
  • Step · Chat with my résumé: Builds the index on publish
  • Step · Chat with my résumé: The tests ask the 175 questions per language
  • Decision · Chat with my résumé: Does each one bring its source?
  • End: It ships, tested

Its pieces 3

No screen of its own
CH-16An index built on publish

Every publish rebuilds the index from the résumé, the in-depth documents, the Portfolio and Methods. A draft document doesn't go in, and an approved one requires its English twin.

It runs through the whole app.
No screen of its own
CH-17A bank of outside questions

Every test run asks 175 questions per language, in a recruiter's words, and requires each one to bring the source that should answer it.

It runs through the whole app.
No screen of its own
CH-18The real-provider test, with permission

Continuous integration uses a simulated provider. A separate pass, only on the owner's machine and with his permission, asks the guide's questions to the real model and marks every answer.

It runs through the whole app.

Cards 4

Difference

Question bank or live pass?

Answer

The bank proves the content answers; the live pass, what the real model does with it.

The bank

175 questions per language on every test run, with a simulated provider: it checks that the search brings the source.

The live pass

The guide's questions to the real model, only on the owner's machine and with his permission: it marks voice, absences, motives and sources.

Decision

A bank question turns red: what's done?

Answer

There are two honest ways out, and neither is loosening the test: if the content doesn't say it in the asker's words, the content is fixed; if another source answers it better, the expected source is fixed. Making up content so it passes is forbidden.

Concept

What goes into the chat's index?

Answer

The résumé, the apps list, the approved in-depth documents, every Portfolio piece and the Methods publications, block by block: 1939 fragments in Spanish and 1930 in English at the last count. A draft document doesn't go in, and an approved one requires its English twin.

Decision

What happens to the questions the content doesn't answer yet?

Answer

They are declared as gaps and never made up: today there are 3 per language (salary and availability to start or to travel), and each waits for something only Henry decides. Meanwhile they get the fixed text. The test counts them and caps them: the list can only shrink.

03 · End to end

03 · From the question to the answer with its source

The whole path. No swimlanes: every box says who does it, and the ones with the screen icon show it.

  • Start · Visitor: Wants to know something about the career
  • Step · Visitor: Leaves name and email and accepts the notice
  • Step · The chat: Sends a six-digit code
  • Step · Visitor: Gets in with the code and asks
  • Decision · The chat: Any quota left today?
  • Step · The chat: Asks them to come back tomorrow
  • End
  • Decision · The chat: Is it about what's on record?
  • Step · The chat: Gives a fixed text, spending no tokens
  • Step · The chat: Finds the fragments that answer
  • Decision · The provider: Does the provider answer?
  • Step · The provider: Writes in the third person and cites [n]
  • Step · The chat: Shows the fragments in local search
  • Step · The chat: Shows only the sources the answer cites
  • Step · The chat: Logs the question, the answer and its mode
  • Decision · Visitor: Does the answer carry a citation?
  • Step · Visitor: Follows the citation to the site's section
  • End: Reaches the evidence
  • End

Process notes

  1. Leaves name and email and accepts the notice. No code, no chat: it's valid for ten minutes and five tries, and the session lasts 30 days in that browser.
  2. Any quota left today?. 20 questions every 24 hours per email and 10 per minute per connection; a blocked email doesn't get in.
  3. Gives a fixed text, spending no tokens. Absences, credentials he doesn't hold, salary and unrelated topics: fixed text. Leaving Vesting carries its citation.
  4. Writes in the third person and cites [n]. Only with the four retrieved fragments, never speaking as Henry; up to 700 tokens and 30 seconds.
  5. Shows the fragments in local search. The same index runs in the browser: the chat doesn't go silent and says so with “Local search”.
  6. Logs the question, the answer and its mode. Who asked, what was answered, with which sources and in which mode: only the owner reads it.

04 · Built with method

Every figure says where it comes from. And what the app does not do is spelled out too.

The figures, with their source

18Chat featuresmeasured
Where does it come from?

One per chat feature documented in its user manual, matched section by section: 18, in six groups.

1,939Index fragmentsmeasured
Where does it come from?

The citable pieces the site's content is split into so the chat can search them: 1939 in Spanish and 1930 in English, counted when the site was built on October 31, 2026.

25In-depth documents indexedmeasured
Where does it come from?

The documents Henry wrote for the chat, beyond the résumé. All 25 are approved and indexed in both languages.

175Bank questions, per languagemeasured
Where does it come from?

Questions written in a recruiter's words, the same 175 in each language. Per language, the bank also holds 15 unrelated ones, 1 that gets refused and 3 declared gaps.

94Chat end-to-end testsmeasured
Where does it come from?

End-to-end chat journeys in a real browser, 47 on desktop and 47 on mobile, with a simulated provider.

5Switchable providersmeasured
Where does it come from?

The AI services chosen with a variable: Groq, Gemini, Azure with Microsoft Foundry, Anthropic and an OpenAI-compatible one. The tests' simulated one doesn't count.

4Fragments per answerdeclared
Where does it come from?

How many fragments the model receives, numbered, to build each answer and cite them. It's a number set in the code, and local search shows the same four.

20Questions per person every 24 hoursdeclared
Where does it come from?

How many questions each email can ask in 24 hours, counted in the log. The owner changes it with a variable, from 1 to 1000.

0Tokens in fixed answersdeclared
Where does it come from?

By construction: the refusal, unrelated questions and leaving Vesting are answered on the server before a provider is chosen, so they never call the model.

US$0Monthly operating costdeclared
Where does it come from?

Declared by the manual: the production provider, Groq, runs on its free plan, which doesn't charge; it only cuts off when the quota runs out, and then the chat switches to local search.

What it is built with

  • Vercel AI SDKthe streamed answer and the adapter that switches provider with a variable
  • Groq y cuatro proveedores másthe production model on its free plan; Gemini, Azure with Microsoft Foundry, Anthropic or a self-hosted server plug in without touching code
  • MiniSearchthe lexical index built on every publish, used by the server and by the browser's local search
  • Supabasethe log of every conversation, the per-email quota and the blocklist
  • Resendthe gate's six-digit code and the reports that reach the owner
  • Zodvalidates every question (800 characters, 12 messages) and every index fragment before building it
  • Next.jsthe chat's server route, with the session signed in a cookie and the prompt assembled only there
  • Vitest y Playwrightthe tests with a simulated provider: continuous integration never calls a real model

Your data

  • Before the first question, a name and email are requested and the Law 1581 notice is accepted.
  • Every question is logged with its answer, its sources, its mode and the name and email of whoever asked; no visitor can read that log, only the owner, and it is deleted on request from Contact.
  • The browser copy keeps neither the name nor the email, only the questions and answers, and it expires after 8 hours.
  • The model only sees public fragments of the site.

What it never does

  • Claims that Henry didn't do, doesn't know or doesn't have something.
  • Speaks as if it were Henry: it always answers in the third person.
  • Attributes motives or causes the résumé doesn't state.
  • Shows a source its answer doesn't cite.
  • Answers without the gate: no name, email and code, no chat.

Its limits, stated

  • The search is lexical: if the content doesn't use the asker's word, it won't find it; the question bank watches for that.
  • The refusal and leaving-Vesting lists are a floor, not a ceiling: an unusual question can reach the model.
  • The per-minute rate lives in each server's memory and isn't exact; the daily quota is.
  • The tests use a simulated provider: what the real model answers is measured separately, with the owner's permission.
05 · Use it

05 · Shall we talk?

The chat lives inside CV Viva, in the floating button on every page, and its address isn't published: it's the Portfolio's zero-links rule.

Write to me

Where it stands

The pinned version, not real time. Shown here; not handed over.

  1. H-2cycle
  2. 30closed sprints
  3. —build closed
  4. v0.1.0repo version
Chat with my résumé · Export of November 1, 2026Brochure in the CV Viva Portfolio
Chat with my résumé

← → move · Space plays · Esc closes