2.El Bilet
Gidemeyenle bilet bulamayanı buluşturan, sabit fiyat ve açık artırmalı ikinci el bilet pazarı.
- iOS
- Android
- 2025
- Kendi ürünüm
Ekran görüntüleri
Büyütmek için bir görsele tıklayın.
Uygulama hakkında
Etkinlik biletlerinde iki taraflı bir sorun var: bir yanda bileti olup gidemeyecek insanlar, diğer yanda bilet bulamamış insanlar. Bu iki grup birbirini sosyal medya yorumlarında, forumlarda, dağınık biçimde arıyor. 2.El Bilet bu alışverişi tek bir yere taşıma fikriyle çıktı — konser, tiyatro, maç, sahne, aile etkinlikleri, hepsi kategorilere ayrılmış hâlde.
İlan verirken iki seçenek vardı: sabit fiyat ya da açık artırma. Bu ikisi arayüzde yan yana duruyor ama arkada aynı şey değil. Açık artırmada teklif sırası, kapanış zamanı ve otomatik kabul kuralları var; sabit fiyatta yok. İkisini ayrı ürünler gibi yazmak yerine ortak bir “ilan” modeli kurdum: ilanın bir satış biçimi var, kapanış koşulu ve kazananı belirleme kuralı bu biçime göre değişiyor.
Asıl zor kısım güvendi. İkinci el bir pazarda kimse ilk adımı atmak istemez: alıcı bileti görmeden para göndermek, satıcı parayı almadan bileti devretmek istemiyor. Bu yüzden alışverişi tek bir “satın al” düğmesi yerine aşamalı bir işlem hâline getirdim — ödemenin tamamlanması, biletin gönderilmesi ve ödemenin satıcıya geçmesi ayrı ayrı durumlar. Kullanıcı ana ekranda kendi “bekleyen işlemler”ini görüyor ve sıradaki adımın kimde olduğunu biliyordu. Sahte bilet riskine karşı da elimdeki en güçlü koz buydu: para, bilet karşı tarafa ulaşmadan serbest kalmıyordu.
Bir de bu pazarın kendine has bir tarafı vardı: satılan şeyin son kullanma tarihi var. Etkinlik başladığı anda bilet değersizleşiyor. Bu yüzden ilanlar süreye göre kendiliğinden kapanıyor, arama tarafında da “çok acil”, “son 48 saat” ve “fiyatı düşenler” gibi zamana bağlı filtreler öne çıkıyordu. Satıcılar için de görünürlük araçları koydum — vitrinde gösterme, aramalarda öne çıkma, favorileyenlere teklif gönderme — ve ürünün gelir modeli buradan kuruldu.
Alıcıyla satıcının anlaşması genelde tek bir mesajla olmuyordu, o yüzden sohbet tarafını hafif tutmadım: pazarlık edebilecekleri gerçek zamanlı mesajlaşma, sesli ve görüntülü görüşme. Bunun yanında harita üzerinden bilet satan ve bilet arayan kişileri keşfetme de vardı; aynı şehirde, hatta aynı etkinliğe gidecek birini bulmak alışverişi kolaylaştırıyordu.
Uygulama şu an mağazalarda değil — projeyi bir süreliğine erteledim, kapatmadım. Diğer ürünlere öncelik verdiğim için yayını duraklattım; ilan akışı, doğrulama ve emanet tarafındaki yapı yerinde duruyor ve geliştirmeye devam etmeyi planlıyorum.
Öne çıkan özellikler
- İki satış biçimi: sabit fiyatlı ilan veya açık artırmayla bilet satışı
- Aşamalı işlem akışı: ödemeyi tamamla → bileti gönder → ödemeyi al, her adım ayrı durum
- Bekleyen işlemler ekranı: sıradaki adımın kimde olduğunu gösteren takip listesi
- Kategoriler: konser, sahne, spor, aile ve eğitim — alt kategorileriyle birlikte
- Zamana bağlı filtreler: “çok acil”, “son 48 saat” ve “fiyatı düşenler”
- Sıralama: en düşük fiyat, en yüksek fiyat, en yeni eklenen veya rastgele
- Görünürlük araçları: vitrinde gösterme, aramalarda ve filtrelerde öne çıkma, çerçeve ekleme
- Otomatik teklif kabulü ve favorileyenlere teklif gönderme
- Pazarlık sohbeti: gerçek zamanlı mesajlaşma, sesli ve görüntülü görüşme
- Harita üzerinden keşif: çevredeki bilet satan ve bilet arayan kullanıcıları bulma
- Süresi dolan ilanların otomatik kapanması — etkinlik tarihine göre
Kullanılan teknolojiler
115 teknoloji · 12 başlıkDiller ve Platform
- Swift (iOS)
- Java (Android)
- Kotlin (Android)
- iOS SDK
- Android SDK
- Native çift platform
Arayüz ve Uygulama Katmanı
- UIKit / SwiftUI (iOS)
- Android View / Compose
- UICollectionView / RecyclerView
- Sayfalama (pagination)
- Geri sayım sayaçları
- Fotoğraf seçici (PHPicker)
- Android medya seçici
- Görsel önbellekleme
Arka Uç ve Veri
- Firebase Firestore
- Firebase Authentication
- Firebase Storage
- Cloud Functions
- Zamanlanmış Cloud Functions
- Firestore sorgu ve dizinler
- Firestore güvenlik kuralları
- Sunucu zaman damgası
- Firestore çevrimdışı önbelleği
- Batch write
- İmleç tabanlı sayfalama
- Denormalizasyon
- Sayaç alanları
- Cloud Functions tetikleyicileri
- Zamanlanmış görevler
- Veri geçişi (migration)
Gerçek Zamanlı ve Medya
- Firestore anlık dinleyiciler
- JitsiMeet SDK
- DigitalOcean sunucu barındırma
- WebRTC medya akışı
- AVFoundation (iOS)
- Kamera/mikrofon izinleri
- Firebase Cloud Messaging
- APNs (iOS bildirim)
- STUN / TURN yapılandırması
- Ses yönlendirme (hoparlör / kulaklık)
- Arka planda çağrı sürdürme
- Ağ düşüşünde yeniden bağlanma
- Çağrı durumu senkronizasyonu
- Sunucu kaynak ve ölçek takibi
Konum ve Harita
- MapKit (iOS)
- Google Maps SDK (Android)
- Core Location (iOS)
- FusedLocationProvider (Android)
- Konum izinleri
- Coğrafi yakınlık sorgusu
- Harita pin yönetimi
Ödeme ve Gelir
- Sanal POS entegrasyonu
- Emanet (escrow) akışı
- Sunucu taraflı ödeme doğrulama
- Satıcıya ödeme aktarımı
- Komisyon hesaplama
- İşlem geçmişi kaydı
Mimari ve Örüntüler
- MVVM / MVC
- İşlem durum makinesi
- Firestore veri modelleme
- Atomik işlem (transaction)
- Eş zamanlı teklif kontrolü
- Sunucu taraflı iş kuralları
- Firestore tetikleyicileri
Ağ ve Veri Aktarımı
- URLSession (iOS)
- HTTP istemcisi (Android)
- JSON çözümleme (Codable)
- Yeniden deneme ve zaman aşımı
- Çevrimdışı durum yönetimi
- İndirme ve yükleme kuyruğu
- Çok parçalı dosya yükleme
- Bant genişliğine göre kalite
Güvenlik ve Gizlilik
- Keychain (iOS)
- EncryptedSharedPreferences (Android)
- HTTPS ve ATS
- Kimlik doğrulama token yönetimi
- Oturum yenileme
- İzin gerekçe metinleri
- Hesap silme akışı
- Sunucu taraflı yetki kontrolü
- Hassas veri maskeleme
Arayüz Durumları ve Erişilebilirlik
- Koyu tema desteği
- Dinamik yazı tipi
- Güvenli alan (SafeArea)
- Boş / yükleniyor / hata durumları
- İskelet (skeleton) yükleme
- Çekerek yenileme
- Klavye ve odak yönetimi
- Derin bağlantı (Universal Links)
- VoiceOver / TalkBack etiketleri
Test, Hata Ayıklama ve Ölçüm
- Xcode Instruments
- Android Profiler
- LLDB
- Logcat
- Bellek sızıntısı takibi
- Ağ trafiği inceleme
- Çökme raporu okuma
- Gerçek cihazda test
- Farklı ekran boyutu testi
Araçlar ve Yayın Süreci
- Xcode
- Android Studio
- App Store Connect
- Google Play Console
- CocoaPods
- Gradle
- Git
- Açık kaynak kütüphaneler (GitHub)
- TestFlight
- Play Console iç test
- Sürüm ve build numaralama
- İmzalama ve provizyon profilleri
- App Store inceleme süreci
- App Privacy / Data Safety formu
- Mağaza görselleri ve ASO metinleri
- Uygulama boyutu optimizasyonu
Fikir, tasarım, arayüz, kod, mağaza yayını ve yayın sonrası bakım — sürecin tamamını baştan sona tek başıma yürüttüm. Ekip, ajans ya da dış kaynak yok.
Geliştirme notları
- Diller ve yaklaşımiOS tarafı Swift, Android tarafı Java ve Kotlin ile yazıldı. Çapraz platform bir çatı kullanılmadı; her iki uygulama da kendi platformunun yerel araçlarıyla geliştirildi. 2020'den beri mobil geliştiriyorum.
- Yapay zekâ desteği yokKodun tamamı elle yazıldı. Bu proje, Claude Code ve Codex gibi yapay zekâ kodlama araçları yaygınlaşmadan önce geliştirildi — o dönemde böyle bir araç yoktu.
- BağımlılıklarÇok sayıda açık kaynak GitHub kütüphanesi ve CocoaPods paketi kullanıldı. Bağımlılık yönetimi iOS tarafında CocoaPods, Android tarafında Gradle ile yürütüldü.
- Görüntülü görüşme altyapısıJitsiMeet hazır bir servis olarak değil, kendi sunucumda barındırıldı (DigitalOcean). Sunucu kurulumu, medya akışı ve ölçeklendirme tarafı bana aitti.
- Emanet akışıÖdeme ve bilet devri tek adımda değil, birbirini bekleyen ayrı durumlar olarak kurgulandı; taraflardan hiçbiri ilk adımı atma riskini tek başına almıyordu.
- Test ve hata ayıklamaGerçek cihazlarda, farklı ekran boyutlarında ve zayıf ağ koşullarında test edildi. Yayın sonrası çökme raporları okunup düzeltmeler sürüm sürüm gönderildi.
- Yayın süreciHer iki mağazanın inceleme sürecini de tek başıma yürüttüm: App Store Connect ve Google Play Console kurulumu, gizlilik bildirimi (App Privacy / Data Safety), sürüm notları, mağaza görselleri ve red gerekçelerine göre düzeltmeler.
- Ürün sahipliğiFikir, tasarım, geliştirme, arka uç, mağaza yayını ve yayın sonrası bakım — sürecin tamamını tek başıma yürüttüm.
2.El Bilet hakkında konuşalım
Teknik detayları, karşılaştığım sorunları ve nasıl çözdüğümü memnuniyetle anlatırım.