Oracle3
Oracle3: 예측시장 거래 엔진·MCP 서버
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기ABD borsaları için günlük takip platformu: zil çalmadan önce bugünü gör.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
ABD borsaları için Türkçe günlük takip platformu. Zil çalmadan önce bugünü gör. Ekonomik takvim, bilanço tarihleri, gecikmeli ama damgalı canlı fiyat, grafikler, makro göstergeler, haber akışı ve kişisel takip listeleri. Hepsi Türkiye saatiyle ve tek ekranda. Üstüne her gün yazılan bir bülten, olayların arkasındaki mekanizmayı anlatan uzun yazılar, bilanço analizleri ve günde üç kez yenilenen teknik analizler. İki dil (TR/EN), açık ve koyu tema, telefondan geniş ekrana tam uyum. Ücretsiz, reklamsız, açık kaynak.README 전문 보기 ↗
ABD borsaları için Türkçe günlük takip platformu. Zil çalmadan önce bugünü gör.
aciliszili.com · English · Rehber · Mercek
Açılış Zili'nin tek derdi, ABD borsasını Türkiye'den doğru takip edebilmek. Doğru takip dört şey demek: doğru saatte (İstanbul saatiyle, yaz saati kaymalarıyla birlikte), doğru günde (ekrandaki her sayı hangi seansı anlattığını bilir), doğru sırayla (bir işlem gününün ritmi, bilanço ve veri takviminin akışı) ve eksiksiz bağlamla (fiyatın yanında takvim, bilanço, makro veri, haber ve kendi takip listen).
Bunun için bir araya gelen parçalar: ekonomik takvim, bilanço tarihleri, gecikmeli ama damgalı fiyat, grafikler, makro göstergeler, haber akışı ve kişisel takip listeleri. Hepsi Türkiye saatiyle ve tek ekranda. Üstüne her gün yazılan bir bülten, olayların arkasındaki mekanizmayı anlatan uzun yazılar, bilanço analizleri ve günde üç kez yenilenen teknik analizler.
İki dil (TR/EN), açık ve koyu tema, telefondan geniş ekrana tam uyum. Ücretsiz, reklamsız, açık kaynak.
Sekiz konu başlığı var ve her biri ayrı bir soruya cevap veriyor.
| Soru | Nerede | |
|---|---|---|
| 📈 | Piyasa bugün nerede? Endeksler (S&P 500, Nasdaq 100, Dow, Russell 2000), açılışa geri sayım ve seans şeridi, günün en çok yükselen ve düşenleri, piyasa genişliği ve bileşenlerin ısı haritası, tahvil faizleri ve getiri eğrisi, VIX, dünya piyasaları. Bileşenleri ekranda açık duran bir Piyasa Nabzı, on bir SPDR fonuyla sektör performansı, emtia ve kripto fonları. | / · /piyasalar |
| 🏢 | Bu şirket nasıl gidiyor? Gün içinden beş yıla grafik (alan ya da mum; USD, TL ya da Reel TL), profil, değerleme ve risk ölçüleri, sektör yüzdelikli skor kartı, 52 hafta bandı, analist dağılımı ve aydan aya değişimi, içeriden işlemler, bilanço öncesi beklenen hareket, temettü, haberler, geçmiş bilanço sürprizleri. 1.000'i aşkın şirket sektör şeridiyle ve sıralanabilir bir dizinde; iki ile dört hisse aynı ölçekte yan yana, yirmi hazır çift ve on tematik liste. | /sirketler · /hisse/NVDA · /karsilastir · /tema |
| 🧾 | Kim ne zaman bilanço açıklıyor? Açılış öncesi mi kapanış sonrası mı, analist EPS ve gelir beklentisi ne, gerçekleşen ne çıktı. Takvim .ics olarak kendi takvimine eklenebiliyor, haftası paylaşılabilir bir görsel olarak iniyor. Açıklanan çeyrekler için skorlu uzun analizler, başında "30 Saniyede" özeti, segment ve KPI verisi. | /bilancolar · /bilancolar/hafta |
| 🎯 | Teknik olarak nereden alınır, nerede vazgeçilir? On beş hissenin her işlem günü üç kez yenilenen analizi: görüş (Al/Tut/Sat), alım bölgesi, hedefler, stop, destek ve direnç, senaryolar. Listede olmayan hisselerde yorumsuz bir teknik fotoğraf. | /teknik |
| 🧭 | Ünlü yatırımcılar ne alıp satıyor? Buffett, Burry, Ackman, Cathie Wood, Dalio ve on bir ismin SEC 13F bildirimlerinden portföyü, bu çeyrek yeni aldıkları, artırdıkları, azalttıkları ve tamamen sattıkları (adet farkıyla, bölünme ayıklanarak); Nancy Pelosi'nin Kongre işlem bildirimleri tutar aralığıyla. Hisse sayfasında "bu hisseyi kim tutuyor". | /yatirimcilar |
| 🏛️ | Ekonomi ne diyor? CPI, FOMC, istihdam, PCE; takvimde saatleriyle, beklenti ve gerçekleşenle. On bir FRED serisi, sonraki FOMC kararı, halka arz ve temettü takvimi. | /makro · /takvim |
| 📰 | Siteden çıkmadan okunan haber akışı, her gün yazılan bülten, olayın anlatan Mercek yazıları, borsayı sıfırdan öğreten sıralı bir rehber ve yüz elli terimlik bir sözlük. |
Bir de kişisel taraf var: çoklu takip listeleri, renkli etiketler, ana sayfada
kendi listenin özeti, yalnızca senin izlediklerinin bilanço takvimi,
alış günü kuruyla TL kâr/zarar tutan bir portföy, hesabındaki her şeyi tek
dosyada indiren "Verilerimi İndir" ve hesabını gösteren, sitenin kendi
çizdiği on altı profil ikonundan biri ve yedi renkten biri. İstersen bir de
herkese açık profilin var (/u/kullanıcı-adın): varsayılan gizli, açarsan
tanıtımın, rozetlerin ve seçtiğin bloklar — takip listelerin ve tutar
içermeyen portföy dağılımın, sitenin kendi hesapladığı "doğrulanmış
getiri"yle — görünür.
Site bir işlem gününün ritmine göre kuruldu. Saatler Türkiye saati; ABD yaz saatine göre kayıyorlar (kışın açılış 17:30) ve ekranda her zaman o günün tarihiyle hesaplanıyorlar.
| Saat (TR) | Ne oluyor | Nereye bakarsın |
|---|---|---|
| 09:00 | Dün açıklanan bilançoların analizleri yayında: skor, görüş, hedef fiyat, güçlü yönler ve riskler. | Bilançolar → Analizler |
| 11:30 | Günün ilk Mercek yazısı: bir olayın arkasındaki mekanizma, metinden çizilen grafik ve rakam bloklarıyla. | Mercek |
| 15:45 | Açılış öncesi teknik analiz: on beş hissenin planı güncellendi. | Teknik Analiz |
| 16:10 | Günün bülteni: bugün neye bakmalı, takvimde ne var. | Ana sayfa → Günün Özeti |
| 16:30 | 🔔 Açılış zili. Geri sayım sıfırlanır ve zil çalar; endeks kartları, hareket paneli ve gün akışı canlıya geçer. | Ana sayfa |
| 19:45 | Seans içi teknik analiz. | Teknik Analiz |
| 21:45 | Kapanışa doğru teknik analiz. | Teknik Analiz |
| 23:00 | Kapanış zili. Kapanış sonrası bilançolar bu pencerede açıklanır. | Bilançolar |
| 23:30 | Günün ikinci Mercek yazısı. | Mercek |
Pazartesi sabahı 09:30'da bir de haftalık bülten yayımlanıyor.
Birkaç kısayol:
⌘K / Ctrl K: her yerden sembol, şirket, teknik analiz ve yazı arama. Ana sayfa arka plandaki sekmede kalırsa sekme başlığı zile kalan süreyi gösterir..ics olarak telefonunun takvimine atar./en/...: her sayfanın İngilizcesi aynı adreste, önekli.Ürünün geri kalanı bu dört karardan türüyor. Canlı fiyat bunların yalnızca bir parçası, hem de en küçüğü; mesele fiyatı görmek değil, piyasayı doğru zamanda, doğru günde ve eksiksiz izleyebilmek.
Bütün kaynaklar New York saatiyle yayın yapıyor. Bir bilançonun "after the
close" açıklanacağını bilmek yetmiyor; okuyucunun bunu kafasında 23:00'a
çevirmesi gerekiyor ve ABD yaz saati kaydıkça bu dönüşüm yılda iki kez
değişiyor. Bu üründe birincil saat İstanbul, New York künyede durur;
İngilizceye geçince sıra tersine döner. Hiçbir yere sabit saat yazılmaz. Tek
kaynak lib/session-clock.ts; ET↔UTC dönüşümünün tamamı lib/market-hours.tste.
Cumartesi açılan ekran cumayı anlatır; New York'ta çarşamba gecesi 02:00'de
hâlâ salı seansı konuşulur; tatil olan pazartesi önceki cumayı taşır. Ekranın
hangi işlem gününü anlattığı tek bir alandan okunur (status.sessionDate,
lib/market-hours.ts) ve her yüzde, her grafik, her hacim o güne ait olduğunu
göstermek zorundadır. Gösteremiyorsa dünün sayısı "seans içi" künyesiyle
basılmaz; kart boş kalır ya da "güncel olmayabilir" der. Kodun tarafı
aşağıda, Üç Katmanlı Veri'de.
Takip bir anlık görüntü değil, gün boyu süren bir akış: sabah önceki günün
bilanço analizleri, öğleden sonra bülten, 16:30'da zil ve canlı ekran,
kapanıştan sonra bilançolar, gece Mercek. Site bu ritme göre kuruldu;
yukarıdaki tablo bir işlem gününün tamamı. Bilanço takvimi .ics olarak
telefona iniyor, fiyat alarmı Web Push ile geliyor: takip etmek için sitede
oturmak gerekmiyor.
Bir hissenin sayfasında fiyatın yanında bilanço tarihi ve beklentisi, analist dağılımı, haberler, içeriden işlemler ve o hisseyi hangi ünlü yatırımcının tuttuğu var. Takip listesi kurduğunda ana sayfa yalnızca senin şirketlerinin bilanço takvimini öne çıkarır. Türkiye'den yatırım yapan biri için TL maliyet, kur etkisi ve vergi de bağlamın parçası; portföy ve vergi hesaplayıcısı bu yüzden sitenin içinde.
Doğru takip güvenilir bir ekran ister. Ücretsiz sağlayıcılar dünyayı yarım
gösteriyor ve bu proje eksik veriyi gizlemek yerine söylemeyi seçiyor. Veri yoksa kart boş durur. Her kartın
altında kaynak · saat damgası vardır. Gecikmeli besleme gecikmeli olduğunu
yazar. Sağlayıcı dakika vermiyorsa saat ~ ile yaklaşık yazılır ve hangi
pencere olduğu adıyla söylenir. Bir metrik dürüstçe gösterilemiyorsa hiç
gösterilmez: Brent kartı bu yüzden kaldırıldı.
Bu ilke animasyona kadar iniyor. Fiyat grafiğinin ucundaki atan nokta "fiyat hâlâ oynuyor" demek; o yüzden yalnızca seans açıkken ve çizilen gün seans günüyse atıyor.
flowchart LR
subgraph Kaynaklar
AL[Alpaca<br/>fiyat · bar]
FH[Finnhub<br/>profil · haber · bilanço]
FR[FRED<br/>makro · faiz · VIX]
TC[TCMB<br/>USD/TRY · arşiv · EVDS]
end
subgraph Sunucu["Next.js 16 · kendi sunucusu"]
PL["Sağlayıcı katmanı<br/>canlı → yedek → son bilinen"]
RSC["Sunucu bileşenleri<br/>istek başına çizim"]
API["Korumalı yazma uçları<br/>/api/brief · mercek · analiz · teknik"]
CW["lib/content-write.ts<br/>tek doğrulama + tek yazma yolu"]
CRON["/api/cron/daily<br/>takvim · haber · FRED · profil"]
end
DB[(Neon PostgreSQL<br/>Drizzle ORM)]
RT["claude.ai rutinleri<br/>bülten · mercek · analiz · teknik"]
U((Okuyucu))
AL & FH & FR & TC --> PL
PL <--> DB
PL --> RSC
RT -- "BRIEF_SECRET" --> API --> CW --> DB
CRON --> DB
DB --> RSC --> U
Sitenin yazılı içeriğini (bülten, Mercek yazıları, bilanço ve teknik analizler) claude.ai üzerindeki zamanlanmış rutinler üretir ve korumalı uçlara yazar. Sunucu yalnızca veritabanından okur. Yayın gecikirse ekran en son yazılanı gösterir ve yenisinin ne zaman geleceğini söyler.
Rutin sayı üretmez, yorum yazar: teknik analizde göstergeleri (ortalamalar, RSI, MACD, hacim, pivotlar) site kendi fiyat verisinden hesaplar ve rutine verir; gösterge fotoğrafını yazma ucu kendisi çıkarır.
Sunucunun kendi model çağrıları içerik üretmez, okurun önündeki ekrana not
düşer ve hepsi anahtara bağlı, isteğe bağlıdır: haber başlığı çevirisi (önce
DeepL, Claude yedek), hisse/haber/portföy notları ve Bu Hisseye Sor (ortak
günlük bütçe lib/claude-budget.ts; çıktıdaki her sayı girdide geçmek zorunda,
lib/ai-grounding.ts) ve yetkili hesabın istediği Claude analizi
(docs/claude-analysis.md).
Doğrulama şeması, sürüm fotoğrafı ve upsert lib/content-write.tste.
Rutinlerin uçları da yönetim panelinin editörleri de oradan geçer. Panelden
yeni kayıt üretilmez, yalnızca var olan düzeltilir; üzerine yazılan hâlin
fotoğrafı story_revisionsa düşer.
Her sağlayıcı çağrısı sırayla üç kapıdan geçer: canlı sağlayıcı → yedek
sağlayıcı → Neon'daki son bilinen değer. Hiçbir aşamada uydurma değer
üretilmez. Sağlayıcı fonksiyonları throw etmez, hatayı değer olarak
döndürür; kart "veri alınamadı" der ve sayfanın geri kalanı çalışmaya devam
eder.
"Doğru gün" kuralının kodu burada: bir yüzde hangi seansı anlattığını
kanıtlamak zorunda. Kotasyon ancak
işlem günü status.sessionDatee eşitse ve yeterince tazeyse "bugün" sayılır.
Ekran katmanı bayat veriyi künyesiyle gösterebilir; yazma katmanı
gösteremez. Bülten, Mercek ve teknik uçlar bayat kotasyonu hiç kullanmaz,
çünkü oradan çıkan sayı metne geçip kalıcı olur.
Kotasyon tazeliği seansa göre değişir: seans içinde 15 saniye, uzatılmış seansta 60, kapalıyken 15 dakika. Önbellek ziyaretçi başına değil sunucuda olduğu için sağlayıcıya giden istek trafikle artmıyor.
İstek içinde cache() ile tekilleştirme var ve anahtar sıralanmış sembol
dizesi: iki panel aynı listeyi sorduğunda sağlayıcıya bir kez gidilir. Bu
hız kadar doğruluk meselesi; ayrı çekilselerdi aynı ekranda aynı hissenin iki
farklı yüzdesi durabilirdi.
Yazıların fotoğrafı yok. Görsel dil, metinden çizilen ::: bloklarıdır:
model yalnızca satırları yazar, çizimi site yapar.
::: sayilar Rakamlarla
%5,31 | 30 yıllık faiz, pazartesi
2007 | bu seviyenin son görüldüğü yıl
:::
Yedi görsel blok (sayilar · bar · pay · akis · oncesi · zaman ·
grafik) ve dört metin kutusu (ornek · dikkat · ozet · tanim) var.
Kazanç üç: telif riski yok, görsel barındırmak gerekmiyor, her temada
tutarlı. Elimizdeki gerçek görsel kaynağı şirket logoları.
Tek belgeli istisna ünlü yatırımcıların portreleri. Önce Wikimedia
Commons'taki kamu malı ya da CC BY / CC BY-SA lisanslı dosyalar
kullanılıyor, lisansları tek tek okunarak. Özgür portresi olmayan kişilerin
karesi, sahibinin telif riskini bilerek kabul etmesiyle, kurumlarının ya da
kendilerinin herkese açık sayfalarından alındı; künyede lisans değil
yalnızca yayımlayan ve kaynak yazıyor. Hepsi kare kırpılıp
public/investors/ altında yerelde barındırılıyor (kayıt
lib/investors.ts → PORTRAITS). Karesi olmayan ya da kaldırılan kişi,
hikâyesinden gelen bir amblem karosuyla çiziliyor; fotoğraf üretilmiyor.
Yerleşim kararları tahminle değil ölçümle veriliyor ve ölçüm kod yorumunda kalıyor: hangi genişlikte kaç piksel taştığı, hangi CLS değerinin nereden geldiği, hangi kontrast oranının kaça çıktığı. Kod içi Türkçe yorumlar birer karar kaydıdır: ne yapıldığını değil, neden yapıldığını ve hangi somut hatanın onu doğurduğunu anlatırlar.
| Katman | Seçim | Neden |
|---|---|---|
| Framework | Next.js 16.2 · App Router · Turbopack | Sunucu bileşenleri, akışlı Suspense, sunucu eylemleri |
| UI | React 19.2 | useOptimistic, useActionState, form eylemleri |
| Dil | TypeScript 5, strict | en sözlüğü tr tipinden türer; eksik çeviri derlenmez |
| Stil | Tailwind CSS v4 | tailwind.config yok; tokenlar app/globals.css içindeki @theme inline bloğunda |
| Hareket | Motion 13 (motion/react) + Web Animations API + CSS | Panel girişleri, düzen geçişleri, logo uçuşu |
| Çizim | Canvas 2D mürekkep motoru (lib/ink/) | Tohumlu, deterministik, kare kare saf fonksiyon |
| Grafik | lightweight-charts 5 (hisse) · elle çizilen SVG (sparkline, karşılaştırma, makale blokları) | |
| Veritabanı | Neon PostgreSQL (@neondatabase/serverless) + Drizzle ORM 0.45 | Migration'lar drizzle/ altında, yalnızca eklenir |
| Doğrulama | Zod 4 | İçerik yazma yolu ve API uçları |
| Auth | next-auth v5 · Credentials + bcrypt · JWT | Yönetim yetkisi veritabanında |
| İkon | Phosphor (duotone) + sitenin kendi çizdiği profil ikonları | |
| Yazı | Schibsted Grotesk, tek aile, değişken 400–900 | Ayrım punto ve ağırlıkla |
| Tema | Custom data-theme + az-theme çerezi | next-themes yok; ilk karede doğru tema |
| Barındırma | Oracle Cloud Always Free · next start + systemd · Caddy (TLS) | Her push GitHub Actions ile deploy |
| Doğrulama araçları | (41 test dosyası) · başsız Chrome () duman testi ve ölçüm betikleri |
Animasyon süs için değil, okumayı kolaylaştırmak için var ve her hareketin
bir işi var. Hepsi prefers-reduced-motiona saygı gösterir: azaltılmış
harekette son kare tek seferde basılır.
Mürekkep sahneleri (lib/ink/, components/ink/). Fotoğraf yerine
çizimin ikinci ayağı. Canvas 2D motoru fırça, damla, sıçrama ve kuru fırça
dokusunu tohumlu ve deterministik çiziyor; her sahne render(ctx, t) saf
fonksiyonu. Karakter markanın zili: gözleri ve gülümsemesi var. Renkler
temadan (mürekkep ve pirinç). Sahneler görünüme girince bir kez oynar ve
oturur. On yedi sahne var; yerleri şunlar:
Yükleme işareti de aynı zil: iş bitene kadar sallanıp çalıyor, çevresinde fırçayla çizilmiş pirinç bir yörünge dönüyor ve her vuruşta kıvılcım sıçrıyor. Gezinme bekleyişinin kartı marka adıyla açılıyor.
Geçişler.
İlk ekranda görünen hiçbir şey hidrasyonda sönüp yeniden gelmez. Bunun
ölçümü components/motion/PremiumMotion.tsxte.
32 tablo. "Kim yazar" sütunu önemli: bir tablonun tazeliği onu yazanın ritmine bağlı.
| Tablo | Ne tutar | Kim yazar |
|---|---|---|
users · watchlists · watchlist_items | Hesap, takip listeleri ve sembolleri | Kullanıcı eylemleri |
user_avatars | Seçilen profil ikonu ve rengi (anahtar olarak) | Kullanıcı eylemi (Ayarlar) |
user_profiles | Herkese açık profil: tanıtım + görünürlük anahtarları (varsayılan gizli) | Kullanıcı eylemi (Ayarlar) |
percent_alerts | Günlük yüzde değişim alarmları (eşik + yön, tek seferlik) | Kullanıcı eylemi (hisse sayfası) |
notification_prefs | Hesap genelinde bildirim anahtarları (bilanço hatırlatması) | Kullanıcı eylemi (Ayarlar) |
user_posts | Topluluk yazıları: taslak → kuyruk → yayın/red durum makinesi | Kullanıcı eylemi (editör) + moderasyon |
notifications | Bildirim kutusu: alarm, bilanço ve moderasyon bildirimlerinin kalıcı kaydı (90 gün) | lib/notifications.ts → notifyUser (cron + moderasyon) |
symbols | Sembol künyesi: ad, borsa, sektör, logo, piyasa değeri, hisse sayısı | Tohum + cron + sayfa isteği |
quotes_cache | Son bilinen fiyat; sağlayıcı düşünce gösterilecek yedek | Sayfa isteği |
candles_cache | Aralık başına bar dizisi | Sayfa isteği |
earnings_calendar | Bilanço takvimi + beklenti/gerçekleşen | Cron |
economic_events | Ekonomik takvim (ET tarih + saat) | Tohum + cron |
market_holidays | NYSE/Nasdaq tatilleri, yarım günde erken kapanış | Yalnız tohum |
macro_series | FRED serisi + son 60 gözlem + sonraki yayın | Tohum + cron |
news | Haber akışı + çevirisi | Cron + hisse sayfası |
daily_briefs | Günlük ve haftalık bülten | claude.ai rutini |
Migration disiplini: şema değişince yeni migration dosyası üretilir,
eskisi düzenlenmez. Migration'lar deploy'da çalışmaz, elle uygulanır. Bu
yüzden yeni bir özellik mümkünse var olan tabloya sütun eklemek yerine kendi
tablosunu alır: user_avatars tablo yokken sessizce baş harflere düşüyor,
yani kod migration'dan önce de güvenle yayında durabiliyor. Migration 0020'nin
dört tablosu da aynı kalıpta: tablo yokken skor kartı "Hazırlanıyor" der,
portföy "şu an açılamıyor" der, bilanço ekleri basılmaz ve hata kaydı
sessizce yazmaz (panelde ise "tablo yok" diye ayrıca söylenir).
| Sağlayıcı | Ne verir | Not |
|---|---|---|
| Alpaca | Fiyat (/snapshots, delayed_sip), tarihsel barlar (/bars, sip), kurumsal işlemler (/v1/corporate-actions: nakit temettü) ve opsiyon anlık görüntüleri (feed=indicative) | 200 istek/dk. Uzun bar cevaplarında next_page_token izlenir |
| Finnhub | Profil, haber, bilanço takvimi, halka arz, EPS sürprizi, analist dağılımı, metrikler (/stock/metric), insider işlemleri ve insider duyarlılığı, arama | 60 istek/dk. Grafik barları buradan alınmaz |
| FRED | Makro seriler, tahvil faizleri, VIX, yüksek getirili tahvil farkı, aylık USD/TRY ortalaması | Yayın kimlikleri seri kimliğinden çalışma anında türetilir |
| TCMB | USD/TRY: günün bülteni ve günlük arşiv XML'i (kurlar/YYYYMM/DDMMYYYY.xml) | Anahtarsız; günde tek bülten, veri bülten tarihini taşır. Hafta sonu sorulan gün cuma bültenine düşer ve ekran bunu yazar |
| SEC EDGAR | 13F-HR dosya listesi (data.sec.gov/submissions), kapak ve bilgi tablosu XML'i | Kimlik başlığı (User-Agent) şart; ortak sıra, çalışma zamanı başına ≤ 4 istek/sn (sayfa + /api birlikte ≤ 8, lib/providers/sec-gate.ts). Bazı yöneticiler değeri hâlâ bin dolar yazıyor, dosya bazında algılanıyor |
| OpenFIGI | CUSIP → ABD sembolü (harfle başlayan kimlik CINS olarak sorulur) | Anahtarsız 25 istek/dk × 10 kayıt; OPENFIGI_API_KEY ile 100 kayıt |
| House Clerk | Yıllık bildirim indeksi (ZIP, bağımlılıksız açılır) ve PTR PDF'leri (pdfjs-dist ile metne) | Tutar yalnızca aralık; tek sayı üretilmez |
| TCMB EVDS (isteğe bağlı) | Aylık TÜFE (TP.TUKFIY2025.GENEL) ve Yİ-ÜFE (TP.TUFE1YI.T1) | EVDS_API_KEY ister. Yoksa Reel TL düğmesi basılmaz, vergi hesaplayıcısı Yİ-ÜFE'yi okuyucudan ister |
Alpaca'ya geçiş ölçülerek yapıldı. Bir dönem IEX beslemesi kullanıldı: gerçek zamanlıydı ama konsolide hacmin yalnızca %2–7'sini görüyordu ve ön seansta hiç işlem akmıyordu. Karşılığında 15 dakikalık gecikme kabul edildi ve ekranda damgalanıyor.
Finnhub'ın üç tuzağı kodda kayıtlı: marketCapitalization milyon cinsinden
ama ana borsanın parasında; /stock/recommendation karşılık kotasyonu
döndürebiliyor (TSM → "2330.TW"); hazır peTTM geriden gelen bir fiyattan
hesaplandığı için kullanılmıyor. Ücretsiz katmanda kapalı uçlar da kayıtlı
(28 Eylül'de denendi, 403): not değişiklikleri, hedef fiyat, temettü ve gelir
kırılımı. Temettü bu yüzden Alpaca'dan geliyor, ötekileri isteyen panel yok.
Ücretsiz katmanda karşılığı olmayan veri elle tohumlanıyor: NYSE tatilleri, FOMC/CPI/istihdam takvimi, sembol listesi ve endeks bileşimleri.
| Rutin | Ne zaman (TR) | Nereye |
|---|---|---|
| Günlük bülten | her gün 16:10 | POST /api/brief → ana sayfa · Günün Özeti |
| Haftalık bülten | pazartesi 09:30 | POST /api/brief (period: weekly) → /bulten |
| Mercek yazısı | her gün 11:30 ve 23:30 | POST /api/mercek → /mercek |
| Bilanço analizi | her gün 09:00 | POST /api/analiz → /bilancolar/analizler |
| Teknik analiz | işlem günleri 15:45, 19:45, 21:45 | POST /api/teknik → /teknik |
Beşi de BRIEF_SECRET ile korunuyor ve her uç yazdığını geri okuyabiliyor
(?slug=, ?symbol=&period=, ?symbol=). Ayrıca dört context ucu rutine
ham veri ve aday listesi veriyor. Prompt'ların tamamı docs/claude-rutinler.md
içinde. Rutinler koddan kurulmaz, claude.ai arayüzünden elle kurulur.
Bilanço rutininin gövdesi dört isteğe bağlı alan taşıyor ve bunlar
earnings_analysis_extrase yazılıyor: takeaways (sayfanın başındaki
"30 Saniyede" özeti, tam üç madde), segments (segment gelirleri),
segments_source (segment verildiyse zorunlu; yalnızca şirketin kendi
belgesi: bülten, 10-Q, 10-K) ve kpis (şirkete özgü ölçüler, en fazla sekiz,
sayılar ham). Alanı göndermeyen bir POST eki temizler; düzeltme akışı "GET ile
oku, düzenle, geri gönder" olduğu için okunan paket ekleri de taşıyor.
--bar-soft, kulvar kalınlığı tek ölçü --lane-h (5 px); doygun --primary
yalnız bağlantı, seçili satır ve etkileşimde. Ekranlar renksiz değil:
renk korunur, anlamı tutarlı tutulur.components/layout/frame.tste clamp(1400px, 100% − 240px, 1920px);
1640 px ve altı sabit, ızgaralar geniş ekranda sütun açar, okuma metni
satır boyunu korur.@supports korumalı ve solid fallback'li.capitalize
yasak, çünkü iyi I yapıyor, İ değil.Kod içinde WCAG kriter numaraları geçiyor ve her biri gerçek bir düzeltmeye bağlı:
<main tabIndex={-1}>.scroll-padding. Ölçüldü:
/haberlerde 99 odaklanabilir öğenin 62'sinin halkası kırpılıyordu.--text-muted 3,50 → 5,28; wash üzerine yazılan metin için
ayrı --primary-ink (4,14 → 4,86)..tap-44 ya da gerçek yükseklik).hidden bastığı yedek satırları tarayıcının ölçümüyle açarak
dengeleniyor. JavaScript kapalıyken taban satır sayısı kalıyor.:has() yok. Geri sayım her saniye DOM'a dokunduğu için belge
kökündeki bir :has() 4x yavaş CPU'da yükleme boyunca 2,1 saniye stil
hesabı yapıyordu (ölçüldü).Sayfa ölçümü çerezsiz. IP, tam referrer, kullanıcı ajanı ve kullanıcı kimliği tutulmuyor; günlük dönen bir ziyaretçi özeti saklanıyor ve 180 gün sonra siliniyor. Üçüncü taraf analitik yok. Kaydedilen her üye alanı KVKK metninde sayılı.
Hata kaydı da kendi sunucumuzda (app_errors) ve bir arızanın izini
sürmek için var, okuyucunun değil: kullanıcı kimliği, IP ve tarayıcı künyesi
hiçbir sütunda yok, mesajdaki e-posta ve IP biçimli parçalar yazılmadan önce
örtülüyor, istemci hatasının yığını hiç alınmıyor. Kayıtlar 30 gün sonra
günlük cron'la siliniyor. Üçüncü taraf hata izleme servisi yok.
Verilerimi İndir. Ayarlar'daki iki bağlantı hesabın künyesini, dil ve
tema tercihini, takip listelerini (sembolleri ve notlarıyla), portföy
pozisyonlarını ve profil ikonunu tek dosyada indiriyor
(/api/hesap/verilerim). JSON tam kopya; CSV takip listelerinin tablo
biçimi, portföy yalnızca JSON'da.
Şifre özeti bilerek dışarıda. Yalnızca oturum sahibi; yanıt hiçbir ara katmanda
saklanmıyor (private, no-store).
Rota listesinin tek kaynağı burası. 61 sayfa var: 50'si herkese açık
(ikisi başka sitelere gömülen parça), 11'i yönetim. Hepsi istek başına sunucuda çiziliyor. Her sayfa /en/... önekiyle
İngilizce de açılıyor; önek sunucuda sökülüyor ve adres çubuğunda kalıyor.
| Rota | Cevapladığı soru |
|---|---|
/ | Zil çalmadan önce bugün ne var: geri sayım, endeksler, gün akışı, bülten, Mercek, teknik görünüm, bilançolar, favoriler, haberler |
/piyasalar | Piyasanın nabzı: endeksler, tahvil faizleri, VIX, piyasa genişliği ve ısı haritası, gün içi hareket, endeks bileşenleri; Piyasa Nabzı (bileşenleri ve ham değerleri ekranda duran 0–100 bileşik ölçü, ağırlıksız), Sektör Performansı (on bir SPDR sektör fonu), Emtia (altın, gümüş, petrol, doğal gaz, bakır, tarım ve Bitcoin/Ether fonları) |
/sirketler | Hangi şirket hangi sektörde, ne kadar ediyor: sektör şeridi + sıralanabilir dizin (?sektor= ile süzülür); Sektör Dağılımı paneli şirket sayısı payı ile piyasa değeri payını iki bağlı şeritte gösterir |
/tarama | Hangi hisse şu süzgeçten geçiyor: GICS'li endeks üyeleri temel ölçülerle (canlı fiyattan kurulan F/K, gelir büyümesi, net marj, ROE, borç/özkaynak) süzülüp sıralanır; hazır süzgeçler (Değer, Büyüme, Kârlılık, Sağlam Bilanço) ölçütünü künyede söyler. Düz cümleyle tarama: okurun cümlesini Claude tarayıcının süzgeç modeline çevirir (lib/screen-query.ts); belirsiz sözcüklerin eşiği koddaki tablodan gelir, model yalnız cümlede geçen sayıyı kullanabilir, süzülemeyen istek okura gösterilir; sonuç adrese yazılır. Sonucun görünümü: tepe cümlesi, sektör şeridi (basınca süzer) ve sıralanan ölçünün nokta kümesi; satırda ölçünün tarama evrenindeki yeri, kart/tablo anahtarı (lib/tool-visuals.ts) |
/hisse/[symbol] | Bu şirket nasıl gidiyor: canlı grafik (USD · TL · Reel TL), profil, metrikler, analistler, haber, beklenti ile gerçekleşeni aynı sütunda gösteren geçmiş bilançolar. Yeni paneller: Hisse Skor Kartı (beş eksende sektör yüzdeliği; yalnızca GICS sektörü bilinen endeks üyelerinde), Analist Dağılımı Değişimi (dört aylık dağılımın farkı), Teknik Fotoğraf (teknik analiz listesinde olmayan hisselerde, yorumsuz göstergeler), Temettü (hak kesim, yıl toplamları, stopaj künyesi), Beklenen Hareket (sonraki rapora yakınken opsiyonların fiyatladığı hareket ve geçmiş rapor ertesi hareketler), İçeriden İşlemler. Bu Hisseye Sor: yalnız sayfanın verisinden yanıt veren soru kutusu; sayı ve tavsiye denetiminden geçmeyen yanıt basılmaz, üyeye günde 10 soru (lib/stock-question.ts) |
/karsilastir | İki ile dört hisseden hangisi: aynı ölçekte normalize grafik + tek tablo; getiri USD, TL ya da Reel TL |
/karsilastir/[pair] | Yirmi küratörlü çift (): aynı tahta, başlık ve "neden bu ikisi" paragrafıyla; canonical adres bu () |
Sekme çubuğu paylaşılan bir layout'ta değil, her sayfa kendi basıyor; detay sayfası aynı segmentin altında ve orada sekme istenmiyor. Haftalık görünüm dördüncü bir sekme değil: Takvim'in seçilmiş bir haftası, çubukta Takvim etkin görünür.
| Rota | Soru |
|---|---|
/bilancolar | Kim ne zaman açıklıyor: hafta/ay, açılış öncesi ve kapanış sonrası |
/bilancolar/analizler | Okunmuş çeyrekler: skor, görüş, hedef fiyat |
/bilancolar/takip | Benim izlediklerimin bilançoları |
/bilancolar/hafta | Haftalık sekme (?hafta=YYYY-MM-DD): En Çok Beklenenler ızgarası (günler × açılış öncesi/kapanış sonrası, karo boyu piyasa değeri), altında gün gün tam takvim — beklenti, gerçekleşen EPS ve sapma; paylaşım görselleri |
/bilancolar/[symbol] | Şirketin sıradaki bilançosu ne zaman: tarih ve Türkiye saatiyle pencere, Beklenti Karnesi, okunmuş çeyrekler. Beklentiyi Geçer mi? üyelerin EPS oyu (earnings_votes); oy açıklama anında kilitlenir, dağılım yalnız oy verene görünür, sonuç takvimdeki gerçekleşenden |
/bilancolar/[symbol]/[period] | Bu çeyrek ne anlattı: tam analiz; rutin yazdıysa başında "30 Saniyede" özeti, sonunda Segment ve KPI Verisi |
/bilancolar/[symbol]/[period]/hikaye | Analizin beş kartlık paylaşım hâli (beklenti ve gerçekleşen, rehberlik, rapor ertesi tepkiler, 30 Saniyede, skor); her kartın dikey ve yatay görseli |
Başlıkta Piyasalar'dan hemen sonra; mobilde Menü'den.
| Rota | Soru |
|---|---|
/teknik | On beş hisse bugün teknik olarak nerede: görüş halkası, plan şeridi, risk/getiri rayı |
/teknik/[symbol] | Nereden alınır, nerede satılır, nerede vazgeçilir: plan, fiyat haritası, gösterge panelleri, senaryolar, görüş geçmişi |
| Rota | Soru |
|---|---|
/mercek · /mercek/[slug] | Olayın arkasındaki mekanizma neydi |
/rehber · /rehber/[slug] | Borsayı nereden öğrenirim: sıralı müfredat (Türkiye'den yatırım için pratik yazılar dahil: W-8BEN, aracı kurum, vergi, kesirli hisse, SPK'nın 17 Haziran 2026 kararıyla bankadan aracı kuruma geçiş, İrlanda ETF'i mi ABD ETF'i mi). Kapak başlığı, birincil eylemi ve dört bölüm durağını tek kartta taşır. Her bölümün kimlik rengi components/guide/chapter-tone.ts'ten gelir; durak, bölüm başlığı, yazı kartı ve yazı sonu paneli aynı tonu kullanır. Okunan yazılar yalnız okurun tarayıcısında tutulur, yazı sayfası bölümdeki yeri gösterir |
/sozluk · /sozluk/[terim] | Bu terim ne demek: yüz elli terim, sekiz kategoride, iki dilde. Mercek, rehber ve bilanço analizlerinde terimin ilk geçişi buraya kendiliğinden bağlanıyor. Tanımı bir işlem olan terimler formülüyle, osilatörler eşikli kadranla çizilir (content/glossary/formulas.ts) |
/bulten · /bulten/[tarih] · /bulten/haftalik · /bulten/haftalik/[tarih] | Dünkü ya da geçen haftaki bülten; her sayının kalıcı adresi var |
/yenilikler | Sitede ne değişti: okura dönük değişiklik geçmişi, en yenisi üstte; her yeni özellik "Dene" bağlantısıyla açılır. Üstte sürüm şeridi (nokta boyu = madde sayısı), son sürüm alanlara (area) göre gruplu tek satırlık karolar (short, en çok 36 karakter), eski sürümler katlı tek satır. İçerik content/changelog.tste (TR'ye eklenen giriş EN'de de yazılmazsa derleme kırılır); görülmemiş giriş varsa menüde "Yeni" rozeti, ayrı RSS /yenilikler/feed.xml |
Üyelik varsayılan olarak görünmezdir: profil yalnızca sahibi Ayarlar'dan açarsa yayımlanır ve kapattığı an adres yeniden 404 olur.
| Rota | Soru |
|---|---|
/u/[kullanici] | Bu üye kim: profil karosu, rozetler (Erken Üye, üyelik yılı, Yazar), tanıtım, yayındaki yazıları; sahibi açtıysa takip listeleri (notlar asla) ve tutar içermeyen portföy dağılımı — ağırlık yüzdeleri, sitenin alış günlerinden kendisi hesapladığı Doğrulanmış Getiri ve aynı dönemde SPY kıyası |
/topluluk | Üyeler ne yazdı: moderasyondan geçmiş yazıların akışı, yazar künyesiyle |
/topluluk/[slug] | Tek topluluk yazısı: Mercek'le aynı ::: blok çizimi, yazar imzası, sorumluluk notu ve bildirim bağlantısı |
/giris · /kayit · /sifremi-unuttum · /sifre-sifirla (e-postayla tek kullanımlık, 30 dakikalık bağlantı; yalnızca e-posta servisi bağlıyken — lib/email.ts, lib/password-reset.ts) · /e-posta/onay (bildirim postaları için adres onayı, 48 saatlik tek kullanımlık bağlantı; onay düğmeyle verilir) · /e-posta/ayril (girişsiz abonelikten çıkış: alarm postası, pazar özeti ya da ikisi; ikisi de dizine girmez) · /favoriler (fiyatlar USD ya da TL; Fiyat ve yüzde alarmları paneli — hisse sayfasındaki zil düğmesiyle kurulur (hedef fiyat ya da günlük değişim eşiği), siteyi açtığında ve seans boyunca beş dakikada bir sunucuda güncel fiyatla kontrol edilir, ana sayfada "Hedefe Ulaştı" şeridi; lib/price-alerts.ts, lib/alert-sweep.ts) · /ayarlar (profil
ikonu ve rengi, herkese açık profil — tanıtım + görünürlük anahtarları,
varsayılan gizli —, tema, dil, şifre değiştirme, cihaz başına Web Push bildirimleri ve hesap genelinde bilanço hatırlatması — lib/push.ts, public/sw.js, app/api/cron/bilanco —, e-posta bildirimleri (alarm postası ve pazar özeti; varsayılan kapalı, adres çift onaylı — lib/email-notify.ts), Verilerimi İndir, hesap silme) · /bildirimler (bildirim kutusu: alarm, bilanço ve moderasyon bildirimleri; başlıktaki zil okunmamışları sayar, push kapalı cihazda da kayıt kalır. Oturum ister, dizine girmez) · /yazilarim (topluluk yazıların: taslak, kuyruk, yayın; editör şablonlarla açılır (?sablon=), ::: blokları ve yanında canlı önizleme — /yazilarim/yeni ve /yazilarim/[id]. Oturum ister, dizine girmez) · /raporum (Zil Raporu: üyelik, seans sayısı, takip, alarm, portföy getirisi vs SPY ve yazılar — bölüm bölüm kayan kişisel özet, her sayı hesabın kendi verisinden; tutar yok. Oturum ister, dizine girmez) · /analizlerim (Claude ile üretilen kayıtlı raporlar; görüş, puan, vade ve Rapordan Bugüne fiyat değişimi, satır raporu /claude/[symbol]?rapor= ile açar; yalnız analiz erişimi olan hesaplarda menüde, dizine girmez) · /menu · /kvkk ·
/hakkinda (Hakkında ve Metodoloji: kim yapıyor, sayılar nereden geliyor,
yazıları kim yazıyor; gömme kodları da burada)
| Rota | Soru |
|---|---|
/vergi | Yurt dışı hisse kazancım için ne kadar vergi: satış kazancı (alış ve satış günlerinin TCMB kuru), Yİ-ÜFE endekslemesi, temettü beyan sınırı, ABD stopajının mahsubu. Hesap tümüyle tarayıcıda; kurallar ve kaynaklar lib/tax.ts. Sonuç maliyetten matraha bir şelale ve dilim bandı olarak çizilir; hesap mantığı lib/tax.tste |
/araci-kurumlar | Hangi aracı kurum ne alıyor: ABD tarifeleri yan yana, her hücre kurumun resmî kaynağına ve okunduğu güne bağlı (content/brokers.ts); bulunamayan bilgi "Belirtilmemiş" yazar. Kurum önermez, yönlendirme bağlantısı yok |
/portfoy/analiz | Portföyüm ne kadar riskli: sektör dağılımı S&P 500 ile, yoğunlaşma (HHI, etkin pozisyon sayısı), bugünkü ağırlıklarla geçen yılın oynaklığı, betası, korelasyonu ve en büyük düşüşü, kur etkisi, temettü tahmini, bilanço haftaları; sektör fonu senaryosu ve Claude'un risk okuması. Al/sat önermez; tavsiye ve sayı denetiminden geçmeyen metin basılmaz (lib/portfolio-risk.ts, lib/advice-guard.ts). Oturum ister. Yoğunlaşma ağırlık şeridi ve etkin pozisyon halkasıyla, korelasyon en büyük altı pozisyonun ısı matrisiyle çizilir; tepedeki cümle yalnız ölçüyü söyler |
/portfoy | Neyim var ve lirada ne kazandırdı: pozisyon başına alış günü kuruyla TL maliyet, bugünün kuruyla TL değer, sektör ağırlığı; seansı kanıtlanan kotasyondan günlük değişim; FIFO ile satış kaydı ve Gerçekleşen Kâr/Zarar (dolar ve iki günün kuruyla lira, yıl toplamları; vergi hesaplayıcısına satışlarıyla aktarılır). ?ekle=SEMBOL ekleme penceresini o sembolle açar (hisse sayfasındaki çanta). Oturum ister, dizine girmez |
/gomulu/* sitenin kabuğunun dışında, dizine kapalı ve çerçeveye izin verilen
tek yol (next.config.ts); gömme kodları /hakkindada.
| Rota | Ne |
|---|---|
/gomulu/geri-sayim | Sıradaki zile geri sayım, Türkiye saatiyle; ana sayfadaki sayacın kendisi |
/gomulu/bilancolar | Haftanın öne çıkan altı bilançosu; satırlar sitede yeni sekmede açılır |
/gun/[tarih]/kart | Günün paylaşılabilir kartı (1200×630; ?bicim=dikey 1080×1350; /gun/bugun/kart). /api altında değil, çünkü robots.txt onu engelliyor ve kart botları ona uyuyor |
/bilancolar/hafta/gorsel | Haftalık bilanço takviminin görseli (?boyut=yatay|dikey&hafta=) |
Yazma uçları (brief, mercek, analiz, teknik ve context
eşleri) BRIEF_SECRET, cron CRON_SECRET, Verilerimi İndir oturum ister;
genel okuma uçları herkese açık ve IP başına oran sınırlı. AI analizin okuma
ve yazma uçları ayrıca oturum, admin tarafından atanmış erişim ve günlük kota ister.
| Uç | Ne |
|---|---|
/api/chart/[symbol] · /api/karsilastir · /api/endeks · /api/day-flow · /api/search | Ekranların istemci tarafı okumaları: bar, toplu bar, endeks paketi, gün akışı, ⌘K arama |
/api/takvim | Bilanço takvimi .ics |
/api/kur · /api/kur/yol · /api/kur/endeks | TCMB günlük kuru (tek ya da toplu gün), iki gün arasındaki USD/TRY yolu (TL ve Reel TL görünümü), EVDS aylık endeksi (Yİ-ÜFE/TÜFE; anahtar yoksa missing-key) |
/api/health | Dış izleyici için sağlık: veritabanı yanıt veriyorsa 200, vermiyorsa 503; geciken rutin gövdede degraded; sağlayıcı kotası ve son başarılı çekme providers.usageta (süreç belleği). Önbelleksiz |
/api/hata | İstemci hata sınırlarının bildirimi; her durumda gövdesiz 204 |
/api/hesap/verilerim | Verilerimi İndir (?bicim=json|csv); yalnızca oturum sahibi |
/api/ai/analysis | GET: kendi analiz geçmişi ve kota; POST: güncel verilerle yeni Claude raporu. Günlük varsayılan 5, başarısız işte iade, aynı requestId için tek iş |
/api/olcum | Çerezsiz sayfa ölçümü |
/api/brief · /api/mercek · /api/analiz · /api/teknik (+ /context) | İçerik rutinlerinin yazma ve geri okuma uçları; /api/brief/list?from=&to= yazılmış bültenlerin listesi |
/api/takvim/beklenti · /api/takvim/bilanco | Rutinin takvime yazdığı düzeltmeler: ekonomik olay beklentisi; bilanço tarihi ve penceresi (elle kayıt sağlayıcının önüne geçer, sağlayıcı aynısını söyleyince kapanır — lib/earnings-overrides.ts) |
/api/kurallar?gorev= | Rutinlerin ortak kuralları + göreve özgü ek (content/kurallar/*.md), text/markdown, sürüm X-Kurallar-Surum başlığında |
/api/cron/daily · /api/auth/[...nextauth] · /api/debug/providers | Günlük cron, oturum, sağlayıcı anahtar kontrolü (yalnızca geliştirmede; üretimde 404) |
Kabuğun dışında: /admin, /admin/trafik, /admin/uyeler,
/admin/icerik, /admin/moderasyon ve detayı /admin/moderasyon/[id]
(topluluk yazılarının onay kuyruğu: gövde yayındaki çizimle okunur, onay
okunan sürüme bağlanır, red gerekçe ister), /admin/ai (Claude analiz erişimi, kotalar ve token kullanımı), /admin/sistem (verinin durumu ve son 30 günün hata
kaydı), /admin/yazilar, /admin/yazilar/bulten ve iki editör
(/admin/yazilar/mercek/[slug], /admin/yazilar/bulten/[tarih]). Panel
sekmelerinden İçerik ölçer, Yazılar değiştirir. Yetki veritabanında;
yetkisiz istek 404 görür, çünkü "yetkiniz yok" demek panelin varlığını ele
verirdi.
Editörler yazarken önizliyor: gövde yayındaki çizimin kendisiyle sunucuda çiziliyor, başlık ve giriş tuşa basıldığı an önizlemenin başında değişiyor. Tarih alanları tarayıcının yerel takvimi yerine sitenin kendi seçicisini kullanıyor (klavyeyle gezilebilir, aralık dışı günler seçilemez).
npm install
cp .env.example .env.local # değerleri doldur, aşağıya bak
npm run db:migrate # şemayı Neon'a uygula
npm run db:seed # takvim + tatil + sembol tohumları
npm run build # ilk kez: route tiplerini üretir
npm run dev
Temiz bir kopyada önce npm run build çalıştır. PageProps ve
RouteContext tipleri .next/types altına üretiliyor; build almadan
typecheck onlarca yanlış hata verir.
| Değişken | Zorunlu | Nereden |
|---|---|---|
DATABASE_URL | evet | neon.tech → connection string |
AUTH_SECRET | evet | openssl rand -base64 32 |
ALPACA_API_KEY_ID + ALPACA_API_SECRET_KEY | fiyat için | alpaca.markets (paper yeterli) |
FINNHUB_API_KEY | profil/haber için | finnhub.io |
FRED_API_KEY | makro için | fred.stlouisfed.org |
CRON_SECRET | üretimde | openssl rand -hex 32; cron ucunun Bearer anahtarı |
VAPID_PUBLIC_KEY + VAPID_PRIVATE_KEY | bildirim için | npx web-push generate-vapid-keys; ücretsiz, üçüncü taraf hesap yok. Yoksa Ayarlar'daki bildirim paneli "bu sunucuda kapalı" der. Anahtar değişirse eski abonelikler geçersizleşir |
RESEND_API_KEY + EMAIL_FROM | şifre sıfırlama için | resend.com ücretsiz katman (ayda 3.000, günde 100 e-posta); EMAIL_FROM doğrulanmış alan adından, ör. "Açılış Zili <[email protected]>". Yoksa "Şifremi Unuttum" hiç görünmez |
VAPID_SUBJECT | isteğe bağlı | mailto: adresi; bildirim servisinin sorun olduğunda yazacağı yer. Yoksa site adresi |
BRIEF_SECRET | içerik için | openssl rand -hex 32; rutin uçlarının kapısı |
NEXT_PUBLIC_SITE_URL | üretimde | yayın adresi (OG görselleri, sitemap) |
E-posta ve Web Push anahtarları (RESEND_API_KEY, EMAIL_FROM, VAPID_*) GitHub Secrets'ta da tutulabilir: tanımlı olanları her deploy sunucudaki /etc/acilis-zili.enve yazar, tanımsız olan sunucudaki değerini korur (deploy/sync-app-env.sh, yalnız izinli anahtarlar). Deploy beklemeden aktarmak için Actions → "Sync App Env".
Anahtarlar olmadan da uygulama açılır; ilgili kartlar "veri alınamadı" der ve
sayfa çökmez. Kontrol için /api/debug/providers. Korumalı uçlar yerelde
secret boşsa açıktır; üretimde secret yoksa uç 503 döner.
npm run dev # geliştirme (3000 doluysa 3001)
npm run build # üretim derlemesi
npm run typecheck # tsc --noEmit
npm run lint # eslint
npx tsx --test tests/*.test.ts # birim testleri
npm run smoke # duman testi: çalışan bir kopyayı başsız Chrome'la gezer
npm run db:generate # şema değişti → YENİ migration dosyası
npm run db:migrate # migration'ları uygula
npm run db:seed # idempotent tohum (kullanıcı verisine dokunmaz)
npm run db:studio # Drizzle Studio
npm run build:favicon # .ico ve PWA ikonlarını marka işaretinden üret
typecheck + lint + build: üçü de temiz olmadan commit yok.tests/ altında 41 dosya. Kotasyon tazeliği ve paket
yaşı, önbellek süreleri, rutin ve teknik yayın saatleri, rutin gecikmesi,
karşılaştırma ölçeği, gün akışı, mali çeyrek hesabı, rota sahneleri,
vergi ve kur hesabı, portföy, temettü, Piyasa Nabzı, skor kartı ve
beklenen hareket, otomatik bağlantı, hata kaydının örtmesi, veri dışa
aktarımı gibi saf mantığı sınıyor.npm run smoke, scripts/smoke.mjs): çalışan bir kopyaya
(BASE_URL, varsayılan http://localhost:3000) başsız Chrome ile gidip
ana rotaları iki dilde ve iki genişlikte (390, 1280) açar; HTTP kodunu
(olmayan adres gerçekten 404 mü), konsol hatasını ve yatay taşmayı sorar.
Bir kontrol düşerse çıkış kodu 1. Kayıt → giriş → favori → hesap silme
akışı veritabanına gerçek hesap yazdığı için yalnızca
SMOKE_ALLOW_WRITES=1 ile koşar. GitHub Actions'ta ayrı bir iş akışı
(.github/workflows/smoke.yml) her PR'da ve maine her push'ta
derlenmiş uygulamayı sırsız ve veritabanısız ayağa kaldırıp testi
SMOKE_DEGRADED_OK=1 ile koşar (veri yokken kendi uçlarımızın 503'ü
sözleşme, hata değil). Bir uyarı kanalı, dağıtım kapısı değil: deploy'u
bekletmez..tmp-*.mjs
deseniyle yazılır ve commit'lenmez.Site kendi sunucusunda yayında: aciliszili.com.
Tam yol docs/deploy-vps.md'de, sunucu dosyaları deploy/ altında.
main'e her push GitHub Actions'ı tetikler
(.github/workflows/deploy.yml): runner'da typecheck + lint + build.deploy/update.sh çalışır: yeni sürüm
releases/<zaman>-<sha> altına derlenir, current bağı ancak sağlık
kontrolü geçince çevrilir. Derleme sürerken canlı sürüm ayakta kalır,
sağlık geçmezse bağ öncekine döner./api/cron/daily, hafta içi 10:30 UTC) sunucunun crontab'ından
tetiklenir. Yüz saniyelik bir bütçesi var; dolarsa kalan adımları atlar ve
neyi atladığını raporlar. Tahvil (2/5/10/30 yıl) ve VIX kapanışları ilk
adımda Cboe / U.S. Treasury ve FRED üzerinden önbelleksiz kontrol edilir;
en yeni gözlem tarihi seçilir, aynı tarihte doğrudan kaynak tercih edilir; başarılı serilerin ekran önbelleği
geçersizleştirilir, son gözlem tarihleri cron raporuna yazılır. Sayfa
isteklerinde bu günlük serilerin önbellek süresi 1 saat; aylık makro
serilerinki 6 saattir. Bu süreler kaynak yayın tarihini değiştirmez./api/cron/alarmlar) beş dakikada bir aynı
crontab'dan. Satırların listesi deploy/cron-install.shte; update.sh
her sürümde yeni sürümün kopyasıyla onu çağırıyor ve eksik satırı
ekliyor.Migration'lar deploy'da uygulanmaz; şema değişikliği ayrıca
npm run db:migrate ile üretim veritabanına uygulanır.
İkinci bir kopya açılırsa iki kural: cron tek yerde çalışır (Finnhub'ın
dakikalık kotası) ve ikinci kopya indekslenmez (SITE_INDEXABLE=false).
app/
(app)/ # sayfalar: bugün, piyasalar, şirketler, hisse, karşılaştır,
# takvim, bilançolar, teknik, mercek, rehber, bülten, haberler, hesap
admin/ # yönetim: kabuğun dışında, yetkisizde 404
actions/ # sunucu eylemleri: auth, takip listesi, içerik, profil ikonu
api/ # chart, day-flow, endeks, karsilastir, search, takvim, olcum,
# kur (+ yol, endeks), health, hata, hesap/verilerim,
# brief, mercek, analiz, teknik (+ context), cron, auth, debug
gomulu/ # başka sitelere gömülen parçalar: kabuğun dışında, dizine kapalı
gun/[tarih]/kart/ # günün paylaşılabilir görseli
components/
article/ # ArticleBody: ::: blok ailesi burada çizilir
brand/ # BellMark (marka işareti) · AvatarIcon (profil ikonları)
ink/ # InkCanvas, açılış, yükleme ve sahne yerleşimleri
motion/ # görünüme girme sistemi, logo uçuşu, sayfa geçişleri
layout/ # AppShell, başlık, alt sekme çubuğu, piyasa şeridi, arama
today/ # geri sayım, gün akışı, bülten, kolon doldurucu
home/ # ana sayfanın panelleri (yeni panel buraya)
markets/ # karşılaştırma, ölçek çubukları, piyasa nabzı, fon panoları
earnings/report/ # bilanço analizi sayfasının panelleri
earnings/week/ # haftalık bilanço takvimi
glossary/ themes/ tax/ portfolio/ calendar/ macro/ seo/
stock/ stories/ technical/ watchlist/ auth/ ui/
lib/
ink/ # mürekkep motoru (engine) + sahneler (scenes) + rota haritası
market-hours.ts # ET↔UTC, seans durumu, önbellek süreleri
session-clock.ts # dile göre birincil saat dilimi (TR/NY)
content-write.ts # içeriğin tek doğrulama ve yazma yolu
compare.ts # karşılaştırma ekranının ortak sözleşmesi
technical*.ts # teknik analiz: semboller, göstergeler, yazma yolu
avatars.ts # profil ikonu ve renk anahtarları
providers/ # alpaca (+ kurumsal işlemler, opsiyon) · finnhub (+ derinlik)
# · fred · tcmb (+ arşiv) · evds · fx-history
tax.ts # vergi kuralları, yıllık eşikler ve kaynakları
fx.ts # TL ve Reel TL çevirisi (saf)
autolink.ts # yazı gövdelerinde sözlük ve sembol bağlantısı
i18n/ # tr + en sözlükleri (en, tr tipinden türer)
content/guide/ # rehber yazıları: meta + tr + en
content/glossary/ # sözlük: meta + tr/ + en/ (kategori başına dosya)
content/themes.ts # tematik listeler (elle bakılır)
content/compare-pairs.ts # küratörlü karşılaştırma çiftleri (elle bakılır)
db/seed/ # tatiller, ekonomik takvim, semboller, endeks bileşimleri
docs/ # rutin prompt'ları, deploy, tasarım notları
drizzle/ # migration'lar: elle düzenlenmez, yenisi eklenir
tests/ # birim testleri (tsx --test)
scripts/smoke.mjs # duman testi (npm run smoke)
indicative): OPRA'nın kendisi
değil, ondan türetilmiş kotasyon. Beklenen hareket bu yüzden geniş alış-satış
aralıklı kontratları eler ve künyesinde bunu söyler.EVDS_API_KEY ister. Anahtar yoksa
Reel TL düğmesi basılmaz, vergi hesaplayıcısı Yİ-ÜFE değerlerini okuyucudan
ister. FRED'deki Türkiye TÜFE serisi Nisan 2025'te kesiliyor; o yüzden
kaynak EVDS.Kişisel bir proje. Yatırım tavsiyesi değildir. Veriler üçüncü taraf sağlayıcılardan gelir, gecikmeli ya da hatalı olabilir; ekrandaki hiçbir sayı bir alım satım kararının tek dayanağı olacak şekilde tasarlanmadı.
/haberler · /bulten · /mercek · /rehber · /sozluk |
| 🇹🇷 | Türkiye'den yatırım yapınca lirada ne kaldı? TCMB kuruyla TL ve (EVDS anahtarı varsa) enflasyondan arındırılmış Reel TL getirisi; yurt dışı hisse vergisi hesaplayıcısı (satış kazancı, Yİ-ÜFE endekslemesi, temettü ve stopaj mahsubu) ve TL maliyetli portföy. | /vergi · /portfoy |
tsx --testpuppeteer-corestories |
| Mercek yazıları |
| claude.ai rutini |
story_revisions | Düzeltilen içeriğin önceki hâli (son on sürüm) | İçerik yazma yolu |
earnings_analyses | Bilanço analizleri; sayılar ham (8.97e9), sunum biçimlendirir | claude.ai rutini |
technical_analyses | Sembol × gün × yayın başına tek satır; metin copy.{tr,en}, göstergeler snapshot | claude.ai rutini |
page_views | Çerezsiz sayfa ölçümü | İstemci beacon |
symbol_metrics | Finnhub /stock/metric fotoğrafı + GICS sektörü; skor kartının sektör yüzdelikleri buradan | Cron (koşum başına 15 sembol) + sayfa isteği |
portfolio_positions | Portföy pozisyonu: adet, USD maliyet, alış günü, not | Kullanıcı eylemi (Portföy) |
earnings_analysis_extras | Bilanço analizinin ekleri: "30 Saniyede" özeti, segmentler ve kaynağı, KPI'lar | claude.ai rutini (/api/analiz ile aynı gövde) |
investor_filings · investor_holdings | Ünlü yatırımcıların 13F dosyaları (asıl bildirim ve düzeltmeler ayrı satır) ve dosya başına CUSIP × pozisyon türü toplanmış satırlar; değer her zaman dolar (bin dolar yazan dosya çevrilir) | Cron (0b adımı, bütçeli) + scripts/sync-investors.ts |
cusip_tickers | CUSIP → sembol eşlemesi (OpenFIGI); çözülemeyen null ve yeniden deneme zamanı | Cron + betik |
congress_filings · congress_trades | İşlenmiş Kongre PTR'leri ve tekil işlemler (tutar alt/üst uç, sahip, işlem ve bildirim tarihi) | Cron + betik |
app_errors | Gün × tür × rota × parmak izi başına hata sayacı; kullanıcı kimliği, IP ve tarayıcı künyesi yok | Sunucu (instrumentation.ts) ve istemci (/api/hata) hata kaydı; 30 günden eskisini cron siler |
/karsilastir/nvda-amdcontent/compare-pairs.ts/hisse-secimi | Bir hisse nasıl seçilir: eleme, büyüme, kârlılık, sağlık, fiyat gücü, sahiplik ve katalizör kuralları, kullanım adımları, teknik analiz listesinin puanları; sembol formu JS'siz (GET → yönlendirme) |
/hisse-secimi/[symbol] | Tek hissenin kural kontrolü: 22 kural sitenin verileriyle ölçülür, kategori puanları, uyum puanı ve bandı, güçlü/zayıf yanlar, sıradaki adımlar. Claude Görüşü kartı Hisse Seçimi Odağındaki son rapora ya da üretime götürür (components/ai/ClaudeCta.tsx) |
/claude/[symbol] | Claude bu hisse için ne diyor: iki ayrı rapor türü (Teknik Odak 1–4 hafta, Hisse Seçimi Odağı 3–6 ay), üç sekme (?sekme=rapor|yeni|gecmis, ?odak=teknik|secim, ?rapor=<id>). Raporları herkes okur, üretim yetkili hesapta ve kişiye bağlı; bugün aynı odakta rapor varsa uyarır. Üretim sırasında hissenin mumları, ortalamaları ve haberleriyle kısa film. Dizine girmez |
/tema · /tema/[slug] | Tematik listeler (yapay zekâ, yarı iletkenler, katılım uyumlu…): üyeler, günün medyanı, ölçüt fonu (content/themes.ts, on tema) |
/yatirimcilar · /yatirimcilar/[slug] | Ünlü yatırımcılar kim ne tutuyor: portre mozaiği, çeyreğin ortak hareketleri ("META: 4 Artırdı"), yatırımcı kartları; detayda portföy haritası (alan değer, renk hareket), Yeni/Artırdı/Azalttı/Tamamen Sattı, tam pozisyon tablosu, opsiyonlar (dayanak değer), son sekiz çeyrek. Pelosi sayfası Kongre bildirimi: işlem ve bildirim tarihi, tutar aralığı, sahip, opsiyon ayrıntısı (lib/investors.ts, on altı kişi) |
/makro | ABD ekonomisi nerede: on bir FRED serisi (haftalık işsizlik başvuruları, perakende satışlar, M2, Sahm kuralı ve 10Y–3A faiz farkı eklendi), sonraki açıklama, Sonraki FOMC Kararı kartı |
/takvim | Hangi makro veri ne zaman: gün/hafta/ay, önem süzgeci, halka arz takvimi. ?tur=temettu aynı sayfada temettü takvimi görünümü (Alpaca kurumsal işlemler) |
/haberler · /haberler/[id] | Bugün ne konuşuluyor: akış saat duraklarında; tepede veriden kurulan tek cümle ve en çok konuşulan şirketler şeridi (karta basınca ?sembol= süzgeci), yüzde yalnız kotasyon o seansa aitse basılır. Haber siteden çıkmadan okunur |
/gun · /gun/[tarih] | Günün Posteri: tamamlanmış bir seans Nasdaq 100'ün şehir silueti olarak, Alpaca gün barlarından; her şirket bir bina (genişlik piyasa değerinin karekökü, boy günlük değişim, ufkun üstü yükselen), binalar GICS sektör mahallelerinde güçlüden zayıfa; günün cümlesi QQQ, genişlik ve mahallelerden. Yerleşim saf modül (lib/day-skyline.ts), sahne components/day-poster/Skyline.tsx; arşivde her kart siluetin minyatürü ve genişlik şeridi. Ana sayfada bugünün panellerinin ardındaki "Son Seansın Silueti" şeridi (components/today/home/SkylineStrip.tsx) son tamamlanmış seansı "Dünkü Seans" gibi göreli gün künyesiyle gösterir; seans sürerken zil dünün verisiyle çalmaz (components/today/day-tile.ts, lib/day-poster*.ts) |
/gunun-grafigi · /gunun-grafigi/[tarih] | Günün Grafiği: her işlem günü tek grafik ve ~100 kelime; rutin /api/grafik ile yazar (docs/claude-rutinler.md § 7), metindeki her sayı bağlam paketinde geçmek zorunda |
/bulmaca · /bulmaca/arsiv · /bulmaca/[gun] | Hisseyi Bil: günlük hisse bulmacası. Her tahmin dört karşılaştırma karosu taşır (sektör, piyasa değeri, halka arz, büyüme; karşılaştırma sunucuda), ipuçları altı basamakta genelden özele açılır (siluet, sektör ve temettü, piyasa değeri ve beta, halka arz ve büyüme, endüstri ve marj, harf kutuları), joker bir hakkı harcayıp sıradaki basamağı açar. Başta iki basamak açık; tahmin kutusu açılmış ipuçlarına uyan adayları öne alır (candidatesFor). Geçmiş günler arşivden oynanır, seriye sayılmaz; oyun şeridi (GameNav) önceki/sonraki bulmacaya geçer. Giriş yapmış okur günün sıralamasına girer (tahmin sayısı, sonra süre; tahminler sunucuda sırayla kaydedilir, takma ad isteğe bağlı — lib/puzzle-board.ts). Cevap istemciye yalnız bitmiş bulmacada gider; ilerleme tarayıcıda ve az-bulmaca çerezinde |
/bulmaca/hangisi-buyuk | Hangisi Büyük?: iki şirketten sağdakinin piyasa değeri büyük mü küçük mü; bildikçe eşleşmeler yakınlaşır, en iyi skor tarayıcıda (lib/bigger-game.ts) |
/olasiliklar | Piyasa ne bekliyor: Fed'in sıradaki kararı, 3 Kasım ara seçiminde Kongre'nin kontrolü ve resesyon için piyasa olasılıkları, son 30 günün çizgisiyle. Kaynak tahmin piyasalarının herkese açık verisi (lib/providers/kalshi.ts); ekran kaynağı adıyla değil "Piyasa Olasılıkları" diye anar, bahis ya da işlem bağlantısı yok. Günde bir anlık görüntü probability_snapshots tablosuna (/api/cron/olasiliklar); tablo yoksa ekran sessizce canlı veriye düşer |
/api/cron/alarmlar | Alarm taraması (fiyat hedefi + günlük yüzde): 5 dakikada bir, piyasa kapalıyken ya da paket bayatken hiçbir şey yazmaz; tetiklenen alarmı abone cihazlara Web Push ile, tercihi açıp adresini onaylayanlara e-postayla bildirir (CRON_SECRET) |
/api/cron/haftalik-posta | Pazar özeti postası: pazar 07:00–11:00 UTC (ilk koşu 10:00 TR) saatte bir, göndermeden önce geçen haftanın bilanço gerçekleşenlerini tazeler; geçen haftanın endeksleri, bilançoları ve öne çıkanları, bu haftanın bilanço ve veri takvimi. Her alıcı defterle sahiplenilir, ikinci koşu yalnız eksikleri tamamlar; günlük bütçe EMAIL_DAILY_BUDGET (UTC günü — pazar bütçeye takılanları pazartesi 07:00 UTC telafi koşusu, bütçenin en çok yarısıyla gönderir; tek koşu kilitli) (CRON_SECRET) |
/api/ai/hisse-notu | Hisse sayfasının Claude notları: ?sembol=&tur=hareket (Bu Hafta Neden Hareket Etti — son beş tamamlanmış seans, S&P 500 ve haberler) ve tur=bilanco (son 10 günde açıklanan bilançonun kısa notu). Panel görünüme girince istemci ister; botlar ve bilinmeyen sembol geri çevrilir, not sembol + seans anahtarıyla 36 saat önbellekte, günlük çağrı tavanı INSIGHT_DAILY_CAP (lib/stock-insights.ts) |
/api/cron/haberler | Haber tazeleme + Türkçeleştirme: her gün 05:35, 11:35, 17:35 UTC; piyasa haberlerini çeker, çevrilmemişleri Claude ile çevirir (ANTHROPIC_API_KEY, yoksa CLAUDE_ANALYSIS_API_KEY; DeepL anahtarı varsa önce o). Çeviri tabloda kalır (CRON_SECRET) |
/api/ai/tarama-cumlesi · /api/ai/takip-notu · /api/ai/hisse-sor · /api/ai/portfoy-analizi | Sayfanın içindeki Claude: düz cümleyle tarama (köken denetimi, 2 KB gövde tavanı), Takip Listem Bugün, Bu Hisseye Sor, portföy risk okuması. Botlara kapalı, oran ve günlük sınırlı, ortak Claude bütçesinden düşer |
/api/bulmaca | Hisseyi Bil: GET günün siluetini, POST tahmini değerlendirip açılan ipucunu döndürür; cevap yalnız oyun bitince |
/api/bulmaca/siralama | Hisseyi Bil günün sıralaması: GET tablo ve okurun sırası; POST saati başlatır (start) ya da takma adı yazar (nickname); oturum ister |
/api/grafik (+ /context) | Günün Grafiği'nin yazma ve geri okuma ucu (BRIEF_SECRET); POST yalnız tamamlanmış seansı ve bağlamda geçen sayıları kabul eder |
/api/cron/telegram | Telegram kanalı: beş dakikada bir; açılış öncesi bülten ve takvim, kapanış özeti, yeni Mercek, büyük makro veri. Tekrarı telegram_posts defteri önler; TELEGRAM_BOT_TOKEN ve TELEGRAM_CHANNEL_ID yoksa uyur (CRON_SECRET) |
/api/e-posta/ayril | Tek tıkla çıkış (RFC 8058, List-Unsubscribe-Post): yalnız POST, girişsiz, IP başına sınırlı |
/api/cron/bilanco | "Bilanço yarın" hatırlatması: günde bir, tercihi açan hesaplara takip listelerindeki yarınki bilançoları tek bildirimde gönderir (CRON_SECRET) |
/api/cron/olasiliklar | Olasılıkların günlük anlık görüntüsü: saatte bir çağrılır (deploy/cron-olasiliklar.sh), günde bir yazar; seçim gecesi ve Fed saatinde sıklaşır. KALSHI_API_BASE isteğe bağlı (CRON_SECRET) |
AUTH_TRUST_HOST |
| üretimde |
ters vekil arkasında true |
SITE_INDEXABLE | ikinci kopyada | canlıda true, ikinci kopyada false |
SEC_USER_AGENT | isteğe bağlı | "Ad e-posta"; boşsa koddaki varsayılan (lib/investors.ts → secUserAgent) — 13F, Form 4 ve anlık bilanço bildirimi |
DEEPL_API_KEY | opsiyonel | haber başlığı çevirisi (önce bu denenir) |
ANTHROPIC_API_KEY | opsiyonel | haber başlığı çevirisinde yedek |
CLAUDE_ANALYSIS_API_KEY | AI analiz için | sunucuda saklanan ayrı Claude anahtarı; erişim yalnız admin atamasıyla. Kurulum ve prompt: docs/claude-analysis.md |
CLAUDE_ANALYSIS_MODEL · CLAUDE_ANALYSIS_DISABLED | opsiyonel | varsayılan claude-sonnet-5-5; DISABLED=1 analiz üretimini kapatır |
ANALYTICS_SALT | opsiyonel | ziyaretçi özetinin tuzu; yoksa AUTH_SECRET |
EVDS_API_KEY | opsiyonel | evds3.tcmb.gov.tr → üye ol → profil → API anahtarı; Reel TL ve vergi hesaplayıcısının Yİ-ÜFE endekslemesi. Yoksa ikisi de okuyucuya açık alan bırakır |