The ops tech module at /ops/#/j/* had drifted from the field app in two ways:
1. Scanner — a prior "restoration" re-added html5-qrcode, but the
design has always been native <input capture="environment"> → Gemini
2.5 Flash via targo-hub /vision/barcodes (up to 3 codes) and
/vision/equipment (structured labels, up to 5). Revert useScanner.js
+ ScanPage.vue + TechScanPage.vue to commit e50ea88 and drop
html5-qrcode from both package.json + lockfiles. No JS barcode
library, no camera stream, no polyfills.
2. Equipment UX — TechJobDetailPage.vue was a 186-line stub missing the
Ajouter bottom-sheet (Scanner / Rechercher / Créer), the debounced
SN-then-MAC search, the 5-field create dialog, Type + Priority
selects on the info card, and the location-detail contact expansion.
Port the full UX from apps/field/src/pages/JobDetailPage.vue (526
lines) into the ops module (458 lines after consolidation).
Rebuilt and deployed both apps. Remote smoke test confirms 0 bundles
reference html5-qrcode and the new TechJobDetailPage.1075b3b8.js chunk
(16.7 KB vs ~5 KB stub) ships the equipment bottom-sheet strings.
Docs:
- docs/features/tech-mobile.md — new. Documents all three delivery
surfaces (legacy SSR /t/{jwt}, transitional apps/field/, unified
/ops/#/j/*), Gemini-native scanner pipeline, equipment UX, magic-link
JWT, cutover plan. Replaces an earlier stub that incorrectly
referenced html5-qrcode.
- docs/features/dispatch.md — new. Dispatch board, scheduling, tags,
travel-time optimization, magic-link SMS, SSE updates.
- docs/features/customer-portal.md — new. Plan A passwordless magic-link
at portal.gigafibre.ca, Stripe self-service, file inventory.
- docs/architecture/module-interactions.md — new. One-page call graph
with sequence diagrams for the hot paths.
- docs/README.md — expanded module index (§2) now lists every deployed
surface with URL + primary doc + primary code locations (was missing
dispatch, tickets, équipe, rapports, telephony, network, agent-flows,
OCR, every customer-portal page). New cross-module edge map in §4.
- docs/features/README.md + docs/architecture/README.md — cross-link
all new docs.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
45 lines
1.1 KiB
JSON
45 lines
1.1 KiB
JSON
{
|
|
"name": "ops-app",
|
|
"version": "0.1.0",
|
|
"description": "Targo Ops — Unified ISP operations platform",
|
|
"productName": "Targo Ops",
|
|
"private": true,
|
|
"scripts": {
|
|
"dev": "quasar dev",
|
|
"build": "quasar build -m pwa",
|
|
"lint": "eslint --ext .js,.vue ./src"
|
|
},
|
|
"dependencies": {
|
|
"@quasar/extras": "^1.16.12",
|
|
"@twilio/voice-sdk": "^2.18.1",
|
|
"chart.js": "^4.5.1",
|
|
"cytoscape": "^3.33.2",
|
|
"idb-keyval": "^6.2.1",
|
|
"lucide-vue-next": "^1.0.0",
|
|
"pinia": "^2.1.7",
|
|
"quasar": "^2.16.10",
|
|
"sip.js": "^0.21.2",
|
|
"vue": "^3.4.21",
|
|
"vue-chartjs": "^5.3.3",
|
|
"vue-router": "^4.3.0",
|
|
"vuedraggable": "^4.1.0"
|
|
},
|
|
"devDependencies": {
|
|
"@quasar/app-vite": "^1.10.0",
|
|
"eslint": "^8.57.0",
|
|
"eslint-plugin-vue": "^9.24.0",
|
|
"sass": "^1.72.0",
|
|
"workbox-build": "7.0.x",
|
|
"workbox-cacheable-response": "7.0.x",
|
|
"workbox-core": "7.0.x",
|
|
"workbox-expiration": "7.0.x",
|
|
"workbox-precaching": "7.0.x",
|
|
"workbox-routing": "7.0.x",
|
|
"workbox-strategies": "7.0.x"
|
|
},
|
|
"engines": {
|
|
"node": "^18 || ^20",
|
|
"npm": ">= 6.13.4"
|
|
}
|
|
}
|