- Proje Hakkında
- Ekran Görüntüleri
- Özellikler
- Mimari
- Tech Stack
- Kurulum
- Ortam Değişkenleri
- Chatbot Kuralları
- Testler
- Git Akışı
- Lisans
PusulAI, SAN TSG & PAXIMUM Üniversite Staj Programı 2026 kapsamında geliştirilen, yapay zeka destekli bir seyahat asistanı uygulamasıdır.
Kullanıcılar doğal dilde seyahat taleplerini iletir — "25 Ağustos'ta Antalya'da 1 gece 1 yetişkin otel arıyorum" — chatbot eksik bilgileri soru-cevap ile tamamlar, TourVisio API üzerinden gerçek otel ve uçuş sonuçlarını listeler, kullanıcıyı kontrollü rezervasyon akışına yönlendirir ve Stripe ile kart ödemesini tamamlatır.
Proje adı neden PusulAI? Pusula, yolcuya yön gösterir. PusulAI de seyahat kararlarında kullanıcıya yön gösteren akıllı bir asistan olmayı hedefler.
Öne çıkanlar:
- 🧭 Tool-use tabanlı chatbot — AI, otel/uçuş aramayı ve rezervasyonu gerçek fonksiyon çağrılarıyla yürütür; fiyat/müsaitlik "uydurmaz".
✈️ Otel + uçak + seyahat paketi — tek sohbette otel ve uçuşu birlikte planlayıp tek rezervasyonda birleştirir.- 💳 Uçtan uca rezervasyon — kullanıcı onaylı akış + Stripe test modunda kartla ödeme.
- 🔐 Kurumsal seviye kimlik — JWT, Google OAuth, e-posta doğrulama, şifre sıfırlama.
- 🛡️ Admin paneli & RBAC — metrikler, kullanıcı/rezervasyon yönetimi, token & denetim logları, destek talepleri.
- 🔄 6 AI sağlayıcı + failover — biri hata verirse sıradaki sağlayıcı otomatik devreye girer.
Kullanıcı doğal dilde talep iletir, chatbot eksik bilgileri tamamlar ve TourVisio'dan gelen gerçek otelleri hem sohbet içinde hem sağ panelde kart olarak listeler.
Aynı sohbette uçuş araması yapılır; kalkış/varış, saat ve fiyat bilgileriyle uçuşlar listelenir.
Otel ve uçuş, tek bir seyahat paketi altında birleştirilir; tür, tarih ve duruma göre filtrelenir.
Free / Pro / Enterprise abonelik planları; her plan için AI mesaj kotası, favori/karşılaştırma limitleri ve ayrıcalıklar.
Sistem metrikleri, rezervasyon hacmi, AI maliyeti, kullanıcı/rezervasyon yönetimi, token & denetim logları ve destek talepleri.
- Tool-use (fonksiyon çağırma) tabanlı sohbet — AI arama/rezervasyonu gerçek araçlarla yürütür
- Eksik parametreleri (tarih, kişi, gece, konum) soru-cevap ile tamamlama
- Konuşma geçmişi sidebar'da AI tarafından üretilen kısa başlıklarla listelenir
- Dosya ekleme (paperclip) ve sesli giriş (mikrofon / Web Speech API, tr-TR)
- Konu dışı mesajlara 3-uyarı kilit sistemi (moderasyon)
- Karanlık / aydınlık tema, TR/EN dil desteği (i18n)
- Lokasyon, tarih, kişi sayısı, yıldız, pansiyon tipi ile filtreleme
- TourVisio API'den gerçek zamanlı otel ve uçuş sonuçları, sağ panelde kart görünümü
- Otel detay sayfası, medya galerisi, olanaklar ve müsaitlik kontrolü
- Uçuş detayları: havayolu, kalkış/varış, aktarma, bagaj, fiyat sınıfı (BASIC/FLEX)
- Karşılaştırma — birden fazla otel/uçuşu yan yana kıyaslama
- Favoriler — beğenilen otelleri kaydetme
- Kullanıcı onaylı, adım adım rezervasyon akışı
- Otel + uçuşu tek seyahat paketi olarak birleştirme
- Stripe ile kartla ödeme (test modu)
- Kayıtlı yolcu profilleri ile hızlı doldurma
- Tüm rezervasyonları listeleme, filtreleme ve detay ekranı
- Rezervasyon onayında PDF ekli e-posta bildirimi
- E-posta/şifre ile kayıt & giriş (JWT)
- E-posta doğrulama (6 haneli SMTP kodu)
- Google OAuth ile tek tıkla giriş (web yönlendirme + mobil ID token akışı)
- Şifre sıfırlama ve değiştirme (Google kullanıcıları için gizlenir)
- Refresh token desteği (mobil istemciler için)
- Profil yönetimi ve AWS S3 üzerinde avatar (private bucket, kısa ömürlü imzalı URL)
- Free / Pro / Enterprise abonelik planları ve kota yönetimi (plan-mode)
- Kota aşımında AI mesajı / karşılaştırma gibi işlemler kibarca kilitlenir
- Rol tabanlı erişim: SuperAdmin / Support / ReadOnly
- Genel özet: toplam kullanıcı, rezervasyon hacmi, AI maliyeti, uptime
- Rezervasyon, kullanıcı, plan talebi ve ödeme yönetimi
- Token kullanım logları, denetim logları ve TourVisio hata logları
- Destek talepleri (support ticket) yönetimi
- Redis ile cache-aside katmanı (otel detay, görsel, konum, arama sonuçları için ayarlanabilir TTL)
- 6 AI sağlayıcı arasında geçiş + failover (birincil hata verirse yedekler denenir)
- Sentry ile hata izleme/alerting (opsiyonel)
- Mobil API sözleşmesi — native istemciler için ayrı akışlar (
docs/mobile)
PusulAI
├── src/
│ ├── backend/ # .NET 9 Clean Architecture
│ │ ├── src/
│ │ │ ├── PusulAI.Domain/ # Entity'ler, interface'ler, enum'lar
│ │ │ ├── PusulAI.Application/ # Use case'ler, servisler, DTO'lar, validasyon
│ │ │ ├── PusulAI.Infrastructure/ # TourVisio, AI, Stripe, S3, Email, Redis, EF Core
│ │ │ └── PusulAI.WebAPI/ # Controller'lar, middleware, DI
│ │ └── tests/
│ │ ├── PusulAI.Application.Tests/
│ │ └── PusulAI.IntegrationTests/
│ │
│ └── frontend/ # React + TypeScript + Vite
│ └── src/
│ ├── components/ # chat, hotel, flight, compare, reservation, admin, landing…
│ ├── pages/ # Chat, HotelDetail, Reservations, Profile, Landing, Admin…
│ ├── services/ # axios tabanlı API istemcileri
│ ├── contexts/ # Auth, Theme, LogoutConfirm context'leri
│ └── types/ # TypeScript tip tanımları
│
├── docs/ # API koleksiyonu, mimari, mobil rehber, ekran görüntüleri
├── docker-compose.yml # postgres + redis + backend + frontend
└── .env.example
Kullanıcı (Browser / Mobil)
│
▼
React Frontend
│ REST /api
▼
.NET WebAPI ──────────────────────────────────────────────┐
├── Application Layer → ChatApplicationService, AuthService, ReservationService
│ └── Fire-and-forget AI başlık üretimi (IServiceScopeFactory)
├── Domain Layer → ChatSession, Reservation, Subscription, User…
└── Infrastructure
├── AI Providers → DeepSeek / Gemini / Claude / OpenAI / Groq / Ollama (+failover)
├── TourVisio → Otel & uçuş arama / rezervasyon
├── Payments → Stripe (kartla ödeme)
├── Email → SMTP (doğrulama + rezervasyon PDF)
├── Storage → AWS S3 (avatar)
├── Caching → Redis (cache-aside)
└── EF Core → PostgreSQL 16
Güvenlik ilkesi: Browser hiçbir zaman doğrudan TourVisio, AI, Stripe veya S3'e istek atmaz. Tüm dış çağrılar backend üzerinden geçer; API key'ler yalnızca sunucuda tutulur.
| Teknoloji | Kullanım |
|---|---|
| .NET 9 | Web API runtime |
| ASP.NET Core | HTTP pipeline, controller'lar, DI |
| Entity Framework Core 9 | ORM, PostgreSQL |
| PostgreSQL 16 | Ana veritabanı |
| Redis 7 | Cache-aside katmanı |
| FluentValidation | Request doğrulama |
| Stripe.net | Kartla ödeme |
| AWS SDK (S3) | Avatar depolama |
| Sentry | Hata izleme (opsiyonel) |
| xUnit + Moq | Unit & entegrasyon testleri |
| Teknoloji | Kullanım |
|---|---|
| React 18 + TypeScript 5 | UI framework |
| Vite | Build tool |
| Tailwind CSS | Utility-first stil |
| Framer Motion | Animasyonlar |
| TanStack Query | Sunucu durumu / cache |
| Zustand | İstemci durumu |
| Axios | HTTP istemcisi |
| React Router 6 | Sayfa yönlendirme |
| react-i18next | Çoklu dil (TR/EN) |
| Recharts | Admin grafik/metrikleri |
| React Leaflet | Otel harita görünümü |
| Stripe.js | Ödeme formu |
| Sağlayıcı | Durum | Tool-use |
|---|---|---|
| DeepSeek | Aktif (varsayılan) | ✅ |
| Google Gemini | Destekleniyor | ✅ |
| Groq | Destekleniyor | ✅ |
| Ollama (yerel) | Destekleniyor | ✅ |
| Anthropic Claude | Destekleniyor | |
| OpenAI | Destekleniyor |
Sağlayıcı
AI__Providerile seçilir.AI__FallbackProvidersile birincil hata verdiğinde denenecek yedekler tanımlanır. Tool-use gerektiren arama/rezervasyon akışları için Gemini/DeepSeek/Groq/Ollama önerilir.
# 1. Repo'yu klonla
git clone https://github.com/mertosmanayhan/PusulAI.git
cd PusulAI
# 2. Ortam değişkenlerini ayarla
cp .env.example .env
# .env dosyasını düzenle (DB şifresi, JWT_SECRET_KEY, AI API key, TourVisio bilgileri)
# 3. Tüm servisleri başlat (postgres + redis + backend + frontend)
docker compose up --build| Servis | URL |
|---|---|
| Frontend | http://localhost:5173 |
| Backend API | http://localhost:5000/api |
| API Docs (Scalar) | http://localhost:5000/scalar/v1 |
| PostgreSQL | localhost:5432 |
| Redis | localhost:6379 |
Portlar
.enviçinden değiştirilebilir (FRONTEND_PORT,BACKEND_PORT,POSTGRES_PORT,REDIS_PORT).
Gereksinimler: .NET 9 SDK · Node.js 20+ · PostgreSQL 16 · Redis 7
# Backend
cd src/backend/src/PusulAI.WebAPI
cp appsettings.example.json appsettings.Development.json
# appsettings.Development.json içini doldur
dotnet restore
dotnet ef database update
dotnet run# Frontend (ayrı terminalde)
cd src/frontend
cp .env.example .env # VITE_API_BASE_URL=http://localhost:5000/api
npm install
npm run dev.env dosyası (kök dizin, Docker için). Tam liste ve açıklamalar için .env.example dosyasına bakın.
# --- Zorunlu ---
DB_PASSWORD=changeme
JWT_SECRET_KEY=<openssl rand -base64 48 ile üretin, min 32 karakter>
# --- AI (gemini | claude | openai | groq | deepseek | ollama) ---
AI__Provider=DeepSeek
AI__FallbackProviders= # örn: DeepSeek,Groq (boş = failover kapalı)
AI__DeepSeek__ApiKey=sk-...
AI__DeepSeek__Model=deepseek-v4-flash
# --- TourVisio (sunucu tarafında kalır) ---
TOURVISIO_BASE_URL=https://tourvisio-api-url
TOURVISIO_AGENCY=your_agency_code
TOURVISIO_USERNAME=your_username
TOURVISIO_PASSWORD=your_password
# --- Opsiyonel entegrasyonlar (boş bırakılırsa ilgili özellik devre dışı kalır) ---
GOOGLE_CLIENT_ID= # Google OAuth
GOOGLE_CLIENT_SECRET=
SMTP_HOST=smtp.gmail.com # E-posta doğrulama (boşsa kod log'a yazılır)
SMTP_USERNAME=
SMTP_PASSWORD=
STRIPE_SECRET_KEY= # Kartla ödeme (test modu)
STRIPE_PUBLISHABLE_KEY=
AWS_S3_BUCKET_NAME= # Avatar depolama (private bucket)
SENTRY_DSN= # Hata izlemeGüvenlik:
.envveappsettings.Development.jsondosyaları.gitignore'a eklenmiştir ve kesinlikle commit edilmemelidir. Tüm opsiyonel entegrasyonlar boş bırakıldığında uygulamanın geri kalanı çalışmaya devam eder — ilgili özellik anlamlı bir hata döndürerek devre dışı kalır.
Chatbot yapabilir:
- Kullanıcının otel / uçak arama niyetini anlamak
- Eksik parametreleri soru-cevap ile tamamlamak
- TourVisio'dan gelen sonuçları listelemek ve filtrelemek
- Otel ve uçuşu birlikte seyahat paketi olarak değerlendirmek
- Kullanıcıyı rezervasyon ve ödeme ekranına yönlendirmek
Chatbot yapamaz:
- Kullanıcı onayı olmadan rezervasyon veya ödeme tamamlamak
- API'den gelmeyen fiyat veya müsaitlik üretmek ("hallucinate")
- API key, sistem prompt veya teknik gizli bilgi paylaşmak
- Seyahat dışı konulara cevap vermek (3 ihlalde oturum kilitlenir)
cd src/backend
dotnet testİki test projesi bulunur:
PusulAI.Application.Tests— servis ve iş kuralı unit testleriChatApplicationServiceTests— oturum oluşturma, mesaj göndermeChatApplicationServiceModerationTests— konu dışı mesaj / kilit akışı- Rezervasyon, plan/kota, ödeme ve doğrulama testleri
PusulAI.IntegrationTests— API uçtan uca / entegrasyon testleri
# Frontend testleri
cd src/frontend
npm run test # Vitestmain ←── production-ready, korumalı
└── develop ←── aktif geliştirme
├── feature/landing-page
├── feature/reservation-payment-integration
├── feature/enterprise-email-templates
├── feature/plan-mode
└── fix/...
- Her yeni özellik için
develop'tan branch açılır - PR açılmadan
develop'a merge yapılmaz - Commit mesajları
feat:,fix:,docs:,refactor:,chore:önekleriyle yazılır
Bu proje SAN TSG & PAXIMUM Üniversite Staj Programı 2026 kapsamında eğitim amaçlı geliştirilmiştir.





