deploy-profileslisted
Install: claude install-skill fame-healthscreening/ZD-claude-plugin
| Service | Local | Cloud | Config | Env source | Health |
|---|---|---|---|---|---|
| Next.js dashboard | `npm run dev` (port 9002) | Firebase App Hosting (`apphosting.yaml`, `firebase deploy`) or Vercel (`vercel --prod`) | `next.config.js`, `apphosting.yaml` | App Hosting secrets / Vercel env (server: `EE_BASE64_KEY`, `HF_SPACE_URL`, `HF_TOKEN`; client: `NEXT_PUBLIC_FIREBASE_*`) | `GET /` 200 + `/api/gee/tiles` 200 |
| Firestore/Storage | Emulator suite (`firebase emulators:start`) | Firebase | `firestore.rules`, `cors.json` | — | rules deploy dry-run |
| Flask inference backend | `docker compose up backend` | Hugging Face Space (Docker SDK, `git push` to the Space) or any Docker host | `Dockerfile`, `requirements.txt` | Space secrets / container env (`HF_TOKEN`, `EE_BASE64_KEY`) | `GET /health` < 1 s |
| .NET API (farmer API) | `dotnet run` / `docker compose up api` | VM or AWS (see below) | `appsettings.{Env}.json`, `Dockerfile` | user-secrets locally; AWS SSM Parameter Store / Secrets Manager in cloud | `GET /health` + one enveloped endpoint |
| .NET dashboard + Next.js (mills) | `dotnet run` (API) + `npm run dev` (web) against a restored test copy of the DB | **existing Windows EC2 host**: three WinSW services (Api loopback, Web loopback, YARP Gateway public) — `zd-dotnet:winsw-deploy` | `tools/deploy/package.ps1`, `update.ps1`, WinSW XMLs | `appsettings.Local.json` on the server only, never in the package | gateway `/health` before the swap is declared done; automatic