ბიზნეს-ლოგიკა
როგორ არის მოწყობილი მიწოდების პლატფორმა შიგნიდან: შეკვეთა, გადახდა, მძღოლები, ლოიალობა.
TL;DR
Pharmacy Delivery Platform — ეს არის last-mile პლატფორმა სახლში მიწოდებისთვის რეგულირებად ნიშაში (ასაკობრივი ვერიფიკაციის მოთხოვნადი კატეგორიის საქონელი). რეგიონი — მაიამი და მისი გარეუბნები, ფლორიდა. კლიენტი აფორმებს შეკვეთას საიტის ან Telegram-ის მეშვეობით, და 30–90 წუთში მძღოლი მიჰყავს საქონელი.
პლატფორმა multi-tenant: ერთი კოდის ბაზა ემსახურება რამდენიმე მაღაზიას ერთ რეგიონში. შიგნით ცხოვრობს მომხმარებლის ექვსი როლი, ურთიერთქმედების ხუთი ინტერფეისი, სამი Telegram-ბოტი, ლოიალობის პროგრამა საფულითა და კეშბექით, რეფერალური სისტემა QR-კამპანიებით, მიწოდების ექვსი ზონა საკუთარი წესებით და გადახდის ექვსი ხერხი — ნაღდი ფულიდან კრიპტოვალუტამდე.
ძირითადი განსხვავებები ტიპიური მაღაზიისგან კურიერებით: მძღოლის რეალური real-time თრექინგი, ნაღდი ფულის ავტო-შედარება ცვლის ბოლოს, premium-გამოწერა ბონუსებითა და შეზღუდვების გვერდის ავლით, ანალიტიკა session replay-ისა და audit trail-ის დონეზე. ნიშა მოითხოვს წესების მკაცრ დაცვას — აქედან მოდის ასაკობრივი ვერიფიკაცია, პერსონალური მონაცემების მასკირება და Twilio A2P-ში რეგისტრაცია.
Pharmacy Delivery Platform — ბიზნეს-ლოგიკა
რა პლატფორმაა ეს
წარმოიდგინეთ ჩვეულებრივი სასურსათო მაღაზია სახლის გვერდით. შეხვედით, აირჩიეთ საქონელი, გადაიხადეთ, წაიღეთ. ახლა წარმოიდგინეთ, რომ თქვენსა და მაღაზიას შორის ჩადგა ტექნოლოგიის ფენა: ფეხით აღარ მიდიხართ — ხსნით საიტს ან Telegram-ს, კალათა გროვდება ტელეფონში, გადახდა გადადის ერთი შეხებით, საათის შემდეგ კი კარზე რეკავს კურიერი. ეს არის last-mile delivery: „უკანასკნელი მილი" მაღაზიის საწყობიდან კლიენტის კარამდე.
Pharmacy Delivery Platform აკეთებს ზუსტად ამას, ოღონდ ნიშაში, სადაც ყოველი ნაბიჯი მკაცრად რეგულირდება. კლიენტმა უნდა გაიაროს ასაკობრივი ვერიფიკაცია. მაღაზიამ უნდა დაიცვას ტერიტორიული შეზღუდვები. მძღოლმა უნდა იაროს არა მხოლოდ საქონლით, არამედ ნაღდი ფულითაც უკან — ანუ პლატფორმა ითვლის ყოველ დოლარს ხურდის სიზუსტით.
არქიტექტურულად ეს არის multi-tenant სისტემა: ერთი და იგივე კოდის ბაზა ერთდროულად ემსახურება რამდენიმე მაღაზიას. თითოეული მაღაზია ხედავს მხოლოდ თავის შეკვეთებს, თავის კლიენტებს, თავის საქონელსა და თავის თანამშრომლებს. კაპოტის ქვეშ ეს ნიშნავს, რომ ბაზაში ნებისმიერი მოთხოვნა იფილტრება store_id-ით, და ერთი მაღაზიის თანამშრომელი შემთხვევით ვერ ნახავს მეორე მაღაზიის მონაცემებს.
პლატფორმასთან ურთიერთქმედება ხდება ხუთი სხვადასხვა ინტერფეისის მეშვეობით. ძირითადი არხი — საჯარო საიტ-ვიტრინა, რომლის მეშვეობითაც იყენებს უმრავლესობა კლიენტი. შემდეგ მოდის ოთხი Telegram-აპლიკაცია: ერთი მყიდველებისთვის (მინი-მაღაზია Telegram-ის შიგნით), მეორე დისპეტჩერებისთვის (ხედავენ ყველა შემოსულ შეკვეთას, ნიშნავენ მძღოლებს), მესამე მძღოლებისთვის (იღებენ თავიანთ მიწოდებებს, აღნიშნავენ სტატუსებს), და ადმინ-პანელი ბიზნესისთვის — იქ მენეჯერები და მფლობელები ხედავენ ანგარიშებს, მართავენ საქონელს, ფასებსა და თანამშრომლებს.
სისტემაში ექვსი როლია: platform_admin (პლატფორმის მფლობელი — შეუძლია ყველაფერი), store_admin (კონკრეტული მაღაზიის ადმინისტრატორი), manager (მენეჯერი ზოგიერთი უფლების გარეშე), dispatcher (დისპეტჩერი — ანაწილებს შეკვეთებს მძღოლებზე), driver (მძღოლი), customer (მყიდველი).
ინტერფეისების პარალელურად მუშაობს სამი Python-ბოტი Telegram-ში — კლიენტებისთვის, მძღოლებისთვის და დისპეტჩერებისთვის. ბოტები ლამაზ ეკრანებს არ აჩვენებენ: მათი ამოცანაა მყისიერად მიწოდონ შეტყობინება და უზრუნველყონ ბრძანებების მინიმალური ნაკრები.
როგორ მუშაობს შეკვეთა თავიდან ბოლომდე
ნაბიჯი 1. ვიტრინა და კატალოგი
კლიენტი შედის საიტზე. მთავარზე — ჰერო-ბლოკი, დღის ბანერები, საქონლის კატეგორიები (სულ 10 კატეგორია). კლიენტი დააწკაპუნებს კატეგორიას, ხვდება სიაში, შემდეგ — საქონლის ბარათი ფოტოებით, აღწერით, მიმოხილვებით და ვარიანტებით (მაგალითად, სხვადასხვა დოზირება ან მოცულობა).
კალათა საინტერესოდ არის მოწყობილი: შეკვეთის გაფორმებამდე ის ცხოვრობს localStorage-ში კლიენტის ბრაუზერში. ეს ნიშნავს, რომ არარეგისტრირებულ მომხმარებელს შეუძლია შეაგროვოს კალათა, დახუროს ფანჯარა, დაბრუნდეს საათის შემდეგ — და ყველაფერი ადგილზეა. checkout-ის მომენტში კალათა მიდის სერვერზე და მიებმება მომხმარებელს (რეგისტრაციის/შესვლის შემდეგ).
ნაბიჯი 2. მისამართი და მიწოდების ზონა
კლიენტი შეიყვანს მისამართს. სისტემა იღებს ZIP-კოდს და ეძებს მას მიწოდების ზონების ცხრილში. ზონები ექვსია: მაიამის ცენტრი, კორალ-გეიბლზი და კიდევ ოთხი. თითოეულ ზონას აქვს თავისი წესები — შეკვეთის მინიმალური თანხა, მიწოდების მიახლოებითი დრო, დამატებითი გადასახადი მანძილისთვის.
თუ ZIP არც ერთი ზონით არ იფარება — კლიენტი ხედავს მეგობრულ შეტყობინებას „თქვენს რაიონში ჯერ არ ვაწვდით" და შეთავაზებას დატოვოს email, რომ გაიგოს გაფართოების შესახებ.
მიწოდების ზონა ეს არ არის უბრალოდ პოლიგონი რუკაზე. ეს არის ბიზნეს-წესი: „ამ ZIP-კოდით ამა და ამ თანხიდან, ამა და ამ სიჩქარით, ამა და ამ შეზღუდვებით".
ნაბიჯი 3. მიწოდების დრო
შემდეგ — დროის არჩევა. ორი რეჟიმი. პირველი — express (ASAP): მძღოლი იღებს შეკვეთას როგორც კი შეუძლია, მიწოდება მიახლოებით 30–90 წუთი. მეორე — scheduled time slot: 15-წუთიანი სლოტები უახლოეს დღეებზე. თითოეულ სლოტს აქვს ტევადობის ლიმიტი (capacity) — X შეკვეთის შემდეგ სლოტი იხურება, რომ არ გადაიტვირთოს მძღოლები.
ამის თავზე მუშაობს traffic windows — საცობების ფანჯრები. ეს არის წესები ადმინკაში: „ZIP 33129 არ მიეწოდება 17:00-დან 19:00-მდე სამუშაო დღეებში". თუ კლიენტი არჩევს დროსა და ზონას, რომელიც ხვდება ასეთ ფანჯარაში, მისი სლოტი იქნება მიუწვდომელი.
ნაბიჯი 4. გადახდა
გადახდის ხერხები — ეს ცალკე ისტორიაა. პლატფორმა იღებს ექვს ტიპს: Cash on Delivery (ნაღდი ფული კურიერისთვის), Zelle, CashApp, Venmo, შიდა საფულე (wallet), და კრიპტოვალუტა ხუთ ვარიანტში — BTC (xpub-კლავიშის მეშვეობით), ETH, USDT, USDC, USDT TRC-20.
კლიენტს შეუძლია კომბინირება: მაგალითად, ნაწილობრივ გადაიხადოს საფულით (ჩამოაჭიროს კეშბექი), ნაწილობრივ — ნაღდით.
ნაბიჯი 5. პრომოკოდი
ველი პრომოკოდისთვის. სისტემა ვალიდირებს კოდს — ამოწმებს მოქმედების ვადას, გამოყენებების ლიმიტს, მინიმალურ თანხას, კონკრეტულ კლიენტთან მიბმას. მხარდაჭერილია პრომოკოდების ექვსი ტიპი: პროცენტული ფასდაკლება, ფიქსირებული თანხა, უფასო საქონელი საჩუქრად, კეშბექი საფულეზე, military discount (ფასდაკლება სამხედროებისთვის ვერიფიკაციით), პირველი შეკვეთა.
ნაბიჯი 6. შეკვეთა შექმნილია
კლიენტი დააჭერს „გაფორმება". შეკვეთა იქმნება ბაზაში სტატუსით PENDING. და მაშინვე ეშვება შეტყობინებების კასკადი.
Pushover სერვისის მეშვეობით დისპეტჩერებს მიდის push-შეტყობინება პრიორიტეტით 2 — ეს ნიშნავს, რომ დისპეტჩერის ტელეფონი დარეკავს ხმამაღლა და ხანგრძლივად (30 წამამდე), სანამ დისპეტჩერი არ დაადასტურებს. პარალელურად Telegram-ის ბოტი აგზავნის მოკლე შეტყობინებას შეკვეთის ბმულით.
ნაბიჯი 7. დისპეტჩერი ნიშნავს მძღოლს
დისპეტჩერი ხედავს შეკვეთას ან ადმინკაში, ან საკუთარ Telegram-mini-app-ში. შიგნით — შემადგენლობა, მისამართი, დრო, გადახდის ხერხი, კლიენტის შენიშვნები. დისპეტჩერი არჩევს მძღოლს თავისუფლების სიიდან და ნიშნავს შეკვეთას.
სტატუსი იცვლება: PENDING → CONFIRMED → READY → ASSIGNED. მძღოლს მიუფრინდება push (ასევე Pushover, ასევე ხმამაღლა) — „ახალი შეკვეთა".
ნაბიჯი 8. მძღოლი გზაშია
მძღოლი ხსნის თავის mini-app-ს, ხედავს დეტალებს — მაღაზიის მისამართი საიდან აიღოს, კლიენტის მისამართი სად მიიტანოს, მარშრუტი რუკაზე. მიდის მაღაზიაში, აღნიშნავს „Picked up" (სტატუსი PICKED_UP). მიდის კლიენტთან.
ამ მთელი დროის განმავლობაში კლიენტი ხედავს თავის აპლიკაციაში real-time tracking-ს: მძღოლის წერტილს რუკაზე და ჩამოსვლის სავარაუდო დროს (ETA). მძღოლის გეოპოზიცია მიფრინავს WebSocket-ით ყოველ რამდენიმე წამში, ETA გადაითვლება გეოკოდინგით.
ნაბიჯი 9. მიწოდება და მიმოხილვა
მძღოლი მივიდა, საქონელი გადასცა, გადახდა აიღო (თუ COD), დააჭირა „Delivered". სტატუსი — DELIVERED. დისპეტჩერს ვარდება push პრიორიტეტით 1 (ნორმალური, სირენის გარეშე): „შეკვეთა მიწოდებულია".
კლიენტს რამდენიმე წუთში მოსდის მიმოხილვის მოთხოვნა: შეაფასოს შეკვეთა და/ან კონკრეტული საქონელი.
ლოიალობისა და შენარჩუნების პროგრამა
კლიენტების შენარჩუნება — ეს არ არის ერთი ფიჩა, არამედ ერთმანეთში გადაჯაჭვული მექანიკების მთელი ნაკრები. თითოეულზე ცალკე მოვყვები, მაგრამ რეალობაში ისინი ერთად მუშაობენ.
Wallet — შიდა საფულე
თითოეული შეკვეთის შემდეგ კლიენტს ერიცხება კეშბექი — თანხის პროცენტი. ეს პროცენტი დამოკიდებულია კლიენტის დონეზე (დონეების შესახებ ქვემოთ). კეშბექი ვარდება შიდა საფულეზე და შეიძლება დაიხარჯოს შემდეგ შეკვეთაში როგორც გადახდის ნაწილი.
საფულესთან ყოველი ოპერაცია — ცალკე ტრანზაქცია ბაზაში. დარიცხვა, ჩამოწერა, დაბრუნება, ადმინისტრატორის მიერ კორექცია. სრულ ისტორიას ხედავს როგორც თავად კლიენტი პირად კაბინეტში, ასევე ადმინისტრატორი ადმინკაში.
საფულე ეს არ არის უბრალოდ ბონუსური ქულები. ეს არის ნამდვილი ფული დოლარებში, რომელიც კლიენტმა უკვე დახარჯა, მაგრამ ნაწილი მიიღო უკან მოტივაციად, რომ დაბრუნდეს.
Affiliate program — რეფერალური პროგრამა
თითოეულ რეგისტრირებულ კლიენტს ავტომატურად გენერირდება უნიკალური რეფერალური კოდი. კლიენტს შეუძლია გაუზიაროს ბმული ?ref=CODE ფორმატში — მეგობარი გადადის, რეგისტრირდება, აკეთებს შეკვეთას, ხოლო მოწვევენი იღებს კომისიას თავის საფულეზე.
QR-კოდები გენერირდება ავტომატურად. ჰერო-ს მთავარ გვერდზე ავტორიზებული კლიენტებისთვის არის მზა QR — მიადე ტელეფონი, გააზიარე.
Customer plans / Premium tier — კლიენტების დონეები
სამი დონე: bronze, silver, gold. Bronze — საწყისი, აძლევენ ყველას რეგისტრაციისას. Silver და gold — ფასიანი გამოწერები ან მიიღწევა ბრუნვით. რაც უფრო მაღალია დონე, მით მეტი შეღავათია:
- გაზრდილი კეშბექის პროცენტი
- წვდომა გადახდის უნიკალურ მეთოდებზე (მაგალითად, კრიპტოვალუტა შეიძლება დახურული იყოს bronze-ისთვის)
- 24/7 შეკვეთები — მაღაზიის ჩვეულებრივი სამუშაო საათების bypass
- Bypass ZIP-restrictions — გაფართოებული მიწოდების ზონა
- ბონუსური პროდუქტები დონის ჩართვისას
Promo codes მასობრივ პარტიებში
მარკეტოლოგს შეუძლია ერთი ღილაკით დააგენერიროს 1000 უნიკალური პრომოკოდი და ჩამოტვირთოს CSV-ფაილით. სცენარი: ამობეჭდოს ფლაიერზე და დაარიგოს ქუჩაში, მიამაგროს შეკვეთას სიურპრიზად, გამოიყენოს სარეკლამო კამპანიაში. თითოეული კოდი — single-use ან multi-use, პროცენტი ან თანხა, შეკვეთის თანხის კონფიგურირებადი ლიმიტით.
QR-კამპანიები
ცალკე მექანიზმი ოფლაინ-მარკეტინგისთვის. მარკეტოლოგი ქმნის კამპანიას, აბამს მას პრომოკოდს, იღებს მოკლე URL-ს /c/CODE ფორმატში. კლიენტი სკანირებს QR-ს — ხვდება საიტზე — პრომოკოდი უკვე გამოყენებულია, ტრაფიკის წყარო ჩაწერილია.
შემდეგ — ანალიტიკა: რამდენი სკანი, რამდენი კონვერსია, რამდენი შემოსავალი მოიტანა კამპანიამ, საშუალო ჩეკი ამ კამპანიით. შესაძლებელია კამპანიების ერთმანეთთან შედარება და გაგება, რომელი არხი იხდის თავს.
Day-of-week აქციები
მარტივი, მაგრამ მუშა წესი: „ორშაბათი — 15% ფასდაკლება ყველაფერზე". კონფიგურირდება ადმინკაში: კვირის დღე, ფასდაკლების პროცენტი, შეკვეთის მინიმალური თანხა. სურვილისამებრ: დაამატოს უფასო საქონელი ან დააგროვოს დამატებითი კეშბექი.
Mix & Match — პაკეტური ფასდაკლებები
ფასდაკლების ტიპი „იყიდე N — მიიღე %". რამდენიმე დონე: იყიდე 3 — 20% ფასდაკლება, იყიდე 5 — 30%. მიბმა კატეგორიებზე ან კონკრეტულ საქონელზე. შესაძლებელია „აიღე ნებისმიერი სამი ამ კატეგორიიდან — მიიღე ფასდაკლება".
Banners — დინამიური ბანერები
მთავარზე — ბანერები, განსხვავებული მობილური და დესკტოპის ვერსიისთვის. თითოეულ ბანერს აქვს თავისი target URL: მიჰყავს ან კატეგორიაზე, ან აქცია-გვერდზე. მენეჯერი მართავს ბანერებს ადმინკაში დეველოპერის მონაწილეობის გარეშე.
Reviews
კლიენტი ტოვებს მიმოხილვებს შეკვეთებზე და ცალკე — კონკრეტულ საქონელზე. რეიტინგები ჩანს საქონლის ბარათებში და ქმნის „ნდობის ლაიტმოტივს" — სოციალურ მტკიცებულებას ახალი კლიენტებისთვის.
კლიენტთან კომუნიკაციის არხები
WhatsApp-first messaging
ტრანზაქციული შეტყობინებების ძირითადი არხი (შეკვეთის დადასტურება, მიწოდების სტატუსები) — WhatsApp. კაპოტის ქვეშ — multi-node gateway: 5-მდე ნოდი (ფიზიკური მოწყობილობა WhatsApp Business-ით), რომლებიც მუშაობენ round-robin სქემით sticky session-ით — ანუ ერთი და იგივე კლიენტი ყოველთვის იღებს შეტყობინებებს ერთი და იგივე ნოდიდან.
თუ WhatsApp არ მივიდა (კლიენტმა წაშალა აპლიკაცია, დაბლოკა ნომერი, არ აქვს ინტერნეტი), სისტემა ავტომატურად აკეთებს fallback-ს SMS-ზე.
SMS — ორი არხი
SMS იგზავნება ორი გზით. პირველი — Twilio A2P: კამპანიის კომერციული რეგისტრაცია აშშ-ში, რომელიც საჭიროა ამერიკული ოპერატორების წესების დაცვისთვის. პლატფორმის აღწერის მომენტისთვის კამპანია წარდგენილია და გადის TCR vetting-ს (2–3 კვირა).
მეორე არხი — SMS Gate: Android-აპლიკაცია ფიზიკურ მოწყობილობებზე, რომლებიც აგზავნიან SMS-ს ჩვეულებრივი ნომრებიდან. ასევე round-robin მოწყობილობებს შორის. გამოიყენება ძირითადად OTP-კოდებისთვის რეგისტრაციისა და შესვლისას.
Email — forgot-password-ისთვის და იშვიათი მასობრივი დაგზავნებისთვის. არ არის ძირითადი არხი — კლიენტების უმრავლესობა ინფორმაციას იღებს WhatsApp/Telegram-ში.
Pushover გუნდისთვის
გუნდი (დისპეტჩერები, მძღოლები, მფლობელები) იღებენ შეტყობინებებს Pushover-ის მეშვეობით. ეს არ არის კლიენტური არხი — ეს არის შიდა ინსტრუმენტი. პრიორიტეტის სამი დონე:
- ახალი შეკვეთა → დისპეტჩერებს, priority=2 (ხმამაღალი სირენა 30 წამი დადასტურებამდე — კრიტიკულია, რომ შეკვეთები არ დაიკარგოს)
- შეკვეთა დანიშნულია → მძღოლს, priority=2 (ხმამაღალი შეტყობინება)
- შეკვეთა მიწოდებულია → დისპეტჩერებს, priority=1 (ნორმალური ხმა)
Telegram-ბოტები
სამი ცალკე ბოტი:
- მყიდველის ბოტი — შეკვეთის მსუბუქი არხი საიტზე შესვლის გარეშე
- დისპეტჩერის ბოტი — სათადარიგო არხი, თუ Pushover მიუწვდომელია
- მძღოლის ბოტი — ოპერატიული შეტყობინებები ახალი მიწოდებების შესახებ
ავტორიზაცია
შესვლის რამდენიმე ხერხი: OTP SMS-ის მეშვეობით, Google OAuth, Telegram WebApp HMAC-ვალიდაციით (mini-apps-ისთვის — სერვერი ამოწმებს Telegram-ის ხელმოწერას, რომ დარწმუნდეს, რომ initData ნამდვილია).
ბიზნეს-მეტრიკები და ანალიტიკა
აქ ყველაზე საინტერესო ნაწილი მფლობელისთვის — რას ხედავს ის ადმინკაში, დილით რომ გახსნის.
Daily KPIs და Lifetime KPIs
პირველი, რაც იტვირთება ადმინკის მთავარზე — ბარათები ციფრებით დღეს: collection (შემოსავალი), sales (გაყიდვები), orders (შეკვეთები), users (ახალი მომხმარებლები). გვერდით — იგივე მეტრიკები მაღაზიის არსებობის მთელი დროის განმავლობაში (lifetime).
Reconciliation report
მთავარი ფინანსური ანგარიში — შედარება. ანგრევს შემოსავალს მთავარ შემადგენლებად: gross revenue (მთლიანი შემოსავალი), discounts (ფასდაკლებები), wallet used (კლიენტების საფულეებიდან ჩამოწერილი), rewards used (უფასო საქონელი და ბონუსები), net revenue (წმინდა შემოსავალი), tax (გადასახადი), delivery fees (მიწოდების გადასახადი), COGS (cost of goods sold — თვითღირებულება), profit margin (მარჟა).
ანგარიშის გახსნისას მფლობელი ხედავს არა „მაღაზიამ გამოიმუშავა X", არამედ სრულ სურათს: რამდენი ფული შემოვიდა, რამდენი წავიდა ფასდაკლებებსა და საჩუქრებზე, რამდენი დარჩა გადასახადებისა და შესყიდვების შემდეგ.
Cash flow report
ფულის მოძრაობის ანგარიში. განსაკუთრებით მნიშვნელოვანია ნიშაში, სადაც ბევრი COD-შეკვეთაა. დაშლა: COD-გაყიდვები (რამდენი შეკვეთა გადახდილია ნაღდით), ნაღდი ფული მძღოლის კონვერტში (რა არის ფიზიკურად შეგროვებული), digital payments (რა გავიდა Zelle/CashApp/Venmo/კრიპტოს მეშვეობით), change-to-wallet (ხურდა, რომელიც კლიენტის საფულეში წავიდა წვრილი ფულის ნაცვლად), owner's cash (ის, რაც საბოლოოდ დარჩა მფლობელთან).
Driver report
არჩეული პერიოდისთვის — ცხრილი თითოეული მძღოლის მიხედვით: მიწოდებების რაოდენობა, საშუალო დრო მიწოდებაზე, შემოსავალი, შეგროვებული ნაღდი ფული. ეხმარება იმის გაგებაში, ვინ მუშაობს ეფექტურად, ვის სჭირდება დახმარება, ვის უნდა გადაუხადო პრემია.
End-of-day report
საბოლოო ანგარიში ცვლისთვის. დღის დახურვა — ყველა ციფრი, ყველა ნაშთი, ყველა შეუსაბამობა.
COG report
ანგარიში თვითღირებულებაზე. თითოეული საქონლისთვის — შესყიდვის ფასი, გაყიდვის ფასი, მარჟა დოლარებსა და პროცენტებში. ეხმარება იმის გაგებაში, რომელი საქონელი ნამდვილად მოაქვს ფული, ხოლო რომელი — იყიდება ზარალით.
Affiliate report
რეფერალების ტოპი: ვინ მოიყვანა ყველაზე მეტი კლიენტი, რა კომისია დაერიცხა, რა გადაიხადა. შესაძლებელია კონკრეტული რეფერალის ნახვა — მისი რეფერალები, მათი შეკვეთები, მისი საფულე.
Funnel-ანალიტიკა
კონვერსიის ძაბრები სამ ადგილას:
- Registration funnel: გააგზავნა OTP → შეიყვანა კოდი → დაასრულა რეგისტრაცია → გააკეთა პირველი შეკვეთა. თითოეულ ნაბიჯზე — გადასვლის პროცენტი და აბსოლუტური რიცხვი.
- Login funnel: მსგავსი ლოგიკა შესვლისთვის.
- Checkout funnel: დაამატა კალათაში → გადავიდა checkout-ზე → აირჩია მისამართი → აირჩია გადახდა → დააჭირა „გაფორმება" → გადახდა გავიდა.
ძაბრები აჩვენებენ, სად ცვივიან კლიენტები. თუ ხალხის 80% აღწევს გადახდის არჩევას, მაგრამ მხოლოდ 40% აღწევს „გაფორმებას" — ეს ნიშნავს, რომ ამ ნაბიჯზე რაღაც ფუჭდება.
Conversion analytics
ცალკე ეკრანი — საერთო ძაბრი ვიზიტიდან შეკვეთამდე: Sessions → Product Views → Cart Adds → Checkout → Orders. პროცენტებით თითოეულ ნაბიჯზე. ეს უკვე არ არის კონკრეტულ კლიენტზე — ეს არის მაღაზიის საერთო ჯანმრთელობაზე.
Activity Log + session replay
ანალიტიკის ყველაზე უჩვეულო ნაწილი. პლატფორმა იწერს კლიენტების მოქმედებებს: დაამატა საქონელი კალათაში, წაშალა, შეცვალა რაოდენობა, გადავიდა გვერდზე, გააგზავნა ძიება შედეგების გარეშე, მიიღო შეცდომა, ჩავარდა JS, ვერ მიაღწია checkout-ს X მიზეზით.
ამის თავზე — rrweb session replay: კლიენტების სესიების ჩაწერა masked inputs-ით (ყველა ველი მასკირდება — ვერავინ ნახავს, რა დაწერა კლიენტმა ველში „მისამართი" ან „ტელეფონის ნომერი"). მხოლოდ ავტორიზებული სესიები, არაუმეტეს 15 წუთი ერთ ჩანაწერზე. ადმინკაში შესაძლებელია კონკრეტული სესიის გახსნა და კლიენტის მთელი გზის გადახედვა — ვიდეო-პლეერივით.
როცა კლიენტი ჩივის „თქვენთან არაფერი მუშაობდა" — ხსნი მის სესიას, უყურებ, რას აკეთებდა რეალურად, და გესმის მიზეზი 30 წამში.
Audit Trail
ცვლილებების ჟურნალი პლატფორმის ადმინისტრატორისთვის. ვინ და როდის შეცვალა საქონლის ფასი, ნაშთი, კლიენტის საფულე. ცვლილებები ორი წამის ფარგლებში ჯგუფდება ერთ ჩანაწერში (რომ არ აიგროვოს ჟურნალი, თუ ერთმა რედაქტორმა შეინახა სამი ველი ზედიზედ).
Issues monitor
დღის ტოპ-პრობლემები. checkout-ზე ჩამოვარდნის ყველაზე ხშირი მიზეზები, JS-შეცდომები კლიენტების ბრაუზერებში, API-ენდპოინტების ჩავარდნები. ეხმარება სწრაფად დაინახო, რა იშლება ამ წუთში.
რა ხდის პროექტს რთულს შიგნიდან
გვერდიდან პლატფორმა გამოიყურება როგორც ჩვეულებრივი მაღაზია კურიერებით. შიგნით — ათობით არატრივიალური ამოცანა, რომელთაგან თითოეულმა შეიძლება დაუჯდეს ფული ან კლიენტები, თუ ცუდად გადაჭრი.
Inventory race conditions
სცენარი: საწყობში ერთი ბოლო ცალი საქონელია. ორი კლიენტი ერთდროულად აჭერს „გაფორმებას". დაცვის გარეშე — ორივე მიიღებს დადასტურებას, მაგრამ საქონელი საწყობში არ არის. ერთი კლიენტი ძალიან გაბრაზდება.
გადაწყვეტა — ტრანზაქციები ბაზაში პირობით WHERE inventory >= qty. თუ პირველმა კლიენტმა მოასწრო — მეორეს შეცდომა მისცემს ჯერ კიდევ შეკვეთის შექმნამდე, და დაინახავს „საქონელი დასრულდა" დადასტურების ნაცვლად.
Multi-tenant იზოლაცია
ერთი store_id ფილტრავს ყველაფერს: საქონელი, შეკვეთები, კლიენტები, მძღოლები. თუ ეს ფილტრი დაიკარგა თუნდაც ერთ მოთხოვნაში — A მაღაზია დაინახავს B მაღაზიის მონაცემებს. რეგულირებად ნიშაში ეს არ არის უბრალოდ ბაგი, ეს არის პოტენციური იურიდიული შედეგი.
Real-time tracking
WebSocket-კავშირი მძღოლის აპლიკაციასა და სერვერს შორის. მძღოლი აგზავნის გეოპოზიციას ყოველ რამდენიმე წამში. სერვერი ინახავს ბოლო პოზიციას, ანგარიშობს ETA-ს გეოკოდინგით და გადააგზავნის კლიენტს. თუ კავშირი გაწყდა — საჭიროა გადაერთვა კონტექსტის დაკარგვის გარეშე.
Compliance
ასაკობრივი ვერიფიკაცია კატეგორიისთვის — სავალდებულო პირობაა. პერსონალური მონაცემების მასკირება screen recordings-ში (rrweb maskAllInputs). NDA პლატფორმის დონეზე. რეგისტრაცია Twilio A2P-ში ამერიკული SMS-ოპერატორების წესების დაცვისთვის.
Pushover priority=2
ეს არ არის ტექნიკური, არამედ ოპერაციული საკითხი. თუ ახალი შეკვეთა ჩავარდა სისტემაში, ხოლო დისპეტჩერმა ეს ვერ შეამჩნია — შეკვეთა დაგვიანდება. Pushover პრიორიტეტით 2 ხმამაღალი სირენით რეკავს ტელეფონზე 30 წამს, სანამ დისპეტჩერი არ დაადასტურებს. ეს არ არის „კომფორტი" — ეს კრიტიკულია, რომ შეკვეთები არ დაიკარგოს.
Cash drop reconciliation
მძღოლები ნაღდ ფულს ატარებენ. ცვლის ბოლოს პლატფორმა ადარებს სამ ციფრს: რამდენს ველოდებით COD-შეკვეთებიდან, რამდენი ფაქტობრივად არის მძღოლის კონვერტში, რამდენი წავიდა კლიენტებთან ხურდად ფორმატით „განსხვავებას ვდებთ საფულეზე, არ ვაძლევთ წვრილ ფულად". თუ სამი ციფრი არ ემთხვევა — შეუსაბამობა გადაეცემა მფლობელს.
Time slots capacity-ით
15-წუთიანი სლოტები შეკვეთების რაოდენობის ლიმიტით. როცა ლიმიტი მიღწეულია — სლოტი „ქრება" და კლიენტებს არ უჩვენდება. ეს არის მძღოლების დაცვა: სხვაგვარად ერთი სლოტი შეიძლება გადაიტვირთოს და ჩაშალოს მთელი მიწოდება.
Traffic windows
წესები „ZIP 33129 არ მიეწოდება 17:00-დან 19:00-მდე სამუშაო დღეებში". თითოეულ ZIP-ს შეიძლება ჰქონდეს თავისი ფანჯრები. ადმინკაში მენეჯერი ხსნის ეკრანს „Traffic windows" და რედაქტირებს — დეველოპერის დახმარების გარეშე.
ლოკალიზაცია
პლატფორმა მხარს უჭერს სამ ლოკალს: ინგლისური, რუსული, ესპანური. დაახლოებით 700 თარგმანის გასაღები. სამივე უნდა იყოს მხარდაჭერილი და შემოწმებული — კლიენტი მაიამიში შეიძლება ლაპარაკობდეს ნებისმიერ ამ ენაზე.
რეზიუმე
პლატფორმა — ეს არ არის „საიტი კალათით". ეს არის მომხმარებელთა ექვსი როლის, ხუთი ინტერფეისის, სამი ბოტის, მიწოდების ექვსი ზონის, გადახდის ექვსი ხერხისა და ერთმანეთში გადაჯაჭვული ათეული მექანიკის შეკვრა. ყოველი წვრილმანი — push-შეტყობინების პრიორიტეტიდან traffic window-ის წესამდე — გააზრებულია ისე, რომ შეკვეთა არ დაიკარგოს, ნაღდი ფული არ გადაიფანტოს, კლიენტი კი დაბრუნდეს.
პროექტი მუშაობს მაიამიში, ემსახურება რეგულირებად ნიშას, და კოდში ყოველი გადაწყვეტილება უნდა იყოს შეთანხმებული ოპერაციულ რეალობასთან: ქუჩის კურიერებთან, ხმამაღალი ტელეფონების მქონე დისპეტჩერებთან, მფლობელებთან, რომლებიც დღის ბოლოს დოლარის სიზუსტით ხურავენ ანგარიშებს.
დაკავშირებული ნაწილები
- Admin panel — ღრმა ჩაყვინთვა ადმინკაში: რა არის შიგნით, როგორ მუშაობს მენეჯერი, რა ანგარიშები შენდება.
- Tech stack — ტექნოლოგიური ნაწილი: მონორეპო, NestJS, Next.js, PostgreSQL, Docker, GitHub Actions, real-time, რიგები, Pushover, და ყველაფერი, რაც კაპოტის ქვეშაა.