Skip to content

santoru/docket

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Docket

A beautiful, minimal task manager that lives in your macOS menu bar.
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

🚀 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

🎨 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
│   ├── 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
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

📄 License

MIT — see LICENSE


Made with ☕ by @santoru

About

A beautiful, minimal task manager that lives in your macOS menu bar. No dock icon. No clutter. Just click the ✓ and get things done.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors