Skip to content
lukr-99Public

About

One planner for tomorrow's tasks and every goal: an Android app, a Windows tray app and a Claude connector on Supabase

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

GoalMaker

Plan tomorrow's tasks and keep daily, weekly, monthly and yearly goals alive, on an Android phone and a Windows PC that share one Supabase backend. Claude joins through a connector. The product spec is docs/spec.md; the plan is docs/roadmap.md.

Status

M0 to M10 are built; 1.14.0 is the latest release. What works today, on both apps unless it says otherwise:

  • Delivery (M0): sign-in with an emailed 6-digit code (docs/sign-in.md), or on the PC by scanning its QR code with the signed-in phone (ADR 0020), sessions kept across restarts, a signed update channel on GitHub Releases that both apps verify before installing, the migration chain with full-chain, isolated and row-security tests, CI for every part and a tag-driven release.
  • Sync (M1): a SQLite replica with an outbox on each device, offline work, Realtime refresh (docs/sync.md).
  • Tasks (M2): Today, Tomorrow and Inbox, the bottom bar with shortcuts and a live preview, Plan tomorrow, repeating tasks (docs/repeating.md), reminders with quiet hours and snooze (docs/reminders.md), areas and tags with filters, a task's detail view with notes in light Markdown that save on their own and a checklist, the searchable archive (docs/archive.md), the four switchable themes, and on Windows the tray's Today flyout and a global quick-add shortcut.
  • Claude (M3): the connector, an MCP Edge Function Claude reaches through a secret link, with the activity log and undo (docs/connector.md).
  • Goals, habits, reviews, stats (M4): the year to day goal cascade with three progress modes (docs/goals.md), habits with cadences, check-ins, streaks, a heatmap, skips and fails (docs/habits.md), limits to stay under for a day, a week or a month (typed in the bottom bar too: "at most 2 takeaways a week"), an amount filled to its target in one tap, the guided weekly, monthly and yearly review with a rotating prompt library and prompts that react to the period's data (docs/reviews.md), review reminders, and the stats screen (docs/stats.md).
  • Projects, calendar, widgets and the desktop (M5): projects with a Backlog, To do, Doing, Done and Dropped board and short item ids like GM-12 (docs/projects.md), a week and month calendar with dragging and today and tomorrow picked out (docs/calendar.md), Today, Habits, Goals, Motivation, Life goals and quick-add widgets on Android (docs/widgets.md), projects through the connector, where Claude finds the project by the repository or folder it is working in (docs/connector.md), sharing text or a link from any Android app into a task (docs/composer.md), the pinnable Today and Habits mini windows on Windows (docs/mini-windows.md), and starting with Windows, with Add to Startup Profiles when that app is installed (docs/startup.md).
  • v1 (M6): a versioned backup and a checked restore (docs/backup.md), updates from the latest GitHub Release, the Problems place in Settings, and hardening: a session the server refuses sends the app to sign-in with the outbox kept, and a replica that won't open says so.
  • Quick chat (M7): the bottom bar switches between quick-add and a chat that plans with the connector's everyday tools through the assistant Edge Function (docs/assistant.md).
  • Wants, the Letter and Tally (M8): pinned places and a Places hub with room to grow; Wants, a wishlist where everything waits out a cooldown before it is bought or dropped, with a Needs tab for things to buy now (docs/wants.md); the Letter, a weekly letter a Claude routine writes from get_review_digest that opens the review (docs/letter.md); and Tally, where time went on the phone and the PC by category and project, with only daily minutes leaving the device, a To sort list and an 8-week trend (docs/tally.md).
  • Life goals (M9): what the owner wants in the long run, with why it matters, a by date and pictures, a why reminder now and then and a picture widget (docs/life-goals.md).
  • Calendar events (M10): trips and holidays as bars across their days, "day 2 of 4" on Today, and adding from the calendar's bottom bar on one day or several (docs/calendar.md).

Next: the owner's board. GoalMaker is for personal use only (ADR 0011). The plan is in docs/roadmap.md.

Releases are on GitHub, and both apps update from the latest one. GoalMaker is built for one person, so there is no server of ours to join: running it means standing up your own project, sender and signing keys, which docs/setup/your-own-copy.md walks through from a clean clone.

Parts

Folder What Stack
android/ The phone app Kotlin, Jetpack Compose, Material 3 Expressive, supabase-kt
windows/ The PC app with tray .NET 10 WPF, DotNetLib.Tray (WPF UI, H.NotifyIcon), Supabase C# client
supabase/ Database migrations, tests, config Postgres, Supabase CLI (local Docker stack)
contracts/ Rules both apps must implement the same way JSON schemas and golden vectors
tools/ Repository, migration, release and signing tools Python, PowerShell

Requirements

  • Windows 10/11 for development (the Windows app and the installer are Windows only).
  • JDK 21, the Android SDK (Gradle downloads compile SDK 37 by itself), an emulator or a phone.
  • .NET SDK 10.0.200 or later in the 10.0 band (windows/global.json).
  • Node.js 22+ for the pinned Supabase CLI (npm install), Docker Desktop for the local stack.
  • Python 3.11+, OpenSSL (ships with Git for Windows), Inno Setup 6 for the installer.

Build and test

npm install                                  # pinned Supabase CLI
npx supabase start                           # local stack on ports 553xx
python tools/supabase_migrations.py test     # migration chain, isolated steps, pgTAP

android\gradlew.bat -p android testDebugUnitTest assembleDebug lintDebug
dotnet test --solution windows\GoalMaker.slnx

python tools/validate_repository.py --root .

Running the apps against the local stack, including reading sign-in codes from the local mail viewer, is in docs/setup/local-development.md. How GitHub Actions splits and skips these checks is in docs/setup/ci.md.

Architecture

See ARCHITECTURE.md: the parts, module boundaries inside each app, composition roots, data flow and delivery. Decisions are recorded in docs/adr/.

Data safety

  • Source of truth: the Supabase project (ADR 0002): profiles, areas, tags, tasks, steps, reminders, goals, habits, projects, wants, Tally totals, life goals, events and the activity log, each row visible only to its owner. Deleted rows stay as tombstones for 90 days so every device learns about them, then a nightly job purges them.
  • Device replicas: each app keeps a SQLite copy with an outbox of unsent changes (one file per backend). Signing out pushes first and asks before discarding anything unsent.
  • Migrations: immutable supabase/migrations/0001_description.sql files, locked by checksum in supabase/migrations.lock.json, each tested from 0001 and in isolation with fixtures.
  • Local data: the Windows app keeps its session (DPAPI-encrypted), settings and crash log in %LOCALAPPDATA%\GoalMaker (GoalMaker-dev for dev builds); the Android app keeps its session, settings and its own files/crash.log in private app storage, excluded from Android backups. Life goal pictures are cached in files/life-goal-pictures on the phone and in a pictures- folder per backend under the same Windows folder.
  • Backup: a versioned full export both apps read and a checked restore that merges and never wipes, plus a weekly automatic export on Windows (docs/backup.md). The raw Tally record never leaves its device and is in no backup; its daily minutes are. Life goal pictures are files in a private Storage bucket, not in the backup; their rows are (ADR 0018).

Delivery

  • Versions: one version.properties for everything. Local builds are X.Y.Z-dev, never offered updates; release builds are plain X.Y.Z.
  • Android: a signed APK, sideloaded. Debug is com.goalmaker.app.debug, release com.goalmaker.app.
  • Windows: a per-user Inno Setup installer (framework-dependent, about 9 MB) that can start GoalMaker in the tray at sign-in.
  • Updates: tag vX.Y.Z and the release workflow publishes the APK, the installer and a signed manifest as a GitHub Release. Apps read the latest release and trust it only through the manifest's signature (ADR 0010). Settings opens the same release for a manual download.

Setup: docs/setup/signing-and-releases.md.

License

PolyForm Noncommercial 1.0.0, the CodePrint default.

About

One planner for tomorrow's tasks and every goal: an Android app, a Windows tray app and a Claude connector on Supabase

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages