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 записи. Во нашите тестови е-поштите за нарачки ги поминаа сите три проверки и стигнаа во сандачето, не во спам.
Распоредување без кршење на отворени јазичиња
Распоредувањето гради на серверот, преминува на новата верзија и проверува дали е здрава. Втора команда се враќа на претходната верзија. Секоја верзија има свој ID на распоредување, па кога купувач остави јазиче отворено преку распоредување, страницата забележува дека нејзините копчиња припаѓаат на стара верзија и сама се вчитува повторно, наместо да прикаже грешка.
Базата на податоци се бекапира секоја ноќ и се чуваат последните 14 бекапи.
UniMarket е во рана достапност со демо каталог. Пазарот е жив и работи, а се планира домен unimarket.bd.
Фактите се проверени од тимот на 22Softwares според живата апликација UniMarket и нејзиниот водич за Seller Center.