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

Share this project:

Updates