- Remove login form from App.vue (Authentik handles auth at Traefik level)
- Simplify auth store: no more checkSession/generate_keys complexity
- All ERPNext API calls use a service token (reliable, no CORS issues)
- User identity provided by Authentik X-authentik-email header
- Logout redirects to Authentik end-session URL
- Removed: login(), generate_keys, cookie fallback, token localStorage
Infrastructure:
- Created Authentik Proxy Provider for dispatch.gigafibre.ca
- Added to embedded outpost
- Applied authentik@file middleware to dispatch Traefik router
- Also removed unused Gitea (git.gigafibre.ca) containers + volumes
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- All elements (SVG ring + avatar + badge) inside a fixed-size
container (45x45px) with absolute positioning
- Avatar centered with calculated offset, ring fills container
- Mapbox marker anchor changed from 'bottom' to 'center'
- No more variable margins causing offset drift on zoom
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace faint linear bars with SVG ring around avatar:
- Outer arc (faded): planned load / 8h capacity, color-coded
green→yellow→orange→red based on load percentage
- Inner arc (solid green): jobs completed / total jobs
- Ring uses stroke-dasharray for clean arcs with round caps
- Tooltip: "Name — 2/5 jobs (3.0h / 7.0h)"
- Crew badge (purple "2") positioned on avatar corner
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Progress bar under each tech avatar showing daily load (0-8h)
Green (<4h) → Yellow (4-6h) → Orange (6-8h) → Red (8h+)
Includes both primary queue and assistant jobs
- Crew badge: purple circle with count (e.g. "2") when tech has
assistants on today's jobs — indicates grouped team
- Tooltip shows "Name — X.Xh / 8h"
- Marker now uses gpsCoords || coords for visibility check
(fixes techs with GPS but no static coords)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Technician GPS positions from Traccar were being fetched and stored
correctly every 30s but drawMapMarkers() was never triggered on
gpsCoords change, so markers stayed at their initial position.
Added a deep watcher on store.technicians[].gpsCoords in useMap.js
that calls drawMapMarkers() whenever any technician's GPS position
is updated by pollGps().
Also includes traccar.js API module and dispatch store GPS polling
(pollGps / startGpsPolling / stopGpsPolling).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
No Docker image rebuild needed. Builds PWA locally with npx quasar
then copies dist/pwa directly into the ERPNext frontend container.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
These were accidentally deleted when removing ~576 lines of inline map code.
Caused ReferenceError preventing the app from loading data.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Removed src/components/shared/TagInput.vue (exact duplicate of src/components/TagInput.vue)
- Deleted feature/quasar-migration branch from local and remote
- Verified build + deploy: design intact
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Current state: custom CSS + vanilla Vue components
Architecture: modular with composables, provide/inject pattern
Ready for progressive migration to Quasar native components
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>