Şebeke çökse bile telefonlar birbiriyle konuşabilir.
Deprem ve afet anında baz istasyonları ve internet çökebilir. AfetNet bu senaryo için tasarlanmış bir mobil uygulamadır: internet olmadan, telefonlar Bluetooth üzerinden birbirine bağlanır; mesajlar ve konum bilgisi cihazdan cihaza sıçrayarak (mesh) yayılır. Menzil dışındaki birine bile, aradaki telefonlar mesajı taşıyarak ulaştırır. Altyapı yok; ağın kendisi insanlar.
- 🆘 Tek dokunuş SOS — internetsiz, konumunla birlikte tüm yakın cihazlara acil çağrı.
- 🔁 Çok sıçramalı mesh — mesaj menzil dışına da ulaşır; aradaki her telefon onu bir sonrakine taşır (TTL'li kontrollü taşma + tekrar-önleme).
- 🔐 Güvenli — her mesaj Ed25519 ile imzalı, birebir mesajlar NaCl box ile uçtan uca şifreli.
- 📍 Konum paylaşımı — GPS koordinatı mesaja gömülür.
- 💾 Offline kuyruk — komşu yokken mesaj bekler, cihaz menzile girince iletilir.
- ✅ Kanıtlanmış çekirdek — mesh protokolü saf JS yazıldı ve 9/9 senaryo ile test edildi.
Protokolün beyni taşımadan bağımsızdır; BLE donanımı olmadan Node ile doğrulanabilir:
$ npm run test:mesh
TEST 1 — çok sıçramalı SOS relay (A—B—C—D):
✅ SOS 3 sıçrama ötedeki D'ye ulaştı (internetsiz mesh)
✅ aradaki B ve C de aldı
TEST 2 — dedup (üçgen topoloji, döngü):
✅ her düğüm mesajı tam 1 kez teslim etti (fırtına yok)
TEST 3 — birebir uçtan uca şifreli sohbet:
✅ alıcı C mesajı çözüp okudu
✅ dinleyici E içeriği göremedi (bana değil + şifreli)
✅ tel üzerindeki gövde şifreli (e:1)
TEST 4 — imza doğrulama:
✅ kurcalanmış mesaj imza doğrulamasında reddedildi
TEST 5 — offline kuyruk:
✅ komşu yokken teslim edilmedi (kuyrukta bekledi)
✅ komşu gelince kuyruktaki mesaj iletildi
=== SONUÇ: 9 test geçti ===
Üç sekme: Yakındakiler · Mesajlar (şifreli/yayın) · SOS (konumla acil çağrı). Kurumsal, yüksek-kontrastlı mobil arayüz; ilk açılışta kalıcı kriptografik kimlik üretilir.
| Katman | Durum |
|---|---|
| Mesh protokol çekirdeği (src/mesh/) | ✅ Taşınabilir saf JS, 9/9 test geçti — relay, dedup, imza, uçtan uca şifreleme, offline kuyruk doğrulandı. |
| BLE taşıma (src/transport/BleTransport.js) | ⚙️ Cihaz katmanı — gerçek telefonlarda derlenip test edilmeli. |
Gerçek telefon-telefon Bluetooth mesh native yetenek ister; üretim için Android'de Google Nearby Connections en sağlam yoldur. Mesh mantığı taşımadan bağımsız yazıldığı için çekirdek değişmeden kalır. iOS arka planda BLE mesh'e kısıtlıdır; öncelikli hedef Android'dir.
flowchart LR
subgraph A["Telefon A"]
UA["UI"] --> NA["MeshNode<br/>imza·TTL·dedup·kuyruk"] --> TA["BLE"]
end
subgraph B["Telefon B — relay"]
TB["BLE"] --> NB["MeshNode"] --> TB
end
subgraph C["Telefon C"]
TC["BLE"] --> NC["MeshNode"] --> UC["UI"]
end
TA <-->|Bluetooth| TB
TB <-->|Bluetooth| TC
classDef core fill:#0B2E52,stroke:#0B2E52,color:#fff;
class NA,NB,NC core;
Mesaj A → B → C yolunu izler; A ile C birbirini görmese bile B taşır. Her düğüm imza-doğrular, gördüyse eler (dedup), TTL azaltıp komşularına yeniden yayar.
npm install
npx expo install
npm run test:mesh # mesh çekirdeğini doğrula (9/9)
npx expo start # Demo modu (Bluetooth'suz UI)
npx expo run:android # gerçek BLE mesh (dev build, 2+ telefon)Gerçek mesh için App.js'te makeTransport'u BleTransport ile değiştirin, en az iki Android telefonda test edin.
Tüm Hakları Saklıdır. Ayrıntılar için LICENSE.
Sayha Kılıç — sayha.cloud