Neden böyle bir sayfa var?
Gizlilik metinleri genellikle "verilerinizi önemsiyoruz" diye başlar ve hiçbir şey kanıtlamaz. Bu sayfa onun tersini denemektedir: her satırda hangi veriyi, hangi özellik için, nerede tuttuğumuz ve bunu nasıl doğrulayabileceğin yazıyor.
Aşağıdaki envanter 2026-09-26 tarihinde ölçülerek çıkarıldı: veritabanı şeması doğrudan okundu, tarayıcı depolaması kaynak taramasıyla listelendi, izleme betiği araması yapıldı ve grup sohbetinin şifreleme akışı satır satır incelendi.
Topladığımız veriler
Her kartta aynı altı soru cevaplanıyor: ne, neden, hangi özellik, nerede, ne kadar süre, hangi dayanak.
Hesap
E-posta adresi ve parola (özet/hash olarak)
Görünen ad ve avatar görseli
Ödeme
Abonelik planı, durum, yenilenme tarihi ve Stripe müşteri/abonelik kimliği
Gezi
Kaydettiğin geziler (şehir, ülke, gün sayısı, program, duraklar, notun)
İşaretlediğin gezilen yerler (ad, şehir, ülke, koordinat, tarih, not, fotoğraf bağlantısı)
Medya
Yüklediğin fotoğraf ve videolar, açıklama metni ve bağlı olduğu şehir
Topluluk
Beğenilerin ve yorumların (yorum metni, görünen adın, avatarın)
Kaydettiğin oteller
Sohbet
Sohbetin senin hakkında öğrendiği kalıcı tercihler (ör. "kırmızı et yemiyor")
Sorduğun sorunun metni (en fazla 200 karakter), şehir, dil ve zaman damgası
Güvenlik
İhbarların ve moderasyon kayıtları (ihbar sebebi; kural ihlalinde eşleşen ifade ve metin parçası)
Cihaz
Anlık konumun
IP adresinden türetilen ÜLKE bilgisi
Tarayıcı depolaması (localStorage / IndexedDB)
Toplamadıklarımız
Bu bölüm bilerek ölçülebilir maddelerden oluşur. "Gizliliğe önem veriyoruz" bir madde değildir; "kaynak kodda izleme betiği araması 0 sonuç verdi" bir maddedir.
İzleme — YALNIZ onay verirsen ve yalnız Google Analytics
Meta pikseli, Hotjar, Mixpanel, Amplitude, PostHog, Segment, Clarity ve reklam ağı etiketleri: hiçbiri yok. Yalnız Google Analytics 4 var ve çerez bandında "Kabul et" demediysen betiği sayfaya HİÇ eklenmez.
Nasıl doğrularsın: Onay verilmeden gtag betiği DOM'a hiç girmiyor (frontend/js/cerez.js: kimlik ve onay iki ayrı kapı). Reddedersen karar saklanır ve bir daha sorulmaz. Diğer ölçüm adlarının kaynak taraması 0 sonuç veriyor.
Reklam ve profilleme — YOK
Reklam göstermiyoruz, kimseye reklam kimliği yollamıyoruz, ilgi alanı profili çıkarmıyoruz, veri satmıyoruz.
Nasıl doğrularsın: Reklam ağı çağrısı yapan tek bir kod yolu yok; gelir modeli abonelik.
Kart bilgisi — BİZDE YOK
Kart numarası, son kullanma tarihi veya CVC hiçbir zaman sunucumuza ulaşmaz.
Nasıl doğrularsın: Ödeme akışı Stripe Checkout üzerinden yürür; bizde yalnız Stripe'ın verdiği müşteri/abonelik KİMLİĞİ durur.
Grup sohbetinin içeriği — OKUYAMIYORUZ
Mesajlar cihazında şifrelenir; sunucu yalnız şifreli metni iletir ve diske hiç yazmaz.
Nasıl doğrularsın: Aşağıdaki "Grup sohbeti" bölümünde satır satır kanıt var.
Konum geçmişi — TUTULMUYOR
Nereden geçtiğini gösteren bir iz kaydı yok.
Nasıl doğrularsın: Grup konumu yalnız bellekte; kalıcı yazma işlevi konum alanlarını hiç içermiyor.
Fotoğrafının EXIF/GPS verisi — SİLİNİYOR
Yüklediğin görselin çekildiği yer ve cihaz bilgisi bize hiç ulaşmaz.
Nasıl doğrularsın: Görsel yüklemeden önce canvas'tan geçirilir; EXIF/GPS/IPTC/XMP blokları yapısal olarak düşer.
Sohbet soruların kimliğine bağlanmıyor
Kalite ölçümü için tutulan soru kütüğünde kullanıcı kimliği alanı yok.
Nasıl doğrularsın: Kütüğe yazılan alanlar: soru, şehir, dil, zaman. Başka alan yazılmıyor.
Rehber ve şehir içeriğini okumak için hesap gerekmiyor
Şehir sayfaları, gezi kartları ve sohbet hesapsız çalışır; hesap yalnız kaydetmek, yüklemek ve topluluk için gerekir.
Nasıl doğrularsın: Giriş duvarı yalnız kayıt/yükleme/topluluk uçlarında var.
Grup sohbeti: neden içeriğini okuyamıyoruz
Gezi gruplarındaki sohbet uçtan uca şifrelidir. Bu, bir söz değil bir mimari sonuçtur; aşağıda adım adım, koddan alıntılarla gösteriliyor. İddiayı doğrulamak isteyen bir geliştirici dosya adlarına bakıp ilgili satırları arayabilir.
1. Şifreleme anahtarı SENİN TARAYICINDA üretilir.
AES-GCM 256 bit anahtar, Web Crypto API ile istemcide üretilir. Sunucu bu adıma hiç karışmaz.
cryptoKey = await crypto.subtle.generateKey(
{ name: 'AES-GCM', length: 256 }, true, ['encrypt', 'decrypt']);
2. Anahtar davet bağlantısının # (fragment) kısmında paylaşılır — SUNUCUYA GİTMEZ.
Bu bir tercih değil, HTTP'nin kuralı: tarayıcılar adresin # işaretinden sonraki kısmını isteğe KOYMAZ (RFC 3986 §3.5). Yani anahtar, davet linkini açan kişinin tarayıcısında kalır; sunucunun erişebileceği bir yerde hiç bulunmaz.
const joinUrl = window.location.origin + window.location.pathname + '?plan=' + msg.planId + (keyB64 ? '#k=' + keyB64 : '');
3. Mesaj, cihazından çıkmadan ÖNCE şifrelenir.
Her mesaj için rastgele 12 baytlık IV üretilir ve metin AES-GCM ile şifrelenir. Sunucuya giden şey base64 kodlanmış şifreli metindir.
const iv = crypto.getRandomValues(new Uint8Array(12));
const ct = await crypto.subtle.encrypt(
{ name: 'AES-GCM', iv }, cryptoKey, new TextEncoder().encode(text));
4. Sunucu şifreli metni yalnız BELLEĞİNDE tutar ve iletir; çözmeye çalışmaz.
Gelen metin bir JavaScript dizisine eklenir, en fazla 200 mesaj tutulur, gruptakilere yayımlanır. Çözme (decrypt) çağrısı sunucu kodunda hiç geçmez — anahtar zaten orada yok.
// E2E: msg.text = istemcide AES-GCM ile şifrelenmiş ciphertext (base64). // Sunucu içeriği ASLA çözmez/okumaz; yalnız RAM'de tutup iletir. Yedek YOK. plan.messages.push(m); if (plan.messages.length > 200) plan.messages.shift();
5. Kalıcı depoya yazılan alanların arasında MESAJ YOKTUR.
Grup, sunucu yeniden başlasa da üyelerin bağlantısını kaybetmemesi için kalıcı bir kayıt tutar. O kaydın içinde ne olduğu tek satırda görülüyor: tarihler, gezi programı, kurucunun takma adı ve onaylanmış takma ad listesi. Mesaj dizisi bu listede YOK.
savePlan(id, {
startDate, endDate, createdAt,
itinerary, creatorNick,
onaylanan: [...], // yalnız TAKMA AD listesi
});
6. Konumun da diske yazılmaz ve yalnız SEN açtıysan iletilir.
Konum mesajı, üyenin görünürlük bayrağı kapalıysa daha ilk satırda geri döner. Kabul edilen konum yalnız bellekteki üye nesnesine yazılır; yukarıdaki kalıcı kayıtta konum alanı yoktur.
const me = plan.members.get(ws); if (!me || !me.visible) return; // görünürlük kapalıysa İŞLENMEZ me.lat = lat; me.lng = lng; // yalnız BELLEK
7. Grup bitiminden 24 saat sonra her şey silinir.
Saatlik bir temizlik döngüsü, bitiş tarihinin üzerinden 24 saat geçmiş grupları bellekten ve kalıcı depodan siler; bağlı üyelere de grubun kapandığı bildirilir.
if (now > expiry) {
plans.delete(id);
deletePlan(id);
}
8. Sayfayı kapattığında anahtar bellekten silinir.
Gruptan çıkışta anahtar değişkeni boşaltılır. Yeniden girmek için davet bağlantısındaki anahtar gerekir — bizde bir kopyası yoktur, yani "şifreyi unuttum" diye kurtarabileceğimiz bir yedek de yoktur.
cryptoKey = null; keyB64 = null; // E2E anahtarını bellekten sil
Hizmet sağlayıcılar
Ürünü çalıştırmak için kullandığımız sağlayıcılar ve her birine fiilen ne gönderildiği:
| Sağlayıcı | Ne için | Ona ne gidiyor | Nerede |
|---|---|---|---|
| Supabase | Hesap, veritabanı ve dosya depolama | Hesap bilgilerin ve senin kaydettiğin içerikler | AB (Frankfurt) |
| Railway | Uygulama sunucusu | İsteklerin işlenmesi sırasında geçen veriler | ABD/AB |
| Vercel | Web sitesinin dağıtımı | Sayfa istekleri (standart sunucu kayıtları) | Küresel dağıtım ağı |
| Stripe | Ödeme | Ödeme bilgilerini DOĞRUDAN Stripe alır; bizde kart verisi olmaz | ABD/AB |
| Google Analytics 4 | Ziyaret istatistiği (onaya bağlı) | Hangi sayfaların görüntülendiği, yaklaşık konum (IP son baytı silinerek), cihaz ve tarayıcı türü — YALNIZ sen onay verirsen | ABD/AB |
| Azure OpenAI · Groq · OpenRouter · Cloudflare | Sohbet ve metin üretimi | Sorduğun sorunun metni ve şehrin gezi kartı listesi — kimlik bilgisi GÖNDERİLMEZ | ABD/AB |
| Google Places | Mekân adresi, türü ve fotoğrafı | Mekân adı ve koordinatı — kullanıcı bilgisi GÖNDERİLMEZ | ABD |
| Tavily | Güncel bilgi için web araması | Arama sorgusu (şehir + konu) — kimlik GÖNDERİLMEZ | ABD |
| OpenStreetMap · Overpass · Nominatim | Harita verisi, mekân ve helal/koşer etiketleri | Koordinat ve arama metni | AB |
| OpenFreeMap / MapLibre | Harita karoları | Baktığın harita bölgesi | AB |
| Wikipedia · Wikidata | Şehir ve mekân görselleri, bilgi kartları | Mekân adı | Küresel |
| Aladhan | Namaz vakitleri | Şehir koordinatı | Küresel |
| get.geojs.io | IP → ülke (arayüz dili için) | İsteğin IP adresi — sonuç BİZDE saklanmaz | Küresel |
Haklarını nasıl kullanırsın?
Kendi ülkendeki düzene göre hazırlanmış hukuki metni seç — hak listesi, başvuru yolu ve şikâyet makamı orada yazıyor: