Skip to content

Overview ​

OpenFamHub turns a spare tablet — or a cheap thin client wired to a touchscreen — into a wall-mounted family command center: a shared color-coded calendar, chores with a real points-and-rewards economy, meal planning with a grocery list, a budget snapshot, and a family journal. It pulls from tools you probably already use (Todoist, Google/iCloud calendars via iCal, Mealie, Monarch Money) instead of asking your family to adopt a new app. No monthly fee, no cloud account, no vendor lock-in — your data lives on your own hardware.

OpenFamHub dashboard

Why it exists ​

Existing options were either a paid subscription (Skylight, DAKboard), tied to one ecosystem, or — like MagicMirror² — a passive display that can't do the application behavior a real family command center needs: per-person point balances, reward redemption that persists, tap-to-complete that writes back to the source of truth. OpenFamHub is a standalone app built around that gap.

How it fits together ​

The whole thing is a small, legible stack — worth understanding before you build it, because the rest of these docs follow it top to bottom:

PieceWhat it is
FrontendA lean Svelte SPA, designed portrait for a wall touchscreen, served as static files
BackendA small Express server (server/) that aggregates your data sources behind a versioned REST API
Provider registryEach data source (Todoist, iCal, Mealie, weather, budget, photos) sits behind a small registry, so swapping a backend is one new file, not a fork
Economy databaseSQLite on a named Docker volume — points, balances, and redemption history, the one genuinely stateful, irreplaceable piece
Companion PWA (/m)An installable phone app for checking/completing chores and writing journal entries — the one screen with actual typing, deliberately kept off the wall

Everything runs from one docker compose up -d. All credentials live server-side in .env; the browser never sees them.

Self-hosted, privacy-first ​

  • All credentials (Todoist token, Mealie token, calendar URLs) live server-side in .env — the browser never sees them.
  • Family members are configured in a single config/members.json you control — any number of people, any names.
  • Every screen falls back to bundled demo data when its source isn't configured, so the app is fully browsable out of the box before you wire up a single account.
  • The companion PWA is meant to be reached over your own network or a mesh VPN (e.g. Tailscale) — never exposed to the public internet.

The screens ​

All screenshots below are from the bundled example roster (config/members.example.json) — copy it to config/members.json and edit it to match your own family.

Home dashboard ​

Config-defined cards: month calendar, To Do, Grocery, and today's Meals, plus current weather.

Home dashboard

Routine · Chore ​

One card per family member — tap a task to complete it and award a point.

Routine and Chore board

When a member flagged as a kid ("kid": true) finishes a chore, they get a celebration — the avatar pops big, a confetti burst fountains up, the star count ticks, and a chime plays. Grown-ups just get the plain green check. Toggle it in Settings.

A kid completing a chore — avatar pop and confetti burst

Rewards ​

Redeeming a reward checks the member's balance, deducts the cost, and logs it — disabled automatically when the balance is too low.

Reward catalog

Budget ​

A true-net "safe to spend" hero number, category rows sorted by spend, and a This Month / Last Month / Year to Date switcher.

Budget screen

Journal ​

Family moments, tagged and optionally photographed, written from the phone — shown here in Feed view (newest first) and Timeline view (grouped by month, with date markers).

Journal, Feed viewJournal, Timeline view

Where to go next ​

The rest of the docs are ordered as the steps you'd take to build this yourself:

  1. Hardware — the thin client, touchscreen, and wall mount
  2. Install — clone it and bring up the stack with Docker
  3. First-time setup — your roster and integrations
  4. Networking — reach it safely from phones over Tailscale
  5. Integrations — wire up each data source
  6. Kiosk setup — turn the thin client into an always-on wall display

Built with Claude Code ​

This project's implementation was built with Claude Code — requirements, architecture decisions, and design direction were human-directed by @alitarraf; Claude Code did the implementation, refactoring, and testing.

Released under the MIT License.