Every home needs a Lamp. A private, local AI assistant for the household — built on Workshop and Tortoise.
Plug in a Raspberry Pi, connect phones over WiFi, and chat + build custom apps without cloud accounts or subscriptions.
Lamp → Workshop → Tortoise
| Layer | Role |
|---|---|
| Tortoise | Chunk-based code generation for slow/local LLMs |
| Workshop | Interview + build loop, SQLite data API, ticker |
| Lamp | PWA hub, PIN auth, chat, admin, notifications, per-user apps |
| Guide | Audience |
|---|---|
| QUICKSTART.md | Run Lamp on your Mac, Linux, or PC (Ollama/LM Studio, first login, voice) |
| PI-REQUIREMENTS.md | Minimum & recommended hardware for Raspberry Pi |
| setup/README.md | Pi WiFi onboarding, first-boot.sh, systemd |
| TESTING.md | Manual QA checklist |
- Python 3.10+
- Workshop (git submodule) + Tortoise
- Ollama, LM Studio, or another OpenAI-compatible endpoint
See QUICKSTART.md for full desktop setup steps.
Workshop config stays at ~/.workshop/config.json (endpoint, model, optional API key). Built apps default to ~/workshop-apps/. Lamp adds auth tables in the same SQLite DB: ~/.workshop/workshop.db.
| Phase | Status |
|---|---|
| 1 Auth + hub | Done — PIN login, sessions, build, apps |
| 2 Chat | Done — conversations, SSE streaming, build handoff |
| 3 PWA notifications | Done — #/notifications, SW polling, nav badge |
| 4 Admin | Done — users, models, storage, system (#/admin) |
| 5 Templates | Done — 10 templates on home, one-tap build |
| 6 Pi first-boot | Done — see setup/README.md |
Read PI-REQUIREMENTS.md (RAM, storage, recommended models, headless use from phones/PCs), then provision with setup/README.md:
sudo ./setup/first-boot.sh
# Join Lamp-Setup → captive portal → http://lamp.local:7700 (no monitor on the Pi after this)Before testing, use TESTING.md for a full checklist.
- Child accounts — chat + open apps only; build/templates/admin hidden (server-enforced)
- Branding — logo on login/setup, SVG favicon,
assets/lamp-logo.svg,scripts/generate-pwa-icons.py - Chat — adaptive desktop/mobile layout; star, rename, delete; pull-to-refresh
- Per-chat model — switch Ollama/LM Studio mid-conversation; history resumes on the new model
- Home app chips with initials; shared apps labeled
- Font Awesome Free icons (self-hosted); onboarding tour; pull-to-refresh; notification swipe
- Apps Shared / My apps; per-app Clear data
- Light/dark theme; chat → build handoff; HF import; admin system stats
- Loading spinners on admin, home, apps, chat, login, and notifications while data loads
- Voice — Whisper dictation on the server (private, no cloud); browser text-to-speech for read-aloud
Chat can transcribe speech with OpenAI Whisper running on the same machine as Lamp (not a cloud API).
brew install ffmpeg # macOS
pip install openai-whisper # or: pip install -r requirements-voice.txtSet model size in ~/.workshop/config.json (default tiny for Pi; base or small on a Mac):
{ "whisper_model": "tiny" }In chat: tap the microphone to record, tap stop to transcribe into the message box. The speaker icon in the header toggles auto-read for replies (browser TTS). If Whisper is not installed, Lamp falls back to the browser’s built-in dictation where supported.
Check status: python3 lamp.py --status (Whisper / ffmpeg line) or Admin → System.
Pi device testing is tracked in local PI-RUNBOOK.md (gitignored) — run when hardware is ready.
Generate sharper PWA PNGs from the logo: python3 scripts/generate-pwa-icons.py (needs rsvg-convert or ImageMagick).
Mac smoke test (server running): ./scripts/smoke-test.sh
Lamp License — same terms as Tortoise and Workshop. Free to use and modify; you may not sell the software or offer paid support for the Lamp codebase itself.
UI icons use Font Awesome Free 6 (self-hosted under assets/fontawesome/; see assets/fontawesome/LICENSE.txt).