TreeMap
무료 오픈소스 디스크 사용량 시각화 도구로, 사각형 트리맵·중복 파일 탐색·디스크 가득 예측·정리 시 파일을 휴지통으로만 이동한다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기crimsoncaius/timebox
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Timebox combines a dual-lane daily planner with a task and project backlog. The React + Tailwind web app and native Kotlin + Compose Android app share a FastAPI + Postgres backend.
Plan and track planned vs actual time blocks on a 30-minute grid, pull Ready to Plan tasks onto the day, and manage projects, subtasks, deadlines, reminders, recurring work, archives, and trash. The backend uses a fixed app timezone (APP_TIMEZONE) so every device agrees on “today”.
There is also a native Kotlin + Compose Android client in android/, talking to the same API.README 전문 보기 ↗Timebox combines a dual-lane daily planner with a task and project backlog. The React + Tailwind web app and native Kotlin + Compose Android app share a FastAPI + Postgres backend.
Plan and track planned vs actual time blocks on a 30-minute grid, pull Ready to Plan tasks onto the day, and manage projects, subtasks, deadlines, reminders, recurring work, archives, and trash. The backend uses a fixed app timezone (APP_TIMEZONE) so every device agrees on “today”.
There is also a native Kotlin + Compose Android client in android/, talking to the same API.
.venv and uv.lock).env.example documents all supported variables. Environment files are resolved relative to the process working directory:
backend/, put backend values in backend/.env or export them in the shell.frontend/, put VITE_* values in frontend/.env or export them in the shell..env is not loaded automatically by those commands.The backend reads DATABASE_URL, APP_TIMEZONE, CORS_ORIGINS, optional CORS_ORIGIN_REGEX, and optional API_KEY. Vite uses VITE_API_BASE_URL for direct API requests, or proxies /api to VITE_API_PROXY_TARGET during development.
Frontend command (from frontend/) | UI port | Default /api proxy target |
|---|---|---|
npm run dev | 5174 | http://127.0.0.1:8000 |
npm run dev:review | 5176 | http://127.0.0.1:8001 |
Set VITE_API_PROXY_TARGET in frontend/.env or the shell to override either default. Vite reads frontend/.env from the frontend working directory. Both commands stop if their UI port is already occupied.
Create a database and user matching DATABASE_URL, then run migrations from backend/:
cd backend
uv sync --extra dev
alembic upgrade head
If you previously ran an older schema (with hour_entries), alembic upgrade head applies the follow-up migration that drops hour_entries and creates time_blocks. Later migrations add the global day window, hierarchical task types, linked planned/actual blocks, Battle Plan projects and tasks, Ready to Plan scheduling, recurring templates, and blocked-task state. Always back up production data before migrating.
Without uv: python -m pip install -e ".[dev]" (from backend/).
On Windows, the review launcher verifies the registered ports, Postgres identity, database URL, Alembic revision, API readiness, Vite proxy, and Android foreground activity before reporting success:
.\scripts\launch-timebox.ps1
It writes logs and machine-readable status.json under %LOCALAPPDATA%\Temp\timebox-launch. Use .\scripts\stop-timebox.ps1 to stop only processes and containers whose Timebox identity is verified. Pass -KeepDatabase or -KeepAndroid when those surfaces should remain running.
Terminal 1 — API
cd backend
uv sync --extra dev
uv run uvicorn app.main:app --reload --host 127.0.0.1 --port 8001
Set DATABASE_URL, APP_TIMEZONE, and CORS_ORIGINS=http://localhost:5176,http://127.0.0.1:5176 in backend/.env or the shell first. In PowerShell, temporary values use $env:NAME="value"; on macOS/Linux, use export NAME="value".
Terminal 2 — UI
cd frontend
npm install
npm run dev:review
The review command proxies /api to http://127.0.0.1:8001 by default. Open http://127.0.0.1:5176.
These commands use the workspace's registered Timebox ports. The Android emulator's debug build also defaults to API port 8001.
Keep tests for persisted behavior, validation, time calculations, offline recovery, concurrency, accessibility, and destructive actions. Prefer one representative browser/device journey over repeated integration tests of the same logic. Screenshot capture without baseline comparison, fixed palette/spacing assertions, and retired UI flows are excluded.
cd backend && uv run --extra dev --extra eval python -m pytest
cd frontend && npm test
cd frontend && npm run lint
cd frontend && npm run build
cd frontend && npm run e2e
The Windows launcher safety helpers have a focused Pester suite:
Invoke-Pester .\scripts\tests\Timebox.Launch.Tests.ps1
npm test runs Vitest unit/component tests. npm run e2e starts isolated API and web servers with a SQLite test database, then checks core routes, task lifecycle, planning placement, themes, and responsive layouts. Install its browser once with npx playwright install chromium. Recurrence rules and editing remain covered by backend and component tests. The backend command includes the optional eval dependencies required by its controlled optimizer tests; it makes no paid model calls.
E2E note: Playwright uses the dedicated ports declared in frontend/playwright.config.ts and may reuse listeners already occupying those exact ports outside CI. If a stale E2E server or schema causes failures, stop that listener or delete backend/e2e.sqlite so Playwright can start a fresh API using AUTO_CREATE_TABLES=1.
Android unit tests and builds are available after Android Studio has generated the Gradle wrapper. On Windows, use the repository launcher so Gradle automatically uses an installed JDK 17+ without changing the machine-wide Java configuration:
.\scripts\android-gradle.ps1 testDebugUnitTest assembleDebug
Android device tests use the shared emulator reservation helper:
python scripts/android-emulator.py test --owner "your-task-id"
It selects an isolated emulator and releases it after testing. For interactive work, review holds, and recovery, see Android emulator ownership.
On macOS or Linux, set JAVA_HOME to JDK 17+ and run cd android && ./gradlew testDebugUnitTest assembleDebug.
The visual source of truth is DESIGN.md. Native Android setup and behavior are documented in android/README.md. Current domain vocabulary and decisions live in CONTEXT.md and docs/adr/; implementation-specific design and verification notes are organized under docs/design/, docs/specs/, and docs/reports/.
APP_TIMEZONE; the UI uses meta from day responses for “today” and server time.API_KEY turns on a shared-secret X-API-Key check for every application route, including days, settings, task types, projects, tasks, reminders, and recurring templates. /health and /ready stay open. /ready returns HTTP 200 only when the database responds and its Alembic revision matches the repository head. The Android client sends the key; the web frontend does not, so leave it unset while relying on the browser UI.GET /days/{date}/summary returns planned/actual totals plus per-task-type minutes without creating the day. The old Android Day Review UI was removed while reporting is reconsidered; this endpoint remains as a possible reporting primitive.GET /days/{date}/preview returns renderable day data without creating a missing day. The Android client uses it for adjacent pages during an interactive swipe.GET /days/{date} renders missing dates without saving a Day row. GET /days/chronicle?month=YYYY-MM returns qualifying dates for the requested month, defaulting to the current month in the Reporting Time Zone. Empty saved Day rows stay stored but do not appear in Chronicle.AUTO_CREATE_TABLES=1 lets the API create tables on startup (used by Playwright). Do not use this for production Postgres; use Alembic instead.GET/PATCH /settings); changes apply to all days.GET/POST/PATCH/DELETE /task-types). Names are canonical lowercase slash paths (e.g. coding, coding/ai, exercise/cardio); creating a deep path materializes ancestors; renames cascade to descendants. Every stored Block references a Task Type. Planned Block creation may omit task_type_id: the backend uses a linked Task's type when available or atomically materializes unspecified. Planned Blocks may also include an optional 500-character Block Name and a separate optional . See the , especially .note/projects, /tasks, and /reminders provide project organization, nested tasks, lifecycle actions, Ready to Plan state, and reminder delivery./recurring-templates supports previews and the complete template lifecycle. Generated tasks retain their recurrence metadata and can enter Ready to Plan like ordinary tasks.