3 mokėjimo kanalai (kortelė su 3DS, Apple Pay / Google Pay, Baltijos šalių bankų nuorodos per Makecommerce) viename užsakymo sraute
Apklausa pagal šuns svorį, amžių ir aktyvumą sudaro porcijas ir pristatymo grafiką
Serverinis konversijų sekimas: Meta ir Google ir toliau gauna pirkimo signalą po Safari ITP
Vidinis el. pašto ir palikto krepšelio variklis vietoj Klaviyo profilio mokesčio
Prognozuojama mėnesinė serverio sąskaita vietoj Shopify procento ir SaaS prenumeratų sankaupos
Situacija
Iššūkis
Premium šunų maisto prekės ženklui reikėjo tiesioginio pardavimo kanalo Lietuvoje. Kiekvienam šuniui turi būti apskaičiuojamas porcijos dydis, šėrimo dažnis ir prenumeratos grafikas pagal amžių, svorį, kūno tipą ir aktyvumą. Tipinis Shopify plėtinys to nedaro; WooCommerce derinys reikštų šešių–septynių SaaS* prenumeratų krūvą, kuri tarpusavyje nesikalba ir brangsta proporcingai augimui.
Sprendimas
Kaip priėjome
Pradėjome nuo tuščio failo. Viena duomenų bazė, vienas tiesos šaltinis apie užsakymą. Express karkasu pagrįstas back-end su Prisma. Vite + React 18 front-end su rankiniu SSR* ir react-helmet-async*. Trys mokėjimo kanalai po viena būsenos mašina*. BullMQ* eilės palikto krepšelio ir el. pašto grandinėms. Konversijų sekimas iš serverio, ne tik iš naršyklės. Auditas, sutikimai ir administravimas suprogramuoti viduje.
Rezultatas
Kas pasikeitė
Klientas gavo el. parduotuvę, kuri veikia kaip rimto D2C* verslo branduolys: trys mokėjimo būdai viename sraute, pagal apklausą sudaroma prenumerata, vidinis el. pašto variklis, serverinis konversijų sekimas, atlaikantis Safari ITP ir reklamų blokavimą. Jokio SaaS* prenumeratos mokesčio, jokio procento nuo pardavimo.
Naratyvas
Kaip tai sukurta
01 / PRADŽIA
Pradžios taškas
Garrdu atėjo su užduotimi, į kurią šablonai neatsako: kaip parduoti premium šunų maistą kaip prenumeratą, kur kiekvienam šuniui pagal amžių, svorį, kūno tipą ir aktyvumą sudaromas porcijos dydis, šėrimo dažnis ir krepšelis – ir visa tai veiktų vienodai sklandžiai telefone ketvirtą valandą nakties ir biure pirmadienio rytą. Shopify pasaulyje plėtiniais to nepasieksi. Tad nepradėjome nuo temos pasirinkimo – pradėjome nuo tuščio failo.
02 / POZICIJA
Kodėl ne Shopify
Auganti lietuviška parduotuvė anksčiau ar vėliau atsiduria toje pačioje vietoje: platformos mokestis, prenumeratos plėtinys, el. pašto įrankis, palikto krepšelio įrankis, papildomo pardavimo įrankis, atsiliepimų ir lojalumo plėtiniai, apklausų konstruktorius. Kiekvienas po 30–300 € per mėnesį, kiekvienas su atskira duomenų sala ir kiekvienas lūžta, kai gretimas atsinaujina. Garrdu šį etapą peržengė iš karto: visa logika gyvena vienoje sistemoje – viena duomenų bazė, vienas tiesos šaltinis apie užsakymą, klientą ir prenumeratą.
03 / APKLAUSA
Apklausa, atliekanti pardavėjo darbą
Garrdu apklausa per devynis žingsnius surenka informaciją apie šunį ir paverčia ją konkrečiu produktu krepšelyje bei prenumeratos pristatymo grafiku.
Pirmuose penkiuose žingsniuose šeimininkas paspaudimu pasirenka atsakymus, nieko nerašydamas: šuns amžiaus grupė (šuniukai, suaugę, senjorai – nuo 2 mėn. iki 12+ metų), aktyvumo lygis, virškinimo niuansai, išrankumas maistui ir alergijų statusas. Šeštas žingsnis atsiranda tik tada, kai ankstesniame atsakyme įtariamos arba patvirtintos alergijos – šeimininkas pažymi konkrečius baltymus (vištieną, kalakutieną, jautieną, kiaulieną ar elnieną), kurių šuo netoleruoja. Septintame įvedamas svoris kilogramais, aštuntame – šuns vardas, devintame – el. pašto adresas. Pastarieji du paimami tik tada, kai žmogus jau įsitraukęs.
Iš atsakymų deterministinė logika* (be jokio LLM* spėjimo) pagal griežtą prioritetų tvarką – alergijos prieš virškinimo problemas, virškinimas prieš aktyvumą – parenka vieną iš keturių baltymų. Patvirtinta alergija visada uždaro tą baltymą; jei alergijų nėra, dažnos virškinimo problemos veda į elnieną, aukštas aktyvumas su stabiliu virškinimu – į jautieną, o šuo be ypatumų gauna kalakutieną kaip kasdienį pasirinkimą. Pasirinkus baltymą, pagal šuns svorį iš produkto specifinės lentelės tiesine interpoliacija apskaičiuojama paros porcija gramais (pvz., 10 kg šuniui – apie 100 g), iš jos – reikiamų pakuočių skaičius mėnesiui ir pristatymo dažnis.
Apklausos eiga saugoma serveryje, todėl pradėjus pildyti darbo kompiuteryje galima užbaigti telefonu vakare – sesijos susiejamos pagal el. paštą net tada, kai naršyklių slapukai skirtingi. Po atsitiktinio uždarymo atsiveria tas pats klausimas, kuriame žmogus buvo sustojęs. Užbaigus apklausą, produktas atsiduria krepšelyje su jau apskaičiuota porcija ir pristatymo dažniu.
Per pastaruosius dvejus metus naršyklės apkarpė didelę dalį duomenų, kuriais remiasi Shopify tipo parduotuvės. Iš pirmo žvilgsnio atrodo, kad reklamos konvertuoja prasčiau, nors realybėje jos tiesiog nustojo matyti. Garrdu konversijų sekimas vyksta ne tik naršyklėje: pagrindinė įvykių grandinė siunčiama iš serverio per CAPI* – pirkimas, prenumeratos pradžia, apklausos užbaigimas – kiekvienas su unikaliu event ID*, geografiniu kontekstu ir dedublikacija*, kad Meta ir Google tą patį įvykį suskaičiuotų vieną kartą. Šalia veikia kokybės monitorius, pastebintis sugedusį įvykį dar prieš biudžetui pradedant degti.
05 / EL. PAŠTAS
Vidinis variklis vietoj Klaviyo
Patvirtinimo laiškai, palikto krepšelio priminimai, kampanijos, atsisakymo nuorodos, klientų segmentai – suprogramuoti viduje. Eilė, planuoklis, atidarymų ir paspaudimų stebėjimas, vieno paspaudimo atsisakymo srautas, atitinkantis GDPR* reikalavimus be papildomų plėtinių. Klientų bazei augant, sąskaita didėja gerokai lėčiau nei pagal Klaviyo profilio mokestį – proporcinga serverio resursams, ne klientų skaičiui.
06 / GRĮŽIMAS
Palikto krepšelio grandinė
Palikto krepšelio grandinė siunčia tris laiškus: pirmas priminimas po valandos, antras kitą dieną, trečias su produkto santrauka ir nuolaida – bet tik tada, kai logika rodo, kad žmogus dvejoja. Pirkėjui tuo tarpu užbaigus užsakymą arba atsisakius prenumeratos, grandinė nutraukiama. Pasibaigus atstatymo žetonui, jos kelias uždaromas be paskutinio laiško.
06b / PRISTATYMAS
LP Express paštomatai – vidinis sluoksnis
Lietuvos pirkėjas tikisi pasiimti paketą iš artimiausio paštomato. Paruošto LP Express plėtinio rinkoje paprasčiausiai nėra – kiekvienas, kuriam to reikėjo lietuviškoje parduotuvėje, jį statė pats. Garrdu projektui suprogramavome paštomatų pasirinkimo sluoksnį nuo nulio.
Pradedame nuo viso Baltijos regiono: 1 174 terminalai vienoje paieškoje (447 Lietuvoje, 539 Latvijoje, 188 Estijoje). Visi sukrauti į vieną CSV* duomenų šaltinį su koordinatėmis, miestais ir pašto kodais, atnaujinamą tiesiai iš LP Express. Sąrašas grupuojamas pagal miestus, miestai išrikiuojami abėcėlės tvarka, o kiekvieno miesto terminalai – pagal adresą. Net kai viename mieste yra dvidešimt taškų, jie sustoja logišku eiliškumu.
Paieška neapsiriboja paprastu „prasideda raidėmis…“ filtru. Po danga sėdi Fuse.js* variklis su keturiais svertais: miestas, adresas, terminalo pavadinimas ir pašto kodas. Slenkstis nustatytas tarp 0,4 ir 0,5 – pakankamai laisvas, kad įvedus „Vinius“ pirkėjas rastų Vilniaus taškus, o įvedus „Bazanavič“ – Basanavičiaus g. paštomatus, bet pakankamai griežtas, kad rezultatuose neatsirastų atsitiktinio triukšmo.
Sąsaja persijungia pagal pirkėjo įrenginį: telefone ir lietimui jautrioje planšetėje atsidaro pilnaekranis modalas* su didelėmis paspaudimo zonomis, staliniame kompiuteryje – kompaktiškas išskleidimo komponentas šalia kitų formos laukų. Pasirinkto terminalo informacija (pavadinimas, gatvė, miestas, pašto kodas) keliauja į užsakymą, LP Express etiketę ir patvirtinimo el. laišką. Prenumeratos atveju terminalas išsaugomas kitam siuntimui – pakartotiniam užsakymui jo nereikia pasirinkti iš naujo.
LP Express paštomatų pasirinkimas · LT / LV / EE · paieška su klaidų tolerancija
07 / GREITIS
Greitis
Pirmas vaizdas, kurį pamato klientas, paruošiamas serveryje per SSR*, ne kraunamas vėliau per JavaScript. Todėl Google paieškoje iškart matomas Garrdu turinys, o ne tuščias karkasas. Paveikslėliams iš anksto rezervuojama vieta per LQIP užuominas, kad elementai nepasislinktų pirkėjui jau pradėjus paspausti. Hero zonos gradientas piešiamas realiu laiku per WebGL* – ne įkeliamas kaip didelis fonas. Nematomas darbas, bet būtent dėl jo Core Web Vitals* rodikliai Lighthouse* audite šviečia žaliai.
08 / VIDUS
Administravimas ir GDPR pėdsakas
Užkulisiuose veikia vidinis administravimo sluoksnis: užsakymai, kuponai, kampanijos, klientai, prenumeratos ir audito žurnalas, kuriame kiekvienas vidinis veiksmas turi atskirą eilutę. Klientų sutikimai saugomi kaip atskiri įrašai – kada, dėl ko ir su kokios redakcijos privatumo politika sutikta. Jei kada nors ateis užklausa iš Valstybinės duomenų apsaugos inspekcijos, atsakymas užtrunka minutes, ne savaites.
09 / INFRA
Infrastruktūra ir prognozuojama sąskaita
Garrdu sukasi mūsų prižiūrimuose serveriuose: konteineriai per Docker, reverse-proxy* priekyje, sveikatos patikros* ir kelis kartus per savaitę vykstantis diegimas*. Jokio Shopify procento nuo pardavimo, Plus plano spaudimo augant ar plėtinių kainoraščio kėlimo sausį. Mėnesinė sąskaita nepriklauso nuo to, ar parduodate 50 ar 5 000 paketų – tik nuo serverio resursų ribos, ties kuria reikia kilstelėti pajėgumus.
Ekspertizė
Mokėjimai – trys kanalai, vienas srautas
[ Payments + Subscriptions ]
Lietuvoje vienas pirkėjas moka kortele, kitas patvirtina pirštu per Apple ar Google Pay, trečias renkasi banko nuorodą iš savo banko sąrašo. Daugumoje parduotuvių tai trys atskiros sistemos, kurios tarpusavyje nesikalba. Garrdu sistemoje jos suvestos po viena būsenos mašina, kad pinigams keliaujant bet kuriuo iš trijų kelių užsakymas, klientas ir prenumerata atsirastų toje pačioje vietoje.
Mokėjimas kortele
Stripe · 3DS · AVS · saugykla
3D-Secure srautas su atskiru pakartojimo langu
AVS* atmetimo pakartojimas* be naujo kortelės įvedimo
Žinučių iš Stripe (webhook*) dedublikacija per event ID*
Saugykloje laikomas žetonas pakartotiniam pirkimui
Stripe Subscription gyvavimo ciklas susietas su prenumeratos modeliu
Apple Pay / Google Pay
Telefono piniginė · patvirtinimas pirštu
Pasiūloma automatiškai, kai naršyklė ir įrenginys palaiko
Pirkėjas neįveda kortelės – patvirtinimas Face/Touch ID arba PIN
Veikia ir vienkartiniam pirkimui, ir prenumeratos paleidimui
Apmokėjimo srautas trumpesnis – mažiau krepšelių paliekama paskutiniame žingsnyje
Makecommerce
Baltijos šalių bankų nuorodos · LT / LV / EE
Pirkėjas renkasi savo banką iš sąrašo ir patvirtina mokėjimą internetinėje bankininkystėje
Atgalinio kvietimo ciklas suderintas su Stripe būsenomis – ta pati sėkmės šaka
Banko sąrašas filtruojamas pagal pirkėjo šalį (LT / LV / EE)
Galiojimo laiko ribos ir trumpas atstatymo langas išspręsti atskira logika
Sėkmingam apmokėjimui įvykus bet kuriuo kanalu, užsakymas, prenumerata ir klientas atsiduria toje pačioje vietoje. Daugelyje el. parduotuvių vienas iš kanalų prilipdytas šone – Garrdu sistemoje visi trys įausti į pagrindinį srautą.
Krepšelis
Krepšelis su dviem režimais
Toje pačioje sesijoje pirkėjas gali pasirinkti vienkartinį pirkimą arba prenumeratą – tą patį produktą, tame pačiame krepšelyje, tuo pačiu mokėjimo metodu. Daugelyje el. parduotuvių prenumerata gyvena atskiroje šakoje su atskira sąsaja (dažniausiai per išorinį įrankį – ReCharge, Bold ir pan.). Garrdu sistemoje vienas srautas paleidžia du atskirus gyvavimo ciklus iš to paties krepšelio.
[ Cart · One-time vs Subscription ]
Krepšelis · vienkartinis pirkimas ↔ prenumerata · vienas srautas
Vienkartinis pirkimas
Viena kortelė · vienas mokestis · užbaigta
Vienas Stripe PaymentIntent* arba Makecommerce užklausa
Prireikus įsijungia 3DS, AVS arba Apple/Google Pay sluoksnis
Po sėkmės iš karto formuojamas užsakymas, kvitas ir LP Express etiketė
Kortelės duomenys ir webhook’ų laukas neišlieka
Tinka pirmam pirkimui, dovanai, vienkartiniam testui
Prenumerata
Žetonas saugykloje · pasikartojantys mokesčiai · valdoma iš admino
Stripe Subscription* už to paties krepšelio (kortelė arba Apple/Google Pay)
Mokėjimo metodas saugomas Stripe saugykloje, ne pas mus
Pristatymo dažnis (savaitės arba mėnesiai) – iš apklausos arba pakeičiamas rankiniu būdu
Webhook’ai apdoroja atnaujinimą, pauzę, nepavykusį nuskaitymą ir atšaukimą
Klientas mato vieną sąskaitą, vieną siuntą ir vieną dažnio valdymą
Tas pats produktas, tas pats krepšelis, tas pats apmokėjimo langas, bet po jo prasideda dvi skirtingos kelionės. Daugelyje el. parduotuvių prenumerata laikoma atskirai ir su vienkartinio užsakymo logika nesujungta – Garrdu šią ribą peržengia viename objekte.
Pristatymas
LP Express integracija nuo nulio
Partneris · LP Express · Lietuvos paštas · terminalai LT / LV / EE
Pristatymo srautas – ta vieta, kur lietuviškos el. parduotuvės dažnai sulūžta: arba siūloma tik pristatymas į duris, arba paštomatas renkamas iš ilgo, nesurūšiuoto sąrašo. Garrdu projektui pastatėme paštomatų pasirinkimo sluoksnį be paruošto plėtinio – tokio rinkoje paprasčiausiai nėra.
✓Visi LT, LV ir EE terminalai vienoje paieškoje
✓Grupavimas pagal miestus su aiškiai matomomis miestų antraštėmis
✓Paieška su klaidų tolerancija (įvedus „Vinius“ randa „Vilnius pst.“)
✓Kurjerio pristatymas kaip alternatyva tame pačiame žingsnyje
✓Terminalo informacija perduodama į užsakymą, etiketę ir patvirtinimo el. laišką
✓Pakartotinis užsakymas iš prenumeratos: terminalas išsaugomas iš ankstesnio karto
Smulkmena, kurią lietuvis vertina labiau, nei rodo apklausos: paštomatas, kurį telefone galima rasti per kelias sekundes, vietoj puslapio, kurį tenka atversti darbo kompiuteryje.
Paštomatų pasirinkimo modalas · LT / LV / EE
Sąsaja
Mobiliuose telefonuose
Pagrindinis · heroProduktų sąrašasKrepšelio modalasApmokėjimas · mobilus
Technika
Architektūra
Rankiniu būdu sustatytas SSR* ant Vite + React 18. Express back-end su Prisma virš PostgreSQL (apie 30 modelių). Redis + BullMQ* keturioms eilėms (palikto krepšelio atstatymas, transakcinis paštas, rinkodaros kampanijos, el. pašto procesorius). Vidinis autentifikavimo sluoksnis (JWT*, bcrypt*, admin sesijos, audito įvykiai, service API raktai). Diegimas per Docker + Coolify* + nginx + PM2*.
Front-end
Vite · React 18 · rankinis SSR · react-helmet-async
Back-end
Node.js · Express · TypeScript · Zod
DB
PostgreSQL · Prisma (~30 modelių)
Eilės
Redis · BullMQ (4 darbuotojai)
Mokėjimai
Stripe (kortelė + Apple/Google Pay) · Makecommerce (Baltijos šalių bankai)
Sekimas
PostHog (proxied) · Meta CAPI · GeoIP2 · event-ID dedup
Keturi BullMQ darbuotojai* valdo tai, ko klientas nemato: palikto krepšelio atstatymą su atstatymo žetonais, transakcinį paštą, rinkodaros kampanijas ir el. pašto procesorių. Apklausos logika – deterministinė, ne LLM* spėjimas – iš atsakymų suskaičiuoja porciją ir prenumeratos pristatymo dažnį. Sekimo grandinė tarp naršyklės Meta Pixel* ir serverinio CAPI* įvykius dedubliuoja per bendrą event ID*.
Iššūkiai
Ką teko išspręsti
01
Vienas tiesos šaltinis tarp Stripe ir Makecommerce
Du mokėjimų teikėjai, kurių įvykių semantika nesutampa. Stripe siunčia webhook’us pagal pirkimo gyvavimo ciklą, Makecommerce – pagal trumpalaikių banko nuorodų rezultatus. Reikėjo grandinės, kuri suvestų abiejų pusių baigtis į vieną užsakymo ir prenumeratos įrašą be dublikatų.
02
Baltijos šalių bankų nuorodos greta globalaus kanalo
Makecommerce atgalinis kvietimas elgiasi kitaip nei Stripe webhook’as: trumpas galiojimo langas, kitokia pakartojimo logika, kiti laukai. Įausti šį kanalą į tą pačią būsenos mašiną kaip Stripe užtruko ilgiau nei pats vizualas.
03
Įvykių dedublikacija per visą pardavimo kelią
Naršyklės Meta Pixel ir serverinis CAPI turi siųsti tą patį pirkimo įvykį, ne du. Jei event ID, laikas arba kontekstas išsiskiria, Meta optimizuoja į iškreiptą paveikslą. Dedublikaciją parašėme kaip atskirą biblioteką su savais testais, kad ją būtų galima keisti neperžiūrint viso piltuvėlio.
04
Sutikimų laiko žemėlapis
Pixel ir serveriniai įvykiai elgiasi skirtingai pagal sutikimų juostos būseną. Reikėjo tiksliai apibrėžti, kuris įvykis išleidžiamas iki sutikimo (ir kokia forma), o kuris laukia patvirtinimo – kitaip pažeidžiamas GDPR arba prarandama konversija.
05
Palikto krepšelio ribiniai atvejai
Atstatymo žetonas pasibaigia. Klientas užbaigia pirkimą tarp dviejų priminimų. Atsisako prenumeratos vidury grandinės. Kiekvienam scenarijui parašėme aiškų išėjimą, kad gavėjas niekada negautų laiško apie tai, ko jau nebėra.
06
Apklausos sesijos pernešimas tarp įrenginių
Pildymo pradžia kompiuteryje, pabaiga telefone vakare; slapukai skirtingi, bendros sesijos nėra. Be serverinio raktelio, susieto su el. paštu, tai būtų buvęs duomenų praradimas, ne funkcija.
07
Mokėjimo žingsnių derinys po vienu užsakymu
3DS patvirtinimas, AVS pakartojimas, Apple ar Google Pay pasiūlymas, Makecommerce šokis pirmyn–atgal į banką – kiekvienas turi tilpti į savo teikėjo taisykles. Klaidingas žingsnis baigiasi atmetimu, kurį pamatai ne pirkėjo dialoge, o telemetrijoje.
08
Serverio pusėje sukabintas i18n
Lietuvių kalbos meta žymos turi atsidurti serverio sugeneruotame HTML dar prieš pirmą piešinį, o vėlesnė hidratacija negali jų perrašyti. Smulkmena, dėl kurios Google mato Garrdu kaip lietuvišką prekės ženklą, ne angliškų raktažodžių aidą.
09
Diegimo grandinė be staigmenų
Atskiri Dockerfile variantai produkcijai ir testinei aplinkai, skirtingi nginx konfigai, vienas procesų prižiūrėtojas. Visi privalo elgtis identiškai abiejose pusėse – antraip pirkėjo akivaizdoje iškyla klaida, kurios nebuvo nė vienoje testinėje paleidimo versijoje.
Privalumai
Kuo lenkia standartą
01Visa logika viename name
Vietoj šešių–septynių SaaS prenumeratų, kalbančių per webhook’us, čia veikia viena duomenų bazė ir vienas back-end. Kiekviena funkcija mato visą kontekstą.
02Atribucija po Safari ITP
Serverinis sekimas reiškia, kad Meta ir Google pirkimo signalą gauna ir tada, kai naršyklė tyli. Optimizacija nelieka aklame lange.
03Apklausa vietoje žmogaus konsultacijos
Porcija ir pristatymo dažnis sudaromi pagal šuns svorį, amžių, aktyvumą ir alergijų statusą. Shopify plėtinys šio darbo neatlieka.
04Trys mokėjimo būdai, vienas srautas
Kortelė su 3DS, Apple/Google Pay ir Baltijos šalių bankų nuorodos per Makecommerce – su tomis pačiomis pasekmėmis užsakymui. Mažiau krepšelių, paliktų paskutiniame žingsnyje.
05Krepšelio atstatymo grandinė
Ne pavienis priminimas, o grandinė, kuri pati nutrūksta užsakymui įvykus ar prenumeratai atsisakius. Pakeičia brangų išorinį įrankį.
06Vidinis el. pašto variklis
Funkciškai panašus į Klaviyo, tik be mokesčio už kiekvieną aktyvų profilį. Rinkodaros sąskaita auga gerokai lėčiau už klientų skaičių.
07Greitis nuo pirmos dienos
Serverinis pirmas piešinys, optimizuotos nuotraukos, iš anksto rezervuotos vietos. Core Web Vitals čia – ne paskutinė užduotis, o starto sąlyga.
08GDPR įrašytas į pamatus
Sutikimo įvykiai, audito žurnalas, atsisakymo grandinė – be papildomų plėtinių ir be teisinės rizikos pleistro.
09Prekės ženklo charakteris
Animuotas apmokėjimo srautas, vidinis hero gradientas, individualūs modalai. Klientui matosi, kad tai – ne dar viena Shopify šablono parduotuvė.
10Prognozuojama sąskaita
Fiksuotas mėnesinis serverio kaštas, be procento nuo pardavimo ir be staigmenų sausį.
Palyginimas
Garrdu vs. standartas
Metrika
Shopify + plėtiniai
Garrdu
Mėnesinė SaaS prenumeratų suma
nuo 600 €
0 € (visi sprendimai sukurti individualiai)
Mokėjimo kanalai apmokėjimo lange
1–2
3 (kortelė · Apple/Google Pay · banko nuoroda per Makecommerce)
Reklamos sekimas po Safari ITP
Dalinis (tik naršyklė)
Pilnas (serverinis + dedublikacija)
Prenumeratos personalizacija
Šablonas, vienodas visiems
Pagal apklausos duomenis (porcija + dažnis)
Krepšelio atstatymas
Plėtinys su mokesčiu už profilį
Individualus vidinis sprendimas, be mėnesinio mokesčio
Pirmas piešinys mobiliajame
Šabloninis JS karkasas
Serverinis SSR
Lietuviškas SEO matomumas
Plėtinys + pavėluotas turinys po hidratacijos
Serverinis SSR su lietuviškomis meta žymomis nuo pirmo baito
Plėtinys + pavėluotas turinys → SSR + lietuviškos meta žymos nuo pirmo baito
Apklausos žingsnių logika
Porcija ir baltymas parinkti deterministiškai
Vienodas srautas visiems → Šakojasi pagal alergijas ir aktyvumą
Konkretūs sprendimo receptai – event ID schema, Stripe saugyklos ir būsenų grandinė, apklausos skaičiavimo formulė, palikto krepšelio laiko tinklas, diegimo seka – viešai nepateikiami. Rimtam užsakovui pristatomi atskirai.