This repository hosts the full-stack Abroad Platform as a simple monorepo with:
abroad-server: TypeScript Node.js API (TSOA, Prisma, Express)abroad-ui: React + Vite frontend
- Docker & Docker Compose (for dev container)
- Node.js (>=18) and npm (pre-installed in dev container)
- Git (pre-installed in dev container)
- Clone the repository:
git clone <repo-url> abroad cd abroad
- Start the dev container (if using VS Code dev containers):
- Open in VS Code and select "Reopen in Container".
- Install dependencies:
cd abroad-server && npm install cd ../abroad-ui && npm install cd ..
- Configure environment variables:
- Copy
.env.exampleto.env(backend). - Copy
abroad-ui/.env.exampletoabroad-ui/.env(frontend). - Update credentials (database URL, Firebase, secret manager, etc.).
- Copy
npm run dev:server # from repo root, or:
cd abroad-server && npm run devnpm run dev:ui # from repo root, or:
cd abroad-ui && npm run devRun both servers concurrently or in separate terminals.
- Run tests:
npm test # runs Jest for backend and frontend tests
- Lint code:
npm run lint # ESLint (skip lint errors when fixing code)
Sentry is optional in both abroad-server and abroad-ui.
- Backend (
abroad-server) runtime env vars:SENTRY_DSNSENTRY_ENVIRONMENT(defaults toNODE_ENV)SENTRY_RELEASE(optional)
- Frontend (
abroad-ui) runtime env vars:VITE_SENTRY_DSNVITE_SENTRY_ENVIRONMENT(defaults toimport.meta.env.MODE)VITE_SENTRY_RELEASE(optional)
- Frontend sourcemap upload during build (CI only):
SENTRY_AUTH_TOKEN,SENTRY_ORG,SENTRY_PROJECTSENTRY_RELEASE(or a CI commit SHA env var such asGITHUB_SHA)- Ensure
VITE_SENTRY_RELEASEmatches the release name used for upload, otherwise Sentry cannot apply sourcemaps.
.
├── abroad-server
│ ├── src # API source (controllers, services, infra)
│ ├── prisma # Prisma schema & migrations
│ ├── k8s # Kubernetes manifests
│ ├── cloud # Cloud Build config
│ ├── Dockerfile # API Dockerfile
│ ├── package.json # Server scripts & deps
│ └── ... # Server configs (tsoa, tsconfig, jest, etc.)
├── abroad-ui # React + Vite frontend
│ └── package.json
└── package.json # Monorepo helper scripts
El frontend (abroad-ui) está configurado para desplegarse en Vercel. El archivo vercel.json en la raíz del repo define:
- Build:
npm run build:ui(monorepo root) - Output:
abroad-ui/dist
Para que cada push a GitHub dispare un deploy automático:
- Entra a Vercel Dashboard e inicia sesión con la cuenta del equipo (ej. abroad@kinto.info).
- Abre el proyecto abroad (o créalo si aún no está vinculado a Git).
- Ve a Settings → Git.
- En Connect Git Repository elige GitHub y autoriza a Vercel si lo pide.
- Conecta el repo abroad-kinto/abroad (o el que uses).
- En Production Branch pon la rama que quieras para producción, por ejemplo
new-uiomain. - Guarda. A partir de ahí, cada push (y cada PR) generará un deploy:
- Rama de producción → actualiza la URL de producción (ej.
abroad-delta.vercel.app). - Otras ramas y PRs → generan una preview con URL única.
- Rama de producción → actualiza la URL de producción (ej.
Las variables de entorno (Vite, Sentry, etc.) se configuran en Settings → Environment Variables del proyecto en Vercel. Para que el front en Vercel hable con tu API y WebSocket:
VITE_API_URL: URL base del API (ej.https://api.abroad.finance). Sin esto, las peticiones REST y la URL del WebSocket pueden fallar o apuntar al dominio de la preview.VITE_WS_URL(opcional): URL del WebSocket (ej.wss://api.abroad.finance:4000). Si no se define, se deriva deVITE_API_URL+ puerto4000. El servidor debe exponer ese puerto y aceptar conexiones desde el dominio del front (CORS/WS).
Si en la consola ves errores de conexión a wss://api.abroad.finance:4000, comprueba que el backend esté levantado, que el puerto 4000 sea accesible desde internet y que en Vercel tengas VITE_API_URL (y si hace falta VITE_WS_URL) configuradas.
- Build API Docker image (from repo root):
docker build -t abroad-api -f abroad-server/Dockerfile abroad-server
- Kubernetes manifests now live under
abroad-server/k8s/. - GKE workloads deployed via kustomize now include listeners, consumers, and the outbox worker health service.
- Cloud Build config moved to
abroad-server/cloud/cloudbuild.yamland uses the new Dockerfile path.
Contributions are welcome! Please open issues or PRs with clear descriptions.