# Canteen Asset Tracker — Feature Batch Implementation Plan **Date:** 2026-05-20 **Goal:** Six UX improvements for field technicians --- ## Feature 1: Scan existing asset → auto check-in **Current:** Scanning a known asset shows it with a manual "Check In" button **Target:** Scanning a known asset immediately checks in with GPS, no extra tap **Files:** - `static/index.html` — `handleBarcode()` function (line ~2638) **Change:** After `showScannedAsset(asset)`, call `autoCheckin(asset.id)` + `submitCheckin()`-equivalent logic. Skip showing the manual checkin card. --- ## Feature 2: Auto-generate address from GPS reverse geocode **Current:** Address fields are always empty; user must type them manually **Target:** When creating an asset (all 3 modes), reverse-geocode GPS to populate address fields **Files:** - `static/index.html` — `createScannedAsset()`, `createOcrAsset()`, `submitManualAsset()` - `server.py` — new endpoint `GET /api/geocode?lat=&lng=` using OpenStreetMap Nominatim **Approach:** Add a helper `reverseGeocode(lat, lng)` that calls Nominatim API, returns address parts. Call it in all three creation paths before submitting. Populate `address`, `building_name`, `building_number`, `floor` fields from the response. --- ## Feature 3: Larger camera viewport **Current:** Camera area uses `aspect-ratio: 16/12` — decent but could be taller **Target:** Bigger camera preview for easier barcode/OCR scanning **Files:** - `static/index.html` — `.camera-area` CSS (~line 437) **Change:** Increase aspect ratio to `4/3` or make it fill more vertical space. Reduce margins. Consider max-height removal. --- ## Feature 4: Building # → trailer number sync ✅ DONE **Current:** `building_number` and `trailer_number` are separate fields **Target:** When building_number is entered, auto-populate trailer_number with same value **Files:** - `static/index.html` — manual form event listeners, auto-checkin logic **Change:** Added `oninput` handler on `manBuildingNumber` → copies to `manAddress` (address/trailer combo field) and `locFormBldgNum` → copies to `locFormTrailer`. **Commit:** 02b3ba6 --- ## Feature 5: Parking location from current GPS **Current:** `parking_location` is a free-text field **Target:** Add a "📍 Use Current Location" button next to parking location that fills in GPS coords **Files:** - `static/index.html` — manual form HTML + JS **Change:** Add a button next to `manParkingLocation` that sets its value to `${AppState.gpsLat}, ${AppState.gpsLng}` when tapped. Also add this to the scanned/OCR create flows if those forms have parking. --- ## Feature 6: Navigation tool **Current:** Map shows asset pins with a popup "Directions" link to Google Maps **Target:** A dedicated navigation tool in the app that shows route from current location to the selected asset **Files:** - `static/index.html` — new tab/panel or enhancement to map/asset detail **Approach:** Add a "🧭 Navigate" button in asset detail view and map popups. Opens a full-screen map with: - Current GPS position marker (blue dot) - Asset location marker - Route line between them (straight line using Leaflet polyline, since Leaflet routing needs external service) - Distance readout - "Open in Google Maps" fallback link **Simpler approach:** Enhance existing popup "Directions" link to include the user's current GPS as the origin (`&origin=lat,lng`). Also add a "Navigate" tab that shows current location → selected asset with distance. --- ## Execution Order All 6 features are independent (touch different parts of frontend) except F6 may touch map code that F3 doesn't touch. Safe to parallelize. - F1, F2, F3, F4, F5, F6 can all be done in parallel - F2 depends on backend endpoint first **Plan:** 1. Write backend endpoint for F2 (reverse geocode) 2. Implement all 6 frontend changes 3. Test end-to-end 4. Commit, push, update docs/wiki/issues