The MapFitBounds component was calling fitBounds on every 30-second
location refresh, overriding the user's current view. Now only fits
bounds on the initial load so users can pan and zoom freely without
interruption.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace OpenStreetMap tiles with Esri World Imagery for high-resolution
satellite view on the GPS Tracking live map.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replaces separate /drivers and /vehicles routes with a single /fleet
page using tabs. Old routes redirect for backward compatibility.
Navigation sidebar now shows one "Fleet" item instead of two.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add a "Driver" checkbox column to the User Management page. Checking it
creates a linked Driver record so the user appears in the drivers list,
can be assigned events, and enrolled for GPS tracking — without changing
their primary role. The DRIVER role checkbox is auto-checked and disabled
since being a driver is inherent to that role. Promoting a user from
DRIVER to Admin/Coordinator preserves their driver record.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The useGpsDevices query was missing refetchInterval, so the Last Active
timestamp on the Enrolled Devices page only updated on initial page load.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Generate a QR code URL containing device ID, server URL, and update
interval that the Traccar Client app can scan to auto-configure.
The enrollment modal now shows the QR prominently with manual setup
collapsed as a fallback. Also pins Traccar to 6.11 and fixes Docker
health checks (IPv6/curl issues).
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove dashes from device identifiers for better compatibility
- Auto-enable consent on enrollment (HR handles consent at hiring)
- Remove consent checks from location queries and UI
- Simplify Traccar Admin to use Auth0 SSO directly
- Fix server URL to return base Traccar URL (app handles port)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add GPS module with Traccar client service for device management
- Add driver enrollment flow with QR code generation
- Add real-time location tracking on driver profiles
- Add GPS settings configuration in admin tools
- Add Auth0 OpenID Connect setup script for Traccar
- Add deployment configs for production server
- Update nginx configs for SSL on GPS port 5055
- Add timezone setting support
- Various UI improvements and bug fixes
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove unreliable QR code scanning, add direct app store links
- Fix server URL to use HTTP (not HTTPS) for port 5055
- OsmAnd protocol doesn't use SSL
- Emphasize that official Traccar Client app is required
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
## Signal Messaging Integration
- Added SignalService for sending messages to drivers via Signal
- SignalMessage model for tracking message history
- Driver chat modal for real-time messaging
- Send schedule via Signal (ICS + PDF attachments)
## AI Copilot
- Natural language interface for VIP Coordinator
- Capabilities: create VIPs, schedule events, assign drivers
- Help and guidance for users
- Floating copilot button in UI
## Theme System
- Dark/light/system theme support
- Color scheme selection (blue, green, purple, orange, red)
- ThemeContext for global state
- AppearanceMenu in header
## PDF Schedule Export
- VIPSchedulePDF component for schedule generation
- PDF settings (header, footer, branding)
- Preview PDF in browser
- Settings stored in database
## Database Migrations
- add_signal_messages: SignalMessage model
- add_pdf_settings: Settings model for PDF config
- add_reminder_tracking: lastReminderSent for events
- make_driver_phone_optional: phone field nullable
## Event Management
- Event status service for automated updates
- IN_PROGRESS/COMPLETED status tracking
- Reminder tracking for notifications
## UI/UX Improvements
- Driver schedule modal
- Improved My Schedule page
- Better error handling and loading states
- Responsive design improvements
## Other Changes
- AGENT_TEAM.md documentation
- Seed data improvements
- Ability factory updates
- Driver profile page
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit implements comprehensive driver schedule self-service functionality,
allowing drivers to access their own schedules without requiring administrator
permissions, along with full schedule support for multi-day views.
Backend Changes:
- Added /drivers/me/* endpoints for driver self-service operations:
- GET /drivers/me - Get authenticated driver's profile
- GET /drivers/me/schedule/ics - Export driver's own schedule as ICS
- GET /drivers/me/schedule/pdf - Export driver's own schedule as PDF
- POST /drivers/me/send-schedule - Send schedule to driver via Signal
- PATCH /drivers/me - Update driver's own profile
- Added fullSchedule parameter support to schedule export service:
- Defaults to true (full upcoming schedule)
- Pass fullSchedule=false for single-day view
- Applied to ICS, PDF, and Signal message generation
- Fixed route ordering in drivers.controller.ts:
- Static routes (send-all-schedules) now come before :id routes
- Prevents path matching issues
- TypeScript improvements in copilot.service.ts:
- Fixed type errors with proper null handling
- Added explicit return types
Frontend Changes:
- Created MySchedule page with simplified driver-focused UI:
- Preview PDF button - Opens schedule PDF in new browser tab
- Send to Signal button - Sends schedule directly to driver's phone
- Uses /drivers/me/* endpoints to avoid permission issues
- No longer requires driver ID parameter
- Resolved "Forbidden Resource" errors for driver role users:
- Replaced /drivers/:id endpoints with /drivers/me endpoints
- Drivers can now access their own data without admin permissions
Key Features:
1. Full Schedule by Default - Drivers see all upcoming events, not just today
2. Self-Service Access - Drivers manage their own schedules independently
3. PDF Preview - Quick browser-based preview without downloading
4. Signal Integration - Direct schedule delivery to mobile devices
5. Role-Based Security - Proper CASL permissions for driver self-access
This resolves the driver schedule access issue and provides a streamlined
experience for drivers to view and share their schedules.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Removed from repository but kept locally for development:
- .github/workflows/ - GitHub Actions (Gitea uses .gitea/workflows/)
- frontend/e2e/ - Playwright E2E tests (development only)
Added to .gitignore:
- .github/ - GitHub-specific CI/CD (not used on Gitea)
- frontend/e2e/ - E2E tests kept locally for testing
- **/playwright-report/ - Test result reports
- **/test-results/ - Test artifacts
These files remain on local machine for development/testing
but are excluded from repository to reduce clutter.
Note: Gitea uses .gitea/workflows/ for CI, not .github/workflows/
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Removed old/unused configuration files:
- .env (root) - Old Google OAuth production credentials (not used)
- .env.example (root) - Old Google OAuth template (replaced by Auth0)
- docker-compose.dev.yml - Old Keycloak setup (replaced by Auth0)
- Makefile - Unused build automation
Improved environment configuration:
- Created frontend/.env.example - Auth0 template for frontend
- Updated backend/.env.example:
- Fixed port numbers (5433 for postgres, 6380 for redis)
- Added clearer Auth0 setup instructions
- Matches docker-compose.yml port configuration
Current setup:
- docker-compose.yml - PostgreSQL & Redis services (in use)
- backend/.env - Auth0 credentials (in use, not committed)
- frontend/.env - Auth0 credentials (in use, not committed)
- *.env.example files - Templates for new developers
All old Google OAuth and Keycloak references removed.
Application now runs on Auth0 only.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Complete rewrite from Express to NestJS with enterprise-grade features:
## Backend Improvements
- Migrated from Express to NestJS 11.0.1 with TypeScript
- Implemented Prisma ORM 7.3.0 for type-safe database access
- Added CASL authorization system replacing role-based guards
- Created global exception filters with structured logging
- Implemented Auth0 JWT authentication with Passport.js
- Added vehicle management with conflict detection
- Enhanced event scheduling with driver/vehicle assignment
- Comprehensive error handling and logging
## Frontend Improvements
- Upgraded to React 19.2.0 with Vite 7.2.4
- Implemented CASL-based permission system
- Added AbilityContext for declarative permissions
- Created ErrorHandler utility for consistent error messages
- Enhanced API client with request/response logging
- Added War Room (Command Center) dashboard
- Created VIP Schedule view with complete itineraries
- Implemented Vehicle Management UI
- Added mock data generators for testing (288 events across 20 VIPs)
## New Features
- Vehicle fleet management (types, capacity, status tracking)
- Complete 3-day Jamboree schedule generation
- Individual VIP schedule pages with PDF export (planned)
- Real-time War Room dashboard with auto-refresh
- Permission-based navigation filtering
- First user auto-approval as administrator
## Documentation
- Created CASL_AUTHORIZATION.md (comprehensive guide)
- Created ERROR_HANDLING.md (error handling patterns)
- Updated CLAUDE.md with new architecture
- Added migration guides and best practices
## Technical Debt Resolved
- Removed custom authentication in favor of Auth0
- Replaced role checks with CASL abilities
- Standardized error responses across API
- Implemented proper TypeScript typing
- Added comprehensive logging
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>