Konum bazlı sosyal oyun uygulaması

Eksik oyuncuyu bulmanın
en hızlı yolu.

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.

Şu anki durum — 30 Ağustos 2026. Uygulama Google Play kapalı test aşamasında. Kendi Supabase projesi (Pro plan, günlük yedek), quadmate.com.tr alan adı, kendi SMTP'si ve EAS ile alınan imzalı Android build'i ile canlı çalışıyor. Mağazaya çıkış Google'ın kişisel geliştirici hesaplarına koyduğu 12 test kullanıcısı × kesintisiz 14 gün şartına bağlı. iOS tarafı Apple Developer hesabı alınana kadar başlamıyor — Windows'ta iOS build alınamıyor.
8oyun türü
Host / Guestmasa modeli
Realtimesohbet & bildirim
PostGISkonum gizliliği
React Native · Expo TypeScript NativeWind (Tailwind) React Navigation Zustand TanStack Query Supabase (Postgres + PostGIS) Supabase Realtime Edge Functions (Deno) RevenueCat
İnteraktif Demo

Uygulamanın içinde gez

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.

Keşfet — Harita & Liste

Yakınındaki açık masaları listede ya da haritada gör; mesafe, oyun türü ve seviyeye göre filtrele.

Masa Aç

Oyun seç, haritadan mekân işaretle, tarih/saat/süre/kişi sayısı belirle ve yayınla.

İstek Gönder & Onayla

Gelen/giden istekleri yönet; host kabul edince masa planı ve grup sohbeti otomatik açılır.

Realtime Sohbet

Her masaya bağlı grup sohbeti, üstte gömülü masa planı kartıyla birlikte gelir.

Anlık Bildirimler

Yeni istek, kabul/red ve mesajlar telefona push bildirimi olarak düşer — uygulamayı açmaya gerek yok.

💡 Nasıl kullanılır: Alttaki sekmelerden birine dokun, bir masa kartına tıkla, sağ üstteki ikonuyla harita görünümüne geç, ya da lacivert + butonuyla yeni masa aç. Tüm veriler örnek (mock) veridir.
09:41 📶 🛜 🔋
Etkileşimli prototip — gerçek Quadmate uygulamasının (Expo / React Native) tasarım sistemiyle birebir üretildi.
Mimari

Tek platformda ilişkisel veri + coğrafi sorgu + realtime

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.

Mobil İstemci

  • Ekranlar / React Navigation
  • Zustand (client state)
  • TanStack Query (server cache)
  • Supabase JS SDK
⇄

Supabase Platformu

  • Auth
  • Postgres + PostGIS (konum sorguları)
  • Realtime (sohbet, masa durumu)
  • Storage (avatar, doğrulama belgesi)
  • Postgres trigger + pg_net — push bildirimi tetikleme
  • Vault + http — mekân araması sunucuda (Places anahtarı istemcide tutulmuyor)
  • Edge Functions (Deno) — kota/webhook (Faz 5, planlanan)
⇄

3. Parti Servisler

  • Google Maps / Places API
  • Expo Push → FCM / APNs
  • RevenueCat → App Store / Play Billing
  • Sentry · PostHog
KatmanSeç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 modeliprofiles · 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.
MonetizasyonAylık 3 ücretsiz "İstek Gönder" + 3 ücretsiz "Masa Aç" hakkı (bağımsız iki kota); limit dolunca Quadmate Premium paywall'ı.
Tasarım sistemiNativeWind (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.
Faz 0 — Tamamlandı

Proje iskeleti, tasarım sistemi, navigasyon şeması, Supabase şema taslağı.

Faz 1 — Tamamlandı

Auth, onboarding, konum izni, oyun seçimi, temel profil; canlı Supabase projesi bağlandı.

Faz 2 — Tamamlandı

Masa Aç (Google Places arama dahil), Keşfet (harita/liste), Masa Detay, Filtreler ekranları canlıda.

Faz 3 — Tamamlandı

İstek Gönder/Kabul, Masa Planı, gerçek zamanlı (Realtime) grup sohbeti canlıda.

Faz 4 — Tamamlandı

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ı.

Faz 5 — Beklemede

Monetizasyon: kota takibi, RevenueCat ve paywall. Paywall ekranı yazıldı ama satış açılmadı — kapalı test boyunca tüm özellikler ücretsiz.

Faz 6 — Şu an burada · yayına hazırlık

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.

Sırada

Apple Developer hesabı → iOS build → TestFlight → App Store. Yayın sonrası Sentry/PostHog ve moderasyon arayüzü.