glokan.🔎 Over ponuku💰 PredávamPrihlásiť

Novinky

Aktuálna verzia 0.96.0. Píšeme ľudsky, nie „fix bug“.

v0.96.0

2026-08-13

Kurzor dohľadávania sa v produkcii neukladal — beh ho poctivo počítal, no zápis potichu zlyhával a ďalší beh šiel zase od nuly. Príčina bola dvojkroková: build syncoval schému s --skip-generate a Vercel kešuje node_modules, takže Prisma klient ostal vygenerovaný zo STAREJ schémy bez nového stĺpca; zápis doň padal a poistka .catch (správne — chyba kurzora nesmie zhodiť zber) ho umlčala. Odteraz db push po dorovnaní schémy klienta generuje nanovo, takže kód a databáza hovoria rovnakou schémou. Odhalil to živý test kontinuity: dva behy po sebe, druhý mal začať na strane 25 a začal na nule.

v0.95.0

2026-08-13

Zber konečne kráča plným krokom. Prvý živý beh dohľadávania odhalil, že KAŽDÝ beh HTML zberu áut od v0.88.0 prechádzal len JEDNU stranu namiesto rozpočtovaných dvadsiatich piatich — a nikto si to nevšimol, lebo beh poctivo hlásil ok a kurzor sa posúval. Príčina je učebnicová javascriptovina: Number(null) je 0, takže CHÝBAJÚCI parameter stran vyzeral ako „nula strán“ a spodná poistka to zdvihla na jednu. Motorky bežali správne — ich routa parameter vôbec nečíta. Oprava: prázdny parameter je odteraz „nezadané“, nie nula. Jeden beh dohľadávania tak spraví ~25 strán za ~45 s a úplný prechod archívu áut klesol z teoretických 80 dní na ~3 dni pri behu každých 10 minút — presne ako ráta ZBER.md §4b.

v0.94.0

2026-08-13

Dohľadávanie archívu si pamätá, kde skončilo — kurzor sa presťahoval z hlavy volajúceho do databázy. Doteraz vedel beh pokračovať hlbšie do výpisu len vtedy, keď mu niekto explicitne povedal odStrany=120 — a to znamenalo, že úplný prechod ~11 500 strán by musel niekto ručne dirigovať po 25-stranových krokoch. Zdroj má odteraz pole dohladavanieOffset: beh v režime ?rezim=dohladavanie z neho začne a nový kurzor si po sebe uloží, takže stačí ten istý dopyt volať dokola a archív sa prechádza sám — po prirodzenom konci výpisu sa kurzor vráti na 0 a ide odznova. To nie je detail, ale podmienka prežitia mechaniky zmiznutých: úplný prechod sa musí zopakovať častejšie, než je DNI_DO_ZMIZNUTIA, inak by označovanie predaných buď zobralo živé inzeráty, alebo sa zastavilo celé (ZBER.md §4b). Kurzor sa ukladá aj po neúspešnom behu (ostane na mieste zlyhania) a jeho aritmetiku stráži test.

v0.93.0

2026-08-12

Jeden inzerát, jeden riadok — aj keď ho prinesú dva kanály. Po zapnutí databázy sa ukázalo, že RSS feed a HTML výpis toho istého Bazošu ukladali ten istý fyzický inzerát pod dvoma ID (bazos-rss-194… a bazos-194…): dva riadky, z toho jeden bez fotky, lebo RSS fotky nenesie — a výpis ukazoval práve ten čerstvejší holý. Parser má odteraz kanonický prefix PORTÁLU (idPrefix), ktorým sa ukladá bez ohľadu na kanál čítania: RSS inzerát založí a HTML beh mu do toho istého riadku doplní fotku (a naopak). Stráži to test — dva kanály, jeden riadok, fotka doplnená. Staré zdvojené riadky z prvej hodiny zberu nemažeme ručne: prestanú byť videné a mechanika zmiznutých ich o tri dni odprace sama.

v0.92.0

2026-08-12

Databáza je zapnutá — a hneď prvá lekcia. Neon Postgres (glokan-db, Free, iad1) je pripojený k projektu, DATABASE_URL aj CRON_SECRET sú vo Verceli a web prešiel do режimu db. Živá záloha z v0.91.0 sa okamžite ukázala ako správne rozhodnutie: prázdna databáza web nevrátila na vzorové dáta, ponuky ostali skutočné. Lekcia: prvý beh zberu spadol na chýbajúcom stĺpci `potvrdene`. V prisma/migrations ležali len dve migrácie z prvého dňa — schéma odvtedy rástla bez migrácií, lebo neexistovala databáza, ktorú by bolo treba migrovať, a `migrate deploy` poctivo vytvoril tabuľky z prvého dňa. Build skript preto prešiel na `prisma db push`, ktorý dorovná databázu podľa AKTUÁLNEJ schémy (deštruktívne zmeny odmieta sám). Na poriadnu migračnú históriu sa prejde, až bude viac prostredí — poznámka je v skripte aj v NAPOJENIA.md.

v0.91.0

2026-08-12

Príprava na zapnutie databázy: deň, keď sa pripojí prázdny Postgres, nesmie web vrátiť k siedmim vzorovým autám. Poistka v dátovej vrstve doteraz pri prázdnom výsledku skočila rovno na demo — čo bolo správne, kým živý zber neexistoval, ale dnes je to zbytočná kapitulácia: keď je databáza zapnutá a (ešte) prázdna alebo nedostupná, skúsi sa najprv živý zber z Bazošu a až keď zlyhá aj ten, príde demo. Databáza si drží prednosť (rezimDat sa nemení) — toto je len záloha na rozbeh archívu a na výpadky. Technicky: prepínač živého режimu sa rozdelil na zivyPovoleny() (smie zber vôbec bežať — riadi ho ZIVY_BAZOS a prostredie) a jeZivo() (je zber hlavným zdrojom výpisu — len bez DB). Poradie záloh stráži nový test: so zapnutou DB je živá záloha možná, režim ostáva db a vypínač ZIVY_BAZOS=0 vypne aj zálohu.

v0.90.0

2026-08-12

To isté auto sa vo výpise objaví raz. Predchádzajúca verzia opravila počítanie: do mediánu aj do menovateľa „TOP 1 z 12“ vstupuje jeden inzerát na kus. Ostávala druhá polovica tej istej veci — tá, ktorú vidno. Keby bol dnes zapojený druhý portál, návštevník by v zozname našiel to isté auto dvakrát pod sebou, s rovnakým verdiktom a dvoma rôznymi cenami. Vyzerá to ako pokazený výpis, aj keď sú obe čísla pravdivé. Kartu odteraz dostane zástupca kusa — najlacnejšia ponuka, teda tá, ktorú kupujúci reálne dostane — a chip „na 3 portáloch“ povie zvyšok. Rozptyl cien aj vetu „ukáž predajcovi najnižšiu“ nájde človek na detaile ponuky, to bolo hotové už predtým. Poradie krokov je pritom podstatné: filtre bežia PRED zlúčením. Keď zástupcu odfiltruje cena alebo kraj, nezmizne celý kus — zobrazí sa najlacnejšia z kópií, ktoré filtrom prešli. Opačné poradie by ticho vyrábalo diery vo výsledkoch a nikto by nevedel prečo. Dve miesta zlučovanie zámerne obchádzajú. Administrácia má vidieť, čo v databáze naozaj je, nie upravený pohľad. A obľúbené: človek si uložil konkrétny inzerát a ten mu nesmie zmiznúť len preto, že ten istý kus je inde o dve stovky lacnejšie.

v0.89.0

2026-08-12

Jeden kus, jeden hlas — trh sa počíta z áut, nie z riadkov. To isté auto býva inzerované na viacerých portáloch naraz. Sú to dva inzeráty, ale jedno auto. Deduplikáciu sme pritom mali hotovú už dávno — kus vieme spárovať podľa modelu, roku, paliva a nájazdu s toleranciou pätnásť sto kilometrov — lenže bežala až PO výpočte trhu. Duplicita bola preto len poznámka na karte („ten istý kus sme našli na 3 portáloch“), zatiaľ čo do mediánu aj do menovateľa „TOP 1 z 12“ vstupovali všetky kópie. Kým je zapojený jediný portál, nestane sa nič: za duplicitu považujeme len ponuky z RÔZNYCH zdrojov, takže sa žiadna nikdy nenašla. A presne to bolo na tom nebezpečné. Chyba by sa prebudila v deň, keď pribudne druhý portál — posunula by medián a klamala by v menovateli — a nespadol by pri tom ani jeden test, lebo v kóde, ktorý ju obsahuje, by sa nič nezmenilo. Také chyby sa nehľadajú, tie sa musia dať nájsť dopredu. Odteraz ide deduplikácia pred výpočet. Skupina kópií má zástupcu — najlacnejšiu ponuku, teda práve tú, ktorú kupujúci reálne dostane a na ktorú ho aj upozorňujeme — a do kohorty aj do menovateľa vstupuje len on. Ostatné kópie o verdikt neprídu: počíta sa im voči kohorte, v ktorej je ich zástupca, takže ukazujú to isté percento. Každý inzerát navyše vie, ktorý kus zastupuje (kusId) — to je základ pre neskoršie zlúčenie kariet vo výpise, aby sa to isté auto nezobrazovalo trikrát pod sebou. Test je napísaný tak, aby bez opravy padal, a padá: pridanie tej istej Octavie z druhého portálu posunulo verdikt z −20 % na −16 % a z „TOP 1 z 5“ spravilo „TOP 1 z 6“.

v0.88.0

2026-08-12

Zber prestal byť dopytom a stal sa prúdom. Worker doteraz sťahoval jednu stranu jedného hľadania — auto.bazos.sk/?hledat=octavia, lebo taký je default premennej WORKER_QUERY. Zlé na tom boli dve veci naraz. Prvá: robots.txt Bazošu presne túto adresu zakazuje, a s ňou aj cenaod, cenado, order a hlokalita — teda všetko, čím by sa dalo filtrovať na zdroji. Sťahovali sme adresu, ktorú nám portál zakázal, a nikto si toho nevšimol, lebo bez databázy worker beztak nebežal. Druhá je vecná: dopytom sa celý trh získať nedá. Dostaneme vždy len to, na čo sme sa spýtali, takže archív by rástol o Octavie a o zvyšku trhu by sme verdikt nevedeli vydať nikdy. Zber preto číta stránkovaný výpis „najnovšie“ (ten robots.txt nezakazuje) a filtruje sa až u nás — v lib/vozidlo.ts a lib/hladanie.ts, kam to aj patrí. Beh má dva režimy z jedného kódu: čelo výpisu ide od najnovších a zastaví sa na prvej strane, ktorá neprinesie ani jeden nový inzerát (dobehli sme k známemu, ďalej klopať netreba), dohľadávanie archívu naopak pokračuje aj cez samé známe, lebo tam je známe skoro všetko. Kde beh skončil, vráti v dalsiaStrana — z toho pokračuje ten nasledujúci. Chodenie po cudzom webe je vyčlenené do prejdiVypis: bez databázy a bez vedomia o tom, čo sa s položkami stane. Nie kvôli čistote — sú to jediné pravidlá zberu, ktoré rozhodujú, koľko dopytov pošleme na cudzí server, a s databázou v ceste sa testovať nedali. Teraz ich drží osem testov s podvrhnutou sieťou: že sa čelo zastaví na prvej strane bez nového, že sa po odpovedi 429 okamžite prestane klopať, že prekryv strán (inzeráty sa počas čítania posúvajú o stranu nižšie) sa neuloží dvakrát a že strop strán platí aj proti prehnanej požiadavke. Deviaty test stráži samotný zákaz: žiadna adresa zberu nesmie obsahovať parameter, ktorý robots.txt zakazuje. Čísla, kvôli ktorým to celé je: rubrika áut na Bazoši hlási 230 163 inzerátov po 20 na stranu, teda ~11 500 strán na jeden úplný prechod. RSS raz denne prinesie päťdesiat. Celý rozbor — pokrytie, frekvencia, spájanie dát naprieč portálmi — je v docs/ZBER.md.

v0.87.0

2026-08-12

Motorky konečne dostanú verdikt — a zber sa vie vzdať. Na webe to vyzeralo takto: výpis motoriek priznal „verdikt zatiaľ vieme vydať pri 0 z 55 ponúk“. Nula. Autá pritom v ten istý deň verdikty vydávali normálne a tým istým enginom. Rozdiel nebol v kohorte, ale vo vzorke: kohorta potrebuje aspoň tri ceny rovnakého modelu a na troch stranách výpisu vyjde Octavia šesťkrát, kým najsilnejší model motoriek má dva kusy. Moto trh je jednoducho rozdrobenejší — tá istá vzorka, ktorá autám stačí, je pre motorky primalá. Živý režim preto číta viac strán tam, kde je trh rozdrobený: motorky 8, reality 5 (tie delíme ešte lokalitou a typom), autá ostávajú na 3. Je to konfigurácia pri zdroji, nie vetvenie v jadre, a strop drží slušnosť zberu. Osem strán bez časového limitu je ale osem šancí zaseknúť sa navždy — a to je druhá polovica tejto verzie. Zber doteraz volal fetch bez limitu: keď sa zdroj neozval, čakalo sa donekonečna. Pri plnom zbere by to zdržalo worker, v živom režime konkrétneho človeka na webe — výpis sa načítava až pri návšteve, takže mlčiaci zdroj znamená stránku, ktorá sa nikdy nedokreslí, a na Verceli dobehne limit funkcie. Odteraz má každé stiahnutie limit 8 sekúnd a celý zber vertikály rozpočet 12 sekúnd: prvú stranu skúsime vždy, ďalšie len dovtedy, kým sa zmestíme. Menšia vzorka je lepšia než prázdna stránka. Stráži to test, ktorý v zbere nepovolí holý fetch — a hneď pri písaní našiel ďalšie miesto, kde limit chýbal. A /api/zdravie odteraz hlási aj pokrytie verdiktom, s prepínačom vertikály (?v=motorka). Že zber beží, sme vedeli aj predtým; že motorkám nevznikla ani jedna kohorta, bolo vidno len na webe drobným písmom. Merať treba to, kvôli čomu to celé je — ponuka bez rovesníkov je pre návštevníka riadok bez odpovede.

v0.86.0

2026-08-12

Živé inzeráty skutočne naživo — oprava dvoch chýb, pre ktoré sa v0.85.0 vôbec nenasadila. Vercel build totiž dvakrát spadol a produkcia potichu ostala na v0.84.0 s ukážkovými dátami; zistilo sa to až pohľadom do build logov, nie z webu. Chyba č. 1 — hranica klient/server: klientské komponenty (karta, formuláre) ťahali formatCena z lib/data.ts. Dátová vrstva si pritom (hoci len dynamicky) doťahuje živý zber, ktorého graf končil cez engine, notifikácie a účty na node:crypto — a bundler dynamické importy sleduje tiež, takže serverový svet tiekol do prehliadačového balíka, kde node:crypto neexistuje. Presne na tom build spadol. Formátovanie ceny sa presťahovalo do maličkej klientsky bezpečnej lib/cena.ts, parsery a živý zber berú z enginu už len typy (hlavičky zberu majú vlastný modul lib/worker/http.ts) a spúšťače workerov sa presunuli do API rout, ich jediných odberateľov. Hranicu odteraz stráži test: súbor s 'use client' nesmie importovať lib/data a lib/cena nesmie importovať vôbec nič. Chyba č. 2 — prepínač produkcie: živý režim sa zapínal podľa NODE_ENV, s ktorým bundler narába po svojom. Produkciu odteraz spoznávame podľa VERCEL=1, ktorú Vercel garantuje v builde aj v runtime (ZIVY_BAZOS=0/1 ostáva ako ručný vypínač — stráži test). A aby sa nabudúce nehádalo z HTML: nová verejná routa /api/zdravie povie priamo, v akom režime dátová vrstva beží (db/zivo/demo), či vidí databázu a či sa živý zber vrátane fotiek skutočne načíta. Presne ňou je overené aj toto nasadenie.

v0.85.0

2026-08-12

Koniec vzorových dát: web ukazuje ŽIVÉ inzeráty z Bazošu — a prvýkrát aj s fotkami. Autá, motorky aj reality. Doteraz to bolo tak: plný zber (worker → databáza) je hotový dávno, ale čaká na DATABASE_URL — a kým čakal, návštevník videl sedem ukážkových Octavií. Nový živý režim (lib/worker/zivo.ts) tú prekážku obchádza čestne: pri vykreslení sa načítajú prvé tri strany výpisu „najnovšie“ priamo zo zdroja (s vyrovnávacou pamäťou 10 minút — sme hosť na cudzom webe), položky prejdú tými istými filtrami ako pri plnom zbere (diely a príslušenstvo von cez lib/vozidlo.ts, dopyty „kúpim“ von cez lib/reality.ts, búrané kusy dostanú poctivý príznak namiesto percenta) a verdikty spočíta ten istý engine nad práve načítaným trhom. Databáza má prednosť: v deň, keď pribudne, sa živý režim sám odpojí (ZIVY_BAZOS=0 ho vypne aj ručne). Fotky si zaslúžia vlastný odsek, lebo doteraz neexistovali NIKDE — ani v type Inzerat. Parser Bazošu teraz berie náhľad zo zoznamu, výpis ho ukazuje na karte a detail si z adresy náhľadu odvodí plnú verziu (lib/foto.ts — Bazoš má náhľad na /img/1t/… a plnú fotku na /img/1/…, takže netreba ani jeden dopyt navyše). Fotku hostí zdrojový portál, my ju nekopírujeme — keď zmizne tam, komponent FotoInzeratu ju potichu skryje a karta sa vráti k emoji. Aj databázový worker odteraz fotku ukladá do fotky[], takže po zapnutí DB o ne neprídeme. A keďže dáta už nie sú vzorové, nesmie to tvrdiť ani pätička: veta o stave sa odvodzuje z nového rezimDat() — v živom režime hovorí, že ponuky sú živé z Bazošu a predplatné sa ešte len rozbieha. Údaj napísaný natvrdo tam, kde má byť odvodený, je presne tá chyba, ktorú tu opravujeme od v0.80.0. K tomu vznikol docs/PORTALY.md — master plán napájania ďalších zdrojov bod po bode (Autobazar.EU cez ich JSON API ako prvý kandidát, reality portály, pravidlá slušnosti zberu). A jedna drobnosť po ceste: npm run check spadal na zbytočnom /s flagu v regexe testu z v0.64.0b — opravené, brána nasadenia je zas priechodná celá: typy → testy → push.

v0.84.0

2026-08-12

Hero na úvodnej stránke konečne hovorí nový slogan: „Jedným skokom cez celý trh. A verdikt k tomu.“ Pri v0.83.0 sa slogan zmenil v brand.ts, v title stránok aj na OG kartách — ale nadpis na úvodnej stránke bol napísaný natvrdo, takže návštevníkovi na najviditeľnejšom mieste webu ďalej tvrdil starú vetu „Celý trh na jednom mieste“. Je to presne tá chyba, ktorú tu opravujeme opakovane: údaj napísaný ručne tam, kde má byť odvodený. Slogan preto teraz žije v BRAND.taglineRiadky (dva riadky, z ktorých sa skladá aj jednovetová podoba pre meta tagy) a hero sa z neho vykresľuje — nabudúce sa slogan zmení na jednom riadku a premení sa všade naraz, čo stráži test. Jedno spresnenie k zápisu pri v0.83.0: tam je slogan citovaný ako „Jedným skokom cez všetky portály“. Taká veta by neprešla strážnym testom zdrojov — a právom, lebo zapojený nie je každý portál a sľubovať „všetky“ sme prestali už vo v0.43.0. Platná podoba, ktorá je v kóde aj naživo, je „cez celý trh“.

v0.83.0

2026-08-12

Sme Glokan! Značka je odteraz len „glokan“ — bez .com, farebná bodka v logu ostáva. Strážneho psa vystriedal klokaní Vak: nové ponuky ti chytá do vaku, nič mu neujde. Nový slogan: Jedným skokom cez všetky portály. A verdikt k tomu.

v0.82.0

2026-08-11

Rebrand: tindo.sk → glokan.com. Doména glokan.com je kúpená (Websupport), zatiaľ však nie je nasmerovaná na Vercel — preto zmena zámerne nesiaha na funkčné adresy. Vďaka tomu, že brand.ts oddeľuje ZOBRAZOVANÝ názov (MENO/TLD) od SKUTOČNEJ adresy (BRAND.url, ktorá sa odvodzuje z NEXT_PUBLIC_URL/Vercel adresy s produkčným fallbackom), sa dalo meno v celej appke prepnúť na 'glokan' bez rizika, že canonical, sitemap, OG karty alebo odkazy v e-mailoch začnú ukazovať na neexistujúci web — tie ostávajú funkčné na doterajšej Vercel adrese, kým doména nebude pripojená. Prepísaných bolo vyše 15 miest, kde bolo meno natvrdo napísané namiesto odvodenia z BRAND: tituly a popisy stránok (ako to funguje, faq, auta, motorky, reality, novinky), meta tagy inzerátov, zdieľacie tlačidlo, OG obrázky (alt text aj generovaná karta), e-mailové šablóny (predmet, odosielateľ, podpis), GDPR export, admin (prihlásenie, výdavky, náhľad e-mailov), demo účet a User-Agent pri overovaní ponuky. Interné veci bez viditeľného dopadu na používateľa — názvy cookies, session tajomstvo, názov globálnej premennej pre Prisma — som zámerne nechal, lebo zmena by riskovala zneplatnenie existujúcich relácií bez akéhokoľvek úžitku pre návštevníka. Keď bude doména pripojená na Vercel, stačí nastaviť NEXT_PUBLIC_URL na https://glokan.com a BRAND.url sa prepne sám — nie je to súčasť tejto zmeny, lebo pripojenie domény je krok, ktorý robí človek vo Websporte a vo Verceli, nie kód.

v0.81.0

2026-08-10

Reality tvrdili niečo, čo už dávno nebola pravda: banner na /reality hovoril 'ukážka druhej vertikály... dovtedy zbiera waitlist' — veta z prvého dňa appky, keď reality naozaj boli len mockup. Odvtedy (F7, RSS zber naostro) pod tou vetou bežali skutočné ceny a skutočné verdikty €/m² z Bazošu — banner teda klamal, že nič nie je live, presne pod ponukami, ktoré live boli. Rovnaká veta sa opakovala aj na úvodnej stránke ('Pozrieť ukážku'). Opravené na koreni: stavová veta teraz žije vo VertikalaVypis a odvodzuje sa z VERTIKALY[typ].aktivna namiesto toho, aby bola ručne napísaná na konkrétnej stránke — v deň spustenia zmizne sama, nezávisle od toho, či si niekto spomenie ju zmazať. Homepage badge zmenený z '2. vertikála — štart po autách' na 'zbierame naostro · plná verzia čoskoro'.

v0.80.0

2026-08-10

Tretíkrát za deň tá istá príčina, tak som ju tentokrát hľadal cielene: údaj napísaný ručne na mieste, kde má byť odvodený. Najdrahší prípad sú ceny. Účtuje sa suma z jednej tabuľky v kóde, ale na tlačidlách bola napísaná v texte — „Odomknúť tento inzerát · 2,90 €“. Stačilo cenu raz zmeniť, čo je pri hľadaní správnej ceny úplne bežné, a tlačidlo by sľubovalo starú sumu, kým by Stripe strhol novú. Naúčtovať zákazníkovi inú sumu, než akú mal napísanú na tlačidle, nie je preklep — je to klamlivá obchodná praktika a najrýchlejšia cesta k vratkám a k sporu s bankou. Prekážka bola technická: ceny žili v súbore, ktorý na prvom riadku importuje šifrovaciu knižnicu (kvôli overovaniu podpisu platieb), takže sa nedal načítať v prehliadači — a práve prehliadač vykresľuje tlačidlá. Preto boli sumy prepísané ručne. Ceny sú teraz vo vlastnom súbore bez väzby na server a skladajú sa z nich tlačidlá, cenník, časté otázky aj popis stránky pre Google. Cena sa mení na jednom riadku. Stráži to test, ktorý prejde celé rozhranie a spadne, keď sa v ňom objaví suma napísaná ručne. A posledné vymyslené čísla išli von. V projekte stále ležal súbor z pôvodného náhľadu administrácie: 48 200 návštev, 131 400 vyhľadávaní, mesačné tržby 2 890 €, tabuľka platieb s menami a promo kódmi. Nikto ho nepoužíval, takže sa nikde nezobrazoval — ale bola to pripravená pasca. Stačilo, aby ho niekto pri ďalšej úprave admina zapojil „nech to tam niečo ukazuje“, a riadiaci pult by hlásil tržby, ktoré nikdy neprišli. Vo v0.55.0 sme takéto súbory upratovali a tento prežil, tak teraz stráži strážny test priamo tie čísla.

v0.79.0

2026-08-10

Vak je náš hlavný dôvod, prečo sa človek vracia — a jeho e-mail odkazoval rovno na cudzí portál. Sami sme si tým podrezali konár: klik z nášho e-mailu odišiel preč, návštevník nevidel verdikt ani report pred obhliadkou, nemali sme mu čo ponúknuť a nevedeli sme ani spočítať, koľko ľudí e-mail privedie. Robili sme zadarmo prácu pre Bazoš. Odkazy teraz vedú na našu stránku ponuky, kde je verdikt — a pôvodný inzerát s kontaktom na predajcu je odtiaľ jedným klikom, veľkým tlačidlom. Nikto tým nestráca nič a v e-maile to aj otvorene píšeme, aby to nepôsobilo ako pasca. To isté platí pre e-mail o zľave: ten po novom vedie na detail s grafom vývoja ceny, teda presne na to, o čom správa je. Pri tej príležitosti vypadli dve tiché chyby. Keď sme adresu pôvodného inzerátu nemali, e-mail o zľave posielal človeka na „https://tindo.sk/auta“ — na doménu, ktorá zatiaľ nie je zaregistrovaná, takže klik končil chybovou stránkou. A náhradná adresa bola vždy „/auta“, takže motorka aj nehnuteľnosť viedli medzi autá. Obe veci stráži test, ktorý prehľadá zberač a spadne, keď sa v ňom znova objaví natvrdo napísaná doména alebo natvrdo napísaná vertikála.

v0.78.0

2026-08-10

V cenníku stálo v bezplatnom pásme „1 verdikt mesačne“. V kóde to nebolo nikde — bezplatný používateľ nedostal ani jeden. Je to ten istý druh chyby ako sľub o všetkých portáloch, len o stupeň horší: cenník nie je marketingový text, je to obchodná ponuka, a nesplnená obchodná ponuka je klamlivá praktika. Dalo sa to opraviť dvoma spôsobmi a vybral som ten drahší: sľub sme splnili, namiesto toho, aby sme vetu z cenníka potichu zmazali. Aj preto, že je to dobrý obchod. Prvý skutočný zážitok s produktom je jediná vec, ktorá z návštevníka spraví platiaceho — a stojí nás len výpočet. Kto chce mesačný verdikt využiť, musí sa prihlásiť e-mailom, čím sa z anonymnej návštevy stane niekto, komu vieme napísať. Pod kapotou je to jednoducho kúpený verdikt bez naviazanej platby, takže odomykanie funguje presne rovnako ako po zaplatení a nebolo treba meniť databázu. Kvóta beží na kalendárny mesiac — „1 verdikt mesačne“ si každý predstaví ako „od prvého“, nie ako kĺzavých tridsať dní. Nárok sa neminie na ponuku, ktorú už človek odomknutú má (to by bolo absurdné), neminie ho ukážkový účet a — čo je najdôležitejšie — nedáme ho na ponuku, ku ktorej verdikt neexistuje. Bolo by trpké minúť jediný mesačný nárok za vetu „málo podobných ponúk“. Použitie sa meria ako odomknutie, takže konečne uvidíme, koľkých ľudí bezplatný verdikt privedie ďalej; bez toho by sa nedalo rozhodnúť, či ho rozšíriť alebo zrušiť. A k tomu drobnosť, ktorá mi včera ušla: report pred obhliadkou som postavil, ale nikde pred platbou o ňom nebola zmienka — človek sa o ňom dozvedel až potom, ako zaplatil. Teraz je v cenníku medzi tým, čo za 2,90 € dostaneš.

v0.77.1

2026-08-10

Konečne nie oprava, ale nová vec — a je to odpoveď na najťažšiu otázku celého predaja: „za čo presne platím 2,90 €?“ Doteraz za obrazovku. Za obrazovku sa platí ťažko. Odteraz za report pred obhliadkou: jednu stránku, ktorú si vytlačíš alebo otvoríš v mobile priamo pri aute. Za vec, ktorú si vezmeš so sebou, sa platí ľahko — a je to presne tá istá práca, len podaná v momente, keď je najviac na niečo. Lebo náš rozbor nie je najužitočnejší pri stole, ale pri aute, s predajcom oproti. Vtedy nikto neposkrolováva päť sekcií na mobile. Report je preto v poradí, v akom to človek na mieste naozaj potrebuje: čo mám v ruke → o čom sa dá zjednávať → čo si mám prezrieť → čo sa spýtať → čo podpísať. Argumenty na zjednávanie stoja výhradne na našich dátach. Koľko je cena nad alebo pod stredom porovnateľných ponúk a o koľko eur. Že predajca cenu už raz znižoval — z akej sumy na akú a koľkokrát; to je najsilnejší argument, aký existuje, lebo predajca sám priznal, že pôvodnú cenu trh nevzal, a ty o tom vieš, on nevie, že vieš. Že nájazd nesedí s naším archívom. Že tá istá ponuka visí aj inde. Ako dlho inzerát visí. Žiadne „buďte sebavedomý“ — a keď dáta nie sú, report to povie a nevymyslí si nič; pri aute by sa vymyslený argument prevalil do troch viet a s ním by padla dôvera v celý rozbor. Kontrolný zoznam je fyzický a krátky — veci, ktoré sa dajú spraviť na parkovisku za dvadsať minút, so štvorčekmi na odškrtnutie perom. Líši sa podľa toho, čo si ideš pozrieť: auto dostane karosériu, lak a hrdzu, motorka stopy po páde, reťaz a DOT kód pneumatík, nehnuteľnosť list vlastníctva a ťarchy. K tomu časť „pred podpisom“ s vetou, ktorá tam musí byť: platba až pri odovzdaní dokladov, nikdy vopred a nikdy záloha na diaľku. A na konci to, čo report NEVIE: hovorí o trhu a o modeli, nie o technickom stave tohto konkrétneho kusu. Na to je previerka podľa VIN a servis. Report je súčasťou zaplateného rozboru, neplatiacemu sa neukazuje ani čiastočne — nie je to návnada, je to tovar — a do vyhľadávačov nejde vôbec. Tlačí sa cez prehliadač, bez knižnice na PDF: výsledok je menší, rýchlejší a funguje aj tam, kde je signál najhorší, teda pri aute. Doplnené hneď po nasadení: v ukážkovom režime, teda kým web beží bez databázy, sa report otvorí každému. Inak by ho nemal ako uvidieť nikto vrátane nás — a ukážkové sú aj samotné inzeráty, takže nie je čo chrániť. Na ostrom webe táto výnimka neplatí a rozhoduje výhradne zaplatený nárok; stráži to test.

v0.76.0

2026-08-10

Auto sa na Bazoši hľadá na telefóne — je to prvé, čo má človek v ruke, a pravdepodobne aj jediné. Prešiel som teda web z tejto strany a našiel dve veci, ktoré na úzkej obrazovke rozbijú stránku ako celok. Prvá sú tabuľky. Je to jediný prvok na webe, ktorý sa úzkej obrazovke neprispôsobí: má toľko stĺpcov, koľko má, a keď sa nezmestí, roztiahne celú stránku. Potom sa vodorovne posúva všetko — hlavička, karty aj pätka — a web pôsobí pokazene, hoci sú dáta v poriadku. Bez posuvného obalu ich bolo jedenásť vrátane modelových stránok, teda presne tých, na ktoré ľudí privedie Google; bol by to prvý dojem z celej služby. Tabuľky sú teraz v spoločnom obale, ktorý posúvanie drží v sebe: v širokom okne nevidno nič navyše, v úzkom sa posúva len tabuľka a zvyšok stránky stojí. Druhá vec sú dlhé slová. Nadpisy píšu cudzí ľudia a často bez medzier — „Skoda_Octavia_2.0TDI_DSG_4x4_navigacia_xenony_koza“. Také slovo sa nezalomí, roztiahne kartu a s ňou zase celú stránku. Text sa teraz láme, ale len keď to inak nejde, takže bežné nadpisy vyzerajú presne ako doteraz. Oba prípady stráži test, ktorý prejde všetky súbory: nájde tabuľku bez obalu aj pevnú šírku nad 320 pixelov (najužší telefón, s ktorým sa reálne počíta) a spadne. Výnimku má porovnávač ponúk — tri autá vedľa seba pod 560 pixelov už nie sú čitateľné, tak sa tam radšej posúva tabuľka než celá stránka, a robí to zámerne.

v0.75.0

2026-08-10

Otvoril som si web ako návštevník a hneď na prvej obrazovke stála veta, o ktorej sme si mysleli, že je dávno preč: „Prehľadávame všetky slovenské portály naraz.“ Vo verzii 0.43.0 je pritom čierne na bielom napísané, že sme presne toto tvrdenie stiahli a nahradili ho „portálmi, ktoré máme zapojené“. Opravili sme ho vo výpise, v obsahových stránkach aj v predajných textoch — a minuli sme jediné dve miesta, kde ho číta úplne každý: úvodný blok hlavnej stránky a meta popis celého webu, teda text, ktorý o nás zobrazuje Google. Zapojený je pritom jeden portál. Je to o stupeň horšia chyba než pôvodná, lebo v changelogu sme čitateľovi povedali, že sme ju opravili. Príčina je tá istá ako pri názve značky: kým je taký údaj rozpísaný vo vetách po celom projekte, jedna kópia vždy zaostane. Zoznam zdrojov je preto teraz na jednom mieste a texty sa skladajú z neho. Po zapojení Autobazaru sa prepíše jeden riadok a zmení sa to v hero, v Google popise aj všade inde naraz. Úvodná stránka po novom rovno menuje, odkiaľ dáta sú — „Zapojené zdroje: Bazoš · ďalšie pripravujeme“. Vyzerá to ako slabšie tvrdenie než „všetky portály“, ale je overiteľné. A pri službe, ktorej celý produkt je dôveryhodnosť čísel, je overiteľné tvrdenie silnejšie než veľké: kto si to overí, získa dôvod veriť aj zvyšku. Aby sa to nevrátilo tretíkrát, pribudol test, ktorý prejde všetky súbory v app, lib a components a spadne, keď sa v texte pre návštevníka znova objaví sľub o „všetkých portáloch“. Changelog má výnimku — tam je to historický záznam.

v0.74.0

2026-08-10

Tentokrát som sa pozrel na verejné čísla — teda na to, čo o nás povedia iní. Stránka Stav trhu je jediná vec na webe napísaná priamo na to, aby ju citovali novinári a fóra; má nadpis „Stav trhu s jazdenkami — august 2026“, hlavné zistenie do titulku a tlačidlo Zdieľať report. Nemala ale žiadnu spodnú hranicu vzorky. Deň po spustení by teda vydala národný report postavený na pár stovkách ponúk zo streamu jedného portálu — a citované číslo sa nedá vziať späť, ostane v článku aj vtedy, keď ho o mesiac opravíme. Report sa preto zverejní od 200 ponúk; dovtedy má iný nadpis, žiadny záver, žiadne tlačidlo na zdieľanie a hovorí Googlu, nech si ho neindexuje. Mediány jednotlivých modelov chodia von až od ôsmich kusov — medián z troch inzerátov nie je medián modelu, je to náhodná cena. Počet zverejňujeme vždy, aby bolo vidieť, na čom číslo stojí. Pribudol aj odsek, ktorý predtým chýbal: čo tie čísla NIE SÚ. Nie je to celý slovenský trh ani reprezentatívny prieskum — je to X ponúk, ktoré sme videli na zapojených portáloch, a sú to ceny inzerované, nie predajné. Znie to ako oslabenie reportu, ale je to naopak: údaj s priznanou metodikou sa dá citovať, údaj bez nej sa dá len spochybniť. A pri tej príležitosti sa našla vecná chyba, ktorá je vonku od začiatku. Stránka Štatistiky trhu mala v titulku, popise aj nadpise „Škoda Octavia“, ale čísla počítala zo VŠETKÝCH áut v archíve. Zverejňovala teda medián celého trhu pod menom jedného modelu — a robila to na dopyte „škoda octavia cena“, teda presne tam, kde by to ľudia našli. Octavia má pritom vlastnú stránku. Stránka sa preto volá tým, čím naozaj je: Trh s jazdenkami v číslach. K tomu z nej vypadli búrané kusy (sú lacné z definície, ťahali medián dole a nafukovali podiel „pod trhom“) a medián sa počíta odolne voči extrémom, aby ho neposunula jedna návnada za 900 €.

v0.73.0

2026-08-10

Pravidlo z minulej verzie som dotiahol na zvyšné dve miesta, kde platilo rovnako — a jedno z nich bolo horšie než pôvodný nález. Stránka Over ponuku je jadro plateného produktu: človek tam príde s konkrétnym autom, ktoré si vyhliadol, a s peniazmi v ruke. Presne tam bolo napísané „🔒 Verdikt je pripravený“ a tlačidlo za 9,90 € aj vtedy, keď pripravený nebol — a po zaplatení dostal tabuľku s pomlčkami namiesto mediánu a rozpätia. Prípad búraného vozidla tam ošetrený bol, prípad tenkej kohorty nie; pritom ten je pri štarte ten častejší. Odteraz sa aj tu povie pravda a rovno aj čo s tým: skús to o pár dní, archív rastie každých desať minút, alebo si nechaj strážiť nové ponuky. Druhé miesto je úvodná stránka. Blok „Najvýhodnejšie práve teraz“ bral prvé tri ponuky z rebríčka výhodnosti a pod nadpis písal, že sú zoradené podľa toho, ako sú pod cenou svojich rovesníkov. Lenže kým archív nemá rovesníkov, väčšina ponúk verdikt nemá — a rebríček by bol náhodný zoznam áut vydávaný na úvodnej obrazovke za najlepší kúp na Slovensku. To je prvá vec, ktorú návštevník uvidí, takže je to zároveň prvé, čím by sme ho oklamali. Do rebríčka teraz vstupujú len ponuky, ktoré verdikt naozaj dostali (a nikdy nie vraky ani ceny mimo trhu). Keď taká nie je ani jedna, na mieste bloku je poctivé „rebríček sa ešte stavia“ s odkazom do ponúk. Pravidlo je pritom fyzicky na jednom mieste a obe cesty ho volajú. Keby existovali dve kópie, jedna by sa časom rozišla s druhou — a to je presne ten typ chyby, ktorý sa objaví až u zákazníka. Stráži to test, ktorý obe cesty porovnáva.

v0.72.0

2026-08-10

Najhoršia chyba, akú som v tomto projekte doteraz našiel — a nebola vidieť, lebo sa prejaví až v prvý ostrý deň. Detail ponuky ponúkal „Odomknúť tento inzerát · 2,90 €“ pri KAŽDOM inzeráte. Aj pri takom, ku ktorému žiadny verdikt neexistuje: keď nemáme dosť porovnateľných kusov, keď je vozidlo búrané (tým verdikt zámerne nedávame nikdy) alebo keď je cena tak ďaleko od trhu, že jej neveríme. A to nie je okrajový prípad — kým sa archív plní, je to STAV VÄČŠINY PONÚK. Horšie bolo to, čo zákazník dostal po zaplatení. Komponent počítal chýbajúce percento ako nulu, takže sa vykreslilo „— v norme trhu“ a ukazovateľ sa postavil presne na stred stupnice. Teda vymyslený záver, za ktorý si človek zaplatil. Presne to isté sme z výpisu vyhadzovali vo verzii 0.43.0 — len tu to bolo schované za platbou, kde to nikto nevidí, kým nezaplatí. Od tejto verzie sa rozbor, ktorý neexistuje, nepredáva. Namiesto tlačidla je vysvetlenie, prečo verdikt nevydávame — a je formulované tak, aby samo neprezradilo, kde je cena voči trhu. Cena, rok, nájazd, výstrahy aj odkaz na pôvodný inzerát ostávajú prístupné, za tie sme si nikdy nepýtali peniaze. Po zaplatení sa bez percenta netvrdí nič o pozícii voči trhu a stupnica sa nekreslí vôbec. Skryté tlačidlo ale nie je zámok, tak pribudla poistka priamo na serveri: aj keby niekto formulár odoslal ručne, alebo keby starý odkaz z e-mailu mieril na ponuku, ktorá verdikt medzitým stratila (rovesníci sa predali), platba sa nezačne — človek sa vráti na detail s vetou, že sme mu nič neúčtovali. A to isté o úroveň vyššie: pruh nad výsledkami tvrdil „nenašli sme nič nezvyčajné — ceny sedia s trhom“ aj vtedy, keď ani jedna zobrazená ponuka verdikt nemala. To je rozdiel medzi „pozreli sme a nič tam nie je“ a „nemali sme sa na čo pozerať“. Teraz to povie pravdu a tlačidlo predplatného za 9,90 € sa v takom stave nezobrazí vôbec — nie je za čím zamykať.

v0.71.0

2026-08-10

Včera pribudlo meranie — a keď som si ho prešiel ešte raz, ukázalo sa, že v ostrej prevádzke by nemeralo ľudí, ale Google. Udalosť „otvorený výpis“ a „otvorený detail“ sa totiž zapisovala pri každom vykreslení stránky na serveri, teda aj vtedy, keď si ju otvoril robot. Celá naša stratégia rastu pritom stojí na tom, aby nás vyhľadávače prehľadávali často a hlboko: modelové stránky, krajové stránky, sitemap. Vyhľadávače by teda otvárali výpisy neustále, v objeme, aký žiadny človek nedosiahne. Dôsledky boli tri a každý iný. Prvý: lievik by klamal. Pri desiatich ľuďoch a tisícke robotích otvorení by konverzia „výpis → klik do platby“ vyšla 1 % namiesto 10 % — a my by sme podľa toho čísla prerábali produkt, ktorý funguje. Druhý: tabuľka udalostí rástla o riadok za každé otvorenie stránky a nič ju nikdy nemazalo. Bezplatná databáza má pol gigabajtu, a keď sa zaplní, nespadne meranie — spadne celý web. Tretí, najtichší: presne preto, aby sa výpis nedotýkal databázy pri každom zobrazení, sme vo v0.39.0 zavádzali vyrovnávaciu pamäť trhu. Zápis sa cachovať nedá, takže meranie tú ochranu potichu rušilo. Od tejto verzie sa návštevy strojov nezapisujú vôbec: vyhľadávače, náhľady odkazov v Messengeri, WhatsAppe či Telegrame, meracie nástroje aj skripty bez identifikácie prehliadača. Výnimku má jediná udalosť — zaplatené — lebo tú hlási server Stripe nášmu serveru a žiadny prehliadač za ňou nestojí; inak by sme si nezapísali tržbu. História udalostí sa drží 90 dní, aby sa dal porovnať mesiac s mesiacom, a staršie sa raz denne počas zberu mažú. Súkromia sa nič z toho nedotýka: identifikáciu prehliadača si prečítame, aby sme odlíšili robota od človeka, ale neukladáme ju — rovnako ako neukladáme IP, e-mail ani cookie. Strážny test to po novom kontroluje presnejšie: pozerá sa na to, čo sa naozaj zapíše do databázy, nie na to, čo kód cestou prečíta.

v0.70.0

2026-08-10

Administrácia už dnes ukazuje, že dáta starnú — lenže nikto sa tam nepozerá. Sme traja a robíme to popri práci, takže tichý výpadok zberu môže pokojne trvať týždeň. Web by celý ten čas ponúkal inzeráty, ktoré sú dávno predané, a počítal verdikty z mŕtveho trhu. To je horšie, než keby web nefungoval vôbec — vtedy to aspoň vidno. Keď teda šesť hodín nepribudne ani jedna nová ponuka, príde prevádzkovateľovi e-mail: ako staré sú dáta a čo skontrolovať, v poradí od najpravdepodobnejšej príčiny — plánovač, kľúč CRON_SECRET, zdrojový kanál, stránka Zdroje. Ďalší taký e-mail najskôr o dvanásť hodín, aby sa z upozornenia nestal spam pri každom desaťminútovom behu. Jedno obmedzenie treba povedať nahlas, nie ho zamlčať: alarm sa spúšťa PRI BEHU ZBERU. Zachytí teda prípad, keď zber beží, ale prestal nosiť dáta — pokazený parser, zmenený kanál, prázdny feed. Nezachytí prípad, keď plánovač prestane spúšťať zber úplne, lebo vtedy sa nespustí ani alarm. Strážiť sám seba sa nedá. Na to slúži dozor zvonka: cron-job.org vie poslať e-mail, keď volanie zlyhá, je to zadarmo a v návode na spustenie je to teraz ako samostatný krok. A drobnosť s veľkým dosahom: nová stránka pre predávajúcich pribudla aj na úvodnú stránku. Bola len v hlavičke, takže polovica trhu — tí, čo predávajú — o nej na prvej obrazovke nemala ako vedieť.

v0.69.0

2026-08-10

Portál dovtedy hovoril len ku kupujúcim. Pribudla druhá vstupná brána — stránka „Za koľko to predám?“ pre tých, čo auto alebo motorku predávajú. Je to úplne iná cieľovka, na slovenskom internete najhľadanejšia otázka okolo áut, a nepotrebovala ani riadok novej matematiky: tie isté kohorty rovesníkov, len namiesto „je táto cena férová?“ odpovedáme „akú cenu si mám dať?“. Výstup sú tri čísla a tri vety. Za koľko inzerovať (s priestorom na zjednávanie), aký je stred cien rovesníkov a čo reálne ostane na ruke po bežnej dohode. K tomu rada, pod ktorou sumou už predávaš pod cenou rovesníkov — čo má zmysel len vtedy, keď sa ponáhľaš. Čísla sú zaokrúhlené na päťdesiatky, lebo nikto nedáva do inzerátu 10 237 €. Najdôležitejšia časť tejto stránky ale nie je číslo, je to veta pod ním: poznáme ceny, za ktoré sa podobné kusy PONÚKAJÚ — nie ceny, za ktoré sa naozaj predali. Za koľko auto nakoniec zmenilo majiteľa, nevie nikto okrem predávajúceho a kupujúceho. Kto by tvrdil opak, klame, a celý tento portál stojí na tom, že neklameme. Platia tu aj ostatné pravidlá: poškodené kusy do odhadu nevstupujú a keď rovesníkov nemáme dosť, radšej nepovieme nič, než číslo vytiahnuté z dvoch inzerátov.

v0.68.0

2026-08-10

Portál nemal ako zistiť, čo ľudia robia. Vedeli by sme, že prišla platba — ale nie čo k nej viedlo, a už vôbec nie, kde odchádzajú tí, čo nezaplatili. Prvý platiaci zákazník by nás nenaučil nič. Pribudlo preto meranie lievika: otvorenie výpisu, otvorenie detailu, overenie cudzej ponuky, klik na Odomknúť, zápis vak a zaplatenie. V administrácii je z toho tabuľka za 24 hodín a za 7 dní, pod ňou konverzia z výpisu na klik do platby. Dve rozhodnutia, na ktorých záleží. Prvé: neukladáme NIČ o človeku — žiadnu IP adresu, e-mail ani cookie. Len fakt, že sa niečo stalo, čoho sa to týkalo a kedy. To úplne stačí na otázku „kde nám to padá“ a zároveň to znamená, že nepotrebujeme cookie lištu ani súhlas; strážny test dohliada, aby sa tam osobný údaj nikdy nepridal. Druhé: klik na Odomknúť sa zapisuje SKÔR, než človeka pošleme na prihlásenie alebo do platobnej brány — inak by sme nikdy nezapočítali práve tých, ktorých sme presvedčili, ale stratili po ceste. Pri malej vzorke konverziu radšej nepovieme vôbec. Rozhodovať sa podľa troch návštev je horšie než nemať číslo — a je to tá istá zásada, akú držíme pri verdiktoch. Meranie je pomôcka, nie funkcia produktu: bez databázy sa ticho vypne a jeho chyba nikdy nesmie zhodiť stránku, ktorú meria.

v0.67.0

2026-08-10

Príprava na deň spustenia — a jedno zistenie, ktoré mení plán zberu. RSS kanál je PRÚD, nie archív: jedno stiahnutie vráti päťdesiat najnovších ponúk z rubriky, nie celý trh. Archív si teda staviame sami, stiahnutie po stiahnutí. Pri dennom behu by sme zachytili päťdesiat ponúk denne a všetko medzi tým by nám ušlo navždy; pri behu každých desať minút zachytíme prakticky každú novú ponuku. Rozdiel nie je v rýchlosti, ale v tom, či vôbec budeme mať trh, s ktorým sa dá porovnávať. V návode je preto pravidelný zber po novom označený ako povinný, aj s vysvetlením — nie ako voliteľné vylepšenie. Z toho plynie druhá vec: prvé dni bude archív malý. Verdikt potrebuje aspoň troch rovesníkov rovnakého modelu, takže väčšina ponúk dostane „málo podobných ponúk na verdikt“. Pre návštevníka to vyzerá ako pokazený produkt — pritom je to normálny nábeh, ktorý sa každou hodinou zlepšuje. Rozdiel medzi „toto nefunguje“ a „toto sa práve plní“ je jedna veta, a tá tam chýbala. Výpis ju teraz povie sám: „Archív sa ešte plní — verdikt zatiaľ vieme vydať pri 6 z 20 ponúk.“ Keď pokrytie prekročí štyridsať percent, pruh zmizne; strašiť zbytočne netreba. To isté číslo pribudlo do administrácie ako *Pokrytie verdiktom* a je to najlepší ukazovateľ zdravia zberu, aký máme — spája kvalitu rozpoznávania modelov s tým, či máme dosť ponúk na porovnanie. Keď klesne, niečo sa pokazilo, a je to vidno skôr, než sa začnú sťažovať ľudia. Poškodené vozidlá sa doň nepočítajú: verdikt im nedávame zámerne, takže by číslo skresľovali.

v0.66.0

2026-08-10

Parsovanie inzerátov sme testovali od začiatku. To, čo sa z rozparsovaných dát naozaj ULOŽÍ, ale dovtedy nekontroloval nikto — a práve tam sedela chyba, ktorá by sa nikdy neohlásila. Pri opakovanom videní inzerátu sa prepisovala len cena, kilometre a čas posledného videnia. Lokalita, rok, výmera ani atribúty sa už nezmenili NIKDY. Dôsledok by bol tichý a trvalý: inzerát uložený starším zberačom by ostal navždy bez mesta — a pri realitách je mesto podmienka verdiktu, takže by ho už nikdy nedostal. Rovnako by ostal bez príznaku poškodenia, hoci ho dnes z toho istého textu rozpoznáme. Zakaždým, keď zlepšíme rozpoznávanie, sa zlepšia len nové ponuky; tie staré by zamrzli v podobe, v akej prišli. A predajcovia inzeráty priebežne upravujú — doplnia rok, priznajú búranie, spresnia výmeru. Odvodené polia sa preto pri každom videní prepisujú. Aby sa to nemohlo vrátiť, ukladanie má teraz vlastný test proti zamrazenému kúsku skutočného kanála a náhradnej databáze v pamäti — bez Postgresu. Kontroluje, čo v riadku naozaj skončí: príznak poškodenia, nájazd (167 000 km, nie 2 018), doplnenie mesta k už uloženej ponuke, snímku ceny len pri zmene (nie pri každom behu) a archiváciu poklesu kilometrov kvôli stáčaniu. Aj to, že sa strážni psi párujú výhradne pri NOVOM inzeráte — inak by človek dostával ten istý e-mail pri každom behu zberu.

v0.65.0

2026-08-10

Dokončenie práce s búranými vozidlami. Z verdiktu aj z rebríčka sme ich vyhodili, platený rozbor sme naučili o nich hovoriť — ostali však dve miesta, kde ďalej kazili obraz trhu, a obe sú tichšie než výpis. Prvé je e-mail vak. Vrak je lacný z definície, takže trafí takmer každý filter „cena do X“ — a pes ho posielal ako novú ponuku, bez slova o poškodení. Človek si teda mohol prísť s peniazmi na auto, o ktorom sme vedeli, že je búrané, a upozornili sme ho práve my. Teraz je taká ponuka v zozname označená („⚠ Predajca uvádza poškodenie alebo chýbajúce doklady — cena nie je porovnateľná s bežnými kusmi“) a ide na koniec zoznamu; hore ostávajú tie, kvôli ktorým pes vlastne existuje. Neskrývame ich, len ich nevydávame za nález. Druhé sú verejné čísla. Report Stav trhu je písaný tak, aby sa dal citovať, a modelové stránky ukazujú cenové rozpätie modelu — do oboch vraky vstupovali. Robili dve škody naraz: ťahali medián dole a zároveň nafukovali podiel „ponúk pod trhom“, lebo pod trhom je búrané auto vždy. Na modelovej stránke by potom stálo „od 3 900 €“, čo je pravdivá veta o vraku a klamlivá o modeli. Obe štatistiky teraz opisujú trh s pojazdnými vozidlami, rovnako ako verdikt.

v0.64.0

2026-08-10

Keď sme minule naučili výpis rozpoznať búrané autá, ostalo nedopovedané to najdôležitejšie miesto: stránka Over ponuku. To je náš platený produkt — vložíš link z ktoréhokoľvek portálu a za 2,90 € dostaneš rozbor. Lenže o poškodení nevedela vôbec. Kto by tam vložil ten istý búraný Opel Crossland za 3 900 €, ktorý bezplatný výpis označí výstrahou, zaplatil by a dostal sebavedomé „hlboko pod trhom“. Teda nielenže by sme o vraku mlčali — my by sme ho za peniaze odporučili ako najlepší kúp. Platený rozbor nesmie byť horší než to, čo dávame zadarmo. Overenie teraz posudzuje stav rovnako ako zber: z textu stiahnutého inzerátu rozpozná búrané, nepojazdné, bez dokladov aj bez papierov, percento nedá a namiesto neho ukáže výstrahu s tým, čo predajca sám uvádza. Výstraha sa nezamyká za platbu — je to zopakovanie inzerátu, nie náš záver, a za informáciu, ktorá chráni kupca, peniaze nepýtame. Kto vypĺňa údaje ručne, môže do nového poľa skopírovať popis od predajcu a dostane to isté. Druhá vec z tej istej stránky: do porovnania vstupovali aj vraky z nášho vlastného trhu, takže búrané auto v ponuke ťahalo medián dole a z predraženej ponuky robilo „cenu v norme“. Rovesníkmi sú teraz len zdravé kusy — rovnaké pravidlo ako vo výpise. A rok výroby sa dopĺňa z nadpisu, keď ho text neuvádza; rok je kľúč kohorty a bez neho sa porovnáva naprieč dvadsiatimi ročníkmi.

v0.63.0

2026-08-10

Chyba priamo v jadre produktu — a taká, ktorá by sa nikdy neohlásila ako chyba, len ako horší výsledok. Verdikt je porovnanie s rovesníkmi, takže všetko stojí na tom, či to isté vozidlo rozpoznáme bez ohľadu na to, ako ho predajca napísal. Nerozpoznali sme: „Yamaha MT 09“ dávalo kľúč „yamaha 09“ (slovo „MT“ nám zjedol zoznam prevodoviek, kde znamená manuál), „Yamaha MT-09“ dávalo „yamaha mt-09“ a „Honda CBR 600 RR“ verzus „Honda CBR600RR“ takisto dva rôzne kľúče. Tie isté motorky teda padali do dvoch skupín, rovesníkov bolo zrazu polovica a verdikt sa buď zhoršil, alebo nevydal vôbec — návštevník videl len „málo podobných ponúk na verdikt“ a nemal ako vedieť, že sme sa pomýlili my. Kľúč modelu sa teraz skladá bez ohľadu na oddeľovače: „MT 09“ = „MT-09“ = „MT09“, „CBR 600 RR“ = „CBR600RR“, „C 220 d“ = „C220d“, „BMW rad 3 320d“ = „BMW 320d“. Zároveň sme dali pozor na opak — koncovku verzie neodrezávame, lebo BMW R1200GS (enduro) a R1200RT (cestovná) sú naozaj iné motorky s inou cenou a do jednej kohorty nepatria. Rovnako ostáva, že jednociferné číslo za známym modelom je generácia, nie časť názvu: „Golf 5“ a „Golf 7“ sú Golfy, „Kia Rio 5“ je Rio. Do zoznamu slov, ktoré nikdy nie sú model, pribudli skratky výbavy a papierov — ABS, ESP, LED, STK, EK, Euro. Sú dosť krátke na to, aby sa prilepili k označeniu typu, a „MT 09 ABS“ tak nesmie skončiť ako vlastný model. A staré adresy modelových stránok s pomlčkou (/auta/model/yamaha-mt-07) fungujú ďalej — mohli sa dostať do Google alebo do cudzieho odkazu a nechceme z nich spraviť mŕtve stránky.

v0.62.0

2026-08-10

Tretia vertikála pod drobnohľadom — motorky. A našla sa krehkosť, ktorá by sa pri raste sama zhoršovala: rubrika Motocykle je z veľkej časti bazár dielov a oblečenia, a náš filter ich vyhadzoval LEN preto, že stáli pod prahom ceny. Nie preto, že by sme ich rozpoznali. To znamená, že prilba za 400 €, kožená kombinéza za 600 € alebo výfuk za 900 € by prešli ako motorky a stiahli medián — a naopak pojazdná Babetta za 180 € by vypadla, hoci je to presne to, čo hľadáme. O tom, ČO tá vec je, nesmie rozhodovať cenovka. Pribudol preto slovník motodielov a výstroja: prilby, rukavice, bundy, nohavice, kombinézy, rozety, statory, výfuky, zrkadlá, polepy. Slová, ktoré by mohli vyhodiť aj poctivú motorku („Honda CB500, nové sedlo a reťaz“), platia len na začiatku nadpisu — tam, kde je predmet inzerátu. Cenový prah klesol zo 250 € na 120 € a ostáva už len ako poistka proti drobnostiam. Druhá vec z toho istého kanála: pri motorkách je najčastejšia forma „bez papierov“ — Simson, Jawa, MZ vyradené z evidencie. Cena takého kusa je úplne inde než cena prihlásenej motorky, takže patrí do tej istej kategórie ako autá bez dokladov: výstraha áno, percento nie, do mediánu nevstupuje. A tretia, ktorá zlepšuje verdikty naprieč všetkými vertikálami: rok výroby sme čítali len z popisu. Lenže polovica inzerátov ho má v nadpise — „Opel Corsa 2011 1.20 benzín“, „Ford S-MAX 2.0 TDCi, 7-miestny 2009“, „Honda Forza 125 / r.v 2025“. Bez roku spadne verdikt na porovnanie so všetkými ročníkmi modelu, čo je pri Octavii rozdiel dvadsiatich rokov. Rok sa teraz číta aj z nadpisu — s poistkou, ktorá vie, že číslo hneď za značkou je názov modelu: Peugeot 2008 je SUV a BMW 2002 klasika zo sedemdesiatych rokov, nie ročníky výroby. Rovnako sa dočítavajú kilometre, palivo aj prevodovka. K tomu drobnosť: keď predajca namiesto ceny napíše „V texte“, nadpis už túto vsuvku nenesie do výpisu ani do rozpoznávania modelu.

v0.61.0

2026-08-10

To isté preverovanie, aké odhalilo problém realít, som pustil na kanál áut — teda na vertikálu, ktorá štartuje prvá. Za jednu minútu z neho vypadli tri búrané autá: Opel Crossland X (2019, 104 000 km) za 3 900 €, Renault Trafic s poškodeným motorom za 3 500 € a Volvo C30 po nehode za 1 000 €. Všetky by prešli ako bežné vozidlá — a keďže náš rebríček „najvýhodnejšie“ zoraďuje podľa toho, ako hlboko je cena pod rovesníkmi, obsadili by prvé miesta úvodnej stránky ako najlepší kúp na Slovensku. Poistka proti návnadám z verzie 0.41.0 chytí len ceny absurdne ďaleko od stredu trhu; ľahko búrané auto za 60 % ceny cez ňu prejde — a práve to je ten najnebezpečnejší prípad, lebo vyzerá ako skvelý obchod a nie je ním. Búrané, nepojazdné a autá bez dokladov teraz rozpoznávame z nadpisu aj popisu a hovoríme o nich pravdu: cena sa nedá porovnávať s nepoškodenými kusmi, takže nedostanú percento, nevstupujú do mediánu rovesníkov a v rebríčku idú na koniec. Neskrývame ich — informácie nezamlčiavame — a výstrahu vidí každý, aj neplatiaci; bezpečie sa u nás nepredáva. Pozor sme dali na opak: auto, ktoré sa v inzeráte chváli, že je „nehavarované“ alebo „bez nehody“, sa za vrak označiť nesmie. A „TOP 1 z 12“ teraz počíta dvanásť porovnateľných ponúk, nie dvanásť riadkov vrátane vrakov. Druhá vec z toho istého kanála: motor bez auta. Filter dielov pustil ďalej inzerát „Motor 2.0TDI 125kw CFG“, lebo hľadal spojenie „motor na“. O predmete inzerátu teraz rozhoduje prvé slovo nadpisu — motor, prevodovka či servo riadenie sú diel, ale auto s novým motorom ostáva autom. Von idú aj nadpisy, ktoré sú len katalógovým číslom („7L0907553F“). A do tretice tichá chyba v číslach: predajcovia píšu údaje pod seba, „ROK: 10/2018 Km: 167000“. Náš čítač hľadal číslo PRED slovom km, takže z dodávky s nájazdom 167 000 km spravil auto s 2 018 kilometrami. Na karte je to zjavný nezmysel a v archíve by to navyše spustilo detektor stočených kilometrov u poctivého predajcu. Označkovaný tvar má teraz prednosť a rok pred slovom km sa ako nájazd nečíta.

v0.60.0

2026-08-10

Včerajšia oprava realít fungovala na ukážkových dátach — tak som ju skúsil na skutočnom kanáli Bazošu a zistil, že v ostrej prevádzke by spôsobila katastrofu. Rovesníci sa pri nehnuteľnostiach hľadajú podľa lokality, lenže RSS kanál lokalitu vôbec neposiela: každý byt, dom aj pozemok by prišiel bez mesta, spadol do jednej jedinej celoslovenskej skupiny a porovnával by sa so všetkým ostatným. Byt v Bratislave za 3 600 €/m² vedľa pozemku pri Michalovciach za 15 €/m². Výsledok by bol presne opačný než náš sľub: každá lacná parcela na východe „TOP 1 hlboko pod trhom“, každý bratislavský byt „stovky percent nad trhom“. Mesto sa preto hľadá priamo v texte inzerátu a zvláda slovenské skloňovanie — „v Malackách“, „v Košiciach“, „pri Trnave“. Keď ho nenájdeme, POVIEME TO: ponuka ostane bez verdiktu. Radšej „málo podobných ponúk“ než sebavedomé percento z porovnania Bratislavy s Kysucami. Rovnako sa nechytá marketing: „záhrada v Budmericiach, 35 minút od Bratislavy“ nie je nehnuteľnosť v Bratislave, hoci to tak realitky rady píšu. A názvy, ktoré sa bijú s bežnými slovami (Modra proti „modrej kuchyni“, Krásna proti „krásnej záhrade“), radšej nehľadáme vôbec. Kohorta po novom nemieša ani veci, ktoré sa miešať nesmú: predaj s prenájmom (kúpna cena proti mesačnému nájmu) ani byt s pozemkom. Prenájom je vo výpise označený, aby byt za 450 € nevyzeral ako životná príležitosť vedľa bytu za 189 000 €. Pri triedení typu rozhoduje prvá zmienka v inzeráte, nie poradie v číselníku — „4-izbový RD s garážou“ je dom (dovtedy to bola garáž) a „rodinný dom s atmosférou chalupy“ je dom, nie chata. A dve čísla, ktoré na jednej obrazovke pôsobili, že si portál protirečí: nad výpisom svietil „medián trhu“, o riadok nižšie verdikt s iným „mediánom“. Sú to naozaj dve rôzne veličiny, tak to aj hovoríme — verdikt porovnáva s „mediánom rovesníkov“ a hlavička realít priznáva, že ide o „medián zobrazených ponúk“, nie o medián lokality; výpis môže byť z celého Slovenska. Mesačné nájmy do tohto mediánu už nevstupujú vôbec.

v0.59.0

2026-08-09

Konečne som si web otvoril v prehliadači ako návštevník — a hneď na prvej obrazovke stáli dve čísla, ktoré si odporovali. Hore „medián trhu 9 800 €“, o tri riadky nižšie auto za 10 900 € s nálepkou „−15 % pod trhom · TOP 1 z 41“. Cena nad mediánom označená ako pod trhom, a poradie zo 41 ponúk, keď ich vo výpise bolo sedem. Príčina: ukážkové inzeráty si nosili verdikty napevno napísané v dátovom súbore — text, ktorý nikto nikdy neprepočítal. Odteraz prechádzajú ukážkové dáta tým istým enginom ako reálne: zo súboru berieme len fakty (názov, cena, rok, kilometre), závery si počítame sami. Čo vidí návštevník, to engine naozaj povedal. To isté preverovanie odhalilo vážnejšiu vec v jadre: reality by nedostali verdikt NIKDY. Rovesníci sa hľadali podľa modelu z automobilového číselníka — a ten z nadpisu „3-izbový byt · Petržalka“ nerozpozná nič, takže každý byt tvoril vlastnú jednoprvkovú skupinu a výsledkom bolo večné „málo podobných ponúk na verdikt“. Pri nehnuteľnostiach sa teraz rovesníci hľadajú podľa lokality; byty tak konečne dostávajú cenu za meter voči susedom. Bez otvorenia prehliadača by sa to ukázalo až v deň spustenia realít. K tomu má ukážka viac motoriek rovnakého modelu, aby demonštrovala funkčný produkt namiesto troch osamelých kusov bez verdiktu.

v0.58.0

2026-08-09

Oprava, ktorá by inak pokazila deň spustenia: automatický zber mieril na nesprávne dvere. Plánovač vo Verceli stále spúšťal staré čítanie HTML stránok — krehkú cestu, ktorú sme opustili, keď Bazoš ponúkol oficiálny RSS kanál. Nový RSS zberač, do ktorého sme vložili filter vozidiel, triedenie realít aj okamžité obnovenie vyrovnávacej pamäte, nemal naplánovaný ani jeden beh — a reality nemali zber vôbec. V deň pripojenia databázy by teda dáta tiekli tou horšou rúrou a byty by nechodili žiadne. Zberač po novom zvládne jeden hromadný beh: autá, motorky aj reality za sebou v jednom volaní, s jedným obnovením pamäte na konci. Plánovač mieri naň — a zmestíme sa do limitu bezplatného plánu Vercelu, ktorý povoľuje najviac dva naplánované behy; druhý slot ostáva voľný do budúcna. Jednotlivé rubriky sa naďalej dajú spúšťať aj samostatne na ladenie. Návod na spustenie je zaktualizovaný: prvé napustenie dát je teraz jedna adresa namiesto troch a na externom plánovači stačí jedna úloha.

v0.57.0

2026-08-09

Neviditeľná, ale rozhodujúca vec pre doručovanie pošty: e-maily vak teraz nesú hlavičky List-Unsubscribe s odhlásením jedným klikom. Gmail a Yahoo ich od roku 2024 pri hromadnej pošte vyžadujú — bez nich notifikácie skôr či neskôr končia v spame, a to potichu: my odošleme, schránka zahodí, nikto nič nevie. S hlavičkami navyše Gmail zobrazuje svoje natívne tlačidlo „Zrušiť odber“ priamo pri odosielateľovi — a to je pre nás výhra: kto už nechce poštu, klikne naň namiesto tlačidla „spam“, ktoré by kazilo doručovanie všetkým ostatným. Pod kapotou pribudol podpísaný koncový bod, ktorý psa uspí okamžite a bez otázok, ako káže špecifikácia one-click — poštový server naň klikne strojovo, takže tam nemá čo byť žiadne „naozaj?“. Keby adresu omylom otvoril človek v prehliadači, presmeruje sa na ľudskú stránku zrušenia. Podpis je rovnaký ako pri ľudskom odkaze, takže nikto nevie odhlásiť cudzieho psa hádaním adries.

v0.56.0

2026-08-09

Vak už nezaspí bez slova. Keď psovi vypršala platnosť, jednoducho prestal posielať — a ticho je najhorší možný koniec: človek si po týždni nepovie „skončil mi trial“, povie si „tindo je pokazené“ a už sa nevráti. Deň pred koncom teraz odíde jeden poctivý e-mail: čo strážime, dokedy, a že sa nič neúčtuje samo — kto chce pokračovať, predĺži si jedným klikom; kto nie, nemusí robiť nič. Je to zároveň jediná správna chvíľa na ponuku predplatného: presne vtedy, keď človek vie, o čo príde. E-mail odíde ku každému psovi len raz (stráži to značka v databáze), nepotvrdení psi nedostanú ani tento, vypršaným sa nič neposiela — upozorňovať na koniec niečoho, čo už skončilo, by bolo klamstvo — a jeden beh zberu odošle najviac dvadsať upozornení, aby sa odosielateľ nezavalil. Šablóna je v admin náhľade e-mailov a chyba upozornení nikdy nezhodí samotný zber.

v0.55.0

2026-08-09

Dotiahnutie včerajšej stránky predaných ponúk — tentokrát pre Google. Stránka „Už nie je v ponuke“ je užitočná pre človeka, ktorý klikol zo starého e-mailu, ale pre vyhľadávač je to pasca: pri reálnej prevádzke „zmiznú“ desiatky ponúk denne a Google by si za pár mesiacov naindexoval tisíce stránok predaných áut. Návštevník z vyhľadávania by potom klikal na samé „predané“ — a živá ponuka by sa vo výsledkoch topila pod mŕtvou. Predané stránky teraz Googlu hovoria „neindexuj“ (človeku sa zobrazujú ďalej, odkazy z nich sledovať smie) a titulok poctivo priznáva stav ponuky. K tomu upratovanie: z projektu odišli posledné súbory s vymyslenými číslami — stará tabuľka ukážkových platieb a KPI komponent z čias mockupu, ktoré už nič nepoužívalo, ale ktoré čakali na to, kým ich niekto omylom znova zapojí. Strážny test dohliada, že sa nevrátia.

v0.54.0

2026-08-09

Predaná ponuka už nie je „stránka neexistuje“. Odkazy na inzeráty žijú dlhšie než inzeráty samotné: vak pošle e-mail ráno, človek klikne večer — a dobré auto je medzitým predané. Doteraz ho privítala štandardná chybová stránka, ktorá vyzerá ako pokazený odkaz; a to presne v momente najvyššieho záujmu, s peniazmi pripravenými. To isté platí pre zdieľané odkazy v Messengeri a pre obľúbené. Odteraz detail zmiznutej ponuky povie pravdu: „Už nie je v ponuke — spravidla to znamená, že sa predala“, ukáže poslednú známu cenu a dátum, kedy sme ju videli naposledy, a hneď pod tým podobné ponuky toho istého modelu, ktoré v ponuke SÚ — zoradené od najvýhodnejších. Namiesto slepej uličky rovno ďalší kandidát. K tomu pripomienka, že nabudúce ho predbehne vak — čo je pravdivá odpoveď na otázku „ako to nabudúce stihnem?“. Podobné ponuky prechádzajú rovnakým očistením ako všade inde, takže ani táto stránka neprezrádza platené verdikty; úplne neznáme adresy končia na chybovej stránke ako doteraz.

v0.53.0

2026-08-09

Predaj bez nezmyslov a stránky pripravené na skutočný objem. Modrý predajný pruh sa zobrazoval aj nad prázdnym výsledkom — „Žiadne výsledky“ a hneď pod tým „Odomkni a uvidíš, ktoré to sú · 9,90 €“. Ktoré? Nie sú žiadne. Predávať odomknutie ničoho je presne ten moment, kedy si človek povie, že tlačidlo platby je tu prilepené bez rozmyslu — a prestane veriť aj zvyšku. Pruh sa teraz nad prázdnym výsledkom nezobrazuje vôbec a jeho podtitulok sa prispôsobuje obsahu: „uvidíš, ktoré to sú“ hovorí len vtedy, keď sa vo výsledkoch naozaj niečo našlo. Druhá vec je neviditeľná dnes, ale rozhodujúca pri reálnych dátach: modelové a krajové stránky vykresľovali všetky ponuky naraz — populárny model bude mať stoky ponúk a server by generoval nekonečnú stránku. Teraz ukážu tridsať najvýhodnejších a pod nimi odkaz „Zobraziť všetkých N ponúk so stránkovaním“, ktorý vedie do plného výpisu s filtrom na daný model.

v0.52.0

2026-08-09

Koniec slepej uličky pri hľadaní. Keď filtrom nevyhovel žiadny inzerát, web poradil „uvoľni kritériá“ — a nechal človeka hádať, ktoré z piatich kritérií ho zradilo. Pritom to vieme spočítať za neho: skúsime každý aktívny filter vynechať a zistíme, koľko ponúk by tým pribudlo. Prázdny výsledok teraz ponúka klikateľné návrhy s počtami — „bez limitu ceny (12) · bez roku od (8)“ — zoradené od najprínosnejšieho; filter, ktorého zrušenie nepomôže, sa nenavrhuje vôbec. Z mŕtveho konca je rázcestie, čo je rozdiel medzi návštevníkom, ktorý odíde, a návštevníkom, ktorý si len upraví hľadanie. Popri tom drobná oprava v administrácii: hlásenia od návštevníkov linkovali na inzerát vždy cez /auta — hlásenie na motorku tak končilo na neexistujúcej stránke. Odkaz sa teraz skladá podľa vertikály inzerátu.

v0.51.0

2026-08-09

Sekcia Moje verdikty sľubuje: „Každý verdikt, ktorý si odomkol, tu ostáva natrvalo — aj keď inzerát z portálu zmizne.“ Lenže pri kúpe sa do archívu neukladalo vôbec nič — dva prázdne objekty. Kým inzerát žil, verdikt sa počítal naživo a nikto si nič nevšimol; v deň, keď sa auto predalo a inzerát zmizol, by v trvalom archíve zákazníka ostal riadok s pomlčkami. Zaplatil 2,90 € za niečo, čo malo vydržať navždy, a vydržalo do prvého predaja. Odteraz sa pri kúpe uloží úplná snímka: inzerát (názov, cena, rok, kilometre, lokalita, odkaz na originál) aj verdikt presne v podobe z dňa kúpy — percento voči rovesníkom, s čím sa porovnávalo, história zliav, prípadná výstraha o kilometroch. Trh sa hýbe a verdikt sa časom mení; archív ukazuje to, za čo človek zaplatil. Stránka Moje verdikty tú snímku aj celú zobrazuje — vrátane odkazu na pôvodný inzerát a výstrah, nie len nadpis s farebnou nálepkou.

v0.50.0

2026-08-09

Férovosť pri peniazoch a poriadok v dátach. Obnova predplatného doteraz počítala nové obdobie odo dňa platby — kto si Loveckú sezónu obnovil päť dní pred koncom, o tých päť zaplatených dní jednoducho prišiel. Malé číslo, ale presne ten typ drobnosti, po ktorej si človek povie, že ho naťahujú. Nové obdobie teraz nadväzuje na koniec toho aktuálneho; kto obnovuje po vypršaní, začína odo dňa platby, lebo minulosť nič nepredlžuje. Overené testami na oboch prípadoch aj priamo v kóde webhooku, ktorý platby prijíma. Druhá vec: vak ukladal filter presne tak, ako prišiel z prehliadača — vrátane ľubovoľných cudzích kľúčov a ľubovoľne dlhých textov, ktoré potom putovali do databázy, do porovnávania pri každom novom inzeráte aj do e-mailov. Filter sa teraz pred uložením očistí: prejdú len známe polia, texty sa orežú a nezmyselné čísla zahodia.

v0.49.0

2026-08-09

Dokončenie nákupného okruhu. Zamknuté sekcie na detaile presvitali cez rozmazanie konkrétnymi číslami — „−12 % pod mediánom · 4. najlepšia zo 41“, „3 zľavy · spolu −1 400 €“. Boli vymyslené a pre každý inzerát rovnaké: kto zaplatil, uvidel iné čísla než tie, ktoré mu cez rozmazanie svietili pred kúpou. Teraz je pod rozmazaním priznaný vzor (−## %, # z ##), nie falošný sľub. Druhá vec: po zaplatení verdiktu Stripe vracal človeka na stránku účtu — a k inzerátu, ktorý si práve odomkol, sa musel preklikať späť sám. Teraz sa vráti presne na detail, kde nákup začal; rovnako pri prerušenej platbe a rovnako po prihlásení, keď nákup začal neprihlásený. Návratová adresa prechádza kontrolou, ktorá púšťa len naše vlastné cesty. A keďže potvrdenie z banky niekedy dorazí o pár sekúnd neskôr než človek, detail po návrate poctivo povie: platba prebehla, ak je verdikt ešte zamknutý, obnov stránku o chvíľu — namiesto ticha, ktoré vyzerá ako nefunkčná platba.

v0.48.0

2026-08-09

Tlačidlá „Odomknúť“ boli mŕtve — priamo na ceste k peniazom. Volali totiž len prepínač, ktorým sa v ukážke predvádza platený režim; na ostrom webe s databázou taký prepínač neexistuje, takže zákazník klikol na „Odomknúť tento inzerát · 2,90 €“ a nestalo sa vôbec nič. Žiadna chyba, žiadne presmerovanie — nič. To je najdrahšie možné miesto na mŕtve tlačidlo. Odteraz existuje jedno spoločné tlačidlo odomknutia: v ukážke prepína režim ako doteraz, naostro odošle platbu — server človeka podľa situácie pošle na prihlásenie, do platobnej brány, alebo na cenník s vysvetlením, kým platby nebežia. Z detailu sa kupuje verdikt presne toho inzerátu, z výpisu a z Over ponuku Lovecká sezóna. Pri tej príležitosti sa zaplátal aj posledný únik plateného obsahu: stránka Over ponuku posielala neplatiacim skutočný verdikt, medián aj počet lacnejších kusov — len ich v prehliadači rozmazala. Teraz sa výsledok očistí na serveri a rozmazaný náhľad je priznaný vzor, nie skryté skutočné čísla.

v0.47.0

2026-08-09

Dve veci, ktoré by platiaceho zákazníka odohnali. Prvá: karta modelu v platenom rozbore bol jeden natvrdo napísaný text — DSG mechatronika, DPF filter, olej v prevodovke — a zobrazoval sa každému autu. Benzínová Fabia s manuálom dostala rady o dieselovom filtri a automate; kto autám rozumie, prekukne to za tri sekundy a s tým padá dôvera v celý verdikt. Karta sa teraz skladá z údajov vozidla: diesel dostane DPF a dvojhmotu, benzín reťaz rozvodov a karbón, LPG revíziu nádrže, hybrid a elektro stav batérie, automat radenie za studena, vysoký nájazd rozvody, staré auto hrdzu. Otázky pre predajcu sa skladajú rovnako a motorky dostali vlastnú kartu — pády, reťaz, DOT pneumatík, zimovanie. K tomu zmizlo mŕtve tlačidlo „Preveriť VIN“, ktoré len vypísalo hlášku; namiesto neho sú skutočné odkazy na Cebiu a carVertical. Druhá vec: zoradenie „od najvýhodnejších“ — jadro celého produktu — existovalo, ale nebolo ako ho zapnúť; fungovalo len cez parameter v adrese, o ktorom nikto nevie. Na výpise je teraz viditeľný prepínač Najnovšie / Najvýhodnejšie, ktorý zachováva zvolené filtre.

v0.46.0

2026-08-09

Dotiahnutie zámku z minulej verzie: platený verdikt mal ešte dvoje verejné bočné dvere. Vložiteľný widget pre fóra a obrázok, ktorý sa ukazuje pri zdieľaní odkazu v Messengeri, sa generujú z plných dát — a obe adresy si vie otvoriť ktokoľvek priamo, bez platenia. Stálo v nich presné percento aj poradie výhodnosti. Zdieľanie je pritom náš motor rastu, takže sa nedalo jednoducho vypnúť. Kompromis: karta aj widget teraz ukazujú kategóriu („Pod cenou rovesníkov“, „Nad cenou rovesníkov“, „Cena v norme“) — návnadu, ktorá tiahne na web — ale presné číslo a poradie ostávajú za platbou. Výstraha pred cenou mimo trhu sa v zdieľaní zobrazuje ďalej, bezpečie sa neplatí. Sekcia Naše výdavky sa zároveň presunula do vlastného bordu Náš tím v menu administrácie — interné veci tímu oddelené od prevádzky portálu.

v0.45.0

2026-08-09

V administrácii pribudla sekcia Naše výdavky — jedno miesto pre spoločné náklady tímu namiesto čísel roztrúsených po chatoch. Každý výdavok má stav: návrh (konzultujeme — kým ho neschválime všetci traja, nikto nič nekupuje), schválené, kúpené, zrušené. Hore sa počíta, koľko nás tindo mesačne stojí (ročné položky sa prepočítajú na dvanástiny), koľko to je na osobu pri delení na troch, koľko sú jednorazové nákupy a čo je zatiaľ len v návrhu. Pri kúpených položkách sa eviduje, kto platil, a podiely sa dorovnávajú pri ďalších nákupoch namiesto prevodov za každú položku. Rozpis je predpripravený: Claude Max 20× ako mesačné predplatné, Mac mini M4 16 GB ako návrh na konzultáciu, doména tindo.sk a bezplatné plány hostingu — po pripojení databázy sa založí jedným tlačidlom a ďalej sa upravuje priamo v admine. Strážny test prístupov sa zároveň naučil skenovať celú administráciu sám, takže každá budúca sekcia je chránená automaticky.

v0.44.0

2026-08-08

Platený obsah bol v skutočnosti zadarmo. Verdikt sa neplatiacim „skrýval“ tak, že sa v prehliadači prekryl rozmazanou nálepkou — lenže karty inzerátov si svoje dáta nesú so sebou a ktokoľvek si ich vedel prečítať v zdroji stránky. Ležalo tam presné percento pod trhom, celá história cien aj poznámka o stočených kilometroch. Teda úplne všetko, za čo pýtame 2,90 €, dostupné stlačením Ctrl+U. Odteraz sa zamknuté polia odstraňujú na serveri a do prehliadača sa vôbec nedostanú; obísť sa to nedá, lebo v odpovedi nie sú. Pri tom sa našli ešte jedny otvorené dvere: prepínač Free/Platiaci, ktorý slúži na predvádzanie ukážky, sa zobrazoval každému neprihlásenému návštevníkovi — teda aj na ostrom webe by si jedným kliknutím odomkol všetko. Miešali sa dva rôzne stavy: „appka beží bez databázy“ a „človek nie je prihlásený“. Teraz sú oddelené. Výstraha pred cenou mimo trhu ostáva viditeľná pre všetkých — a rovnako aj cena, rok, kilometre a odkaz na pôvodný inzerát. Platíme si za rozbor, nie za základné informácie.

v0.43.0

2026-08-08

Upratovanie čísel, ktoré sme si vymysleli. Nad výsledkami stálo „medián trhu 11 200 €“ a modrý pruh sľuboval „V týchto výsledkoch: 3 ponuky výrazne pod trhom · 1 podozrenie na stočené km · 1 skrytý bazár“. Ani jedno sa nepočítalo — boli to pevné vety v konfigurácii, rovnaké pri každom filtri, pri každom počte ponúk, navždy. Pritom prvá vyzerá ako štatistika z toho, čo má človek pred sebou, a druhou predávame predplatné za 9,90 €. Pri službe, ktorej celý zmysel je „veríme číslam, nie pocitom“, je to najhoršia možná chyba; pri platenej ponuke je to navyše klamlivá obchodná praktika. Odteraz sa oboje počíta z nájdených ponúk a mení sa s filtrom — a keď na výrok nemáme dosť dát, radšej nepovieme nič. Keď nie je čo hlásiť, napíšeme aj to: „ceny sedia s trhom“. Zmizol aj vymyslený medián spod ceny na každej karte. A prestali sme tvrdiť, že prehľadávame všetky portály na Slovensku — hovoríme o portáloch, ktoré máme zapojené, a to sa časom zmení samo.

v0.42.0

2026-08-08

Dve poistky na deň, keď sa niečo pokazí. Prvá: vak posielal samostatný e-mail za každý inzerát. Kým všetko beží, sú to jeden-dva denne — ale stačí, aby zber na pol dňa vypadol a po jeho rozbehnutí by človek so širokým filtrom dostal za minútu dvadsať správ. To nie je notifikácia, to je útok na schránku, a odpoveďou býva tlačidlo „spam“, ktoré nám zrazí doručovanie u všetkých ostatných. Odteraz chodí jeden e-mail so zoznamom nových ponúk. Druhá poistka: keď zber vypadne, web sa doteraz nezmenil — ďalej ukazoval tie isté ponuky s verdiktmi a človek podľa nich volal na inzeráty, ktoré sú dávno predané. Tichý výpadok je horší než viditeľná chyba, lebo o ňom nevie nikto, ani my. Teraz je pri výpise napísané, kedy sme ponuky naposledy načítali, a ak zber mešká viac než šesť hodín, návštevník dostane výstrahu, aby si inzerát pred cestou overil na pôvodnom portáli. Administrácia to isté hlási na úvodnej obrazovke.

v0.41.0

2026-08-08

Najnebezpečnejšia chyba, akú mohol mať vyhľadávač postavený na verdiktoch: náš rebríček „najvýhodnejšie“ zoraďuje ponuky podľa toho, ako hlboko sú pod cenou rovesníkov — a najhlbšie pod trhom je vždy návnada. Octavia za 3 500 €, „auto je v Nemecku, pošlite zálohu“. Také inzeráty by sa nám samy vyšplhali na prvé miesto úvodnej stránky a my by sme podvod odporúčali ako najlepší kúp. Odteraz cenu, ktorá je od stredu trhu neprimerane ďaleko, do rebríčka nepustíme, označíme ju výstrahou a nedáme jej percento pod trhom. Netvrdíme, že ide o podvod — hovoríme, že cena nesedí, čo platí aj pri havarovanom aute či preklepe v inzeráte. Výstraha je zámerne mimo platenej časti: verdikt predávame, bezpečie nie. Druhá vec je tichšia, ale kazila všetky čísla: taká cena vstupovala do mediánu, ťahala ho dole a poctivé ponuky vyzerali predražené. Medián sa teraz počíta odolne voči extrémom — v ponukách, na modelových stránkach aj v reporte Stav trhu. A pri nehnuteľnostiach sa opravilo porovnávanie jednotiek: celková cena bytu sa merala voči mediánu za meter štvorcový, čo dávalo nezmyselné percentá.

v0.40.0

2026-08-08

Kolo prehliadky súkromia a prihlasovania. Prihlasovací odkaz sme skladali z adresy, ktorú posiela prehliadač — dala sa podvrhnúť a odkaz by potom viedol na cudzí web; teraz staviame odkazy len z našich vlastných adries a to isté platí pre potvrdenie vak a návrat z platby. Kým nie je zapnutá pošta, odkaz sa už neodkladá do serverových záznamov a človek dostane poctivú správu namiesto sľubu, že e-mail odišiel. Pribudol strop na počet odoslaných odkazov z jednej adresy, aby cez nás nešlo rozposielať poštu na cudzie e-maily. „Vymazať účet“ teraz naozaj maže: dovtedy zostávala e-mailová adresa v uložených hľadaniach. Kto si chce dáta najprv odložiť, stiahne si ich jedným klikom v nastaveniach. Overovanie ponuky už nesleduje presmerovania naslepo a nečíta neobmedzene veľké stránky. A administrácia na úvodnej obrazovke sama povie, čo je zle nastavené — chýbajúci podpisový kľúč, ukážkové heslo, testovací kľúč platieb.

v0.39.0

2026-08-08

Web znesie nápor a vie si povedať, keď sa pomýli. Výpočet celého trhu sa doteraz robil odznova pri každom otvorení stránky — sto ľudí naraz znamenalo sto rovnakých dotazov do databázy, čo je na bezplatnom pláne najistejšia cesta k výpadku. Teraz sa výsledok podrží minútu a po každom zbere sa hneď obnoví, takže nové inzeráty nemeškajú. Druhá vec: pri každom inzeráte je nenápadné „Niečo tu nesedí? Nahlás to“. Dáta ťaháme z cudzích inzerátov, takže sa občas zle vytiahne rok či cena — takto sa o tom dozvieme od návštevníkov a nie z recenzií. Hlásenia chodia do vlastnej fronty v administrácii a poslať ich vie ktokoľvek, bez registrácie.

v0.38.0

2026-08-08

Pokračovanie bezpečnostnej previerky — a našla sa tá istá chyba druhýkrát, len inými dverami. Zamknutie administrácie z minulej verzie chránilo jej stránky, ale nie tlačidlá: úpravy číselníka, prepínače systému aj pridávanie a mazanie inzerátov sa dali spustiť priamo, bez toho aby útočník administráciu vôbec otvoril. Každá takáto operácia si teraz overuje prístup sama a stráži to aj automatický test, ktorý spočíta operácie a kontroly a zapíska, keď sa nezhodujú. Pribudli bezpečnostné hlavičky (web sa nedá vložiť do cudzej stránky ako neviditeľný rám — okrem widgetu, ktorý to potrebuje) a srdiečko pri ponuke už neposiela cenu z prehliadača, aby sa nedala podvrhnúť a vyrobiť e-mail o zľave, ktorá sa nestala.

v0.37.0

2026-08-08

Zabezpečenie administrácie — a priznajme si to na rovinu: doteraz bola otvorená. Žiadna jej stránka neoverovala prihlásenie, takže kto uhádol adresu, videl zoznam zákazníkov, platby aj prepínače systému a mohol ich prestavovať. Prihlásenie sa navyše ukladalo ako obyčajné slovo, ktoré si vedel do prehliadača napísať ktokoľvek. Odteraz je vstup zamknutý na jednom mieste (chráni to aj stránky, ktoré pribudnú neskôr), prihlásenie je podpísané a po dvanástich hodinách vyprší, heslo sa dá skúšať len päťkrát za desať minút a každý pokus sa zapíše do auditu. Kým beží ukážkové heslo, administrácia to hlási červeným pruhom.

v0.36.0

2026-08-08

Vak začne strážiť až po potvrdení z e-mailu. Doteraz stačilo napísať akúkoľvek adresu a notifikácie sa spustili — ktokoľvek tak mohol prihlásiť cudzieho človeka a my by sme mu posielali poštu, o ktorú nežiadal. To je najrýchlejšia cesta k tomu, aby nás poštové servery vyhodnotili ako spam. Teraz príde najprv jeden e-mail s otázkou, či o psa naozaj stojíš, a kým naň neklikneš, neposielame nič. Zároveň keď si ten istý filter uložíš dvakrát, nevzniknú dvaja psi a nechodia dva rovnaké e-maily. A stránka Over ponuku má strop na počet overení za minútu, aby sa cez náš server nedal zaťažovať cudzí portál.

v0.35.0

2026-08-08

Tri opravy, ktoré rozhodujú o tom, či človek službu použije druhýkrát. Vak sa po novom riadi celým filtrom — dovtedy si nevšímal text, palivo ani prevodovku, takže kto si uložil „Octavia diesel do 12 000“, dostal by e-mail o každom aute pod 12 000 vrátane Fiatu Punto. Hľadanie zvláda viac slov: „octavia combi“ predtým nenašlo nič, lebo sa hľadal celý reťazec naraz. A odhlásenie z e-mailov konečne funguje — dovtedy sľubovali „odpovedz STOP“ na adresu, ktorú nikto nečíta; teraz je v každom e-maile podpísaný odkaz, ktorým psa uspíš jedným klikom, bez prihlasovania.

v0.34.0

2026-08-08

Príprava na skutočnú prevádzku. Predané autá teraz z ponuky odchádzajú — zdroj nám nikdy nepovie „predané“, inzerát len prestane chodiť, takže ho po pár dňoch bez videnia označíme za zmiznutý. Bez toho by predané kusy (spravidla tie najlacnejšie) naveky ťahali medián dole a ľudia by klikali na mŕtve odkazy. Zároveň je tam poistka: ak by naraz „zmizla“ väčšina ponuky, je to skôr výpadok zberu než výpredaj, tak sa radšej nestane nič. A databáza sa už nepýta na všetko naraz — výpis berie obmedzený počet ponúk s krátkou históriou, detail si plnú históriu doťahuje sám a dáta sa počas jedného zobrazenia načítajú raz namiesto trikrát.

v0.33.0

2026-08-08

Úvodná stránka už neopisuje, čo robíme — rovno to ukazuje. Hneď pod nadpisom sú tri najvýhodnejšie ponuky zoradené podľa toho, ako sú pod cenou svojich rovesníkov. A každý zdieľaný odkaz má konečne obrázok: doteraz mali peknú kartu len detaily áut, takže odkaz na úvodnú stránku, model či kraj sa v Messengeri zobrazil ako holý text, na ktorý nikto neklikne.

v0.32.0

2026-08-08

Oprava vecí, ktoré by prvého skutočného návštevníka zradili. Tlačidlo „Otvoriť originál“ konečne otvára pôvodný inzerát — dovtedy len ukázalo hlášku, čo je pri službe postavenej na odkazovaní na portály tá najhoršia možná chyba. Google dostal správnu adresu webu (predtým sme ho posielali na doménu, ktorá ešte neexistuje, takže by nás nezaindexoval). Výpis sa už delí na strany po dvadsiatich a dáta sa načítajú raz namiesto dvakrát — s tisíckami inzerátov by sa inak stránka zadrhla. Pätka priznáva ukážkové dáta len vtedy, keď naozaj ide o ukážku, a výpadok databázy už nezhodí celý web.

v0.31.0

2026-08-08

Posledné dva veľké kusy — pripravené tak, aby ich spustilo len doplnenie prístupov. Reality dostali vlastný zber z RSS Bazošu aj s filtrom, ktorý z divokej rubriky vytriedi skutočné ponuky (chodia tam vedľa seba predaj aj prenájom, dopyty, inzeráty na prácu, testovacie inzeráty aj preklepy typu dom za 300 miliónov). Verdikt pre nehnuteľnosti sa počíta v cene za meter štvorcový voči podobným výmerám, nie z celkovej ceny. Druhý kus sú platby: kompletná integrácia Stripe vrátane overovania podpisu, dokladov e-mailom a skutočného odomykania obsahu podľa zaplateného prístupu — bez kľúčov sa ticho vypne a web funguje ďalej. Pribudli aj návrhy obchodných podmienok a ochrany osobných údajov.

v0.30.0

2026-08-08

Dve veci, ktoré nás majú rozšíriť samy. Prvá: verdikt sa dá vložiť do cudzieho webu alebo fóra — pri každom inzeráte je pripravený kód, ktorý zobrazí našu kartu s cenou, verdiktom a odkazom na celý rozbor. Druhá: verejný report Stav trhu s jazdenkami — najčastejšie inzerované modely s mediánmi, podiel dieselov a automatov, kde sa najviac predáva a koľko ponúk je pod trhom. Vzniká automaticky z našich dát a je napísaný tak, aby sa dal citovať aj s metodikou. Na detaile pribudlo aj srdiečko pre obľúbené.

v0.29.0

2026-08-08

Nový zdroj dát: oficiálny RSS kanál Bazošu. Je to čistejšia cesta než čítanie stránok — portál ho sám ponúka, je ľahký a nemení sa s dizajnom webu. Keďže rubrika Auto mieša autá s diskami, pneumatikami a nárazníkmi, pribudol filter, ktorý pustí ďalej len vozidlá (inak by medián ceny Octavie ťahal dole blatník za sto eur). Na detaile pribudol graf vývoja ceny — klesajúca krivka je najsilnejší argument pri vyjednávaní. A párovanie toho istého auta naprieč portálmi teraz znesie zaokrúhlený nájazd (157 843 verzus 158 000 km), no zároveň porovnáva aj model, aby sa nespárovala Octavia s Passatom.

v0.28.0

2026-08-08

Porovnávač ponúk: pri kartách označíš dve alebo tri autá a uvidíš ich vedľa seba — cena, verdikt, rok, nájazd, s vyznačením lepšej hodnoty v každom riadku. Neodporúčame najlacnejšie, ale najlepší pomer k trhu, a upozorníme, keď sa kusy výrazne líšia vekom či nájazdom. Odkaz na porovnanie sa dá poslať kamošovi. Pribudli krajové stránky (Autá v Žilinskom kraji…) s vlastnými štatistikami a prepojením na modely — ľudia hľadajú auto v okolí, nie cez celé Slovensko. Na mobile sú podrobné filtre zbalené, aby boli výsledky hneď vidno.

v0.27.0

2026-08-08

Hlavný admin — riadiaci pult celého systému. Deväť sekcií v bočnom menu: dashboard so živými číslami (zber, ľudia, tržby, kvalita rozpoznávania), inzeráty, číselník, zdroje a worker, používatelia, platby, psy, e-maily a systém. Najdôležitejšia novinka: nový model vieme doplniť priamo z admina a rozpoznávanie ho začne používať do pol minúty — bez programátora a bez nasadenia. Pribudli prepínače funkcií (zapnúť zdroj, otvoriť reality, spustiť platby), audit každej admin akcie a export platieb do CSV pre účtovníka. 11 nových testov (spolu 169).

v0.26.0

2026-08-08

Obľúbené ponuky a stráženie zľavy. Klikneš na srdiečko pri ktorejkoľvek ponuke — funguje aj bez prihlásenia a po prihlásení sa uložené ponuky prenesú do účtu. Keď obľúbená ponuka zlacnie, príde ti e-mail s presnou sumou poklesu (drobné zmeny neriešime, aby sme neotravovali). Klientská zóna má teraz štyri sekcie: prehľad, obľúbené, moje verdikty (kúpené overenia ostávajú natrvalo, aj keď inzerát zmizne) a nastavenia, kde si vieš účet aj vymazať jedným tlačidlom.

v0.25.0

2026-08-08

Fáza 1 spustená — appka má účty. Prihlásenie je bez hesla: napíšeš e-mail, príde ti odkaz a si vnútri (platí 15 minút, použije sa raz). Vznikla klientská zóna Môj tindo s prehľadom vakov, ich zostávajúcimi dňami a stavom predplatného. Žiadne heslá neukladáme a prihlasovacie odkazy sú v databáze len ako odtlačok — aj keby ju niekto ukradol, nedostane sa nikam. Bez databázy funguje zóna na ukážkovom účte, takže sa dá preklikať hneď. 13 nových bezpečnostných testov (spolu 150).

v0.24.0

2026-08-08

Nová stránka Over ponuku — srdce produktu „Jeden verdikt za 2,90 €“: vlož link na inzerát z Bazošu či Autobazaru (alebo vypíš údaje ručne) a dostaneš verdikt z kohorty rovesníkov, medián trhu, koľko je lacnejších kusov a naše najvýhodnejšie alternatívy. Údaje si zo stránky vytiahneme sami (rok, km, palivo, cena — kalibrované na skutočné texty portálov), cudzie weby z bezpečnostných dôvodov nečítame. Odkazy z hlavičky aj z úvodnej stránky.

v0.23.0

2026-08-08

Číselník narástol na celý reálny trh: ~75 značiek áut aj motoriek (podľa skutočných kategórií a nadpisov na Bazoši, vrátane noviniek ako Cupra, Tesla, BYD či MG) a ~230 modelov na domýšľanie značky. K tomu normalizácia typov: BMW 318d/320d/330d sa stretnú v jednej skupine „rad 3“, Mercedes C220d/C180 v triede C. Vychytané pasce z reálnych inzerátov: zlepená značka (BMW1200GS), Peugeot 2008 verzus rok 2008, jednotky (103kw, 188tis km) a pomlčkové ozdoby nadpisov. 14 nových testov beží na skutočných nadpisoch stiahnutých z Bazošu.

v0.22.0

2026-08-08

Verdikt teraz porovnáva rovesníkov, nie celý model naraz — Octavia má plno ročníkov a motorov, tak sa cena meria voči kohorte: rovnaký model, rok ±2 a rovnaké palivo (pri málo dátach sa záber rozšíri a verdikt to prizná; pri 2 kusoch sa radšej nevydá žiadny). Na detaile verdikt píše, s čím presne porovnával. Modelové stránky ukazujú ceny po generáciách (Octavia III 2012–2019 vs. IV od 2019) — tabuľky generácií máme pre top modely a dopĺňajú sa jedným riadkom.

v0.21.0

2026-08-08

SEO stránky modelov: každý model má vlastnú adresu (napr. /auta/model/skoda-octavia) s ponukami od najvýhodnejších, mediánom ceny a rozpätím — presne to, čo ľudia hľadajú v Google („škoda octavia cena“). Na výpise pribudli čipy populárnych modelov a modelové stránky sú v sitemap. V admine pribudla fronta Číselník: inzeráty bez rozpoznanej značky zoskupené s počtami, aby sme číselník dopĺňali podľa reálneho trhu (sľub z v0.15.0 splnený).

v0.20.0

2026-08-08

Názov značky je teraz na jednom mieste (lib/brand.ts). Keď sa budúci týždeň rozhodneme názov zmeniť, prepíše sa jeden riadok a premení sa všade naraz — v hlavičke, pätke, e-mailoch, zdieľacích kartách aj v title stránok. Žiadne hľadanie po 36 súboroch.

v0.19.0

2026-08-08

Doladený obrázok zdieľacej karty — slovenská diakritika (č, š, ž, ľ) sa teraz vykresľuje jednotne. Detail navonok, ale je to najviac zdieľaná vec, tak nech je bez chybičky.

v0.18.0

2026-08-08

Na detaile inzerátu pribudli Podobné ponuky — iné kusy toho istého modelu, zoradené od najvýhodnejších. Kupec hneď vidí alternatívy a či je jeho vybraný kus dobrý deal. Využíva číselník modelov, takže spája aj rôzne zápisy toho istého auta.

v0.17.0

2026-08-08

Príprava na skutočnú databázu: len čo pripojíme Postgres, tabuľky sa vytvoria samy pri nasadení a web sa prepne z ukážkových dát na reálne. Poistka, aby stránka nikdy nevyzerala prázdna. Bez databázy funguje appka ďalej ako demo.

v0.16.0

2026-08-08

Presnejšie filtre: pri autách a motorkách sa dá teraz filtrovať aj podľa paliva (Diesel, Benzín, LPG, hybrid, elektro) a pri autách podľa prevodovky (automat/manuál). Funguje spolu s textovým hľadaním aj ostatnými filtrami.

v0.15.0

2026-08-08

Domyslenie značky z modelu: keď predajca napíše len „Octavia II“ bez značky, appka si sama doplní, že ide o Škodu, a inzerát správne zaradí k ostatným Octaviám (rovnaký verdikt, rovnaká skupina). Text predajcu nemeníme — obohacujeme len naše dáta. Inzeráty nikdy nevynechávame; tie, ktoré sa nedajú rozpoznať, ostanú vo výsledkoch a pôjdu do admin fronty na doladenie číselníka.

v0.14.0

2026-08-08

Základ špičkového vyhľadávača: číselník značiek a modelov, ktorý rozpozná to isté auto v rôznych zápisoch (Škoda Octavia = OCTAVIA 3 = octavia rs). Vďaka nemu sa férovosť ceny teraz počíta voči rovnakému modelu, nie cez celý trh — verdikt je presnejší. Pribudlo aj textové hľadanie v názve (diakritika nerozhoduje). Spolu 88 automatických testov.

v0.13.0

2026-08-08

Branded obrázok verdiktu do zdieľania: keď niekto pošle odkaz na auto alebo motorku, v náhľade (Messenger, FB, Telegram) sa ukáže pekná karta tindo.sk s názvom, cenou a farebným verdiktom (napr. −15 % pod trhom). Presne tá vec, ktorá láka na klik a šíri sa sama. Font s plnou slovenskou diakritikou.

v0.12.0

2026-08-08

Zdieľanie — prvá virálna páka: tlačidlo Zdieľať pri každom hľadaní (pošle filter kamošovi jedným klikom) aj pri každom inzeráte. Na mobile sa otvorí natívne zdieľanie, na počítači sa odkaz skopíruje. Zdieľané odkazy majú aj pekný náhľad (názov, cena, parametre) v Messengeri či na Facebooku. Ďalší krok: branded obrázok verdiktu do náhľadu.

v0.11.0

2026-08-08

Zber motoriek z Bazošu (motocykle.bazos.sk) — a opäť len konfigurácia: motorky majú overene identický markup ako autá, takže je to ten istý parser s iným hostom, žiadny nový kód. Beží ako druhý cron. Reálne moto dáta odhalili skratku nájazdu ('28tis km'), ktorú teraz spracujeme. Motorky sú tým kompletné end-to-end: vlastná stránka, verdikt, detekcia aj vlastný zdroj dát. 5 nových testov proti zamrazenému reálnemu HTML (spolu 79).

v0.10.0

2026-08-08

Pribudli motorky ako tretia vertikála — a hlavne: pridanie bola LEN konfigurácia, žiadna zmena jadra. To je dôkaz, že aj reality (a neskôr elektronika) pôjdu za zlomok času. Pri tom sme odstránili skryté vetvenie podľa typu (jediná prekladová mapa) a výpis aj detail sú teraz jedna zdieľaná stránka pre všetky vertikály. 6 nových testov konfigurovateľnosti (spolu 74), ktoré iterujú všetky vertikály a strážia, že jadro nikdy nevetví podľa typu.

v0.9.0

2026-08-08

Verdikt engine v2 — tri kľúčové ochrany kupca ako čistá matematika (žiadna AI): detekcia stočených kilometrov z nášho archívu (ak inzerát niekedy uvádzal vyšší nájazd), párovanie toho istého kusu naprieč portálmi so zobrazením najnižšej ceny, a odhalenie neregistrovaného bazára vydávajúceho sa za súkromníka. Worker teraz archivuje snímku aj pri zmene nájazdu, takže stáčanie km zachytí sám. 11 nových testov (spolu 68).

v0.8.0

2026-08-08

Scraper overený proti DNEŠNÉMU reálnemu HTML portálov (cez prehliadač). Bazoš: selektory sedia, doladené parsovanie kalibrované na skutočné dáta — nezalomiteľné medzery v cenách/km, mesto oddelené od PSČ, rok chránený pred zámenou s km a dátumom, k tomu palivo a prevodovka. Autobazar.EU preskúmaný: je klient-renderovaný s utility triedami, parser prepísaný na kotvenie cez odkaz na detail; zistené, že plný zber bude potrebovať ich JSON API (zostáva vypnutý). Pridaných 22 nových testov vrátane parsera proti zamrazeným reálnym inzerátom.

v0.7.0

2026-08-08

Brandované e-maily vak: notifikácia novej ponuky, uvítací e-mail po aktivácii a potvrdenie waitlistu — s náhľadom v admine (E-maily) a testami vrátane ochrany pred škodlivým HTML v nadpisoch inzerátov. Nové stránky: Ako funguje verdikt (čo vie a čo zámerne netvrdí), Časté otázky s dátami pre Google a Cenník s vysvetlením loveckej sezóny. Footer navigácia a sitemap rozšírené.

v0.6.0

2026-08-08

SEO základ: verejná stránka Štatistiky trhu (medián, rozloženie cien, podiel ponúk pod trhom — počítané z našich dát), robots.txt, structured data pre Google (zoznam aj detail) a canonical URL. K tomu 13 nových testov (filtre, parser proti vzorke HTML), stránka Novinky s týmto changelogom, krajšie načítavanie, slovenská 404 a chybová stránka, favicon.

v0.5.0

2026-08-08

Testy verdikt enginu (17 testov, bežia aj v pub.bat pred každým deployom). Worker prerobený na engine + parser-ako-konfigurácia: nový zdroj = jeden súbor. Pridaný druhý zdroj Autobazar.EU v suchom režime (vypnutý, zapína sa env premennou po overení selektorov cez ?dump=1). Admin má novú kartu Psy: uložené hľadania, waitlist a notifikačná fronta naživo z DB.

v0.4.0

2026-08-08

Skutočný verdikt engine v1: inzeráty zo scrapera dostávajú cenový verdikt vypočítaný z reálneho mediánu trhu v databáze (žiadna AI, čisté čísla), históriu zliav zo snímok a TOP poradie výhodnosti. Vak je živý: e-mail + filter sa ukladajú do DB (autá 7-dňový trial, reality waitlist), worker pri novom inzeráte páruje psov a posiela e-maily cez Resend — bez kľúča sa notifikácie radia do fronty a počkajú.

v0.3.0

2026-08-08

Fáza 1 štart: worker na zber Bazošu beží priamo v appke — Vercel Cron ho spúšťa každých 10 minút (/api/worker/bazos, chránené CRON_SECRET), nové inzeráty ukladá do Postgresu a pri zmene ceny zapisuje snímku do histórie. Admin vie inzeráty ručne pridávať a mazať (soft delete — archív ostáva). V demo režime bez DB je worker aj CRUD vypnutý a povie to.

v0.2.0

2026-08-08

Admin na /admin: prihlásenie heslom (ADMIN_HESLO vo Vercel, demo heslo tindo123), dashboard s KPI a prepínačom vertikál, tabuľky zdrojov, platieb, psov a partnerov (zatiaľ ukážkové čísla), výpis všetkých inzerátov. Pripravená databázová vrstva: Prisma + migrácia + seed — po vložení DATABASE_URL sa appka sama prepne z demo dát na Neon Postgres, stránky sa nemenia.

v0.1.0

2026-08-08

Prvý deploy tindo.sk. Landing s výberom vertikály, výpis áut s filtrami (cena, rok, km) a rozmazaným verdiktom pre neplatiacich, detail inzerátu s plným verdiktom (cenová analýza, história ceny, kontrola km, karta modelu, otázky pre predajcu), reality ako ukážka s waitlistom. Beží v demo režime na ukážkových dátach — bez databázy; prepnutie na Neon Postgres je pripravené v prisma/.

Novinky — glokan