Skip to content

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/ · start corre node 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 en packages/core-shared/src/schema.ts. Flujo real de migraciones en Setup → Migraciones.
  • Deploy: 🟢 CI → Railway core-backend (railway.toml, healthcheck /healthz).
  • Env: .env.example extenso (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. ⚠️ typecheck arrastra deuda estricta (falla aunque runtime esté OK).
  • DB: db:push DESHABILITADO (sale con exit 1). Schema espejo en shared/schema.ts; cambios solo desde core-backend.
  • Deploy: 🟢 CI → Railway rnb-drivers-api (railway.toml, numReplicas 2).
  • Env: .env.example con 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 (uvicorn ros.main:app --reload --app-dir src). Requiere venv con pip install -e ".[dev]".
  • Test: pnpm test:engine-backend (pytest, desde apps/engine-backend). mypy para tipos.
  • Deploy: 🟢 CI → Railway engine-backend por 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:prod para --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-prod aparte). Worker backend-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/ + proxy worker/index.ts a BACKEND_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). Worker frontend-dash-rnb-logistics-prod. Verificar build-info.json.
  • Env: .env.example (VITE_API_PROXY_TARGET, VITE_WS_PROXY_TARGET, VITE_API_BASE_URL); BACKEND_URL en wrangler.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). preview con opennextjs-cloudflare.
  • Deploy: 🔴 Manual deploy:prod. deploy:dev fija NEXT_PUBLIC_API_URL al backend dev.
  • Env: NEXT_PUBLIC_API_URL, NEXT_PUBLIC_GOOGLE_MAPS_API_KEY. Documentación propia en su CLAUDE.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. Worker frontend-tracking-view-rnb-logistics.
  • Env: DRIVERS_APP_API_URL (a rnb-drivers-api en Railway) en wrangler.jsonc; GOOGLE_DIRECTIONS_API_KEY como secret (wrangler secret put).

engine-web @rnb/engine-web

  • Stack: Estático (HTML/CSS/JS de public/, consume /v1/* del engine). build = copiar public/ a dist/, 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/map a drivers-backend).
  • Dev: pnpm dev:drivers-app (expo start). Nativo: expo run:ios / expo run:android. Las carpetas ios//android/ se generan y no se commitean.
  • Check: typecheck (tsc), lint (expo lint), format (prettier).
  • Deploy: 🔴 OTA manual eas update --branch production (desde origin/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.md y docs/ 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 / preview con vitepress.
  • Deploy: 🟢 Auto — Cloudflare Pages. Conectado al repo; al mergear a main detecta cambios en apps/logistics-process-manual/ y buildea/publica solo. No usa wrangler ni el CI de Railway.

Borrador vivo basado en codigo. Validar con operaciones antes de convertir en procedimiento oficial.