TreeMap
무료 오픈소스 디스크 사용량 시각화 도구로, 사각형 트리맵·중복 파일 탐색·디스크 가득 예측·정리 시 파일을 휴지통으로만 이동한다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A shared household shopping list. No accounts, no sign-up — one person creates a list, everyone else opens the link and lands straight on the live, shared list.README 전문 보기 ↗A shared household shopping list. No accounts, no sign-up — one person creates a list, everyone else opens the link and lands straight on the live, shared list.
Anyone who joins via a share link and uses the list is offered a one-tap "start your own house's list", seeded with the aisle order they just learned.
Recipe apps can add ingredients straight onto a list, given its share link — see External API below.
node:sqlite module, which needs it)npm install (see Architecture notes for what actually gets installed)cd client && npm install
cd ../server && npm install # no-op today — the server has zero npm dependencies
cd ..
node dev.js
Then open http://localhost:8787.
Want your family actually using it? See DEPLOY.md for how to put it on a real URL.
node dev.js runs two things together: an esbuild watcher that rebuilds the client bundle on save, and the Node server (REST + WebSocket + static file serving) on port 8787. Open the same URL in a second tab (or a private window, to get a separate identity) to see the live sync in action.
client/build.js) instead of Vite, and a small hand-rolled pushState router (client/src/router.jsx) instead of react-router-dom. Plain CSS custom properties for design tokens (client/src/styles/tokens.css) — no CSS framework, the palette is small and exact.node:http for the server, node:sqlite (DatabaseSync) for storage, and a small hand-rolled WebSocket implementation (server/wsServer.js) instead of Express/ws. Zero npm dependencies.client/src/lib/qrcode.js, ISO/IEC 18004, versions 1–6, level M) instead of the qrcode package.@dnd-kit.These were built as hand-rolled equivalents to the originally specified stack (Vite, Express, ws, better-sqlite3, react-router-dom, @dnd-kit/core, qrcode, vite-plugin-pwa) because the environment this app was first built in had no npm registry access. They're tested and working as they are — there's no requirement to change them. If you'd rather use the original packages, it's a mechanical swap: the component and route logic doesn't depend on which implementation sits underneath.
Each list is a "room" identified by a short slug in its URL (e.g. /r/8fk3q2) — the slug is the only thing gating access, there's no login. Joining asks for a display name only, stored per device in localStorage, and assigns a colour (starting from the app's two base person colours, extending by rotating hue for a third or later person). Room state — items, people, and saved aisle layouts — lives server-side in SQLite and is broadcast to everyone connected to that room over WebSocket.
POST /api/rooms/:slug/items lets an external app add items to a list without an open WebSocket connection — this is what Posh Nosh (a recipe app by the same author) uses for its "add ingredients to shopping list" feature, given a room's share link.
POST /api/rooms/8fk3q2/items
Content-Type: application/json
{ "items": [{ "name": "2 cups flour" }, { "name": "200g chicken breast" }], "source": "Posh Nosh" }
items — required, up to 100 per call. Each needs name (a free-text string, used as-is); qty (integer, defaults to 1) and aisleKey (one of the seven keys in server/aisles.js) are optional — an omitted or invalid aisleKey is guessed from the item name via a keyword heuristic (guessAisleKey), falling back to cupboard.source — optional, up to 40 characters, shown in the "X added Y" toast to everyone with the list open (defaults to "Posh Nosh" since that's the only caller today).201 with { "added": [{ id, name, qty, aisleKey }, ...] } (empty items are silently dropped, so this can be shorter than the request).add_item message, so anyone with the list open sees them appear immediately — no polling needed on the caller's end.Access-Control-Allow-Origin: *) on all /api/* routes — a room's slug is its only access control (same trust model as the share link itself), and there's no auth token to leak.Accounts and profiles, prices or spend tracking, meal planning, chores, calendars, and any advertising beyond the one designed offer banner.