- Add Gitea Actions workflow for building and pushing Docker images
- Configure ArgoCD Application for auto-sync deployment
- Update Helm values to use Gitea container registry
- Add setup documentation for GitOps configuration
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
When a tag is deleted as orphaned, it's now automatically removed
from the active filter selection.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Tags that are no longer associated with any entry are automatically
deleted from the database when a tag is removed from an entry.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove auto-parsing on collapse
- Add "Scan for #tags" button that parses from current textarea content
- Always show tags section with delete buttons
- Show help text when no tags exist
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Move tag parsing from textarea blur to entry collapse action.
This prevents incomplete tags from being created while editing.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Parse hashtags when content textarea loses focus (blur)
- Parse hashtags when QuickCapture form is submitted
- Add tag display with delete buttons in expanded entry view
- Remove automatic hashtag parsing during typing
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Tags are now automatically extracted from #hashtags in content text.
Removed TagInput from entry editing, keeping it only in FilterBar.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add basicAuth.enabled and basicAuth.htpasswd values
- Create middleware.yaml template for Secret and Traefik Middleware
- Update ingress to include middleware annotation when enabled
Usage:
helm upgrade taskplaner ./helm/taskplaner \
--set basicAuth.enabled=true \
--set basicAuth.htpasswd='admin:$apr1$...'
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
SvelteKit adapter-node uses TASKPLANER_ envPrefix for config.
Kubernetes creates SERVICENAME_* env vars for each service.
Service named "taskplaner" creates TASKPLANER_PORT_* which conflicts.
Changes:
- Add service.name option (default: "tp-app")
- Update ingress to reference configured service name
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Includes:
- Deployment with health checks and resource limits
- Service (ClusterIP by default)
- PersistentVolumeClaim for data storage
- Optional Ingress with TLS support
- Configurable via values.yaml
Usage: helm install taskplaner ./helm/taskplaner
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Archive roadmap, requirements, and audit to .planning/milestones/
- Update PROJECT.md with validated requirements and decisions
- Reset STATE.md for next milestone cycle
- Create MILESTONES.md for project history
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
All 31 requirements satisfied, 6/6 phases verified, 96% integration score.
Ready for milestone completion.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Quick Start with docker-compose commands
- Configuration with key environment variables
- Reverse proxy setup instructions
- Data persistence and volume info
- Backup and restore procedures
- Health check verification
- .env.example documents all configuration options
- backup.sh creates timestamped archive of Docker volume
- Supports custom volume name via VOLUME_NAME env var
- Update db/index.ts to read data directory from env var
- Update storage.ts to read data directory from env var
- Both default to ./data for local development
- Create Dockerfile with multi-stage build using node:22-alpine
- Run as non-root 'nodejs' user for security
- Add HEALTHCHECK for container orchestration
- Create docker-compose.yml with taskplaner_data named volume
- Add .dockerignore to optimize build context
- Install @sveltejs/adapter-node as dev dependency
- Configure adapter with out: 'build', precompress: true
- Set envPrefix to 'TASKPLANER_' for environment variables
Tasks completed: 3/3
- Create recent searches store and add dropdown UI
- Integrate filtering into EntryList with flat list mode
- Add highlighting to EntryCard and integrate search UI
SUMMARY: .planning/phases/05-search/05-03-SUMMARY.md
- Add searchQuery prop to EntryCard for text highlighting
- Use {@html highlightText()} for title and content in collapsed view
- Integrate SearchBar and FilterBar in +page.svelte
- Add search/filter state with reactive sync to filters.query
- Pass recentSearches store to SearchBar
- Update filterEntries to use generics for type preservation
- Add filters and searchQuery props to EntryList
- Apply filterEntries via $derived for reactive filtering
- Display flat list (no pinned separation) when filtering
- Show search-specific empty state when no matches
- Pass searchQuery to EntryCard for highlighting
- Add recentSearches persisted store with 5-item limit
- Add addRecentSearch() function for deduplication
- Update SearchBar with recentSearches dropdown
- Show dropdown on focus when input empty
- Use onmousedown to handle selection before blur
- Add to recent searches on blur with >= 2 chars
- Wrap matching text in <mark> tags with bold styling
- Escape HTML before highlighting to prevent XSS
- 2-character minimum query requirement
- Uses bg-transparent (no background per CONTEXT.md)
- Debounced value binding (300ms delay via $effect cleanup)
- Only trigger search when query >= 2 chars OR cleared to empty
- Bindable value prop for parent integration
- '/' keyboard shortcut to focus search (GitHub-style)
- Native event listener to avoid Svelte 5 keydown bug
- Add SearchFilters type and utilities (search.ts)
- Implement filterEntries with query, tags, type, dateRange filters
- Case-insensitive text search with 2-character minimum
- AND logic for tag filtering
- Date range inclusive of end date
- Add SearchFilters interface for query, tags, type, dateRange
- Add defaultFilters constant with empty/default values
- Add hasActiveFilters() to detect when filters are active
- Add getDatePreset() helper for today/week/month presets
- Create TagInput.svelte with Svelecte for multi-select autocomplete
- Support creating new tags inline via creatable mode
- Display tags on collapsed entry cards (max 3 with +N indicator)
- Add TagInput in expanded view for editing entry tags
- Pass availableTags through EntryList to EntryCard
- Handle tag changes with immediate save via updateTags action