Product manager · Developer · Designer
← All work05 · Personal AI assistant

J.A.R.V.I.S

Role
Solo designer & developer
Built
Oct 29 – Nov 1, 2026
Runs on
My Mac, private by default
Apps
iPhone, Mac, CarPlay
The J.A.R.V.I.S iPhone app: a chat, the home screen and an approval

A private assistant that asks before it acts.

A private AI assistant that runs on my own Mac on an open model, and works from a custom iPhone app by chat or by voice. It searches, writes, makes PDFs and decks, generates media and keeps projects organized, and anything that acts in the world waits for my tap.

The idea

The rules came first

I started with how the assistant should behave and what it should never do on its own. The clearest decision: the local model does the work, and posting, sending and merging always wait for a person.

Everyday work stays on my own machine, and the app reaches it from anywhere over a private Tailscale network.

494automated tests
16klines of Python on the server
7.5klines of app code
87commits in four days

Everyday work, in plain words

The orb

A request answered by the local model

Answers

Captions, each with a Copy button

Captions

A PDF brief linked in the chat

Documents

The same PDF opened in the app

PDF viewer

The media library

Media library

What it does

  1. 01Talks and listensChat or full-screen voice with an animated orb. Talk over it to interrupt, or wake it with “Hey Jarvis”. Works in CarPlay.
  2. 02Gets work doneSearches the web, reads files, PDFs and decks, makes PDFs, pages and slide decks, and sets reminders that reach your phone.
  3. 03Creates mediaGenerates images and video through Higgsfield and files each result in the right project, never overwriting a file.
  4. 04Asks before it actsMerges, posts, messages, mail and deploys wait in one approvals inbox. Each approval runs exactly once and is logged.
  5. 05Manages projects by voice“Go to Night Owl” opens a project; “Create a project called Phoenix” sets one up with git.
  6. 06Hands off with permissionThe local model answers first, and asks before handing a big job to Claude Code on its own git branch.

Nothing goes out without a tap

A social post waiting for approval

Social post

A code merge with its files and tests

Code merge

Voice mode, listening

Voice mode

Projects, plus Downloads

Projects

A project’s folders

Folders

The whole app in a new accent colour

Any colour

How it’s built

One Mac, private by default

A Python server on my Mac runs Gemma 4 on llama.cpp with a streaming tool-calling agent, Whisper for hearing and Piper and Kokoro for speaking. The iPhone app is Expo and React Native with CarPlay; the Mac app is Electron with Swift helpers.

  • Python 3.12, FastAPI, Socket.IO, SQLite and launchd services
  • Tailscale network, macOS Keychain, device pairing with JWTs
  • Claude Code and Codex through my own subscriptions, never API keys
  • Up to five guests, each with private chats, memory and settings

Tools

  • Python
  • FastAPI
  • llama.cpp
  • Gemma 4
  • Whisper
  • React Native
  • Expo
  • Electron
  • Swift
  • Tailscale