AI Resume Tailor: how it works
Two ways to run it — a free trial we pay for, or your own key that never leaves your browser. Every claim on this page comes with the code, the endpoints, or a check you can run yourself.
Quick Answer
The AI Resume Tailor runs in two modes. The free trial (3 tailors per day, no account) sends your resume text to our server, which forwards it to Mistral on our API key and deletes the prompt as soon as the response returns. Bring-your-own-key mode keeps your key inside a Web Worker in your browser tab and calls the model provider directly — OpenRouter, Mistral, Anthropic, Gemini, or local Ollama — so practicalwebtools.com never sees your resume, your key, or your request. You can confirm both claims in the browser DevTools Network tab, and the exact source code that runs on our server is published on this page.
Two paths, one rule
The rule: your data goes only where the path says — and each path is written down in the tables and source below, not in marketing copy. Pick a mode in the AI Resume Tailor.
| Free trial — 3/day | Bring your own key — unlimited | |
|---|---|---|
| Where your resume goes | Your browser → our Fly.io server → Mistral | Your browser → the provider, directly (nowhere at all with local Ollama) |
| Whose API key | Ours (Mistral) | Yours — held by a Web Worker in your browser tab |
| What our server sees | The prompt we forward; deleted after the response returns | Nothing. With your key set, the only practicalwebtools.com request in the DevTools Network tab is the page itself |
| Account needed | None | None |
| Daily limit | 3 per browser (soft) · 10 per IP (hard) | None from us — your provider account applies its own |
The exact endpoints we call
There is no hidden allowlist. This table is generated from the same provider registry the shipped tool reads (src/lib/byok/providers.ts), so it cannot drift from the code.
| Provider | Endpoint | Direct from browser? |
|---|---|---|
| OpenRouter | https://openrouter.ai/api/v1/chat/completions | Yes |
| Mistral | https://api.mistral.ai/v1/chat/completions | Yes |
| Anthropic (Claude) | https://api.anthropic.com/v1/messages | Yes |
| Google Gemini | https://generativelanguage.googleapis.com/v1beta/models | Yes |
| Ollama (local) | http://localhost:11434/v1/chat/completions | Yes |
| OpenAI (GPT) | https://api.openai.com/v1/chat/completions | No — via OpenRouter |
| Groq | https://api.groq.com/openai/v1/chat/completions | No — via OpenRouter |
In trial mode exactly one of our own endpoints is used: POST /api/ai-tools/resume-tailor — the route's full source is published below.
CORS evidence
Measured 2026-11-14 with a preflight + actual-response check (Origin: practicalwebtools.com). Don't take our word for it — the check is a script: node scripts/byok-cors-check.mjs in the repo re-measures every verdict below.
- OpenRouter: Verified 2026-11-14: preflight and POST responses both send Access-Control-Allow-Origin: *
- Mistral: Verified 2026-11-14: preflight and POST responses both send Access-Control-Allow-Origin: *
- Anthropic (Claude): Verified 2026-11-14: POST with anthropic-dangerous-direct-browser-access: true sends Access-Control-Allow-Origin: *
- Google Gemini: Verified 2026-11-14: native generativelanguage.googleapis.com endpoint echoes our origin
- Ollama (local): localhost — no CORS involved once OLLAMA_ORIGINS includes this site
- OpenAI (GPT): Verified blocked 2026-11-14: the preflight passes, but actual POST responses carry no Access-Control-Allow-Origin, so browsers throw. Reached through OpenRouter instead.
- Groq: CORS actually passes for direct browser calls (verified 2026-11-14) — routed through OpenRouter in v1, direct adapter is a v1.1 candidate
Provider matrix
Every major model works. OpenRouter, Mistral, Anthropic, Gemini, and local Ollama connect straight from your browser; OpenAI, Grok, and the rest route through OpenRouter — one OpenRouter key covers them all.
| Provider | In the picker | Browser-direct | Models listed |
|---|---|---|---|
| OpenRouterOne key covers every major model — the recommended default | Yes | Yes | 8 |
| MistralDirect from Mistral — same provider as this site’s free trial | Yes | Yes | 2 |
| Anthropic (Claude)Claude directly from the browser | Yes | Yes | 2 |
| Google GeminiFree tier, no card — native Google endpoint | Yes | Yes | 3 |
| Ollama (local)Free, on your machine — nothing leaves it | Yes | Yes | 4 |
| OpenAI (GPT)OpenAI’s API blocks browser calls — use an OpenRouter key to run GPT models | Guide only | Via OpenRouter | — |
| GroqFast inference — runs through OpenRouter here | Guide only | Via OpenRouter | — |
Published source
Rendered from the deployed repository at build time — this is the code that runs, not a paraphrase of it. Expand either block to read it inline.
Published source: the trial route (everything our server does with your prompt)
The route source could not be read in this environment. Request the source and we will send it to you.
Published source: the browser key worker (where your API key lives)
The worker source could not be read in this environment. Request the source and we will send it to you.
Limits & fairness
The trial: 3/day soft, 10/IP/day hard
The 3-per-day cap is a soft counter kept in your browser — an honesty speed bump, not a wall. Cross it and the tool offers bring-your-own-key mode. The hard cap of 10 requests per IP per day lives on our trial endpoint and exists for one reason: scripted traffic must not drain the Mistral key we pay for. That is the trade — caps you can see instead of accounts we would have to run.
BYOK: no caps from us, spend caps you control
In bring-your-own-key mode our server is not in the loop, so we set no limits. The tool shows a pre-call estimate (tokens and USD) before each run, and the hard limits live where they belong — your provider console. OpenRouter, for example, supports a hard monthly spend cap. Our OpenRouter key guide shows where to set it.
One honest disclaimer
A well-tailored resume gets your experience past keyword screens and in front of a human reader. It is not a guarantee of interviews or job offers — no tool can honestly promise that, and we won't.
Key Facts
- Free trial: 3 tailors per day per browser, no account; a separate hard cap of 10 per IP per day stops scripted abuse of the key we pay for
- Trial prompts are deleted from our server as soon as the response returns — we keep no resume archive
- Bring-your-own-key mode: your API key is held by a Web Worker inside your browser tab and is never transmitted to practicalwebtools.com
- BYOK calls go browser → provider directly; with your key set, the only practicalwebtools.com request in the DevTools Network tab is the page itself
- Every endpoint the tool can call is listed in a table generated from the shipped provider registry (src/lib/byok/providers.ts) — it cannot drift from the code
- CORS verdicts were measured 2026-11-14 with a preflight + actual-response check, and you can re-measure them by running scripts/byok-cors-check.mjs yourself
- The trial route and the browser key worker are published as source on this page, rendered at build time from the deployed repository
- Honest limits: tailoring improves keyword alignment; it is not a guarantee of interviews or job offers
Frequently Asked Questions
Do you store my API key?
No. In bring-your-own-key mode your key is held by a Web Worker inside your own browser tab — the page code cannot even read it back, and it is never transmitted to practicalwebtools.com. Reload the page and the worker starts fresh; Forget key clears it immediately. On the free trial there is no key of yours involved at all: requests use our Mistral key.
Does my resume leave my device on the free trial?
Yes, briefly and only where stated. On the trial, your tailored prompt goes from your browser to our Fly.io server, which forwards it to Mistral using our API key and deletes it as soon as the response returns — we keep no archive. In bring-your-own-key mode your resume goes straight from your browser to the provider you picked (or nowhere at all with local Ollama); it never touches our server.
Which providers work directly?
OpenRouter, Mistral, Anthropic, Google Gemini, and local Ollama all connect straight from your browser — each one CORS-verified, with the measured evidence listed on this page. OpenAI’s API and Groq are reached through an OpenRouter key instead, which is why one OpenRouter key effectively covers every major model.
What happens when I hit the free cap?
The 3-per-day trial cap is a soft counter kept in your browser: once you reach it, the tool points you to bring-your-own-key mode, which has no caps from us. A separate hard cap of 10 requests per IP per day applies to the trial endpoint itself, so scripted traffic cannot drain the Mistral key we pay for — that is what keeps the trial free for humans.
Can I verify this myself?
Yes, three ways. Open DevTools → Network before a run: with your key set, the only practicalwebtools.com request is the page itself, and model calls go straight to the provider’s domain. Compare the endpoint table on this page against the URLs you see. And the published-source sections below are rendered from the deployed repository at build time, so you can read the exact route and worker code that runs.
Where do I get an API key?
The fastest route is OpenRouter: create an account at openrouter.ai/keys, paste the key into the tool, and one key runs GPT, Claude, Gemini, Llama, Grok, DeepSeek, and more with a spend limit you control. Our step-by-step guide is at /guides/api-keys/openrouter. Mistral, Anthropic, and Google AI Studio keys also work directly.
No account. Free trial — or get an OpenRouter key in two minutes.