Add AGENTS.md for AI agent context
This commit is contained in:
@@ -0,0 +1,84 @@
|
|||||||
|
# Canteen Asset Tracker — Agent Guide
|
||||||
|
|
||||||
|
Mobile-friendly webapp for tracking physical assets with barcode scanning, OCR sticker reading, and GPS check-ins. The main technician-facing application in the Canteen stack.
|
||||||
|
|
||||||
|
## Stack
|
||||||
|
|
||||||
|
- **Python** 3.11+, **FastAPI**, **uvicorn**
|
||||||
|
- **SQLite** (WAL mode, foreign keys)
|
||||||
|
- **pytesseract** — OCR for ConnectID stickers
|
||||||
|
- **Pillow**, **piexif** — image processing
|
||||||
|
- **Frontend:** vanilla HTML/CSS/JS (~200KB SPA), Leaflet maps, ZXing barcode scanner
|
||||||
|
- **Tests:** pytest
|
||||||
|
|
||||||
|
## Project Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
server.py # ~2.5K lines — ALL backend routes, DB, auth, OCR in one file
|
||||||
|
openapi.yaml # Shared API contract (source of truth for frontend)
|
||||||
|
requirements.txt
|
||||||
|
|
||||||
|
static/
|
||||||
|
index.html # SPA frontend (~200KB, no build step)
|
||||||
|
sw.js # Service worker for offline support
|
||||||
|
app-release.apk # Companion Android APK
|
||||||
|
|
||||||
|
docs/
|
||||||
|
ADMIN_GUIDE.md # Admin operations guide
|
||||||
|
USER_GUIDE.md # End-user operations
|
||||||
|
FEATURES.md # Feature catalog
|
||||||
|
images/ # Screenshots for docs
|
||||||
|
|
||||||
|
scripts/ # Data migration and helper scripts
|
||||||
|
PROJECT.md # v3 project structure doc
|
||||||
|
TEST_PLAN.md # Test plan
|
||||||
|
TEST_PLAN_MAP.md # Map test plan
|
||||||
|
```
|
||||||
|
|
||||||
|
## How to Run
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Production (generates self-signed TLS cert, auto-installs deps, backs up DB)
|
||||||
|
./start.sh
|
||||||
|
|
||||||
|
# Quick restart
|
||||||
|
./restart_server.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## Key Architecture
|
||||||
|
|
||||||
|
- **Single-file backend** — `server.py` contains routes, DB models, auth, OCR, and geolocation
|
||||||
|
- **OCR:** Extracts last 5 digits from `XXXXX-XXXXXX` Connect ID sticker format via Tesseract
|
||||||
|
- **Auth:** Bearer token system, role-based (technician + admin)
|
||||||
|
- **DB:** `assets.db` — SQLite with WAL mode, foreign keys enabled
|
||||||
|
- **Frontend:** Pure vanilla JS SPA — **no build step, no npm dependencies**
|
||||||
|
|
||||||
|
## Production
|
||||||
|
|
||||||
|
- **URL:** https://canteen.ourpad.casa
|
||||||
|
- **Port:** 8901 (HTTPS, self-signed cert → NPMPlus reverse proxy)
|
||||||
|
- **Startup:** `start.sh` generates self-signed cert, backs up DB, starts uvicorn
|
||||||
|
- **No systemd** — runs via `nohup` from start/restart scripts
|
||||||
|
|
||||||
|
## Environment Variables
|
||||||
|
|
||||||
|
| Var | Description |
|
||||||
|
|-----|-------------|
|
||||||
|
| CANTEEN_DB_PATH | Path to assets.db (default: `./assets.db`) |
|
||||||
|
|
||||||
|
## Related Projects
|
||||||
|
|
||||||
|
| Project | What it does |
|
||||||
|
|---------|-------------|
|
||||||
|
| `canteen-admin-server` | Admin CRUD API, shares same SQLite DB |
|
||||||
|
| `canteen-seed-import` | Seed data import from Cantaloupe CSVs |
|
||||||
|
| `photo-geotagger` | Batch GPS updater using same `assets.db` |
|
||||||
|
| `exif-test` | EXIF/OCR validation against this DB |
|
||||||
|
| `cantaloupe-downloader` | CLI to export machine data from Cantaloupe |
|
||||||
|
|
||||||
|
## Pitfalls
|
||||||
|
|
||||||
|
- **Single-file backend** — server.py is ~2.5K lines; routes, DB, and OCR all in one file
|
||||||
|
- **DB shared** across canteen-admin-server, photo-geotagger, seed-import, exif-test — schema changes must be coordinated
|
||||||
|
- **HTTPS** — start.sh generates self-signed cert every restart; ports 8901 (production) vs 8904 (dev)
|
||||||
|
- **OCR** requires Tesseract installed system-wide (`apt install tesseract-ocr`)
|
||||||
Reference in New Issue
Block a user