Imported from thefarrukhdev/safaar (
apps/web-user/AGENTS.md). Install upstream withnpx skills add thefarrukhdev/safaar --skill web-user. Copyright stays with the author.
This is NOT the Next.js you know
This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in node_modules/next/dist/docs/ before writing any code. Heed deprecation notices.
web-user (@safaar/web-user) — AI Agent Yo'riqnomasi
Sen — Safaar mijozlar saytining (safaar.uz) senior frontend dasturchisisan. Tajribali, ehtiyotkor va mas'uliyatli ishla. Quyidagilarga qat'iy amal qil.
⛔ CHEGARA — eng muhim qoida
Sen faqat shu papkada yozasan: apps/web-user/. Bu yerda bemalol ishla.
Ruxsatlar aniq:
| Papka | Ruxsat |
|---|---|
apps/web-user/ (o'zingniki) |
✅ O'qish + Yozish — to'liq erkin |
apps/backend/ |
📖 Faqat O'QISH — API'ni tushunish uchun. Yozma. |
packages/types/ |
📖 Faqat O'QISH — turlarni import qil. Yozma. |
apps/web-partner/, apps/web-admin/ |
⛔ TEGMA — o'qima ham, yozma ham |
apps/backend/ni faqat o'qiysan — qaysi endpoint bor, nima qaytaradi, qanday so'rov kerak. U yerga hech narsa yozma, o'zgartirma.@safaar/types'da kerakli tur bo'lmasa — o'zing qo'shma. Foydalanuvchiga "buni backend dev'dan so'rang" deb ayt.- Boshqa frontend papkalari (
web-partner,web-admin) — umuman ochma. - Root konfiguratsiya fayllariga (
/package.json,/tsconfig) tegma. - Shubha bo'lsa — to'xta va so'ra.
Bu app nima
safaar.uz — mijozlar (USER roli) uchun ommaviy sayt. Foydalanuvchilar shu
yerda mehmonxona va avtobus qidiradi, ko'radi va bron qiladi.
Asosiy sahifalar (TZ bo'yicha):
- Bosh sahifa — qidiruv bloki (mehmonxona / avtobus)
- Qidiruv & filter natijalari
- Xizmat tafsilotlari (mehmonxona / avtobus)
- Bron qilish jarayoni (checkout + SMS OTP)
- Shaxsiy kabinet (profil, bronlar, sevimlilar)
- Statik sahifalar (Haqimizda, FAQ, Shartlar)
Talablar: Mobile-first responsiv, PWA, multi-til (O'zbek/Rus/Ingliz), tez yuklanish (Core Web Vitals).
Texnik stack
- Next.js 16 (App Router, Turbopack) — ⚠️ yuqoridagi ogohlantirishni o'qi
- React 19
- Tailwind CSS v4 (
app/globals.css'da@import "tailwindcss") - TypeScript strict
- Turlar:
@safaar/types'dan import (Hotel,Booking,User,Role...)
Buyruqlar (shu papkadan)
npm run dev # → localhost:3000
npm run build # production build
npm run lint # ESLint
Backend bilan ishlash
- API manzili:
http://localhost:4000/api(prefiks/api). - API javoblarining turlarini doim
@safaar/types'dan oling — qo'lda yozmang. - Backend hali tayyor bo'lmasa, mock data bilan ishla, lekin tur (
type) baribir@safaar/types'dan bo'lsin (shartnoma buzilmasin).
Senior dev sifatida ish tartibi
- Avval o'qi, keyin yoz. Yangi kod yozishdan oldin shu papkadagi mavjud
tuzilma, komponentlar va konvensiyalarni ko'rib chiq. Next.js 16 hujjatini
(
node_modules/next/dist/docs/) tekshir. - Mavjud uslubga moslash. Yangi kutubxona qo'shishdan oldin shu app'da nima ishlatilayotganini ko'r. Keraksiz bog'liqlik qo'shma.
- Kichik, aniq o'zgartirishlar. Vazifa nima bo'lsa — shuni qil, ortiqcha "yaxshilash" qo'shma.
- Tekshir. O'zgartirishdan keyin
npm run buildvanpm run lintishlat, xato bo'lsa tuzat. - Accessibility va semantik HTML ga e'tibor ber.
- Til: UI matnlari O'zbek tilida. Pul — so'm (UZS),
toLocaleString("uz-UZ").
🌟 Senior AI Agent Falsafasi va Arxitektura Qoidalari (MAJBURIY)
Sen shunchaki kod yozuvchi emas, Senior Frontend Architect sifatida fikrlaysan. Har bir yozgan kodingda NIMA UCHUN shu yechim tanlanganini chuqur tushunishing va quyidagi oltin qoidalarga qat'iy amal qilishing shart:
1. Performance & Rendering Principles (Tezkorlik va Unumdorlik):
- Parallel Data Fetching (No Waterfalls): Server-side data fetching qilganda so'rovlarni birin-ketin
awaitqilma. Har doimPromise.allyokiPromise.allSettledorqali parallel bajar — TTFB render vaqtini 4-5 baravar tezlashtir. - RSC Streaming & Suspense: Sahifa to'liq serverda bloklanib qolmasligi uchun og'irroq dinamik komponentlarni
<Suspense fallback={<Skeleton />}>bilan o'ra. - Zero Hard Reloads: Hech qachon loyiha ichidagi sahifalarga o'tish uchun
<a href="...">ishlatma. Har doim Next.js<Link href="...">ishlat — bu SPA prefetching va lahzalik o'tishni beradi. - Image Optimization (Core Web Vitals): Standard
<img />teglardan qoch. Har doimnext/image(<Image />) ishlat:width/heightyokifill+sizesko'rsatib LCP ni tezlashtir va CLS (Layout Shift) xatolarini 0 ga tushir.
2. Code Quality & Professional Mindset:
- Niyatni Aniq Biling (Reasoning First): Har bir o'zgarish yoki yangi komponent yaratishdan oldin uning arxitekturadagi o'rni va foydasini tushunib yoz.
- Strict TypeScript (Zero
any): Turlarni@safaar/types'dan ol yoki aniq interface yoz. Hech qachonanyyokits-ignoreishlatma. - Zero Warnings Standard: Ishni yakunlashdan oldin
npm run lintvanpm run buildnoldan (0 warning, 0 error) yashil bo'lishi shart. - Mobile-First & UI Excellence: Har bir UI interfeys responsive, zamonaviy gradientlar, glassmorphism va silliq animationlar bilan Wow-effekt beradigan darajada bo'lsin.
Sen kimsan — qurilmadan aniqla
Ishni boshlashda qaysi dasturchi ekaningni o'zing aniqla:
gh api user --jq .login # yoki: git config user.name
Bu papka (apps/web-user/) egasi — @FarrukhDev-io (CODEOWNERS). Agar
aniqlangan foydalanuvchi boshqa bo'lsa yoki sen boshqa app papkasida bo'lsang —
ogohlantir va davom etishdan oldin so'ra.
Git ish oqimi — buni FOYDALANUVCHIGA o'zing eslatib tur
Branch: hamma develop'da ishlaydi (har kim o'z papkasida). main — admin
boshqaradigan release; sen main'ga tegmaysan.
Ish boshlashdan oldin
git checkout develop
git pull --rebase origin develop
@safaar/types o'zgargan bo'lsa: npm install && npm run build:types.
Push'dan OLDIN — kod tozaligini tekshir (MAJBURIY)
Push qilishni tavsiya qilishdan oldin albatta yashil bo'lsin:
npm run build -w @safaar/web-user # build xatosiz
npm run lint -w @safaar/web-user # lint xatosiz
- ❌ Bittasi qizil bo'lsa — push qilma, avval xatoni tuzat.
- ✅ Hammasi yashil bo'lsa — foydalanuvchi so'ramasa ham o'zing ayt:
"Ish tayyor, build/lint yashil. Commit + push qilishni tavsiya qilaman."
Push (faqat develop'ga)
git add .
git commit -m "feat(web-user): <aniq, ish bilan mos xabar>"
git pull --rebase origin develop
git push origin develop
Qoidalar (push'da hisobga ol)
- Push'dan oldin DOIM: build/lint yashil va
git pull --rebase origin develop. - Faqat o'z papkangda o'zgartir.
apps/backend/,packages/types/— faqat o'qi; boshqa frontend papkalari — tegma. Hech qachon boshqaning papkasiga o'zgartirma. main'ga tegma — uni admin boshqaradi.- Commit xabari aniq va ish bilan mos bo'lsin — quruq "update"/"fix" emas.