Replaces a static SPA that shipped an Airtable PAT in the JS bundle.
The new architecture holds all secrets server-side, fronts the app
behind Apache on optical-dev with the shared-vhost split-build pattern,
and is designed for a later Azure AD/MSAL swap-in.
- backend/ FastAPI + uvicorn, local auth (Azure AD stub), Airtable
proxy with TTL cache, Zoho .xlsx/.csv parser, merge
service for utilisation summaries. 28 pytest tests.
- frontend/ React + Vite + TS + Tailwind + Recharts SPA. Login entry
chunk 12.83 KB gzipped; Recharts lazy-loaded. No tokens
or Airtable URLs in the built bundle.
- deploy/ Idempotent deploy.sh (port auto-pick 8200-8299,
.env-persisted) + split-build Apache include template.
- docker-compose.yml pins name: utilisation-dept and binds 127.0.0.1.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
39 lines
434 B
Text
39 lines
434 B
Text
# env / secrets
|
|
.env
|
|
.env.*
|
|
!.env.example
|
|
|
|
# deploy artefacts
|
|
.deployed
|
|
deploy/apache-utilisation-dept.conf
|
|
|
|
# python
|
|
__pycache__/
|
|
*.py[cod]
|
|
*.egg-info/
|
|
.venv/
|
|
venv/
|
|
.pytest_cache/
|
|
.mypy_cache/
|
|
.ruff_cache/
|
|
|
|
# node / vite
|
|
frontend/node_modules/
|
|
frontend/dist/
|
|
frontend/.vite/
|
|
frontend/**/*.tsbuildinfo
|
|
frontend/.tsbuild-node/
|
|
|
|
# logs
|
|
*.log
|
|
backend/auth.log
|
|
backend/auth.log.*
|
|
|
|
# os
|
|
.DS_Store
|
|
Thumbs.db
|
|
|
|
# editor
|
|
.vscode/
|
|
.idea/
|
|
*.swp
|