The TLS bridge is what makes a 2007 Nokia Claude client actually possible
The TLS problem is the whole story here. A Nokia 6300 from 2007 speaks only TLS 1.0 with RSA key exchange, sends no SNI, and carries a root certificate store that stopped being updated around 2008. Every modern public endpoint — Cloudflare included — will refuse that handshake. So this project solves a real protocol incompatibility before it can do anything else: a Go server terminates the phone-side TLS using a certificate from a private CA you install on the device once, then proxies onward to the Claude API over normal modern HTTPS. That bridge is the architectural core, and everything else is built on top of it.
The phone app itself is a Java ME MIDlet targeting CLDC 1.1 and MIDP 2.0, compiling to a JAR under 130 KB. It runs on the Nokia 6300 and the E63; other Series 40 handsets with the right CLDC/MIDP versions may work but are untested. The feature set is genuinely complete for the constraint: chat with bubble layout and timestamps, paginated reading mode, voice input transcribed server-side via OpenAI's speech-to-text, photo queries scaled to 1024 pixels before upload, calendar and to-do integration that writes to the phone's own native stores, and a fuzzy chat search that handles Turkish characters by letting you type unaccented equivalents. Long replies are chunked and fetched incrementally without re-querying Claude, which matters when you are paying per API call.
The server enforces per-device daily limits on requests, output tokens, web searches, and voice messages, and explicitly never retries a paid call automatically. That discipline is deliberate: every message hits your Claude API key, web searches are billed per search and their results count as input tokens, and voice transcription bills to a separate OpenAI key. The README is direct about all of this and tells you to set a spending cap in the Claude Console.
Privacy handling is self-hosted by design. The API key never leaves your server. The phone receives a revocable per-device token through a pairing flow using a six-digit code. Chat history lives on your server for 30 days, pinned conversations until you remove them, and logs contain no message text. The setup file on the memory card is the one weak point the README acknowledges: if the card leaves your hands, you revoke the device.
The development setup requires Go 1.26 or later, JDK 11 or later, Python 3 with Pillow, and Docker. The test suite runs go vet, a race-condition-aware test pass on the server, and 47 package-level checks on the app with a reproducibility verification. Deployment assumes a VPS with a public IPv4 address and port 443 open — the README suggests a four-to-six dollar per month instance is sufficient.
This is a complete, self-hostable system for a specific and genuinely unusual constraint. The engineering is honest about what it costs to run and what it cannot do.
A complete self-hosted Claude client for 2007 Nokia hardware, built around the real TLS incompatibility that makes every other approach fail.