Skip to content

Latest commit

 

History

75 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

HomeHQ

A self-hosted family calendar for a wall-mounted display. Google Calendar in, a dense dark-theme dashboard out, running on a Raspberry Pi in the kitchen.

CI License: MIT Node 24 Next.js 16

The HomeHQ dashboard: two weeks of colour-coded family events under a clock and weather bar

Why

We ran Dakboard on the kitchen wall for years. It's fine, but on a busy school week it crops half the day behind "+6 more" and there's no way to get them back. HomeHQ started as "fit more events on the screen" and grew into the calendar we actually wanted: one that reads from across the room, that the kids can glance at, and that a parent can add a dentist appointment to without pulling out a phone.

It's built for one household on one Google account, and that's the whole scope. There's no multi-tenant anything and no widget system.

What it does

  • Two weeks at a glance, full width, with all-day events as spanning bars and timed events stacked beneath. The grid measures every event's real height and packs each day with as many as fit.
  • Expand next week when you need the detail, and it snaps back on its own.
  • Month view for scrubbing ahead (a school email listing fall-break dates, seven months out), with a day popover, keyboard paging, and the same auto-revert.
  • Add, edit, and delete events from the wall, straight into Google Calendar. This is opt-in; the default is a read-only display.
  • One event on two people's calendars shows as a single two-colour chip, whether HomeHQ created it, Google linked it as an invite, or someone typed it in twice.
  • Per-person filter from the legend. Click a name to see just their week.
  • Clock and weather in a slim top bar. Weather from Open-Meteo, no API key needed.
  • Made for an always-on screen. Every transient state reverts after idle. Cached data stays up through any outage. A deploy refreshes the kiosk by itself.
  • Renders on a bare Raspberry Pi. Self-hosted emoji font and SVG weather icons, because a stock Pi image has neither.

Auth is a single six-digit PIN for the household, behind a signed cookie that renews itself so the kiosk never logs out.

Screenshots

Month view. A sit-down view for looking further ahead; it goes back to the week grid on its own.

Month view: a six-row August grid with colour-coded chips and "N more" overflow buttons

Editing a shared event. One event on two calendars, with the calendar picker open.

The edit-event modal over the week grid, with the calendar picker dropdown showing two calendars ticked

A full day in month view. "N more" opens the whole list without leaving the grid.

Month view with a day popover listing every event on a busy day

How it works

Next.js 16 with a SQLite cache in the middle. Two background jobs pull from Google Calendar (every 5 min) and Open-Meteo (every 30 min) into data/homehq.db; the dashboard polls API routes that read from that cache. The browser never talks to Google, credentials never leave the server, and a Google outage just means the wall keeps showing what it had.

Details in docs/architecture.md. The calendar layout has its own write-up in docs/calendar.md.

Quick start

You need Node 24 and a Google Cloud project with the Calendar API enabled (walkthrough, about ten minutes).

git clone https://github.com/jaredatch/homehq.git
cd homehq
npm install

cp .env.example .env                              # add Google client ID/secret, a cookie secret
cp data/config.example.json data/config.json      # calendars, lat/long, PIN

npm run dev

Open http://localhost:3000, enter your PIN, then visit /setup to connect Google. Events show up within a few minutes; weather within a minute.

Every config key is documented in docs/configuration.md. Local development and troubleshooting are in BOOTSTRAP.md.

Running it on a wall

docs/deployment.md covers the whole thing: a $6 VPS behind nginx (with or without Cloudflare), a systemd unit, daily backups, and a Raspberry Pi in Chromium kiosk mode driving a 4K panel. It's written generically; our own instance is one droplet and a Pi 5.

Docs

Doc What's in it
docs/configuration.md Every config.json and .env key, with defaults
docs/google-oauth-setup.md Google Cloud project, consent screen, credentials
docs/deployment.md Server, TLS, backups, Raspberry Pi kiosk
docs/architecture.md Sync, cache, auth, writes, shared events, self-update
docs/calendar.md How the grid lays out, crops, and reverts, and why
BOOTSTRAP.md Dev setup, commands, troubleshooting
CONTRIBUTING.md How to send a change

Contributing

Bug reports and small, focused pull requests are welcome. Read CONTRIBUTING.md first; the calendar grid has a couple of invariants that are easy to break by accident.

License

MIT. The bundled Noto Color Emoji font is under the SIL Open Font License.

About

Self-hosted family calendar dashboard. HQ for your home. Google Calendar + weather on a Raspberry Pi kiosk.

Topics

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages