Meltype
눈 녹듯 반각·전각 장벽을 녹여주는 일본어 입력
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.
README 전체를 불러오는 중입니다.
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.