Rezervacijos ir krepšelis

mr.ltRezervacijos ir krepšelis, kuriuos įdedame į bet kurią svetainę

Sukūrėme ir vystome mr.lt – platformą, kuri vienoje vietoje tvarko rezervacijas, krepšelį, pristatymą, narystes ir mokėjimus mūsų svetainėms. Kiekviena svetainė įdeda vieną skriptą, o visa užsakymo grandinė – nuo laiko pasirinkimo iki sąskaitos ir siuntos numerio – veikia platformoje.

Next.jsReactPostgreSQLnext-intlStripeTonConnectReact Native
mr.lt – pradžios puslapis
mr.lt telefone
1skriptas – ir svetainėje veikia rezervacijos su apmokėjimu
5mūsų svetainės jau naudoja tą patį krepšelį
1 391paštomatas pasirenkamas krepšelyje LT, LV ir EE
2programėlės App Store: verslui ir klientams
Užduotis

Vietoje atskiro krepšelio kiekvienoje svetainėje – viena platforma visoms.

Mūsų svetainės pardavinėjo seminarus, konsultacijas, ekskursijas, prekes ir narystes, bet kiekviena savaip: WooCommerce, atskiri mokėjimo puslapiai, kontaktų formos. Kiekvienas PVM, pristatymo ar užsakymo formos pakeitimas buvo daromas po kelis kartus. Reikėjo sistemos, kuri priimtų rezervacijas ir prekes viename krepšelyje, apskaičiuotų pristatymą, išrašytų sąskaitas ir veiktų bet kurioje svetainėje vienu skriptu. Be to, darbuotojams reikėjo kalendoriaus telefone.

Ką padarėme
  • Rezervacijų variklis: paslaugos, darbuotojai, grafikai, laisvi laikai, laukiančiųjų sąrašas ir QR bilietai su atvykimo žymėjimu.
  • Įterpiamas valdiklis vienu skriptu, prisitaikantis prie svetainės temos ir kalbos, su prisijungimu el. pašto kodu.
  • Bendras krepšelis rezervacijoms, prekėms, dovanų kuponams ir narystėms; kainą visada perskaičiuoja serveris.
  • Užsakymų grandinė: atsargos, sąskaita faktūra su PVM kiekvienai eilutei, laiškai pirkėjui ir verslui, siuntos numeris.
  • Pristatymas pagal šalį, svorį ir pakuotės dydį, 724 tarifų eilutės iš senos parduotuvės ir 1 391 paštomatas.
  • Periodinės narystės su nario savitarna ir įrankiu perkelti esamas narystes iš kitos sistemos.
  • Nekustodinis TON mokėjimų kelias su operacijų tikrinimu ir verslo susivedamu piniginės adresu.
  • Dvi programėlės App Store: „MR Business“ darbuotojams ir „MR.lt“ klientams.
Išbandykite gyvai

Pradinė situacija

Turime keliolika savų svetainių: žurnalą su seminarais ir parduotuve, konsultacijų puslapius, renginių ir ekskursijų vietą, kompozitinių kortelių paslaugą, naujienų portalą. Kiekvienai iš jų reikėjo to paties: leisti žmogui išsirinkti laiką, susidėti prekes į krepšelį, sumokėti, gauti patvirtinimą ir sąskaitą, o verslui – matyti, kas užsakyta. Iki šiol tai buvo spręsta kiekvienoje svetainėje atskirai: vienur WooCommerce, kitur atskiras mokėjimo puslapis, trečioje – tiesiog „susisiekite“ forma.

Tokia sandara brangi. Kiekvienas pakeitimas (naujas PVM tarifas, pristatymo kaina, telefono laukas užsakyme) daromas tiek kartų, kiek yra svetainių, o klaidos kartojasi. Todėl nusprendėme sukurti vieną platformą – mr.lt – kuri tvarko rezervacijas, krepšelį, mokėjimus ir pristatymą visoms mūsų svetainėms, o kiekviena svetainė tik įdeda vieną skriptą.

Principas, kurio laikomės nuo pirmos dienos: kiekvienas mr.lt pakeitimas yra bendra mechanika visiems verslams platformoje, o ne pataisymas vienai svetainei.

Architektūra ir technologijos

mr.lt sudaro trys dalys viename monorepo: interneto platforma, kliento programėlė ir verslo programėlė. Bendri tipai, spalvų žetonai ir tekstai laikomi atskiruose paketuose, kad programėlės ir svetainė niekada neišsiskirtų.

SluoksnisTechnologijaKodėl
Svetainė ir APINext.js 16, React 19Serveryje generuojami katalogo puslapiai (SEO) ir API viename projekte.
DuomenysPostgreSQLRezervacijos, užsakymai ir mokėjimai – transakcijos, kurioms reikia griežtų teisių ir indeksų.
Kalbosnext-intl (LT, EN, RU)Pirkėjas krepšelį mato savo kalba, net jei svetainė kitos kalbos.
MokėjimaiStripe, TonConnectKortelės ir prenumeratos per Stripe; nekustodiniai TON mokėjimai – atskiras kelias.
ProgramėlėsReact Native, ExpoViena kodo bazė iOS ir Android, bendri paketai su svetaine.
ŽemėlapiaiLeafletVerslų ir paštomatų vietos be mokamų žemėlapių licencijų.

Monorepo pasirinkome dėl vieno paprasto dalyko: kai pasikeičia rezervacijos ar užsakymo duomenų struktūra, tą patį pakeitimą iš karto mato ir svetainė, ir abi programėlės. Taip išvengiame situacijos, kai programėlė rodo vieną kainą, o svetainė – kitą.

Savo serveriuose ją laikome sąmoningai: platforma turi foninius darbus (kas kelias minutes atlaisvinami neapmokėti laikai, kartojami nepavykę pranešimai), o jiems reikia nuolat veikiančio proceso, ne vien funkcijų debesyje.

Ką sukūrėme

Rezervacijos ir kalendorius

Verslas aprašo paslaugas, darbuotojus ir jų grafikus, o klientas mato tik realiai laisvus laikus. Valdymo skydelyje – bendras ir kiekvieno darbuotojo kalendorius, atšaukimų istorija, laukiančiųjų sąrašas, laikų blokavimas. Po apmokėjimo klientas gauna laišką su QR bilietu; darbuotojas jį nuskaito telefonu ir pažymi atvykimą, o pakartotinis to paties bilieto nuskaitymas atpažįstamas.

Įterpiamas valdiklis

Bet kuri svetainė įdeda vieną skriptą ir prie bet kurio mygtuko prideda atributą – atsidaro rezervacijos, prekės ar narystės langas. Valdiklis prisitaiko prie svetainės temos (šviesi ar tamsi), atpažįsta kalbą ir leidžia prisijungti vienkartiniu kodu iš el. pašto neišeinant iš puslapio. Šiandien jis įdiegtas mdu.lt, caroline.lt, ema.live, jurgita.cc ir 77.lt.

Bendras krepšelis

Viename krepšelyje gali būti rezervacija, prekė, dovanų kuponas ir narystė. Kainą visada perskaičiuoja serveris pagal duomenų bazę – naršyklėje pakeista suma nieko nereiškia. Krepšelis palaiko nuolaidų kodus, lojalumo taškus, paslaugų paketus ir papildomus pasiūlymus (pvz. prie ekskursijos – produktas atsiėmimui vietoje).

Prekės ir užsakymų vykdymas

Po apmokėjimo viena funkcija atlieka visą grandinę: pažymi užsakymą apmokėtu (pakartotinis pranešimas nieko nedubliuoja), sumažina atsargas, užsako sąskaitą faktūrą apskaitos sistemoje su teisingu PVM kiekvienai eilutei, išsiunčia laiškus pirkėjui ir verslui. Verslas skydelyje mato užsakymo eilutes, pristatymo adresą, įveda siuntos numerį – pirkėjui automatiškai išeina laiškas „Siunta išsiųsta“. Palaikomos skaitmeninės prekės, variantai su vertimais, personalizavimas ir parduotuvės valiuta (EUR arba USD).

Pristatymas: šalys, svoris, paštomatai

Pristatymo kaina skaičiuojama pagal pirkėjo šalį ir siuntos svorį (prekių svoris plius pakuotė), o paštomatui – pagal pakuotės dydį. Iš senos WooCommerce parduotuvės perkėlėme 724 tarifų eilutes, apimančias 224 šalis. Į platformą importavome 1 391 LP Express paštomatą Lietuvoje, Latvijoje ir Estijoje – pirkėjas renkasi konkretų paštomatą, o ne rašo adresą ranka. PVM pristatymui taikomas pagal pirkėjo šalį.

Narystės ir prenumeratos

Periodinės narystės apmokamos kortele, o narys pats gali išjungti pratęsimą, pakeisti kortelę ar planą – savitarnos puslapiai rodomi jo kalba. Sukūrėme ir įrankį perkelti jau veikiančias periodines narystes iš kitos sistemos, kad nariams nereikėtų iš naujo įvesti kortelės. Apie kiekvieną mokėjimą svetainė gauna pasirašytą pranešimą (webhook) su pakartojimų eile.

TON kriptovaliutos mokėjimai

Įdiegėme nekustodinį TON mokėjimų kelią: pirkėjo piniginė siunčia pinigus tiesiai į verslo adresą, platforma lėšų nelaiko. Serveris tikrina operaciją viešame blokų grandinės API, atpažįsta per mažą ar pavėluotą įmoką ir įspėja verslą. Piniginės adresą verslas susiveda pats; adresas tikrinamas pagal kontrolinę sumą, o kiekvienas pakeitimas žurnaluojamas. Šis kelias yra bandomajame etape ir įjungiamas kiekvienam verslui atskirai.

Verslo ir kliento programėlės

„MR Business“ (App Store nuo 2026-08-23) – kalendorius, nauja rezervacija, klientų sąrašas, apsilankymai ir QR skaitytuvas darbuotojo telefone. „MR.lt“ (App Store nuo 2026-09-06) – paieška, verslų profiliai ir kliento rezervacijos. Abi programėlės naudoja tą patį API ir tuos pačius bendrus paketus kaip svetainė.

Paieška, žinutės ir paskyros

Vienas prisijungimas visiems vaidmenims: tas pats žmogus gali būti klientas, darbuotojas keliuose versluose ir savininkas. Universali paieška ieško verslų, paslaugų ir specialistų vienu metu, o vieno žmogaus darbo vietos keliuose versluose sujungiamos į vieną rezultatą. Klientas ir darbuotojas gali susirašinėti dėl konkrečios rezervacijos.

Sąskaitos ir PVM

Kiekvienam apmokėtam užsakymui sąskaita faktūra išrašoma automatiškai, o PVM taikomas eilutės lygiu: tame pačiame krepšelyje knyga gali turėti 9 %, kita prekė 21 %, o paslauga – verslo nustatytą tarifą. Pristatymo PVM priklauso nuo pirkėjo šalies. Patvirtinimo laiške pirkėjas randa nuorodą, kur sąskaitą gali pervadinti įmonės vardu.

Migracija ir duomenys

Didžiausias perkėlimas – mdu.lt parduotuvė: katalogas sinchronizuojamas į mr.lt pagal SKU, o seminarai, bilietai ir narystės tapo platformos prekėmis. Pristatymo tarifai ir prekių svoriai paimti iš senos WooCommerce sistemos, kad pirkėjai mokėtų tiek pat, kiek anksčiau. Pirkiniai ir narystės paskyrai priskiriami tik patvirtinus el. pašto adresą – kad niekas negalėtų „pasisavinti“ svetimo pirkinio įvedęs svetimą adresą.

Seną krepšelį išjungėme tik tada, kai naujasis jau priėmė užsakymus, siuntė sąskaitas ir laiškus.

Greitis, SEO ir struktūra

Viešąją dalį sudaro katalogas „paslauga × miestas“: 506 paslaugų rūšys Vilniuje, Kaune ir Klaipėdoje, kartu – 1 530 veikiančių katalogo puslapių, dar 17 viešų verslų profilių ir informaciniai puslapiai. Paslaugų priskyrimas katalogo šakoms dinaminis: atsiradus naujai paslaugų kategorijai, ji automatiškai priskiriama tinkamai šakai su DI pagalba, todėl katalogo nereikia prižiūrėti ranka. Puslapiai turi struktūrizuotus duomenis (JSON-LD).

Greičio darbai davė apčiuopiamą rezultatą: išjungus perteklinį nuorodų išankstinį krovimą, perrašius atsitiktinio rikiavimo užklausas, pridėjus indeksus ir talpyklą, pagrindinio ir „Grožio“ puslapių atsako laikas (TTFB) sumažėjo nuo 1,9 s iki maždaug 0,2–0,26 s.

Administravimas

Verslo skydelis sugrupuotas į aiškias dalis: kalendorius ir apsilankymai, paslaugos ir darbuotojai, parduotuvė ir užsakymai, narystės ir paketai, nuolaidų kodai, dovanų kuponai, lojalumas, atsiliepimai, naujienlaiškis, statistika ir nustatymai. Statistika apima rezervacijas, parduotuvės užsakymus ir narystės mokėjimus vienoje vietoje. Darbuotojas mato tik savo duomenis, savininkas – viso verslo. Duomenų bazės lygiu aplikacija neturi teisės keisti jautrių laukų (pvz. išmokų adreso) – tik per siaurą, žurnaluojamą funkciją.

Rezultatas

  • Viena krepšelio, mokėjimų ir rezervacijų sistema penkiose mūsų svetainėse, įdiegta vienu skriptu.
  • Pristatymas pagal šalį, svorį ir pakuotės dydį su 1 391 paštomatu trijose Baltijos šalyse.
  • Dvi programėlės App Store, bendras kodas su svetaine.
  • 1 530 veikiančių katalogo puslapių, generuojamų iš duomenų bazės.
  • 756 pakeitimai repozitorijoje per penkis mėnesius (2026-05-03 – 2026-10-04).

Kur platforma yra dabar

mr.lt veikia gamyboje ir aptarnauja mūsų projektų krepšelius bei rezervacijas. Visiems verslams viešai ji dar neatidaryta – pirmiausia ją šlifuojame su savo svetainėmis.

Ką iš to galite pritaikyti savo verslui

  1. Vienas krepšelis kelioms svetainėms. Jei turite kelis prekės ženklus ar svetaines, mokėjimų ir užsakymų logiką verta laikyti vienoje vietoje.
  2. Rezervacija ir prekė viename apmokėjime. Paslauga ir papildomas produktas parduodami kartu – vidutinis krepšelis didėja be atskiro pardavimo.
  3. Paštomato pasirinkimas vietoje adreso. Mažiau klaidų pristatyme ir teisinga kaina pagal dydį ar svorį.
  4. Narystės su savitarna. Narys pats keičia kortelę ar planą – mažiau laiškų administracijai.
  5. Verslo programėlė darbuotojams. Kalendorius ir QR skaitytuvas telefone vietoje popierinių sąrašų.
  6. Migracija be praradimų. Tarifus, prekes ir periodines narystes perkeliame iš senos sistemos, kad klientai pokyčio nepajustų.
DUK

Apie tokį projektą

Ar galima įdiegti rezervacijas į esamą svetainę jos neperdarant?

Taip. mr.lt atveju svetainė įdeda vieną skriptą, o prie mygtukų prideda atributą – rezervacijos ar prekės langas atsidaro ant tos pačios svetainės. Svetainės dizainas ir turinys lieka savi.

Ar viename krepšelyje galima parduoti ir paslaugą, ir prekę?

Taip. Rezervacija, prekė, dovanų kuponas ir narystė apmokami vienu mokėjimu, o pristatymas skaičiuojamas tik toms prekėms, kurias reikia siųsti.

Kaip perkeliami duomenys iš WooCommerce?

Perkeliame prekes, pristatymo tarifus ir svorius, o katalogą sinchronizuojame pagal SKU. Seną krepšelį išjungiame tik tada, kai naujasis jau priima užsakymus, siunčia sąskaitas ir laiškus.

Ar galima priimti mokėjimus kriptovaliuta?

Taip, nekustodiniu būdu: pirkėjo piniginė siunčia lėšas tiesiai į verslo adresą, o serveris tikrina operaciją blokų grandinėje. mr.lt šis TON kelias yra bandomajame etape ir įjungiamas kiekvienam verslui atskirai.

Ar reikia atskiros programėlės darbuotojams?

Nebūtina, bet patogu: mr.lt verslo programėlėje darbuotojas mato kalendorių, kuria rezervacijas ir nuskaito klientų QR bilietus. Programėlė naudoja tą patį API kaip svetainė, todėl duomenys visada sutampa.

Kiti projektai

Reikia panašaus sprendimo? Rezervacijų sistemos – su kaina ir terminais raštu.

Žiūrėti paslaugą
Savaitės suvestinė

DI kainos, Google atnaujinimai ir prekybos sezonai

Kartą per savaitę: kas pasikeitė DI, paieškoje ir el. prekyboje. Be triukšmo.