Skip to content

mmkocak/sentinel

Repository files navigation

Sentinel

Portföyünüzü, takip listenizi, haber akışını, alarmları ve AI destekli piyasa analizini tek bir güvenli uygulamada birleştiren portföy odaklı market intelligence platformu.

Flutter Supabase Gemini pgvector

Sentinel, bireysel yatırımcının günlük karar sürecini tek bir ekranda toparlamak için tasarlandı. Uygulama yalnızca fiyat gösteren bir watchlist değil; portföy bağlamını, haber duyarlılığını, alarm motorunu, semantik haber aramasını ve AI destekli özetleri aynı veri modeli üzerinde birleştiren uçtan uca bir sistemdir.

Problem

Bireysel yatırımcı aynı anda çok fazla sinyali takip etmek zorunda kalıyor:

  • Fiyatlar farklı servislerde, haberler farklı kaynaklarda, portföy riski başka yerde duruyor.
  • Haber akışı hızlı, fakat hangi haberin kullanıcının portföyü için önemli olduğu net değil.
  • Alarm ihtiyacı istemcide değil sunucuda çalışmalı; aksi halde uygulama kapalıyken sinyal kaçıyor.
  • AI cevapları güvenilir olmalı; kaynak, araç izi ve kullanıcıya ait veri sınırı olmadan finansal asistan savunulamaz.

Sentinel bu problemi "önce portföy bağlamı" yaklaşımıyla çözer: kullanıcının pozisyonları, takip listesi, haberleri, alarmları ve AI yanıtları aynı Supabase veri katmanından beslenir.

Çözüm

İhtiyaç Sentinel yaklaşımı
Canlı piyasa takibi market-data Edge Function, Twelve Data ve 30 saniyelik sunucu cache'i
Portföy görünürlüğü positions + portfolio-snapshot ile toplam değer, günlük P/L ve dağılım
Haber zekası RSS aggregation, sembol tespiti, sentiment skoru ve pgvector embedding
Sunucu taraflı alarm alerts-evaluate cron motoru, alert_events, Realtime toast ve FCM push
AI özet ai-brief ile portföy, watchlist, haber ve alarm bağlamından Gemini structured output
Kaynaklı AI chat chat-v2 ile tool-calling RAG, semantik haber arama ve yanıt kaynakları
Veri güvenliği Supabase Auth, RLS, service-role-only cron yolları, Vault secrets ve prompt-injection guardrails

Mimari

Flutter client
  Android / Web / Linux UI
        |
        | HTTPS + JWT
        v
Supabase Edge Functions
  ai-brief, chat-v2, market-data, alerts-evaluate, news-aggregate-v2, ...
        |
        +--> Postgres 17: Auth, RLS, Realtime, pg_cron, Vault, pgvector
        +--> Twelve Data: quote, batch quote, candles, FX
        +--> Gemini 3 Pro: AI brief, chat reasoning
        +--> Gemini text-embedding-004: semantic news vectors
        +--> Firebase Cloud Messaging: Android alert push

Neden bu mimari?

  • Flutter: Tek UI kod tabanıyla mobil odaklı, web'de demo edilebilir, desktop shell'i olan bir ürün.
  • Supabase: Auth, Postgres, RLS, Realtime, Edge Functions, cron ve secret yönetimi aynı platformda.
  • Twelve Data: BIST, ABD hisseleri, kripto ve FX tarafını tek REST API ile besleyebiliyor.
  • Gemini 3 Pro: Streaming chat, structured output ve tool calling için yüksek kapasiteli reasoning modeli.
  • pgvector: Haberleri ayrı bir vector DB'ye taşımadan Postgres içinde semantik olarak sorgulama imkanı.

Ürün Yüzeyleri

Ekran / modül Ne sağlar Veri kaynağı
Auth Email + şifre ile kullanıcı oturumu Supabase Auth
Dashboard Portföy değeri, günlük P/L, risk, hızlı aksiyonlar, AI Brief portfolio-snapshot, ai-brief, market/news state
Watchlist Sembol ekleme/çıkarma, plan limitleri, Realtime senkron instruments, watchlist_items
Detail Fiyat, mum grafiği, haber, alarm aksiyonu market-data, news_cache, alert_rules
Portfolio Manuel pozisyon kaydı ve snapshot positions, quote cache, FX
Alerts Fiyat, yüzde değişim, sentiment ve keyword alarmları alert_rules, alert_events
News Sunucu taraflı haber akışı, sentiment, sembol filtreleri news_cache
AI Brief Kullanıcıya özel portföy ve haber özeti ai-brief, Gemini
AI Chat Kaynaklı RAG yanıtları ve tool izi chat-v2, pgvector, Gemini

Ekran Görüntüleri

Dashboard Watchlist
Dashboard Watchlist
Portföy değeri, günlük P/L, risk ve AI Brief tek ekranda. Plan limitleri ve Realtime senkron ile sembol takibi.
AI Chat — Soru AI Chat — Mum Grafiği
AI Question AI Chart
Tool badge, kaynaklar ve streaming yanıt. candle_chart structured block ile sohbet içi grafik.
AI Chat — Teknik Analiz Teknik Analiz Detayı
AI Technical AI Technical Detail
Indikatör tool çağrıları ve özet yorum. Sinyallerin detay kırılımı ve kaynaklar.

Backend

Supabase proje refi: axxejdwirvxdesmuzrkt

Ana tablolar

  • instruments: master sembol listesi.
  • profiles: kullanıcı profili, dil, plan ve temel para birimi.
  • watchlist_items: kullanıcıya bağlı takip listesi.
  • positions: manuel portföy pozisyonları.
  • alert_rules ve alert_events: kural ve tetiklenme kayıtları.
  • news_cache: haber, sentiment, sembol eşleşmeleri ve embedding alanları.
  • market_quote_cache: 30 saniyelik quote cache'i.
  • ai_briefs, chat_sessions, chat_messages, usage_daily, device_tokens: AI, kota ve push altyapısı.

Tüm kullanıcıya bağlı tablolarda RLS aktiftir. Plan limitleri yalnız UI'da değil, Postgres trigger seviyesinde de uygulanır.

Deployed Edge Functions

Ekran görüntüsündeki aktif Supabase Functions listesi esas alınarak:

Function Rol
ai-brief Kullanıcıya özel AI özet üretimi ve periyodik cron generation
alerts-evaluate Aktif alarm kurallarını sunucuda değerlendiren cron motoru
chat Önceki nesil streaming AI chat endpoint'i
chat-v2 Gemini tool-calling RAG, SSE stream, kaynak ve tool metadata'si
fcm-dispatch alert_events sonrasında Android FCM push gönderimi
market-data Twelve Data proxy, quote cache, batch quote ve mum verisi
news-aggregate Orijinal/compat haber okuma ve aggregate endpoint'i
news-aggregate-v2 Phase 3 haber ingest pipeline'ı: RSS -> sentiment -> UPSERT -> embedding
portfolio-snapshot Kullanıcı pozisyonlarını quote ve FX ile portföy snapshot'ına çevirir
smoke-test Operasyonel test endpoint'i, ürün özelliği değil
test-multi Test/demo endpoint'i, ürün özelliği değil
test-multi3 Test/demo endpoint'i, ürün özelliği değil

20260515000002_phase3_repoint_news_cron.sql migration'ı haber cron'unu news-aggregate-v2 fonksiyonuna yönlendirir. Flutter tarafındaki haber okuma akışı news-aggregate compat endpoint'i üzerinden aynı news_cache şeklini tüketmeye devam edebilir.

Cron işleri

Cron Sıklık Ne yapar
sentinel_news_aggregate 5 dakika Haberleri çeker, skorlar, cache'e yazar, Phase 3'te embedding üretir
sentinel_alerts_evaluate 1 dakika Alarm kurallarını quote ve haber cache'i ile değerlendirir
sentinel_quotes_refresh 1 dakika Aktif sembollerin quote cache'ini yeniler
sentinel_ai_brief_hourly 1 saat Plan cooldown'una göre AI brief üretir

AI ve RAG Hattı

chat-v2, Sentinel'in en kritik teknik farkı: kullanıcı sorusu, guardrails, tool-calling ve kaynaklı yanıt aynı zincirde çalışır.

LLM RAG Akış Şeması

Aynı akışın metin özeti:

Kullanıcı sorusu
    |
    v
L1 pre-filter: jailbreak, off-topic ve instruction override kontrolü
    |
    v
Gemini 3 Pro streaming + tool calling
    |
    +--> search_news: pgvector `match_news` ile semantik haber arama
    +--> lookup_quote: quote cache okuma
    +--> portfolio_summary: kullanıcının RLS kapsamlı portföy özeti
    +--> list_alerts: aktif alarm ve son olaylar
    +--> get_instrument_info: sembol bilgisi
    |
    v
SSE chunk stream + assistant message + metadata.sources + metadata.tools

Güvenlik tarafında üç katman var:

  • L1 pre-filter: Model çağrısı yapmadan önce açık jailbreak ve konu dışı istekleri reddeder.
  • L2 system prompt: Model finans, piyasa, portföy ve haber alanına kilitlenir; retrieved news içeriği talimat değil veri kabul edilir.
  • L3 tool gating: Tool'lar yalnız kullanıcının user_id kapsamında ve izinli tablolarda çalışır; model arbitrary SQL veya dış IO çalıştıramaz.

Demo Akışı

Jüri sunumu için önerilen demo sırası:

  1. Yeni kullanıcı girişi veya mevcut demo hesabıyla oturum.
  2. Dashboard'da portföy değeri, günlük P/L, risk ve AI Brief alanının gösterimi.
  3. Watchlist'te sembol ekleme/çıkarma ve Realtime/plan limit mantığı.
  4. Detail ekranında fiyat, mum grafiği, haberler ve alarm ekleme.
  5. Pozisyon ekleyip portföy snapshot'ının yenilenmesi.
  6. Alarm tetikleme mantığı: alerts-evaluate -> alert_events -> Realtime toast -> FCM dispatch.
  7. News ekranında sentiment ve sembol odaklı haber akışı.
  8. AI Brief üretimi: portföy + haber + alarm bağlamından kısa karar özeti.
  9. AI Chat: "ASELS son haberlerine göre nasıl görünüyor?" gibi bir soruda tool badge, kaynaklar ve streaming yanıt.

Çalıştırma

Supabase ayarları build-time define olarak verilmelidir. Eksikse uygulama bootstrap hata ekranına düşer.

Yerel geliştirme için .env dosyası kullanılır:

SUPABASE_URL=https://axxejdwirvxdesmuzrkt.supabase.co
SUPABASE_ANON_KEY=<publishable-or-anon-key>

VS Code içinden Sentinel Android/Web launch config'i bu dosyayı otomatik okur. Terminalden çalıştırırken:

flutter pub get

flutter run -d chrome \
  --dart-define-from-file=.env

Web build:

flutter build web \
  --dart-define-from-file=.env

Netlify Yayını

Repo kökünde netlify.toml Netlify için build komutunu, publish klasörünü, SPA route fallback kuralını ve temel cache/security header'larını tanımlar. Supabase URL ve publishable key Flutter web bundle'ına gömülen public client değerleri olduğu için Netlify secret scan false positive vermesin diye yalnız bu public key adları/değerleri safelist'e alınmıştır.

netlify.toml, Sentinel Supabase URL'sini ve public publishable key'i build environment için tanımlar. Netlify UI'da farklı bir proje/key kullanmak isterseniz Environment variables bölümünden şu değerlerle override edebilirsiniz:

SUPABASE_URL=https://axxejdwirvxdesmuzrkt.supabase.co
SUPABASE_PUBLISHABLE_KEY=<publishable-key>

Netlify otomatik olarak şu ayarları kullanır:

Build command: bash scripts/netlify_build.sh
Publish directory: build/web

scripts/netlify_build.sh, build ortamında Flutter yoksa stable Flutter SDK'yı indirir ve web çıktısını Netlify environment variable'larını --dart-define olarak geçirerek üretir. Eski adlandırmayla SUPABASE_ANON_KEY verilirse onu da kabul eder.

Secrets

Edge Function secrets:

Secret Kullanıldığı yer
TWELVE_DATA_API_KEY market-data, portfolio-snapshot
GEMINI_API_KEY ai-brief, chat, chat-v2, news-aggregate-v2 embeddings

Supabase Vault:

Secret Kullanıldığı yer
sentinel_service_role_key pg_cron -> Edge Function invoke
fcm_service_account_json fcm-dispatch için Firebase service account

Gizli anahtarlar repository'ye yazılmaz; Supabase Studio veya Supabase CLI üzerinden eklenir.

Doğrulama

flutter analyze

flutter build web \
  --dart-define-from-file=.env

Beklenen smoke test senaryoları:

  • Auth sonrası varsayılan watchlist ve profil yüklenir.
  • Market quote'ları market-data üzerinden gelir; cache kalitesi UI'da görülür.
  • Pozisyon eklenince dashboard portföy snapshot'ı değişir.
  • Alarm eklenir; cron tetiklediğinde alert_events Realtime ile uygulamaya düşer.
  • Haberler news_cache üzerinden listelenir.
  • AI Brief ve Chat, Gemini secret'i mevcutsa çalışır; chat-v2 yanıtında kaynak ve tool metadata'si saklanır.

Roadmap

Faz Hedef
3.1 Haber kalitesini artırmak: kaynak skoru, duplicate detection, daha iyi sembol eşleştirme
3.2 Çoklu watchlist ve akıllı listeler
3.3 Alarm rule backtest ve daha zengin teknik sinyaller
3.4 E2E test suite, observability ve performans telemetry
4.0 Plan ödemeleri, web push, iOS push ve production hardening

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors