A local-first productivity desktop app for focused daily planning, time tracking, and project management. Built with Tauri, Astro, and Svelte — no cloud required.
Daily Planning
- Task list for today with duration estimates and progress bar
- Drag tasks into the calendar for visual timeboxing
- Auto-scheduling: fills free time slots automatically
- Board view (Kanban) as an alternative to the day view
Calendar & Time Tracking
- Day view with drag-and-drop scheduling
- Per-task timer with time entry history
- ICS import for external calendar events
- Analytics: tracked vs. planned time per week/category
Projects & Clients
- Project management with Kanban board per project
- Client management with hourly rate and billing overview
- CSV export per client for invoicing
- Project templates for recurring setups
- PDF status reports generated locally via renderreport
Focus & Planning
- Pomodoro timer bound to tasks
- Weekly objectives with task linking
- Guided morning planning and daily shutdown workflow
- Recurring tasks (daily / weekly / monthly)
Data & Privacy
- All data stored locally in IndexedDB — no account, no sync, no telemetry
- Daily JSON snapshots to iCloud (macOS)
- Full JSON export/import at any time
| Layer | Technology |
|---|---|
| Desktop shell | Tauri v2 |
| Frontend framework | Astro 5 + Svelte 4 |
| State management | nanostores |
| PDF report engine | renderreport (Rust + Typst) |
| Storage | IndexedDB (localStorage abstraction) |
| Tests | vitest |
- Node.js 22+
- Rust (stable)
- Tauri CLI:
cargo install tauri-cli --version "^2" - renderreport cloned as a sibling directory:
GitHub/
├── etasks/ ← this repo
└── renderreport/ ← required for PDF reports
# Install frontend dependencies
npm install --prefix ui
# Install root dependencies (optional — no longer needed with Tauri)
# Generate app icons (already committed, only needed after icon changes)
npm run iconscargo tauri devStarts the Astro dev server on port 4321 and opens the Tauri window.
cargo tauri buildProduces a native macOS .app bundle in src-tauri/target/release/bundle/.
npm test
# or
npm run test --prefix uietasks/
├── src-tauri/ # Tauri Rust backend
│ ├── src/
│ │ ├── commands/
│ │ │ ├── export.rs # File export, iCloud sync, ICS file dialog
│ │ │ ├── notification.rs
│ │ │ └── report.rs # PDF generation via renderreport
│ │ ├── lib.rs
│ │ └── main.rs
│ ├── capabilities/
│ └── tauri.conf.json
├── ui/ # Astro + Svelte frontend
│ └── src/
│ ├── components/ # Svelte UI components
│ ├── domain/ # Pure domain logic + tests
│ ├── lib/ # Services (export, ICS, reports, storage)
│ ├── stores/ # nanostores state
│ └── styles/ # Global CSS
└── assets/
└── icon.svg
CI runs on every push to main:
- Tests (vitest) + Astro build
cargo checkfor the full Tauri + renderreport dependency tree
Release builds trigger automatically on version tags:
git tag v0.1.0-alpha.1
git push origin v0.1.0-alpha.1This builds and uploads to GitHub Releases:
eTasks_0.1.0-alpha.1_aarch64.dmg— macOS Apple SiliconeTasks_0.1.0-alpha.1_x64.dmg— macOS InteleTasks_0.1.0-alpha.1_x64_en-US.msi— Windows installereTasks_0.1.0-alpha.1_x64-setup.exe— Windows NSIS
Releases are ad-hoc signed (no paid Apple Developer account). macOS will warn on first launch:
- Right-click the app → Open → confirm
- Or: System Settings → Privacy & Security → Open Anyway
- Or via Terminal:
xattr -cr /Applications/eTasks.app
After the first launch, the app opens normally.
MIT