Vol. I · No. 579Rochester, New York, Thursday, September 24, 2026On-device AI · Page B13
All workSection B · Page B13

On-device AI[witness]

A Voice Journal That Listens and Never Phones Home

A private self-reflection app that transcribes your voice notes, reflects on them and chats about them with models that run on the phone.

Graphic5 steps
  1. RecordMic or file upload, 16 kHz mono WAV
  2. TranscribeWhisper Tiny EN on device
  3. AnalyzeQwen3 1.7B returns strict JSON, with a heuristic fallback
  4. StoreLogs and audio saved locally in SQLite
  5. ChatBM25 retrieval over past logs plus a chosen persona
What happens inside [witness], in order.Graphic: The Sahil Bachu

Sometimes you have to say something out loud to figure out what you think. [witness] is a voice journal for that. You record a vent (or upload one) and get back a title, a summary, a few insights and a short supportive note. Then you can chat with it about what you said, and it pulls in your older entries for context. It's a self-reflection tool, not therapy, and the README says so up front.

The rule I set for myself: this kind of data should never leave the phone. So everything runs on device. Whisper Tiny handles speech to text and a quantized Qwen3 1.7B does the analysis, both through react-native-executorch. Logs and chats live in local SQLite.

The rule I set for myself: this kind of data should never leave the phone.

Every recording goes through one function, processAudio(), whether it came from the mic, a file or, later, a pendant. I wrote a small dependency-free WAV parser and resampler to turn audio into the 16 kHz mono floats Whisper expects. Qwen3 is prompted for strict JSON: title, summary, insights, support and emotions. If the JSON doesn't parse, a heuristic analyzer takes over, so a bad generation never loses an entry.

Chat uses retrieval over your own logs. BM25 picks the top 4 entries by title, transcript, summary and emotions, with recent entries as a fallback. You can pick one of 4 personas: witness, critical, comforting or logical. If a message contains crisis keywords, the app points you to the 988 lifeline instead of trying to handle it.

The AI layer sits behind one provider interface. In Expo Go a lightweight demo provider runs so the whole app is clickable, and in a dev build the real local models switch on. I built an Android debug APK to test it. The docs also plan a small ESP32S3 pendant that records during the day and syncs over Bluetooth. For now that pendant is a write-up, not hardware.

More from The Work

See all 25

Mobile AI

Every Icon on This Homescreen Started as a Sentence

A phone homescreen where every icon is a mini-app that Claude wrote and a build server compiled from a plain-English description.

Describe a tool, Claude writes it as React code, a build server bundles it, and it runs on your phone in a sandbox. Each mini-app gets storage, the mic, the calendar, the camera and AI through a native bridge.

Continued on Page B10

Restaurant tech

A Restaurant iPad That Runs Its Own AI, Offline

An iPad demo that runs Llama 3.2 1B and Whisper on the device for order-taking, a menu kiosk and end-of-shift summaries.

An iPad demo of what on-device AI could add to a restaurant point of sale: voice order-taking with allergen alerts, a menu Q&A kiosk and shift summaries. Llama 3.2 1B and Whisper run locally, with no internet needed.

Continued on Page B22

Generative UI

A Canvas of Widgets You Order in Plain English

An infinite canvas where an AI agent turns a plain-English request into a live widget wired to your own data.

Ask for something like a card that summarizes your unread emails, and an agent researches, designs and places a live widget on an infinite, zoomable grid. Connectors for Gmail, Calendar, Slack, GitHub, Linear and Notion feed it real data.

Continued on Page B11