Validation:
- Create SubtaskDto with title MinLength/MaxLength, order validation
- Create TaskMetadataDto with typed EffectiveDuration, storyPoints enum
validation (Fibonacci only), funRating bounds (1-10)
- Use @ValidateNested with @Type() for deep validation in CreateTaskDto
Pagination:
- Add offset parameter and total count to getCompletedTasks()
- Return { tasks, total, hasMore } structure for frontend pagination
- Enforce max limit of 100 to prevent abuse
- Add 3 pagination tests (basic, offset, max enforcement)
Error handling:
- Add try-catch to localStorage operations in +layout.svelte
- Handles private browsing mode and quota exceeded errors gracefully
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Implements the same CommandBar quick-create functionality from Todo
in Calendar and Contacts apps with a shared base parser architecture.
- Add base-parser in shared-utils with common patterns (date, time, tags)
- Refactor task-parser to use base-parser
- Create event-parser for Calendar with duration, location, @calendar
- Create contact-parser for Contacts with email, phone, @company detection
- Integrate Quick-Create into Calendar and Contacts layouts
Natural language syntax:
- Common: heute, morgen, Montag, 15.12., um 14 Uhr, #tags
- Calendar: für 2h, 30 min, in Berlin, @Kalender, ganztägig
- Contacts: @Firma, bei Company, auto email/phone detection
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Security & Validation:
- Add @IsNotEmpty and @MinLength(1) validators to prevent empty inputs
- CreateTaskDto.title
- CreateLabelDto.name
- CreateProjectDto.name
- Add German error messages for validation failures
Performance:
- Fix N+1 query in network.service.ts getGraph()
- Batch load all task-label relationships in single query
- Reduces queries from O(n) to O(1) for label fetching
Security:
- Add validateRRule() to prevent DoS via malicious recurrence rules
- Reject rules > 500 chars
- Reject rules with > 5000 occurrences in 10 years
- Prevents hourly/minutely abuse while allowing daily tasks
Cleanup:
- Remove debug console.log from tasks.svelte.ts
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Extract 5 form components to reduce TaskEditModal from 1220 to 604 lines (51%):
- PrioritySelector: Task priority selection buttons with color indicators
- StorypointsSelector: Fibonacci story point picker (1,2,3,5,8,13,21)
- DurationPicker: Quick duration buttons + custom input for effective time
- FunRatingPicker: 1-10 rating scale with color-coded visual feedback
- LabelSelector: Dropdown for multi-select label assignment
These components are now reusable across other task forms and views.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add natural language parser for task input (date, time, priority, project, labels)
- Extend CommandBar with onCreate/onParseCreate callbacks
- Show create preview with parsed attributes as first option
- Support Cmd/Ctrl+Enter to create directly
- Fix service worker to not intercept Vite dev server requests
- Update deprecated apple-mobile-web-app-capable meta tag
Example: "Meeting morgen 14 Uhr !hoch @Arbeit #wichtig"
→ Creates task with due date, time, priority, project and label
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Implement recurring task handling using rrule library
- createNextOccurrence() creates next task instance when completing recurring task
- calculateNextStartDate() maintains offset between start/due dates
- Copies labels, subtasks (reset), and metadata to new occurrence
- Respects recurrenceEndDate limit
- Fix N+1 query problem for task labels
- Replace individual loadTaskLabels() calls with batch loadTaskLabelsBatch()
- Reduces database queries from O(2n) to O(2) for task lists
- Uses Maps for O(1) lookups when combining tasks with labels
- Add Jest test coverage (25 tests)
- CRUD operations, task status changes, recurrence
- Special queries (inbox, today, completed)
- Batch loading efficiency verification
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add comprehensive code review document analyzing the major update PR:
- Summary of 382 changed files with +39,514/-6,251 lines
- Code quality analysis highlighting strengths and improvements
- Security considerations and authorization patterns
- Recommendations for future PRs and test coverage
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add staging-config-check.yml workflow to validate HTTPS URLs on PRs
- Add CODEOWNERS to require team lead review for critical config files
- Update GIT_WORKFLOW.md with config file protection guidelines
Prevents accidental reversion of staging URLs (HTTP vs HTTPS) during rebases.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
The chat-backend build failed because the storage module imports from
@manacore/shared-storage which was not being copied into the Docker build
context.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Documents the squash-before-PR workflow, conflict resolution strategies,
and best practices for the monorepo development process.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
## Runtime Environment Fix
- Updated all web app hooks.server.ts to use $env/dynamic/private
- This allows Docker containers to inject env vars at runtime
- Updated docker-compose.staging.yml with HTTPS staging domains
- Fixes Mixed Content errors when accessing staging via domains
## New Features
- Added email service to mana-core-auth for sending emails
- Added storage module to chat backend
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Updated all web app hooks.server.ts to use $env/dynamic/private
instead of process.env for reading environment variables
- This allows Docker containers to inject env vars at runtime
- Updated docker-compose.staging.yml with HTTPS staging domains
- Fixes Mixed Content errors when accessing staging via domains
Affected apps: clock, chat, calendar, todo, manacore
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Replace Coolify with Docker Compose throughout documentation.
The project never used Coolify - a removal script was created but
never executed, leaving incorrect documentation.
Changes:
- Delete 13 heavily Coolify-focused docs files
- Update ~30 files replacing Coolify → Docker Compose
- Remove obsolete removal script
- Fix deployment references in active and archived projects
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Adds a new 'migrations' job that runs after deploy to automatically
push schema changes to the database. Features:
- Runs db:push after container deployment
- Retry logic with exponential backoff (3 attempts)
- 2-minute timeout per attempt
- Skipped for web-only projects (manacore)
- Reports migration status in deployment summary
This ensures schema changes are automatically applied when deploying
new versions via tags (e.g., todo-staging-v1.0.0).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Better Auth generates non-UUID user IDs (32-char base62 format like
'otUe1YrfENPdHnrF3g1vSBfpkQfambCZ'). Changed all `uuid('user_id')` to
`text('user_id')` in Drizzle schemas for consistency with auth system.
Affected packages/apps:
- apps/calendar, clock, picture, zitare
- games/figgos, voxelava
- packages/manadeck-database, news-database, uload-database
- services/mana-core-auth (feedback schema)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Better Auth generates non-UUID user IDs (e.g., otUe1YrfENPdHnrF3g1vSBfpkQfambCZ).
Changed all user_id columns from uuid to text type to prevent
"invalid input syntax for type uuid" errors.
Also documented this requirement in:
- .claude/guidelines/authentication.md (new User ID Format section)
- .claude/guidelines/database.md (User ID Column Type section)
- apps/todo/CLAUDE.md (Database Schema section)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove stale containers before deploying (fixes 'name already in use' error)
- Always use --force-recreate flag for consistent deployment behavior
- Add troubleshooting docs for container name conflicts
- Add multiple boards support with board navigation (pill-style)
- Add global board for all tasks
- Board CRUD operations with color/icon customization
- Task detail modal: click on card opens full edit modal
- Inline title editing: double-click on title for quick edit
- Right-click context menu: edit, complete, delete actions
- Responsive board navigation (top on desktop, bottom on mobile)
- Remove flip animations for cleaner board switching
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add web app manifest with app metadata and shortcuts
- Add service worker with network-first, cache-first, and network-only strategies
- Add offline fallback page with auto-reload on reconnection
- Add SVG placeholder icon for PWA
- Add PWA meta tags for iOS, Android, and Windows support
- Add comprehensive PWA guide documentation (docs/PWA_GUIDE.md)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add storyPoints, effectiveDuration, funRating to TaskMetadata
- Add UI controls in TaskEditModal for new metadata fields
- Add columns/kanban icon to shared-ui PillNavigation
- Add Mana subscription page to todo app
- Update TASK_METADATA.md documentation
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add TaskEditModal with full task editing (title, description, dates,
priority, status, project, labels, subtasks, recurrence, notes,
storypoints, duration, fun rating)
- Add SubtaskList component with drag-and-drop reordering
- Add onEdit prop to TaskItem and TaskList for modal integration
- Fix task loading on homepage by simplifying fetchAllTasks to load
all tasks without isCompleted filter
- Fix isCompleted query parameter parsing in backend DTO
🤖 Generated with [Claude Code](https://claude.ai/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Document all available task properties including scheduling, priority,
recurrence (RFC 5545 RRULE), subtasks, labels, and metadata fields.
Includes examples and notes on current QuickAdd implementation status.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add referral code input to RegisterPage with live validation
- Create ReferralWidget for dashboard with stats, code sharing, and tier display
- Extend authService.signUp to accept optional referralCode parameter
- Add validateReferralCode function to authStore
- Create referrals.ts API service for frontend
- Add 'referral' widget type to dashboard configuration
- Fix drizzle.config.ts to include 'referrals' schema filter
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- QuickAddTask: Add glass-morphism pill design with date, priority,
and project pickers. Auto-focus on mount, fixed position on mobile
above navigation bar with dropdowns opening upward
- TaskItem: Redesign with pill-shaped glass-morphism style, matching
the navigation components. Includes hover effects, priority dot,
and inline meta information
- TaskList: Remove redundant spacing since TaskItem has its own margin
- New tasks now default to today's date
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Replace custom settings implementations with GlobalSettingsSection
- Add appId prop to all GlobalSettingsSection instances
- Remove duplicate local theme/language controls
- Standardize settings across Chat, Picture, and Manacore apps
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add extensive documentation for staging deployment issues:
- Lazy client initialization pattern for runtime URLs
- PostgreSQL ALTER TABLE USING clause requirement
- Debugging checklist for common issues (API, CORS, 500, 401)
- Summary table of common mistakes and prevention
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add documentation explaining the correct tag format for mana-core-auth
deployments. Using `auth-staging-*` instead of `mana-core-auth-staging-*`
causes the CD workflow to fail.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add console.log statements to JwtAuthGuard to diagnose
401 errors on /api/v1/settings endpoint.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Documents common issues encountered during staging deployments:
- Runtime env injection for SvelteKit (import.meta.env vs window)
- CORS configuration for cross-app API calls
- CD workflow version tag handling
- Database creation for new backends
- Better Auth user ID format (text vs uuid)
Includes quick debugging commands and port reference.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Allow manacore-web (port 5173) to call todo-backend, calendar-backend,
and clock-backend APIs by adding it to their CORS_ORIGINS.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- manacore-web: Update todo, calendar, contacts service files to use
runtime URLs from window instead of import.meta.env (baked at build time)
- manacore-web: Add backend URL env vars to docker-compose.staging.yml
- manacore-web: Fix fallback ports (todo: 3017→3018, calendar: 3014→3016)
- todo-web: Update API client to use runtime URL from window
This enables Docker containers to use runtime-injected URLs instead of
build-time environment variables.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Same fix as todo, calendar, clock - uses hooks.server.ts to inject
PUBLIC_MANA_CORE_AUTH_URL_CLIENT at runtime for Docker deployments.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>