World Vibe Web
The distributed app store for vibe-coded projects. Browse, discover, and install open-source apps from across GitHub.
Kasb Egalari — O'zbekiston ijodkorlari va barcha onlayn kasb egalari uchun platforma: videograf, dizayner, montajchi va boshqa mutaxassislar katalogi, xavfsiz buyurtma, jamoalar va kanallar, jonli efi
Translation pending
CommerceTypeScript · CSSGitHub @gafurovabdulloh72-delOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Kasb Egalari — O'zbekiston ijodkorlari va barcha onlayn kasb egalari uchun platforma: videograf, dizayner, montajchi va boshqa mutaxassislar katalogi, xavfsiz buyurtma, jamoalar va kanallar, jonli efirlar, to'lovsiz vakansiyalar va rezyumelar.
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗Kasb Egalari — O'zbekistonning 14 ta hududi bo'ylab videograf, montajor, dizayner va boshqa ijodiy mutaxassislarni bir joyda topish platformasi. Mijoz interaktiv xaritada viloyatni bosadi, portfolio va narxlarni ko'radi, to'g'ridan-to'g'ri buyurtma beradi. Mutaxassis esa bepul ro'yxatdan o'tib, profil va portfoliosini joylaydi — buyurtmalar kabinetiga keladi.
/xarita) — hududlar mutaxassislar soniga qarab bo'yaladi (choropleth). Hududni bosing — ro'yxat chiqadi; yo'nalish tanlansa xarita ranglari ham shu yo'nalish bo'yicha qayta hisoblanadi. Holat URL bilan sinxron (?region=&category=)./mutaxassislar) — qidiruv, yo'nalish, hudud, narx, tajriba, "faqat tasdiqlanganlar" filtrlari, saralash va sahifalash./admin) — statistika, yangi profillarni tasdiqlash, "tavsiya etilgan" belgisi, o'chirish, so'nggi foydalanuvchilar va buyurtmalar.sitemap.xml, robots.txt, Open Graph, PWA manifest.Barcha interfeys matnlari o'zbek tilida (lotin).
| Qatlam | Nima ishlatilgan |
|---|---|
| Framework | Next.js 15 (App Router, Server Components, Route Handlers), React 19, TypeScript (strict) |
| Uslub | Tailwind CSS v4, "Studio" dizayn tizimi (src/app/globals.css), lokal shriftlar: Unbounded, Manrope, Instrument Serif |
| Ma'lumotlar bazasi | SQLite / libSQL (@libsql/client) + Drizzle ORM (drizzle-kit push bilan sxema) |
| Autentifikatsiya | Cookie'dagi JWT (jose), parollar bcryptjs bilan xeshlanadi, middleware.ts himoyalangan yo'llarni tekshiradi |
| Tekshiruv | Zod sxemalari (src/lib/validators.ts) — API va formalar uchun bitta manba |
| Ikonkalar | lucide-react |
| Xarita | Inline SVG, geoBoundaries ma'lumotlaridan avtomatik yaratilgan yo'llar |
Talablar: Node.js 20+ va npm.
cp .env.example .env # muhit o'zgaruvchilari
npm i # bog'liqliklar
npm run db:push # SQLite sxemasini yaratish (data/redince.db)
npm run db:seed # namuna ma'lumotlar: admin, mijozlar, 65 ta mutaxassis, sharhlar, buyurtmalar
npm run dev # http://localhost:3000
Boshqa skriptlar:
| Skript | Vazifasi |
|---|---|
npm run build / npm start | Production build va server |
npm run typecheck | tsc --noEmit |
npm run db:reset | Bazani o'chirib, qayta yaratish va to'ldirish |
npm run db:studio | Drizzle Studio (bazani brauzerda ko'rish) |
.env)| Kalit | Tavsif |
|---|---|
DATABASE_URL | file:./data/redince.db (lokal) yoki libsql://xxx.turso.io |
DATABASE_AUTH_TOKEN | Turso ishlatilsa — token |
AUTH_SECRET | JWT imzosi uchun uzun tasodifiy satr (kamida 32 belgi): openssl rand -base64 48 |
ADMIN_EMAIL, ADMIN_PASSWORD | Seed paytida yaratiladigan admin hisobi |
npm run db:seed dan keyin:
| Rol | Parol | |
|---|---|---|
| Admin | [email protected] | admin12345 |
| Mutaxassis | [email protected] | demo12345 |
| Mijoz | [email protected] | demo12345 |
Qolgan mutaxassislar uchun ham parol demo12345.
src/
├─ app/
│ ├─ page.tsx # Bosh sahifa (hero xarita, yo'nalishlar, tavsiya etilganlar)
│ ├─ xarita/ # To'liq xarita rejimi (MapExplorer)
│ ├─ mutaxassislar/ # Katalog + [slug] profil sahifasi
│ ├─ buyurtma/[id]/ # Buyurtma berish formasi
│ ├─ auth/kirish, auth/royxat # Kirish / ro'yxatdan o'tish
│ ├─ kabinet/ # Umumiy, buyurtmalar, profil, portfolio
│ ├─ admin/ # Admin panel
│ ├─ api/ # Route Handlers (quyidagi jadval)
│ ├─ not-found.tsx # 404
│ ├─ layout.tsx, globals.css # Asosiy layout va dizayn tizimi
│ └─ sitemap.ts, robots.ts, manifest.ts
├─ components/
│ ├─ ui/ # Primitivlar: Button, Badge, Avatar, Stars, Card, SectionHeading, EmptyState…
│ ├─ map/ # UzbekistanMap (SVG), MapExplorer, HomeMapSection, regions-geo.ts
│ ├─ specialists/ # Karta, filtrlar, sahifalash, portfolio galereyasi, sharhlar
│ ├─ orders/ # Buyurtma formasi va ro'yxati
│ ├─ kabinet/ # Kabinet navigatsiyasi va formalar
│ ├─ admin/ # AdminSpecialistsTable
│ └─ layout/ # Navbar, Footer, ThemeToggle, Backdrop
├─ lib/
│ ├─ db/schema.ts # Drizzle sxemasi (users, specialists, portfolio_items, orders, reviews)
│ ├─ db/seed.ts # Namuna ma'lumotlar
│ ├─ queries.ts # Server tomonidagi so'rovlar (server-only)
│ ├─ auth.ts # Sessiya, JWT, parol
│ ├─ api.ts # Route handler yordamchilari (ok / fail / parseBody / requireSession)
│ ├─ validators.ts # Zod sxemalari
│ ├─ constants.ts # 14 hudud, 8 yo'nalish, buyurtma holatlari
│ └─ utils.ts # cn, formatPrice, slugify, timeAgo…
├─ fonts/ # Unbounded, Manrope, Instrument Serif (woff2)
└─ middleware.ts # /kabinet, /admin, /buyurtma himoyasi
Barcha javoblar bir xil ko'rinishda:
{ "ok": true, "data": { } }
{ "ok": false, "error": "Xabar", "fields": { "email": "Email band" } }
| Metod | Yo'l | Kirish | Tavsif |
|---|---|---|---|
POST | /api/auth/register | — | Ro'yxatdan o'tish (role: client | specialist), sessiya cookie o'rnatiladi |
POST | /api/auth/login | — | Kirish |
POST | /api/auth/logout | — | Chiqish |
GET | /api/auth/me | — | Joriy foydalanuvchi (yoki null) |
GET | /api/specialists | — | Katalog. Parametrlar: q, region, category, priceMax, experience, verified=1, sort (rating|popular|newest|price_asc|price_desc), page, limit (≤60) → { items, total, page, pages } |
GET | /api/specialists/[slug] | — | Profil: portfolio va sharhlar bilan |
GET | /api/regions/stats | — | Hududlar va yo'nalishlar bo'yicha sonlar (xarita uchun) |
PUT | /api/profile | mutaxassis / admin | Mutaxassis profilini yaratish yoki yangilash |
PATCH | /api/profile | har qanday | Akkaunt: ism, telefon, avatar |
POST | /api/portfolio | mutaxassis / admin | Portfolio ishi qo'shish (ko'pi bilan 30 ta; YouTube uchun thumbnail avtomatik) |
DELETE | /api/portfolio/[id] | egasi / admin | Ishni o'chirish |
POST | /api/orders | har qanday | Buyurtma yuborish |
GET | /api/orders | har qanday | Mening buyurtmalarim (mijoz va mutaxassis sifatida) |
PATCH | /api/orders/[id] |
Hudud chegaralari geoBoundaries (gbOpen, UZB ADM1) ma'lumotlar to'plamidan olingan — litsenziya CC BY 4.0. GeoJSON equirectangular proyeksiyada (o'rta kenglik bo'yicha tuzatilgan) tekislikka o'tkazilib, Douglas–Peucker algoritmi bilan soddalashtirilgan va src/components/map/regions-geo.ts fayliga SVG path ko'rinishida yozilgan (fayl avtomatik yaratilgan, qo'lda tahrirlanmaydi). Har bir hududning markazi (cx, cy) markerlar va yorliqlar uchun ishlatiladi.
Manba: geoboundaries.org — Runfola, D. et al. (2020). geoBoundaries: A global database of political administrative boundaries.
AUTH_SECRET majburiy. Productionda u o'rnatilmagan bo'lsa server ishga tushmaydi (dev rejimida vaqtinchalik kalit ishlatiladi). Kalit almashtirilsa barcha sessiyalar bekor bo'ladi.DATABASE_URL=libsql://… va DATABASE_AUTH_TOKEN. Sxemani npm run db:push bilan yuboring./api/upload fayllarni public/uploads ichiga yozadi — bu faqat doimiy diskli serverda ishlaydi. Productionda S3 / Cloudflare R2 kabi obyekt saqlovchiga almashtiring (handler bitta joyda: src/app/api/upload/route.ts).next.config.ts → images.remotePatterns da ro'yxatdan o'tkaziladi.httpOnly, sameSite=lax, productionda secure — sayt HTTPS orqali xizmat qilishi kerak.ADMIN_PASSWORD) albatta o'zgartiring.Loyiha kodi — xususiy. Xarita ma'lumotlari — geoBoundaries, CC BY 4.0. Shriftlar — SIL Open Font License.
| tomonlar / admin |
| Holatni o'zgartirish (ruxsat etilgan o'tishlar tekshiriladi) |
POST | /api/reviews | har qanday | Sharh qoldirish / yangilash (bitta mutaxassisga bitta) |
POST | /api/upload | har qanday | Rasm yuklash (multipart/form-data, file, ≤5 MB, jpg/png/webp/gif) → public/uploads |
PATCH | /api/admin/specialists/[id] | admin | { isVerified?, isFeatured? } |
DELETE | /api/admin/specialists/[id] | admin | Mutaxassisni o'chirish (cascade) |