DailyDesk is a lightweight macOS desktop day planner: a transparent glass widget that sits on your desktop, shows the few tasks that matter today, and rewards completed work with a tiny desktop pet.
- Native Swift + AppKit implementation.
- Transparent borderless desktop window with HUD glass material.
- Dark glass task cards with thin priority accents.
- Three priority levels: urgent, important, light.
- Daily generated task templates.
- Weekly and before-weekly repeat rules.
- Manual task input for today's ad-hoc work.
- Auto-growing window height as the task list grows.
- Transparent scrolling task area when the list exceeds available screen height.
- Click-to-complete progress ring.
- Completion rewards with local-only coins.
- A tiny desktop pet that levels up as you finish more tasks.
- Calendar warehouse for recent daily completion records.
- Virtual shop for pet accessories such as ribbons, scarves, stars, and crowns.
- Configurable quick-open targets for local files and links.
- Preferences window for task templates, repeat rules, daily appearance time, pin behavior, and quick links.
- Pin mode:
- pinned: floats above other windows.
- unpinned: remains visible like a desktop note, then parks at the desktop icon window level after app deactivation.
- No background time tracking, no activity monitoring, no network sync.
This repository uses a Swift Package layout plus a small macOS .app packaging script. It can be built with Apple Command Line Tools; a full Xcode project can be added later for App Store distribution.
cd DailyDesk
./Scripts/build-release.sh
open Build/DailyDesk.appThe script creates:
Build/DailyDesk.app
DailyDesk keeps the prototype recovery helpers:
DailyDesk --generate
DailyDesk --generate --force
DailyDesk --pin
DailyDesk --unpin
DailyDesk --show-configFor tests, set DAILYDESK_HOME to isolate state and config:
DAILYDESK_HOME="$(mktemp -d)" Build/DailyDesk.app/Contents/MacOS/DailyDesk --generateUser data is stored locally:
~/Library/Application Support/DailyDesk/state.json
~/Library/Application Support/DailyDesk/config.json
state.json stores task completion, coin balance, daily records, and equipped pet accessories. DailyDesk does not upload or sync this data.
The Preferences window edits:
- daily appearance time
- default pinned behavior
- AI briefing file path
- Bilibili / GitHub quick links
- task templates
- repeat rules
- open actions
Task template format:
title | priority | recurrence | weekdays | open action | optional target
Examples:
科研 3h | urgent | daily | | none |
AI 技术日报 | important | daily | | ai-briefing |
健身 | light | daily | | none |
家教 | urgent | weekly | 1,6,7 | none |
家教备课 | important | prep-before-weekly | 1,6,7 | none |
Supported values:
priority:urgent,important,lightrecurrence:daily,weekly,prep-before-weeklyweekdays:1=Mon ... 7=Sunopen action:none,ai-briefing,bilibili-math,bilibili-english,github,custom-url,file-path
The floating window intentionally keeps a few AppKit details from the original prototype:
DeskWindowcan become key/main even though it is borderless and accessory-style.DeskWindow.sendEventwakes the parked desktop-level window before handling mouse/key events.FocusTextField.acceptsFirstMouselets the bottom add input receive the first click.- The add bar calls
focusInput()so users can click the broader glass area, not only the text field. - Standard editing shortcuts and the Edit context menu are explicitly wired for the input field.
- Unpin never calls
orderOut; it parks the visible widget atCGWindowLevel.desktopIconWindowafter deactivation. adjustWindowHeight(forTaskCount:)keeps task rows at a stable height and grows the window before falling back to a transparent scroll view.- Reward state is saved locally inside
AppState; completing the same task repeatedly does not mint duplicate coins. - The calendar warehouse and virtual shop are normal AppKit panel windows, not background monitors.
Do not remove these pieces unless you have a replacement tested inside a borderless NSPanel/NSWindow.
- v0.1: Engineering cleanup, configurable templates, GitHub release build.
- v0.2: Local reward loop, desktop pet, calendar warehouse, virtual shop.
- v0.3: Menu bar item, window recovery, import/export config.
- v0.4: Multiple task sets and richer template editor.
- v0.5: User-consented Login Item helper for daily auto-open.
- v1.0: Signed, notarized, and App Store-ready build.
DailyDesk is not App Store-ready yet. See docs/APP_STORE_READINESS.md.
MIT License.
