Commit graph

108 commits

Author SHA1 Message Date
Tristan Michael 8bfbbd0444 feat(flutter): add project scaffold and Linux runner 2026-03-31 07:02:51 -07:00
SteelDynamite 2a0fb03421
Merge pull request #9 from SteelDynamite/gui-layout-refinements
feat(gui): refine layout - compact headers, reorganize panels, improve task UX
2026-03-30 16:52:16 -07:00
Tristan Michael 4d762364d5 feat(gui): refine layout - compact headers, reorganize panels, improve task UX
- Standardize header height (h-11) across detail view and main panel
- Move kebab menu below header in task detail view
- Move workspace switcher to drawer header with window drag support
- Move settings button to drawer footer with label
- Add mark-as-completed/restore to kebab menu, remove bottom action bar
- Enlarge checkbox hit target without changing visual size
- Show checkmark animation before task collapse transition

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 16:51:41 -07:00
SteelDynamite 6c09ef6b4c
Merge pull request #8 from SteelDynamite/audit-and-fixes
audit-and-fixes
2026-03-30 16:51:36 -07:00
Tristan Michael b863e025d5 refactor(cli): consolidate output through output module
- Add header(), detail(), item(), blank() functions to output.rs
- Replace all raw println!() calls with output::* equivalents
- Fix {:?} debug format for paths — use .display() for clean output
- Extract print_tasks() helper to deduplicate task display logic
- Consistent formatting: info for empty states, item for list entries
2026-03-30 16:29:57 -07:00
Tristan Michael c32a6fbe8b fix(core): resolve all Clippy warnings
- Replace redundant closures with function references (webdav.rs, sync.rs)
- Use is_some_and instead of map_or(false, ...) (sync.rs)
- Use map instead of and_then(|x| Some(...)) (sync.rs)
- Use if-let instead of single-arm match (webdav.rs)
2026-03-30 16:29:47 -07:00
Tristan Michael 60fbbd75b8 fix(cli): add confirmation prompt before task deletion
Match the existing confirmation pattern used by list delete and
workspace remove commands.
2026-03-30 16:24:46 -07:00
Tristan Michael c138a8bcf6 fix(gui): wire sync credentials, fix memory leak, race condition, add delete confirmations
- Add load_credentials Tauri command and use it in triggerSync() instead
  of passing empty username/password strings
- Replace raw __TAURI_INTERNALS__.invoke() with proper invoke import in
  SettingsScreen
- Wrap window event listeners in $effect() with cleanup to prevent
  memory leak on component remount
- Return created Task from createTask() and use it directly in
  NewTaskInput instead of guessing from array index
- Add confirm() dialogs before deleting tasks, lists, and workspaces
2026-03-30 16:24:46 -07:00
Tristan Michael a54e427cd9 fix(core): sanitize task filenames to prevent path traversal
Replace illegal filesystem characters (/ \ : * ? " < > |) and control
characters with underscores. Fall back to task ID as filename if the
sanitized title is empty.
2026-03-30 16:24:46 -07:00
Tristan Michael 9333ac7825 docs: update documentation, add LICENSE, fix outdated info
- Add GPL-3.0 LICENSE file
- Update README with current project status (all 3 phases), fix structure
- Update PLAN.md Phase 2 API signatures to match actual implementation
- Add WebDAV & Sync section to docs/API.md
- Update docs/DEVELOPMENT.md with Tauri app structure and setup
- Add metadata (description, license, repository) to all Cargo.toml files
- Update .gitignore with node_modules, .env, dist, build entries
- Remove stale Cargo.lock from .gitignore (apps should track it)
- Update example dates from 2025 to 2026 across all docs
- Update CLAUDE.md date to 2026-03-30
2026-03-30 16:24:46 -07:00
SteelDynamite 56e3021281
Merge pull request #7 from SteelDynamite/gui-window-and-task-input
Gui window and task input
2026-03-30 10:11:28 -07:00
Tristan Michael 04758db04e Restyle new task sheet to match task detail view layout
Use the same visual structure as TaskDetailView: large bold title input,
description textarea with notes icon, and date/time row with
DateTimePicker. Uses fixed positioning with a combined backdrop wrapper
to avoid layout shifts and ensure proper slide-up animation.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 10:10:16 -07:00
Tristan Michael 9116ac3e0e Remove maximize button and double-click-to-maximize from title bar
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 10:10:11 -07:00
Tristan Michael 93a3defcdb Switch to opaque frameless window for cross-platform reliability
Transparent windows require platform-specific workarounds (WebView2 on
Windows, compositor support on Linux) and don't work on mobile. Use an
opaque window instead, removing the outer padding, rounded corners, and
drop shadow that depended on transparency.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 10:10:08 -07:00
SteelDynamite 8db4258fe9
Merge pull request #6 from SteelDynamite/gui-enhancements
gui-enhancements
2026-03-30 07:56:52 -07:00
Tristan Michael efe1060798 Add move-task and optional-time items to Phase 3 checklist 2026-03-30 07:54:41 -07:00
Tristan Michael c6895c12ae Add sliding task detail view with custom date/time picker
Replace inline task editing with a full-viewport detail panel that
slides in from the right. Includes editable title, description, custom
calendar-based date/time picker (bottom sheet), kebab menu with delete,
and mark complete/restore button. Simplify TaskItem to remove inline
editing and kebab menu, add chevron hint and onopen callback. Use list
icon for drawer toggle instead of back arrow.
2026-03-30 07:54:35 -07:00
Tristan Michael 0c8c2a0272 Replace settings back button with close button in top right
Move the settings popup close action from a back arrow in the top left
to an X button in the top right, using justify-between for layout.
2026-03-30 07:54:26 -07:00
Tristan Michael ea76f65579 Frameless transparent window with custom title bar
Remove native window decorations and add transparent background with
rounded corners, border, and drop shadow. Add custom close button
(Linux) and minimize/maximize/close (Windows) in the header. Add
programmatic window dragging via mousedown and double-click to maximize.
Install tauri-plugin-os for platform detection. Move sync spinner to
bottom-right corner. Convert drawer layout from vw to cqi units to
support the padding-based shadow approach.
2026-03-30 07:54:17 -07:00
SteelDynamite e5c78ddfde
Merge pull request #5 from SteelDynamite/tauri-gui-redesign
tauri-gui-redesign
2026-03-29 16:10:02 -07:00
Tristan Michael 0b10b7895a Add next items to Phase 3 checklist in PLAN.md 2026-03-29 15:58:11 -07:00
Tristan Michael 0f0ec33408 Animated completed section, updated PLAN.md and CLAUDE.md with current status 2026-03-29 15:56:15 -07:00
Tristan Michael 1cf05584e6 Add smooth task toggle animations with collapse/expand transitions 2026-03-29 15:43:25 -07:00
Tristan Michael 3f6f327c92 Redesign drawer, settings popup, workspace switcher, kebab menus, and task UX polish 2026-03-29 15:03:46 -07:00
Tristan Michael 68dfbb078a Add drag-and-drop task reordering, sliding settings panel, and inline task editing 2026-03-29 13:49:10 -07:00
Tristan Michael f810cfa2a3 Commit to Tauri GUI: remove Flutter/egui, redesign task UI
- Remove Flutter app and egui placeholder crate, commit to Tauri as sole GUI
- Update PLAN.md to replace egui with Tauri across all phases (v4.0)
- Redesign task screen: sliding drawer for list picker, floating FAB for new tasks,
  bottom sheet toast for task creation with title + description fields
- Add description support to create_task Tauri command
- Lighten dark theme to GNOME-style neutral grays, shift primary to cyan-blue
- Fix Wayland compatibility (dev port change)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 09:49:30 -07:00
Tristan Michael 9b0efa8830 dunno 2026-03-28 06:28:14 -07:00
Tristan Michael ec17d6274f tauri and flutter guis 2026-03-17 09:38:53 -07:00
Tristan Michael 087617b47f webdav 2026-03-17 06:51:15 -07:00
Tristan Michael b602f2cbd1 . 2026-03-17 06:31:19 -07:00
Tristan Michael c85e192eb8 progress 2026-03-17 06:22:16 -07:00
Tristan Michael 1d90354fd3 progress of some kind 2026-03-17 05:49:48 -07:00
SteelDynamite db18391307
Merge pull request #3 from SteelDynamite/claude/review-plan-phase-one-011CUoBEM3fR8N3KvmGjch35
Fix Phase 1 documentation issues in PLAN.md
2025-11-04 09:34:05 -08:00
Claude 32ad78ca86
Fix Phase 1 documentation issues in PLAN.md
- Add 'list create' command to features and CLI examples
- Clarify that task titles exclude .md extension in filenames
- Change deliverables from  to - [ ] for consistency with feature checklists
2025-11-04 17:12:40 +00:00
SteelDynamite 63b7a8fb60
Merge pull request #2 from SteelDynamite/claude/cross-platform-tasks-app-011CUW6AEsKoHKCGf1fVnBbU
Claude/cross platform tasks app 011 cuw6 a es ko hkc gf1f vn bb u
2025-11-04 08:36:35 -08:00
Claude 7a9faea287
Simplify task ordering and add workspace management commands
Changes task ordering model:
- Remove SortOrder enum (Manual/ByDueDate)
- Replace with simple group_by_due_date boolean
- Tasks always use manual ordering via task_order array
- Grouping by due date is optional view toggle

Data model changes:
- TaskList.sort_order → TaskList.group_by_due_date: bool
- .listdata.json: "sort_order" → "group_by_due_date": false
- API: set_sort_order() → set_group_by_due_date()
- CLI: sort command → group enable/disable command

Benefits:
- Simpler mental model: always manual order, optional grouping
- Less complex to implement and reason about
- User always has ordering control via task_order
- Grouping is just a view option

Add workspace path management:
- workspace retarget: Update path in config (files already moved)
  Use when files moved externally or different mount point
- workspace migrate: Move files AND update config
  Use to relocate workspace to new folder

Clarify edit command behavior:
- Added note that edit is CLI-only (not mobile/GUI)
- Explains: creates temp file, opens $EDITOR, blocks, parses
- GUI/mobile use get_task() + update_task() directly

workspace remove behavior:
- Only removes from config, files remain on disk
- User responsible for deleting files if desired
2025-11-04 16:19:39 +00:00
Claude 25c7c494fd
Add support for multiple named workspaces
Updates the project plan to support multiple independent task
workspaces, allowing users to maintain separate task folders for
different contexts (e.g., personal vs shared/collaborative).

Key changes:

Data Model:
- AppConfig now contains HashMap of named WorkspaceConfig
- WorkspaceConfig holds path and WebDAV settings per workspace
- current_workspace field tracks active workspace

CLI Features:
- `init` command now creates named workspace
- New workspace management commands:
  - workspace add: Add additional workspaces
  - workspace list: View all workspaces
  - workspace switch: Change current workspace
  - workspace remove: Delete workspace
- All commands support --workspace flag for explicit targeting
- Commands use current workspace by default

Phase 2 (WebDAV):
- Per-workspace WebDAV configuration
- Each workspace can sync to different WebDAV server
- Sync commands are workspace-aware
- Status command shows per-workspace or all workspaces

Phase 3 (GUI):
- Workspace selector dropdown in toolbar
- Quick-switch between workspaces UI
- Workspace setup dialog on first launch
- Settings panel for workspace management
- Per-workspace last opened list tracking

Benefits:
- Separate personal and shared/collaborative task folders
- Different sync configurations per workspace
- Better organization for different contexts
- Flexible folder locations (local, Dropbox, etc.)
2025-11-04 15:53:48 +00:00
SteelDynamite fdbbd19ca5
Merge pull request #1 from SteelDynamite/master-plan
Master plan
2025-11-04 07:35:53 -08:00
Claude 4459b339ff
Add output examples to CLI usage sections
Enhanced CLI Usage Examples in Phase 1 and Phase 2 with realistic
output examples showing:

Phase 1 (Core & CLI):
- Init command with success messages
- Add tasks with UUID confirmation and due date display
- List command showing task status, counts, and due dates
- Complete/edit/delete with confirmation messages
- Config and sort commands with feedback

Phase 2 (WebDAV Sync):
- Interactive setup with prompts and keychain confirmation
- Push/pull with file upload/download progress
- Automatic two-way sync with change indicators
- Status command showing connection, last sync, and pending changes

All examples now show:
- Command prompts ($)
- Realistic UUIDs
- Success indicators (✓)
- Progress/status information
- Colored output representation (checkmarks, arrows)
- Helpful feedback messages

Makes it much clearer what users can expect from the CLI.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:23:41 +00:00
SteelDynamite cb0f7692ab
Clarify sort order options and benefits in PLAN.md
Updated sort order explanation and benefits in PLAN.md.
2025-11-03 13:21:47 -08:00
Claude e1b46198bb
Change 'repeating' to 'recurring' for tasks feature
Updated terminology to use standard "recurring tasks" instead of
"repeating tasks". Also updated frontmatter fields:
- repeat -> recurs
- repeat_until -> recurs_until

"Recurring" is the more common and standard term in task management.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:10:45 +00:00
Claude d1258e7864
Add repeating tasks feature to Phase 7
Added detailed repeating tasks functionality to Advanced Features:

How it works:
- When a repeating task is completed, it automatically:
  1. Returns to backlog status
  2. Updates due date by specified interval

Supported intervals:
- daily, weekly, monthly, yearly
- Custom intervals (e.g., "every 3 days")
- Optional end date or repetition limit

Frontmatter fields:
- repeat: "daily" | "weekly" | "monthly" | "yearly" | "every N days/weeks/months"
- repeat_until: (optional) end date for repetitions

Example use cases:
- Daily standup notes
- Weekly review tasks
- Monthly bill payments
- Quarterly reports

This is a Phase 7 feature as it requires background processing
to check completed tasks and reset them based on intervals.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:09:42 +00:00
SteelDynamite f51d1251bb
Refine task description and sorting order
Updated task structure and sorting logic in PLAN.md.
2025-11-03 13:07:03 -08:00
Claude f472ed5f57
Revise PLAN.md by removing development guidelines
Clean up data model and remove unnecessary notes:

1. Simplified TaskStatus:
   - Only two states: Backlog and Completed
   - Removed in-progress, not-started complexity
   - Clearer, simpler model

2. Removed unnecessary comments:
   - "Note: position stored in .listdata.json" (obvious from context)
   - "Note: theme and UI preferences added in Phase 3" (unnecessary)

3. Removed subtask folder example:
   - Already have parent_id for subtask relationships
   - No need to show nested folder structure
   - Keeps file structure example simple

4. Simplified AppConfig in Phase 1:
   - Just local_path, no extra comments

Changes keep the plan focused and remove noise.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 10:20:18 +00:00
Claude eb6bb932f7
Add dual sort modes: manual ordering and by due date
Enhanced task ordering with two sort options:

1. Manual Ordering (default):
   - User can drag/drop to reorder tasks
   - Order stored in task_order array in .listdata.json
   - Only manual changes update the file

2. By Due Date:
   - Tasks automatically sorted by due_date field
   - Tasks without due dates appear at end
   - task_order array ignored when in this mode

Changes:
- Added sort_order field to .listdata.json ("manual" or "by_due_date")
- Added SortOrder enum to TaskList model
- Clarified that Vec<Task> order depends on sort preference
- Added set_sort_order() and get_sort_order() to repository API
- Added CLI sort command to switch between modes
- Removed confusing comment about .listdata.json being "in-memory"

Example .listdata.json:
{
  "sort_order": "manual",
  "task_order": ["uuid-1", "uuid-2", "uuid-3"]
}

CLI usage:
bevy-tasks sort manual --list "Work"
bevy-tasks sort by-due-date --list "Personal"

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-02 18:49:02 +00:00
Claude 71619eddf9
Simplify Phase 1: remove tags and move theme to GUI phase
Cleaned up data model and configuration scope:

REMOVED:
- Tags field from Task model (out of scope, may never be needed)
- Tags from frontmatter example
- Tags from Phase 7 features
- Theme from Phase 1 AppConfig (not needed until GUI)

MOVED:
- Theme configuration to Phase 3 (when GUI is introduced)
- Added updated AppConfig in Phase 3 showing theme, window_size, last_opened_list

Phase 1 now focuses on core essentials:
- Task CRUD operations
- Markdown file I/O
- Basic data model (id, status, due_date, parent_id)
- CLI functionality

Benefits:
- Simpler Phase 1 implementation
- Less upfront complexity
- Theme configuration appears when it's actually used (GUI)
- Tags can be added later if needed (or never)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-02 18:41:33 +00:00
Claude fd04624677
Update storage structure: per-list metadata and cleaner naming
Changed metadata structure for better organization:

OLD:
~/Tasks/.bevy-tasks/metadata.json (global)
~/Tasks/My Tasks/ (no list metadata)

NEW:
~/Tasks/.metadata.json (global: list order, last opened)
~/Tasks/My Tasks/.listdata.json (per-list: task order, id, timestamps)

Key improvements:
1. Task ordering in .listdata.json - reordering only updates one file
2. Removed position field from task frontmatter
3. List metadata stays with the list (portable)
4. Cleaner naming: .metadata.json and .listdata.json
5. No nested hidden folders

Updated:
- File system structure diagram
- Data models (removed position from Task and TaskList)
- Added note about position being in .listdata.json
- Added reorder_task() and get_task_order() to API
- Updated AppConfig comment

Benefits:
- Reordering tasks = single file update
- Moving/copying lists preserves metadata
- WebDAV sync naturally groups data
- Cleaner file structure

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-02 18:38:41 +00:00
SteelDynamite 123ebf9b43
Revise PLAN.md by removing development guidelines
Removed development guidelines and performance budgets sections.
2025-11-02 10:25:49 -08:00
Claude 021e532900
Set license to GPL v3
The project will be licensed under GNU General Public License v3.0.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-27 16:51:50 +00:00
Claude 90e7e70ea0
Move Development Guidelines and Resources before roadmap
Reorganized document structure:

Before:
1. Vision
2. Phase 1-7
3. Development Guidelines
4. Resources

After:
1. Vision
2. Development Guidelines
3. Resources
4. Phase 1-7

Benefits:
- Guidelines available as reference from the start
- Performance budgets visible before implementation
- Testing strategy known upfront
- Resources accessible throughout all phases
- More logical flow for developers starting the project

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-27 16:48:03 +00:00