Skip to content

Commit 781ea28

Browse files
Release v0.2.0: Task comments, recurring calendar, system tray, app branding
New features: - Task comments with date-stamped entries and last-comment summary - Recurring tasks expanded on calendar (daily/weekly/monthly/yearly) - System tray mode replacing CMD window (Windows/macOS/Linux) - Ironpad logo as exe icon, tray icon, favicon, and header logo Technical changes: - Backend restructured for dual-mode: dev (API-only) / prod (tray + server) - tray-item crate for cross-platform tray, winresource for icon embedding - Calendar view refactored with CalendarEntry interface for recurring merging - Added CHANGELOG.md, build-local.ps1, version bumped to 0.2.0 Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent b150a24 commit 781ea28

29 files changed

+1729
-213
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,8 @@ data/projects/*/
4141
# === Stray root lock file (frontend/package-lock.json is kept for CI) ===
4242
/package-lock.json
4343

44+
# === Local build output ===
45+
release/
46+
4447
# === Generated images (article assets, not source) ===
4548
/assets/

CHANGELOG.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# Changelog
2+
3+
All notable changes to Ironpad are documented here.
4+
5+
## [0.2.0] - 2026-02-16
6+
7+
### Added
8+
- **Task comments** -- date-stamped comment entries per task, stored as YAML in frontmatter. Last comment shown as summary in task list and dashboard cards. Add/delete via API and UI.
9+
- **Recurring tasks on calendar** -- tasks with daily/weekly/monthly/yearly recurrence now appear on the calendar even without an explicit `due_date`. Occurrences are computed from the anchor date (`due_date` or `created`) and `recurrence_interval`. Recurring entries show with a dashed border and recurrence icon to distinguish from regular due-date tasks.
10+
- **System tray mode** -- production binary runs in the system tray instead of a console window. Tray menu with "Open in Browser" and "Quit". No CMD window on Windows in release builds (`windows_subsystem = "windows"`). Server runs on a background thread with the tray event loop on the main thread for cross-platform safety.
11+
- **App icon and branding** -- Ironpad logo embedded in the Windows executable (Explorer icon + tray icon) via `winresource`. Favicon and logo added to the web UI (browser tab + top bar header).
12+
- **Local build script** -- `build-local.ps1` for building a testable release package locally.
13+
14+
### Changed
15+
- Backend `main.rs` restructured for dual-mode operation: development mode runs the server directly (no tray), production mode runs server on background thread with tray on main thread.
16+
- Calendar view refactored to use `CalendarEntry` interface that merges regular due-date tasks with computed recurring occurrences.
17+
18+
### Dependencies
19+
- Added `tray-item = "0.10"` for cross-platform system tray support.
20+
- Added `windows-sys = "0.52"` (Windows only) for loading the embedded icon resource.
21+
- Added `winresource = "0.1"` (Windows build dependency) for embedding the icon in the .exe.
22+
23+
---
24+
25+
## [0.1.0] - 2025-12-01
26+
27+
### Added
28+
- Initial release of Ironpad -- local-first, file-based project and knowledge management.
29+
- **Backend**: Rust/Axum API server with dynamic port (3000-3010), WebSocket real-time sync, file watcher, Git auto-commit (60s batching), ripgrep search.
30+
- **Frontend**: Vue 3 SPA with Milkdown WYSIWYG editor, dark/light theme, Pinia state management.
31+
- **File-based tasks**: each task stored as a markdown file with YAML frontmatter (title, completed, section, priority, due_date, tags, subtasks, recurrence).
32+
- **Split-panel task view**: task list with active/backlog/completed sections, detail editor with markdown, due date picker, tag system, subtasks, recurrence picker.
33+
- **Calendar view**: month grid showing tasks by due date with color-coded urgency and daily note indicators.
34+
- **Dashboard**: cross-project home page with active task summaries per project.
35+
- **Daily notes**: date-based notes with templates.
36+
- **Git panel**: commit history with diffs, working directory changes, push/fetch with ahead/behind indicators.
37+
- **Project notes**: split-panel notes view per project.
38+
- **Search**: Ctrl+K search panel with ripgrep-powered full-text search.
39+
- Cross-platform builds (Windows, macOS, Linux) via GitHub Actions.

README.md

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@
88
![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)
99
![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-lightgrey)
1010
![Rust](https://img.shields.io/badge/rust-1.70%2B-orange)
11-
![Version](https://img.shields.io/badge/version-0.1.0-green)
11+
![Version](https://img.shields.io/badge/version-0.2.0-green)
1212

1313
Ironpad stores all your notes, projects, and tasks as plain Markdown files. No cloud services, no vendor lock-in -- your data stays on your machine in a format you can read and edit with any text editor. Every change is automatically versioned with Git.
1414

1515
![Ironpad Screenshot](docs/screenshot.jpg)
1616

17-
> **v0.1.0 -- Early Release.** This is the first public release. It's functional and we use it daily, but expect rough edges. Bug reports and feature requests are welcome via [Issues](https://github.com/OlaProeis/ironPad/issues).
17+
> **v0.2.0** -- Task comments, recurring tasks on calendar, system tray mode, and app branding. See [CHANGELOG.md](CHANGELOG.md) for details.
1818
1919
---
2020

@@ -24,14 +24,15 @@ Ironpad stores all your notes, projects, and tasks as plain Markdown files. No c
2424
- **Local-first** -- Works fully offline, no internet required
2525
- **Git integration** -- Automatic version control with 60-second commit batching, full diff viewer, push/fetch
2626
- **WYSIWYG editing** -- Milkdown editor with real-time markdown rendering and formatting toolbar
27-
- **Project management** -- Organize tasks and notes by project with due dates, tags, subtasks, and recurrence
28-
- **Calendar view** -- Month grid showing tasks by due date with color-coded urgency
27+
- **Project management** -- Organize tasks and notes by project with due dates, tags, subtasks, recurrence, and comments
28+
- **Calendar view** -- Month grid showing tasks by due date with color-coded urgency; recurring tasks automatically expanded across the month
2929
- **Dashboard** -- Cross-project overview with active task summaries
3030
- **Daily notes** -- Quick capture with templates for daily journaling
3131
- **Real-time sync** -- WebSocket-based live updates; edit in VS Code, see changes in the browser instantly
3232
- **External editing** -- Full support for VS Code, Obsidian, Vim, or any text editor
3333
- **Search** -- ripgrep-powered full-text search across all files (Ctrl+K)
3434
- **Dark theme** -- Beautiful dark UI by default with light mode toggle
35+
- **System tray** -- Runs quietly in the system tray (Windows, macOS, Linux); no console window in release builds
3536
- **Tiny footprint** -- 5 MB binary, ~20 MB RAM, sub-second startup
3637

3738
## Quick Start
@@ -86,14 +87,16 @@ Open http://localhost:5173 in your browser.
8687

8788
Ironpad is under active development. Here's what's planned:
8889

90+
- [x] Task comments and activity summary
91+
- [x] Recurring tasks on calendar (daily/weekly/monthly/yearly expansion)
92+
- [x] System tray mode (Windows, macOS, Linux)
8993
- [ ] UI polish and animations
9094
- [ ] Tag extraction and filtering across projects
9195
- [ ] Backlinks between notes
9296
- [ ] Graph view of note connections
9397
- [ ] Export to PDF / HTML
9498
- [ ] Custom themes
9599
- [ ] Global hotkey (Ctrl+Shift+Space)
96-
- [ ] System tray mode
97100
- [ ] Kanban board view for tasks
98101

99102
See [CHECKLIST.md](docs/ai-workflow/CHECKLIST.md) for detailed implementation status.

ROADMAP.md

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,30 @@
11
# Ironpad Roadmap
22

3-
## Release 0.2.0 (Next)
3+
## Release 0.2.0 (Current)
44

5-
### Planned Features
5+
### Features
66

77
#### 1. Task comments & activity summary
88
- **Comment section** per task with date-stamped entries
9-
- Store comments (e.g. in task file as YAML sequence or dedicated section)
10-
- **Last comment as summary** — show the most recent comment/activity in the main task list and dashboard to indicate last action or status
11-
- Enables quick status updates without editing the full description
9+
- Store comments as YAML sequence in task frontmatter
10+
- **Last comment as summary** -- most recent comment shown in task list and dashboard cards
11+
- Add/delete comments via API and UI, newest-first display with relative timestamps
1212

1313
#### 2. Recurring tasks on the calendar
14-
- **Bug/feature gap**: Tasks with daily/weekly recurrence but no explicit `due_date` currently do not appear on the calendar (calendar only shows tasks with `task.due_date`)
15-
- **Change**: Expand recurring tasks into the calendar for the visible month:
16-
- **Daily** — show on every day in the month (or cap at reasonable limit)
17-
- **Weekly** — show on the matching weekday(s) in the month
18-
- **Monthly** — show on the day-of-month if set, else treat as “floating”
19-
- Requires frontend logic to compute occurrences from `recurrence`, `recurrence_interval`, and optionally `due_date` / `created`
14+
- Tasks with daily/weekly recurrence now appear on the calendar (previously required explicit `due_date`)
15+
- Recurring tasks expanded into the visible month grid (daily/weekly/monthly/yearly)
16+
- Anchor date: `due_date` if set, otherwise `created`; respects `recurrence_interval`
17+
- Recurring occurrences shown with dashed border and recurrence icon
2018

2119
#### 3. System tray mode
22-
- **Replace CMD window** with a system tray icon (Windows, macOS, Linux)
20+
- System tray icon replaces CMD window (Windows, macOS, Linux)
2321
- Tray menu: **Open in Browser** | **Quit**
2422
- No console window on Windows in release builds
25-
- Implementation doc: [docs/system-tray-implementation.md](docs/system-tray-implementation.md)
23+
- Server runs on background thread; tray event loop on main thread (cross-platform safe)
24+
25+
#### 4. App branding
26+
- Ironpad logo as system tray icon and Windows exe icon
27+
- Favicon and logo in the web UI (browser tab + header)
2628

2729
---
2830

@@ -31,18 +33,18 @@
3133
Ideas that fit the current architecture and local-first design:
3234

3335
### High fit (0.3.x)
34-
- **Calendar drag-and-drop** reschedule tasks by dragging onto a new date (already listed in ai-context)
35-
- **Week / day calendar views** alternative to month view for denser task planning
36-
- **Sort task list by due date / priority** alongside current created-date sorting
37-
- **Overdue indicator** clearer overdue badge or count in sidebar and dashboard
36+
- **Calendar drag-and-drop** -- reschedule tasks by dragging onto a new date
37+
- **Week / day calendar views** -- alternative to month view for denser task planning
38+
- **Sort task list by due date / priority** -- alongside current created-date sorting
39+
- **Overdue indicator** -- clearer overdue badge or count in sidebar and dashboard
3840

3941
### Medium fit (0.4.x)
40-
- **Quick-add task** global or dashboard shortcut to create a task without opening a project
41-
- **Bulk actions** complete multiple tasks, move section, add/remove tags in one go
42-
- **Task templates** create tasks from predefined templates (e.g. Meeting prep”, “Review)
43-
- **Tag extraction and cross-project filtering** surface and filter by tags across all projects
42+
- **Quick-add task** -- global or dashboard shortcut to create a task without opening a project
43+
- **Bulk actions** -- complete multiple tasks, move section, add/remove tags in one go
44+
- **Task templates** -- create tasks from predefined templates (e.g. "Meeting prep", "Review")
45+
- **Tag extraction and cross-project filtering** -- surface and filter by tags across all projects
4446

45-
### Longer term (Phase 6+)
47+
### Longer term
4648
- UI polish and subtle animations
4749
- Responsive sidebar / mobile-friendly layout
4850
- Global hotkey (e.g. Ctrl+Shift+Space)
@@ -56,7 +58,7 @@ Ideas that fit the current architecture and local-first design:
5658

5759
## Version history
5860

59-
| Version | Status | Notes |
60-
|---------|---------|----------------------------------------------------|
61-
| 0.1.0 | Current | First public release, core features in place |
62-
| 0.2.0 | Planned | Comments, recurring tasks on calendar, system tray |
61+
| Version | Status | Date | Notes |
62+
|---------|----------|------------|----------------------------------------------------------|
63+
| 0.1.0 | Released | 2025-12-01 | First public release, core features in place |
64+
| 0.2.0 | Current | 2026-02-16 | Comments, recurring calendar, system tray, app branding |

ai-context.md

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ ironpad/
6767
## Implemented Features
6868

6969
### Backend
70-
- API-only server (no frontend serving, no browser auto-open)
70+
- **Dual-mode server**: API-only in development; frontend-serving + system tray in production
7171
- Dynamic port (3000-3010)
7272
- Notes CRUD with atomic writes
7373
- Frontmatter auto-management
@@ -79,12 +79,13 @@ ironpad/
7979
- Git remote info (ahead/behind tracking), fetch support
8080
- Projects API with notes management
8181
- **File-based Tasks API** — each task is a markdown file with frontmatter
82-
- Fields: id, title, completed, section, priority, due_date, is_active, tags, parent_id, recurrence, recurrence_interval
82+
- Fields: id, title, completed, section, priority, due_date, is_active, tags, parent_id, recurrence, recurrence_interval, comments
8383
- Rich text descriptions with markdown support
8484
- Sorted by created date (stable ordering)
8585
- **Subtasks** — tasks with `parent_id` link to a parent task
8686
- **Tags** — YAML sequence in frontmatter, per-task labels for filtering
8787
- **Recurring tasks** — when completing a recurring task, auto-creates next instance with advanced due date
88+
- **Comments** — date-stamped comment entries stored as YAML sequence in frontmatter; last comment shown as summary in list/dashboard
8889
- Daily notes API (`/api/daily`, `/api/daily/today`, `/api/daily/:date`)
8990
- Assets API (upload + serve)
9091

@@ -113,9 +114,14 @@ ironpad/
113114
- **Tag filter bar** — click tags to filter task list
114115
- **Subtasks** — expandable subtasks under parent tasks, add subtask inline
115116
- **Recurrence picker** — set daily/weekly/monthly/yearly recurrence
117+
- **Task comments** — date-stamped comments section in task detail, newest first, add/delete
118+
- **Last comment summary** — most recent comment shown in task list and dashboard cards
116119
- Inline title editing (double-click)
117-
- **Calendar view** — month grid showing tasks by due date
120+
- **Calendar view** — month grid showing tasks by due date + recurring task expansion
118121
- Tasks with due dates plotted on calendar cells
122+
- **Recurring tasks expanded** — daily/weekly/monthly/yearly tasks shown on computed occurrences
123+
- Recurring occurrences use anchor date (`due_date` or `created`), respect `recurrence_interval`
124+
- Recurring entries shown with dashed border and ↻ icon to distinguish from regular tasks
119125
- Daily notes shown as blue dots
120126
- Color-coded urgency (overdue, today, soon)
121127
- Month navigation + Today button
@@ -150,6 +156,8 @@ GET/POST /api/projects/:id/tasks
150156
GET/PUT/DEL /api/projects/:id/tasks/:task_id
151157
PUT /api/projects/:id/tasks/:task_id/toggle
152158
PUT /api/projects/:id/tasks/:task_id/meta
159+
POST /api/projects/:id/tasks/:task_id/comments
160+
DELETE /api/projects/:id/tasks/:task_id/comments/:index
153161
154162
GET /api/tasks # All tasks across projects
155163
GET /api/daily
@@ -224,12 +232,25 @@ WS /ws
224232

225233
---
226234

227-
## Not Yet Implemented (Phase 6+)
235+
## Implemented in Phase 6
236+
237+
- **Recurring tasks on calendar** — frontend expands daily/weekly/monthly/yearly tasks into the visible month grid
238+
- Anchor date: `due_date` if set, otherwise `created`; respects `recurrence_interval`
239+
- Deduplicates against regular due-date entries; visual indicator (dashed border, ↻ icon)
240+
- **System tray mode** — production binary runs in system tray (Windows, macOS, Linux)
241+
- `#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]` hides console on Windows
242+
- Server on background thread, tray event loop on main thread (cross-platform safe)
243+
- Tray menu: "Open in Browser" / "Quit"
244+
- Uses `tray-item` crate with platform-specific icon loading (`windows-sys` on Windows)
245+
- Development mode unchanged (no tray, API-only)
246+
247+
---
248+
249+
## Not Yet Implemented (Phase 7+)
228250

229251
- UI polish and animations
230252
- Responsive sidebar
231253
- Global hotkey (Ctrl+Shift+Space)
232-
- System tray mode
233254
- Backlinks between notes
234255
- Graph view
235256
- Export (PDF / HTML)
@@ -262,12 +283,14 @@ WS /ws
262283
| Project note ID | `{slug}-index` format |
263284
| Task storage | Individual .md files in `tasks/` folder |
264285
| List sorting | By created date (stable, not affected by edits) |
265-
| Backend mode | API-only (no frontend serving) |
286+
| Backend mode | API-only (dev); frontend-serving + system tray (production) |
266287
| Theme | Dark by default, toggle to light, persists to localStorage |
267288
| Tags | YAML sequence in frontmatter, project-scoped filtering |
268289
| Subtasks | Separate task files with `parent_id` field linking to parent |
269290
| Recurring tasks | On completion, backend auto-creates next instance with advanced due date |
270-
| Calendar | Pure frontend month grid, tasks filtered by `due_date` presence |
291+
| Calendar | Pure frontend month grid, tasks by `due_date` + recurring expansion |
292+
| System tray | `tray-item` crate; main thread tray, background thread server; `windows-sys` for icon on Windows |
293+
| Task comments | YAML sequence in frontmatter, date-stamped, last comment as list/dashboard summary |
271294
| Dashboard | Home route `/`, loads all projects + all tasks for cross-project summary |
272295

273296
---

0 commit comments

Comments
 (0)