Siber güvenlik öğrencileri için AI destekli mentor ve CTF asistanı. Sokratik yöntemle çalışarak öğrencilerin cevabı kendilerinin keşfetmesini sağlar; doğrudan çözüm vermek yerine düşündürücü sorularla yönlendirir.
- Sokratik AI Mentor — Cevabı direkt vermez, sorularla adım adım çözüme yönlendirir
- Kategori Bazlı Eğitim — SQL Injection, Network Security, Linux, Cryptography
- Kategoriye Özel Prompt'lar — Her alan için uzmanlaşmış sistem talimatları
- Markdown Destekli Chat — Kod blokları, kalın/italik, listeler, başlıklar düzgün render edilir
- Konuşma Geçmişi — Tüm sohbetler Supabase Postgres'te saklanır, geçmiş ekranından açılıp devam ettirilebilir
- Realtime Senkronizasyon — Web ve mobilde aynı kullanıcının açık sohbetleri Supabase Realtime üzerinden anlık eşitlenir
- Sohbet Silme — Geçmişten istediğin sohbeti onaylı dialog ile silebilirsin (cascade ile mesajlar da gider)
- Supabase Auth — Email/şifre ile kayıt ve giriş; oturum durumu
AuthGateüzerinden yönetilir - Kullanıcı Yönetimi — Display name düzenleme, eski şifre doğrulamalı şifre değiştirme, iki aşamalı onaylı hesap silme
- Çoklu Platform — Web (birincil) + Android desteği
- Dark Tema — Material Design 3, deep purple renk şeması
| Teknoloji | Kullanım Amacı |
|---|---|
| Flutter | Cross-platform UI framework (Dart SDK ^3.10.4) |
| Supabase Auth | Kullanıcı kimlik doğrulama |
| Supabase Postgres | Konuşma ve mesajların kalıcı depolanması, RLS ile veri izolasyonu |
| Supabase Realtime | messages tablosundaki insert event'lerini cihazlar arası taşıma |
| Google Gemini 2.5 Flash | AI mentor motoru (REST API ile doğrudan client'tan çağrılır) |
| flutter_markdown | Asistan mesajlarının Markdown render'ı |
| flutter_dotenv | Asset olarak paketlenen .env dosyasının okunması |
cyber_mentor_ai/
├── lib/
│ ├── main.dart # Uygulama giriş noktası, dotenv & Supabase init
│ ├── auth/
│ │ └── auth_gate.dart # Auth durumuna göre Login/Home yönlendirme
│ ├── pages/
│ │ ├── login_page.dart # Giriş ekranı
│ │ ├── register_page.dart # Kayıt ekranı
│ │ ├── home_page.dart # Kategori seçim ekranı (4 kart)
│ │ ├── chat_page.dart # Sohbet UI + Realtime abone + Markdown
│ │ ├── history_page.dart # Konuşma listesi, silme, devam ettirme
│ │ └── profile_page.dart # Profil, hesap yönetimi, hesap silme
│ └── services/
│ └── gemini_service.dart # Gemini 2.5 Flash REST entegrasyonu
├── supabase/
│ └── schema.sql # Tablolar, indeksler, RLS politikaları, delete_user RPC
├── .env.example # .env şablonu (boş key'lerle)
└── pubspec.yaml
1. Projeyi klonla
git clone https://github.com/ahmetsn702/CyberMentor-AI.git
cd CyberMentor-AI/cyber_mentor_ai2. .env dosyasını oluştur
.env.example'ı kopyalayıp kendi anahtarlarınla doldur:
cp .env.example .envSUPABASE_URL=https://<proje-id>.supabase.co
SUPABASE_ANON_KEY=<supabase-anon-key>
GEMINI_API_KEY=<google-ai-studio-key>- Supabase URL ve anon key: Supabase dashboard → Project Settings → API
- Gemini API key: ai.google.dev (Google AI Studio)
3. Supabase şemasını kur
Supabase dashboard → SQL Editor → supabase/schema.sql içeriğini yapıştır → Run.
Bu betik şunları kurar:
conversationsvemessagestabloları (cascade delete ile)- Kullanıcının yalnızca kendi verilerini görmesi/değiştirmesi için RLS politikaları
- Hesap silme için
delete_user()SECURITY DEFINER RPC fonksiyonu
Realtime için ek adım: Supabase dashboard → Database → Replication altında
messagestablosu için Realtime'ı aktif et, yoksa cihazlar arası senkron çalışmaz.
4. Bağımlılıkları yükle
flutter pub get5. Uygulamayı çalıştır
flutter run -d chrome # Web (birincil hedef)
flutter run -d android # Android cihaz/emülatörEkran görüntüleri
docs/screenshots/altına eklenecek.
| Login | Anasayfa | Sohbet | Geçmiş | Profil |
|---|---|---|---|---|
| eklenecek | eklenecek | eklenecek | eklenecek | eklenecek |
| Hafta | Konu | Durum |
|---|---|---|
| 1 | Flutter proje kurulumu, Supabase Auth, Login/Register ekranları | ✅ |
| 2 | Chat ekranı UI, LLM API entegrasyonu, kategori sistemi | ✅ |
| 3 | Profil sayfası, AppBar navigasyonu | ✅ |
| 4 | Kategori bazlı Socratic prompt'lar, Markdown rendering | ✅ |
| 5 | Konuşma geçmişi (Supabase Postgres), önceki sohbetlere devam | ✅ |
| 6 | Supabase Realtime, web ve mobil eş zamanlı çalışıyor | ✅ |
| 7 | Android testi tamamlandı, web-mobil realtime sync doğrulandı | ✅ |
| 8 | Kullanıcı yönetimi (display name, şifre değiştirme, hesap silme) | ✅ |
| 9 | UI polish, empty/error state'leri, sohbet silme | ✅ |
| 10 | Dokümantasyon, .env.example, son kontroller |
✅ |
| Branch | Açıklama |
|---|---|
main |
En güncel ve kararlı sürüm |
hafta-1 |
Flutter kurulum, Supabase Auth |
hafta-2 |
Chat UI, LLM API entegrasyonu |
hafta-3 |
Profil sayfası |
hafta-4 |
Kategori bazlı prompt'lar, Markdown |
hafta-5 |
Konuşma geçmişi, sohbete devam |
hafta-6 |
Realtime chat senkronizasyonu |
hafta-7 |
Android testi, dependency güncellemeleri |
hafta-8 |
Kullanıcı yönetimi (display name, şifre, hesap silme) |
hafta-9 |
UI polish, empty/error state'leri, sohbet silme |
hafta-10 |
Dokümantasyon ve son polish |
GEMINI_API_KEY bundle'a paketlenen .env asset'inden okunur — derlenmiş artifakt'a erişen biri anahtarı çıkarabilir. Ders/demo kapsamında bu kabul edilebilir; üretim için LLM çağrılarının bir Supabase Edge Function üzerinden proxy'lenmesi önerilir.
Hesap silme public.delete_user() SECURITY DEFINER fonksiyonu üzerinden çalışır; gövde auth.uid() ile sınırlı olduğu için kullanıcı yalnızca kendi hesabını silebilir, başkasını değil.
Ahmed Hüsrev Sayın Yazılım Mühendisliği — Fırat Üniversitesi
Bu proje Fırat Üniversitesi Yazılım Mühendisliği bölümü, Web Programlama dersi kapsamında geliştirilmektedir.