Skip to content

santoru/docket

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Docket

A beautiful, minimal task manager that lives in your macOS menu bar.
Integrates with Apple Reminders — iCloud, Siri, and Apple Watch support out of the box.
No dock icon. No clutter. Just click the ✓ and get things done.

Docket — Task List   Docket — Settings  


✨ Features

🎯 Tasks

  • Create, edit, complete, delete
  • Priority levels (pastel color-coded)
  • Swipe right → complete, left → delete
  • Reorder with ↕ mode (▲/▼ arrows)
  • Undo toast on complete/delete (3s)

⏰ Reminders

  • Optional due dates with calendar picker
  • Smart notifications before deadline
  • Configurable: 5min → 1 day before
  • Natural language: "tomorrow 3pm"
  • Relative labels: "Today 3pm", "Friday"

⌨️ Power User

  • Global hotkey (⌘⇧D, configurable)
  • Quick-add: double-press to create
  • ⌘N new task, Esc to go back
  • Right-click context menu
  • Export/import tasks as JSON

🎨 Themes

  • 9 built-in + custom color picker
  • Accent-colored UI throughout
  • Dark mode (Night theme)
  • Hue & intensity sliders for custom
  • Liquid Glass mode (macOS 26)
  • Toggle between glass and solid

📋 Organization

  • Multiple lists (create/rename/delete)
  • Labels with color + icon (per list)
  • Sort: custom order or by due date
  • Filter by label in sort bar
  • Grouped: Overdue / Today / Upcoming
  • Search with real-time filtering
  • Badge count for due tasks

✨ Delight

  • Confetti on task completion
  • Hover effects on cards
  • Smooth animations everywhere
  • Custom calendar & time pickers
  • First-launch onboarding

🔄 Reminders Sync

  • Two-way sync with Apple Reminders
  • iCloud sync across all devices — free
  • Siri & Apple Watch support
  • Pick which Reminders lists to sync
  • Auto-creates "Docket" list in Reminders
  • Conflict resolution (last-write-wins)

🔁 Recurring Tasks

  • Daily, weekly, or monthly repeat
  • Configurable interval (every N days/weeks/months)
  • Auto-creates next task on completion
  • Frequency shown on task cards

🚀 Quick Start

# Build
./build.sh

# Run
open build/Docket.app

# Install permanently
cp -r build/Docket.app /Applications/

Requirements: macOS 14+ and Xcode Command Line Tools (xcode-select --install)


⌨️ Keyboard Shortcuts

Shortcut Action
⌘⇧D Toggle Docket (configurable)
⌘⇧D × 2 Quick-add: jump to new task
⌘N New task (popover open)
Esc Go back
Right-click icon Context menu

📅 Smart Dates

Type natural language in the due date field:

Input Parsed as
today / eod Today 5:00 PM
tonight Today 9:00 PM
noon Today 12:00 PM
this afternoon Today 2:00 PM
later 3 hours from now
tomorrow 3pm Tomorrow 3:00 PM
day after tomorrow +2 days 9:00 AM
next friday Next Friday 9:00 AM
monday 9:30am Next Monday 9:30 AM
in 2 hours 2 hours from now
in 3 days 3 days from now
this weekend Saturday 10:00 AM
next week Next Monday 9:00 AM
end of week / eow Friday 5:00 PM

🔄 Reminders Integration

Docket syncs bidirectionally with Apple Reminders — giving you iCloud sync, Siri, and Apple Watch for free.

How it works:

  1. Toggle "Sync with Reminders" in Settings
  2. Docket creates a "Docket" list in Apple Reminders (or links to an existing one)
  3. All tasks push to Reminders automatically
  4. Changes made in Reminders (or via Siri/Watch) pull back into Docket

What syncs:

✅ Synced ❌ Docket-only
Title, notes Labels
Due date Sort order
Priority Custom themes
Completion status
Recurrence rules

Multi-list sync: You can pick additional Reminders lists to sync — each maps to a Docket list. Tasks flow both ways.

Conflict resolution: Last-modified-date wins. If you edit a task in both Docket and Reminders between syncs, the most recent change is kept.


🎨 Themes

Light Dark Custom Glass
White, Lavender, Rose, Peach, Lemon, Mint, Sky, Periwinkle Night Any color via hue + intensity Liquid Glass on/off

All UI elements — buttons, toggles, pills, calendar, toast — adapt to the theme's accent color. With Liquid Glass enabled, the system translucent material shows through with a subtle theme tint.


🏗 Architecture

Docket/
├── DocketApp.swift                 # App entry, menu bar, hotkey, context menu
├── Models/
│   ├── TodoItem.swift              # Task model (Codable, backward-compatible)
│   ├── TaskList.swift              # List/project model + DocketExport
│   ├── TaskLabel.swift             # Label model with color + icon
│   ├── ReminderOffset.swift        # Notification timing options
│   ├── AppTheme.swift              # 9 themes + custom + ThemeManager
│   ├── SortMode.swift              # Custom vs By Due Date
│   └── Strings.swift               # L10n localization strings
├── Services/
│   ├── Store.swift                 # JSON persistence, CRUD, lists, labels, reorder
│   ├── NotificationManager.swift   # UNUserNotifications scheduling
│   ├── RemindersSync.swift         # Two-way Apple Reminders sync (EventKit)
│   ├── DateParser.swift            # Natural language → Date parsing
│   └── DueDateFormatter.swift      # Relative date display formatting
└── Views/
    ├── ContentView.swift           # Router, theme, onboarding, keyboard nav
    ├── TaskListView.swift          # Main list, sort bar, label filter, undo toast
    ├── TaskRowView.swift           # Task card with priority bar + labels
    ├── SwipeableTaskRow.swift      # Swipe gestures + reorder arrows
    ├── ConfettiView.swift          # Completion celebration
    ├── UndoToast.swift             # Undo notification toast
    ├── CalendarPickerView.swift    # Custom themed calendar
    ├── TimePickerView.swift        # Custom themed time selector
    ├── ReminderPickerView.swift    # Themed reminder dropdown
    ├── PriorityPickerView.swift    # Colored priority pills
    ├── LabelPickerView.swift       # Multi-select label pills
    ├── ThemedToggle.swift          # Custom accent toggle switch
    ├── CreateTaskView.swift        # New task + smart dates + labels
    ├── TaskDetailView.swift        # Edit task + reminders + labels
    ├── CompletedTasksView.swift    # Done tasks with restore
    ├── SettingsView.swift          # Preferences + lists + labels + export
    └── OnboardingView.swift        # First-launch guide

Design Decisions

Decision Rationale
JSON file, not SwiftData Builds with swiftc alone — no Xcode.app needed
No Dock icon LSUIElement = true — stays out of the way
Popover, not window Dismisses on click-outside, feels native
Custom pickers & toggles Native controls don't respect themes
Carbon hotkey API Only way to register global shortcuts on macOS
@Observable Store Single source of truth, reactive UI updates
Separate tap/swipe targets Prevents gesture conflicts in popover

Tech Stack

Layer Technology
UI SwiftUI
App Lifecycle AppKit (NSStatusItem, NSPopover)
Persistence JSON → Application Support
Notifications UserNotifications
Reminders Sync EventKit
Global Hotkey Carbon HIToolbox
Launch at Login ServiceManagement
Build Single swiftc invocation

📦 Data

Tasks, lists, and labels are stored at:

~/Library/Application Support/Docket/
├── tasks.json
├── lists.json
└── labels.json

Settings use UserDefaults (standard macOS preferences).


🔒 Permissions

Permission Why When
Notifications Task reminders First launch
Accessibility Global keyboard shortcut When using hotkey
Reminders Two-way sync with Apple Reminders When enabling sync

📄 License

MIT — see LICENSE


Made with ☕ by @santoru

About

A beautiful, minimal task manager that lives in your macOS menu bar. Create tasks with natural language dates, organize with labels and multiple lists, swipe to complete, and sync with Apple Reminders for iCloud, Siri, and Apple Watch support.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors