UniMarket е пазар с много продавачи за Бангладеш на бенгалски и английски. Изградихме магазина, Seller Center, администраторския панел и инсталируемото приложение като един TypeScript проект и го пускаме на собствен сървър. Това е обиколка на решенията, които имаха най-голямо значение, и на причините за тях.

Технологиите и защо
| Слой | Избор | Защо |
|---|---|---|
| Приложение | Next.js 16, React 19 и TypeScript | Страниците, изградени на сървъра, държат JavaScript-а в браузъра малък, а един език покрива магазина, Seller Center, администрацията и API. |
| Стилове | Tailwind CSS 4 с дизайн токени | Малко CSS, а светлата и тъмната тема идват от едни и същи токени. |
| Данни | MongoDB със собствена инстанция | Гъвкавите документи пасват на продукти с различни опции, а отделната инстанция оставя другите услуги на сървъра недокоснати. |
| Вход | Еднократни кодове, Google и Apple, Firebase Auth за кодове по телефон | Купувачите в Бангладеш влизат с телефонен номер, а кодът не изисква парола, която да се забрави. |
| Хостинг | Собствен VPS, nginx, Cloudflare и Let’s Encrypt | Предвидима цена и пълен контрол над резервните копия, пощата и лимитите. |
Бързи страници, включително на бенгалски
Повечето страници, които вижда посетителят, са публични, затова са изградени да се кешират. Всичко лично, като броя в количката или името на влезлия потребител, се попълва отделно и не забавя страницата. Изображенията се преобразуват в съвременни формати с фиксирани размери при качването.
Шрифтовете бяха изненадата. Бенгалският уеб шрифт е голям: този, който пробвахме, беше около 200 KB. В нашия тест той струваше повече от десет точки от мобилния резултат за производителност на Lighthouse. Затова бенгалският текст използва шрифта, който вече е на телефона или компютъра, а малък шрифт на нашия хостинг покрива само латинските букви и цифри. Читателите виждат шрифта, който четат всеки ден, и не се изтегля нищо допълнително.
В нашия локален производствен билд Достъпност, Добри практики и SEO получиха 100 на всяка тествана страница, а мобилната Производителност беше между 93 и 98. Това са наши собствени измервания върху локален билд и по-късното добавяне на скриптове на трети страни би ги понижило.
Два езика, които наистина са два езика
Бенгалският и английският имат всеки свой адрес, с hreflang връзки помежду им, за да показват търсачките правилния. Всеки низ в интерфейса живее в типизиран речник, а билдът пропада, ако липсва бенгалски низ, така че наполовина преведена страница не може да излезе. Цените използват бенгалски цифри на бенгалски и латински цифри на английски.
Една поръчка, няколко продавачи
Една количка може да съдържа артикули от няколко магазина. Когато купувачът направи поръчката, плащането изчислява отново всяка цена от базата данни, вместо да вярва на браузъра, резервира наличността с една атомарна стъпка, разделя поръчката на по една пратка за всеки магазин и начислява по една такса за доставка за всеки магазин. Двукратното изпращане не създава две поръчки, а отказът връща наличността.
Парите се съхраняват в цели пойши, като една така е 100 пойши, така че никоя сума не се закръглява от десетична дроб.
Безопасно по подразбиране
- Продавачите могат да четат само собствените си поръчки и продукти, а персоналът получава само правата на ролята си. Персоналът влиза с парола и код от приложение за удостоверяване, а промените му се записват в журнал за одит.
- Уеб сървърът ограничава заявките за вход и към API, а приложението добавя собствени ограничения за потребител.
- Качените файлове се прекодират, което премахва скритите данни за местоположение от снимките, а документите за самоличност се съхраняват извън публичната папка.
- След преглед на сигурността поправихме първо двете находки за поемане на профил, а после находките със средна тежест.
Имейл, който пристига
UniMarket изпраща имейл на всяка стъпка от поръчката, така че доставянето е част от продукта. Пощата излиза през собствен пощенски сървър с DKIM подпис, а домейнът публикува записи SPF и DMARC. В нашите тестове имейлите за поръчки минаха и трите проверки и стигнаха до входящата поща, а не до спама.
Внедряване, което не чупи отворените раздели
Внедряването се изгражда на сървъра, превключва към новата версия и проверява дали е здрава. Втора команда връща предишната версия. Всяка версия има свой идентификатор на внедряването, така че когато купувач е оставил раздел отворен през внедряване, страницата забелязва, че бутоните ѝ са от стара версия, и се презарежда сама, вместо да покаже грешка.
Базата данни се архивира всяка нощ и се пазят последните 14 копия.
UniMarket е в ранен достъп с демонстрационен каталог. Пазарът е действащ и работи, а домейн unimarket.bd е планиран.
Фактите са проверени от екипа на 22Softwares спрямо действащото приложение UniMarket и ръководството на неговия Seller Center.