PhoneKit: Feature details

Every tool, in one folder

PhoneKit is a self-contained KUAL extension. Everything below is plain shell and Python from the standard library. No compiled code, no package to install, and removing it is deleting the folder. It needs a jailbroken Kindle and KUAL.

Clock

A big, readable digital clock that lives on the e-ink screen.

PhoneKit adds a full-width clock in 24-hour format by default, or 12-hour when launched with the 12 argument. It is designed for e-ink: it does a full screen refresh every minute to avoid ghosting and burn-in, and it clears when you press Home.

  • 24-hour default; pass 12 for 12-hour format.
  • Full screen refresh every minute to avoid ghosting.
  • Press Home to exit.
Note: the minute-by-minute refresh is normal for e-ink and is what keeps the display clean.
← Back to overview

Countdown timer

A full-screen countdown that flashes the screen when time is up.

The Kindle has no speaker, so PhoneKit cannot beep. Instead, when the countdown reaches zero it flashes the whole screen. The default is a 300-second (5 minute) countdown; you can change it by editing the Timer entry in menu.json, for example "params": ["900"] for 15 minutes.

  • Full-screen countdown display.
  • Flashes the screen when time runs out. No speaker needed.
  • Default duration editable via menu.json.
← the overview

LLM chat

Chat with any OpenAI-compatible endpoint right on the Kindle.

PhoneKit runs a tiny local server plus a web page in the Kindle's built-in browser. It talks to any OpenAI-compatible chat-completions endpoint. Ollama on the device, llama.cpp, vLLM, OpenAI, or OpenRouter. Set the URL, model, and optional API key in one config file and start chatting from the menu.

  • Works with any OpenAI-compatible endpoint: Ollama, llama.cpp, vLLM, OpenAI, OpenRouter.
  • Default points at Ollama on the Kindle itself with model qwen2.5:7b-instruct.
  • Set PK_LLM_API_URL, PK_LLM_API_KEY, PK_LLM_MODEL, and an optional system prompt in ext/llm/config.env.
  • Start and stop the server from the LLM menu.
Note: chat needs an LLM endpoint, even if that endpoint is on the device. Keep answers short for a fast, readable reply on e-ink.
← the overview

XMPP messenger

Browser clients, plus an optional on-screen bridge over TLS.

The Kindle cannot run Android apps, so PhoneKit opens the Monocles and Cheogram web clients in the browser. An optional on-screen bridge connects directly to your XMPP server over TLS, authenticates with SCRAM-SHA-1 (PLAIN as fallback), and flashes incoming messages on the e-ink screen.

  • Open Cheogram (https://app.cheogram.com) or Monocles Web (https://chat.monocles.de) in the browser.
  • On-screen bridge connects over TLS and authenticates with SCRAM-SHA-1.
  • Incoming messages are logged and flashed on the screen.
  • One-tap check-in sends status presets ("here", "busy", "ok", "night") to a preset contact.
Security: SCRAM-SHA-1 is preferred over PLAIN. Keep TLS verification on and never leave PK_XMPP_NO_VERIFY=1 set on a real account. API keys in config.env are plain text.
← the overview

Read-it-later reader

Paste a URL, and the Kindle reads it back to you in large text.

The reader is a local web app. Paste a URL, the Kindle fetches it, strips the page down to readable text, and renders it large on the e-ink screen. Saved articles live in inbox.json next to the server. If an OpenAI-compatible API is configured, a Summarize button appears for optional LLM summaries.

  • Fetches and strips a page down to readable text.
  • Renders articles in clean, large-font text.
  • Optional LLM summary when PK_RIL_API_URL is set.
  • Saved articles stored in inbox.json.
← the overview

RSS feed reader

A feed reader that keeps a plain list of URLs.

PhoneKit keeps a plain text list of feed URLs, fetches them on demand, caches items, and renders each article as clean, large-font text. Add feeds by editing ext/feed/feeds.txt (one URL per line, lines starting with # are ignored) or from the web page's "Add feed" form. Fetched items are cached in cache.json.

  • Plain text feed list, one URL per line.
  • Fetches on demand and caches items.
  • Renders each article as clean, large-font text.
  • Per-feed fetch timeout configurable in ext/feed/config.env.
← the overview

Notes & todo

A tiny notes and todo list stored in one plaintext file.

Add a note or todo, tick todos done, and delete lines. Everything is stored in one plaintext file, one line per entry (TODO:, DONE:, or NOTE:), so it is easy to edit on a computer, and everything survives a reboot.

  • One plaintext data file, easy to edit on a computer.
  • Add notes, tick todos done, delete lines.
  • Everything survives a reboot.
  • Data file path configurable in ext/notes/config.env.
← the overview

Home-lab dashboard

An at-a-glance dashboard for your home lab.

A big clock and date, plus whatever your own JSON endpoint reports, such as uptime, disk, or temperature. Point PK_DASH_URL at any JSON your own server exposes, for example {"uptime":"3d 4h","disk":{"value":"71%","status":"warn"},"temp":"52C"}. Refresh from the menu, or set up a cron or lipc wake to hit /refresh on a schedule (the e-ink screen and Wi-Fi sleep between updates).

  • Big clock and date plus your own JSON endpoint data.
  • Refresh from the menu or on a schedule.
  • Label configurable via PK_DASH_NAME.
← the overview

QR pairing

Render any text as a QR code on the e-ink screen.

PhoneKit renders any text, such as a Wi-Fi join string, a vCard contact, or a URL, as a QR code directly on the e-ink screen using a pure-Python encoder. Point your phone at the screen to pair. No config file is needed; the menu items render a fixed payload, and you can show your own text by editing the params in menu.json or running ext/qr/show_qr.sh.

  • Pure-Python QR encoder, no external dependency.
  • Render a Wi-Fi join string, vCard, or URL.
  • Point your phone at the screen to pair.
← the overview