TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
Mini Desk 是一张浏览器里的安静小桌面:截图、便签、提醒和快捷动作都收在这里。本地优先,无需注册,打开即用。
Translation pending
ProductivityTypeScript · VueGitHub @xiangjiananOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Do less, do it well. 🐝
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Mini Desk is a quiet little desk.
Screenshots, notes, reminders, and quick actions all live here — but it won't push you to become a machine.
Do less, do it well.
It gathers the loose bits of daily work into a local-first browser desktop: screenshots can wait, ideas can be parked, reminders can be finished slowly. Desktop density becomes a breathing reminder — light, fairly full, or overheated — and the animated companion only pops up gently on save, completion, cleanup, and when content grows.Read the full README ↗English | 简体中文
Mini Desk is a quiet little desk.
Screenshots, notes, reminders, and quick actions all live here — but it won't push you to become a machine.
Do less, do it well.
It gathers the loose bits of daily work into a local-first browser desktop: screenshots can wait, ideas can be parked, reminders can be finished slowly. Desktop density becomes a breathing reminder — light, fairly full, or overheated — and the animated companion only pops up gently on save, completion, cleanup, and when content grows.
Mini Desk is built with Vue 3, TypeScript, Vite, and Naive UI. The interface takes cues from Apple's Human Interface Guidelines, aiming for a compact, clear, low-distraction daily experience.
Mini Desk is also an AI coding experiment: the product thinking, interaction trade-offs, and aesthetic judgment come from a human, while 100% of the code — from the UI and state management to the self-hosted relay service — was written by AI (Claude Code) in conversation.
No account or sign-in required — all your data lives in the browser: page state in localStorage, image originals and custom GIF assets in same-site IndexedDB. Apart from the self-hosted relay shared by mobile capture and smart paste, it depends on no backend service, making it a good fit as a personal browser workbench.
npm install # install dependencies
npm run dev # start the local dev server
npm test # run tests
npm run build # build the production bundle
npm run preview builds and serves the production bundle — the only way to verify offline behavior (dev mode never registers the Service Worker). For real-device LAN debugging use npm run preview:lan (self-signed HTTPS; the mobile-inbox API requires a secure context, and devices must accept the certificate warning once).
Ctrl+V paste a screenshot, drop an image file, or pick a local file through the "+" in the title bar; cards can be dragged out to the desktop to export.Ctrl+V inside the preview works the same way, and can replace the target image.Enter edits.Ctrl+wheel anchor zoom, double-click 2x, drag-to-pan, and toolbar actions.Enter edit, 5 / Ctrl+C copy, Delete / Backspace delete, Space / Esc close, arrow keys or W/A/S/D switch images.Tab indent, Shift+Tab outdent; indents inherit the sibling list markers, and unmarked lines get a - added automatically on Tab.Enter continues the indent and marker, Shift+Enter is a plain line break.Ctrl+Z undo (an independent 50-step undo stack inside the editor); Ctrl/⌘ + ←/→ jump to line start/end; Ctrl/⌘ + ↑/↓ move the current line, with numbering and dashes adapting.Ctrl/⌘ + ↑/↓ reorder within a group, Ctrl/⌘ + ←/→ jump to line start/end.Ctrl+S; switching to a paired workspace pulls immediately.Ctrl+S: save immediately and pull the mobile inbox.Ctrl+Z: board undo (text and image editors keep their own undo stacks).Tab / Shift+Tab indent, Ctrl/⌘ + ←/→ jump to line start/end, Ctrl/⌘ + ↑/↓ move the current line.Ctrl/⌘ + ↑/↓ reorder within the group, Ctrl/⌘ + ←/→ jump to line start/end.Ctrl+S saves immediately with a toast, and pulls the mobile inbox at the same time.Board state is kept in the browser's localStorage:
mini-desk-state-v1
Image originals are kept in same-site IndexedDB:
mini-desk-images-v1
The phone's remembered pairing code is kept in mini-desk-inbox-code. Legacy todo-board-state-v1 and todo-board-images-v1 keys migrate automatically on read. Clearing site data wipes board content, images, and custom GIFs; deleting only the localStorage keys clears board state, but IndexedDB may still hold image originals.
The mobile-inbox relay stores only the capture items themselves (self-hosted, authenticated by pairing-code hash); items become unreadable once delivered to the desktop or after 30 days, and are removed from the queue on read. The relay keeps no board data, images, or account information.
The board is designed for desktop workflows: viewports 900px wide or narrower get a guide page pointing to a desktop browser. On workspaces with mobile inbox paired, phones can open the pairing address to capture reminders and notes, which sync to the desktop through the self-hosted relay.
For local real-device debugging use npm run preview:lan; the mobile-inbox API needs a secure context, and devices must accept the self-signed certificate warning once.
The live site runs on Cloudflare Pages (project todolist):
npm run deploy:cloudflare
The mobile-inbox relay is a self-hosted service (server/, Flask + MySQL) deployed on Aliyun at /opt/minidesk-inbox, exposed via nginx at https://relay.minidesk.online:8443:
cd server && ./deploy.sh
Build-related environment variables: VITE_BASE (deployment subpath), VITE_INBOX_WORKER_URL (override the relay URL, for local debugging), MINI_DESK_LAN (enable self-signed HTTPS for real-device preview).
To publish a release, build dist first, then zip the bundle as a release asset:
npm run build
cd dist
zip -qr ../dist-<version>.zip .
src/App.vue: the board entry point — cross-component state orchestration, saving and conflict detection, import/export, toast bubbles, and global shortcuts.src/components/: workbench shell, workspace switcher, image shelf / screenshot editor / preview, reminders, quick actions, note spaces, mobile inbox, settings, and help components.src/state/: default state, message copy, i18n, theme, GIF themes, version & changelog, localStorage/IndexedDB access, import/export normalization, and reminder domain logic.src/sync/: mobile-inbox pairing codes, legacy payload decoding, and relay clients.src/composables/: composable logic such as reminder notifications.src/utils/: text-editing utilities (indent, list markers, line moves) and friends.src/__tests__/: component rendering, state compatibility, interaction contracts, deployment config, and message copy tests.server/: the mobile-inbox relay (Flask + MySQL, production).static/: companion GIFs and image assets; public/: Service Worker, manifest, and icons; samples/: sample import data.How Mini Desk gets built is the project's most interesting experiment: the human only decides "what", and hands everything else to AI.
.claude/skills/) drives the AI through build, full test runs, Cloudflare deployment, GitHub Releases, and changelog upkeep — one person maintaining 100 releases.CLAUDE.md is the project manual written for the AI, and every changelog entry in src/state/changelog.ts was summarized by the AI at release time.Put differently: everything described here — from the four-zone workbench to the mobile inbox — is the product of the loop "state the requirement → AI implements → AI self-reviews → AI releases".
Thanks to my girlfriend for her constant support, and for the many valuable suggestions on product details.