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.

6,2%
A — 869 produktai
16,6%
B — 2 325 produktai
26,8%
C — 3 753 produktai
32,7%
D — 4 579 produktai
17,7%
E — 2 487 produktai

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:

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ų:

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
0
tikrų saugumo incidentų
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ą
13,5 mln
įrašų po valymo
~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ę

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.

13
veikiantys ekranai
21/21
techninių patikrų praeita (expo-doctor)
9 MB
maks. kvito nuotraukos dydis
±7 d.
palyginimo langas kainoms

Kas veikia programėlėje

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
13
tinklai palyginimui
real-time
kainų įspėjimai
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.

13
prekybos tinklai (LT)
2 463
parduotuvės (LT)
~90k
aktyvūs produktai (LT)
13,5 mln
aktyvūs kainų įrašai

Kas jau veikia

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

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
4
smulkūs tinklai pridėti
36
produktų kategorijų puslapiai AI
kasdien
kainų atsinaujinimas