Skip to content
┌─kranthi@dev:~$
All projects
2026·GitHub

EduVerse

Offline-first PWA for rural education with LoRa mesh sync between ESP32 devices when there is no internet.

Full-stackHardwareAI

Problem

Rural students often have intermittent or no internet, so cloud-first e-learning platforms are unusable for them. EduVerse works fully offline and syncs progress when connectivity — or a nearby LoRa peer — is available.

Impact

  • 14-table PostgreSQL relational schema
  • Zero-internet learning via Service Workers + IndexedDB
  • LoRa mesh sync over a 5–15 km range
  • AI weak-area detection from quiz + level data

Architecture

flowchart TB
  S[Student PWA] -->|offline cache| IDB[(IndexedDB)]
  S -->|WebSocket| API[Express API]
  T[Teacher PWA] -->|WebSocket| API
  API --> DB[(PostgreSQL 14 tables)]
  S -->|LoRa 5-15km| ESP[ESP32 Node]
  ESP -->|batched sync| API
  API --> AI[Weak-Area Engine]

Mermaid flowchart source — renders as a diagram when embedded in docs.

Data model

  • users, roles, user_roles
  • courses, modules, lessons
  • quizzes, questions, attempts
  • xp_events, level_progress
  • chat_rooms, messages
  • device_syncs (LoRa batches)

API design

MethodPathPurpose
POST/api/auth/loginJWT login
GET/api/coursesList enrolled courses
POST/api/attemptsSubmit quiz attempt (queued offline)
GET/api/recommendationsAI weak-area recommendations
POST/api/sync/loraAccept batched LoRa sync payload

Features

  • Full offline learning with background sync on reconnect
  • Gamified XP + level progression per student
  • Real-time student-teacher chat over WebSocket
  • LoRa hardware bridge for internet-less progress sync
  • AI recommendations from attempt + completion data

Engineering decisions & tradeoffs

PWA + IndexedDB over a native app

PWAs install on low-end Android without a store, work offline, and share one codebase with desktop teachers. IndexedDB is enough for lesson blobs + queued attempts.

LoRa instead of SMS or mesh Wi-Fi

LoRa gives kilometers of range on cheap ESP32 hardware and doesn't need a cellular plan. Great fit for batched, low-frequency progress payloads.

14 normalized tables over a document store

Grades, attempts, and roles are highly relational. Normal forms plus RBAC policies made the AI recommendation queries straightforward.

Challenges & lessons

  • Reconciling offline attempts with server-authoritative state without losing student work.
  • Framing LoRa payloads small enough to survive lossy links while carrying meaningful progress deltas.
  • Designing an AI weak-area heuristic that works with sparse attempt data early in a course.

Future improvements

  • Peer-to-peer LoRa mesh routing instead of hub-and-spoke
  • Signed sync payloads to harden against device spoofing
  • Teacher analytics dashboard with cohort-level weak areas