TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證matt-howsam/family-hub
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Release 1 shell. Next.js App Router on Vercel, Postgres on Neon.
npm install
git init && git add -A && git commit -m "shell"
It deploys and renders before you connect a database. Without
DATABASE_URL the week letter falls back to the seeded anchor and the
correction button is disabled — the footer says no database, so the state is
never ambiguous. Connect Neon and it becomes writable.檢視完整 README ↗Release 1 shell. Next.js App Router on Vercel, Postgres on Neon.
npm install
git init && git add -A && git commit -m "shell"
# push to GitHub, then import at vercel.com/new
It deploys and renders before you connect a database. Without
DATABASE_URL the week letter falls back to the seeded anchor and the
correction button is disabled — the footer says no database, so the state is
never ambiguous. Connect Neon and it becomes writable.
Vercel project → Storage → Create Database → Neon. DATABASE_URL is set
for you across all environments.
Run the schema once. schema.sql is safe to re-run — every statement is
idempotent (if not exists, on conflict do nothing) — so re-applying
it after a schema change (like the meal planner's tables) never
duplicates anything.
psql "$DATABASE_URL" -f schema.sql
No psql, or on an OS Homebrew has stopped supporting it on? Use the
project's own database dependency instead — no extra install:
node scripts/apply-schema.mjs "postgres://...connection string..."
The connection string is in Vercel → the project → Storage → the Neon
database → Connection string (or the .env.local tab).
Redeploy. The footer note disappears and the week letter becomes tappable.
app/page.jsx the wall — server component, force-dynamic
app/api/week/route.js GET current letter, POST a correction
components/Clock client — the server has no idea what time it is
components/WeekLetter client — one tap to correct
lib/week.js the cycle logic, no UI, fully testable
lib/calendar.js Lindisfarne term dates 2026-27
lib/db.js Neon, with a graceful no-database path
app/tokens.css the design system, untouched
schema.sql one table
Remembered state, not a calculation from a distant origin. The school's A/B
cycle carries across term breaks and years with no reset, so a fixed anchor
drifts silently. week_anchor holds the last known letter and the Monday it
applied to; weekLetter() rolls forward one flip per school week.
Holiday weeks hold the letter rather than consuming a flip. Any correction
becomes the new anchor, so a wrong letter is wrong once.
Confirmed by Matt, Monday 7 September 2026: Week B, whole school, one cycle for every year level. This independently validates the model — the SEQTA reading of 10 August (Week B) rolls forward four school weeks and four flips to land on B.
isSchoolWeek tests overlap, not membership. Terms 4 in both years begin
on a Tuesday because the Monday is a pupil-free day; those are still school
weeks. Testing the Monday alone would drop the week and invert the letter for
the rest of the year.
Watch 12 October. That is the first real test — the pupil-free Monday, the holiday hold, and the Term 4 flip to A all land at once. Check it against SEQTA that morning.
All date maths runs on Australia/Sydney via lib/week.js#today(). Vercel
servers are UTC; using new Date() directly for a calendar date would roll it
over at 10am Sydney time and change the week letter mid-morning. Never call
new Date() for a date — call today().
Nothing writes except the week letter. The household and family cards are
static markup in the shape the API will fill. Read-only is the default for
every surface; the fridge and phones share one responsive layout, and edit
controls appear only when the device identifies as a person rather than
role=display.