Referencia Por App
Ficha rápida de cada workspace: qué es, cómo se corre/prueba, cómo se despliega y dónde están sus variables. Los comandos asumen que los corres desde la raíz con pnpm --filter <workspace> <script> (o el atajo pnpm dev:<app> cuando existe).
Backends
core-backend @rnb/core-backend
- Stack: Express + Node + TypeScript. Drizzle sobre PostgreSQL (Main Dashboard DB). Dueño del schema.
- Dev:
pnpm dev:core-backend(tsx --env-file=.env server/index.ts). - Build / start: esbuild bundle a
dist/·startcorrenode dist/index.js. - Test / check:
vitest·check=tsc && tsx scripts/check-schema-mirror.ts(+check:drift). - DB:
db:push/db:generate/db:migrate(drizzle-kit). Schema enpackages/core-shared/src/schema.ts. Flujo real de migraciones en Setup → Migraciones. - Deploy: 🟢 CI → Railway
core-backend(railway.toml, healthcheck/healthz). - Env:
.env.exampleextenso (DB, sesión, Zoho, Resend, OpenAI, Google Maps, Satrack, webhooks, intervalos de sync…).
drivers-backend @rnb/drivers-backend
- Stack: Express + Node + TypeScript. Comparte la Postgres de core.
- Dev:
pnpm dev:drivers-backend(tsx server/index.ts). - Build / start: esbuild a
server_dist/. - Test:
vitest. ⚠️typecheckarrastra deuda estricta (falla aunque runtime esté OK). - DB:
db:pushDESHABILITADO (sale conexit 1). Schema espejo enshared/schema.ts; cambios solo desde core-backend. - Deploy: 🟢 CI → Railway
rnb-drivers-api(railway.toml,numReplicas 2). - Env:
.env.examplecon DB,ROUTE_ENGINE_SESSIONS_ENABLED,RNB_ENGINE_URL, bucket R2, claves de mapas/notificaciones, etc.
engine-backend @rnb/engine-backend
- Stack: FastAPI + Python 3.12, SQLAlchemy async, OR-Tools (VRPTW), Redis. Migra con Alembic.
- Dev:
pnpm dev:engine-backend(uvicornros.main:app --reload --app-dir src). Requiere venv conpip install -e ".[dev]". - Test:
pnpm test:engine-backend(pytest, desdeapps/engine-backend).mypypara tipos. - Deploy: 🟢 CI → Railway
engine-backendpor Dockerfile (alembic upgrade head && uvicorn …). - Env: prefijo
ROS_*(DB, Redis/Sentinel, solver, OSRM, JWT, rate limit, ETA model, OTel…).
clients-backend @rnb/clients-backend
- Stack: Hono + Cloudflare Worker. Base D1 (SQLite), Drizzle. Aislado de la Postgres principal.
- Dev:
pnpm dev:clients-backend(wrangler dev --env dev).dev:prodpara--remote. - Build / test:
build=wrangler deploy --dry-run·test=vitest(worker tests). ⚠️lint(Biome) tiene deuda. - DB:
db:generate·db:migrate-local|dev|prod(wrangler d1 migrations apply …).db:studio. - Deploy: 🔴 Manual
deploy:prod(+db:migrate-prodaparte). Workerbackend-clients-rnb-logistics. - Env:
.dev.vars.example(JWT, orígenes, cookies, admin key, webhooks Zoho/RNB) +.env.example(config Drizzle/D1).
Frontends
dash-web @rnb/dash-web
- Stack: Vite + React + Tailwind. Sirve como Cloudflare Worker (assets de
dist/+ proxyworker/index.tsaBACKEND_URL). - Dev:
pnpm dev:dash-web(vite).preview= build +wrangler dev. - Check:
tsc --noEmit(sin suite de tests). - Deploy: 🔴 Manual
deploy:prod(vite build && wrangler deploy --env prod). Workerfrontend-dash-rnb-logistics-prod. Verificarbuild-info.json. - Env:
.env.example(VITE_API_PROXY_TARGET,VITE_WS_PROXY_TARGET,VITE_API_BASE_URL);BACKEND_URLenwrangler.jsonc.
clients-web @rnb/clients-web
- Stack: Next.js 15 (React 19) desplegado en Workers vía OpenNext.
- Dev:
pnpm dev:clients-web(next dev).previewconopennextjs-cloudflare. - Deploy: 🔴 Manual
deploy:prod.deploy:devfijaNEXT_PUBLIC_API_URLal backend dev. - Env:
NEXT_PUBLIC_API_URL,NEXT_PUBLIC_GOOGLE_MAPS_API_KEY. Documentación propia en suCLAUDE.md.
client-tracking-view @rnb/client-tracking-view
- Stack: Vite + React + Tailwind, Cloudflare Worker. Es la vista pública de tracking.
- Deploy: 🔴 Manual
deploy:prod. Workerfrontend-tracking-view-rnb-logistics. - Env:
DRIVERS_APP_API_URL(arnb-drivers-apien Railway) enwrangler.jsonc;GOOGLE_DIRECTIONS_API_KEYcomo secret (wrangler secret put).
engine-web @rnb/engine-web
- Stack: Estático (HTML/CSS/JS de
public/, consume/v1/*del engine).build= copiarpublic/adist/,start=http.server. - Deploy: No se usa en producción. Solo
engine-backend(la API) está activo; el dashboard estático quedó como artefacto y no se despliega ni se mantiene.
Apps Móviles (Expo / React Native)
drivers-app @rnb/drivers-app
- Stack: Expo + RN 0.81. App de conductores. El mapa es server-rendered (POST
/api/mapa drivers-backend). - Dev:
pnpm dev:drivers-app(expo start). Nativo:expo run:ios/expo run:android. Las carpetasios//android/se generan y no se commitean. - Check:
typecheck(tsc),lint(expo lint),format(prettier). - Deploy: 🔴 OTA manual
eas update --branch production(desdeorigin/main).runtimeVersion 1.2.1. - Env:
EXPO_PUBLIC_DOMAIN=api-drivers.rednbluelogistics.com.
clients-mobile @rnb/clients-mobile
- Stack: Expo 55 / RN 0.84. App de clientes preservada del repo viejo. No está en el pipeline de producción.
- Comandos:
start,ios,android,lint,typecheck. Sin env de runtime.
demo-printer-scanner-expo
- Stack: Expo 55. Demo de hardware (impresora Bluetooth + escáner). No productivo.
Compartido Y Docs
packages/core-shared @rnb/core-shared
- Qué es: TypeScript compartido — define y exporta el schema Drizzle (
src/schema.ts) + utilidades geo / ventana-horaria. Lo consumen core-backend y drivers-backend. - Check:
typecheck. No se despliega. Mantenlo liviano y compatible con ambos consumidores.
zoho-app
- Qué es: Espejo/referencia de la app de Zoho Creator (Deluge: forms, functions, schedules). No es Node. No se buildea ni se deploya desde el repo. Ver
AGENTS.mdydocs/de la app. - Deploy: 🔴 Manual en la consola de Zoho Creator.
logistics-process-manual @rnb/logistics-process-manual
- Qué es: este sitio (VitePress).
dev/build/previewcon vitepress. - Deploy: 🟢 Auto — Cloudflare Pages. Conectado al repo; al mergear a
maindetecta cambios enapps/logistics-process-manual/y buildea/publica solo. No usa wrangler ni el CI de Railway.