Hi everyone! I built CrankBot — an AI chatbot that runs on your Playdate via a self-hosted API server.
I work on products at [AI-MY](https://ai-my.net) under the theme of "anti-innovation / rediscovery." We recently won 3rd place + Anthropic Award at the Claude Hackathon with a Lo-Fi Camera that prints pixel art on thermal paper. CrankBot comes from the same impulse — what happens when you put AI on the most constrained screen possible?
## How it works
```
Playdate (Lua) ──HTTPS──▶ API Server (Python/FastAPI) ──▶ LLM API
```
The Playdate app sends user messages over HTTPS to a Python/FastAPI server, which queries any OpenAI-compatible LLM API (Claude, GPT, Gemini, Groq, etc.) and returns the response.
## Technical details
- On-screen keyboard for text input
- Conversation history with sliding window (last 6 exchanges)
- Crank-based scrolling for long responses
- Bearer token authentication
- Response buffering and word-wrap for the 400x240 display
- ~500 lines of Lua, ~80 lines of Python
- Works with any LLM provider that supports the OpenAI chat completions format
## What surprised me
The crank scroll changes the whole experience. You physically turn through each line of the AI's response. You end up actually reading every word — something that almost never happens with AI in a browser. The deliberate slowness feels like a feature.
## Setup
You'll need:
1. A Playdate
2. A server running Python 3 with FastAPI
3. An API key from any LLM provider (Anthropic, OpenAI, etc.)
Full instructions in the README.
## Source code
Everything is MIT licensed:
I'd love feedback on:
- The on-screen keyboard UX
- Text rendering on the 1-bit display
- Any ideas for cool features
Thanks for checking it out!