Skip to content

Navigation Menu

Sign in
Sign up

Repository files navigation

DayPlan app icon

DayPlan

A macOS todo app built on one idea: A daily plan for your todos.

macOS 15+ Swift 6 No dependencies MIT license

DayPlan main window



Overview · Why I built it · Install · Languages · How it works · Your data · Contributors · License

Overview

  • A day you decide on: Todos due today turn up on their own, but you can also pin something into today or push it out again.
  • A Today pane with a day arc: Fills as you finish things, so where you are is one glance.
  • A menu bar popover: Showing what's still open. Same process, easy overview anytime.
  • Lists with colours, priorities, due dates and notes: Add custom lists (e.g. per project), organize with colors, leave notes, priorities, due dates and more.
  • Time you can paste into a timesheet: Log work on a todo as 1.5h, 30 min, or 1:30; it snaps to 15 minutes. Right-click a list to copy that day's lines as - Todo (2h).
  • Local and yours: One SwiftData store on your disk, no account, no network, no telemetry.
  • No third-party dependencies: Plain SwiftUI and SwiftData on macOS.

Why I built it

I used Microsoft Teams Planner at work for a long time and at some point it frustrated me more than it gave me any benefit. Besides critical bugs I encountered (todo items dissapeared/were not saved, app crashes with data loss), I also felt like the concept was not thought through. I don't need much to track my todos, but e.g. a seperation by project or topic was missing from the Planner. A simple way to get started in the morning by checking my most relevant todos for the day and adding them to the today-view was a annoying chore. All todos were inside a single list which was quite large and I had to add the project name to the todo item, making titles uneccessary long.

Install

Needs macOS 15 or newer and a Swift 6 toolchain (Xcode 16).

git clone https://github.com/benedom/DayPlan.git
cd DayPlan
./build.sh
open DayPlan.app

build.sh does a release build, renders the icon, assembles the bundle and signs it ad-hoc.

Gatekeeper

Ad-hoc signing is fine when you build it yourself. A copy that came through a download will be quarantined and won't open. Right-click it and choose Open, or clear the flag:

xattr -dr com.apple.quarantine DayPlan.app

Languages

The interface is English only. There are no localization files yet, so every string in the UI is hardcoded English.

Adding a language means pulling the UI strings into a String Catalog. Roughly 120 of them, mostly in RootView.swift, TodoListPane.swift, TodoDetailPane.swift and MenuBarView.swift. Pull requests welcome.

How it works

The daily plan. Todo carries a pinnedDay and an excludedDay. Either one overrides the due-date rule, for that day only. The whole thing is about fifteen lines in Models.swift, under isInDailyPlan(on:includeOverdue:).

Tracked time. Each log is a TimeEntry on the todo, always a multiple of 15 minutes. TimeParser.swift turns free-form input into that grid. Right-click a list to copy a day's work as clipboard-ready - Todo (2h) lines.

Backups you can read without the app. Plain versioned JSON, and importing either merges or replaces (Backup.swift). Time entries travel with the todos.

One set of animation curves. Every timing in both UIs comes from Motion.swift, so a row in the menu bar moves like the same row in the main window.

One process. WindowGroup and MenuBarExtra live in the same App and share a single ModelContainer (DayPlanApp.swift). No sync code, because there's nothing to sync.

Your data

It's all in ~/Library/Application Support/DayPlan/DayPlan.store. No network, no telemetry, no account. Anything recovered from a broken store ends up in a Quarantined/ folder next to it.

Two environment variables move that out of the way, which is how the screenshots above are made without touching a real store:

DAYPLAN_STORE_DIR=/tmp/dayplan-demo \
DAYPLAN_SEED_DEMO=1 \
 ./DayPlan.app/Contents/MacOS/DayPlan

DAYPLAN_STORE_DIR picks a different store location. DAYPLAN_SEED_DEMO=1 fills it with a sample day, but only when that store is completely empty, so it can never overwrite anything you care about.

Contributors

License

MIT, see LICENSE.

About

Local-first macOS todo app with a day you decide on. SwiftUI, SwiftData, no dependencies.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /