summaryrefslogtreecommitdiff
path: root/internal
AgeCommit message (Collapse)Author
2026-01-13remove agent access featurePeter Stone
2026-01-13Add Todoist tasks with completion checkboxes to Planning tabPeter Stone
Make Todoist tasks visible by integrating into Planning tab: - Add todoist-tasks template to planning-tab.html - Update HandlePlanning to fetch and pass Tasks data - Pass empty Projects slice (quick add form won't show initially) - Completion checkboxes now visible and functional Tasks with checkboxes now appear on Planning tab above Trello boards. Users can click checkboxes to complete tasks instantly. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-13Implement Todoist write operations - Handlers & UI (Part 2)Peter Stone
Complete Todoist task creation and completion functionality: Handlers: - Update aggregateData to fetch and populate Projects - Add HandleCreateTask: creates task, refreshes list, re-renders - Add HandleCompleteTask: marks task complete, returns empty - Both handlers pass Projects to template for dropdown Routes: - Register POST /tasks for task creation - Register POST /tasks/complete for task completion UI (todoist-tasks.html): - Add Quick Add form with collapsible details element - Project selector dropdown (iterates over .Projects) - Content input field with validation - HTMX integration: hx-post, hx-target, hx-swap - Functional completion checkboxes on each task - Remove disabled attribute from checkboxes - Add todoist-task-item wrapper class for HTMX targeting - Glassmorphism styling for form Features: - Create Todoist tasks with optional project assignment - Mark tasks complete with single click (disappears) - Real-time task list updates without page reload - Seamless HTMX partial updates All tests pass. Full Todoist write operations now live in UI! Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-13Implement Todoist write operations - API layer (Part 1)Peter Stone
Add CreateTask and CompleteTask methods to Todoist API client: Models: - Add Project struct (ID, Name) to types.go - Add Projects []Project field to DashboardData API Interface: - Change GetProjects signature to return []models.Project - Ensure CreateTask and CompleteTask are defined Todoist Client: - Add baseURL field for testability - Refactor GetProjects to return []models.Project - Update GetTasks to build project map from new GetProjects - Implement CreateTask with JSON payload support - Implement CompleteTask using POST to /tasks/{id}/close Tests: - Create comprehensive todoist_test.go - Test CreateTask, CreateTask with due date, CompleteTask - Test error handling and GetProjects - Update mock client in handlers tests All tests pass. Ready for handlers and UI integration. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-13Add Trello card creation and completion UI (Phase 3 Step 3)Peter Stone
Implement interactive Trello card management with HTMX: Frontend: - Create trello-board.html partial with add card form - Add collapsible form with list selector and card title input - Add completion checkbox on each card - Update trello-boards.html to use new partial - Use HTMX for seamless partial updates (hx-post, hx-swap) Backend: - Add HandleCreateCard: creates card and re-renders board - Add HandleCompleteCard: marks card as closed - Register /cards and /cards/complete POST routes Features: - Add cards to any list via dropdown - Mark cards complete with checkbox (removes from view) - Real-time board updates without full page reload - Glassmorphism styling for form All tests pass. Full Trello write operations now available in UI. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-13Add Trello Lists support for UI dropdownsPeter Stone
Expose Trello Lists in Board model to enable card creation UI: - Add List model struct (ID, Name) to types.go - Add Lists []List field to Board model - Add GetLists method to TrelloAPI interface - Refactor private getLists to return []models.List - Update GetCards to build list map from slice - Add public GetLists method wrapping private implementation - Update GetBoardsWithCards to populate Lists field concurrently - Update mock Trello client in tests to implement GetLists All tests pass. Boards now include their lists for UI rendering. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-13Implement Trello write operations (Phase 3 Step 1)Peter Stone
Add CreateCard and UpdateCard methods to Trello API client with full testability support: - Refactor TrelloClient with configurable baseURL for testing - Replace hardcoded trelloBaseURL constant with c.baseURL - Implement CreateCard with support for description and due date - Implement UpdateCard with flexible field updates - Add comprehensive test suite using httptest.NewServer - Tests cover success cases, error handling, and edge cases All tests pass. Write operations ready for Phase 3 UI integration. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-13Fix template rendering error in notes tab (Bug 001)Peter Stone
Add Errors field to HandleNotes data structure to match notes-tab template expectations. The error-banner partial requires this field. - Add template_test.go with reproduction test - Update HandleNotes to include Errors field in data struct Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-13Implement Phase 2 Steps 3-5: Sorting and Search improvementsPeter Stone
Step 3 - Trello Smart Sorting: - Update GetBoards SQL with LEFT JOIN and MAX(c.id) for activity sorting - Update GetBoardsWithCards to find max card ID per board - Sort by: 1) Has cards, 2) Newest card activity, 3) Board name - Trello IDs are chronologically sortable (newer > older) Step 4 - Todoist Due-First Sorting: - Update GetTasks ORDER BY with CASE WHEN due_date IS NULL - Sort by: 1) Incomplete, 2) Has due date, 3) Earliest date, 4) Priority - Tasks with due dates appear before tasks without due dates Step 5 - Obsidian Search: - Add SearchNotes method with LIKE queries on title/content - Update HandleNotes to check 'q' query param and HX-Target header - Implement smart partial rendering (obsidian-notes vs notes-tab) - Add search input with 300ms debounce and HTMX integration - Real-time search without page reload Mark Steps 1-5 as complete in PHASE_2_SURGICAL_PLAN.md All tests passing Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-13Fix tab state persistence with URL query parameters (Bug 002)Peter Stone
- Extract tab query param in HandleDashboard, default to "tasks" - Wrap DashboardData with ActiveTab field for template access - Update index.html with conditional tab-button-active class - Add hx-push-url="?tab=..." to each tab button for URL persistence - Update content div to load active tab from server state - Update app.js to read currentTab from URL query parameters - Add comprehensive tab_state_test.go test suite - Tab selection now persists through page reloads - All tests passing Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-13 Implement Trello smart sorting by newest card activityPeter Stone
- Update GetBoards SQL query with LEFT JOIN and GROUP BY - Sort by: 1) Has cards, 2) Newest card (MAX ID), 3) Board name - Update GetBoardsWithCards to match SQL sorting behavior - Leverage Trello ID chronological sortability (newer > older) - Active boards with recent activity appear first - All tests passing Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-13Implement 4-Tab Architecture with unified Atom modelPeter Stone
2026-01-13Implement unified Atom model for multi-source abstractionPeter Stone
- Create internal/models/atom.go with Atom struct and enums - Add mapper functions for Task, Card, Note, and Meal types - Normalize priority scales (1-4) and assign brand colors - Update Phase 2 plan with Atom architecture as Step 1 - Document architectural decision in SESSION_STATE.md This abstraction enables consistent handling, sorting, and rendering of items from Trello, Todoist, Obsidian, and PlanToEat sources. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-12Modernize frontend with tabs, HTMX, and Tailwind build pipelinePeter Stone
Complete UI overhaul implementing modern design patterns with HTMX for dynamic updates, proper Tailwind build pipeline, and improved UX. Build Pipeline: - Add npm + PostCSS + Tailwind CSS configuration - Custom design system with brand colors - Compiled CSS: 27KB (vs 3MB CDN), 99% reduction - Makefile for unified build commands - Inter font for improved typography Tab Interface: - Separate Tasks tab from Notes tab using HTMX - Partial page updates without full refreshes - Tab state management with proper refresh handling - New endpoints: /tabs/tasks, /tabs/notes, /tabs/refresh Template Architecture: - Modular partials system (7 reusable components) - Cleaner separation of concerns Empty Board Management: - Active boards in main 3-column grid - Empty boards in collapsible section - Reduces visual clutter Visual Design Enhancements: - Inter font, brand color accents - Improved typography hierarchy and spacing - Enhanced card styling with hover effects Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-12Sort Trello boards with active boards firstPeter Stone
Improves UX by prioritizing boards with cards over empty boards. Both API and cached results now sort consistently: non-empty boards appear first, then empty boards, with alphabetical ordering within each group. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-12Add security tests for path traversal and SQL injection fixesPeter Stone
Created comprehensive test coverage for security fixes: - internal/api/obsidian_test.go: * TestGetNotes_SymlinkSecurity: Verifies symlinks are not followed * TestGetNotes_BasicFunctionality: Tests basic limit and ordering * Uses t.TempDir() for isolated test environments - internal/store/sqlite_test.go: * TestGetNotes_LimitClause: Validates LIMIT parameter handling * TestGetNotes_EmptyDatabase: Tests empty state * TestSaveNotes_Upsert: Verifies INSERT OR REPLACE behavior * TestGetNotes_SQLInjectionAttempt: Confirms parameterized queries * All tests use temporary SQLite databases for isolation All tests passing (7 new test cases). Security fixes from commits 325811c and 4c03e9c now have full test coverage. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-12Remove AI agent middleware and snapshot endpointPeter Stone
Simplified the dashboard by removing the AI agent access layer: - Deleted internal/middleware/ai_auth.go and tests - Removed AIAgentAPIKey from config.Config - Removed /api/claude/snapshot endpoint registration - Updated SESSION_STATE.md and CLAUDE.md documentation - All tests passing after cleanup Dashboard is now human-facing only without the AI agent endpoint. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-12Parallelize Trello card fetching for improved performancePeter Stone
Replaced sequential card fetching in GetBoardsWithCards with concurrent goroutines limited by a semaphore (max 5 concurrent requests). This significantly reduces load times for users with multiple boards. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-12Mitigate path traversal risk in Obsidian scannerPeter Stone
Skip symbolic links during vault traversal to prevent reading files outside the configured vault directory. This prevents potential path traversal attacks via malicious symlinks. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-12Harden database security and reliabilityPeter Stone
Enable WAL mode for better concurrency, serialize writes to prevent database lock errors, and fix SQL injection vulnerability in GetNotes by using parameterized queries. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-12Initial commit: Personal Consolidation Dashboard (Phase 1 Complete)Peter Stone
Implemented a unified web dashboard aggregating tasks, notes, and meal planning: Core Features: - Trello integration (PRIMARY feature - boards, cards, lists) - Todoist integration (tasks and projects) - Obsidian integration (20 most recent notes) - PlanToEat integration (optional - 7-day meal planning) - Mobile-responsive web UI with auto-refresh (5 min) - SQLite caching with 5-minute TTL - AI agent endpoint with Bearer token authentication Technical Implementation: - Go 1.21+ backend with chi router - Interface-based API client design for testability - Parallel data fetching with goroutines - Graceful degradation (partial data on API failures) - .env file loading with godotenv - Comprehensive test coverage (9/9 tests passing) Bug Fixes: - Fixed .env file not being loaded at startup - Fixed nil pointer dereference with optional API clients (typed nil interface gotcha) Documentation: - START_HERE.md - Quick 5-minute setup guide - QUICKSTART.md - Fast track setup - SETUP_GUIDE.md - Detailed step-by-step instructions - PROJECT_SUMMARY.md - Complete project overview - CLAUDE.md - Guide for Claude Code instances - AI_AGENT_ACCESS.md - AI agent design document - AI_AGENT_SETUP.md - Claude.ai integration guide - TRELLO_AUTH_UPDATE.md - New Power-Up auth process Statistics: - Binary: 17MB - Code: 2,667 lines - Tests: 5 unit + 4 acceptance tests (all passing) - Dependencies: chi, sqlite3, godotenv Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>