Initial commit: İlanHub project plan and documentation

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-10 13:36:45 +03:00
co-authored by Cursor
commit 0d08998f97
4 changed files with 344 additions and 0 deletions
+35
View File
@@ -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
View File
@@ -0,0 +1,12 @@
node_modules/
dist/
build/
.next/
.turbo/
.env
.env.local
*.log
.DS_Store
coverage/
.idea/
.vscode/
+55
View File
@@ -0,0 +1,55 @@
# İlanHub
[![GitHub](https://img.shields.io/github/stars/kadobey003/ilanhub?style=social)](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
View File
@@ -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ı
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