Backend:
- Increase sync overlap buffer from 5s to 30s to catch late-arriving positions
- Add position history endpoint GET /gps/locations/:driverId/history
- Add logging for position sync counts (returned vs inserted)
Frontend:
- Add useDriverLocationHistory hook for fetching position trails
- Draw Polyline route trails on GPS map for each tracked driver
- Historical positions shown as semi-transparent paths behind live markers
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Issue #1: QR button on GPS Devices tab for re-enrollment
Issue #2: App-wide timezone setting with TimezoneContext, useFormattedDate hook,
and admin timezone selector. All date displays now respect the configured timezone.
Issue #3: PDF export for Accountability Roster using @react-pdf/renderer with
professional styling matching VIPSchedulePDF. Added Signal send button.
Issue #4: Fixed GPS "teleporting" gaps - syncPositions now fetches position history
per device instead of only latest position. Changed cron to every 30s, added
unique constraint on deviceId+timestamp for deduplication, lowered min interval to 10s.
Co-Authored-By: Claude Opus 4.6 <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>
- Lowercase and strip non-alphanumeric chars from device ID
- Explicitly set disabled=false when creating device in Traccar
- Use the uniqueId returned by Traccar (ensures consistency)
- Add logging for debugging device creation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Reverted Auth0-only approach since Traccar has openid.force=false
and the token-based login was working.
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>
Previously TraccarClientService was trying to authenticate with default
credentials (admin/admin) before GpsService could load the actual
credentials from the database. This caused 401 errors on driver enrollment.
Now GpsService sets credentials on TraccarClientService during onModuleInit()
after loading them from the gps_settings table.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>