AIKON README

The project's README from github.com/emir/AIKON. As one markdown file: README.md.

AIKON

Formerly Claude S40. The project was called Claude S40 up to phone app 0.10.x / server 0.7.x, while it only talked to Claude. Since it also speaks to OpenAI, Gemini and Grok it is called AIKON (Nokia spelled backwards). The repository moved from emir/claude-s40 to emir/AIKON (GitHub redirects the old address); the Java package and server names keep the old name.

AIKON: today's AI on a 2007 Nokia

Today's AI on a 2007 Nokia. AIKON is an AI chat client for Nokia Series 40 and Symbian S60 phones (Java ME, CLDC 1.1 / MIDP 2.0), plus the small Go server it talks to. Pick a model per chat (Claude, OpenAI, Gemini or Grok), type on the keypad, get the answer on a 240x320 screen: with today's news, weather and exchange rates from web search, long answers you can page through, and a UI in Turkish, English, Spanish, Portuguese, French, German, Russian or Indonesian. Tested on the Nokia 6300 (S40) and the Nokia E63 (S60 QWERTY).

Video (still as Claude S40): on a Nokia 6300, on X

Features

On the phone

On the server

Screens

Home Waiting for a reply Lists and paragraphs Reading mode
A calendar entry, selected Message actions Quick prompts Dark theme, large text

Screenshots are from the FreeJ2ME emulator in the app's test mode (the "[Test mode]" replies are fake and cost nothing; the emulator reports no calendar API, so the harness turns the calendar actions on for these screens and never saves); the cover is a drawing. Start-up animation: docs/images/splash.gif.

Independent side project. Not made, endorsed or supported by Anthropic, OpenAI, Google, xAI or Nokia. See TRADEMARKS.md.

Tested on a Nokia 6300 (RM-217, firmware V06.60), and on a Nokia E63 (Symbian S60 3rd Edition FP1, 320x240, QWERTY, over WLAN; see docs/SETUP.md). Other Series 40 phones (CLDC 1.1 / MIDP 2.0, 240x320) may work but are untested.

How it works

Nokia (Java ME app) --HTTPS: TLS 1.0, RSA, no SNI, cert from YOUR private CA--> claude-s40-server --HTTPS--> Claude / OpenAI / Gemini / Grok APIs
                                                                                     |
                                                                              SQLite (Docker volume)

A 2007 phone cannot speak modern HTTPS: the Nokia 6300 offers only TLS 1.0 with RSA key exchange, sends no SNI, and its root store stops around 2008. Public clouds (including Cloudflare) refuse that handshake. So the server terminates TLS itself with a certificate from a private root CA that you put on the phone once. Details and measurements: docs/ARCHITECTURE.md.

What's inside

Path What
app/ The phone app: CLDC 1.1 / MIDP 2.0 MIDlet, ~220 KB JAR, UI in eight languages (see Features). Reproducible build with package checks.
server/ One Go binary / Docker image (~7 MB): phone-facing TLS, chat backend (Claude via the official anthropic-sdk-go; OpenAI, Gemini, Grok over plain HTTPS), SQLite, pairing, admin API bound to localhost.
docs/ SETUP.md (step by step), ARCHITECTURE.md (protocol, TLS, design).

Get it

git clone https://github.com/emir/AIKON.git
cd aikon

Quick start

Full guide: docs/SETUP.md. In short:

  1. A Docker host with a public IPv4 and TCP 443 (a $4-6/month VPS is enough).
  2. server/scripts/pki.sh ca ~/.config/claude-s40/pki and server/scripts/pki.sh server ~/.config/claude-s40/pki <server-ip>.
  3. server/deploy/push.sh root@<server-ip> --execute (starts in test mode, no API cost).
  4. echo GATEWAY_URL=https://<server-ip> > app/app.local.properties && make -C app, then install app/dist/AIKON.jad/.jar on the phone.
  5. Put the root CA on the phone (server/deploy/serve-ca.sh, compare the fingerprint).
  6. On the phone the setup wizard walks through the connection test and pairing; approve the code with server/deploy/admin.sh root@<server-ip> pair <code>.
  7. server/deploy/set-key.sh root@<server-ip> (Claude; add openai, gemini or xai for the others), then S40_MOCK=0 S40_MODELS=... server/deploy/push.sh root@<server-ip> --execute to go live.

Development

make test          # server: go vet + go test -race; app: build + package checks + reproducibility
make -C app        # phone app only (downloads pinned build tools to app/.deps)
make -C server test

Requirements: Go 1.26+, JDK 11+, Python 3 with Pillow, Docker (for deployment), OpenSSL or LibreSSL.

Privacy and cost

Translations

The app is written in English; every other language is one text file, app/lang/xx.txt: an English text, a TAB, its translation, one per line. The Spanish, Portuguese, French, German, Russian and Indonesian files are first drafts: corrections from native speakers are very welcome (a pull request that edits the file is enough). A new language is a new file plus its code and name in L.java (LANGS, NAMES); make -C app langs copies the files to server/lang (the server sends them to phones, which carry only English) and shows what each file covers, and the build refuses a file that misses a text. Languages written right to left (Arabic, Hebrew) need layout work first, and scripts the phones' fonts lack (Japanese, Chinese) are out of reach on this hardware.

Contributors

License

MIT, see LICENSE. Copyright (c) 2026 Emir Karşıyakalı. Build-time tools are downloaded, not bundled (ECJ: EPL-2.0, ProGuard: GPL-2.0, MicroEmulator API stubs: LGPL, CafeUndZopfli: Apache-2.0); none of them end up in the phone app. The optional emulator harness app/emu/EmuShot.java links against FreeJ2ME (GPL-3.0), which is not included.

AIKON (emir/AIKON)

Searching Database…

353 ·GitHub
Что это?AIKON — это ИИ-чат-клиент для старых кнопочных телефонов Nokia Series 40 и Symbian S60 (Java ME, CLDC 1.1 / MIDP 2.0) в паре с небольшим Go-сервером, который пересылает ваши сообщения в Claude, OpenAI, Gemini или Grok, чтобы телефон эпохи 2007 года мог общаться с современными ИИ-моделями.
Это просто приложение для телефона, или нужен ещё и сервер?И то и другое: J2ME MIDlet размером ~220 КБ (app/) работает на телефоне, а бинарник Go или Docker-образ размером ~7 МБ (server/) терминирует TLS, общается с ИИ-провайдерами и хранит чаты в SQLite. Телефон не сможет работать, если не указать на ваш собственный запущенный сервер.
Как его запустить?Разверните Docker-хост с публичным IPv4 и TCP 443 (подойдёт VPS за 4–6 долларов в месяц), сгенерируйте приватный CA и серверный сертификат через server/scripts/pki.sh, разверните через server/deploy/push.sh, соберите приложение для телефона командой make -C app после задания GATEWAY_URL, установите .jad/.jar на телефон, загрузите на него корневой CA и пройдите сопряжение через мастер настройки на телефоне.
Что нужно на моём компьютере, чтобы собрать и развернуть это?Go 1.26+, JDK 11+, Python 3 с Pillow, Docker для развёртывания и OpenSSL или LibreSSL для генерации сертификатов; также нужны собственные API-ключи для ИИ-провайдеров, которых вы хотите включить.
Заработает ли это на моём старом Nokia?Подтверждена работа на Nokia 6300 (S40) и Nokia E63 (S60 QWERTY); другие телефоны Series 40 с CLDC 1.1 / MIDP 2.0 и экраном 240x320 могут работать, но не тестировались. Языкам с письмом справа налево, вроде арабского и иврита, нужна доработка вёрстки, а письменности, которых нет в шрифтах телефонов, например японская или китайская, на этом железе недостижимы.
Где в итоге оказываются мои чаты, фото и заметки?Ваши API-ключи провайдеров и история чатов хранятся только на вашем собственном сервере; чаты хранятся 30 дней (закреплённые — пока вы их не открепите или не удалите), а фото остаются в своём чате те же 30 дней. Ваши заметки для ИИ и сохранённые ответы остаются на самом телефоне.
Почему серверу нужен собственный приватный центр сертификации?Nokia 2007 года понимает только TLS 1.0 с обменом ключами RSA и не отправляет SNI, поэтому публичные облака отклоняют её рукопожатие; сервер сам терминирует TLS, используя сертификат от приватного CA, который вы один раз устанавливаете на телефон.
Кто платит за сами запросы к ИИ?Каждое сообщение списывается с вашего собственного API-ключа у этого провайдера; сервер соблюдает дневные лимиты на устройство по запросам, токенам, веб-поиску, голосовым сообщениям и фото, а платные вызовы никогда не повторяет автоматически.
Что умеет телефон помимо простого чата?Он может искать в интернете новости, погоду и курсы валют, диктовать голосовые сообщения, спрашивать о фото, снятых на камеру, добавлять записи в календарь и список дел из ответа, сохранять ответы в файлы .txt, а также сокращать, объяснять или переводить любое сообщение.
Какие языки поддерживает приложение?Меню доступны на английском, турецком, испанском, португальском, французском, немецком, русском и индонезийском, а ответы следуют языку, на котором вы пишете, независимо от языка меню.
Creator
emir
Size
14.8 MB
Stars
353
Age
23d
Commits · 90 Days