Initial commit: İlanHub project plan and documentation
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,35 @@
|
|||||||
|
# Database (Kenan belirleyecek ORM ile)
|
||||||
|
DATABASE_URL=postgresql://ilanhub:secret@localhost:5432/ilanhub
|
||||||
|
|
||||||
|
# Redis
|
||||||
|
REDIS_URL=redis://localhost:6379
|
||||||
|
|
||||||
|
# MinIO
|
||||||
|
MINIO_ENDPOINT=localhost:9000
|
||||||
|
MINIO_ACCESS_KEY=minioadmin
|
||||||
|
MINIO_SECRET_KEY=minioadmin
|
||||||
|
|
||||||
|
# Auth
|
||||||
|
JWT_SECRET=change-me
|
||||||
|
|
||||||
|
# Bots
|
||||||
|
TELEGRAM_BOT_TOKEN=
|
||||||
|
VIBER_AUTH_TOKEN=
|
||||||
|
WHATSAPP_TOKEN=
|
||||||
|
WHATSAPP_PHONE_NUMBER_ID=
|
||||||
|
|
||||||
|
# Meta (Instagram yayın + WhatsApp)
|
||||||
|
META_APP_ID=
|
||||||
|
META_APP_SECRET=
|
||||||
|
|
||||||
|
# Ödeme (Ukrayna)
|
||||||
|
MONOPAY_TOKEN=
|
||||||
|
MONOPAY_WEBHOOK_SECRET=
|
||||||
|
LIQPAY_PUBLIC_KEY=
|
||||||
|
LIQPAY_PRIVATE_KEY=
|
||||||
|
BANK_TRANSFER_IBAN=
|
||||||
|
BANK_TRANSFER_RECIPIENT=
|
||||||
|
|
||||||
|
# Lokalizasyon
|
||||||
|
DEFAULT_LOCALE=uk
|
||||||
|
DEFAULT_CURRENCY=UAH
|
||||||
+12
@@ -0,0 +1,12 @@
|
|||||||
|
node_modules/
|
||||||
|
dist/
|
||||||
|
build/
|
||||||
|
.next/
|
||||||
|
.turbo/
|
||||||
|
.env
|
||||||
|
.env.local
|
||||||
|
*.log
|
||||||
|
.DS_Store
|
||||||
|
coverage/
|
||||||
|
.idea/
|
||||||
|
.vscode/
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
# İlanHub
|
||||||
|
|
||||||
|
[](https://github.com/kadobey003/ilanhub)
|
||||||
|
|
||||||
|
Ukrayna pazarı için çok kanallı ilan platformu.
|
||||||
|
|
||||||
|
**GitHub:** [kadobey003/ilanhub](https://github.com/kadobey003/ilanhub)
|
||||||
|
|
||||||
|
## Özet
|
||||||
|
|
||||||
|
- **İlan verme:** Telegram, Viber, WhatsApp, Web
|
||||||
|
- **Otomatik yayın:** Telegram, Viber, WhatsApp, Instagram, Web
|
||||||
|
- **Dil:** Ukraynaca (`uk`)
|
||||||
|
- **Para birimi:** UAH (₴)
|
||||||
|
- **Ödeme:** Monopay, LiqPay, banka havalesi
|
||||||
|
- **Stack:** NestJS, Next.js, React Admin, Docker, Redis, PostgreSQL
|
||||||
|
|
||||||
|
## Projeler (örnek)
|
||||||
|
|
||||||
|
Horeca, İş İlanları, Araba Satışları — tek admin çatısı altında çoklu vertical.
|
||||||
|
|
||||||
|
## Akış
|
||||||
|
|
||||||
|
1. Kullanıcı bot veya siteden ilan verir
|
||||||
|
2. Moderatör onaylar
|
||||||
|
3. Sistem tüm aktif kanallara otomatik yayınlar
|
||||||
|
|
||||||
|
## Dokümantasyon
|
||||||
|
|
||||||
|
Detaylı mimari plan: [docs/PLAN.md](docs/PLAN.md)
|
||||||
|
|
||||||
|
## Geliştirme Fazları
|
||||||
|
|
||||||
|
| Faz | İçerik |
|
||||||
|
|-----|--------|
|
||||||
|
| 1 | Altyapı + UI temeli |
|
||||||
|
| 2 | Moderasyon + Telegram bot |
|
||||||
|
| 3 | Viber + WhatsApp |
|
||||||
|
| 4 | Instagram yayını + ödeme |
|
||||||
|
| 5 | Prod hazırlık |
|
||||||
|
| 6 | Şehir filtreleri + abonelik |
|
||||||
|
| 7 | VIP, analitik, kullanıcı hesabı |
|
||||||
|
|
||||||
|
## Karar Bekleyen
|
||||||
|
|
||||||
|
- **Kenan:** ORM / veritabanı seçimi (Drizzle, TypeORM, Supabase, MongoDB)
|
||||||
|
|
||||||
|
## Kurulum
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp .env.example .env
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
> Kod henüz scaffold aşamasında değil — şu an sadece plan reposu.
|
||||||
+242
@@ -0,0 +1,242 @@
|
|||||||
|
# İlanHub — Mimari Plan
|
||||||
|
|
||||||
|
> **GitHub:** [kadobey003/ilanhub](https://github.com/kadobey003/ilanhub)
|
||||||
|
|
||||||
|
## 1. Genel Bakış
|
||||||
|
|
||||||
|
| Alan | Değer |
|
||||||
|
|------|-------|
|
||||||
|
| Pazar | Ukrayna |
|
||||||
|
| Arayüz dili | Ukraynaca (`uk`) |
|
||||||
|
| Para birimi | UAH (₴) |
|
||||||
|
| Stack | NestJS, Next.js, React Admin, Docker |
|
||||||
|
| Monorepo | Turborepo + pnpm |
|
||||||
|
| DB kararı | **Kenan belirleyecek** |
|
||||||
|
|
||||||
|
### Kanal Matrisi
|
||||||
|
|
||||||
|
| Tür | Kanallar |
|
||||||
|
|-----|----------|
|
||||||
|
| **İlan verme** | Telegram, Viber, WhatsApp, Web |
|
||||||
|
| **Otomatik yayın** | Telegram, Viber, WhatsApp, Instagram, Web |
|
||||||
|
|
||||||
|
Instagram'dan ilan **verilemez** — sadece onay sonrası otomatik feed yayını.
|
||||||
|
|
||||||
|
### Çoklu Proje
|
||||||
|
|
||||||
|
Tek admin altında birden fazla vertical: Horeca, İş İlanları, Araba vb. Her projenin kendi kategorileri, kanalları, fiyatları ve moderatörleri.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Sistem Mimarisi
|
||||||
|
|
||||||
|
```
|
||||||
|
Kullanıcı (TG/VB/WA/Site)
|
||||||
|
↓
|
||||||
|
NestJS API ← Pricing Engine
|
||||||
|
↓
|
||||||
|
Moderasyon (Admin)
|
||||||
|
↓
|
||||||
|
BullMQ Worker → Telegram / Viber / WhatsApp / Instagram / Site
|
||||||
|
```
|
||||||
|
|
||||||
|
### Docker Servisleri
|
||||||
|
|
||||||
|
| Servis | Görev |
|
||||||
|
|--------|-------|
|
||||||
|
| nginx | Reverse proxy, SSL |
|
||||||
|
| api | NestJS REST + webhooks |
|
||||||
|
| admin | React moderatör paneli |
|
||||||
|
| web | Next.js public site |
|
||||||
|
| bot-telegram / bot-viber / bot-whatsapp | İlan verme botları |
|
||||||
|
| worker | Kanal yayın kuyruğu |
|
||||||
|
| postgres | Ana DB |
|
||||||
|
| redis | Kuyruk + cache + bot session |
|
||||||
|
| minio | Medya depolama |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Uçtan Uca Akış
|
||||||
|
|
||||||
|
### Admin Kurulumu
|
||||||
|
1. Proje oluştur (slug, kategori)
|
||||||
|
2. İlan verme + yayın kanallarını aç
|
||||||
|
3. Fiyat planı ve ödeme yöntemleri (Monopay, LiqPay, havale)
|
||||||
|
4. Moderatör ata, bot token ve kanal ID gir
|
||||||
|
|
||||||
|
### İlan Verme (Bot State Machine)
|
||||||
|
1. `SELECT_PROJECT` → 2. `SELECT_CATEGORY` → 3. `SELECT_CITY`
|
||||||
|
4. `ADD_POSITIONS` → 5. `ENTER_DETAILS` → 6. `UPLOAD_MEDIA`
|
||||||
|
7. `CONFIRM_PREVIEW` → 8. `PAYMENT` (gerekirse) → 9. `SUBMITTED`
|
||||||
|
|
||||||
|
### Moderasyon → Yayın
|
||||||
|
- Moderatör onaylar → worker paralel yayın
|
||||||
|
- Bir kanal hata verse diğerleri devam eder
|
||||||
|
- Kullanıcıya bot ile bildirim (Ukraynaca)
|
||||||
|
|
||||||
|
### Listing Durumları
|
||||||
|
`draft` → `pending_payment` / `pending_moderation` → `approved` → `publishing` → `published`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Ödeme (Ukrayna)
|
||||||
|
|
||||||
|
| Yöntem | Açıklama |
|
||||||
|
|--------|----------|
|
||||||
|
| **Monopay** | Kart ödemeleri, webhook onay |
|
||||||
|
| **LiqPay** | PrivatBank, redirect + callback |
|
||||||
|
| **Banka havalesi** | Referans kodu `ILAN-{id}-{rand}`, admin manuel onay, 24s timeout |
|
||||||
|
|
||||||
|
Fiyat önceliği: Abonelik kotası → Ücretsiz aylık kota → Tek ilan ücreti
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Özellikler
|
||||||
|
|
||||||
|
### 5.1 Şehir Filtreleri (Faz 6)
|
||||||
|
- Oblast → Şehir hiyerarşisi (Kyiv, Lviv, Odesa + 5 şehir)
|
||||||
|
- Web: `/horeca/kyiv/ogoloshennya`
|
||||||
|
- Bot: `SELECT_CITY` adımı
|
||||||
|
- Kanal–şehir eşlemesi (şehir bazlı Telegram kanalı)
|
||||||
|
|
||||||
|
### 5.2 Abonelik Paketleri (Faz 6)
|
||||||
|
|
||||||
|
| Paket | Fiyat/ay | Kota |
|
||||||
|
|-------|----------|------|
|
||||||
|
| Стартовий | 299 ₴ | 5 ilan |
|
||||||
|
| Бізнес | 699 ₴ | 15 ilan |
|
||||||
|
| Преміум | 1499 ₴ | 50 ilan |
|
||||||
|
| Корпоративний | 3999 ₴ | 200 ilan |
|
||||||
|
|
||||||
|
### 5.3 VIP İlan ve Sabitleme (Faz 7)
|
||||||
|
|
||||||
|
| Boost | Fiyat | Süre |
|
||||||
|
|-------|-------|------|
|
||||||
|
| VIP badge | +99 ₴ | 7 gün |
|
||||||
|
| Sabitleme (Pin) | +199 ₴ | 3 gün |
|
||||||
|
| Öne çıkarma | +149 ₴ | 5 gün |
|
||||||
|
| Kombo | +349 ₴ | 7 gün |
|
||||||
|
|
||||||
|
Sıralama: Pin → boostScore → publishedAt
|
||||||
|
|
||||||
|
### 5.4 Analitik Dashboard (Faz 7)
|
||||||
|
- Kanal bazlı görüntülenme, tıklama, dönüşüm
|
||||||
|
- Gelir: ilan / boost / abonelik / havale kırılımı
|
||||||
|
- Recharts grafikleri, proje karşılaştırma
|
||||||
|
|
||||||
|
### 5.5 Kullanıcı Hesabı (Faz 7)
|
||||||
|
- Web: `/account/listings`
|
||||||
|
- Bot: `/my_ads` + **Опублікувати знову** (tekrar yayınla)
|
||||||
|
- Tüm kanallar tek `User` kaydına bağlanır
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. UI/UX Standartları (Zorunlu)
|
||||||
|
|
||||||
|
### Web
|
||||||
|
- Next.js 15 + Tailwind + shadcn/ui + Framer Motion
|
||||||
|
- OLX.ua / Work.ua kalitesinde tasarım
|
||||||
|
- Lighthouse **90+**, mobil-first
|
||||||
|
- İlan wizard, skeleton loading, VIP vurgulu kartlar
|
||||||
|
|
||||||
|
### Botlar
|
||||||
|
- Yanıt **< 1 saniye**, typing indicator
|
||||||
|
- Inline keyboard, emoji, "Крок 3 з 7" ilerleme
|
||||||
|
- Redis session 24s, `/continue` ile devam
|
||||||
|
- Prod'da webhook modu (polling yasak)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Veritabanı (Kenan Belirleyecek)
|
||||||
|
|
||||||
|
**Seçenekler:** Drizzle+PostgreSQL, TypeORM+PostgreSQL, Supabase, MongoDB
|
||||||
|
|
||||||
|
### Temel Entity'ler
|
||||||
|
- Project, Category, Region, City
|
||||||
|
- Listing, ListingPosition, ListingMedia, ListingBoost
|
||||||
|
- User, UserSubscription, SubscriptionPlan
|
||||||
|
- ChannelConfig, ChannelPublication, ProjectChannelCity
|
||||||
|
- Payment, ModerationLog
|
||||||
|
- AnalyticsEvent, DailyStats
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Klasör Yapısı
|
||||||
|
|
||||||
|
```
|
||||||
|
ilanhub/
|
||||||
|
├── apps/
|
||||||
|
│ ├── api/ # NestJS
|
||||||
|
│ ├── admin/ # React + Vite
|
||||||
|
│ ├── web/ # Next.js 15
|
||||||
|
│ ├── bot-telegram/
|
||||||
|
│ ├── bot-viber/
|
||||||
|
│ ├── bot-whatsapp/
|
||||||
|
│ └── worker/
|
||||||
|
├── packages/
|
||||||
|
│ ├── shared/
|
||||||
|
│ ├── database/
|
||||||
|
│ ├── pricing/
|
||||||
|
│ ├── payments/
|
||||||
|
│ ├── i18n/
|
||||||
|
│ ├── ui/
|
||||||
|
│ └── analytics/
|
||||||
|
├── docker/
|
||||||
|
├── docker-compose.yml
|
||||||
|
└── docker-compose.prod.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. Geliştirme Fazları
|
||||||
|
|
||||||
|
| Faz | Hafta | İçerik |
|
||||||
|
|-----|-------|--------|
|
||||||
|
| 1 | 1-2 | Altyapı, UI temeli, DB schema |
|
||||||
|
| 2 | 2-3 | Moderasyon, Telegram bot, worker |
|
||||||
|
| 3 | 3-4 | Viber + WhatsApp |
|
||||||
|
| 4 | 4-5 | Instagram yayını + ödeme |
|
||||||
|
| 5 | 5-6 | Prod Docker, CI/CD, E2E |
|
||||||
|
| 6 | 7-9 | Şehir filtreleri + abonelik |
|
||||||
|
| 7 | 10-12 | VIP, analitik, kullanıcı hesabı |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. Meta Ön Koşulları (Paralel Başlat)
|
||||||
|
|
||||||
|
1. Meta Business Suite hesabı
|
||||||
|
2. WhatsApp Business Cloud API
|
||||||
|
3. Instagram Business + Facebook Page
|
||||||
|
4. Telegram @BotFather bot + kanal admin
|
||||||
|
5. Viber Public Account
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 11. Riskler
|
||||||
|
|
||||||
|
| Risk | Çözüm |
|
||||||
|
|------|-------|
|
||||||
|
| Meta onay gecikmesi | TG + Web soft launch |
|
||||||
|
| Yavaş bot | Webhook + Redis + typing indicator |
|
||||||
|
| Sıradan UI | shadcn/ui + Lighthouse 90+ |
|
||||||
|
| Havale sahteciliği | Referans kodu + manuel kontrol |
|
||||||
|
| Instagram post hatası | Diğer kanallar devam eder |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 12. Yapılacaklar
|
||||||
|
|
||||||
|
- [ ] Kenan: ORM/DB seçimi
|
||||||
|
- [ ] Monorepo scaffold
|
||||||
|
- [ ] Docker Compose dev
|
||||||
|
- [ ] API core modülleri
|
||||||
|
- [ ] Premium web UI
|
||||||
|
- [ ] Telegram bot
|
||||||
|
- [ ] Viber + WhatsApp botları
|
||||||
|
- [ ] Instagram yayın
|
||||||
|
- [ ] Monopay + LiqPay + havale
|
||||||
|
- [ ] Şehir filtreleri
|
||||||
|
- [ ] Abonelik paketleri
|
||||||
|
- [ ] VIP boost
|
||||||
|
- [ ] Analitik dashboard
|
||||||
|
- [ ] Kullanıcı hesabı + tekrar yayınla
|
||||||
Reference in New Issue
Block a user