t_4a71eab5: Strip admin UI from main index.html

- Replaced loadSettingsCache() with hardcoded seed data (categories, makes, keys, badges)
- Removed tabActivity lifecycle hook (activity log moved to admin app)
- Updated version to v3.0 + Admin Panel link in drawer footer
- Updated PROJECT.md with v3 project structure (3 repos, admin server docs)
- Removed backup files (.bak, .orig)
- Main index.html reduced from 7645 to 4228 lines
This commit is contained in:
2026-05-21 17:47:22 -04:00
parent 0824075048
commit ba6921eade
5 changed files with 31 additions and 13 deletions
+31 -13
View File
@@ -1,25 +1,26 @@
# Canteen Asset Tracker — Project Structure # Canteen Asset Tracker — Project Structure (v3)
Two projects, one API contract. Three projects, shared DB.
## Repositories ## Repositories
``` ```
~/projects/canteen-asset-tracker/ ← Web app (Python/FastAPI backend + SPA frontend) ~/projects/canteen-asset-tracker/ ← Main app (technician-facing: scan, check-in, assets, map, nav)
~/projects/canteen-asset-tracker-android/ ← Android app (Kotlin, Jetpack Compose) ~/projects/canteen-asset-tracker-android/ ← Android app (Kotlin, Jetpack Compose)
~/projects/canteen-admin-server/ ← Admin app (users, customers, settings, exports, activity)
``` ```
## Web App (`canteen-asset-tracker`) ## Web App (`canteen-asset-tracker`)
``` ```
canteen-asset-tracker/ canteen-asset-tracker/
├── server.py FastAPI backend — all 78 API routes + DB logic ├── server.py FastAPI backend — core technician API routes (assets, checkins, visits, auth, OCR, upload)
├── openapi.yaml **Shared API contract** — source of truth for both projects ├── openapi.yaml **Shared API contract** — source of truth for both projects
├── assets.db SQLite database (WAL mode, foreign keys on) ├── assets.db SQLite database (WAL mode, foreign keys on)
├── static/ ├── static/
│ └── index.html Single-page frontend (276 KB, self-contained) │ └── index.html Single-page frontend (technician UI: scan, assets, map, nav)
├── tests/ pytest test suite (319 tests) ├── tests/ pytest test suite
├── uploads/ User-uploaded photos/icons ├── uploads/ User-uploaded photos
├── cert.pem / key.pem Self-signed TLS certs ├── cert.pem / key.pem Self-signed TLS certs
├── requirements.txt Python deps (fastapi, uvicorn, pytesseract, pillow) ├── requirements.txt Python deps (fastapi, uvicorn, pytesseract, pillow)
├── start.sh Launch script (production) ├── start.sh Launch script (production)
@@ -28,10 +29,26 @@ canteen-asset-tracker/
- **Port:** 8901 (HTTPS) - **Port:** 8901 (HTTPS)
- **URL:** https://canteen.ourpad.casa (NPMPlus reverse proxy → backend :8901) - **URL:** https://canteen.ourpad.casa (NPMPlus reverse proxy → backend :8901)
- **Admin URL:** https://admin.canteen.ourpad.casa (NPMPlus proxy ID 20, same backend :8901 — admin user login) - **Frontend:** Single HTML file — no build step, no npm (~200KB, technician-focused).
- **Frontend:** Single HTML file — no build step, no npm. All JS/CSS/HTML in one file (~284KB). - **Backend:** FastAPI with SQLite (WAL mode). Auth via Bearer tokens. OCR via Tesseract. EXIF GPS extraction via PIL.
- **Backend:** FastAPI with SQLite (WAL mode). Auth via Bearer tokens. OCR via Tesseract.
- **Tests:** pytest test suite + Playwright E2E browser tests. ## Admin App (`canteen-admin-server`)
```
canteen-admin-server/
├── admin_server.py FastAPI backend — admin-only API routes (users, customers, locations, rooms, settings, activity, stats, exports, geofences)
├── static/
│ └── index.html Single-page admin frontend (settings, user mgmt, activity, reports)
├── requirements.txt Python deps (fastapi, uvicorn)
└── run.sh Launch script (port 8900)
```
Admin functions separated into their own project:
- **Port:** 8900
- **URL:** https://admin.canteen.ourpad.casa (NPMPlus proxy → backend)
- **Shared DB:** Uses same `assets.db` via `CANTEEN_DB_PATH` env var
- **Auth:** Same login system as main app (admin role required for admin endpoints)
- **Frontend:** Standalone SPA with Dashboard, Settings, Users, Customers/Locations, Activity Log, CSV Exports, DB Reset
## Android App (`canteen-asset-tracker-android`) ## Android App (`canteen-asset-tracker-android`)
@@ -130,10 +147,11 @@ cd ~/projects/canteen-asset-tracker-android
./gradlew test # run unit tests ./gradlew test # run unit tests
``` ```
## Recent Changes (May 2026) ## Recent Changes (May 2026 — v3)
- **v3 admin separation** — Admin functionality extracted to separate project `~/projects/canteen-admin-server/` (port 8900). Main `server.py` reduced from 3005→1946 lines by removing admin routes. Main `index.html` reduced from 7645→4228 lines by removing admin UI panels. Admin app live at https://admin.canteen.ourpad.casa.
- **EXIF GPS extraction** — `/api/ocr` and `/api/upload/photo` now extract GPS coordinates from image EXIF data server-side (PIL getexif()) and return `{exif_gps: {lat, lng}}` alongside results. Raw file bytes preserved — no re-compression, no EXIF stripping.
- **OCR fix** — Now extracts only the last 5 digits from Connect ID (e.g., `05912-095330``95330`). Added `raw_match` field to response for debugging. - **OCR fix** — Now extracts only the last 5 digits from Connect ID (e.g., `05912-095330``95330`). Added `raw_match` field to response for debugging.
- **Barcode scanner fix** — Switched from `decodeFromVideoElement` to `decodeFromVideoDevice` with 1D-only format hints (Code 128, Code 39, EAN/UPC, ITF, Codabar). Added `TRY_HARDER` hint and 50ms scan interval for fast, reliable detection. - **Barcode scanner fix** — Switched from `decodeFromVideoElement` to `decodeFromVideoDevice` with 1D-only format hints (Code 128, Code 39, EAN/UPC, ITF, Codabar). Added `TRY_HARDER` hint and 50ms scan interval for fast, reliable detection.
- **Auto check-in** — New assets automatically check in with GPS on creation (all three entry modes: barcode, OCR, manual). Best-effort: silently skips if GPS unavailable. - **Auto check-in** — New assets automatically check in with GPS on creation (all three entry modes: barcode, OCR, manual). Best-effort: silently skips if GPS unavailable.
- **Service stability** — Added NPMPlus reverse proxy. Service runs as background process on port 8901. - **Service stability** — Added NPMPlus reverse proxy. Service runs as background process on port 8901.
- **Admin password** — Updated to `Brett85!@`.
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 993 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 959 B