New react app for seahaven
Find a file
Alexandre Brandizzi d1cca884eb feat(infra): serve dev on dev.seahaven.com with HTTPS API proxy
Move the dev frontend to its custom domain now that the backend, DNS zones,
and ACM cert all live in the dev account (396287094661):

- CloudFront alias dev.seahaven.com with the *.seahaven.com ACM cert
- /api/* proxied over HTTPS to api.dev.seahaven.com (no CORS, no mixed content)
- Route 53 apex A/AAAA alias -> CloudFront in the delegated dev.seahaven.com zone

Env-specific values (domain, cert, zone, API host, protocol) are parameterized
and set in cdk.json context so the CI `cdk deploy` produces this with no flags;
staging/prod override the same keys per environment.
2026-07-06 14:40:51 -03:00
.cursor/rules Feat/vite typescript migration (#16) 2026-06-18 14:41:17 -03:00
.github ci(deploy): add AWS S3 + CloudFront CD pipeline 2026-06-29 13:39:53 -03:00
.husky Feat/vite typescript migration (#16) 2026-06-18 14:41:17 -03:00
config Feat/vite typescript migration (#16) 2026-06-18 14:41:17 -03:00
docs Feat/vite typescript migration (#16) 2026-06-18 14:41:17 -03:00
e2e/auth Feat/vite typescript migration (#16) 2026-06-18 14:41:17 -03:00
infra/cdk feat(infra): serve dev on dev.seahaven.com with HTTPS API proxy 2026-07-06 14:40:51 -03:00
public Feat/vite typescript migration (#16) 2026-06-18 14:41:17 -03:00
scripts ci(deploy): add AWS S3 + CloudFront CD pipeline 2026-06-29 13:39:53 -03:00
src Feat/vite typescript migration (#16) 2026-06-18 14:41:17 -03:00
.env Feat/vite typescript migration (#16) 2026-06-18 14:41:17 -03:00
.env.development Feat/vite typescript migration (#16) 2026-06-18 14:41:17 -03:00
.env.example Feat/vite typescript migration (#16) 2026-06-18 14:41:17 -03:00
.env.production feat(infra): proxy /api through CloudFront to the backend 2026-07-02 14:17:27 -03:00
.gitignore ci(deploy): add AWS S3 + CloudFront CD pipeline 2026-06-29 13:39:53 -03:00
.prettierignore Feat/vite typescript migration (#16) 2026-06-18 14:41:17 -03:00
.prettierrc Feat/vite typescript migration (#16) 2026-06-18 14:41:17 -03:00
commitlint.config.js Feat/vite typescript migration (#16) 2026-06-18 14:41:17 -03:00
eslint.config.js Feat/vite typescript migration (#16) 2026-06-18 14:41:17 -03:00
index.html Feat/vite typescript migration (#16) 2026-06-18 14:41:17 -03:00
package-lock.json Feat/vite typescript migration (#16) 2026-06-18 14:41:17 -03:00
package.json Feat/vite typescript migration (#16) 2026-06-18 14:41:17 -03:00
playwright.config.ts Feat/vite typescript migration (#16) 2026-06-18 14:41:17 -03:00
README.md feat(infra): proxy /api through CloudFront to the backend 2026-07-02 14:17:27 -03:00
tsconfig.json Feat/vite typescript migration (#16) 2026-06-18 14:41:17 -03:00
tsconfig.node.json Feat/vite typescript migration (#16) 2026-06-18 14:41:17 -03:00
vite.config.ts Feat/vite typescript migration (#16) 2026-06-18 14:41:17 -03:00
vitest.config.ts Feat/vite typescript migration (#16) 2026-06-18 14:41:17 -03:00

SeaHaven Admin

Vite + React SPA for SeaHaven facility management (work orders, vendor portal, uplifts, and related admin features).

Requirements

  • Node.js 20+
  • npm 10+

Setup

npm ci
cp .env.example .env

Environment variables

Variable Description Default
VITE_API_URL Ky API prefix (baked into the production build) /api
VITE_API_TARGET Dev proxy target for /api (Vite only) http://localhost:5141

VITE_API_URL is the full API base prefix. Route paths in API_PATHS do not include /api — only this variable supplies it.

  • Development: use VITE_API_URL=/api. The Vite dev server proxies /api to VITE_API_TARGET.
  • Production: use an absolute URL that ends with /api (e.g. https://api.example.com/api). Absolute URLs without /api will produce broken API requests.

See .env.example and .env.production for reference values.

Scripts

Command Description
npm run dev Start Vite dev server on port 3000
npm run build Type-check and production build to dist/
npm run preview Preview production build locally
npm test Run Vitest unit tests
npm run test:watch Run Vitest in watch mode
npm run lint ESLint
npm run lint:fix ESLint with auto-fix
npm run format Prettier write
npm run format:check Prettier check (used in CI)

Architecture

New code lives under src/domain/, src/app/, and src/api/ following the IrisLoan conventions documented in docs/ARCHITECTURE_PLAN.md.

CI

GitHub Actions workflow (.github/workflows/ci.yml) runs on push and pull requests:

  1. npm run format:check
  2. npm run lint
  3. npm run build
  4. npm test

Local pre-commit hooks (Husky + lint-staged) run ESLint and Prettier on staged files.

Deployment (CI/CD)

The app is hosted on AWS S3 + CloudFront, provisioned by an AWS CDK app local to this repo (infra/cdk/). Deployment runs through the org's reusable GitHub Actions workflow via OIDC (no stored AWS keys):

  • Push to dev → .github/workflows/deploy.yml calls the org reusable cd-cdk.yaml, which runs cdk deploy (infra) then scripts/deploy-web.sh (builds the SPA, syncs dist/ to S3, invalidates CloudFront).
  • The SPA calls its API same-origin at /api; CloudFront proxies /api/* to the backend, so the HTTPS app can use the HTTP-only API with no mixed-content blocking.
  • First-time provisioning (OIDC provider, CDK bootstrap, first local deploy, the AWS_DEPLOY_ROLE_ARN secret) is a one-time admin task — see infra/cdk/README.md.

Development proxy

During npm run dev, requests to /api are proxied to VITE_API_TARGET (see vite.config.ts).