§01
Umumiy ko'rinish
- Bu nima: O'zbekiston uchun ovqat yetkazib berish e-commerce platformasi. Asos sifatida Vercel Next.js Commerce olingan, lekin provayder maxsus provayderga (
framework/local) almashtirilgan bo'lib, u mahsulotlar, kategoriyalar va buyurtmalar uchun tashqi REST/GraphQL API bilan ishlaydi. Ko'p shaharli routing (/[city]/...), 3 til (ru/uz/en), xaritada real vaqtda buyurtma kuzatuvi, PWA. - Turi / holati / roli: web-app · maintained · contributor (jamoaviy loyiha, yakka emas).
- Faol davr: loyiha asosi 2020-09 dan beri (Vercel upstream). Foydalanuvchining hissasi — 2021-06-18 dan 2026-05-18 gacha, ya'ni uzilishlar bilan ~5 yil; tirik (oxirgi kommit — 2026-may, config refaktoringi).
§02
Stek
- Tillar: TypeScript (asosiy), JavaScript, CSS modullari.
- Freymvork/kutubxonalar: Next.js
14.2.35(Pages Router), React 18, Tailwind CSS (JIT, maxsus breakpointlar va brend ranglari),react-queryv3 (server state/polling),react-hook-form,axios+ maxsusframeworkfetcher,leaflet/react-leaflet(buyurtma kuzatuvi),@pbe/react-yandex-maps+react-yandex-maps(manzil tanlash/geokodlash),next-translate(i18n),next-pwa,framer-motion,libphonenumber-js,react-otp-input,react-hot-toast,keen-slider/react-slick/@egjs/react-flicking(karuseller),next-seo,react-google-recaptcha-v3,react-facebook-pixel. - Infra/deploy: maxsus Express server (
server.js, port 4646), PM2 (ecosystem.config.js,pm2.config.js),nginx.conf,deploy.sh(standalone deploy). CI yo'q; pre-commit — husky + lint-staged (prettier). Hosting — o'z serverlarida (mualliflar orasidaroot@choparpizza.uz,davr@restaurant-chain.uz). - Ma'lumotlar: tashqi API (
API_URL/publicRuntimeConfig.apiUrl), state qatlami sifatida brauzer xotirasi: foydalanuvchi — localStoragemijoz(base64 JSON), joylashuv — sessionStorageyetkazish, faol shahar — cookie (activeCity,city_slug). Lokallar API'dan runtime'da olinadi (/api/get_langs). - E'tiborga molik tooling: GraphQL codegen (Commerce'dan meros, faol emas),
bun.lockb+yarn.lock+package-lock.json(uchta lock fayl → vaqt o'tishi bilan paket menejerlari o'zgargan),next-unused(o'lik kodni aniqlash uchun), BUNDLE_ANALYZE.
§03
Nima qilindi
IMPORTANT: foydalanuvchining kommit xabarlarining aksariyati chaqana ("asdf", "asd", "remove", "s"), shu sababli quyidagi bandlar kommit matnidan emas, balki kod/diflarning o'zidan chiqarilgan.
- Maxsus commerce provayderi `framework/local` — Shopify/BigCommerce/Swell o'rniga maxsus API qatlami qo'yildi:
get-site-info,get-all-products,get-product,get-pageoperatsiyalari, cart/auth/wishlist hooklari, maxsusfetcher.ts. Bu forkni O'zbekiston backendiga moslashtirishning o'zagi. - Shaharga bog'liq routing — root
//{city_slug}ga yo'naltiradi (standarttashkent), barcha sahifalarpages/[city]/ostida joylashgan, shahar validatsiyasi server tomonidagetSiteInfoorqali (shahar topilmasa 404). - Xaritada buyurtma kuzatuvi (
c8c6c7a7, 2025-avg, +899 qator):pages/[city]/track/[id]/vapages/[city]/order/[id]/track/sahifalari (toza CSR uchun.client.tsxpatterni bilan). - OTP avtorizatsiya — "otpinput", "otp", "otpinput upgrade" kommitlari zanjiri (
react-otp-input), shuningdek "creditcard", "payment", "payment type" — to'lov va tasdiqlash oqimi. - Transport turiga qarab kuryer ikonasi (
b9420dd0, 2025-sen):drive_type(velosiped/piyoda/mashina) → turli lucide-react/react-icons ikonalari. - Config refaktoringi (
5ff70a20, 2026-may): 8 ta klient komponentidan/api/configs/publicning runtime fetchi + base64-dekod + sessionStorage olib tashlandi, o'rniga tipliNEXT_PUBLIC_LES_*env konfigi qo'yildi (lib/data/storefront-config.ts). - Perf/LCP tuzatish (
cb93c2b5): MainSlider'da xom<img>next/imagega almashtirildi, ishlatilmagan Flicking importlari olib tashlandi. - Standalone deploy (
1c41379a): deploy.sh + PM2 + nginx. - Hajm: 2011 tadan 403 ta kommit foydalanuvchiniki (qolgani Vercel upstream: Luis Alvarez 401, Belen Curcio 352 va h.k., + jamoa: shahaa/Shahzod 154, Doniman, Ilhombek, Boburt). Faollik to'lqinlarda: 2023 (buyurtmalar/kategoriyalar/kartalar), 2025 (kuzatuv, kuryerlar), 2026 (config refaktoringi) da cho'qqilar. Loyiha tirik va qo'llab-quvvatlanadi.
§04
Texnik chellenjlar
- SSR-xavfsiz Leaflet kuzatuvi polling bilan (
pages/[city]/track/[id]/index.client.tsx): Leaflet SSR bilan mos kelmaydi →MapContainer/TileLayer/Markeruchundynamic(..., { ssr: false }),typeof window !== 'undefined'ostida shartlirequire('leaflet')va standart ikonalarni almashtirish (L.Icon.Default.mergeOptions) orqali hal qilingan. Kuryer joylashuvireact-queryrefetchInterval: 5000orqali real vaqtda yangilanadi, u APIsuccess:falseqaytargach o'chiriladi (shouldFetch=false) — o'lik buyurtmani cheksiz pollingdan himoya. → Ko'rsatadi: SSR/hydration tushunchasi, real vaqt UX'i va so'rov hayot siklini boshqarish. - React komponentidan maxsus Leaflet ikonasi (o'sha fayl,
getCourierIcon): React ikonasi (lucide/react-icons)renderToStaticMarkup(<IconComponent/>)orqali stringga render qilinadi va inline CSS@keyframes pulse-courieranimatsiyasi bilanL.divIconichiga joylashtiriladi. Rang/ikonadrive_typeasosida tanlanadi. → React va imperativ Leaflet API o'rtasidagi nostandart ko'prik. - Xarita markazini hisoblash himoyasi (
mapCenteruseMemo): from/to koordinatalarining o'rtachasi, har bir qadamdaisNaNtekshiruvlari va kaskadli fallback bilan (from+to → from → to → faol shahar uchun standart). → API'dan to'liq bo'lmagan ma'lumotlar bilan chegara holatlarni ehtiyotkorlik bilan qayta ishlash. - Runtime configni env bilan almashtirish (
5ff70a20): dif "fetch → Buffer.from(base64) → JSON.parse → sessionStorage" patternini 8 ta komponent vapages/api/geocode.tsdan olib tashlaydi, env'dan tiplistorefrontConfigga o'tadi. → Kamroq klient round-trip va tip xavfsizligi uchun refaktoring; yetuk muhandislik qarori (garchi AI yordamida bo'lsa-da — pastga qarang). - Vercel Commerce provayder abstraksiyasi begona API ustida (
framework/local/api/operations/get-site-info.ts,fetcher.ts):@commerceinterfeyslarini (OperationContext,City/LinkItem/SocialIconstiplari) amalga oshirish, menyu+shaharlar+kategoriyalarni yagonagetSiteInfoga agregatsiya qilish,currentCityni slug bo'yicha aniqlash. → Boshqa birovning plagin arxitekturasi ichida uning kontraktlarini buzmasdan ishlash.
§05
AI yordamida ishlab chiqish
- Topilgan sessiyalar: 0 — bu loyiha uchun lokal Claude Code sessiyalari katalogi mavjud emas (qo'shni chopar/les-* loyihalarida bor, lekin bunda yo'q).
- AI bilan nima qilingan: shu bilan birga, 5 ta kommit `Co-Authored-By: Claude (Opus 4.7, 1M context)` tegiga ega — bu AI ishlatilganini bildiradi, lekin bu repo uchun qayd etilgan CC sessiyasisiz (ehtimol boshqa katalog/asbobdan). AI yordamidagi kommitlar: env config refaktoringi (
5ff70a20), standalone PM2+nginx deploy (1c41379a), next/image bilan LCP tuzatish (cb93c2b5), DNS fetch tuzatish + 404 redizayni (6762281b), merge (73f6c10b). - AI-vorkflow patternlari: AI tor doiradagi, aniq chegaralangan vazifalar uchun ishlatilgan — aniq qamrovli refaktoringlar ("8 komponent", "5 kalit"), perf optimizatsiya, infra ulash. Bu kommitlardagi xabarlar qolganlaridan sezilarli darajada yaxshi (tuzilgan, o'zgarishlarning bandlar ro'yxati bilan) — AI yordamining klassik izi.
- Loyihada to'liq Claude Code sessiyalari mavjud emas.
§06
Yutuqlar va metrikalar
- Haqiqiy ishlab chiqarish: restaurant-chain.uz — restoran tarmog'ining tirik sayti (kodda
facebook.com/lesailesuz,instagram.com/lesailesuzijtimoiy havolalari va@restaurant-chain.uz,@choparpizza.uzmuallif domenlari bilan tasdiqlangan). - Kod bazasi ko'lami: jami 2011 kommit, ~403 tasi foydalanuvchiniki; ko'p shaharli + 3 til (ru/uz/en);
components_new/ostida ~24 komponent katalogi (header, cart, order, profile, sale, delivery, branch, news…). - Uzoq umr: ~5 yil qo'llab-quvvatlash (2021→2026), bu o'zi haqiqiy ishlab chiqarishda qo'llanilishining belgisi.
- Integratsiyalar (koddan): OpenStreetMap/Leaflet, Yandex Maps + geokoder, Facebook Pixel, reCAPTCHA v3, to'lov turlari, OTP tasdiqlash, PWA.