A self-hosted family dashboard for the kitchen wall. Calendar · weather · photos · shopping list · smart-home — one screen, every device, real-time sync.
The landing page at kinboard.app has the pitch, screenshots, and install path. The demo at demo.kinboard.app runs the latest tagged release with mock integrations — use join code DEMO01 to load a populated household, or create your own family from scratch. Demo data resets hourly.
Built for kiosk-style touchscreens but works on any phone, tablet, or browser. Multi-device, multi-person, no cloud account required.
- Why
- Features
- Quick start
- Screenshots
- Integrations
- Tech stack
- Reference hardware build
- Documentation
- Status & roadmap
- Contributing
- Support development
- Acknowledgements
- License
Family logistics are scattered across calendars, chat threads, sticky notes, and "did you check the shopping list?" Kinboard consolidates the daily-driver stuff into one always-on display, so the family knows what's happening without opening apps.
- Self-hosted. Your data stays on your hardware. No SaaS, no telemetry, no account gating.
- Real-time. Edit a shopping item on your phone, it appears on the kitchen wall in milliseconds (Supabase Realtime over WebSockets).
- Offline-tolerant. The shopping list works in the basement supermarket without signal — changes queue locally and replay when the device gets connectivity back.
- Touch-friendly. Designed for wall-mounted tablets first; mobile and desktop are first-class too.
- Modular. Pick the integrations you actually use; the rest stay invisible.
| Feature | Wiki page |
|---|---|
| Dashboard — clock, today strip, configurable widget grid | Dashboard |
Calendar — two-way sync with Google Calendar and any CalDAV server, read-only .ics feeds, per-person colors, holidays, waste-pickup widgets |
Calendar · CalDAV |
| Shopping list — built-in real-time list with offline support, editable from any phone, + dedicated standalone PWA, optional Bring! sync | Shopping |
| Recipes & meal planning — Chefkoch.de search + schema.org URL import, weekly meal board, recipe-driven shopping | Recipes & meals |
| Tasks & todos — per-person assignment, priorities, daily reminder push | Tasks & todos |
| Notes — quick shared sticky notes for the household | Notes |
| Birthdays — year-ring viz, countdowns, gift-idea tracking | Birthdays |
| School schedule — per-child timetable + auto pack list for tomorrow | Schedule |
| Smart home — Home Assistant entities, room tabs, floating-lights master control | Smart home |
| Energy dashboard — solar / battery / grid live flow + charts | Smart home → Energy |
| Cameras — live WebRTC streams (via go2rtc) | Cameras |
| Pocket money — per-kid virtual accounts with parent-configurable APR, allowance cron, saving goals + parent-approval queue, evolving avatar (5 species × 8 stages) | Pocket Money |
| Photos — album grid, full-screen viewer and a dashboard widget; sources: Immich, a DLNA server on your NAS, or an iCloud Shared Album — no account needed for the last two | Photos |
| Photo screensaver — the same library as the Photos page (Immich monthly album, DLNA, iCloud) or Unsplash as a no-setup fallback, presence-aware blanking | Screensaver |
| Weather — current + hourly + radar (OpenWeatherMap) | OpenWeatherMap |
| Web push notifications — shopping items, task assignments, daily todo digest. PWA install required on iOS. | Notifications |
| Multi-device + multi-person — devices join a family with a 6-char code, per-person color coding everywhere | People & devices |
| Recycle bin — deleted items are recoverable for a configurable window, because a wall display is touched by everyone in the house | Recycle bin |
| Monthly themes — colors shift through the year automatically | Themes & locales |
| i18n — English, German, French — partial translations welcome | Themes & locales |
The full wiki has a page for every feature plus integration setup, kiosk hardware reference build, security model, and database schema.
You need Docker (with Compose v2), Node.js 20+ (for the VAPID key generator that powers push notifications — setup.sh uses npx; if Node.js is missing, setup completes but push notifications stay disabled), ~2 GB free disk, and ~10 minutes. The bundled docker-compose.yml brings up the Next.js app, a self-hosted Supabase stack, and supporting services.
RAM: the local Next.js build peaks around ~4 GB during type-check and static-page generation. On a 4 GB VM you'll need ≥ 8 GB total swap to avoid OOM kills during build (
fallocate -l 8G /swapfile && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile). Or — recommended — skip the build entirely by using the pre-built image atdocker-compose.image.yml. That drops bring-up to ~30 sec and needs only ~512 MB at runtime.
If you don't have Docker yet:
curl -fsSL https://get.docker.com | shThen bring Kinboard up:
git clone https://github.com/svenger87/kinboard.git
cd kinboard
./setup.sh # generate random secrets + Supabase JWT keys
cd webapp/docker
./start.sh up # docker compose up -dOpen http://<server-ip>:3001 (or http://localhost:3001 if local), follow the setup wizard to create your first family, and start adding integrations from /settings.
Push notifications require Node.js for VAPID key generation. If
nodeisn't on PATH whensetup.shruns, push stays disabled (everything else works); install Node.js + re-run./setup.sh --forcelater to enable.
Skip the local build by using the pre-built multi-arch image (amd64 + arm64) at
ghcr.io/svenger87/kinboard:latest. Drops bring-up to ~30 sec and ~512 MB RAM at runtime instead of 4 GB+ during build. Seewebapp/docker/docker-compose.image.ymlfor the overlay.
./start.sh up reuses the cached image — fast for restarts but won't pick up new code. After pulling source updates, use:
git pull
cd webapp/docker
./start.sh restart # rebuilds the webapp image + recreates webapp + cronTrying a release candidate — set KINBOARD_TAG=next in webapp/docker/.env and bring the stack up again. That follows the pre-release channel; remove the line (or set latest) to go back to stable. Release candidates are announced on the Releases page and are where feedback is most useful. See Self-hosting → Pre-release channel.
Hands-off auto-update — an optional Diun + webhook overlay watches GHCR for new kinboard-webapp images and runs the full upgrade path (pull, migrate, restart) automatically when one lands. Replaces the deprecated Watchtower overlay. See Self-hosting → Auto-updates for setup.
For production self-hosting (Traefik + custom domain + backups + updates), see Self-hosting.
A few highlights from the demo data set. See the wiki for the per-feature pages.
These were captured before the 1.7.0 interface work (larger type and navigation for wall displays, opaque dialogs, themed device colours). They still show the app faithfully, but the current build looks a little different — the live demo is always the newest thing.
The wall display is the point, but you're not always in front of it. The whole app is responsive and installs as a PWA, so the shopping list you edit in the supermarket is on the kitchen wall before you get home, and push notifications reach you when you're out.
![]() Shopping list Add with your thumb, tick off in the aisle |
![]() Notifications Per device, so the wall stays quiet |
![]() Calendar Same data, laid out for a thumb |
![]() Dashboard The same board, pocket-sized |
![]() Shopping |
![]() Calendar |
![]() Home automation |
![]() Energy dashboard |
![]() Birthdays |
![]() Recipes |
![]() Meal planning |
![]() School schedule |
![]() Tasks & todos |
Every screenshot has a light-mode variant with a -light suffix, and the phone-viewport captures live in docs/wiki/images/mobile/. The full toolchain that produces them — local docker stack with anonymized prod data + mock HA / Tesla / OpenWeatherMap servers + Playwright capture — lives in docs/wiki/screenshots/.
| Service | Purpose | Required? |
|---|---|---|
| Supabase (self-hosted) | Database + realtime sync | Yes (bundled) |
| OpenWeatherMap | Weather forecasts + radar | Optional, free tier OK |
| Google Calendar | Two-way calendar sync | Optional |
| CalDAV (Nextcloud, Radicale, Fastmail, iCloud, …) | Two-way calendar sync without Google | Optional |
| Immich | Photos: screensaver, album viewer and dashboard widget | Optional |
| DLNA media server (MiniDLNA, Jellyfin, Plex, Synology, QNAP) | The same photos off a NAS you already run — no account, no API key | Optional |
| iCloud Shared Album | The same, from a public album link on an iPhone — no Apple ID | Optional |
| Unsplash | Curated stock photos for the screensaver when you have no library of your own | Optional, free tier OK |
| Home Assistant | Smart-home entities and energy — and, since 1.9.0, the other way round: Kinboard's calendar, lists and family state as Home Assistant entities | Optional |
| Bring! | Shopping list sync (built-in list works without it) | Optional |
| go2rtc | WebRTC camera streams | Optional |
Most dashboards read Home Assistant. Kinboard also feeds it — the family's day becomes entities you can automate on, in an installation that already runs your house.
Install from HACS as a custom repository (svenger87/kinboard-homeassistant), paste a token from Settings → Integrations, and you get:
| 20 entities | next appointment (with the person's name and start time), what's on today, whose birthday is next, which children have school tomorrow, what's for dinner, open and overdue tasks, pocket money per child, saving-goal progress, and the next bin collection |
| Two real to-do lists | shopping and tasks as todo entities — tick one in Home Assistant and it ticks in Kinboard, add one in Kinboard and it appears there. The To-do card, voice assistants and todo.* services all work with no glue |
| A calendar | calendar.kinboard_family_calendar, including events that merely overlap the day you're looking at |
| Services | add a shopping item, create a task, write a note, credit pocket money, dismiss a hint, force a refresh |
| Events | a task ticked, a shopping item added, an appointment created, a device joined, a saving goal reached, the day's context changing |
The events come from database triggers, not the API layer — so a task ticked on the kitchen tablet fires one exactly as an automation does. Delivery is resumable: a restart of either system loses nothing.
# The night before: tell everyone what tomorrow's lessons need.
- alias: "Pack the school bag"
triggers:
- trigger: time
at: "19:30:00"
conditions:
- condition: template
value_template: "{{ states('sensor.kinboard_school_tomorrow') not in ['unknown','unavailable',''] }}"
actions:
- action: notify.notify
data:
message: >-
{{ states('sensor.kinboard_school_tomorrow') }} has school tomorrow —
first lesson {{ state_attr('sensor.kinboard_school_tomorrow','first_lesson') }}.Eleven more, ready to paste, in
examples/ —
each one loaded into a real Home Assistant by CI on every run, with every
entity, service and event checked against the integration, so an example cannot
quietly rot.
Permissions are per-token and nothing is implied: a token that may add shopping items cannot create tasks, and a read-only token cannot write at all.
Niche integrations (Tesla Fleet, Zendure SolarFlow batteries, etc.) ship as opt-in plugins. See the Plugin development guide to write your own.
- Next.js 16 (App Router) + React 19
- shadcn/ui + Tailwind CSS for UI
- TanStack Query (server state) + Zustand (client state)
- Supabase (Postgres + Realtime) — self-hosted
- next-intl for i18n (EN/DE/FR)
- Framer Motion for transitions
- Service worker + IndexedDB for offline shopping
- Playwright for the screenshot capture suite
Kinboard is hardware-agnostic — any HDMI display + any small PC works. For people who want a known-good combination, Reference build documents one ~€700 setup with a 27" capacitive touchscreen + a Mele Quieter 4C mini-PC + a custom oak frame, with a complete BOM, wiring, and what didn't work.
For software side of the kiosk install: Windows 11 (Mele 4C) walks through Edge --kiosk mode + the on-screen keyboard, and Linux guidance covers Cage / GNOME / X11 alternatives.
The wiki is the source of truth for everything beyond this README:
- Getting started — Quick-start, Self-hosting
- Architecture — Architecture overview, Security model
- Built-in features — Dashboard · Calendar · Shopping · Recipes & meals · Tasks · Notes · Birthdays · Schedule · Smart home · Screensaver · People & devices · Notifications · Themes & locales
- Integrations — Google Calendar · CalDAV · Home Assistant · Immich · Bring! · OpenWeatherMap · Cameras
- Hardware — Reference build (BOM + frame) · Windows kiosk · Linux guidance · LD2410 presence sensor
- Extending Kinboard — Vehicles · Stonks · Pocket Money · Plugin development · Plugin directory
- Troubleshooting — known issues + fixes
v1.0.0 shipped 2026-05-04 — first tagged public release. Latest stable: v1.6.10 (2026-08-06). Live demo running the latest tag at demo.kinboard.app (auto-updated via Diun + the self-update webhook; data resets hourly). The project is single-maintainer and developed in personal time; expect periodic activity rather than a Big Co cadence. See the CHANGELOG for what's in each release and the RELEASE doc for how releases are cut.
Security model: designed for a trusted home network. Do not expose Kinboard directly to the public internet without putting a reverse proxy and authentication layer in front of it. See Security & threat model and SECURITY.md.
- Settings lock, demo completeness, theme-aware sensors (v1.7.0) — the settings PIN could be bypassed while it was still loading and the prompt could vanish mid-entry; both are closed. Pocket-money settings save again, the getting-started checklist no longer takes over a wall display, and pale sensor and forecast colours are readable in every theme
- Custom RSS feeds, pocket-money corrections, safer image search (v1.6.0) — News sources accepts any RSS or Atom feed alongside the built-in publishers; pocket-money goals can finally be renamed, re-targeted and deleted; the saving avatar reflects the current balance rather than lifetime earnings, and daily interest stopped discarding its sub-cent remainder; shopping-list image search moved off scraped search pages that could return unrelated or adult results
- Restore from backup, meal-plan digest, notification fixes (v1.5.0) — the join screen can rebuild a whole family from a Kinboard export file; an optional evening push lists tomorrow's planned meals; settings writes now go through the app server instead of straight from the browser to the database; Undo works on the shopping kiosk, offline included
- Security hardening, backup & export, undo (v1.4.0) — integration credentials and the settings PIN moved to server-only storage; Settings → Data & backup can export everything to JSON or publish a secret ICS feed of your calendar; deleted items get an Undo toast; birthday reminders now actually send a push; the webapp container reports health for automated monitoring
- Redesign completion, French, join-code expiry (v1.3.0) — the flat sage-linen visual refresh reaches nearly every page; Kinboard ships a French interface alongside English and German (community-contributed, #9); Settings can rotate the family join code and set it to expire
- Onboarding completeness + setup hardening (v1.2.0) — a persistent getting-started checklist replaces the one-time setup banner, "discover" cards explain empty plugin widgets, Reconnect banners surface rejected Google/Home Assistant credentials, and the stack self-aligns service passwords so a bare
docker compose upworks out of the box - Pocket Money plugin, end-to-end auto-update, and nav drag-reorder (v1.1.0) — per-kid virtual pocket-money accounts with parent-configurable interest and savings goals, a Diun + webhook overlay that pulls and applies new images automatically, and drag-and-drop reordering of the bottom navigation per device. See Pocket Money
- Additional Stonks data drivers — paid sources like Polygon or Tiingo for users wanting higher-resolution intraday + cleaner symbol coverage than Yahoo's unofficial endpoints. The driver contract already leaves room; only API-key plumbing and a settings UI need to land
- News feed per ticker on the Stonks detail page — Yahoo already returns it via
quoteSummary, just needs UI - Per-ticker price alerts via the existing notification queue
- Drag-reorder for the Stonks watchlist (currently creation-order)
- More community locales (FR shipped in v1.3.0) — additional languages welcome via PR, see
CONTRIBUTING.md
Bug reports, feature requests, translations, and code PRs all welcome. The full guide lives in CONTRIBUTING.md — it covers dev setup, code conventions, the changelog discipline, and the Conventional Commits format. For where to take questions vs. issues vs. discussions, see SUPPORT.md.
Quick orientation:
- Bugs — open an issue with logs + the route that broke
- Features — open a GitHub Discussion before a substantial PR
- Translations —
webapp/messages/*.jsonis the source of truth; PRs adding new locales (FR, ES, IT, NL…) gladly accepted - Plugins — the plugin system isn't carved in stone yet; open a discussion to help shape it
- Security — see
SECURITY.md— please don't file public issues for credential / data-access vulnerabilities
CI runs ESLint + i18n bundle parity + shellcheck on every PR. The codebase deliberately doesn't run next build in CI to keep the dev-server experience predictable; production builds happen in the Docker image workflow.
Kinboard is built and maintained on personal time. If it's useful to your family and you'd like to keep it healthy:
- GitHub Sponsors (recurring) → github.com/sponsors/svenger87
- Buy Me a Coffee (one-time tip) → buymeacoffee.com/sven.7687
- Star the repo — helps others find it
- Contribute — bug reports, plugins, translations all welcome
- Re-run screenshots — the capture suite is in
docs/wiki/screenshots/and runs end-to-end against an anonymized demo
Kinboard stands on the shoulders of an incredible amount of open-source work:
- Supabase — the entire self-hosted backend stack (Postgres, Realtime, GoTrue, PostgREST, Storage)
- Next.js + Vercel — the application framework
- shadcn/ui — the component primitives. UI quality starts here.
- Lucide — every icon in the app
- Framer Motion — the smooth, deliberate transitions
- next-intl — i18n done right for App Router
- Home Assistant — the smart-home backbone Kinboard talks to
- Immich — the photo backend that powers the screensaver
- Bring! — the shopping list app some of us still want on a phone
- go2rtc — the camera streaming bridge
- OpenWeatherMap — weather data
- Chefkoch.de — recipe search source
- Faker — anonymized demo data for the screenshot toolchain
- Playwright — automated screenshot capture
For the specific kiosk hardware combination (display + mini-PC + frame), see Reference build.
MIT — see LICENSE.












