Skip to content

uxlabspk/trackme

Repository files navigation

TrackMe

A personal, local-first productivity desktop app. Notes, recurring meetings, and todos — all stored as plain markdown files in a folder you choose (the vault), so nothing is ever locked away.

Built with Tauri (Rust shell) + React (frontend, built and served with Deno instead of Node).

Prerequisites

  1. Rusthttps://www.rust-lang.org/tools/install
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    
  2. Denohttps://deno.land
    curl -fsSL https://deno.land/install.sh | sh
    
  3. Tauri system dependencies for your OS — see https://v2.tauri.app/start/prerequisites/ (on macOS this is just Xcode command line tools; on Linux you need webkit2gtk, libayatana-appindicator3, etc.; on Windows you need the WebView2 runtime, which ships with Windows 11).

Running it

cd trackme

deno task dev       # launches frontend on :1420
deno task tauri dev # hot-reloads the frontend and opens a native window

First launch shows the Welcome screen → Get Started → pick or create a vault folder. TrackMe creates notes/, meetings/, todos/, and .trackme/ inside it if they don't exist yet.

Building a distributable app

deno task tauri build

Output lands in src-tauri/target/release/bundle/ (a .app/.dmg on macOS, .msi/.exe on Windows, .deb/.AppImage on Linux).

Project layout

trackme/
  src/                    # React frontend
    views/                # Welcome, VaultPicker, MainShell, NotesView,
                           # MeetingsView, TodosView, AgendaView
    components/           # FileTreeList, MarkdownEditor (Milkdown),
                           # RecurrenceEditor
    lib/                  # bridge.ts (Tauri invoke wrappers), types.ts,
                           # frontmatter.ts, todos.ts, appConfig.ts
  src-tauri/              # Rust backend
    src/
      main.rs             # entry point
      lib.rs              # Tauri commands (read/write/delete/rename files,
                           # bootstrap vault, compute recurrence)
      vault.rs            # vault bootstrap + file-tree listing
      recurrence.rs       # RRULE-like recurrence engine (+ unit tests)
    capabilities/main.json # Tauri v2 permission grants
    tauri.conf.json

What's implemented

  • Welcome screen
  • Vault picker + folder bootstrap (notes/, meetings/, todos/, .trackme/)
  • Main app shell/navigation (sidebar: Today / Notes / Meetings / Todos)
  • Notes: create/edit/delete, WYSIWYG markdown editing (Milkdown), syntax-highlighted fenced code blocks (Shiki), YAML frontmatter (title/createdAt/updatedAt/tags)
  • Meetings: create a recurring series, edit an RRULE-like recurrence (freq/interval/days/start/end), see computed occurrences for the next 90 days
  • Todos: create lists, add/check/uncheck/edit/delete items, persisted bidirectionally to - [ ] / - [x] markdown task syntax
  • Agenda / Today view: today's meeting occurrences + all open todos across every list

Implementation notes

  • Recurrence engine (src-tauri/src/recurrence.rs) is hand-written Rust, not a wrapper around a full iCal library. It supports once, daily, weekly (with a day-of-week set and an N-week interval), and monthly (same day-of-month, clamped to the last day when the month is short, e.g. Jan 31 → Feb 28). Two unit tests are included; run them with cargo test inside src-tauri/.
  • Todos round-trip exactly: editing a checkbox in the UI rewrites only that line's [ ]/[x]; any other markdown content in the file (notes above the task list) is preserved as preambleBody and written back untouched.
  • Frontmatter uses gray-matter on the frontend for parsing/serializing YAML, keeping the Rust side purely about file I/O and recurrence math.
  • File writes are debounced (500ms) in Notes/Meetings so typing doesn't hammer the disk, but every field commits to the actual .md file — there's no separate "save" step, matching the vault philosophy.

Known gaps / next steps

  • No search across notes yet.
  • No multi-vault switching UI beyond "switch vault" (which re-runs the picker).
  • No tags/backlinks between notes.
  • No OS-level notifications for upcoming meetings (agenda view is pull-based).

About

Track Me is a native GUI app for todo's, meetings and notes

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors