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,即可验证所有权并自行管理介绍。
一分钟完成验证Full-stack planning app — Next.js + PostgreSQL/Prisma, Google OAuth, EN/FR/Nigerian Pidgin locales. Live at plan2026.ca
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Personal full-stack portfolio app: Next.js App Router task and plan management with Google sign-in, PostgreSQL/Prisma data modeling, JSON export APIs, server actions, optional rich task notes, urgency levels, due dates, and Google Calendar event creation.
Production: https://plan2026.ca
/actions, a page showing urgent and upcoming tasks (urgency 6+ or due within the next three days). Overdue tasks show an alarm icon; you can edit, mark done, or add to calendar from the list./tasks page for day-to-day work:
POST /api/list-prefs, not the URL)/plans area to group tasks and track progress:
POST /api/list-prefs persistence as tasks); each row has an Edit link and a status dropdown/plans/new and edit at /plans/[id] (no modals)prisma.config.ts)packageManager in package.json; with Corepack: corepack enable)Set these in .env for local development:
DATABASE_URL - PostgreSQL connection stringAUTH_SECRET - NextAuth secret (required in production; see DEPLOY.md for secret rotation)GOOGLE_CLIENT_ID - Google OAuth client idGOOGLE_CLIENT_SECRET - Google OAuth client secretNEXTAUTH_URL - usually http://localhost:3000 locallyBLOB_READ_WRITE_TOKEN - (optional) Vercel Blob token for task file attachments; create a Blob store in the Vercel project and pull env with vercel env pullAUTH_FACEBOOK_ID - (optional) Facebook app client ID for Facebook loginAUTH_FACEBOOK_SECRET - (optional) Facebook app client secretAUTH_FACEBOOK_ENABLED - (optional) Set to true to show Facebook login (requires ID + secret). Production already has this set.This app uses PostgreSQL in every environment, including local development, local testing, and production.
pnpm install
Configure the environment variables listed above in .env, pointing DATABASE_URL at your local development or test Postgres database.
Run Prisma migrations against your local Postgres database:
pnpm exec prisma migrate dev
pnpm run dev
http://localhost:3000.The project uses Vitest for unit and integration tests. Run tests with:
pnpm test – run tests oncepnpm run test:watch – run tests in watch modepnpm run test:coverage – run tests with coverage reportpnpm run bulk:next -- <PR_NUMBER> – merge that PR, update main, check out the next open PR’s branch and merge main into it; prints what to test (see danf-skills bulk-task-pr skill and AGENTS.md).Tests live next to source files (e.g. src/lib/export.test.ts). Good candidates for unit tests:
src/lib/* – export helpers, sanitize, validations, rate limiter (no DB)src/lib/validations/task.ts and plan.tsFor React components, add @vitest-environment jsdom at the top of the test file and use React Testing Library (already installed). For API routes or server actions that hit the database, use a test database or mock Prisma. Optional: Playwright for end-to-end flows (e.g. login, create task).
A pre-push Git hook (via Husky) runs pnpm run prepush, which runs lint and typecheck only so pushes stay fast. Full pnpm run build (Prisma generate + Next.js build) runs in CI and will catch build failures. To run the same checks manually: pnpm run prepush. For a full build: pnpm run build.
If you see "Port 3000 is in use" or "Unable to acquire lock at .next/dev/lock", a previous dev server is still running. On Windows this often happens when the terminal is closed without stopping the server, or when the process doesn’t receive a shutdown signal.
pnpm run dev is running instead of closing the window.pnpm run dev:kill to kill the process on port 3000, then run pnpm run dev again.netstat -ano | findstr :3000, then taskkill /PID <pid> /F. Or use Task Manager → Details → end the node.exe process (or "End process tree" on the pnpm parent).The root route redirects to /tasks. The app shell includes Tasks, Plans, Help, and About nav links; Plans lists your plans and links to Add plan (/plans/new) and to each plan’s detail/edit page (/plans/[id]). Help (/help) shows how to use tasks and plans plus recent updates; About (/about) shows app version and contributor info.
In Google Cloud Console:
http://localhost:3000http://localhost:3000/api/auth/callback/googleThe app requests these Google scopes during sign-in:
openidemailprofilehttps://www.googleapis.com/auth/calendar.eventsGoogle sign-in forces a fresh Google consent step so revoked Calendar permissions can be granted again on reconnect.
To enable "Continue with Facebook" on the login page:
https://<your-domain>/api/auth/callback/facebook. Production lists only https://plan2026.ca/api/auth/callback/facebook (localhost is not listed; Strict mode is on).AUTH_FACEBOOK_ID, AUTH_FACEBOOK_SECRET, and AUTH_FACEBOOK_ENABLED=true in your environment. Vercel Production already has all three.public_profile and email. As of 18 October 2026, public_profile has Advanced access and email is Standard access with Verification required. The business Anthony & Omolola Enterprises is Verified.The OAuth endpoints pin Graph API v26.0 (FACEBOOK_GRAPH_VERSION in src/lib/facebook-login.ts; NextAuth v4's default still points at the retired v11.0). Data deletion instructions are at /privacy#data-deletion. An optional Data Deletion Callback is implemented at POST /api/facebook/data-deletion, with a status page at /privacy/deletion-status. Meta calls it only if that URL is set instead of the instructions URL.
Production go-live: follow GO-LIVE-FACEBOOK.md.
All API routes require an authenticated session. Responses use JSON; errors return { error: "message" } with an appropriate status code (401 Unauthorized, 400 Bad Request, 404 Not Found, 429 Too Many Requests). Rate limiting applies per user (in-memory; see TECH-1005 for production notes).
GET /api/tasks — List all tasks for the signed-in user. No pagination (returns full list). Order: completedAt desc, then createdAt desc. Response: { tasks }. Each task includes plan: { id, name } and attachments when present.POST /api/tasks — Create a task. Body: see below. Response: { task }, 201.PATCH /api/tasks/:id — Update completion. Body: { "completed": true | false }. Sets completedAt to now or null.DELETE /api/tasks/:id — Delete a task (owner only).POST /api/tasks/:id/calendar — Create a Google Calendar event for the task.POST /api/list-prefs — Persist list UI preferences for the signed-in user. JSON body: optional tasksShowCompleted and/or plansShowArchived (booleans). Sets first-party cookies used by /tasks and /plans (not server actions, to avoid an RSC refresh on every toggle).GET /api/plans — List plans (owned + shared). Paginated. Query: page (default 1), limit (default 20, max 100), showArchived=1 to include completed/abandoned. Order: priority desc, then createdAt desc. Response: { plans, total, page, limit, totalPages }. Each plan includes tasks: { id, completedAt }.POST /api/plans/cleanup-invites — Delete expired plan invites (e.g. for cron). Requires auth.POST /api/tasks body{
"title": "Book flights",
"content": "<p>Use the points portal first.</p>",
"dueAt": "2026-03-10T14:30",
"urgency": 4,
"planId": "c..."
}
Notes:
title is requiredcontent is optional rich text HTML and is sanitized before storing/renderingdueAt is optional; when present it is converted to a dateurgency is optional and defaults to 4 (1–7)planId is optional; when present the plan must exist and be owned by the userPATCH /api/tasks/:id body{
"completed": true
}
public/plan2026-logo-c.png — trimmed in GIMP to remove transparent padding (TECH-0033). If you replace it, crop tight to the artwork or the header may show extra space.Deployment instructions live in DEPLOY.md.
In short:
https://plan2026.ca/api/auth/callback/google) and Calendar API access. Before advertising a public demo, follow GO-LIVE.md (privacy URL, Vercel env, Google verification).prisma migrate deploy (using DATABASE_URL), then prisma generate and next build. Preview builds, GitHub Actions, and local pnpm run build do not migrate. See DEPLOY.md for the one-shot command that applies a pending migration to the live database.The database story is intentionally the same in every environment: PostgreSQL for local work and PostgreSQL in production.