The bedrock of your digital home.
StonePi is a private hub for your home on one Raspberry Pi. It brings you the news you want on your e-reader, shows what's on locally and in sport, finds supermarket deals, watches prices, plays internet radio around the house, keeps Wikipedia offline, hosts your household's files and small sites, keeps family far away up to date on a screen in their home, and pushes useful updates to your phone, a wall display, a desk panel or a little voice sidekick you can talk to. Everything sits behind one shared sign-in, on your own network, set up once and left running.
Set up a Pi: stonepi-install.vercel.app — one command on stock Raspberry Pi OS (64-bit) for a Raspberry Pi 4 or 5.
Sign-in, Home and Health; Services, Users and Settings. Every page works on a phone, in light or dark.
Home tiles. Each app has its own README with setup details.
| App | Path | What it does |
|---|---|---|
| NewsCast | /news/ |
A daily paper from feeds you choose, for phone or e-reader (OPDS for CrossPoint and KOReader). Optional AI summaries and translation. |
| EventTrakr | /events/ |
What's on near you: a map of the week and a 7-day agenda from websites, ICS feeds, Facebook events and Instagram accounts (an event listed by several sources shows once); favourites; webcal and Google Calendar; an optional public agenda. |
| SportGuide | /sports/ |
Sports TV and stream schedules (AFL, cricket, rugby, football) for the teams you follow, with kick-off alerts. |
| PriceScout | /prices/ |
This week's supermarket offers across Danish chains, a shopping list, and Salling food-waste deals for the household postcode. |
| PriceWatch | /watch/ |
Watch named products on PriceRunner until they hit your price; Compare every retailer's offer, with Trustpilot trust scores. |
| Library | /library/ |
Wikipedia, Wikivoyage, Gutenberg and other references offline through Kiwix, on microSD, USB or SSD; the reader is behind sign-in. |
| FileServe | /files/ |
Put HTML, PDF, Word or zip sites on a household URL, with keep-until and passwords. Hosted pages load sandboxed. |
| Studio | /studio/ |
Chat-build a simple site, guide or game and publish it to FileServe. |
| Pinboard | /pinboard/ |
The household's board: notes, links, reminders and checklists, in a list or laid out freely on a canvas; add links from any page or the share sheet; pinned cards show on the displays. |
| Ripple | /ripple/ |
Keep family far away up to date: post news and photos (location details removed), and the newest appear on a TRMNL e-ink screen at their home, up to four recent photos together, with an optional line for your city, part of the day, time difference and weather, and notes for upcoming public holidays (both countries) and whether it's a good time to call. |
| Radio | /radio/ |
Internet radio on your phone or computer, a speaker on the home network (DLNA) or the Pi itself (Odio, set up by the installer, which also makes the Pi an AirPlay and Spotify Connect speaker): the household's Home stations, your own favourites, Discover, and the song on air. On the Car Thing in real Winamp, AMP BOY, RealPlayer and TouchAmp skins. |
Always on; not Home tiles.
| Part | Path | Role |
|---|---|---|
| Dashboard | / |
Home launcher (your app order carries to the app switcher, Health and Services), Health (host and apps, updates live), Services (enable, start, stop, restart, logs), Users, and admin Settings: General, Network, Vault, AI, Automations, Updates, Backup, About. |
| Auth | /auth/ |
One household sign-in across every app. |
| Notify | /notify/ |
Where apps' updates go: TRMNL wall displays, the Car Thing panel, and ntfy phone alerts. Also shows web pages the Pi can reach (a Homepage dashboard, say) on either display, and Sidekick, where Pebbles are paired and managed. |
| AgentLink | (Pebble API /agent/pebble/v1/) |
The one way in for agents and agent devices such as Pebble: each device is bound to one person, uses only the tools switched on for it, and every use is logged (never what was said). Speech is turned into text and back on the Pi. Managed in Notify → Sidekick. Ships with the platform. |
| Car Thing | (USB) | A Spotify Car Thing plugged into the Pi becomes a touch-and-dial panel: pages of widgets (System, Clock, Clock & weather, Weather, Music, Radio, an Audio launcher, sport, events, news, Pinboard, a web page with a ↻ to capture it again) under a header that can stay, auto-hide or go, a Spotify remote (Now Playing with artwork-coloured backgrounds, seek and a liked tick; Speakers, presets, dial volume), a Radio player in real Winamp-era skins (each player can wear the other's look) and a weather screen, a screensaver when idle (clock, album artwork, a web page, Bouncing logo, Matrix, or the Windows 98 3D Pipes, Flying Through Space, Mystify Your Mind, 3D Flower Box and 3D Maze), and a System screen with each service's state, memory and last log lines, and restarts behind an admin PIN. Set up under Notify → Displays → Car Thing. Ships with the platform. |
| Recover | /recover/, :8099 |
Recovery Console for when the portal itself is down: restart services, restore a backup. |
| Cockpit | :9090 |
Web console for the Raspberry Pi's operating system, separate from StonePi: system updates, storage, networking, logs and a terminal in the browser. Installed by the installer; sign in with your Pi's Linux user, not your StonePi account. |
Displays and alerts. Apps own their data and only emit when something useful happens; Notify decides where it goes.
- TRMNL (e-ink, for a wall or fridge): one Display per screen, laid out in a drag-and-drop builder over a real render of the device, pushed on a timer. A Web page Display instead shows a captured web page, converted for e-ink. A Ripple family board Display shows Ripple's posts on a TRMNL at family elsewhere: name, model and webhook, and the rest is set up for you (from Ripple → Settings → Family display).
- Car Thing (touch and dial, for a desk or dash): saved configs with pages, widget sizes, page header, button and dial actions, clock faces, screensaver styles, the Now Playing look and Spotify music presets, edited beside a live preview. Device, Spotify sign-in and saved configs are on its Setup page. The device keeps its own firmware and gets its screen back when the panel is switched off.
- Pebble (a cute little voice sidekick for StonePi): push to talk (or use a wake word) and ask about StonePi, the weather, today's events, reminders and notices, the news, sport on TV or your price watches, and it answers out loud; its face shows the house's mood. Each Pebble belongs to one person and only uses the apps switched on for it in Notify → Sidekick; it can work away from home over Tailscale Funnel, switched on per Pebble.
- ntfy (phone): paper ready, a PriceWatch strike, an event or kick-off you follow, a backup that needs attention, a Spotify sign-in about to run out.
- Web pages (Notify → Displays → Web pages): any page the Pi can reach, captured with the shared headless Chromium, with a clean-up preset, parts to hide, extra CSS and zoom. Shown on a TRMNL Web page Display, or on the Car Thing as a full-page widget or a screensaver.
Admins add people under Users, choose which apps each person can open, and what they may do inside each app. Admins can do everything. A permission takes the default below until an admin changes it for that person; revoking one also stops that person's background jobs (scheduled scrapes, alerts) within five minutes.
| App | Permission | Default for members |
|---|---|---|
| (all apps) | Phone alerts: personal ntfy alerts set up from the bell | off |
| NewsCast | Add custom feeds · View status | off · off |
| EventTrakr | Manage sources · Instagram & Facebook (paid lookups) · Share agenda publicly · Google Calendar sync | on · off · on · on |
| PriceScout | Manage sources (stores, refresh) | off |
| PriceWatch | Manage watches · Manage sources · Strike alerts | on · off · on |
| SportGuide | Refresh schedules | off |
| Library | Manage content (install, update, remove) | off |
| FileServe | Publish pages · Publish without a password | on · off |
| Studio | Use LLM · Publish to FileServe | off · off |
| Pinboard | Add and pin cards · Assign reminders to others | on · on |
| Ripple | (none: anyone with Ripple posts; authors change their own posts, admins any post and the family display) | — |
| Radio | (none: anyone with Radio plays and keeps their own favourites; admins look after the Home stations) | — |
Defaults that are off cover shared or costly actions: refresh scrapes, multi-gigabyte downloads, paid lookups, AI spend and publishing open pages. Household-wide settings (NewsCast's paper layout and filters, Library storage and backups, PriceWatch retention and lookups, the PriceScout postcode, the Bright Data limit) are admin-only.
StonePi needs only the Pi and a phone or laptop. Add what fits your household; keys go in Dashboard → Settings → Vault.
| Want… | Get… | Where |
|---|---|---|
| The paper on an e-reader | Xteink X3 / X4 with CrossPoint, or a Kobo with KOReader | NewsCast → Reader (setup) |
| A wall or fridge display | TRMNL | Notify → Displays: one Private Plugin per screen, webhook in Vault; a Web page Display uses a Webhook Image plugin instead |
| A voice sidekick | Pebble: a Waveshare ESP32-S3-Touch-AMOLED-1.75C running the Pebble firmware; a 64-bit Raspberry Pi OS for speech | Notify → Sidekick (add with the code it shows); speech engines: Sidekick → Set up speech (or sudo stonepi-speech-setup); the model that answers: Dashboard → Settings → AI → Spoken replies |
| A screen for family far away | A TRMNL at their home with a Webhook Image plugin | Ripple → Settings → Family display → Set up the family display |
| A desk or dash control panel | Spotify Car Thing with ADB-enabled firmware, on USB | Notify → Displays → Car Thing |
| Spotify control on the Car Thing | Spotify Premium and your own (free) Spotify developer app | Notify → Displays → Car Thing → Setup → Music: paste the client ID and connect (SPOTIFY_CLIENT_ID, SPOTIFY_REFRESH_TOKEN are saved in the Vault for you). The sign-in lasts 6 months; Notify warns 14 days before it runs out |
| Phone alerts | ntfy topic (hosted or self-hosted) | Notify → Phone alerts (STONEPI_NTFY_TOKEN) |
| AI for Studio and Pebble, and optionally NewsCast | A Gemini (free tier OK), Anthropic or OpenAI key, or a local Ollama server | Keys in Dashboard → Settings → Vault (GEMINI_API_KEY, ANTHROPIC_API_KEY, OPENAI_API_KEY); models and their order in Dashboard → Settings → AI (Pebble's is Spoken replies). NewsCast works without AI and only uses it once switched on in its Settings → AI |
| Facebook events and Instagram in EventTrakr | Bright Data | BRIGHTDATA_API_KEY |
| Retailer trust scores in PriceWatch | Bright Data (Trustpilot) | PRICEWATCH_BRIGHTDATA_API_KEY |
| Favourites in Google Calendar | A Google Cloud OAuth client | EventTrakr → Settings → Calendar Integrations (GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET) |
| Supermarket food-waste deals | Salling Group API token | PriceScout |
| Remote access | Tailscale (installed by the installer) | Settings → Network; for https://<name>.ts.net/, turn on HTTPS Certificates in the Tailscale admin console, then Turn on HTTPS |
Every app's Bright Data use counts against one shared monthly limit (default 5,000 records), set by an admin in EventTrakr or PriceWatch.
- Flash Raspberry Pi OS Lite (64-bit) with Raspberry Pi Imager for a Pi 4 or 5: hostname
stonepi, SSH on, your user and password (and Wi-Fi if needed). - SSH in and run the installer:
ssh YOURUSER@stonepi.local
curl -fsSL https://stonepi-install.vercel.app/install.sh | sudo bash - Open http://stonepi.local/ (or
http://<pi-ip>/) and sign in as admin with the random password printed at the end, then change it. To see it again:sudo cat /etc/stonepi/initial-admin.txt. The Recovery Console's own password (userstonepi) is printed there too:sudo cut -d: -f2- /etc/stonepi/recover.passwd.
The installer also sets up Odio, the player behind Radio (about 15 minutes more the first time; --no-odio skips it). It checks the release's checksum, ends with a ready check, and is safe to re-run: an interrupted install picks up where it stopped, and existing data and settings are kept. Everything comes back after a reboot.
Something broken on an existing Pi? stonepi-install.vercel.app/recover. Full guide and troubleshooting: deploy/INSTALL.md.
From a local copy (development or offline): copy this folder onto the SD card's boot partition (scripts\copy-to-sd.bat E:\ skips .venv, data and .git), then on the Pi run sudo bash /boot/firmware/stonePi/deploy/install.sh --hostname stonepi.
- Addresses: every path above works on
http://stonepi.local/, the Pi's LAN IP, or a router name such ashttp://stonepi.home/(use that when.localis unreliable). - Security: a fresh install trusts the home network. Switch to Internet-facing under Settings → Network before exposing it beyond your LAN. Checklist: deploy/SECURITY.md.
- Backup: plug in a USB stick labelled STONEPI-BACKUP and backup starts automatically, or schedule local backups under Settings → Backup. Restore: deploy/backup/RESTORE.md.
- Updates: Settings → Updates lists the platform and every app. App updates are checked against the release's
SHA256SUMS, installed by a root helper, and rolled back if the app doesn't come back healthy. Platform updates re-run the installer:curl -fsSL https://stonepi-install.vercel.app/install.sh | sudo bash -s -- --reinstall. - On the Pi:
stonepi status,stonepi restart,stonepi logs,stonepi urls.
On Windows, scripts\run-dev.bat creates per-app virtualenvs and starts everything on 127.0.0.1 with shared sign-in:
| Port | App | Notes | |
|---|---|---|---|
| System | 8010 | Dashboard | |
| 8011 | Auth | ||
| 8012 | Notify | Car Thing editor at /notify/displays/carthing |
|
| 8013 | Car Thing panel | Preview; with adb on PATH it also drives a plugged-in Car Thing |
|
| 8015 | AgentLink | Listens on all interfaces with faked speech, so a Pebble on the LAN can pair with the PC | |
| Home apps | 8001 | NewsCast | |
| 8002 | FileServe | ||
| 8003 | EventTrakr | ||
| 8004 | Pinboard | ||
| 8005 | Studio | ||
| 8006 | PriceScout | ||
| 8007 | SportGuide | ||
| 8008 | PriceWatch | ||
| 8009 | Library | No Kiwix on Windows | |
| 8016 | Radio | Playback is simulated (RADIO_MOCK=1); no Odio on Windows |
|
| 8017 | Ripple | The family display page is /display |
Recover (:8099 on the Pi) isn't started in dev.
Each app and package has a tests/ folder (python -m pytest -q with the packages/* folders on PYTHONPATH). Releases: build with python scripts/build_release_zips.py --all and follow deploy/RELEASE.md; versions and notes are in CHANGELOG.md. System apps, the Car Thing and AgentLink share the platform version; Home apps have their own.
apps/ dashboard, auth, notify, recover, carthing, agentlink (platform)
newscast, eventtrakr, sportguide, pricescout, pricewatch,
library, fileserve, studio, pinboard, ripple, radio (Home apps)
packages/ stonepi_auth sign-in, app catalog and permissions, Auth roster, platform lock
stonepi_vault encrypted secrets, shared Bright Data and AI request limits
stonepi_display display widgets, Car Thing config, Spotify sign-in, web page captures,
e-ink greys, weather labels
stonepi_browser shared headless Chromium (lock, page capture)
stonepi_ai platform AI: providers, model tiers, fallback, shared health
stonepi_notify Notify routing and delivery
stonepi_contracts event, widget and agent-tool contracts
stonepi_audit audit log (AgentLink: who used what, never what was said)
stonepi_update app updates
stonepi_brand design system: tokens, fonts, logos, app icons
stonepi_automations, stonepi_watch
deploy/ install.sh, systemd units, nginx, firewall, backup, helpers,
INSTALL.md, SECURITY.md, RELEASE.md
scripts/ run-dev, build_release_zips.py, copy-to-sd, migrations
docs/ screenshots
Responsive contract and QA viewports: deploy/responsive-audit.md.





