Meltype
This is Japanese input that melts the wall between half-width and full-width, like thawing snow.
AI translation
A no-build family wall dashboard: calendar, weather, shopping, meals, chores and an ambient screensaver.
Translation pending
ProductivityJavaScript · HTMLGitHub @mattohara42OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
A wall-display family dashboard: shared calendar, weather, meals, shopping, to-do, chores, and budget on one screen. Three files — HTML, CSS, JS — no build step, no framework. Google Calendar + Photos via OAuth, Firestore for shared state, Netlify Functions for event discovery.
Loading the full README.
Read the full README ↗A no-build family wall dashboard — Google Calendar, keyless weather, shared shopping/to-do/budget, AI meal planning, chores and an ambient screensaver.
Setup guide · Feature reference · Easter eggs · Architecture notes
A wall-display family dashboard — calendar, weather, shopping, meals, chores and more — built as four plain files with no build step, no npm install, and no framework.
family-hub.html + family-hub.css + family-hub.js, plus hub-theme.css for the theme tokens. Drop them in a folder, serve them, done.
Family Hub is the screen that lives on the kitchen wall. It pulls in everyone's Google Calendars, shows the weather and the radar, keeps a shared shopping list that updates on every phone in the house at once, plans the week's meals, tracks chores, and fades into a screensaver when nobody's looking at it.
It's deliberately low-tech under the hood: CDN <script> tags (Firebase 9 compat + Google
Identity Services), vanilla JS, CSS custom properties. There is nothing to compile — what
you edit is what the browser runs.
Calendar
.ics feed (school, sports, Outlook) with no Google sign-in at all; recurrence (RRULE/EXDATE/TZID) is expanded client-sideHousehold
Ambient
pond/Presentation
git clone https://github.com/mattohara42/family-hub.git
cd family-hub
python3 -m http.server 8080
Then open http://localhost:8080/family-hub.html.
⚠️ Opening the file directly (
file://) will not work for anything Google-related — OAuth requires anhttp://localhostor HTTPS origin.
Weather, the word of the day and the jokes work immediately with no configuration. Everything else needs accounts — see family-hub-setup.md for the full walkthrough (Google Cloud OAuth client, Firebase project, API keys, authorized origins).
Production runs on Netlify as a static site at familial.netlify.app, plus a handful of serverless functions:
| Function | Purpose |
|---|---|
netlify/functions/events.js | Event-discovery aggregation across several ticketing/library APIs |
netlify/functions/ai.js | Gemini proxy — keeps the API key server-side |
netlify/functions/ics.js | ICS feed proxy (CORS + SSRF-guarded) |
netlify/functions/news.js | RSS/Atom proxy for headline feeds |
Publish directory is .; the build command (node netlify-build.js) stamps a fresh
cache version into sw.js so each deploy invalidates the old service-worker cache, and
writes config.js from env vars when they're set (below).
Backend keys are set as Netlify environment variables — GEMINI_KEY, TICKETMASTER_KEY,
OWM_KEY. Client-side config (Firebase, Google OAuth client ID) lives in config.js. A fork
running its own Google/Firebase projects sets GOOGLE_CLIENT_ID and FIREBASE_CONFIG on
Netlify instead of editing that file; see family-hub-setup.md.
Any new serving origin must be added to Google Cloud Console → Authorized JavaScript Origins and Firebase Console → Authorized Domains, or sign-in silently fails.
family-hub.html markup + CDN script tags (no inline CSS/JS)
hub-theme.css theme tokens: fonts, palettes, material tokens (loads first)
family-hub.css all other styling — layout, components, theme structure
family-hub.js all logic + the config block at the top
config.js Firebase + Google client ID (rewritten from env vars on deploy)
manifest.json sw.js PWA manifest and service worker
firestore.rules Firestore security rules (auth-gated)
netlify.toml headers, redirects, CSP-adjacent config
netlify/functions/ serverless backends
pond/ vendored Pond Chimes screensaver (git subtree — don't edit in place)
tests/ node --test unit tests
docs/ brainstorms, plans, prototypes
npm test # node --test tests/*.test.js
Covers the Netlify functions (event-discovery aggregation, recipe scraping, Home Assistant)
and the browser app's pure helpers (the event date/time shift, the outdoor-task scorer, meal
images). Function tests import the real code through its _test export; browser-app tests
cannot — family-hub.js is a no-build monolith with nothing to require — so each of those
carries its own copy of the function it exercises, and the two must be kept in sync. See
BACKEND_TESTING_SETUP.md for running the functions locally.
| Doc | What's in it |
|---|---|
| FEATURES.md | The reference map — every feature's functions, state, HTML anchors and storage keys |
| family-hub-setup.md | End-user setup: accounts, keys, origins, step by step |
| CLAUDE.md | Architecture invariants and known gotchas (read this before changing anything structural) |
| EVENT_DISCOVERY.md | Event discovery design and API details |
| RETROSPECTIVE.md | Lessons learned along the way |
| EASTER_EGGS.md | The phrase cheat sheet |
*_BACKLOG.md | Per-area backlogs — weather, meals, assistant, screensaver, easter eggs |
The architecture invariants in CLAUDE.md are the house rules: no build tooling,
CSS stays in the CSS file, pond/ is vendored and updated only via
git subtree pull, and mobile tabs are registry-driven rather than hand-written per card.
There's a feature checklist there too.
MIT © Matt O'Hara.
The vendored pond/ subtree is Pond Chimes,
also MIT, and carries its own LICENSE. Third-party CDN libraries (Firebase, Google Identity
Services, Tone.js) remain under their own licenses.