TreeMap
무료 오픈소스 디스크 사용량 시각화 도구로, 사각형 트리맵·중복 파일 탐색·디스크 가득 예측·정리 시 파일을 휴지통으로만 이동한다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.