Off Chat: A Decentralized Digital Concierge

Bachelor Thesis Project | CTU FEE, Prague

Off Chat is an offline-first, peer-to-peer decentralized communication platform built with Flutter. It utilizes Bluetooth Low Energy (BLE) to enable instant device discovery, relative location tracking (Radar), and secure messaging without any reliance on internet, cellular connectivity, or central infrastructure.

🛰 The Off-Chat BLE Protocol

Zero-read Identification Protocol

To overcome BLE advertisement limits (31 bytes) and iOS background restrictions, Off Chat splits data transmission between the primary packet and the scan response:

1. Primary Advertisement Packet (5 Bytes)

Packs critical identity data tightly at the byte-level:

  • Bytes 0-3: Stable Device ID (32-bit big-endian unsigned integer).
  • Byte 4: Combined byte consisting of:
    • Bits 7-2 (6 bits): Version Tag (first 6 bits of Profile Hash) for instant change detection.
    • Bit 1 (1 bit): Platform Flag (1 for iOS, 0 for Android).
    • Bit 0 (1 bit): Online Status Flag (1 if Internet Bridge, 0 if offline).

2. Scan Response Packet (12 Bytes)

Dispatched only when requested by active scanners to conserve battery:

  • Bytes 0-2 (24 bits): Latitude compressed to a 24-bit fixed-point integer.
  • Bytes 3-5 (24 bits): Longitude compressed to a 24-bit fixed-point integer.
  • Bytes 6-11 (6 bytes): Full Profile Hash for cryptographically verifying user identity.

✈️ Throttled Heartbeat (Energy Conservation)

Continuous scanning and advertising is resource-heavy. Off Chat utilizes Adaptive Throttling:

Motion State

Resets and updates advertising instantly when a change of 111 meters or physical sensor movement is detected to maintain spatial accuracy.

Stationary State

If the user is sitting still, the advertiser sleeps and restarts advertising only every 300 seconds (5 minutes) to maintain node connection tables.

🧠 Architectural Knowledge Graph

Interactive visualization of the project's codebase and conceptual relationships generated via Graphify.

🏗 Technical Architecture

lib/src/
├── features/
│   ├── onboarding/   # Security setup, profile configuration & key generation
│   ├── discovery/    # BLE Discovery engine, scanning & Sync Queue
│   ├── location/     # Radar math, Compass sensors & CustomPaint Canvas
│   ├── profile/      # Local identity & Settings Bento Grid
│   └── chat/         # Messaging logic, encryption & ChunkedTransferManager
├── core/
│   ├── routing/      # Reactive GoRouter with state guards
│   ├── theme/        # Centralized Aurelian Noir ThemeData
│   ├── database/     # Isar local database layer (FoundDevice, Message, RelayTask)
│   └── notifications/# Local background alerts
└── app.dart          # Root Material application

🧪 Verification & Quality

Netsim Proximity Simulation

Simulates BLE radio signals and distances between multiple Android emulators, allowing offline local verification of the Directed Beam routing and GATT sync logics.

In-App Developer Terminal

A hidden, color-coded, real-time diagnostic console accessible via triple-tap on the home screen "OFFCHAT" logo title, displaying the last 200 system events.

CI/CD Release Automation

GitHub Actions automatically builds release APKs and App Bundles on every push to the master branch, deploying directly to targeted releases.

Off Chat: Decentralizovaný Digitální Concierge

Bakalářská práce | ČVUT FEL, Praha

Off Chat je offline peer-to-peer decentralizovaná komunikační platforma postavená na Flutteru. Využívá Bluetooth Low Energy (BLE) pro okamžité objevování zařízení, sledování relativní polohy (Radar) a bezpečnou výměnu zpráv bez jakékoli závislosti na internetu, mobilním signálu či centrální infrastruktuře.

🛰 Protokol Off-Chat BLE

Zero-read Identifikační Protokol

K překonání limitů BLE reklamy (31 bajtů) a omezení iOS na pozadí Off Chat rozděluje přenos dat mezi primární paket a skenovací odpověď:

1. Primární inzerční paket (5 bajtů)

Zabaluje klíčová identifikační data na bitové úrovni:

  • Bajty 0-3: Stable Device ID (32bitový big-endian unsigned integer).
  • Bajt 4: Kombinovaný bajt obsahující:
    • Bity 7-2 (6 bitů): Version Tag (prvních 6 bitů hashe profilu) pro okamžitou detekci změn bez navazování GATT spojení.
    • Bit 1 (1 bit): Příznak platformy (1 pro iOS, 0 pro Android).
    • Bit 0 (1 bit): Příznak online stavu (1 pro Internet Bridge, 0 pro offline).

2. Paket odpovědi na skenování (12 bajtů)

Vysílán pouze na vyžádání skenerem, což šetří energii baterie:

  • Bajty 0-2 (24 bitů): Zeměpisná šířka (Latitude) komprimovaná do 24bitového integeru s pevnou řádovou čárkou.
  • Bajty 3-5 (24 bitů): Zeměpisná délka (Longitude) komprimovaná do 24bitového integeru s pevnou řádovou čárkou.
  • Bajty 6-11 (6 bajtů): Full Profile Hash pro kryptografické ověření identity uzlu.

✈️ Throttled Heartbeat (Energetická optimalizace)

Neustálé vysílání a skenování je energeticky náročné. Off Chat využívá Adaptivní Throttling:

Stav v pohybu

Okamžitě restartuje a aktualizuje inzerci při změně polohy o více než 111 metrů nebo při detekci pohybu ze senzorů pro udržení přesnosti polohy.

Stacionární stav

Pokud uživatel sedí v klidu, inzerce se uspí a restartuje se pouze každých 300 sekund (5 minut) pro údržbu tabulek spojení.

🧠 Architektonický Graf Znalostí

Interaktivní vizualizace kódové základny a konceptuálních vztahů projektu generovaná pomocí Graphify.

🏗 Technická Architektura

lib/src/
├── features/
│   ├── onboarding/   # Protokol zabezpečeného nastavení, profil a klíče
│   ├── discovery/    # BLE Skenování, objevování a Sync Queue
│   ├── location/     # Matematika radaru, Kompas & UI Canvas
│   ├── profile/      # Lokální identita a Bento Grid nastavení
│   └── chat/         # Logika zpráv, šifrování & ChunkedTransferManager
├── core/
│   ├── routing/      # Reaktivní GoRouter s ochranou stavů
│   ├── theme/        # Centralizovaný motiv Aurelian Noir
│   └── database/     # Perzistentní vrstva Isar (FoundDevice, Message, RelayTask)
└── app.dart          # Kořenová aplikace

🧪 Ověřování a Kvalita

Simulace blízkosti (Netsim)

Simuluje BLE signály a vzdálenosti mezi více Android emulátory, což umožňuje offline lokální testování Directed Beam směrování a synchronizace.

Vývojářský Diagnostický Terminál

Skrytá konzole přístupná trojitým klepnutím na logo „OFFCHAT“ v záhlaví domovské obrazovky, zobrazující historii posledních 200 systémových událostí.

Automatické Sestavení (CI/CD)

GitHub Actions automaticky sestavuje instalační APK a AAB balíčky při každém nahrání do hlavní větve s automatickým pushováním releasů.