Recut CV
Bezstavová AI služba, která z profilu uchazeče a konkrétního inzerátu vytvoří životopis šitý na míru konvencím cílové země. Určujícím omezením je pravdivost: model smí vybírat, řadit, přeformulovat a vynechávat, ale nikdy nesmí přidat číslo, zaměstnavatele, technologii ani datum, které ve zdrojovém dokumentu nejsou — a toto pravidlo hlídá kód, ne pouze prompt. Služba je ve fázi beta a zatím není veřejně dostupná.
Moje role a činnosti
- Produktová architektura a návrh postavený na pravdivosti
- Full-stack vývoj (Angular 22 + NestJS 11)
- Dvoukanálová extrakce dokumentu (textová vrstva pdf.js + nativní čtení PDF modelem)
- Detekce skrytého obsahu z rozdílu mezi oběma kanály
- Kontrola ukotvení čísel ve výstupu proti zdrojové textové vrstvě
- Ochrana proti prompt injection — životopis i inzerát jako data, nikdy jako instrukce
- Centrální LLM služba s retry, timeoutem a fallback chainem modelů
- Rulesety trhů jako obsah (CZ + US), trh a jazyk výstupu jako nezávislé osy
- Šablony životopisu v Angularu včetně jednosloupcové ATS-safe varianty
- Render PDF přes Angular SSR a Puppeteer, parita náhledu a exportu z principu
- Automatické ověření ATS round-tripu nad vyrenderovanou textovou vrstvou
Technologie
Framework postavený nad TypeScriptem pro vývoj škálovatelných webových aplikací.
Silně typovaný jazyk nad JavaScriptem s lepším toolingem a vyšší udržovatelností.
Utility-first CSS framework pro rychlé skládání vlastních rozhraní.
Progresivní Node.js framework pro škálovatelné backendové služby.
JavaScript runtime pro backend, tooling a automatizaci.
Multimodální AI platforma od Googlu pro stavbu AI funkcionalit.
Automatizace headless Chrome, zde pro render serverového HTML do PDF.
PDF engine od Mozilly, zde pro deterministickou extrakci textové vrstvy dokumentu.
Styl HTTP API orientovaný na zdroje, často používaný pro integrace.
Architektura a kontext dodávky
Problém
AI nástroje na životopisy optimalizují pokrytí klíčových slov a nejrychlejší cesta k dobrému skóre v této metrice je přikrášlování. Vznikají tak dokumenty, které uchazeč u pohovoru neobhájí, a je to důvod, proč zaměstnavatelé AI generovaným přihláškám nedůvěřují. Zajímavý inženýrský problém není životopis vygenerovat — je jím vygenerovat takový, u kterého lze doložit, že netvrdí nic, co zdrojový materiál nepodporuje.
Přístup
Recut CV stojí na jediném neporušitelném pravidle: každé tvrzení ve výstupu musí být dohledatelné na fakt ve vstupu. Model smí vybírat, řadit, přeformulovat a vynechávat; nesmí si vymýšlet. Protože čísla jsou nejnebezpečnější halucinace a pro čtenáře nejhůře odhalitelná, ověřuje je kód, ne důvěra v prompt — z vygenerované prózy se extrahují a porovnají se zdrojovým dokumentem, a co se nespáruje, se ohlásí uživateli místo tichého propuštění do výstupu.
Čtení dokumentu
Nahraný životopis se čte dvěma nezávislými kanály. Deterministický průchod přes pdf.js získá textovou vrstvu; odděleně model čte PDF nativně, takže vidí sazbu dvousloupcových životopisů, které se jako prostý text rozpadnou do nesmyslu. Signálem je právě rozdíl mezi kanály: text, který v souboru je, ale na stránce ho není vidět, je způsob, jakým se skrývá keyword stuffing, a služba ho hlásí místo aby ho ignorovala. Composer píše z vizuálního přepisu, ale kontrola čísel běží vždy proti deterministické textové vrstvě — výstup modelu nemůže být referencí, proti které se pravdivost měří.
Konvence trhu
Cílový trh a jazyk výstupu jsou nezávislé osy. Česky psaný životopis pro americký trh dodrží americké konvence — bez fotografie a bez data narození — a nadpisy sekcí přicházejí z rulesetu trhu, místo aby byly natvrdo v šabloně, takže jazyk dokumentu nikdy neprosákne z jazyka rozhraní.
Jen legitimní ATS
Textová vrstva PDF je rozhraní, které náborový systém skutečně čte, takže se s ní zachází jako s API produktu a ověřuje se automatickým round-tripem: vyrenderovat do PDF, přečíst text zpět, ověřit, že struktura přežila. Žádné skryté triky — žádný bílý text, žádné keyword stuffing, žádné neviditelné divy. Jsou detekovatelné, jsou sankcionované a odporují jediné věci, kterou produkt slibuje.
Stack a architektura
Angular 22 (standalone, signály, zoneless) s Tailwindem v4 na frontendu, NestJS 11 na backendu — bezstavově, bez databáze. Každé volání LLM prochází jednou centrální službou, takže sledování nákladů, výměna providera, retry i fallback chain jsou na jednom místě, a strukturované odpovědi zužují runtime guardy, protože schéma odpovědi je pro model žádost, ne záruka. Šablony životopisu žijí v Angularu a PDF vzniká renderem týchž komponent přes Angular SSR do Puppeteeru, takže se náhled na obrazovce a stažený soubor nemohou rozejít.
Soukromí
Životopis je osobní údaj a návrh s tím počítá: model v režimu bez trénování na datech, žádné osobní údaje v logu, chybové hlášce ani v testovacích fixturách, a životopis i inzerát jsou v promptu data, nikoli instrukce.
Stav
Fáze beta, zatím veřejně nedostupná. Pipeline běží od začátku do konce — nahrání (PDF, DOCX, Markdown, prostý text) přes extrakci a kompozici až po hotové PDF ve čtyřech šablonách, z nichž jedna je jednosloupcová ATS-safe. Účty, trvalý master profil a plný guard s dohledáváním tvrzení teprve přijdou.