# Oltalama Test Yönetim Paneli - Proje Tanımı ve Geliştirme Planı ## 📋 Proje Özeti Güvenlik farkındalık eğitimleri için kullanılacak, **basit ve kullanışlı** bir phishing test yönetim sistemi. Karmaşık kampanya yönetimi yerine, **tek tıkla token oluştur, mail gönder, anlık Telegram bildirimi al** prensipleriyle çalışan, SQLite tabanlı hafif bir çözüm. ## 🎯 Proje Hedefleri - **Basitlik**: Karmaşık konfigürasyon yok, Gmail + Telegram ile hızlı başla - **Hızlı Token Oluşturma**: "Yeni Mail Oluştur" butonuyla saniyeler içinde tracking linki hazır - **Gerçek Zamanlı Bildirim**: Link tıklandığında anında Telegram mesajı al - **Detaylı Tracking**: IP, konum, cihaz bilgilerini otomatik kaydet - **Tek Kullanıcı Odaklı**: Kişisel kullanım için optimize edilmiş, basit admin paneli - **Taşınabilir**: SQLite sayesinde tüm veri tek dosyada, yedekleme ve taşıma çok kolay ## ⚡ Quickstart - Nasıl Çalışır? ### 1️⃣ İlk Kurulum (5 dakika) ```bash # Backend cd backend && npm install npm run db:migrate && npm run db:seed # Default: username: admin, password: admin123 # Frontend cd ../frontend && npm install # Her ikisini de başlat npm run dev ``` ### 2️⃣ Ayarları Yap (5 dakika) - Panel'de **Settings** sayfasına git - **Gmail App Password** ekle (rehber mevcut) - **Telegram Bot** oluştur ve token ekle (rehber mevcut) - **Test** butonlarıyla kontrol et ### 3️⃣ İlk Şirketi Oluştur (30 saniye) - **"Şirketler"** sayfasına git - **"Yeni Şirket Ekle"** butonuna tıkla - Form doldur: - Şirket Adı: `Test Bank` - Sektör: `Banking` - Açıklama: (opsiyonel) - **"Kaydet"** tıkla - İlk şirketin hazır! 🏢 ### 4️⃣ İlk Mail Testini Gönder (30 saniye) - **"Yeni Mail Oluştur"** butonuna tıkla - Form doldur: - **Şirket Seç**: `Test Bank` (dropdown) - Email: `test@example.com` - Çalışan Adı: `Ahmet` (opsiyonel) - Şablon: `Banka Şablonu` - **"Oluştur + Gönder"** tıkla - Mail otomatik gönderilir! 📧 ### 4️⃣ Tıklamayı İzle - Hedef kişi maildeki linke tıkladığında - Anında Telegram'a bildirim gelir 🚨 - Panel'de detayları gör: IP, konum, cihaz **Bu kadar basit!** 🎉 ## 🔑 Ana Özellikler ### 1. Basit Mail/Token Oluşturma - **"Yeni Token Oluştur"** butonu ile hızlı token oluşturma - **"Yeni Mail Oluştur"** butonu ile otomatik mail gönderimi - Hedef kullanıcı mail adresi girişi - Şirket adı ve çalışan adı (opsiyonel) bilgileri - Otomatik benzersiz tracking URL oluşturma - Gmail entegrasyonu (App Password ile) ### 2. Akıllı Mail Şablonu Sistemi - **Şirket Adı** girişi (örn: "Türk Telekom", "İş Bankası") - **Çalışan Adı** girişi (opsiyonel) - Varsa: "Sayın [Çalışan Adı]," ile başlar - Yoksa: "Sayın," ile başlar - Otomatik oltalama mail içeriği oluşturma - Şirket logolu, profesyonel görünümlü HTML mail - Mail içinde tracking link'i otomatik ekleme - Şablon kütüphanesi (Banka, E-Devlet, Kurumsal Email, vb.) ### 3. Dinamik Tracking URL Sistemi - Her hedef için benzersiz token: `https://domain.com/t/{unique-token}` - Token'a tıklandığında otomatik veri toplama - Kısa ve profesyonel görünümlü URL'ler - Landing page'e otomatik yönlendirme ### 4. Detaylı IP ve Aktivite Takibi - **IP Adresi**: Tıklayan kişinin IP'si - **Tıklama Zamanı**: Tam tarih ve saat - **User Agent**: Tarayıcı, işletim sistemi, cihaz bilgisi - **Coğrafi Konum**: IP bazlı şehir/ülke tespiti (GeoIP) - **Referrer**: Hangi kaynaktan geldi - **Tıklama Sayısı**: Aynı token'a kaç kez tıklandı - Tüm veriler SQLite'da saklanır ### 5. Telegram Gerçek Zamanlı Bildirim - ✅ Link tıklandığında anında Telegram bildirimi - Bildirim içeriği: - "🚨 Yeni Tıklama Algılandı!" - "Hedef: [email]" - "IP: [ip_address]" - "Konum: [city, country]" - "Cihaz: [browser, os]" - "Zaman: [timestamp]" - Telegram Bot API kullanımı - Tek bir Telegram chat_id'ye bildirim ### 6. Basit Yönetim Paneli - **Dashboard**: Tüm token'ların listesi - Her token için: - Hedef email - Şirket adı - Oluşturulma tarihi - Tıklanma durumu (✅/❌) - Toplam tıklama sayısı - **Detay Sayfası**: Token'a tıklayan tüm IP'lerin listesi - **Mail Şablonları**: Hazır şablonlar - **Ayarlar**: Gmail ve Telegram konfigürasyonu ### 7. Güvenlik Özellikleri - Basit login (username/password) - Session tabanlı authentication - API rate limiting (spam önleme) - Güvenli token oluşturma (crypto.randomBytes) - XSS ve SQL injection koruması ## 🏗️ Teknik Mimari ### Backend Stack - **Runtime**: Node.js (v18+) - **Framework**: Express.js - **Database**: SQLite (tek dosya, kurulum gerektirmez) - **ORM**: Sequelize (SQLite desteği ile) - **Authentication**: express-session (basit session) - **Mail**: Nodemailer + Gmail (App Password) - **Telegram**: node-telegram-bot-api - **Token Generator**: crypto (Node.js built-in) - **Validation**: Joi - **Logging**: Winston - **GeoIP**: geoip-lite (ücretsiz) ### Frontend Stack - **Framework**: React.js (Next.js önerilir) - **State Management**: Redux Toolkit veya Zustand - **UI Library**: Material-UI veya Ant Design - **Charts**: Chart.js veya Recharts - **HTTP Client**: Axios - **Form Management**: React Hook Form ### DevOps & Infrastructure - **Containerization**: Docker (opsiyonel - basit deployment için gerek yok) - **Process Manager**: PM2 - **Reverse Proxy**: Nginx (opsiyonel) - **SSL**: Let's Encrypt (Certbot) - production için - **Monitoring**: PM2 built-in monitoring - **Logging**: Winston (dosya bazlı) ## 📊 Database Schema (Şirket Yönetimi ile) ### Tabloları #### 1. **companies** - Şirket Yönetimi ```sql id: INTEGER PRIMARY KEY AUTOINCREMENT name: VARCHAR(255) NOT NULL -- Şirket adı (örn: "Türk Telekom") description: TEXT NULL -- Açıklama logo_url: TEXT NULL -- Logo URL (opsiyonel) industry: VARCHAR(100) NULL -- Sektör (Banka, Telecom, E-Devlet, vb.) active: BOOLEAN DEFAULT 1 -- Aktif mi? created_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP updated_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- İstatistikler (hesaplanan - denormalized için) total_tokens: INTEGER DEFAULT 0 -- Toplam token sayısı total_clicks: INTEGER DEFAULT 0 -- Toplam tıklama sayısı click_rate: DECIMAL(5,2) DEFAULT 0 -- Tıklama oranı % ``` #### 2. **tracking_tokens** - Tracking Token'ları ```sql id: INTEGER PRIMARY KEY AUTOINCREMENT token: VARCHAR(64) UNIQUE NOT NULL -- Benzersiz tracking token (32 byte hex) company_id: INTEGER NOT NULL -- FK -> companies.id (Hangi şirket için) target_email: VARCHAR(255) NOT NULL -- Hedef mail adresi employee_name: VARCHAR(255) NULL -- Çalışan adı (opsiyonel) template_type: VARCHAR(50) DEFAULT 'bank' -- Mail şablonu tipi mail_subject: VARCHAR(500) -- Mail konusu mail_sent: BOOLEAN DEFAULT 0 -- Mail gönderildi mi? sent_at: TIMESTAMP NULL -- Mail gönderim zamanı clicked: BOOLEAN DEFAULT 0 -- Link tıklandı mı? click_count: INTEGER DEFAULT 0 -- Toplam tıklama sayısı first_click_at: TIMESTAMP NULL -- İlk tıklama zamanı last_click_at: TIMESTAMP NULL -- Son tıklama zamanı created_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP notes: TEXT NULL -- Notlar FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE ``` #### 3. **click_logs** - Tıklama Kayıtları ```sql id: INTEGER PRIMARY KEY AUTOINCREMENT token_id: INTEGER NOT NULL -- FK -> tracking_tokens.id ip_address: VARCHAR(45) NOT NULL -- Tıklayan IP adresi country: VARCHAR(100) -- Ülke city: VARCHAR(100) -- Şehir latitude: DECIMAL(10, 8) NULL -- Enlem longitude: DECIMAL(11, 8) NULL -- Boylam user_agent: TEXT -- Tam User Agent string browser: VARCHAR(100) -- Parse edilmiş tarayıcı os: VARCHAR(100) -- Parse edilmiş işletim sistemi device: VARCHAR(100) -- Parse edilmiş cihaz tipi referer: TEXT NULL -- Referrer URL clicked_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP telegram_sent: BOOLEAN DEFAULT 0 -- Telegram bildirimi gönderildi mi? ``` #### 4. **mail_templates** - Mail Şablonları ```sql id: INTEGER PRIMARY KEY AUTOINCREMENT name: VARCHAR(255) NOT NULL -- Şablon adı template_type: VARCHAR(50) UNIQUE NOT NULL -- Tip (bank, edevlet, corporate, etc.) subject_template: VARCHAR(500) -- Konu şablonu body_html: TEXT NOT NULL -- HTML mail içeriği (template) description: TEXT -- Şablon açıklaması preview_image: TEXT NULL -- Preview resim URL (opsiyonel) created_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP updated_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP active: BOOLEAN DEFAULT 1 -- Aktif mi? ``` #### 5. **settings** - Sistem Ayarları ```sql id: INTEGER PRIMARY KEY AUTOINCREMENT key: VARCHAR(100) UNIQUE NOT NULL -- Ayar key (gmail_user, telegram_token, etc.) value: TEXT -- Ayar value (encrypted for sensitive data) is_encrypted: BOOLEAN DEFAULT 0 -- Encrypt edilmiş mi? description: TEXT -- Açıklama updated_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP ``` #### 6. **admin_user** - Admin Kullanıcı (tek kullanıcı) ```sql id: INTEGER PRIMARY KEY CHECK (id = 1) -- Sadece 1 kayıt username: VARCHAR(100) UNIQUE NOT NULL password_hash: VARCHAR(255) NOT NULL -- bcrypt hash last_login: TIMESTAMP NULL created_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP updated_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP ``` ## 🔌 API Endpoints (Şirket Yönetimi ile) ### Authentication ``` POST /api/auth/login - Giriş (username + password) POST /api/auth/logout - Çıkış GET /api/auth/check - Session kontrolü ``` ### Companies (Şirket Yönetimi) ``` GET /api/companies - Tüm şirketleri listele POST /api/companies - Yeni şirket oluştur GET /api/companies/:id - Şirket detayları + istatistikler PUT /api/companies/:id - Şirket güncelle DELETE /api/companies/:id - Şirket sil (cascade: tokenları da siler) GET /api/companies/:id/tokens - Şirkete ait tüm tokenlar GET /api/companies/:id/stats - Şirket istatistikleri detaylı ``` ### Tracking Tokens ``` GET /api/tokens - Tüm token'ları listele (query: ?company_id=X) POST /api/tokens/create - Yeni token oluştur (mail göndermeden) Body: { company_id, target_email, employee_name, template_type } POST /api/tokens/create-and-send - Yeni token oluştur ve mail gönder Body: { company_id, target_email, employee_name, template_type } GET /api/tokens/:id - Token detayları PUT /api/tokens/:id - Token güncelle (notes) DELETE /api/tokens/:id - Token sil POST /api/tokens/:id/send - Mevcut token için mail gönder GET /api/tokens/:id/clicks - Token'a ait tüm tıklama kayıtları ``` ### Mail Templates ``` GET /api/templates - Tüm mail şablonları GET /api/templates/:type - Belirli şablon detayı POST /api/templates - Yeni şablon oluştur PUT /api/templates/:id - Şablon güncelle DELETE /api/templates/:id - Şablon sil POST /api/templates/preview - Şablon önizleme (render et) ``` ### Settings ``` GET /api/settings - Tüm ayarlar PUT /api/settings/gmail - Gmail ayarları (email, app password) PUT /api/settings/telegram - Telegram ayarları (bot token, chat_id) POST /api/settings/test-gmail - Gmail bağlantı testi POST /api/settings/test-telegram - Telegram test mesajı gönder ``` ### Tracking (Public Endpoints - Auth Gerektirmez) ``` GET /t/:token - Token tracking endpoint - IP, User-Agent, GeoIP kaydet - Telegram bildirimi gönder - Landing page'e redirect et ``` ### Dashboard/Stats ``` GET /api/stats/dashboard - Dashboard özet istatistikleri - Toplam şirket sayısı - Toplam token sayısı - Tıklanma oranı - Son 24 saat aktivite - Şirket bazlı özet GET /api/stats/recent-clicks - Son tıklamalar (real-time için) GET /api/stats/by-company - Şirket bazlı istatistikler (grafik için) ``` ## 🔄 İş Akışı (Basitleştirilmiş Workflow) ### Senaryo 0: Şirket Oluştur (İlk Adım) 1. **Panel'e Giriş**: Admin kullanıcı adı/şifre ile giriş yapar 2. **"Şirketler" Sayfasına Git** 3. **"Yeni Şirket Ekle" Butonu**: Tıkla 4. **Form Doldur**: - Şirket Adı: `Türk Telekom` - Açıklama: `Telekomünikasyon şirketi test kampanyası` - Sektör: `Telecom` (dropdown) - Logo URL: (opsiyonel) 5. **Şirket Oluşturulur**: Artık bu şirket için tokenlar oluşturabilirsin ### Senaryo 1: Token Oluştur + Manuel Mail 1. **Dashboard'dan "Yeni Token Oluştur" Butonu**: Tıkla 2. **Form Doldur**: - **Şirket Seç**: `Türk Telekom` (dropdown - önceden oluşturulmuş) - Hedef Email: `mehmet@example.com` - Çalışan Adı: `Mehmet Yılmaz` (opsiyonel) - Şablon Seç: `Banka Şablonu` 3. **Token Oluşturulur**: - Benzersiz token: `a3f8b2e9c1d4f7e6...` (64 karakter hex) - URL: `https://yourdomain.com/t/a3f8b2e9c1d4f7e6...` - Şirkete bağlanır (`company_id = Türk Telekom`) 4. **Manuel Mail Gönderimi**: - Token ve URL ekranda gösterilir - Admin isterse kendi Gmail'inden manuel gönderir ### Senaryo 2: Token Oluştur + Otomatik Mail Gönder 1. **"Yeni Mail Oluştur" Butonu**: Tıkla 2. **Form Doldur** (şirket seçimi dahil) 3. **Mail Otomatik Gönderilir**: - Gmail App Password ile Nodemailer kullanılır - Mail içeriği şablondan oluşturulur: ``` Konu: Türk Telekom - Acil Güvenlik Bildirimi Sayın Mehmet Yılmaz, [Şablon içeriği - tracking linki içerir] Linke tıklamak için: https://yourdomain.com/t/{token} ``` 4. **Token + Mail Durumu Kaydedilir**: - `mail_sent = 1` - `sent_at = CURRENT_TIMESTAMP` - Şirket istatistikleri güncellenir (`total_tokens++`) ### Tracking Mekanizması #### Link Tıklama İzleme ``` URL: https://yourdomain.com/t/a3f8b2e9c1d4f7e6... ``` **Kullanıcı tıklayınca ne olur:** 1. ✅ Backend `/t/:token` endpoint'i çalışır 2. ✅ Token veritabanında aranır 3. ✅ IP adresi, User-Agent, Referer yakalanır 4. ✅ GeoIP ile konum belirlenir (geoip-lite) 5. ✅ `click_logs` tablosuna kayıt atılır: ```sql INSERT INTO click_logs ( token_id, ip_address, country, city, user_agent, browser, os, device, clicked_at ) VALUES (...) ``` 6. ✅ `tracking_tokens` tablosu güncellenir: ```sql UPDATE tracking_tokens SET clicked = 1, click_count = click_count + 1, last_click_at = CURRENT_TIMESTAMP, first_click_at = CASE WHEN first_click_at IS NULL THEN CURRENT_TIMESTAMP ELSE first_click_at END ``` 7. ✅ **Telegram Bildirimi Gönderilir**: ``` 🚨 YENİ TIKLAMA ALGILANDI! 🏢 Şirket: Türk Telekom 📧 Hedef: mehmet@example.com 👤 Çalışan: Mehmet Yılmaz 🌍 IP: 85.34.12.45 📍 Konum: Istanbul, Turkey 💻 Cihaz: Chrome 118.0 (Windows 10) ⏰ Zaman: 10 Kas 2025, 14:30:15 📊 Bu token için toplam tıklama: 1 📈 Şirket toplam tıklama: 15 (42 tokenden) ``` 8. ✅ Kullanıcı landing page'e redirect edilir 9. ✅ Landing page: "Bu bir güvenlik farkındalık testiydi!" ### Mail Şablon Sistemi #### Şablon Değişkenleri (Placeholders) ```html {{company_name}} → Şirket adı {{employee_name}} → Çalışan adı {{tracking_url}} → Tracking linki {{current_year}} → Yıl ``` #### Örnek Şablon: Banka ```html
Sayın {{employee_name}},
{{else}}Sayın,
{{/if}}Hesabınızda şüpheli aktivite tespit edildi. Lütfen acilen kimliğinizi doğrulayın:
Hesabımı Doğrula© {{current_year}} {{company_name}}
``` ### Telegram Gerçek Zamanlı Bildirim - **node-telegram-bot-api** kullanılır - Her tıklamada anında bildirim - Ayarlar'dan yapılandırılır: - Bot Token: `1234567890:ABC...` - Chat ID: `123456789` (kendi Telegram ID'n) ## 📈 Geliştirme Planı (Basitleştirilmiş - 6-7 Hafta) ### Faz 1: Temel Backend Altyapı (1 Hafta) - [ ] Proje klasör yapısı oluşturma - [ ] Node.js + Express.js setup - [ ] SQLite database dosyası oluşturma - [ ] Sequelize ile database models: - [ ] **Company model** (ŞİRKET YÖNETİMİ) - [ ] TrackingToken model (company_id FK ile) - [ ] ClickLog model - [ ] MailTemplate model - [ ] Settings model - [ ] AdminUser model - [ ] Database migration ve seed dosyaları - [ ] Örnek şirketler seed'leme (Türk Telekom, İş Bankası, vb.) - [ ] Environment variables (.env) - [ ] Logger implementasyonu (Winston) - [ ] Error handling middleware - [ ] Basic API routing structure ### Faz 2: Authentication & Session (2-3 Gün) - [ ] express-session yapılandırması - [ ] Login endpoint (`POST /api/auth/login`) - [ ] Logout endpoint (`POST /api/auth/logout`) - [ ] Session check middleware - [ ] bcrypt ile password hashing - [ ] İlk admin kullanıcısı seed'leme ### Faz 3: Şirket Yönetimi (3-4 Gün) **YENİ** - [ ] Company CRUD endpoints: - [ ] `GET /api/companies` - Tüm şirketleri listele - [ ] `POST /api/companies` - Yeni şirket oluştur - [ ] `GET /api/companies/:id` - Şirket detay + istatistikler - [ ] `PUT /api/companies/:id` - Şirket güncelle - [ ] `DELETE /api/companies/:id` - Şirket sil (cascade) - [ ] `GET /api/companies/:id/tokens` - Şirkete ait tokenlar - [ ] `GET /api/companies/:id/stats` - Şirket istatistikleri - [ ] Company service layer - [ ] Validation (Joi schemas) - [ ] İstatistik hesaplama (total_tokens, total_clicks, click_rate) ### Faz 4: Token Yönetimi (1 Hafta) - [ ] Token generation (crypto.randomBytes) - [ ] Token CRUD endpoints: - [ ] `POST /api/tokens/create` - Token oluştur (company_id dahil) - [ ] `POST /api/tokens/create-and-send` - Token oluştur + mail gönder - [ ] `GET /api/tokens` - Tüm tokenları listele (company_id filtresi ile) - [ ] `GET /api/tokens/:id` - Token detay - [ ] `PUT /api/tokens/:id` - Token güncelle - [ ] `DELETE /api/tokens/:id` - Token sil - [ ] Token service layer - [ ] Company istatistiklerini güncelleme (token oluşturulunca/silinince) - [ ] Validation (Joi schemas) ### Faz 5: Mail Sistemi (1 Hafta) - [ ] Nodemailer + Gmail entegrasyonu - [ ] Mail template engine (Handlebars) - [ ] Template placeholders: {{company_name}}, {{employee_name}}, {{tracking_url}} - [ ] HTML mail templates oluşturma: - [ ] Banka şablonu - [ ] E-Devlet şablonu - [ ] Kurumsal email şablonu - [ ] Mail gönderme servisi (şirket adını kullanarak) - [ ] Mail template CRUD endpoints - [ ] Template preview endpoint - [ ] Gmail test endpoint ### Faz 6: Tracking & GeoIP (1 Hafta) - [ ] `/t/:token` tracking endpoint (public) - [ ] IP adresi yakalama (req.ip, x-forwarded-for) - [ ] User-Agent parsing (useragent paketi) - [ ] GeoIP integration (geoip-lite) - [ ] Click log kaydetme (click_logs tablosu) - [ ] Token istatistikleri güncelleme - [ ] **Şirket istatistikleri güncelleme** (total_clicks++) - [ ] Landing page HTML (static) - [ ] Redirect logic ### Faz 7: Telegram Bildirimleri (2-3 Gün) - [ ] node-telegram-bot-api kurulumu - [ ] Telegram settings endpoints: - [ ] `PUT /api/settings/telegram` - [ ] `POST /api/settings/test-telegram` - [ ] Bildirim formatı oluşturma (şirket adı dahil) - [ ] Tıklama sonrası Telegram mesajı gönderimi - [ ] Şirket bazlı toplam istatistikler bildirme - [ ] Error handling (telegram down ise) ### Faz 8: Settings & Dashboard API (2-3 Gün) - [ ] Settings CRUD (gmail, telegram ayarları) - [ ] Encryption (sensitive data için) - [ ] Dashboard stats endpoint: - [ ] **Toplam şirket sayısı** - [ ] Toplam token sayısı - [ ] Tıklanan/tıklanmayan oranı - [ ] Son 24 saat aktivite - [ ] **Şirket bazlı özet tablosu** - [ ] En çok tıklanan tokenlar - [ ] Recent clicks endpoint (real-time için) - [ ] Company-based stats endpoint (grafik için) ### Faz 9: Frontend - React SPA (2 Hafta) - [ ] React (Vite) veya Next.js project setup - [ ] UI framework: Material-UI (MUI) veya Tailwind CSS - [ ] React Router setup - [ ] Axios API client yapılandırması #### Sayfalar: - [ ] **Login Page** (`/login`) - [ ] Login formu - [ ] Session yönetimi - [ ] **Dashboard** (`/`) - [ ] Özet kartlar (Şirket sayısı, Total tokens, Click rate, etc.) - [ ] **Şirket bazlı performans tablosu** - [ ] Son tıklamalar listesi (real-time, şirket adı ile) - [ ] Şirket bazlı grafik (Chart.js) - [ ] **Companies** (`/companies`) **YENİ** - [ ] Şirket kartları listesi - [ ] "Yeni Şirket Ekle" butonu - [ ] Her şirkette: İsim, Sektör, Token sayısı, Tıklama oranı - [ ] Arama ve filtreleme - [ ] **Company Detay** (`/companies/:id`) **YENİ** - [ ] Şirket bilgileri (düzenlenebilir) - [ ] Şirkete özel istatistikler - [ ] Şirkete özel grafik (30 gün) - [ ] Şirkete ait tokenların listesi - [ ] "Yeni Token Ekle" butonu (şirket otomatik seçili) - [ ] "Şirketi Sil" butonu - [ ] **Tokens List** (`/tokens`) - [ ] Tüm tokenları tablo halinde - [ ] **Şirket bazlı filtreleme (dropdown)** - [ ] Filtreleme (tıklanan/tıklanmayan) - [ ] Arama (email, şirket adı, çalışan adı) - [ ] "Yeni Token Oluştur" butonu - [ ] "Yeni Mail Oluştur" butonu - [ ] **Token Detay** (`/tokens/:id`) - [ ] Token bilgileri - [ ] **Şirket adı ve "Şirkete Git" linki** - [ ] Tracking URL (copy to clipboard) - [ ] Tıklama geçmişi tablosu (IP, konum, cihaz, zaman) - [ ] Not ekleme - [ ] **Create Token Modal/Page** - [ ] Form: **Şirket Seç (dropdown)**, Email, Çalışan Adı, Şablon - [ ] "Sadece Oluştur" ve "Oluştur + Mail Gönder" butonları - [ ] Mail önizleme (şirket adı ile) - [ ] **Templates** (`/templates`) - [ ] Mail şablonları listesi - [ ] Yeni şablon oluşturma - [ ] Şablon düzenleme (HTML editor - basit textarea yeterli) - [ ] Preview - [ ] **Settings** (`/settings`) - [ ] Gmail ayarları (email, app password) - [ ] Telegram ayarları (bot token, chat_id) - [ ] Test butonları - [ ] Domain/Base URL ayarı - [ ] **Responsive Design** (Mobile uyumlu) ### Faz 10: Güvenlik & Optimizasyon (2-3 Gün) - [ ] API rate limiting (express-rate-limit) - [ ] Input validation (Joi - tüm endpoints, şirket endpoints dahil) - [ ] SQL injection prevention (ORM kullanımı) - [ ] XSS protection (helmet.js) - [ ] CORS yapılandırması - [ ] Secure session cookies - [ ] Database indexing (token, email, ip_address, company_id) - [ ] Error logging ### Faz 11: Testing & Deployment (3-4 Gün) - [ ] Backend unit tests (önemli servisler için) - [ ] API endpoint tests (Postman collection) - [ ] Company endpoints testi - [ ] Token + Company ilişki testi - [ ] Frontend test (manuel) - [ ] .env.example dosyaları - [ ] README.md: - [ ] Kurulum talimatları - [ ] Gmail App Password nasıl alınır - [ ] Telegram Bot nasıl oluşturulur - [ ] İlk şirket nasıl oluşturulur - [ ] Deployment guide - [ ] Production build test - [ ] PM2 ecosystem.config.js - [ ] SQLite backup scripti - [ ] Database migration komutları ## 🎨 UI/UX Tasarım Önerileri ### Dashboard Ana Sayfa ``` ┌─────────────────────────────────────────────────────────┐ │ 📊 Dashboard 👤 Admin ▼ │ ├─────────────────────────────────────────────────────────┤ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌──────────┐ │ │ │ 🏢 5 │ │ 📨 42 │ │ ✅ 15 │ │ 📈 35.7%│ │ │ │ Şirket │ │ Toplam │ │ Tıklanan│ │ Başarı │ │ │ │ │ │ Token │ │ │ │ Oranı │ │ │ └─────────┘ └─────────┘ └─────────┘ └──────────┘ │ │ │ │ 📊 Şirket Bazlı Performans │ │ ┌────────────────────────────────────────────────┐ │ │ │ Şirket │ Tokenlar │ Tıklanan │ Oran │ │ │ ├────────────────────────────────────────────────┤ │ │ │ Türk Telekom │ 18 │ 8 │ 44.4% │ │ │ │ İş Bankası │ 12 │ 4 │ 33.3% │ │ │ │ PTT │ 7 │ 2 │ 28.6% │ │ │ │ E-Devlet │ 5 │ 1 │ 20.0% │ │ │ └────────────────────────────────────────────────┘ │ │ │ │ 📈 Son 7 Gün Aktivite (Tüm Şirketler) │ │ ┌────────────────────────────────────────┐ │ │ │ [Çizgi grafiği - şirket bazlı] │ │ │ └────────────────────────────────────────┘ │ │ │ │ 🚨 Son Tıklamalar (Gerçek Zamanlı) │ │ ┌──────────────────────────────────────────────────┐ │ │ │ 🏢 Türk Telekom │ │ │ │ 14:35 • mehmet@example.com • 85.34.12.45 │ │ │ │ Istanbul, Turkey • Chrome (Windows) │ │ │ ├──────────────────────────────────────────────────┤ │ │ │ 🏢 İş Bankası │ │ │ │ 13:22 • ayse@company.com • 92.45.67.89 │ │ │ │ Ankara, Turkey • Safari (iPhone) │ │ │ └──────────────────────────────────────────────────┘ │ │ │ │ [🔵 Yeni Token Oluştur] [📧 Yeni Mail Oluştur] │ └─────────────────────────────────────────────────────────┘ ``` ### Şirketler Sayfası ``` ┌─────────────────────────────────────────────────────────┐ │ 🏢 Şirketler │ ├─────────────────────────────────────────────────────────┤ │ │ │ 🔍 [Arama: şirket adı...] [➕ Yeni Şirket] │ │ │ │ ┌──────────────────────────────────────────────────┐ │ │ │ 📊 TÜRK TELEKOM ✏️ │ │ │ │ Sektör: Telecom │ │ │ │ 📨 18 token • ✅ 8 tıklanan • 📈 44.4% │ │ │ │ Son aktivite: 2 saat önce │ │ │ └──────────────────────────────────────────────────┘ │ │ │ │ ┌──────────────────────────────────────────────────┐ │ │ │ 📊 İŞ BANKASI ✏️ │ │ │ │ Sektör: Banking │ │ │ │ 📨 12 token • ✅ 4 tıklanan • 📈 33.3% │ │ │ │ Son aktivite: 1 gün önce │ │ │ └──────────────────────────────────────────────────┘ │ │ │ │ ┌──────────────────────────────────────────────────┐ │ │ │ 📊 PTT ✏️ │ │ │ │ Sektör: Government │ │ │ │ 📨 7 token • ✅ 2 tıklanan • 📈 28.6% │ │ │ │ Son aktivite: 3 gün önce │ │ │ └──────────────────────────────────────────────────┘ │ │ │ │ [Her şirket kartına tıklayınca detay sayfası açılır] │ └─────────────────────────────────────────────────────────┘ ``` ### Token Listesi Sayfası ``` ┌─────────────────────────────────────────────────────────┐ │ 🎯 Tracking Tokenlar │ ├─────────────────────────────────────────────────────────┤ │ │ │ 🏢 [Tüm Şirketler ▼] 🔍 [Arama...] [Filtre ▼] [⬇] │ │ │ │ ┌──────────────────────────────────────────────────┐ │ │ │ Email │ Şirket │ Durum │ Tıklama │ 📅│ │ │ ├──────────────────────────────────────────────────┤ │ │ │ mehmet@... │ T.Telekom │ ✅ │ 3× │10K│ │ │ │ ayse@... │ İş Bankası │ ✅ │ 1× │10K│ │ │ │ ali@... │ PTT │ ❌ │ 0× │09K│ │ │ │ zeynep@... │ T.Telekom │ ✅ │ 2× │08K│ │ │ └──────────────────────────────────────────────────┘ │ │ │ │ [< Önceki] Sayfa 1/3 [Sonraki >] │ └─────────────────────────────────────────────────────────┘ ``` ### Token Oluştur Modal ``` ┌──────────────────────────────────┐ │ 🎯 Yeni Token Oluştur [X] │ ├──────────────────────────────────┤ │ │ │ 🏢 Şirket Seç * │ │ [▼ Türk Telekom ] │ │ │ │ 📧 Hedef Email * │ │ [mehmet@example.com ] │ │ │ │ 👤 Çalışan Adı (opsiyonel) │ │ [Mehmet Yılmaz ] │ │ │ │ 📝 Mail Şablonu * │ │ [▼ Banka Güvenlik Bildirimi ] │ │ │ │ ┌────────────────────────────┐ │ │ │ 👁️ Önizleme │ │ │ │ │ │ │ │ Konu: Türk Telekom - │ │ │ │ Acil Güvenlik... │ │ │ │ │ │ │ │ Sayın Mehmet Yılmaz, │ │ │ │ Hesabınızda şüpheli... │ │ │ └────────────────────────────┘ │ │ │ │ [Sadece Oluştur] [Oluştur+Gönder]│ └──────────────────────────────────┘ ``` ### Token Detay Sayfası ``` ┌─────────────────────────────────────────────────────────┐ │ ← Geri Token Detayı │ ├─────────────────────────────────────────────────────────┤ │ │ │ 🏢 TÜRK TELEKOM [Şirkete Git →] │ │ 📧 mehmet@example.com │ │ 👤 Mehmet Yılmaz │ │ 📅 Oluşturuldu: 10 Kas 2025, 10:30 │ │ 📨 Mail gönderildi: ✅ Evet (10 Kas 2025, 10:31) │ │ │ │ 🔗 Tracking URL: │ │ ┌──────────────────────────────────────────┐ │ │ │ https://domain.com/t/a3f8b2e9c1d4f7... │ [📋 Kopyala]│ │ └──────────────────────────────────────────┘ │ │ │ │ 📊 İstatistikler │ │ • Toplam Tıklama: 3 │ │ • İlk Tıklama: 10 Kas 2025, 14:35 │ │ • Son Tıklama: 10 Kas 2025, 16:20 │ │ │ │ 🚨 Tıklama Geçmişi │ │ ┌──────────────────────────────────────────────────┐ │ │ │ Zaman │ IP Adresi │ Konum │ Cihaz│ │ │ ├──────────────────────────────────────────────────┤ │ │ │ 16:20:15 │ 85.34.12.45 │ Istanbul, TR │ Chr..│ │ │ │ 15:10:33 │ 85.34.12.45 │ Istanbul, TR │ Chr..│ │ │ │ 14:35:12 │ 85.34.12.45 │ Istanbul, TR │ Chr..│ │ │ └──────────────────────────────────────────────────┘ │ │ │ │ 📝 Notlar: │ │ [Buraya not ekleyebilirsiniz... ] │ │ [💾 Kaydet] │ │ │ │ [🗑️ Token'ı Sil] [📧 Yeniden Mail Gönder] │ └─────────────────────────────────────────────────────────┘ ``` ### Şirket Detay Sayfası ``` ┌─────────────────────────────────────────────────────────┐ │ ← Geri Şirket Detayı │ ├─────────────────────────────────────────────────────────┤ │ │ │ 🏢 TÜRK TELEKOM [✏️ Düzenle]│ │ 📋 Sektör: Telecom │ │ 📝 Açıklama: Telekomünikasyon şirketi test kampanyası │ │ │ │ 📊 Genel İstatistikler │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌──────────┐ │ │ │ 📨 18 │ │ ✅ 8 │ │ 📈 44.4%│ │ 🕐 2saat │ │ │ │ Token │ │ Tıklanan│ │ Oran │ │ Son │ │ │ └─────────┘ └─────────┘ └─────────┘ └──────────┘ │ │ │ │ 📈 Son 30 Gün Aktivite │ │ ┌────────────────────────────────────────┐ │ │ │ [Şirkete özel çizgi grafiği] │ │ │ └────────────────────────────────────────┘ │ │ │ │ 🎯 Token Listesi [➕ Yeni Token]│ │ ┌──────────────────────────────────────────────────┐ │ │ │ Email │ Çalışan │ Durum │ Tıklama │ │ │ ├──────────────────────────────────────────────────┤ │ │ │ mehmet@ex... │ M. Yılmaz │ ✅ │ 3× │ │ │ │ ayse@exa... │ A. Kaya │ ✅ │ 2× │ │ │ │ ali@exam... │ A. Demir │ ❌ │ 0× │ │ │ └──────────────────────────────────────────────────┘ │ │ │ │ [🗑️ Şirketi Sil] [📊 Rapor İndir] │ └─────────────────────────────────────────────────────────┘ ``` ### Ayarlar Sayfası ``` ┌─────────────────────────────────────────────────────────┐ │ ⚙️ Ayarlar │ ├─────────────────────────────────────────────────────────┤ │ │ │ 📧 Gmail Ayarları │ │ ┌──────────────────────────────────────────────────┐ │ │ │ Gmail Adresi: │ │ │ │ [myemail@gmail.com ] │ │ │ │ │ │ │ │ App Password: │ │ │ │ [•••••••••••••••• ] │ │ │ │ │ │ │ │ Gönderen Adı: │ │ │ │ [Güvenlik Ekibi ] │ │ │ │ │ │ │ │ [💾 Kaydet] [📧 Test Mail Gönder] │ │ │ └──────────────────────────────────────────────────┘ │ │ │ │ 💬 Telegram Ayarları │ │ ┌──────────────────────────────────────────────────┐ │ │ │ Bot Token: │ │ │ │ [1234567890:ABCdefGHI... ] │ │ │ │ │ │ │ │ Chat ID: │ │ │ │ [123456789 ] │ │ │ │ │ │ │ │ ℹ️ Telegram Bot nasıl oluşturulur? [Rehber] │ │ │ │ │ │ │ │ [💾 Kaydet] [💬 Test Mesajı Gönder] │ │ │ └──────────────────────────────────────────────────┘ │ │ │ │ 🌐 Domain Ayarları │ │ ┌──────────────────────────────────────────────────┐ │ │ │ Base URL: │ │ │ │ [https://domain.com ] │ │ │ │ │ │ │ │ [💾 Kaydet] │ │ │ └──────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────┘ ``` ## 🔒 Güvenlik Önlemleri ### Uygulama Güvenliği - Tüm şifreler bcrypt ile hash'lenecek - JWT token'lar kısa ömürlü (15-30 dakika), refresh token uzun ömürlü - Rate limiting: API endpoint'lerine DDoS koruması - Input validation: Tüm user input'lar validate edilecek - SQL injection: Parameterized queries (ORM kullanımı) - XSS: Output encoding, CSP headers - CSRF protection: Token-based - HTTPS zorunlu (production) - Sensitive data encryption (at rest): SMTP passwords ### Etik ve Yasal Gereklilikler ⚠️ **ÖNEMLİ UYARI**: Bu sistem yalnızca yasal ve etik sınırlar içinde kullanılmalıdır: - Yalnızca izin verilen organizasyonlarda test yapılmalı - Hedef kullanıcılardan yazılı onay alınmalı (awareness training kapsamında) - Gerçek phishing saldırısı düzenlenmemeli - Toplanan veriler KVKK/GDPR uyumlu olmalı - Audit log'lar düzenli tutulmalı - Landing page'lerde açık uyarı yapılmalı ("Bu bir güvenlik testi idi") ### Audit ve Logging - Tüm kritik işlemler loglanmalı (kim, ne, ne zaman) - Login attempts tracking - Failed authentication monitoring - Campaign lifecycle events - Admin actions logging - Suspicious activity alerts ## 📦 Bağımlılıklar (package.json) ### Backend Dependencies ```json { "express": "^4.18.x", "express-session": "^1.17.x", "sqlite3": "^5.1.x", "sequelize": "^6.35.x", "bcrypt": "^5.1.x", "nodemailer": "^6.9.x", "handlebars": "^4.7.x", "node-telegram-bot-api": "^0.64.x", "joi": "^17.11.x", "winston": "^3.11.x", "dotenv": "^16.3.x", "express-rate-limit": "^7.1.x", "helmet": "^7.1.x", "cors": "^2.8.x", "geoip-lite": "^1.4.x", "useragent": "^2.3.x", "crypto": "built-in" } ``` ### Frontend Dependencies ```json { "react": "^18.2.x", "next": "^14.0.x", "axios": "^1.6.x", "react-hook-form": "^7.48.x", "@mui/material": "^5.14.x", "chart.js": "^4.4.x", "react-chartjs-2": "^5.2.x", "zustand": "^4.4.x", "date-fns": "^2.30.x" } ``` ## 📁 Proje Klasör Yapısı ``` oltalama/ ├── backend/ │ ├── src/ │ │ ├── config/ │ │ │ ├── database.js # SQLite Sequelize config │ │ │ ├── session.js # Express-session config │ │ │ └── logger.js # Winston config │ │ │ │ │ ├── models/ # Sequelize models │ │ │ ├── index.js │ │ │ ├── TrackingToken.js │ │ │ ├── ClickLog.js │ │ │ ├── MailTemplate.js │ │ │ ├── Settings.js │ │ │ └── AdminUser.js │ │ │ │ │ ├── controllers/ # Route handlers │ │ │ ├── auth.controller.js │ │ │ ├── company.controller.js # ŞİRKET YÖNETİMİ │ │ │ ├── token.controller.js │ │ │ ├── template.controller.js │ │ │ ├── settings.controller.js │ │ │ ├── tracking.controller.js # Public /t/:token │ │ │ └── stats.controller.js │ │ │ │ │ ├── services/ # Business logic │ │ │ ├── company.service.js # ŞİRKET SERVİSİ │ │ │ ├── token.service.js │ │ │ ├── mail.service.js │ │ │ ├── telegram.service.js │ │ │ ├── template.service.js │ │ │ └── tracking.service.js │ │ │ │ │ ├── middlewares/ │ │ │ ├── auth.middleware.js # Session check │ │ │ ├── errorHandler.js │ │ │ └── rateLimiter.js │ │ │ │ │ ├── routes/ │ │ │ ├── auth.routes.js │ │ │ ├── company.routes.js # ŞİRKET ROUTE'LARI │ │ │ ├── token.routes.js │ │ │ ├── template.routes.js │ │ │ ├── settings.routes.js │ │ │ ├── tracking.routes.js # Public routes │ │ │ └── stats.routes.js │ │ │ │ │ ├── validators/ # Joi validation schemas │ │ │ ├── company.validator.js # ŞİRKET VALİDATOR │ │ │ ├── token.validator.js │ │ │ ├── template.validator.js │ │ │ └── settings.validator.js │ │ │ │ │ ├── utils/ │ │ │ ├── tokenGenerator.js # crypto.randomBytes │ │ │ ├── geoip.js # geoip-lite wrapper │ │ │ ├── userAgentParser.js # useragent wrapper │ │ │ ├── encryption.js # Sensitive data encrypt/decrypt │ │ │ └── logger.js # Winston logger │ │ │ │ │ ├── templates/ # Handlebars mail templates │ │ │ ├── layouts/ │ │ │ │ └── base.hbs │ │ │ └── emails/ │ │ │ ├── bank.hbs │ │ │ ├── edevlet.hbs │ │ │ └── corporate.hbs │ │ │ │ │ ├── public/ # Landing page HTML │ │ │ └── landing.html │ │ │ │ │ └── app.js # Express app entry point │ │ │ ├── database/ │ │ └── oltalama.db # SQLite database file │ │ │ ├── migrations/ # Sequelize migrations │ │ ├── 001-create-tables.js │ │ └── 002-seed-templates.js │ │ │ ├── logs/ # Winston logs │ │ ├── error.log │ │ └── combined.log │ │ │ ├── .env.example │ ├── .gitignore │ ├── package.json │ └── README.md │ ├── frontend/ │ ├── src/ │ │ ├── components/ │ │ │ ├── Layout/ │ │ │ │ ├── Sidebar.jsx │ │ │ │ ├── Header.jsx │ │ │ │ └── Layout.jsx │ │ │ ├── Dashboard/ │ │ │ │ ├── StatCard.jsx │ │ │ │ ├── ActivityFeed.jsx │ │ │ │ ├── CompanyPerformanceTable.jsx # ŞİRKET PERFORMANS │ │ │ │ └── ChartWidget.jsx │ │ │ ├── Companies/ # ŞİRKET BİLEŞENLERİ │ │ │ │ ├── CompanyList.jsx │ │ │ │ ├── CompanyCard.jsx │ │ │ │ ├── CompanyDetail.jsx │ │ │ │ ├── CreateCompanyModal.jsx │ │ │ │ └── CompanyStats.jsx │ │ │ ├── Tokens/ │ │ │ │ ├── TokenList.jsx │ │ │ │ ├── TokenDetail.jsx │ │ │ │ ├── CreateTokenModal.jsx # Şirket seçimi ile │ │ │ │ └── ClickHistoryTable.jsx │ │ │ └── Common/ │ │ │ ├── Button.jsx │ │ │ ├── Input.jsx │ │ │ └── CompanySelector.jsx # Şirket dropdown │ │ │ │ │ ├── pages/ │ │ │ ├── Login.jsx │ │ │ ├── Dashboard.jsx │ │ │ ├── Companies.jsx # ŞİRKETLER SAYFASI │ │ │ ├── CompanyDetail.jsx # ŞİRKET DETAY │ │ │ ├── Tokens.jsx │ │ │ ├── TokenDetail.jsx │ │ │ ├── Templates.jsx │ │ │ └── Settings.jsx │ │ │ │ │ ├── services/ │ │ │ ├── api.js # Axios instance │ │ │ ├── authService.js │ │ │ ├── companyService.js # ŞİRKET SERVİSİ │ │ │ ├── tokenService.js │ │ │ ├── templateService.js │ │ │ └── settingsService.js │ │ │ │ │ ├── context/ │ │ │ └── AuthContext.jsx # Auth state │ │ │ │ │ ├── utils/ │ │ │ ├── dateFormatter.js │ │ │ └── copyToClipboard.js │ │ │ │ │ ├── App.jsx │ │ └── main.jsx │ │ │ ├── public/ │ ├── .env.example │ ├── package.json │ ├── vite.config.js │ └── README.md │ ├── docs/ │ ├── SETUP.md # Kurulum rehberi │ ├── TELEGRAM.md # Telegram bot setup │ ├── GMAIL.md # Gmail app password setup │ └── API.md # API documentation │ ├── scripts/ │ └── backup-db.sh # SQLite backup script │ ├── .gitignore ├── README.md # Ana README └── devpan.md # Bu dosya - Proje tanımı ``` ## 🚀 Kurulum ve Çalıştırma ### Development ```bash # Repository clone veya yeni proje oluştur cd oltalama # Backend setup cd backend npm install cp .env.example .env # .env dosyasını düzenle (PORT, JWT_SECRET, SMTP ayarları) # SQLite database oluştur ve migrate et npm run db:migrate npm run db:seed # Backend'i başlat npm run dev # http://localhost:3000 # Frontend setup (yeni terminal) cd ../frontend npm install cp .env.example .env # API URL'sini ayarla (REACT_APP_API_URL=http://localhost:3000) # Frontend'i başlat npm run dev # http://localhost:3001 ``` ### Production Deployment ```bash # PM2 ile production'da çalıştırma cd backend npm install --production npm run db:migrate # PM2 ile başlat pm2 start src/app.js --name "oltalama-backend" pm2 save pm2 startup # Frontend build cd ../frontend npm install npm run build # Static dosyaları serve et (nginx veya serve paketi ile) npx serve -s build -p 3001 ``` ## 📊 Tahmini Süre ve Kaynak - **Toplam Geliştirme Süresi**: 6-7 hafta (1.5-2 ay) - **Developer Sayısı**: 1 full-stack developer yeterli - **Teknoloji Seviyesi**: Intermediate Node.js, React bilgisi gerekli - **Önerilen Çalışma Temposu**: Günde 4-6 saat odaklanmış çalışma ## 💾 SQLite Kullanmanın Avantajları ### Neden SQLite? - ✅ **Sıfır Kurulum**: Ayrı database sunucusu gerektirmez - ✅ **Tek Dosya**: Tüm veri `oltalama.db` dosyasında - kolayca yedeklenir - ✅ **Taşınabilir**: Database dosyasını kopyala-yapıştır ile taşıyabilirsin - ✅ **Hafif**: Düşük kaynak tüketimi, VPS'lerde mükemmel çalışır - ✅ **Hızlı**: Küçük-orta ölçekli projeler için PostgreSQL kadar hızlı - ✅ **Güvenilir**: Milyarlarca cihazda kullanılıyor (Android, iOS, her browser) - ✅ **ACID Uyumlu**: Transaction desteği, veri güvenliği - ✅ **Backup Kolay**: Tek dosya yedekleme - `cp oltalama.db oltalama.backup.db` ### Ne Zaman PostgreSQL'e Geçilmeli? SQLite şu durumlarda yeterli: - Günde 1000'den az mail gönderiyorsan - Eşzamanlı 50'den az kullanıcı varsa - Database 10GB'dan küçükse PostgreSQL'e geç eğer: - Çok yüksek concurrency gerekiyorsa (100+ eşzamanlı yazma) - Multi-server deployment yapacaksan - Çok büyük veri setleri varsa (10GB+) - Replication/clustering gerekiyorsa ## 📱 Telegram Bot Kurulum Rehberi ### Adım 1: Bot Oluştur 1. Telegram'da **@BotFather**'ı ara 2. `/newbot` komutunu gönder 3. Bot'un adını gir (örn: "Oltalama Test Bot") 4. Bot'un username'ini gir (örn: "oltalama_test_bot") 5. BotFather sana bir **token** verecek: ``` 1234567890:ABCdefGHIjklMNOpqrSTUvwxYZ123456789 ``` 6. Bu token'ı kopyala, ayarlara yapıştıracaksın ### Adım 2: Chat ID'ni Öğren 1. Bot'unu aç ve `/start` gönder 2. Tarayıcıda şu URL'yi aç: ``` https://api.telegram.org/bot