Inspiration
I wanted a communication tool that still works when the internet is unreliable or unavailable, without requiring anyone to install an app or create accounts. The idea was: a small, portable device should be able to create a local network where people can immediately communicate. I also wanted an Ai assistant so the system can help without relying on cloud APIs.
What it does
PILink turns a Raspberry Pi into a local communication hub. People connect to the Pi’s Wi-Fi hotspot and open a browser-based web app to use:
- Realtime group chat
- Push-to-talk live voice (one speaker at a time by design)
- PI, an optional on-device assistant powered by Ollama ## How we built it The Raspberry Pi hosts everything:
- A Wi-Fi hotspot via NetworkManager
- Local DNS override so a friendly hostname resolves to the Pi offline
- A Rust backend (Axum) that serves the frontend and provides API/WebSocket endpoints
- A React frontend built into static assets (dist/) that the backend serves directly
- Optional Ollama running locally at 127.0.0.1:11434 for the PI assistant ## Challenges I ran into
- HTTPS for microphone access: Mobile browsers require a secure context for mic permissions, so the Pi needs TLS certificates even for “offline” use. I supported both a real domain/certificate flow and a self-signed fallback.
- Offline DNS: To keep the UX clean, users open a hostname (not an IP), which required making the hotspot DNS resolve the hostname to the Pi’s local gateway address.
- Realtime reliability: Keeping WebSocket connections and WebRTC signaling stable across different browsers (especially iPhone Safari and Firefox) required careful reconnection behavior, heartbeat logic, and state synchronization.
- Pi deployment: I wanted it to run like an appliance, so I automated setup with a script and packaged it as a systemd service that starts on boot. ## What I learned This project taught me how many “product” details matter beyond core features:
- Networking and DNS are part of the user experience
- HTTPS is not just for the public internet; it unlocks important browser capabilities
- Realtime systems need resiliency, heartbeats, reconnects, and state resync
- Shipping on constrained hardware forces practical design choices lightweight models, efficient systems, simple UX
## What's next for PILink
Better AI model optimization, ensuring chat context for a more parameterized model, and improving security as well as further optimizing for lower-end hardware.
Built With
- ollama
- openssl
- raspberry-pi
- react
- rust
- vite
- websocket
Log in or sign up for Devpost to join the conversation.