Gooldu — Canlı Futbol Skorları
Maçları canlı takip ettiren, gol olduğu anda ekranda haber veren hızlı bir skor sitesi. Skorlar Firestore'dan gerçek zamanlı akıyor.
- Tarih
- Son güncelleme
- Rolüm
- Tasarım + geliştirme
- Durum
- Yayında
- Teknolojiler
- Vite · JavaScript · Firebase · Node.js

Amaç
Açtığımda şu an oynanan maçları hemen gösteren, gol olunca da haber veren sade bir skor sayfası. Adı da oradan geliyor: Gol oldu!
Neler yapıyor?
- Şimdi oynanıyor şeridi: canlı maçlar en üstte, dakikayla birlikte.
- Gol anı: Skor değişince maç satırı yanıp sönüyor ve "GOOOL!" bildirimi çıkıyor.
- Gün seçici ve takvim, lig çipleri (Süper Lig, Premier League, La Liga, Şampiyonlar Ligi…), ülke ve lig çekmecesi, takım ya da lig arama.
- Maç detayı: olay akışı (gol, kart, değişiklik, VAR), istatistikler ve kadrolar.
- Favoriler: Favori maçlar tarayıcıda saklanıyor, hesap gerekmiyor.
- Adresin sonuna
?demoekleyince örnek verilerle çalışıyor; bu sayfayı bu şekilde gezebilirsin.

Bağlantılar
- Canlı site: gooldu.web.app
- Demo (örnek verilerle): gooldu.web.app/?demo
- Son yayın: 30 Eylül 2026
Nasıl çalışıyor?
İki parçadan oluşuyor:
- Ön yüz (Vite + düz JavaScript): Firestore'daki
matcheskoleksiyonunuonSnapshotile dinliyor. Veri değişince sayfa kendiliğinden güncelleniyor, yenilemeye gerek yok. - Senkron betiği (Node.js): Skor sağlayıcısının API'sinden maçları çekip Firestore'a yazıyor. İstemci yalnızca okuyabiliyor; yazma yetkisi sadece bu betikte (Admin SDK), güvenlik kuralları da bunu zorluyor:
match /matches/{id} {
allow read: if true; // herkes skorları görebilir
allow write: if false; // yazma sadece sunucudan
}
Skor kaynağı değiştirilebilir: betik hem API-Football hem football-data.org için yazıldı, hangisinin kullanılacağı ortam değişkeniyle seçiliyor.
Zorlandığım yer: istek kotası
Skor API'lerinin günlük istek hakkı sınırlı; ücretsiz planda günde yalnızca 100. Her dakika güncellemek bu hakkı saatler içinde bitirir. Betiğe kota farkında bir döngü yazdım:
- Canlı maç varken "şu an oynananlar" tek istekle güncelleniyor; canlı maç yokken günün listesi daha seyrek yenileniyor.
- Kalan hak her cevabın başlığından okunuyor. Hak azaldıkça güncelleme aralığı otomatik uzuyor ve bir miktar istek her zaman yedekte tutuluyor. Ücretsiz planda aralık kendiliğinden birkaç dakikaya çıkıyor, ücretli planda 60 saniyede kalıyor.
- Biten maçın detayı bir kez "final" olarak kaydediliyor ve bir daha istenmiyor.
Öğrendiklerim
- Yazma ve okumayı ayırmak: İstemci yalnızca okuyunca güvenlik kuralları çok basit kaldı ve anahtarlar sunucu tarafında saklandı.
- Sınırlı kaynağı kodla yönetmek: Kota gibi bir sınırı "ya yetmezse" diye düşünmek yerine, döngünün kendisinin kotaya göre davranmasını sağlamak sorunu çözdü.
- Gerçek zamanlı hissi: Gol anında ekrana küçük bir animasyon koymak, rakamı değiştirmekten çok daha "canlı" hissettirdi.