Apple's Home app shows the current state of your accessories — homechronicle shows you everything that happened and when. A self-hosted dashboard with a searchable timeline, activity analytics, alerts, and device management.
Day-grouped event feed that leads with what happened — “motion detected”, “60% RH”. Filter by room, accessory, characteristic, or date range.
A one-line house summary, a room map, today’s rhythm, daily trends, hourly charts, and weekday and monthly heatmaps.
Every paired accessory in per-room tables with status, event count, and heartbeat, plus bridge info and per-device history.
Discover, pair, and configure accessories directly from the UI. Bulk pairing, PIN vault, and bridge child expansion.
Twelve colour palettes, each with a designed light and dark version. Charts and room colours follow the palette.
Add to your home screen on iOS or Android. Works like a native app with responsive mobile-first design.
Commission Matter devices from the browser. Live subscriptions report changes as they happen, with the same names and units as HomeKit.
Single docker run deploys everything. Or use Docker Compose for fine-grained control. No build steps required.
Optional login with invite-only members, admin and member roles, and DB-backed sessions you can review and revoke per device.
SMTP-powered user invitations, password resets, and email alert delivery. Configure via environment variables or the Settings UI.
Drag, resize, and hide analytics panels. Choose from 15 default and 12 optional panels; layout is saved per account.
Get a webhook or email when a device, room, or characteristic matches a rule, with quiet periods to stop repeats.
A live, scrollable timeline grouped by day shows every state change across your home. Scene grouping bundles events that fire within seconds of each other.
The activity heatmap shows event density by device and time of day. Click any cell to jump directly to that moment in the timeline. Combined with powerful search filters, finding any event is instant.
Event-count trend across the last 7, 30, or 90 days. Spot long-term patterns and busy periods.
Each room is a block sized by its share of events, coloured from a palette checked for colour-blind readers. Select a room to open its timeline.
An arc of your day showing quiet hours, the busiest hours, and the current time.
Hourly distribution over the last 30 days, in your local time. Find your home’s natural rhythm.
One line for today: the busiest room, the change on yesterday, and whether anything happened during quiet hours.
Auth is opt-in via AUTH_ENABLED. The sign-in screen appears only when login is on; disable it to restore the single-operator mode.
Admins can invite members by email, promote or demote roles, and disable accounts. No public registration — every account comes from an invite.
Each user can see their own login sessions — device user agent and IP captured at login — and revoke any individually.
Email is optional. When an SMTP server is configured, it powers three features: user invitations (the invite link doubles as email verification), password reset links, and the email delivery channel for alert rules.
A live inventory of every paired HomeKit and Matter accessory, in a table per room. At a glance, see which devices are active, which have gone quiet, and how many events each has logged.
No command line needed. Open Devices › Add Accessories, discover accessories on your network, enter PINs, and pair directly from the web UI. Pair a Homebridge bridge once and every child accessory is logged automatically.
Choose a palette in Settings › Appearance, then Light, Dark, or System to follow your OS. Every palette has its own designed dark version, and charts, room colours, and status colours all follow it. See all twelve.
docker run -d \ --name homechronicle \ --network host \ -e WEB_PORT=3000 \ -v hc-db:/var/lib/postgresql/data \ -v hc-data:/app/listener/data \ -v /run/dbus/system_bus_socket:/run/dbus/system_bus_socket:ro \ havuq/homechronicle-standalone
# Update placeholder secrets before running:
# - POSTGRES_PASSWORD
# - API_TOKEN
services:
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_USER: homekit
POSTGRES_PASSWORD: change-this-strong-password
POSTGRES_DB: homekit_events
TZ: UTC
volumes:
- postgres-data:/var/lib/postgresql/data
# Schema is managed by listener migrations — no init.sql mount needed
ports:
- "127.0.0.1:5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U homekit -d homekit_events"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
listener:
image: havuq/homechronicle-listener:latest
restart: unless-stopped
network_mode: host
environment:
DATABASE_URL: postgresql://homekit:change-this-strong-password@127.0.0.1:5432/homekit_events
API_PORT: "3001"
NODE_ENV: production
API_TOKEN: replace-with-openssl-rand-hex-32
TZ: UTC
volumes:
- ./listener/data:/app/data
- /run/dbus/system_bus_socket:/run/dbus/system_bus_socket:ro
depends_on:
postgres:
condition: service_healthy
web:
image: havuq/homechronicle-web:latest
restart: unless-stopped
ports:
- "3000:80"
extra_hosts:
- "host.docker.internal:host-gateway"
environment:
LISTENER_HOST: host.docker.internal
LISTENER_PORT: "3001"
API_TOKEN: replace-with-openssl-rand-hex-32
TZ: UTC
volumes:
postgres-data:
# Full compose options:
# https://gitlab.com/havuq/homechronicle/blob/main/docker-compose.yml
One docker run on any machine — NAS, Raspberry Pi, or desktop.
Open Devices › Add Accessories, scan your network, and pair accessories with their PINs or Matter codes.
Events stream in automatically. Explore the timeline, dashboard, and analytics.