Open-source Physical AI infrastructure for commodity IoT hardware.
Insedge is an open-source research umbrella for the layer where AI meets the physical world: sensors, microcontrollers, and edge ML running on commodity hardware. Each initiative is a focused experiment in that direction.
🔗 Live · 🐦 @sparkedsense
Infrastructure for verifiable physical-world data. Connect any commodity microcontroller (ESP8266, ESP32, Arduino-compatible) to a verifiable data layer: cryptographic device identity, signed reading ingestion, ML-inference-aware event types, Merkle-anchored datasets on Solana, public audit pages — no proprietary devices required.
- Device identity — secp256k1 key pair generated on-device, persisted in EEPROM
- Signed ingestion — every event is a CloudEvents 1.0 envelope verified before storage (ADR-010)
- Inference-aware event types — classification, regression, transcription, raw audio, plus SenML telemetry — first-class for any TinyML output
- Verifiable datasets — binary Merkle tree with inclusion proofs verified client-side via Web Crypto
- On-chain anchoring — dataset roots pinned to Solana via the Memo Program
- Public audit — anyone can verify integrity without trusting the operator
- WiFi geolocation — devices locate themselves via BSSID scan against Apple's WiFi DB
- Real-time dashboards — Postgres CDC pushes readings live to connected clients
- Bilingual UI — PT-BR / EN via Paraglide JS
Vite + React + TypeScript on the frontend. Hono + Deno on Supabase Edge Functions. PostgreSQL with RLS. Cloudflare Worker for Apple WiFi DB lookups. Solana devnet for anchoring.
pnpm install
cp .env.example .env.local # fill SUPABASE + SOLANA vars
pnpm dev # localhost:3000Requires Node 20+. Edge Function deploys via supabase functions deploy server --project-ref <ref>.
Required env vars:
VITE_SUPABASE_URL=...
VITE_SUPABASE_ANON_KEY=...
SUPABASE_SERVICE_ROLE_KEY=...
SOLANA_RPC_URL=https://api.devnet.solana.com
SOLANA_SERVER_SECRET_KEY_BASE58=...
| Endpoint | Method | Description |
|---|---|---|
/public/sensors |
GET | List public sensors |
/public/sensors/:id |
GET | Sensor detail with reading counts |
/public/sensors/featured |
GET | Top-3 for the homepage |
/public/sensors/:sensorId/merkle-proof/:leafIndex |
GET | Inclusion proof for a leaf |
/public/readings/:sensorId |
GET | Readings feed (paginated via ?limit=N, unions legacy and envelope tables per ADR-015) |
/server/register-device |
POST | secp256k1 challenge-response registration |
/server/reading |
POST | CloudEvents envelope ingestion (canonical, ADR-010) |
/server/device-location |
POST | WiFi scan → geolocation |
MIT © 2025 Insedge Project
Fork, branch (feat/..., fix/...), commit, push, open a PR. See CLAUDE.md for branch naming and commit conventions.