Verslo logika
Motociklų atsarginių dalių katalogas Lietuvoje: tikslinė auditorija, tiekėjai, sandėlio formatas, daugiakalbystė.
TL;DR
Jusmila — lietuviška e-commerce parduotuvė, prekiaujanti motociklų, keturračių ir mopedų atsarginėmis dalimis. Savininkas — UAB Jusmila, fizinis sandėlis ir servisas Šakių mieste. Svetainėje jusmila.lt — 10 000+ detalių katalogas, paieška pagal modelius, krepšelis, pristatymas Lietuvoje užsakymo dieną.
Platforma sudaryta iš trijų nepriklausomų aplikacijų viename monorepo: vieša vitrina pirkėjams, administracinė skiltis katalogui ir užsakymams valdyti bei API tarp jų. Katalogo pildymas automatizuotas: duomenys traukiami iš kelių šaltinių per skreiperį, paremtą chrome-devtools MCP — tai retas požiūris, pakeičiantis įprastinius Puppeteer / Playwright.
Jusmila — kas tai ir kaip veikia
Verslo kontekstas
UAB Jusmila — lietuviška įmonė su sandėliu ir nuosavu servisu Šakiuose. Niša — motociklų, keturračių ir mopedų atsarginės dalys: susidėvinčios detalės (stabdžių kaladėlės, filtrai, grandinės), sezoninės dalys (padangos, akumuliatoriai), kėbulo dalys ir specialioji įranga. Auditorija — privatūs technikos savininkai, dirbtuvės, dileriai.
Šioje nišoje yra keletas rimtų sunkumų, kuriuos platforma sprendžia tiesiogiai:
— Modelio identifikavimas. Atsarginės dalys retai būna universalios: ta pati kaladėlė gali tikti dešimčiai skirtingų gamintojų modelių, o vienuoliktajam — netikti. Pirkėjas turi greitai rasti būtent tą detalę, kuri tiks jo konkrečiam motociklui. Vitrinoje tai sprendžiama filtrais pagal markę, modelį ir metus, plius suderinamumo (fitment) lentelėmis kiekvienoje prekės kortelėje.
— Geografinis pasiskirstymas. Svetainė veikia Lietuvos rinkai, tačiau nišoje yra nemažai rusakalbių dirbtuvių — daugiakalbė sąsaja (LT / RU / EN) yra būtina, ne antraeilė. next-intl renderiuoja visus tris variantus statiškai, neprarandant SEO.
— Pristatymo greitis. Konkurencinis pranašumas — pristatymas tą pačią dieną iš nuosavo sandėlio. Platforma seka likučius realiu laiku; jei detalės fiziškai nėra Šakiuose, kortelėje iškart rodoma „nėra sandėlyje", o ne „pasitikslinkite pas vadybininką".
— Katalogas auga. 10 000+ pozicijų — tai ne statinis skaičius, o veikiantis naujų SKU srautas. Pildymas rankomis nesimasštabuoja. Todėl projekte yra atskira importo ir automatinio kortelių praturtinimo infrastruktūra.
Kaip veikia užsakymas nuo pradžios iki pabaigos
1 žingsnis. Detalės paieška
Klientas užeina į jusmila.lt, pasirenka kalbą (lietuvių pagal nutylėjimą), nustato filtrą pagal motociklo gamintoją ir modelį. Katalogas pateikia suderinamų detalių sąrašą. Kiekvienoje kortelėje — nuotrauka, artikulas, kaina, prieinamumo statusas ir suderinamumas su konkrečiais modeliais.
Paieška veikia dviem režimais: tekstinė pagal artikulus ir pavadinimus, ir struktūrinė — pagal markę/modelį/metus. Antrasis režimas tikslesnis vartotojui, kuris žino savo motociklą, bet nežino, ko konkrečiai ieškoti.
2 žingsnis. Krepšelis ir užsakymo formavimas
Krepšelis gyvuoja localStorage iki užsakymo formavimo momento. Po to, kai vartotojas nusprendžia pirkti — krepšelis siunčiamas į serverį, susiejamas su paskyra (jei ji yra) arba su svečio sesija. Toliau — pristatymo būdo (kurjeris, atsiėmimas Šakiuose, paštomatas) ir apmokėjimo pasirinkimas.
3 žingsnis. Patvirtinimas ir surinkimas
Užsakymas patenka į administracinę skiltį. Sandėlio darbuotojas mato poziciją užsakymų eilėje, fiziškai surenka ir pažymi kaip paruoštą. Jei detalės neatsirado (likučių sinchronizacijos sutrikimas), statusas keičiasi į „dalinis surinkimas", klientui atsiunčiamas pranešimas su variantais.
4 žingsnis. Pristatymas
Jei klientas patenka į aptarnavimo zoną — užsakymą tą pačią dieną pristato kurjeris. Kitu atveju — paštomatas arba pašto paslauga.
Kas neįprasta
— chrome-devtools MCP vietoj Puppeteer. Konkurentų ir tiekėjų katalogų skreipinimas vyksta per realią naršyklę, valdomą MCP protokolu. Tai leidžia apeiti anti-bot apsaugas, kurios pagauna Puppeteer headless režimą. Jokių išorinių bibliotekų, išskyrus oficialų MCP klientą.
— Importai iš kelių šaltinių. Kode gyvuoja skriptai import-mototex, import-anjese — konkrečių tiekėjų pipeline'ai. Kiekvienas šaltinis turi savo parserį ir normalizatorių, bendras artefaktas — TypeORM esybės.
— Real-time likučiai. Socket.IO + Redis adapter palaiko likučių sinchronizaciją tarp administracinės skilties ir vitrinos. Kai sandėlio darbuotojas keičia kiekį, vitrina mato naują reikšmę be perkrovimo.
— Session replay per rrweb. Administracinėje skiltyje integruotas rrweb-player — galima peržiūrėti vartotojo sesiją svetainėje, kad išsiaiškintum konkretų bug'ą ar nesuprantamą elgesį. Naudinga nagrinėjant skundus „man krepšelis nesuveikė".
Geografija ir kalba
Svetainė — lietuvių kalba pagal nutylėjimą (LT). Rusų — rusakalbėms dirbtuvėms Lietuvoje (jų Kauno apylinkėse nemažai). Anglų — pasienio klientams iš Latvijos ir Lenkijos. next-intl pateikia kiekvieną puslapį kaip atskirą URL: /lt/..., /ru/..., /en/... — tai svarbu indeksavimui Google.
Sandėlis ir servisas — Šakiuose. Tai mažas miestas (apie 6 000 gyventojų), bet patogus logistikos taškas centrinei Lietuvai. Pristatymas Lietuvoje — tą pačią dieną; tarptautiniai užsakymai — per standartines paslaugas.