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.
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.
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.
| İ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 |
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
- 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ı.
| 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 |
| 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 |
|---|---|
![]() |
![]() |
| Tool badge, kaynaklar ve streaming yanıt. | candle_chart structured block ile sohbet içi grafik. |
| AI Chat — Teknik Analiz | Teknik Analiz Detayı |
|---|---|
![]() |
![]() |
| Indikatör tool çağrıları ve özet yorum. | Sinyallerin detay kırılımı ve kaynaklar. |
Supabase proje refi: axxejdwirvxdesmuzrkt
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_rulesvealert_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.
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 | 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 |
chat-v2, Sentinel'in en kritik teknik farkı: kullanıcı sorusu, guardrails, tool-calling ve kaynaklı yanıt aynı zincirde çalışır.
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_idkapsamında ve izinli tablolarda çalışır; model arbitrary SQL veya dış IO çalıştıramaz.
Jüri sunumu için önerilen demo sırası:
- Yeni kullanıcı girişi veya mevcut demo hesabıyla oturum.
- Dashboard'da portföy değeri, günlük P/L, risk ve AI Brief alanının gösterimi.
- Watchlist'te sembol ekleme/çıkarma ve Realtime/plan limit mantığı.
- Detail ekranında fiyat, mum grafiği, haberler ve alarm ekleme.
- Pozisyon ekleyip portföy snapshot'ının yenilenmesi.
- Alarm tetikleme mantığı:
alerts-evaluate->alert_events-> Realtime toast -> FCM dispatch. - News ekranında sentiment ve sembol odaklı haber akışı.
- AI Brief üretimi: portföy + haber + alarm bağlamından kısa karar özeti.
- AI Chat: "ASELS son haberlerine göre nasıl görünüyor?" gibi bir soruda tool badge, kaynaklar ve streaming yanıt.
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=.envWeb build:
flutter build web \
--dart-define-from-file=.envRepo 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.
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.
flutter analyze
flutter build web \
--dart-define-from-file=.envBeklenen 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_eventsRealtime ile uygulamaya düşer. - Haberler
news_cacheüzerinden listelenir. - AI Brief ve Chat, Gemini secret'i mevcutsa çalışır;
chat-v2yanıtında kaynak ve tool metadata'si saklanır.
| 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 |






