Calendar, weather, meals, shopping, tasks, photos, and your smart home in a self-hosted dashboard built for the kitchen wall and every phone in the house.
Website · Live demo · Documentation · Community
Built for an always-on touchscreen. Works on phones, tablets, and desktop browsers too.
Kinboard needs Linux, Git, OpenSSL, and Docker with Compose v2. The installer downloads the current configuration, generates unique local secrets, walks you through the public URL and optional integrations, and starts the stable multi-architecture image:
curl -fsSL https://raw.githubusercontent.com/svenger87/kinboard/main/install.sh | bashThe default location is ./kinboard. Pass KINBOARD_DIR to choose another
path, or KINBOARD_URL for a headless install:
curl -fsSL https://raw.githubusercontent.com/svenger87/kinboard/main/install.sh | KINBOARD_DIR="$HOME/kinboard" KINBOARD_URL=http://192.168.1.50:8100 bashOpen the URL printed at the end and create your family. The first device receives a six-character join code for the other phones, tablets, and wall displays. Optional services are configured later in Settings → Integrations.
The installer will never modify an existing kinboard directory. Existing
installations keep their .env, secrets, data, compose overlays, and current
upgrade path.
From its checkout:
git pull --ff-only
./setup.sh --non-interactive
cd webapp/docker
./start.sh upThat is the image-based path used by the one-line installer. If your existing
installation intentionally builds a modified webapp from source, keep using
COMPOSE_FILES="-f docker-compose.yml" ./start.sh restart; the installer does
not change that checkout or its configuration.
Trying 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 shared dashboard for calendars, weather, meals, tasks, notes, birthdays, school schedules, shopping, and photos.
- Real-time updates across the wall display and every family device, with an offline-capable shopping list for poor mobile coverage.
- Optional Home Assistant, Google Calendar, CalDAV, Immich, DLNA, iCloud, OpenWeatherMap, Bring!, and camera integrations.
- Local data in a bundled Supabase stack, with backups and no hosted account or telemetry.
- Touch-first layouts, installable PWAs, English, German, and French.
Explore every feature in the wiki.
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.
Claude and ChatGPT can read the family's calendar, tasks, notes, meal plan
and shopping list, add to and edit them, find recipes, set timers, keep
birthdays, read the timetable and the energy sensors, ask to book pocket
money, and control devices in a
Home Assistant catalogue the family sets up — anything beyond the plainly
harmless waits for a family member to confirm it on a Kinboard screen or
phone — through Kinboard's built-in MCP endpoint. Add
https://<your-kinboard>/api/mcp as a custom connector — after switching on
Allow AI assistants under Settings → Integrations — and approve the
request Kinboard shows you. See AI assistants.
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 · Messages · Timers · Media players · 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
Kinboard is actively developed by one maintainer. See the
release history for shipped
versions and CHANGELOG.md for the next release. The
live demo follows the release channel and resets
its sample data hourly.
Kinboard is designed for a trusted home network. Use a reverse proxy with
authentication before exposing it to the internet. Read the
security model
and SECURITY.md before a public deployment.
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.
Kinboard is free for your family and for any other noncommercial use — run it, change it, share it. It is licensed under the PolyForm Noncommercial License 1.0.0.
Commercial use needs a separate license. That covers selling Kinboard, selling devices with it installed, offering it as a hosted service, or building it into a paid product. Ask in GitHub Discussions.
Releases up to and including v1.12.1-rc.3 were published under the MIT License
and stay under it; see NOTICE.
The name Kinboard and its logos are not covered by either license. If you
publish a modified version, give it a name of its own. See
TRADEMARK.md for what is fine and what needs asking.












