Kadir Terzi
Projelere dön

Mobil uygulama ve admin panel

KadroBul

Kamu personel alım ilanlarını adayın profiline göre karşılaştıran Android uygulaması ve ilanları yayınlamak için geliştirdiğim admin panel.

FlutterNext.jsSupabase

Genel bakış

KadroBul, kamu personel alım ilanlarını adayın profil bilgileriyle karşılaştıran bir Android uygulamasıdır. Aday öğrenim, sınav puanı ve diğer bilgilerini girer; uygulama her kadronun şartlarını bu bilgilerle kontrol ederek hangi kadroları incelemesi gerektiğini gösterir.

Uygulamanın yanında ilanları yayınlamak için ayrı bir admin panel geliştirdim: ilan metni yapıştırılır, yapay zeka (Gemini) taslağı hazırlar; ben kaynakla karşılaştırıp düzelttikten sonra yayınlarım.

Neler yaptım

Üç durumlu eşleştirme

Eşleştirme kadro bazında yapılır. Şart sağlanıyorsa yeşil tik, bilgi girilmediği için kontrol edilemiyorsa sarı soru işareti gösterilir; aday şartı açıkça karşılamıyorsa kadro elenir. Boş bırakılan bilgi ilanı gizlemez. Öğrenim alternatifleri (VEYA) ve ayrı şartlar (VE) ayrı ele alınır.

Admin panel ve yapay zeka taslağı

İlan metni ya da PDF/görsel yüklenir, Gemini ilan ve kadro taslağını çıkarır. Taslak yalnız kaynak metindeki bilgiyi içerir; bulunmayan alanlar boş kalıp uyarı gösterir. Yayından önce taslak kaynakla karşılaştırılıp insan tarafından kontrol edilir; ilan ve kadrolar tek işlemde kaydedilir.

Mimari

Kimlik, kişisel profil ve eşleştirme Supabase'de; herkese açık ilan içeriği Cloudflare Worker ve D1 üzerinden dağıtılır. Mobil uygulama Drift (SQLite) ile yerel önbellek tutar.

Gizlilik ve hesap

Kayıt zorunlu değil: uygulama anonim kimlikle çalışır, isteğe bağlı olarak Google hesabı bağlanabilir. Kişisel profil bilgisi içerik dağıtım katmanına gönderilmez. Hesap ve verileri kalıcı silme uygulamadan ve web üzerinden yapılabilir; kaydedilen ilanlar cihazda saklanır.

Test

Eşleştirme kuralları, admin panel doğrulamaları ve mobil ekranlar otomatik testlerle kontrol edilir (mobilde Flutter testleri, admin panelde birim testleri).

Mimari

Admin panel (Next.js)ilan yayınıGeminitaslak üretimiSupabasekimlik · profil · ilan · eşleştirmeCloudflare Worker + D1herkese açık ilan içeriğiMobil uygulama (Flutter)Drift (SQLite) yerel önbellektaslakilan kaydıiçerik eşitlemeilan içeriğikimlik, profil,eşleştirmeKişisel profil buraya gönderilmezGeminitaslak üretimiAdmin panel (Next.js)ilan yayınıSupabasekimlik · profil ·ilan · eşleştirmeCloudflare Worker+ D1herkese açık ilan içeriğiMobil uygulama (Flutter)Drift (SQLite) yerel önbellektaslakilan kaydıiçerik eşitlemekimlik, profil,eşleştirmeilan içeriğiKişisel profil Cloudflare'a gönderilmez.
Gemini → Admin panel: ilan taslağı Admin panel → Supabase: ilan kaydı Admin panel → Cloudflare Worker + D1: herkese açık içerik eşitleme Cloudflare Worker + D1 → Mobil uygulama: ilan içeriği Mobil uygulama ⇄ Supabase: kimlik, profil, eşleştirme Kişisel profil Cloudflare'a gönderilmez.
  1. Gemini → Admin panel: ilan taslağı
  2. Admin panel → Supabase: ilan kaydı
  3. Admin panel → Cloudflare Worker + D1: herkese açık içerik eşitleme
  4. Cloudflare Worker + D1 → Mobil uygulama: ilan içeriği
  5. Mobil uygulama ⇄ Supabase: kimlik, profil, eşleştirme
  6. Kişisel profil Cloudflare'a gönderilmez.

Teknolojiler

Mobil
  • FlutterAndroid uygulaması
  • DartUygulama dili
  • RiverpodDurum yönetimi
  • GoRouterYönlendirme
  • Drift + SQLiteYerel önbellek
  • Google Sign-Inİsteğe bağlı Google hesabı bağlama
Admin panel
  • Next.jsAdmin panel
  • ReactArayüz
  • TypeScriptTip güvenli kod
  • Tailwind CSSStil
  • Geminiİlan taslağı çıkarma
Altyapı
  • SupabaseKimlik, kişisel profil, ilan verisi, sunucuda eşleştirme, Edge Function
  • PostgreSQLSupabase veritabanı ve satır düzeyi güvenlik
  • Cloudflare Workers + D1Herkese açık ilan içeriği
  • Cloudflare PagesGizlilik ve hesap silme sayfaları