A self-hosted family dashboard for the kitchen wall. Calendar · weather · photos · shopping list · smart-home — one screen, every device, real-time sync.
Use join code DEMO01 to load a populated household, or create your own family from scratch. Demo data resets daily — bring your own ideas; don't bring your real shopping list.
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 Google Calendar sync, per-person colors, holidays, waste-pickup widgets | Calendar |
| Shopping list — built-in real-time list with offline support + 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 |
| Photo screensaver — Immich monthly album or Unsplash 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 | Family members, Devices |
| Monthly themes — colors shift through the year automatically | Themes & locales |
| i18n — English + German, full UI parity | 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, plus another ~3-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 + cronFor 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.
![]() Calendar |
![]() Energy dashboard |
![]() Home automation |
![]() Shopping |
![]() Birthdays |
![]() Recipes |
![]() Meal planning |
![]() School schedule |
![]() Tasks & todos |
A light-mode variant of every screenshot is available with -light suffix (e.g. dashboard-portrait-light.png), and a phone-viewport variant lives 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 |
| Immich | Photo screensaver and gallery | Optional |
| Home Assistant | Smart-home entities and energy | Optional |
| Bring! | Shopping list sync (built-in list works without it) | Optional |
| go2rtc | WebRTC camera streams | Optional |
Niche integrations (Tesla Fleet, Zendure SolarFlow batteries, etc.) ship as opt-in plugins. A plugin authoring guide is in the works.
- Next.js 14 (App Router) + React 18
- shadcn/ui + Tailwind CSS for UI
- TanStack Query (server state) + Zustand (client state)
- Supabase (Postgres + Realtime) — self-hosted
- next-intl for i18n (EN + DE)
- 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, Onboarding
- Architecture — Architecture overview, Database schema, Security model
- Built-in features — Dashboard · Calendar · Shopping · Recipes & meals · Tasks · Notes · Birthdays · Schedule · Smart home · Screensaver · Family members · Devices · Notifications · Themes & locales
- Integrations — Google Calendar · Home Assistant · Immich · Bring! · OpenWeatherMap · Cameras
- Hardware — Reference build (BOM + frame) · Windows kiosk · Linux guidance · LD2410 presence sensor
- Troubleshooting — known issues + fixes
v1.0.0 shipped 2026-05-04 — first tagged public release. Latest: v1.0.6 (2026-05-07). Live demo running the latest tag at demo.kinboard.app (auto-updated via Watchtower; data resets daily). 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.
- Pre-built multi-arch (amd64 + arm64) Docker images on
ghcr.ioso self-hosters skip the build step - CI on PRs (ESLint + i18n bundle parity + shellcheck)
- First tagged release (v1.0.0)
- End-to-end test suite running the full Docker stack against Playwright
- Plugin system + extracted Tesla / Zendure plugins (currently Tesla and the energy dashboard live in core)
- Country-aware holiday support (currently DE only)
- Calendar event reminders via web push
- iCalendar (.ics) feed support beyond Google Calendar
- Additional locales beyond EN + DE (community PRs welcome — 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.








