Arxivga qaytish
IV. Mijoz loyihalari va logistika platformalariqo'shimchaishtirokchimijoz anonimlashtirilgan

Ovqat yetkazish vitrinasi

Ishlab chiqarishdagi ovqat yetkazib berish platformasi (restaurant-chain.uz, Restaurant chain (UZ) tarmog'i / Restaurant chain (UZ)'ning yondosh brendi, O'zbekiston) — Vercel Next.js Commerce'ning forki bo'lib, maxsus API, ko'p shaharli routing va uch tilga moslashtirilgan.

Holat
qo'llab-quvvatlanadi
Davr
2020-09-21 → 2026-05-18
AI sessiyalar
Stek
Tillar
TypeScriptJavaScriptCSS
Freymvorklar · Infra
Next.js 14 (Pages Router)React 18Tailwind CSSreact-query v3react-hook-formLeaflet/react-leafletYandex Mapsnext-translatenext-pwaframer-motion
§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-query v3 (server state/polling), react-hook-form, axios + maxsus framework fetcher, 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 orasida root@choparpizza.uz, davr@restaurant-chain.uz).
  • Ma'lumotlar: tashqi API (API_URL / publicRuntimeConfig.apiUrl), state qatlami sifatida brauzer xotirasi: foydalanuvchi — localStorage mijoz (base64 JSON), joylashuv — sessionStorage yetkazish, 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-page operatsiyalari, cart/auth/wishlist hooklari, maxsus fetcher.ts. Bu forkni O'zbekiston backendiga moslashtirishning o'zagi.
  • Shaharga bog'liq routing — root / /{city_slug} ga yo'naltiradi (standart tashkent), barcha sahifalar pages/[city]/ ostida joylashgan, shahar validatsiyasi server tomonida getSiteInfo orqali (shahar topilmasa 404).
  • Xaritada buyurtma kuzatuvi (c8c6c7a7, 2025-avg, +899 qator): pages/[city]/track/[id]/ va pages/[city]/order/[id]/track/ sahifalari (toza CSR uchun .client.tsx patterni 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/public ning runtime fetchi + base64-dekod + sessionStorage olib tashlandi, o'rniga tipli NEXT_PUBLIC_LES_* env konfigi qo'yildi (lib/data/storefront-config.ts).
  • Perf/LCP tuzatish (cb93c2b5): MainSlider'da xom <img> next/image ga 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/Marker uchun dynamic(..., { ssr: false }), typeof window !== 'undefined' ostida shartli require('leaflet') va standart ikonalarni almashtirish (L.Icon.Default.mergeOptions) orqali hal qilingan. Kuryer joylashuvi react-query refetchInterval: 5000 orqali real vaqtda yangilanadi, u API success:false qaytargach 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-courier animatsiyasi bilan L.divIcon ichiga joylashtiriladi. Rang/ikona drive_type asosida tanlanadi. → React va imperativ Leaflet API o'rtasidagi nostandart ko'prik.
  • Xarita markazini hisoblash himoyasi (mapCenter useMemo): from/to koordinatalarining o'rtachasi, har bir qadamda isNaN tekshiruvlari 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 va pages/api/geocode.ts dan olib tashlaydi, env'dan tipli storefrontConfig ga 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): @commerce interfeyslarini (OperationContext, City/LinkItem/SocialIcons tiplari) amalga oshirish, menyu+shaharlar+kategoriyalarni yagona getSiteInfo ga agregatsiya qilish, currentCity ni 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/lesailesuz ijtimoiy havolalari va @restaurant-chain.uz, @choparpizza.uz muallif 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.
§07

Hissa qo'shganlar

git shortlog · barcha branchlar

  1. Dave93424
  2. Belen Curcio499
  3. Luis Alvarez415
  4. shahzodsalimsakov161
  5. root112
  6. cond0r60
  7. Franco Arza56
  8. Administrator49
  9. Julián Benegas34
  10. ghoskin27
  11. Boburt26
  12. Doniman24
57 hissador· yana +45 ko'rsatilmadijami 2011 ta kommit
Hozirda

Senior / Staff muhandis rollari va tanlab olingan frilansga ochiqman — prodakshn AI, platforma va full-stack ishlar.

Bog'lanish