Inspiration

Knowledge workers switch between apps over 1,200 times a day, losing roughly 3 hours just trying to refocus. Meanwhile, 90% of personal data collected by smart devices gets intercepted, and 80% of users don't understand their own device's data practices. We asked: what if your hardware could think for you — without spying on you?

The failures of the Humane AI Pin ($699, returned by 90% of buyers) and Rabbit R1 (redundant, no ecosystem) proved that "phone replacement" devices don't work. Instead of building another gadget, we built an orchestration layer on top of hardware people already own — the Logitech MX Creative Console and MX Master 4.

What it does

Genie in a Bottle is a 3-layer system:

Unified Messaging Bridge — Connects Telegram, Slack, and Facebook through Unipile. Incoming messages hit a webhook, get normalized, and are routed through GPT-4o for AI-powered summarization, urgency classification, and VIP detection.

Haptic Intelligence Engine — Instead of screen popups, the MX Master 4 mouse physically vibrates with distinct waveform patterns: a heartbeat for VIP messages, a double-pulse for urgent alerts, and silent for low-priority — so you never need to look at a screen to know what matters.

Privacy Shield — A server-side PII redaction engine scrubs passwords, credit cards, SSNs, phone numbers, emails, API keys, IBANs, crypto addresses, IP addresses, and PINs using 10 regex patterns before data ever reaches the UI or database. Raw PII never leaves the server.

Additionally, Smart Home automation (via Home Assistant) proactively dims lights and adjusts the thermostat after 2 hours of focused work — all through the Logitech dial.

How we built it

Backend: Node.js + Express server handling webhooks, with a WebSocket layer that differentiates between dashboard clients and hardware clients using URL parameters. AI Pipeline: LangChain.js with dual-mode support — OpenAI GPT-4o-mini (cloud) or Ollama llama3 (local), switchable at runtime from the dashboard. Dashboard: Next.js 16 with a dark cyberpunk-industrial 3-column layout built with Framer Motion animations and Tailwind CSS v4. Logitech Plugin: C# / .NET 8 plugin using the Loupedeck SDK, with modules for HapticEngine (6 waveform patterns), PersonaManager (3 AI personas), ToneDial (maps dial rotation to AI temperature), and bridges for messaging and smart home. Hardware Simulator: A Node.js script that mimics the C# plugin, connecting as a hardware client to prove bidirectional communication without a physical device. Persistence: SQLite for local-first storage. Sessions and redacted messages are stored locally — no cloud dependency. Tunnel: ngrok exposes the local webhook publicly for Unipile callbacks.

Challenges we ran into

PII Redaction Ordering: Phone numbers were being misidentified as credit cards because the regex patterns were running in the wrong order. We had to carefully prioritize PINs → Phones → Cards to prevent false matches. WebSocket Client Differentiation: The dashboard and the Logitech hardware both connect to the same WebSocket. We solved this by using URL query parameters (?client=dashboard) to tag connections and accurately report hardware status. IPv6 Resolution Bug: Node.js was resolving localhost to ::1 (IPv6) instead of 127.0.0.1, causing connection failures between the frontend proxy and backend. Fixed by hardcoding 127.0.0.1 in the Next.js proxy config. No Physical Hardware: Without a Logitech device available, we built a full terminal-based hardware simulator that proves the WebSocket pipeline, haptic waveform routing, and bidirectional state sync all work.

Accomplishments that we're proud of

10-pattern PII redaction that provably scrubs passwords, cards, SSNs, phones, emails, API keys, IBANs, crypto addresses, IPs, and PINs — verified with live test data. Bidirectional state sync — toggling Lights, Fan, AC, or switching Work/Home mode on the dashboard instantly appears in the hardware simulator with haptic feedback logged. Zero-config onboarding — users connect by clicking one button; no QR codes, no second device needed. Dual-mode AI — seamlessly switch between cloud (OpenAI) and local (Ollama) inference from the Settings panel, preserving privacy for users who want fully offline processing.

What we learned

"Calm Technology" design — moving information off the screen and into peripheral awareness through haptics — is surprisingly powerful for reducing notification fatigue. Server-side PII redaction must be treated as a pipeline with strict ordering; naïve regex application causes cascading misclassifications. WebSocket architecture requires explicit client typing to avoid conflating UI clients with hardware clients.

What's next for Genie in a Bottle

Full Loupedeck SDK integration — render AI summaries directly on the MX Creative Console LCD keys as dynamic bitmap icons. Multi-user ambient mesh — allow family members to share a single Genie instance with per-user privacy boundaries. Matter/Thread smart home protocol — move beyond HTTP to the new standard for local-first smart home control. Voice reply via Logitech — press and hold a dial key to dictate a reply, which the AI rewrites in the active persona's tone.

Built With

Share this project:

Updates