3 KiB
Sea Haven AP
Internal accounts payable automation for Sea Haven Industries. Local API is http://127.0.0.1:8787. Hosted origin on seahaven-dev is the CloudFront default domain after HCP apply; GitHub Environment dev deploys the placeholder and API image.
Workspace layout
npm workspaces:
@seahaven-ap/web— Vite/React SPA (repo root)@seahaven-ap/shared— payment ladder, invoice helpers, pay-date parsers, CSV constants (packages/shared)@seahaven-ap/api— Hono API, Drizzle schema, auth/RBAC (packages/api)
Local development
Frontend (mocks)
npm ci
cp .env.example .env # optional; defaults already use mocks
npm run dev
App serves at http://localhost:3000. VITE_USE_MOCKS=true is the default data path until AP-15 wires live API calls.
API + data plane (AP-14)
docker compose up -d
cp .env.example .env
npm run db:migrate
npm run db:seed
npm run dev:api
API listens on http://127.0.0.1:8787. Vite proxies /api to that port.
Smoke:
curl -s http://127.0.0.1:8787/api/health
curl -s http://127.0.0.1:8787/api/me
DEV_AUTH_BYPASS=true is local-only and only allowed when NODE_ENV is development or test (rejected for production, staging, preview, and any other value). Cookie session names are ap_* locally and __Host-ap_* outside local.
API roles (source of truth): admin, ap_processor, approver, viewer. Frontend mocks still use ap_operator until AP-15 remaps them.
OpenAPI / Redocly
Linting uses the same redocly.yaml ruleset as procurement-ingest.
npm run lint:api
npm run docs:preview # builds HTML via redocly build-docs and opens it
Hosted seahaven-dev
HCP Terraform workspace seahaven-ap-dev (project seahaven-dev) uses working directory terraform and a terraform/** VCS trigger on main. GitHub Environment dev holds DEPLOY_ROLE_ARN for githubdeploy-seahaven-ap.
The first apply creates secret seahaven-ap/google-oidc with client_id and client_secret set to replace-me. Replace both values in Secrets Manager, then re-run the HCP apply. A terraform/** change on main starts that apply. The Google IdP is not registered while the placeholder is still current.
The merge that adds these workflows can start Deploy Web and Deploy API before that apply has written /seahaven-ap/deploy/* and before GitHub Environment dev has DEPLOY_ROLE_ARN. Those runs fail on purpose until both exist. Re-run them after the apply.
.github/workflows/deploy-web.yamlsyncsplaceholder/to the web bucket. It does not runvite build..github/workflows/deploy-api.yamlbuilds the API image withGIT_SHA, registers the task definition from/seahaven-ap/deploy/task-environment, migrates, and checksGET /api/health.
Terraform environment is dev only. Prod hostname and GitHub Environment prod are AP-12.
Verify
npm run verify
npm run test:e2e
python3 scripts/test-terraform-dev-only.py
bash scripts/test-verify-api-health.sh