Portfolio/Soukromé

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
Období: 2026 – současnost
Role: Zakladatel, produktový architekt a full-stack vývojář

Technologie

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.

Kontaktní informace

Klidně se mi ozvěte ohledně nového projektu, konzultace nebo dlouhodobější spolupráce. Rád proberu smysluplné produktové zadání i zajímavé frontendové příležitosti.

Napište mi

© 2026 Martin Hubálek. Všechna práva vyhrazena.

Martin Hubálek IČO: 08827303 Sídlo: Dolní Štěpanice 29, 514 01 Benecko, Česká republika Zapsán v živnostenském rejstříku Nejsem plátce DPH