Yol Arkadaşım
Aynı yöne gidenleri eşleştirip taksi, Uber ve TAG ücretini aralarında paylaştıran yolculuk uygulaması.
- 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
Şehir içi ulaşım, özellikle taksi ve Uber tarafında, tek başına gidildiğinde çoğu insan için taşınabilir olmaktan çıktı. Yol Arkadaşım buradan doğdu: aynı yöne gidecek kişileri buluşturup aynı aracı paylaştırmak ve ücreti yarı yarıya ya da tarafların belirlediği oranda bölüştürmek.
İki farklı kullanım vardı. Kendi aracıyla yola çıkan biri ilan açıp yol arkadaşı bularak masrafını bölüşebiliyordu. Aracı olmayan biri ise gideceği yeri seçip taksi, Uber veya TAG için tahmini ücreti görüyor, ardından aynı güzergâha gidecek kişileri bulup ücreti paylaşabiliyordu.
Uygulamanın en sık sorulan sorusu “Uber gibi mi çalışıyor?” idi ve cevabı hayırdı. Uygulama yolcu taşımıyor, taşımacılık hizmeti satmıyordu; zaten yapılacak bir yolculuğu paylaşacak iki kişiyi eşleştiriyordu. Bu ayrım hem ürünün konumlandırması hem de yasal tarafı açısından belirleyiciydi, o yüzden arayüzde de açıkça anlatıldı.
Teknik olarak zor kısım eşleştirmeydi. Bir ilan yalnızca “nereden nereye” bilgisini değil; ne zaman (şu an ya da ileri tarihli), hangi araç tipiyle ve hangi kriterlere uyan kişilerin görebileceğini de taşıyordu. Yani sorgu iki taraflı çalışmak zorundaydı: arayan kişinin filtreleri ile ilan sahibinin görünürlük kriterleri aynı anda tutmalıydı. Üstüne konum yakınlığı ve zaman penceresi de eklenince, eşleştirme basit bir “aynı hedef” sorgusundan çok daha fazlası hâline geliyordu.
Ücret tarafında uygulama bir taksimetre değildi; mesafe ve süre üzerinden tahmini bir tutar hesaplıyor, ilan sahibi de bu tutarın ne kadarını karşılayabileceğini bir alt–üst aralık olarak belirtiyordu. Böylece iki taraf araca binmeden önce kimin ne ödeyeceğini biliyordu — paylaşımlı yolculukta anlaşmazlığın çıktığı asıl nokta tam olarak burası.
Yabancı biriyle aynı araca binmek ise ürünün çözmesi gereken asıl güven problemiydi. Bu yüzden yolculuk öncesine mesajlaşma ve görüntülü görüşme koydum; insanlar buluşma noktasına gitmeden önce karşısındakini görebiliyordu. İlan sahibinin cinsiyet ve yaş aralığı kriteri belirleyebilmesi de aynı ihtiyaçtan çıktı. Bu fikrin hâlâ çözülmeye değer bir problem olduğunu düşünüyorum.
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; eşleştirme mantığı ve veri modeli olduğu gibi duruyor ve geliştirmeye devam etmeyi planlıyorum.
Öne çıkan özellikler
- İki yolculuk modu: kendi aracını paylaşma veya ticari aracı (taksi, Uber, TAG) paylaşma
- Rota tabanlı eşleştirme: kalkış, varış ve zaman penceresine göre aynı yöne gidenleri bulma
- Tahmini ücret hesabı: mesafe ve süreye göre yolculuk tutarının önceden gösterimi
- Paylaşım aralığı: ilan sahibinin karşılayabileceği tutarı alt–üst sınır olarak belirtmesi
- Kriterli ilan görünürlüğü: ilanı yalnızca belirlenen cinsiyet ve yaş aralığındaki kullanıcıların görmesi
- İleri tarihli ilan: “şu an” veya seçilen tarih ve saat için yolculuk planlama
- Yolculuk öncesi görüntülü görüşme ve mesajlaşma — buluşmadan önce tanışma
- Harita üzerinde ilan keşfi: güzergâh üzerindeki kullanıcıların harita üzerinde gösterimi
- Hızlı filtreler: “senin için öneriler”, “çok acil” ve tüm ilanlar
- İlgi alanına göre keşif: yol arkadaşını ortak ilgi alanlarına göre bulma
- Favoriler ve benzer ilanlar — ilanı kaydetme ve alternatif önerileri görme
Kullanılan teknolojiler
116 teknoloji · 12 başlıkDiller ve Platform
- Swift
- Kotlin
- Java
- iOS SDK
- Android SDK
- Native çift platform geliştirme
Arayüz ve Uygulama Katmanı
- UIKit / SwiftUI
- XML Layout / Jetpack Compose
- UITableView / UICollectionView
- RecyclerView (Android)
- Tarih ve saat seçiciler
- Filtre ve arama arayüzleri
- Form doğrulama
Arka Uç ve Veri
- Firebase Firestore
- Firestore veri modelleme
- Bileşik indeks ve sorgu tasarımı
- Firestore güvenlik kuralları
- Firebase Storage
- Cloud Functions
- Firebase Authentication
- Sayfalama ve sorgu optimizasyonu
- Firestore çevrimdışı önbelleği
- Batch write
- İmleç tabanlı sayfalama
- Denormalizasyon
- Sayaç alanları
- Cloud Functions tetikleyicileri
- Zamanlanmış görevler
- Veri geçişi (migration)
Konum ve Harita
- MapKit (iOS)
- Google Maps SDK (Android)
- Core Location (iOS)
- FusedLocationProvider (Android)
- Konum izinleri
- Rota ve mesafe API'si
- Geocoding ve adres arama
- Polyline ve harita işaretçileri
Gerçek Zamanlı ve Medya
- JitsiMeet SDK (self-barındırma)
- WebRTC tabanlı görüntülü görüşme
- AVFoundation (iOS)
- Kamera ve mikrofon izinleri
- Firestore anlık dinleyiciler
- APNs (iOS)
- Firebase Cloud Messaging
- PHPicker / Android medya seçici
- 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
Eşleştirme ve Keşif Mantığı
- Rota tabanlı eşleştirme
- Coğrafi yakınlık sorguları (geohash)
- Zaman penceresi filtreleme
- Mesafe ve süreye dayalı ücret tahmini
- Kriter bazlı ilan görünürlüğü
- İlgi alanı eşleştirme
- Favoriler ve benzer ilan önerileri
Mimari ve Örüntüler
- MVVM / MVC
- Repository ve servis katmanı
- Asenkron programlama (async/await, Coroutines)
- URLSession (iOS)
- Android HTTP istemcisi
- JSON çözümleme (Codable)
- Tarih, saat dilimi ve yerelleştirme
- Uygulama yaşam döngüsü ve durum yönetimi
Ağ ve Veri Aktarımı
- HTTP istemcisi (Android)
- Yeniden deneme ve zaman aşımı
- Çevrimdışı durum yönetimi
- Görsel önbellekleme
- İ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
- DigitalOcean sunucu yönetimi
- 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.
- Güven ve güvenlikYabancı biriyle aynı araca binmeden önce mesajlaşma ve görüntülü görüşme; ilan sahibine de ilanı kimlerin göreceğini belirleme imkânı verildi.
- 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.
Yol Arkadaşım hakkında konuşalım
Teknik detayları, karşılaştığım sorunları ve nasıl çözdüğümü memnuniyetle anlatırım.