Statybų dienoraštis
Kaip kuriame PRICELIO
Atvirai apie tai, ką jau padarėme, kiek, ir su kokiomis kliūtimis grumiamės. Tai ne marketingas — tiesiog užrašome, kaip iš tikrųjų statomas sąžiningų maisto kainų žemėlapis.
2026-07-26
Klaida ištaisyta
Mobilioji versija
Saugumas
Viena parduotuvė Panevėžyje 94% laiko „laimėdavo" prieš visą Lietuvą — ir kitos šios savaitės istorijos
Ši savaitė buvo iš tų, kai pradedi tikrinti vieną dalyką, o randi tris kitus, apie kuriuos net negalvojai. Keturios istorijos — nuo linksmos duomenų keistenybės iki to, kas kasdien vyksta bet kurio viešo serverio „užnugaryje", apie ką dauguma vartotojų niekada negalvoja.
94% laimėjimų — viena parduotuvė, viename mieste
Mūsų pagrindiniame puslapyje buvo blokas „šiandienos geriausia kaina" — vienas produktas, viena parduotuvė, kaip vitrina visai Lietuvai. Pažiūrėję į duomenis atidžiau, pastebėjome keistą dalyką: tą patį, mažai kam girdėtą tinklą — tiksliau, vieną vienintelę jo parduotuvę Panevėžyje — vitrina rodydavo kaip „laimėtoją" beveik visada: 912 kartų iš 967 galimų produktų palyginimų.
Pirma mintis — klaida duomenyse. Patikrinome rankiniu būdu: bulvės ten tikrai kainavo apie 1 € už kilogramą, obuoliai — apie 1,30 €. Kainos tikros, ne klaidingai nuskaitytos. Tiesiog ta viena parduotuvė realiai turi labai žemas kainas. Problema kita: vitrinos, skirtos visai Lietuvai, prasmė dingsta, kai 99 iš 100 žmonių, kurie ją mato, fiziškai negali ten nuvažiuoti nusipirkti. Tai tas pats, kaip skelbti „geriausias restoranas mieste", jei jis įsikūręs kitame mieste už 200 km.
Sprendimas paprastas: pridėjome taisyklę, kad šiam vienam, visai Lietuvai skirtam blokui rodomi tik tinklai, turintys bent kelias parduotuves. Paprastoje paieškoje ta Panevėžio parduotuvė niekur nedingo — jei kažkas ieško konkrečiai jos kainų, jas tebematys. Tiesiog pirmas įspūdis dabar rodo kažką, ką realiai galima nueiti ir nusipirkti, o ne statistinį kuriozą.
Kodėl matome, kad Graikija mus atranda geriau nei Lietuva
Peržiūrėjome, kaip žmonės mus randa per Google per pastarąsias 13 savaičių. Rezultatas: paieškos parodymų skaičius augo nuo ~50 per savaitę iki beveik 2 800 per savaitę — apie 50 kartų. Bet nustebino kitkas: Graikijos versija (pricelio.app/gr) rodoma Google paieškoje geriau nei lietuviškoji, nors Graikijoje realiai veikiame tik su vienu tinklu (pilotinis etapas), o Lietuvoje — su 13. Tikslaus atsakymo, kodėl taip, dar neturime — greičiausiai skiriasi konkurencija paieškos rezultatuose tarp šalių. Bet tai rodo, kad turime realų, dar neišnaudotą potencialą Graikijoje, jei kada nuspręsime ten plėstis rimčiau.
Telefone paieškos laukelis kartais tiesiog „iškrisdavo" už ekrano
Atsidarę kategorijų puslapį telefone, kai kurie iš jūsų būtumėte pamatę, kad viršuje esantis paieškos laukelis netelpa į ekraną — tekstas apkarpytas, mygtukas kažkur už matomos srities ribos. Priežastis buvo viena trūkstama CSS eilutė, bet efektas buvo realus: vietoj pilno „Ieškoti..." matei tik pusę žodžio. Ištaisėme ir patikrinome ne teoriškai, o realiu telefono ekrano dydžiu naršyklėje. Taip pat pašalinome ilgoką įžangos animaciją, kuri kiekvienam naujam apsilankymui kelias sekundes neleisdavo pasiekti jokio turinio — gražu pirmą kartą, erzina kiekvieną kitą.
Kas realiai vyksta „už kulisų": robotai, kurie tikrina KIEKVIENĄ svetainę internete
Kiekviena viešai pasiekiama svetainė internete (ne tik mūsų) nuolat gauna automatinių, robotų vykdomų užklausų, kurios bando atspėti, ar ten „paliktos atrakintos durys". Konkrečiai — šie robotai bando atsisiųsti failus, kuriuose KARTAIS (per neatsargumą) būna paliktos slaptažodžių ar prisijungimo informacijos kopijos: pavyzdžiui, failą pavadinimu .env (kuriame paprastai saugomi serverio slaptažodžiai), arba seną duomenų bazės atsarginės kopijos failą, kurį kas nors užmiršo ištrinti. Jei toks failas TIKRAI būtų viešai pasiekiamas, radęs jį robotas galėtų sužinoti prisijungimo duomenis prie mūsų sistemų.
Tai NĖRA ataka konkrečiai prieš PRICELIO — tokie robotai vienu metu „beldžiasi" į milijonus svetainių visame pasaulyje, ieškodami bet ko, kas palikta neuždaryta. Mes patikrinome dešimtis skirtingų adresų: ar tokie failai pas mus pasiekiami. Atsakymas — ne, viskas užrakinta, kaip ir turi būti. Bet pasinaudojome proga patobulinti savo automatinę stebėjimo sistemą: anksčiau ji pastebėdavo tik tuos robotus, kurie bombarduoja svetainę labai dažnai per trumpą laiką. Dabar ji taip pat iškart atpažįsta ir tuos, kurie veikia lėtai bei kantriai, tikslingai ieškodami būtent tokio tipo failų — tokie anksčiau galėjo likti nepastebėti savaitėmis.
Trumpai: nieko blogo neatsitiko, niekas nebuvo pasiekęs jokių duomenų — tiesiog panaudojome progą apsauga padaryti aiškesnę ir greitesnę.
Kaip visada — jei pastebėjote ką nors, kas atrodo neteisingai ar pasenę, parašykite mums (žr. kontaktus apačioje). Šis dienoraštis egzistuoja būtent tam, kad būtume atsakingi patys sau.
2026-07-25
Klaida ištaisyta
Nauja funkcija
Infrastruktūra
26 657 produktai tyliai „dingo" iš paieškos — ir kaip juos susigrąžinome
Ši savaitė buvo didelio „pavasarinio tvarkymo" savaitė — atidžiai peržiūrėjome duomenų bazę ir paiešką, ir radome kelis dalykus, kurie tikrai nustebino net mus pačius.
26 657 tikri produktai buvo tapę „nematomi"
Radome techninę klaidą, dėl kurios dalis produktų, kurių kainos realiai buvo atnaujinamos kasdien, paieškoje pradėjo atrodyti kaip pasenę — ir dėl to tyliai išnyko iš rezultatų, nors patys duomenys buvo geri. Priežastis — vienas laukelis duomenų bazėje, kuris turėjo atsinaujinti kartu su kaina, bet to nedarė. Ištaisius šią klaidą, 26 657 produktai iškart grįžo į paiešką. Tai nebuvo nauji produktai — jie visą laiką ten buvo, tiesiog nematomi.
„Vaiduokliai" duomenų bazėje: 28 000+ produktų be jokios kainos
Priešinga problema — radome kitą techninę klaidą, dėl kurios kartais būdavo sukuriamas produkto įrašas be JOKIOS realios kainos prie jo (tarsi kortelė be turinio). Per laiką tokių susikaupė daugiau nei 28 000. Jie niekam nekenkė (nebuvo rodomi vartotojams), bet užėmė vietą ir darė duomenų bazę netvarkingesnę, nei turėtų būti. Ištaisyta ir išvalyta.
Paieška: nuo beveik 7 sekundžių iki 8 milisekundžių
Vienas konkretus paieškos užklausos tipas užtrukdavo apie 6,7 sekundės — pakankamai ilgai, kad būtų jaučiama. Pridėjus tinkamą duomenų bazės indeksą (techninis sprendimas, leidžiantis duomenų bazei „žinoti iš anksto", kur ieškoti, o ne tikrinti kiekvieną įrašą po vieną), tas pats užklausimas dabar užtrunka 8 milisekundes — apie 800 kartų greičiau.
Naujas būdas naršyti kategorijas — vizualiai
Senoji kategorijų sistema buvo susidėjusi iš dviejų nesusijusių, dubliuotų sąrašų, kurie realiai niekada nebuvo susieti su tikrais produktais duomenų bazėje. Sukūrėme naują, nuo nulio: 35 pagrindinės kategorijos su beveik tūkstančiu subkategorijų — iš jų 784 šiuo metu turi bent po vieną realų produktą ir yra matomos naršant (likusios liks tuščios tol, kol scraperiai atras joms tinkamų prekių — sistema jas automatiškai paslepia, kol taip neatsitiks). Puslapyje /kategorijos dabar galite naršyti vizualiai — paspaudus kategoriją, atsiveria jos subkategorijos kaip interaktyvus medis.
Rasta parašyta, bet niekada nepaleista
Peržiūrėdami senesnį kodą, radome pilnai parašytą Norfa lankstinukų nuskaitymo įrankį, kuris techniškai veikė, bet niekada nebuvo įjungtas automatiniam kasdieniam paleidimui — tiesiog užmirštas. Patikrinome, kad veikia teisingai, ir įjungėme.
Kaip visada — jei pastebėjote ką nors, kas atrodo neteisingai ar pasenę, parašykite mums (žr. kontaktus apačioje). Šis dienoraštis egzistuoja būtent tam, kad būtume atsakingi patys sau.
2026-07-21
PetrAItis
Duomenys
AI matomumas
PetrAItis paleistas, pasenusios kainos išvalytos, ir kodėl dabar AI asistentai gali tiksliau atsakyti apie PRICELIO
Dvi savaitės be įrašo — bet ne todėl, kad nieko nevyko. Trys dalykai, kuriuos verta papasakoti.
PetrAItis — pirmas AI asistento prototipas svetainėje
Paleidome PetrAItis — testinį AI apsipirkimo asistentą svetainėje. Paklausk jo apie kainas ar prekes, ir jis atsako remdamasis mūsų realia, gyva kainų duomenų baze — ne bendromis AI žiniomis. Tai siauras v1 (be balso, be atminties tarp pokalbių, be receptų planavimo) — tiesiog norėjome patikrinti, ar toks pokalbio formatas apskritai naudingas, prieš statant ką nors didesnio.
Pasenusios kainos, kurios atrodė kaip aktualios — ištaisyta
Radome, kad dalis mūsų rodomų „dabartinių" kainų iš tikrųjų buvo kelių mėnesių senumo — kai kurių tinklų pasiūlymai iš kovo–balandžio vis dar buvo žymimi kaip galiojantys, nes niekas jų formaliai neuždarė. Pridėjome amžiaus filtrą (įprastoms kainoms — iki 21 dienos, lankstinukų akcijoms — iki 45 dienų), tad dabar rodoma tik tikrai šviežia informacija, o ne tylūs „zombiai" duomenų bazėje. Katalogo rodomas dydis dėl to sumažėjo — tai sąžiningumo, ne regreso, ženklas.
AI paieškos asistentai (ChatGPT, Perplexity, Gemini) dabar gauna tikslesnę informaciją
Vis daugiau žmonių klausia kainų klausimų tiesiai AI asistentų, ne Google paieškoje. Patikrinome, ką šie asistentai iš tikrųjų „žino" apie PRICELIO — ir radome, kad jie naudojo pasenusius skaičius (senesnį tinklų skaičių, senesnį produktų kiekį). Atnaujinome mašinoms skirtą informaciją (llms.txt, structured data/schema.org žymėjimą) tikrais, šviežiais skaičiais, kad kai kas nors paklausia AI asistento apie pigiausią pieną Lietuvoje, jis gautų teisingą, ne pasenusį atsakymą.
Kaip visada — jei pastebėjote ką nors, kas atrodo neteisingai ar pasenę, parašykite mums (žr. kontaktus apačioje). Šis dienoraštis egzistuoja būtent tam, kad būtume atsakingi patys sau.
2026-07-08
Duomenys
Ką atskleidžia mūsų duomenys: Nutri-Score lentynose ir ta pati Coca-Cola už skirtingą kainą
Kartkartėmis šiame dienoraštyje rašome apie tai, ką sutvarkėme. Šįkart — apie tai, ką patys pastebėjome, žiūrėdami į savo duomenų bazę. Nieko techninio, tiesiog du dalykai, kurie mums patiems pasirodė įdomūs.
Nutri-Score: dauguma lietuviškų prekių — C arba D
Įvertinome Nutri-Score (europinę maisto sveikumo žymą A–E) 14 013 produktams, kuriems turime pakankamai mitybos informacijos. Rezultatas — nelabai glostantis vaizdas: tik kas šešioliktas produktas gauna aukščiausią A įvertinimą, o dauguma sutelkta ties C ir D.
Tai nereiškia, kad Lietuvoje nėra ką sveikai valgyti — reiškia, kad parduotuvių lentynose apdorotų, aukštos D/E žymos produktų (saldainiai, gazuoti gėrimai, greito paruošimo užkandžiai ir pan.) tiesiog fiziškai daugiau nei šviežių, mažai apdorotų prekių, o Nutri-Score skaičiuojamas būtent apdorotiems produktams su etikete. Ateityje planuojame filtrą „rodyti tik A/B" pagrindinėje paieškoje.
Ta pati Coca-Cola, 5 tinklai, iki 19% kainų skirtumas
Vienas iš mūsų automatinio produktų sulyginimo (match_key) privalumų — galime tiesiogiai palyginti identišką prekę tarp tinklų, ne tik pagal kategoriją. Coca-Cola 1,5 l šiandien — geras pavyzdys:
- Express Market — 2,15 € (pigiausia)
- Intermarket — 2,39 €
- Maxima — 2,49 €
- Rimi ir Iki — 2,55 € (brangiausia)
19% skirtumas už identišką butelį tos pačios gazuoto gėrimo — nedaug, bet parodo, kodėl apsipirkimo įprotis „visada tas pats tinklas" ne visada atsiperka net paprasčiausiems produktams, ne tik akcijoms.
Kaip visada — šie skaičiai iš mūsų gyvos duomenų bazės tą dieną, kai rašėme įrašą (2026-07-08), o ne iš atrankinės apklausos ar reklamos. Produktų sulyginimo (match_key) sistema šiuo metu teisingai sujungia ~60% produktų tarp tinklų — likusiems tikslesnį sulyginimą dar tobuliname (žr. 2026-06-17 įrašą).
2026-07-07
Nauja funkcijaKlaida ištaisyta
Vaistinių katalogai išaugo kelis kartus, o krepšelis išmoko planuoti maršrutą
Savaitė, per kurią paaiškėjo, kad dalies vaistinių kainas rodėme tik iš mažos katalogo dalies — ir tai ištaisius, produktų skaičius šoktelėjo kartais, ne procentais.
Gintarinė: iš 3 100 produktų į 14 300
Ilgą laiką manėme, kad Gintarinės vaistinės kataloge sekame didžiąją dalį prekių. Nuodugniai patikrinę svetainės kategorijas paaiškėjo, kad realus katalogas yra beveik 5 kartus didesnis, nei rinkome. Perdarėme surinkimą per visas 99 kategorijas ir dabar kasdien atnaujiname 14 315 produktų — be nė vienos klaidos per pilną paleidimą. Papildomai atlikome auditą prieš gyvus svetainės skaičius: nė vienoje kategorijoje nesurinkome daugiau nei svetainė iš tikrųjų rodo, o trūkstami produktai pasirodė esą „Išparduota" būsenos (jų kainų rodyti ir nereikia).
Camelia: paslėpta 85% spraga
Camelia akcijų kataloge yra ~9 400 prekių per 335 puslapius. Mūsų surinkimas sustodavo maždaug ties 52-u puslapiu ir paimdavo tik ~1 450 prekių — t. y. rodėme mažiau nei penktadalį tinklo pasiūlymų. Priežastis buvo per griežta „sustok, jei puslapis atrodo tuščias" logika, kuri suveikdavo per anksti. Pataisius, katalogas išaugo iki 4 149 produktų — beveik triskart daugiau.
Kainų „vaiduokliai" dabar valomi automatiškai kasdien
Birželio pabaigoje rašėme apie milijonus pasenusių kainų įrašų, kuriuos išvalėme rankiniu būdu. Šią savaitę tą pamoką pavertėme sistema: kasdien vidurdienį veikia automatinis valymo procesas, kuris archyvuoja nebeaktualius įrašus pagal aiškias taisykles (pvz., jei tinklas prekės nebeatnaujino per protingą laiką). Pirmasis paleidimas sutvarkė 50 716 įrašų per 18 minučių, netrukdydamas paieškai. Tai reiškia, kad „vaiduokliai" nebesikaupia — švara palaikoma be žmogaus įsikišimo.
Krepšelio optimizatorius: „važiuok į X, sutaupysi Y €"
Iki šiol krepšelio optimizavimas mokėjo palyginti daugiausiai dvi parduotuves. Dabar sistema sudaro pirkinių planą per kelias parduotuves (iki 3–4), įvertindama realius atstumus nuo jūsų vietos ir trumpiausią žiedinį maršrutą namai → parduotuvės → namai. Svarbiausia — pridėjome sveiko proto slenkstį: papildoma parduotuvė siūloma tik tada, kai grynasis sutaupymas (jau atskaičius kelionės kaštus) yra pakankamas. Sistema nesiūlys važiuoti 15 km dėl 50 centų. Atsakymo laikas — mažiau nei ketvirtis sekundės, koordinates turi 3 176 iš 3 202 parduotuvių.
×4,6
Gintarinės katalogas (3,1k → 14,3k)
×2,9
Camelia katalogas (1,4k → 4,1k)
50 716
įrašų sutvarkė pirmas auto-valymas
≤4
parduotuvės viename pirkinių plane
2026-07-01
Klaida ištaisytaInfrastruktūra
„Pigiausių produktų" puslapiai: atnaujintos kainos ir teisingesnės kategorijos
PRICELIO turi specialius puslapius, skirtus dirbtiniam intelektui — kai kas nors klausia „kur pigiausiai pirkti pieną Lietuvoje?", šie puslapiai pateikia tikslų atsakymą su kainomis iš visų tinklų. Šiandien radome dvi klaidas, kurias nedelsiant ištaisėme.
Problema nr. 1: kainos nebuvo atnaujinamos mėnesį
Kiekvieną dieną 07:30 turėjo veikti automatinis procesas, kuris perskaičiuoja geriausias kainas visose 36 kategorijose. Paaiškėjo, kad nuo birželio 5 d. jis tyliai neveikė — žurnalo failas buvo sukurtas sistemos administratoriaus teisėmis, todėl įprastas procesas negalėjo į jį rašyti ir paprasčiausiai nusitraukdavo. Pasekmė: visų kategorijų kainos buvo mėnesio senumo. Klaidą ištaisėme, proceso teises normalizavome, kainos dabar atnaujintos.
Papildomai pastebėjome antrą, subtilesnę problemą: procesas apdoroja 36 kategorijas paeiliui, kiekvienai užtrukdamas nuo kelių sekundžių iki 10+ minučių — bendra trukmė siekė 2-3 valandas. Penkios paskutinės sąraše esančios kategorijos (sausainiai, saldainiai, druska, grikiai, vynas) niekada nebūdavo pasiektos per vieną paleidimą ir stovėjo neatnaujintos nuo birželio 4 d. Pridėjome dienos rotaciją — kiekvieną dieną procesas pradeda nuo skirtingos vietos sąraše, kad visos kategorijos gautų sąžiningą šansą atsinaujinti.
„Pigiausia" žymė kartais rodė ne patį pigiausią tinklą
Produkto puslapyje ir palyginimo lentelėse „Pigiausia" žymė buvo priskiriama pagal reguliarią kainą (price_value), ignoruojant akcijų ar lojalumo kortelės kainą. Pavyzdys: jei parduotuvė A turėjo reguliarią kainą 0,65€, o parduotuvė B — akcijos kainą 0,39€, sistema vis tiek rodydavo A kaip pigiausią, nes lygino tik reguliarias kainas. Klaida buvo keliose vietose vienu metu — produkto detalių puslapyje, paieškos rezultatuose, brūkšninio kodo paieškoje ir palyginimo lentelėje. Visur perėjome prie efektyvios kainos (akcija → lojalumo kaina → reguliari kaina, pirma rasta), tad dabar „Pigiausia" tikrai reiškia pigiausia.
Problema nr. 2: netinkami produktai kategorijose
Paieška kategorijoms naudoja teksto paiešką pagal pavadinimą. Pasirodė, kad lietuviška morfologija sukuria netikėtų problemų:
- „Alus" — paieška %alus% rasdavo ir mineralinį vandenį (naturalus), ir medicininius indelius (universalus). Pataisėme naudojant žodžio ribų paiešką — dabar randa tik tikrą alų.
- „Kava" — rodė kakavą, oro gaiviklius su kavos aromatu ir grietinėlę kavai. Kakava ≠ kava. Pridėjome išimčių sąrašą.
- „Vištiena" — kategorijoje dominavo greito paruošimo sriubos „vištienos skonio" (39 ct paketėliai). Pagal absoliučią kainą jos „pigiausios", bet tikra vištiena EUR/kg yra pigesnė. Išskyrėme „skonio" produktus iš kategorijos.
- „Morkos" — pirmose vietose buvo morkų sėklų paketėliai (15 ct), ne tikros morkos. Sėklos dabar filtruojamos.
- „Sultys" — sutrumpinimas „sult." produktų pavadinimuose (pvz., instant makaronų sriubos) atitikdavo sultims skirtą paiešką. Ištaisyta.
Apsaugos sistema: klaidingas įspėjimas
Serverio apsaugos sistema (PDS) išsiuntė Telegram žinutę apie neplanuotą sistemos failų pasikeitimą. Išsiaiškinome, kad tai buvo klaidingas įspėjimas — sistema kažkada užfiksavo tuščią etaloną, o kitą kartą palaikė standartinius, operacinės sistemos dalimi esančius failus „naujais". Realaus saugumo incidento nebuvo. Etalonas atnaujintas, apsauga stebi toliau.
36
kategorijos atnaujintos šiandien
~26 d.
tiek senų kainų buvo kainų puslapiuose
5
kategorijos su pataisyta paieška
2026-06-30
Klaida ištaisytaInfrastruktūra
Kainų duomenų valymas: kaip 20 milijonų tapo 13 milijonais
Šią savaitę pastebėjome, kad aktyvių kainų įrašų skaičius neįprastai šoko aukštyn — beveik iki 20 milijonų. Tai buvo klaida, ne augimas. Papasakojame, kas atsitiko ir kaip pataisėme.
Kas nutiko
Kiekvienas kainų įrašas duomenų bazėje turi unikalumo taisyklę: ta pati prekė toje pačioje parduotuvėje su tuo pačiu galiojimo laiku neturėtų būti įrašyta du kartus — ji turėtų atsinaujinti. Tačiau du iš mūsų skraperių (IKI ir Maxima) kiekvieno paleidimo metu keitė datos lauką, kuris yra unikalumo taisyklės dalis. Rezultatas: vietoj atnaujinimo sistema kasdien kūrė naują eilutę. Per keletą mėnesių susikaupė ~6 mln dublikatų IKI ir ~8 mln Maxima.
Paprasčiau: turėjome „vaiduoklius" — senus kainų įrašus, kurie techniškai buvo aktyvūs, bet jau seniai nebeaktualūs.
Kaip pataisėme
Pataisėme kodo klaidą pačiuose skrapuotuvuose — dabar datos laukas nekeičiamas, kai realios datos nežinome. Tada rankiniu būdu išvalėme ~6,5 mln dublikatų iš duomenų bazės. Papildomai sukūrėme naktinį valymo procesą, kuris automatiškai tvarko tokius atvejus ateityje.
19,8 mln
įrašų prieš valymą
~6,3 mln
pašalinta dublikatų
1,00
IKI dublikatų rodiklis (buvo 1,64)
Ką tai reiškia jums
Kainų paieška dabar grąžina švaresnius rezultatus — mažiau senų, nebeaktualių kainų. Tikri aktyvūs įrašai yra ~13,5 mln, o ne 20 mln kaip rodė anksčiau. Skaičius mažesnis, bet patikimesnis.
Pastaba apie statistikas: Postgresql duomenų bazių lentelių eilučių skaičius gali būti netikslus po masinio šalinimo (sistema laiko „vietą" ištrintoms eilutėms). Tikslūs skaičiai atsistato po naktinio optimizavimo proceso.
Kas dar pataisyta šią savaitę
- IKI LastMile scraperis — kartais nutrūkdavo pusiaukelėje per ilgą pirkimų katalogo parsisiuntimą (~14 000 produktų, 74 puslapiai). Padidinome laiko limitą ir pridėjome automatinį pakartojimą.
- Rimi skraperis — kai Rimi serveris grąžina 503 klaidą (laikinas perkrovimas), sistema dabar automatiškai bandys iki 5 kartų su pertrauka, o ne iš karto nustoja.
- Čekių skanavimas — AI modelis, kuris atpažįsta produktus iš čekio nuotraukos, pakeistas iš mažesnio (gpt-4o-mini) į pilnavertį (gpt-4o). Tikimės mažiau išgalvotų produktų ir geresnio teksto atpažinimo.
2026-06-28
Programėlė
Mobiloji programėlė — funkcionalumas paruoštas, testuojame prieš viešą leidimą
Paskutinį mėnesį dirbome prie to, ko labiausiai klausėte: mobiliosios programėlės. Visi 13 ekranų veikia ir jungiasi prie gyvo backend'o, techninė patikra švari. Programėlė dar NĖRA viešai atsisiunčiama (nei Google Play, nei App Store) — kol kas testuojame per Expo Go, prieš keliaujant į parduotuves. Pasidalijame, kas veikia, ir kur dar turime darbo.
21/21
techninių patikrų praeita (expo-doctor)
9 MB
maks. kvito nuotraukos dydis
±7 d.
palyginimo langas kainoms
Kas veikia programėlėje
- Paieška ir kainų palyginimas — ta pati funkcija, kaip svetainėje, bet rankoje. Brūkšninis kodas, produkto pavadinimas, filtras pagal tinklą ar miestą.
- Vieneto kaina — rodome eur/kg, eur/l, eur/vnt., kad skirtingų pakuočių palyginimas būtų sąžiningas. 0,5L butelis „pigesnis" etiketėje nebūtinai pigesnis litru.
- Pirkinių krepšelis su optimizavimu — sudedi, ką reikia nupirkti, ir programėlė suskaičiuoja, kurioje parduotuvėje visas sąrašas kainuos mažiausiai.
- Kvito skenavimas — fotografuoji kvitą, AI atpažįsta prekes, kainas, parduotuvę. Tada patikriname, ar kitoje parduotuvėje buvo pigiau.
- Išlaidų istorija — matote kiek ir kur išleidote per mėnesį, kuriose parduotuvėse perkate dažniausiai.
- Kainų įspėjimai — nustatote ribą, kai kaina krenta — pranešame.
Kodėl kvito skenavimas — tai ne tik buhalterija
Standartiniai išlaidų trackeriai rodo, kiek išleidai. PRICELIO atsako į kitą klausimą: ar galėjai išleisti mažiau? Turime 81 mln realių kainų įrašų iš Lietuvos parduotuvių — tai leidžia pasakyti konkrečiai: „šį mėnesį pieną pirkote Maximoje už 1,09€/l, tuo pat metu Norfa pardavinėjo už 0,89€/l". Ne prognozė, o faktas.
Techninė pastaba: produktų atpažinimas
Sulyginti produktus pagal pavadinimą — sunkiau nei atrodo. „Pienas 3,5% 1L" Maximoje gali vadintis „Naminis pienas 3,5% 1000ml" Norfoje. Šiuo metu teisingai atpažįstame apie 60–70% kvito eilučių. Dirbame prie geresnio sulyginto — ypač kai pavadinimas sutrumpintas arba parduotuvės specifinis.
Statusas (2026-06-28): funkcionalumas paruoštas ir testuojamas tiek Android, tiek iOS Expo Go aplinkoje. Iki viešo Google Play/App Store leidimo dar reikia: oficialaus build'o su pasirašymu, store listing'o (App Store papildomai reikalauja Apple Developer registracijos). Konkrečios datos kol kas neskelbiame — atnaujinsime čia, kai bus.
2026-06-22
InfrastruktūraSaugumas
Kaip apsaugome PRICELIO nuo robotų ir įsilaužėlių
Kai svetainė pradeda gauti tikrą srautą, atsiranda ir neprašyti svečiai — robotai, kurie bando masiškai kopijuoti kainas, ir automatiniai įrankiai, kurie bando įsibrauti į serverį. Šią savaitę sukūrėme dvi apsaugos sistemas ir atlikome serverio saugumo auditą.
Anti-scrapinimo sistema
Vienas iš mūsų duomenų tiekėjų pradėjo siųsti per daug užklausų per trumpą laiką — tai reiškia, kad kažkas bando automatiškai kopijuoti kainų duomenis. Sukūrėme stebėjimo procesą, kuris kas 5 minutes tikrina neįprastą srautą ir automatiškai blokuoja pažeidėjus 24 valandoms per Cloudflare. Apie kiekvieną blokavimą gauname pranešimą Telegram.
Prisijungimo apsauga nuo brute-force
Serverio administravimo prieiga nuolat bandoma įsilaužti automatiniais robotais. Įdiegėme stebėjimo sistemą, kuri seka įtartinus bandymus ir automatiškai blokuoja pažeidėjų IP adresus. Apie kiekvieną blokavimą gauname Telegram žinutę su IP adresu ir bandymų statistika.
Serverio saugumo auditas
Peržiūrėjome visą serverio konfigūraciją ir radome bei pataisėme keletą smulkių spragų. Kritinės sistemos dabar stebimos — bet koks neplanuotas pakeitimas sukelia įspėjimą.
24/7
automatinis stebėjimas
real-time
Telegram įspėjimai apie pažeidėjus
2026-06-17
Funkcija
Kainos tarp tinklų: tas pats produktas skirtingais pavadinimais
Vienas iš sunkiausių uždavinių kainų palyginime — suprasti, kad „Pienas 3,5% 1L" Maximoje ir „Naminis pienas 3,5% 1000ml" Norfoje yra tas pats produktas. Šią savaitę paleisime sistemą, kuri šį uždavinį sprendžia automatiškai.
Produktų sulygos sistema (match_key)
Kiekvienam produktui dabar priskiriamas unikalus „raktas", sudarytas iš prekės ženklo, pakuotės dydžio ir matavimo vieneto. Kai du skirtingų tinklų produktai turi tą patį raktą — sistema juos laiko tuo pačiu produktu. Tai leidžia tiesiogiai palyginti kainas tarp Maximos, Lidl, Iki, Rimi ir kitų tinklų net kai produktų pavadinimai skiriasi.
Šiuo metu teisingai sulyginti apie 60% produktų — ypač gerai veikia pienas, jogurtas, aliejus, ryžiai, makaronai. Sunkiau sekasi su šviežia mėsa ir daržovėmis, kur kiekvienas tinklas naudoja savo pavadinimus.
Kainų įspėjimai
Jei sektinas produktas yra duomenų bazėje ir jo kaina nukrenta žemiau nurodytos ribos bet kuriame tinkle — išsiunčiame įspėjimą. Sistema veikia per produktų sulygos sistemą: jei sekate „Pienas 3,5%", gausite įspėjimą net jei kaina nukrenta skirtingame tinkle nei įsigijote paskutinį kartą. Šiuo metu funkcija pasiekiama tik per mobiliąją programėlę (žr. 2026-06-28 įrašą) — viešoje svetainėje dar neįdiegta.
~60%
produktų sėkmingai sulygyti tarp tinklų
90k+
produktai su unikaliu raktu
2026-06-10
Infrastruktūra
Ką jau turime — ir kur dar sunku
PRICELIO veikia Lietuvoje. Idėja paprasta: surinkti realias maisto kainas iš kuo daugiau parduotuvių ir parodyti, kur pigiausia. Sunkumas — ne idėjoje, o duomenyse. Štai kur šiandien esame.
~90k
aktyvūs produktai (LT)
13,5 mln
aktyvūs kainų įrašai
Kas jau veikia
- Kainų rinkimas iš 13 tinklų — prekybos centrai, vaistinės, lankstinukai. Kainos atsinaujina kasdien.
- Brūkšninių kodų skenavimas ir AI kainų analizė.
- Paieška su vieneto kaina (eur/kg, eur/l), kad palyginimas būtų sąžiningas, o ne pagal pakuotės dydį.
- Kainų įspėjimai — gauni žinutę, kai pasirinktas produktas atpinga.
Su kuo grumiamės atvirai
Maiste beveik nėra brūkšninio kodo (EAN). Tikėjomės sulyginti tą patį produktą tarp tinklų pagal kodą — bet maisto puslapiuose jo paprasčiausiai nėra. Teko susikurti savo „pirštų atspaudą" iš prekės ženklo ir pakuotės dydžio.
Prekės ženklo atpažinimas — vis dar didžiausias darbas. Iš ~90 tūkst. produktų dalis ateina be aiškaus prekės ženklo pavadinime. Taisyklėmis pakėlėme aprėptį iki ~64%, o likusią dalį dabar tvarko AI modelis, kuris ištraukia ženklą tik tada, kai tikrai įsitikinęs.
Apsauga nuo blokavimų. Dalis tinklų nemėgsta automatinio rinkimo. Tenka rinkti pagarbiai — lėtai, su pertraukomis.
Senų kainų valymas. Laikui bėgant susikaupė milijonai pasenusių kainų įrašų. Neseniai išvalėme 6+ mln dublikatų ir įjungėme automatinį tvarkymą.
Kodėl tai rašome: tikime, kad kainų informacija — viešas gėris. O jei kažką statome žmonėms, sąžininga parodyti ir tai, kas dar nebaigta.
Kas toliau
- Mobilioji programėlė (Android jau, iOS — netrukus).
- PetrAItis — AI pagalbininkas, su kuriuo galėsi tartis, ką gaminti, ir kuris padės sudaryti pirkinių sąrašą pigiausiai.
- Tikslesnis produktų sulyginas tarp skirtingų tinklų.
2026-06-05
Duomenys
Vaistinės, smulkūs tinklai ir AI paieška: kas naujo birželio pradžioje
Gegužę sutelkėme pajėgas ties pagrindiniais prekybos centrais. Birželio pradžioje pridėjome vaistines ir smulkesnius tinklus, bei paleisime specialius puslapius, skirtus AI paieškos sistemoms.
Vaistinių kainos
Pridėjome tris vaistinių tinklus: Gintarinę, Eurokapteiką ir Camelią. Tai reiškia, kad higienos prekės, papildai ir nereceptiniai vaistai dabar matomi tame pačiame palyginimo langelyje kaip ir prekybos centrų kainos. Vaistinių duomenys atsinaujina kasdien kaip ir visi kiti.
Smulkesni tinklai
Šilas, Moki Veži, Drogas, Intermarket — mažesni tinklai, kuriuose kartais galima rasti geresnę kainą nei dideliuose. Šie tinklai naudoja skirtingas technologijas (vienas — katalogo PDF'ai, kitas — paveikslėlių galerija), todėl kiekvienas reikalauja individualaus sprendimo. Šilui sukūrėme AI vaizdo atpažinimą, kuris iš produkto nuotraukos ištraukia pavadinimą ir kainą.
Puslapiai AI paieškos sistemoms
Kai kas nors klausia ChatGPT ar Google AI „kur pigiausiai pirkti pieną Lietuvoje?", paprastai gaunamas bendras atsakymas be konkrečių kainų. Sukūrėme specialius puslapius visoms pagrindinėms produktų kategorijoms — pienas, duona, kava, vištiena ir t.t. — su tikromis kainomis iš visų tinklų. Šie puslapiai atsinaujina kasdien ir yra optimizuoti AI sistemų nuskaitymui. Pavyzdys: pricelio.app/lt/pigiausia/pienas.
3
vaistinių tinklai pridėti
36
produktų kategorijų puslapiai AI
kasdien
kainų atsinaujinimas