15 Eylül 2026
Kararsızım'ı Nasıl Yaptım
Kararsızım, günlük hayatta karar veremediğimiz küçük şeyler için (“Bugün sinemaya mı gitsem, restorana mı?”) hızlıca anket açıp topluluğa danışabileceğimiz bir web uygulaması. Kullanıcı bir soru soruyor, 2 ile 5 arasında seçenek ekliyor; başkaları bu anketleri görüp oy veriyor ve sonuçlar anlık olarak yüzdelik dağılımla görünüyor.
Projeyi Atıl Samancıoğlu’nun “AI ile Yazılım Ürünü Geliştirme” kursundaki talimatları izleyerek geliştirdim.
Neden bu stack?
Backend için Django 5 seçtim — kimlik doğrulama, admin paneli ve ORM gibi temel ihtiyaçları hazır sunması, bir ürünü hızlıca ayağa kaldırmak isteyen biri için büyük zaman kazancı sağladı. Veritabanı olarak Supabase üzerinde barındırılan PostgreSQL’i kullandım. Frontend’de bilinçli olarak bir framework’e girmedim; düz HTML/CSS/JavaScript, bu ölçekteki bir uygulama için fazlasıyla yeterliydi ve gereksiz karmaşıklık katmadı.
Ürün kararları
Platforma bilinçli olarak takip/arkadaşlık sistemi eklemedim — herkes global akıştaki tüm anketleri görebiliyor. Anket görüntülemek ve oy vermek üyelik istemiyor, sadece anket oluşturmak için kayıt gerekiyor. Amaç, kullanıcıyı bir sosyal ağ inşa etmeye değil, hızlıca bir karara ulaşmaya yönlendirmekti.
En çok düşündüğüm kısım: tek oy kuralı
Bir kullanıcının aynı ankete birden fazla oy vermesini engellemek basit görünüyor ama iki farklı kullanıcı tipi için iki farklı çözüm gerekti:
- Anonim kullanıcılar için çerez tabanlı bir kimlik kullanıyorum.
- Üye kullanıcılar için ise kısıtı veritabanı seviyesinde,
(anket_id, kullanıcı_id)üzerinde biruniqueconstraint ile uyguluyorum.
Bunu bilinçli olarak uygulama katmanında bir if kontrolüyle değil, veritabanı kısıtıyla çözdüm. Sebep basit: iki eşzamanlı istek aynı anda gelirse, ikisi de uygulama seviyesindeki “zaten oy vermiş mi?” kontrolünden geçebilir — çünkü kontrol ve yazma işlemi arasında bir yarış durumu (race condition) oluşur. Veritabanı kısıtı ise eşzamanlılıktan bağımsız olarak atomik bir garanti sağlıyor; ikinci yazma isteği veritabanı seviyesinde reddediliyor.
Sırada ne var
Proje şu an temel işlevleriyle çalışıyor durumda. Ekran görüntüleri ve canlı demo linkini yakında Projeler sayfasına ekleyeceğim.