Quadmate; Okey, Bilardo, Kağıt/101, Satranç, Dart gibi oyunlar için etrafındaki oyuncularla seni buluşturan, konum tabanlı bir "masa/etkinlik" eşleştirme uygulaması. Bir masa aç ya da yakınındaki bir masaya istek gönder — gerisini uygulama halleder.
Sağdaki telefon, gerçek uygulamanın tasarım sistemiyle (lacivert + koyu zemin + altın vurgu, açık/koyu tema desteğiyle) birebir üretildi. Alt sekmelere, kartlara, harita/liste geçişine ve + butonuyla masa açma akışına tıklayarak deneyebilirsin.
Yakınındaki açık masaları listede ya da haritada gör; mesafe, oyun türü ve seviyeye göre filtrele.
Oyun seç, haritadan mekân işaretle, tarih/saat/süre/kişi sayısı belirle ve yayınla.
Gelen/giden istekleri yönet; host kabul edince masa planı ve grup sohbeti otomatik açılır.
Her masaya bağlı grup sohbeti, üstte gömülü masa planı kartıyla birlikte gelir.
Yeni istek, kabul/red ve mesajlar telefona push bildirimi olarak düşer — uygulamayı açmaya gerek yok.
Supabase; masalar/katılımcılar gibi ilişkisel veriyi, PostGIS ile konum sorgularını, Realtime ile sohbeti, Auth ve Storage'ı tek bir platformda sağladığı için ayrı bir custom backend'e gerek kalmıyor. Kota/bildirim/webhook gibi özel iş mantığı Edge Functions'ta yazılıyor.
http — mekân araması sunucuda (Places anahtarı istemcide tutulmuyor)| Katman | Seçim & not |
|---|---|
| Konum sorguları | PostgreSQL + PostGIS (ST_DWithin, geography(Point,4326)) — tam koordinat client'a hiç dönmez, sadece mesafe / jitter'lı yaklaşık nokta döner. |
| Veri modeli | profiles · activities · tables · join_requests · table_participants · conversations/messages · notifications · ratings · subscriptions · usage_quota — RLS ile satır seviyesi izolasyon. |
| Giriş yolları | E-posta + şifre, Google ve Apple ile giriş (tarayıcı akışı — signInWithOAuth + quadmate:// derin bağlantı). Native SDK yerine tarayıcı seçildi: Play App Signing devredeyken native akışın istediği SHA-1 dağıtım anahtarına ait oluyor ve "kendi build'imde çalışıyor, mağazadan inince çalışmıyor" hatasına yol açıyor. |
| Mekân araması | Google Places çağrısı istemciden alınıp search_places RPC'sine taşındı; anahtar Supabase Vault'ta, kullanıcı başına saatlik 60 arama kotası var. Places web servisi Android paket kısıtlamasını tanımadığı için pakete gömülü anahtar korunamıyordu. |
| Monetizasyon | Aylık 3 ücretsiz "İstek Gönder" + 3 ücretsiz "Masa Aç" hakkı (bağımsız iki kota); limit dolunca Quadmate Premium paywall'ı. |
| Tasarım sistemi | NativeWind (Tailwind for RN) üzerinde logodan gelen lacivert (#202368) + koyu/açık zemin (ink) + altın (#F2A93C) vurgu paleti, açık/koyu tema desteğiyle — tek kaynak theme/colors.ts. |
Proje iskeleti, tasarım sistemi, navigasyon şeması, Supabase şema taslağı.
Auth, onboarding, konum izni, oyun seçimi, temel profil; canlı Supabase projesi bağlandı.
Masa Aç (Google Places arama dahil), Keşfet (harita/liste), Masa Detay, Filtreler ekranları canlıda.
İstek Gönder/Kabul, Masa Planı, gerçek zamanlı (Realtime) grup sohbeti canlıda.
Push bildirimleri ve bildirim tercihleri, masa yönetimi (iptal / ayrılma / düzenleme), puanlama, profil fotoğrafı yükleme, e-posta doğrulama, şikayet ve engelleme, hesap silme. Telefon doğrulaması SMS sağlayıcı kararına bağlı olarak açık kaldı.
Monetizasyon: kota takibi, RevenueCat ve paywall. Paywall ekranı yazıldı ama satış açılmadı — kapalı test boyunca tüm özellikler ücretsiz.
Açık/koyu tema, hesap silme ve gizlilik sayfaları yayında, e-posta markası kendi alan adında, build'ler EAS'te imzalı alınıyor, Google/Apple ile giriş yazıldı, mekân araması sunucuya taşındı. Play Console formları dolduruldu; sırada kapalı test (12 kişi × 14 gün) ve ardından üretime geçiş başvurusu var.
Apple Developer hesabı → iOS build → TestFlight → App Store. Yayın sonrası Sentry/PostHog ve moderasyon arayüzü.