Wayfinder: home automation service
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 35/100
- Issue type
- Documentation
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- postgresql, typescript
- Domain
- backend, full-stack
Research direction
Read the home feature branch glossary at services/home/GLOSSARY.md, then review the linked issues 120–123 and the referenced skills, CODING_STANDARDS.md and docs/adr/. The issue describes a hand-off-ready specification but leaves several decisions open and says implementation tickets still need to be sliced. Done means those remaining topics are resolved and the spec is divided into implementation issues; no specific files for the main specification are named.
Written by the indexing model from the issue text.
Description
Destination
A hand-off-ready spec for a new service home (this monorepo: galvyn/rorm, PWA, passkeys) that runs the household on top of the existing Zigbee2MQTT: lights, heating, sensors, shared lists, recurring reminders, a kiosk dashboard and a local voice assistant, sliced into implementation issues. Building it is not part of this map.
Notes
- Service name
home(services/home,frontend/home); glossary atservices/home/GLOSSARY.mdon the feature branchhome. - Exactly one Household; all Members are equal, one admin issues Registration links (passkeys via
libs/galvyn-identity). - Phones reach it at home and on the road via Tailscale only.
- Zigbee2MQTT already runs and is the device boundary; the service never speaks Zigbee itself.
- Lights and heating must work without internet and without the Ryzen box. Devices and core stack run on the Raspberry Pi; the voice stack runs on the Ryzen 7 1700 + GTX 1080 (8 GB), fully local (no cloud LLM).
- Automations are fixed building blocks: heating schedule per Room, motion light per Room, timed Scene. No free rule engine.
- Scenes belong to one Room (light on/off, brightness, colour temperature, target temperature); any Member may create them. House-wide only a built-in "all off".
- One concept "List" for shopping and to-dos: any number, all shared, Items are just checked off. Due dates and recipients belong to Reminders.
- Reminder: recurrence rule + recipients + acknowledgement; unacknowledged it re-notifies.
- Sensors: live values plus history per sensor.
- Dashboard: a kiosk view of the same PWA on a wall tablet/TV, one style done properly (Jarvis HUD or LCARS), no theme switching.
- Voice is just another channel over the service API ("Computer, ..."), GLaDOS voice. Push-to-talk in app/dashboard first, room satellites later (ESPHome native API; Wyoming only links the pipeline to Whisper, Piper and openWakeWord).
- Consult the
grillinganddomain-modelingskills on grilling tickets; readCODING_STANDARDS.mdanddocs/adr/before deciding on anything that touches them.
Decisions so far
- Zigbee2MQTT integration surface for the home service: small stable JSON surface (retained bridge/devices with typed exposes, /set|get, availability); native groups/scenes cover only lights; bindings only for controller-type sensors; NATS MQTT can replace Mosquitto but forbids spaces in names and hides retained messages in a JetStream stream; else rumqttc
- Voice satellite hardware without Home Assistant: satellites (Voice PE, ReSpeaker Lite, S3-BOX-3, linux-voice-assistant) speak the ESPHome native API, not Wyoming; stock firmware works without HA if
homeimplements the voice part of that API (one client per device, wake word only while a client is connected, TTS fetched via HTTP URL); a prop needs a custom "look at" channel - Web Push from the PWA behind Tailscale: works; phones receive pushes without the tunnel, the Pi needs outbound internet (push services, cert renewal);
rp_id= the Tailscale host, fixed before the first passkey; iOS 16.4+ with Home Screen install; needs vite-plugin-pwainjectManifest; crateweb-push-native; TLS via traefik's Tailscale cert resolver renews itself - Local voice stack on a GTX 1080: Pascal only runs on a frozen stack (driver 580, CUDA 12.x, cuDNN <= 9.10 or CTranslate2 >= 4.6.3), so llama.cpp/Ollama, not vLLM; Whisper turbo int8 + ~4B tool-calling LLM fit in 8 GB (or Gemma 4 E4B with audio in as one model); Piper on CPU with an unlicensed German GLaDOS voice (home use only); openWakeWord is English-only, so push-to-talk first; est. 2-5 s to reply, unmeasured
Not yet specified
- Warnings (e.g. bathroom humidity > 70 %): probably built from Reminders or Automations once both are modelled.
- How the kiosk Dashboard device signs in (device login, not a Member account).
- Backups of the Postgres on the Pi.
- Interface sounds for the Dashboard: synthesising the film/series sounds by ear did not sound right in the dashboard prototype; likely the user's own sound files per event, or a freely licensed pack.
- Slicing the finished spec into implementation issues (the last step of this map).
Out of scope
- The physical, moving GLaDOS prop (mechanics, servos, 3D printing): its own effort later. Only the interface a prop would plug into is in scope.
- Non-Zigbee devices (Wi-Fi plugs, cameras), energy monitoring.
- Multiple Households, guest or restricted roles.
- A free-form rule engine, theme switching, Alexa / Google Assistant.
- Dominant language
- TypeScript
- Stars
- 0
- Forks
- 1
- Avg merge
- 10h 56m
- Merged PRs (30d)
- 34
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from myOmikron/code
-
wayfinder:task
Difficulty 1/5 Under an hour Newbie friendliness 90/100
Maintainers usually reply within 1 day
-
wayfinder:task
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
myOmikron/code#102 · 2 comments ·
Maintainers usually reply within 1 day
-
ready-for-agent
Difficulty 5/5 Over a week Newbie friendliness 18/100
Maintainers usually reply within 1 day
-
needs-triage
Difficulty 5/5 Over a week Newbie friendliness 25/100
Maintainers usually reply within 1 day
-
needs-triage
Difficulty 5/5 Over a week Newbie friendliness 25/100
Maintainers usually reply within 1 day
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
maniator/verticopolis#1303 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 73/100
components-web-app/docs#297 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
appwrite/mcp-for-docs#23 · 1 comment ·
-
`@vanilla-extract/turbopack-plugin`: "getImageSize is not a function" with Next.js 16.4.x when a `.css.ts` file imports an imagePossibly taken @aevarOrigo claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
vanilla-extract-css/vanilla-extract#1799 · 1 comment ·
-
native
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
prime-radiant-inc/evener#4839 ·
Maintainers usually reply within 1 day