TreeMap
무료 오픈소스 디스크 사용량 시각화 도구로, 사각형 트리맵·중복 파일 탐색·디스크 가득 예측·정리 시 파일을 휴지통으로만 이동한다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Personal dashboard that tracks GitHub milestones and keeps me on one Focus Project
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗One project at a time, until it ships. Focus Trail is a personal dashboard that pulls your GitHub repos, graphs milestone progress for each one, and keeps you on a single Focus Project until it is deployed or finished. Switching focus means typing a reason, which is logged.
Try the live demo (example data, no sign-in, nothing is saved)
setFocus is the only code that changes focus, and a partial unique index in the database allows at most one focus project, so a bug cannot create two.closed_at dates build the graphs, weekly streaks and the weekly review.| Area | Choice |
|---|---|
| App | Next.js (App Router), React, TypeScript in strict mode, CSS modules with design tokens |
| Data | Turso (SQLite) with Drizzle and checked-in migrations |
| GitHub | Octokit behind a small data-access layer, so example data runs the whole UI with no network |
| Auth | Auth.js GitHub OAuth, owner-only |
| Jobs | Vercel Cron for daily snapshots and an optional reminder email (Resend) |
| Charts | Hand-written SVG: line and area graphs, ideal-pace line, milestone due-date markers |
| Quality | Vitest unit tests for the core rules, axe-core accessibility pass in light and dark, 400 px layout |
| Workflow | Conventional Commits, Husky pre-commit verify, GitHub Actions CI, branch protection on main |
The product rules live in CLAUDE.md, the plan in PLANNING.md and the task list in TASKS.md. The project was built by directing Claude Code through that written workflow: a rules file, a task list, hooks and CI as guardrails, and every change reviewed and merged through a pull request.
Docs: PLANNING.md (vision, architecture, stack) · TASKS.md (milestones) · CLAUDE.md (rules for Claude Code) · mockup.html (visual reference).
No accounts needed.
npm install
npm run dev
Open the URL it prints. DATA_SOURCE=fixture (the default) shows the example data from the mockup. DATA_SOURCE=fixture-first-run shows the same data with no focus project yet, so you can try picking one. DATA_SOURCE=fixture-empty shows an account with no repos, to check the empty states.
Git hooks (Husky) run on every commit and block it when something fails.
npm run verify: dependency check, security audit, type check, lint (no warnings), unit tests, production build.feat(auth): add GitHub sign-in or fix(sync): keep status when a repo is renamed. Subjects start lowercase, with no final period.audit-allowlist.json with a reason and review date. It expires and blocks commits again until re-checked. Production dependencies can never be listed.Hooks are installed by npm install (the prepare script). Do not bypass them with --no-verify.
The same checks run on GitHub (.github/workflows/ci.yml) for every push to main, every pull request, and once a week for new security advisories.
| Command | What it does |
|---|---|
npm run dev | Start the dev server |
npm run check | Quick check: type check, lint and unit tests |
npm run verify | Everything the pre-commit hook runs (about a minute) |
npm run deps:check | Dependency tree, lockfile and npm warnings |
npm run audit:check | Security audit with the reviewed allow-list |
npm run format | Format with Prettier |
npm run db:generate | Create a SQL migration after changing the schema |
npm run db:migrate | Apply migrations to the database in DATABASE_URL |
Focus Trail measures progress from GitHub milestones and issues. If a project keeps its plan in a TASKS.md, this tool turns it into milestones and issues:
npm run tasks:sync -- --repo crm --repo project-gantt-chart # dry run: shows the plan, changes nothing
npm run tasks:sync -- --repo crm --apply # writes to GitHub
npm run tasks:sync -- --repo crm --apply --limit 3 # create only 3 issues, to try it first
--project to also create the repo's GitHub Project and fill it, and pull --write TASKS.md to refresh the file from the Project. Both need gh auth refresh -s project and have not been run against real GitHub yet. Run them without --apply first.TASKS.md in the top folder of the repo, then in docs/. If the task list is somewhere else, name it with --file, for example --file planning/TASKS.md. The file has to be pushed to GitHub, because the tool reads it from there, not from your computer.## Milestone N ... (or ## M<N> ...) section becomes a milestone, and each - [ ] / - [x] task under it becomes an issue. Ticked tasks become closed issues, so progress is real from the start. The "Exit" or "Done when" line becomes the milestone description.gh command line tool and whatever account it is signed in to.On a computer that does not have the project yet, start with docs/new-device-setup.md.
Set DATA_SOURCE=github in .env.local after finishing the steps below, run npm run db:migrate once, then npm run dev. Star a project to mark it high priority; those projects are listed first. Visiting the app signs you in with GitHub, syncs your repos into the database, and records one progress snapshot per repo per day, so the graph history starts on your first visit.
Copy .env.example to .env.local and fill it in. Never commit .env.local.
http://localhost:3000.http://localhost:3000/api/auth/callback/github..env.local:
GITHUB_CLIENT_ID and GITHUB_CLIENT_SECRETALLOWED_GITHUB_LOGIN: your GitHub username. Nobody else can sign in.AUTH_SECRET: run openssl rand -base64 32.AUTH_URL: in Vercel set it to https://focus-project-tracker.vercel.app (not secret). Without it the callback uses whatever address you opened, and GitHub rejects it with "redirect_uri is not associated with this application".The app also accepts Auth.js's own names, AUTH_GITHUB_ID and AUTH_GITHUB_SECRET, in place of GITHUB_CLIENT_ID and GITHUB_CLIENT_SECRET.
An OAuth App allows one callback URL, so make a second OAuth App for the deployed site (callback https://<your-domain>/api/auth/callback/github).
Scope: the app asks for read:user repo project: repo so private repos show up (GitHub has no read-only scope for private repos on OAuth Apps), and project so the GitHub Project features can read your Projects and add tasks to them. Nothing is edited or deleted. If you signed in before project was added, sign out at /api/auth/signout and sign in again once, and approve the new permission on GitHub. For public repos only, set GITHUB_SCOPE="read:user public_repo"; that also turns the Project features off.
Turso hosts the database in production. Locally you can skip it: with DATABASE_URL empty the app uses a local.db file.
Pick the libSQL engine. Turso now offers two engines. This app uses @libsql/client, which is for the libSQL engine (the default). Do not choose the newer "Turso" engine (--tursodb); the docs do not say whether our client works with it.
Create it in the web dashboard (no command line needed; the Turso CLI only runs on Linux, macOS, or Windows through WSL):
focus-project-tracker. Choose the libSQL engine and a region near your Vercel deployment (US East, Virginia, is the Vercel default).libsql://focus-project-tracker-<your-org>.<region>.turso.io. That is DATABASE_URL.DATABASE_AUTH_TOKEN. It is shown once.If you use the CLI (Linux, macOS, or WSL): turso auth login, turso db create focus-project-tracker, turso db show focus-project-tracker --url, turso db tokens create focus-project-tracker.
Keep the token secret. Put it only in .env.local (ignored by git) and in Vercel's environment variables. Never paste it into chat, issues, or commits.
Create the tables (once, and again after any schema change). Add the two values to .env.local, then:
npm run db:migrate
It reads .env.local, prints which database it is using (the host, never the token), and is safe to run repeatedly. A wrong URL or token shows "Migration failed".
Every morning (12:00 UTC, set in vercel.json) the app emails you the next tasks of your focus project, each linking to its GitHub issue, plus any stalled or overdue warning. It is a nudge, never a requirement: nothing is sent while Away mode is on or when no project has focus, and you can turn it off on the Settings page.
RESEND_API_KEY: the key from step 1.REMINDER_EMAIL_TO: the address that should receive the email.REMINDER_EMAIL_FROM (optional): the From line. Without it the email comes from Resend's test sender, [email protected], which Resend only delivers to the email address of your own Resend account. To send from your own address, verify a domain in Resend first.REMINDER_NAME (optional): your first name for the greeting.CRON_SECRET and GITHUB_CRON_TOKEN, which the daily snapshot job already needs. The email job reads GitHub with the same token because nobody is signed in at that hour.To change the time, edit the schedule of /api/cron/daily-email in vercel.json. It is in UTC.
A project card shows "Live on Vercel", "Last deploy failed" and so on when the repo's homepage field on GitHub (or, for a project you marked Deployed, its live address) matches one of the Vercel project's production domains. Repos with no homepage show nothing.
VERCEL_TOKEN. If the projects belong to a team, also add VERCEL_TEAM_ID (Team Settings, General). Redeploy.Vercel tokens cannot be read-only: this one can do anything your Vercel account can. The app only reads the project list and never writes. Keep the token in Vercel's environment variables only, never in the repo. Without VERCEL_TOKEN the app works as before, and if Vercel is down or refuses the token the dashboard loads without status.
The dashboard works out "today", the week, the streak and the weekly review in the timezone your browser reports, so nothing needs setting for normal use. The daily jobs (the 06:00 and 12:00 UTC cron routes) have no browser and use APP_TIMEZONE if you set it in Vercel (an IANA name such as America/Toronto), otherwise UTC.
Import the GitHub repo in Vercel (every push to main then deploys). Production: https://focus-project-tracker.vercel.app. To switch it to real data, add the same environment variables in Vercel plus DATA_SOURCE=github, and register a production OAuth App with callback URL https://focus-project-tracker.vercel.app/api/auth/callback/github.