TreeMap
무료 오픈소스 디스크 사용량 시각화 도구로, 사각형 트리맵·중복 파일 탐색·디스크 가득 예측·정리 시 파일을 휴지통으로만 이동한다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A to-do list you wash. Every task is a dish in the sink.
S) to drop it into the soaking tub (6 spots; add or remove entries in SPOTS in main.js to change it): it sits in soapy water with bubbles rising, and the bottom panel shows how long it's been soaking. Click it later to finish it (✓ Done) or take it out (back to the sink). The longer it soaks, the more its grime loosens (fully after ~4 hours), and soaked dishes wash faster.Esc to put it back. Props always return to their spot and aren't saved. Clicking a letter of the Sinkful sign makes it hop.sfx.js, no audio files.E), or the pencil next to it in the list: change its title, notes, size or urgency. A new size or urgency rebuilds the 3D dish to match. Undoable.localStorage.python3 server.py # http://localhost:5173
server.py (no dependencies) serves the site and saves your data:
data/sinkful.json: the full current state (sink, tub, rack, every completed task with timestamps). Rewritten automatically on every change and loaded on startup, so progress survives across browsers and sessions.
data/history.jsonl: append-only activity log, one JSON line per event (added, soaked, taken-out, washed, removed, put-away, undo).
data/backups/: a snapshot of sinkful.json before it's overwritten (at most one every 5 minutes, newest 100 kept). To roll back, stop the server and copy one over data/sinkful.json.
Nothing is ever overwritten wholesale: every task carries an updatedAt, deletions leave tombstones, and the browser's copy, the file, and any other open tabs are merged task by task (newest wins). A save from a tab that's behind gets rejected by the server, merged, and retried.
A small note appears top-left only when saving to the file isn't working (browser-only or server unreachable). Under any other static server (e.g. python3 -m http.server) the app still works but saves only in the browser.
Use a separate data folder with python3 server.py 5175 --data /tmp/sinkful-test.
Static site with no build step. Three.js loads from jsDelivr.
Reset data in the console: sinkful.reset().
Watch a wash on load: #wash or #wash-pot. Slow motion: sinkful.speed(0.25). Preview the finale: sinkful.finale(). Fast-forward soaking: sinkful.ageSoak(4). Pick up a prop: sinkful.hold('toaster'). Performance: sinkful.perf() (draw calls, frame and hit-test cost), sinkful.meshBreakdown().
Rendering is on demand: nothing redraws while the scene is still, ambient tub motion redraws at 30 fps without redoing the shadow map, and static scenery, tub suds and each dish's grime are merged or instanced to keep draw calls low (~185 per frame with a full sink).
Live at brandonconcepcion.com/sinkful, behind a password. Pages has no server, so:
vault.json holds a GitHub token and a Gist id, AES-GCM encrypted with a key derived from the password (PBKDF2, 600k rounds). vault.js shows the lock screen and decrypts it in the browser; "Remember this device" keeps the unlocked token in localStorage.sinkful.json in that secret Gist, with the same merge rules as server.py. Every save is a Gist revision, so the Gist's history is the backup.node tools/make-vault.mjs (or --gist <id> to keep the existing Gist), then commit vault.json. Use a fine-grained token with only Gists: Read and write.The lock keeps the site to yourself, but it isn't server-side auth: the code is public and vault.json can be guessed at offline, so use a long password. Revoking the token cuts off every device at once.
The localhost copy (server.py, data/) is separate from the hosted one.
tools/calendar-dishes.gs is a Google Apps Script that adds today's calendar events to the Gist as dishes, every hour from 7am to 5pm. Only timed events you accepted or created count. The dish size follows the meeting length, from a glass for 10 minutes to a pot for 3+ hours. Each event gets one dish per day, keyed on the event id + date, so reruns, washing or deleting it never bring it back. Unwashed calendar dishes pile up like any other. Setup steps are at the top of the file.
The wall calendar next to the sign shows today's date. Clicking it syncs right away: it opens the script's web app in a small popup, waits for the sync to be recorded in the Gist's calendar.json, pulls in the new dishes, and closes the popup. The first click asks for the web app URL and saves it to the Gist for every device. On localhost the calendar is decoration only.
3D models: Kenney Food Kit and Furniture Kit (both CC0), see models/KENNEY-LICENSE.txt and models/decor/KENNEY-FURNITURE-LICENSE.txt.