Guía Completa de Incorporación
Una guía completa para nuevos miembros del equipo para entender nuestra infraestructura, stack tecnológico y el camino desde nuestra configuración actual hacia la arquitectura objetivo. Aprende cómo construimos apps escalables, agentes IA y productos web.
v1.2 // Diciembre 2024¡Bienvenido a 498AS! Antes de sumergirnos en tecnologías específicas, entendamos por qué existe nuestra arquitectura y qué problemas resuelve.
498AS es una startup en rápido crecimiento que construye múltiples productos:
Nuestros clientes incluyen entidades corporativas como DIBA (Diputació de Barcelona), bancos y otras instituciones que requieren fiabilidad de nivel empresarial.
Cuando un usuario sube un archivo Excel para que nuestra IA lo procese, no podemos predecir:
Un solo trabajo pesado podría bloquear un servidor entero si no está correctamente aislado.
Tenemos un equipo de desarrollo pequeño pero gestionamos:
Necesitamos automatización y herramientas inteligentes, no operaciones manuales.
Necesitamos:
Para abordar estos desafíos, hemos diseñado una arquitectura con clara separación de responsabilidades:
Esta separación significa que un problema en un plano no se propaga a los demás. Un trabajo de IA desbocado no tirará un dashboard de cliente.
Antes de explorar nuestras herramientas específicas, establezcamos un vocabulario común. Si ya estás familiarizado con estos conceptos, puedes ojear este capítulo rápidamente.
El Sistema de Nombres de Dominio (DNS) traduce nombres de dominio legibles por humanos (como georadar.app) en direcciones IP (como 5.135.151.118) que los ordenadores usan para comunicarse.
Tipos de registros DNS clave que usamos:
| Tipo de Registro | Propósito | Ejemplo |
|---|---|---|
A |
Apunta dominio a dirección IPv4 | api.example.com → 91.99.50.229 |
CNAME |
Apunta dominio a otro dominio | www → @ (www apunta a raíz) |
MX |
Configuración del servidor de correo | Enrutamiento de email |
TXT |
Registros de texto para verificación | SPF, DKIM para seguridad de email |
Un proxy inverso se sitúa entre los usuarios y tus servidores. Recibe todas las peticiones entrantes y decide qué servicio backend debe manejar cada una.
Beneficios de los proxies inversos:
api.example.com al servidor API, app.example.com al servidor de appUsamos Caddy (via Coolify) como nuestro proxy inverso. Gestiona automáticamente los certificados SSL mediante Let's Encrypt.
Un contenedor es un paquete ligero e independiente que incluye todo lo necesario para ejecutar una aplicación: código, runtime, librerías y configuración. Piensa en él como un "contenedor de transporte" para software.
Beneficios clave:
Usamos contenedores Docker gestionados por Coolify.
OrbStack es una alternativa ligera a Docker Desktop para macOS. Ofrece mejor rendimiento, arranque más rápido y menor consumo de recursos manteniendo compatibilidad total con Docker CLI y Compose.
Beneficios clave de OrbStack:
Integración Continua/Despliegue Continuo compila, prueba y despliega código automáticamente cuando los desarrolladores suben cambios. No se necesitan actualizaciones manuales del servidor.
Nuestro flujo CI/CD:
Una cola de mensajes es un sistema para manejar tareas de forma asíncrona. En lugar de hacer esperar a los usuarios por operaciones lentas, añadimos tareas a una cola y las procesamos en segundo plano.
Usamos Redis + BullMQ para colas. Casos de uso comunes:
Una base de datos vectorial almacena datos como vectores numéricos de alta dimensión (embeddings). Esto permite búsqueda semántica - encontrar elementos por significado en lugar de palabras clave exactas.
Ejemplo: Si buscas "problemas con el coche", una base de datos vectorial puede encontrar documentos sobre "averías de vehículos" o "fallos de automóvil" aunque esas palabras exactas no estén en tu consulta.
Usamos Convex para almacenamiento vectorial y búsqueda semántica en nuestros flujos de trabajo de IA.
Ahora construyamos un modelo mental de cómo encajan todas estas piezas.
Cuando un usuario visita una de nuestras aplicaciones, esto es lo que sucede:
El navegador del usuario pregunta "¿Cuál es la IP de app.georadar.app?" → Cloudflare responde con la IP de nuestro servidor (o la IP del proxy de Cloudflare)
La petición llega primero a Cloudflare → WAF comprueba ataques, se aplica rate limiting, protección DDoS se activa si es necesario
La petición llega a nuestro servidor → Caddy termina SSL, enruta al contenedor correcto según el hostname
El contenedor maneja la petición → Puede consultar base de datos, llamar APIs externas, o encolar trabajos en segundo plano
La respuesta viaja de vuelta por el mismo camino → Puede cachearse en Cloudflare para futuras peticiones
Cuando un desarrollador sube código:
Cuando un usuario sube un archivo para procesamiento de IA:
El procesamiento de IA ocurre en un sandbox aislado de Daytona, no en nuestro servidor principal. Si la IA genera código malo o el archivo Excel es malicioso, no puede afectar a nuestras otras aplicaciones o bases de datos.
Cloudflare se sitúa entre los usuarios y nuestros servidores, proporcionando servicios de DNS, caché y seguridad en más de 330 ubicaciones globales.
Cloudflare es nuestro proveedor de DNS. Cuando alguien visita nuestros dominios, Cloudflare le dice a su navegador dónde encontrarnos.
Nuestra configuración DNS:
Cuando activas el icono de la nube naranja en un registro DNS, el tráfico fluye a través de Cloudflare en lugar de ir directamente a tu servidor.
Usuario → Tu Servidor (IP expuesta)
Usuario → Cloudflare → Tu Servidor (IP oculta, protegida)
| Funcionalidad | Qué Hace | Nuestro Uso |
|---|---|---|
| Protección DDoS | Absorbe tráfico de ataque antes de que nos llegue | Siempre activo |
| WAF | Bloquea ataques web comunes (SQL injection, XSS) | Activado en endpoints API |
| Rate Limiting | Limita peticiones por IP para prevenir abuso | Endpoints de auth, llamadas API |
| Gestión de Bots | Identifica y desafía tráfico sospechoso | Formularios, páginas de login |
Cloudflare Access nos permite proteger herramientas internas (como nuestro panel Coolify) sin VPN:
Cloudflare es nuestra primera línea de defensa. Todo el tráfico público debe pasar por Cloudflare (nube naranja activada). Esto nos da seguridad, rendimiento y visibilidad sin gestionarlo nosotros mismos.
Coolify es una alternativa open-source y auto-alojada a Heroku/Vercel. Gestiona nuestros despliegues de aplicaciones, bases de datos y certificados SSL.
Coolify nos da la experiencia de desarrollador de Heroku con control total sobre nuestra infraestructura:
| Heroku/Vercel | Coolify |
|---|---|
| Gestionado por proveedor | Auto-alojado en nuestros servidores |
| Pago por recurso | Solo pago por VPS (~6€/mes) |
| Dependencia del proveedor | Contenedores Docker portables |
| Personalización limitada | Control total |
A partir de 2024, Coolify está en desarrollo activo pero tiene algunas limitaciones a tener en cuenta:
Estos son trade-offs aceptables para nuestra escala. Si superamos Coolify, podemos migrar a Kubernetes.
Idealmente, Coolify debería ejecutarse en un servidor separado de las aplicaciones de producción. De esta forma, si un servidor de producción tiene problemas, aún puedes acceder a Coolify para diagnosticar y redesplegar.
Vincular repositorio GitHub al proyecto Coolify
Establecer comandos de build, variables de entorno y dominio
Coolify crea un webhook en GitHub para despliegues automáticos
El push de código dispara build → deploy → en vivo en ~1-2 minutos
Todo nuestro código vive en la organización GitHub de 498AS. GitHub sirve como nuestra única fuente de verdad y dispara los despliegues.
github.com/498AS/
├── startdesk-dashboard # Aplicación dashboard de cliente
├── gorila # Sistema KONG para informes DIBA
├── 3cat-dashboard # Dashboard proyecto 3Cat
├── prompt-kitchen # Gestión de prompts IA
├── paw-influencers # Analítica de influencers
└── [otros proyectos...]
Cuando el código se fusiona a main, se despliega automáticamente a producción. Esto mantiene las cosas simples y fomenta despliegues pequeños y frecuentes.
| Rama | Propósito | Auto-Deploy |
|---|---|---|
main |
Código de producción | Sí - a producción |
feature/* |
Nuevas funcionalidades en desarrollo | No (futuro: entornos PR) |
staging |
Testing pre-producción | Futuro: a servidor staging |
Nuestra capa de datos consiste en tres sistemas complementarios, cada uno optimizado para diferentes casos de uso.
PostgreSQL almacena nuestros datos de negocio principales: usuarios, proyectos, configuraciones y registros históricos.
Redis proporciona almacenamiento rápido en memoria para caché, gestión de sesiones y como backend para nuestras colas de trabajos.
| Caso de Uso | Ejemplo |
|---|---|
| Colas de Trabajos (BullMQ) | Procesamiento en segundo plano de trabajos IA, generación de informes |
| Caché | Caché de respuestas API, resultados computados |
| Sesiones | Almacenamiento de sesiones de usuario |
| Rate Limiting | Contadores de peticiones por IP/usuario |
Convex es una base de datos reactiva con búsqueda vectorial integrada. La usamos para flujos de trabajo de IA que necesitan búsqueda semántica y gestión del estado de procesos.
// Schema con índice vectorial
import { defineSchema, defineTable } from "convex/server";
import { v } from "convex/values";
export default defineSchema({
documents: defineTable({
content: v.string(),
embedding: v.array(v.float64()), // Embedding vectorial
metadata: v.object({...})
}).vectorIndex("by_embedding", {
vectorField: "embedding",
dimensions: 1536, // OpenAI text-embedding-ada-002 / text-embedding-3-small
// Nota: text-embedding-3-large usa 3072 dimensiones
})
});
| Sistema | Tipo de Datos | Persistencia |
|---|---|---|
| PostgreSQL | Datos de negocio, usuarios, registros | Permanente (almacenamiento frío) |
| Redis | Colas, caché, sesiones | Efímero (puede perderse) |
| Convex | Vectores, estado IA, tiempo real | Permanente (almacenamiento caliente) |
Daytona proporciona sandboxes seguros y efímeros para ejecutar código generado por IA y procesar archivos no confiables. Es nuestra red de seguridad para cargas de trabajo impredecibles.
Cuando Claude u otro LLM genera y ejecuta código:
Daytona crea entornos aislados donde:
| Aspecto | Ejecutar en Servidor | Ejecutar en Daytona |
|---|---|---|
| Aislamiento | Bajo (mismo kernel) | Alto (entorno separado) |
| Impacto de crash | Puede afectar otros servicios | Solo afecta ese trabajo |
| Control de recursos | Compartido, impredecible | Dedicado por sandbox |
| Seguridad | Débil contra input malicioso | Aislamiento fuerte |
| Mejor para | CRUD, dashboards, APIs | Trabajos IA, parsing de archivos, código no confiable |
Cualquier cosa que involucre ejecución de código IA o archivos subidos por usuarios DEBE pasar por Daytona. Esto es innegociable para sistemas de producción.
| Nivel | Mejor Para | Características Clave |
|---|---|---|
| Free | Desarrollo, testing | Horas de sandbox limitadas, soporte básico |
| Pro | Cargas de producción | Límites mayores, soporte prioritario, warm pools |
| Enterprise | Alto volumen, compliance | Límites personalizados, SLA, soporte dedicado |
Nuestra infraestructura corre sobre proveedores europeos, elegidos por su relación coste-efectividad, cumplimiento GDPR y buen rendimiento.
Proveedor cloud alemán con excelente ratio precio-rendimiento. Nuestro servidor principal para aplicaciones web.
| Especificación | Valor |
|---|---|
| Modelo | CPX22 |
| vCPU | 2 cores (AMD EPYC) |
| RAM | 4 GB |
| Almacenamiento | 80 GB NVMe SSD |
| Tráfico | 20 TB/mes incluido |
| Ubicación | Núremberg, Alemania (nbg1) |
| Coste | ~6€/mes |
Proveedor cloud francés. Actualmente aloja nuestro plano de control Coolify y varias aplicaciones de producción.
Proveedor español para registro de dominios. Registramos dominios aquí, luego apuntamos el DNS a Cloudflare.
Separamos responsabilidades entre proveedores:
Esto nos da flexibilidad para cambiar cualquier componente sin afectar a los demás.
Veamos exactamente qué tenemos ejecutándose hoy. Este es el estado "AS-IS" desde el que estamos evolucionando.
| Aplicación | Tipo | Estado | Propósito |
|---|---|---|---|
| startdesk-dashboard | Frontend | Ejecutándose | Dashboard principal de cliente |
| dashboard-bs | Frontend | Ejecutándose | Dashboard cliente bancario |
| 3cat-dashboard | Frontend | Ejecutándose | Proyecto 3Cat |
| gorila (KONG) | Backend | Ejecutándose | Sistema de informes DIBA |
| prompt-kitchen | Servicio | Ejecutándose | Gestión de prompts |
Antes de discutir mejoras, reconozcamos lo que nuestra configuración actual hace bien.
Ya estamos usando Daytona para cargas de trabajo de IA. Esta es la decisión arquitectónica más importante que hemos tomado.
Push a main → desplegado en ~2 minutos. Sin SSH manual, sin subidas FTP, sin coordinación necesaria.
Los trabajos de larga duración pasan por colas BullMQ. Los usuarios no esperan; se les notifica cuando el procesamiento completa.
Tenemos protección DDoS, WAF y caché CDN sin gestionarlo nosotros mismos.
Ahora evaluemos honestamente los riesgos en nuestra configuración actual.
Nuestro servidor OVH ejecuta todo: Coolify, Caddy, apps, APIs, Redis, PostgreSQL y workers - todos compitiendo por los mismos recursos.
Coolify corre en el mismo servidor que producción. Si el servidor crashea, no podemos desplegar arreglos porque Coolify también está caído.
Las bases de datos PostgreSQL comparten recursos con las aplicaciones. No hay infraestructura de backup dedicada.
| Riesgo | Probabilidad | Impacto | Estado Actual |
|---|---|---|---|
| Contención de recursos | Alta | Medio | Riesgo activo |
| No se puede desplegar durante caída | Media | Alto | Riesgo activo |
| Corrupción de base de datos | Baja | Crítico | Necesita verificación de backup |
| Fallo total del servidor | Baja | Crítico | Punto único de fallo |
Estos riesgos no significan que nuestro sistema sea malo. Son dolores de crecimiento naturales de una startup exitosa. El hecho de que los hayamos identificado es el primer paso para abordarlos.
Antes de profundizar en los detalles, establezcamos los principios que guían nuestra arquitectura objetivo.
Si un servidor API crashea, no debería tirar otras APIs, afectar la base de datos, romper nuestra capacidad de desplegar, o impactar clientes no relacionados.
La nueva arquitectura debe seguir permitiendo despliegues rápidos, rollbacks fáciles, cambios radicales cuando sea necesario, e incorporación rápida de nuevos proyectos.
No necesitamos Kubernetes para todo. Empezar pequeño, monitorizar, escalar componentes específicos según necesidad, y usar servicios gestionados para cargas impredecibles.
| Servidor | Rol | Qué Corre Aquí | Dimensionamiento |
|---|---|---|---|
| Plano de Control | Gestión | Solo Coolify | CPX11 (~3€/mes) |
| Tier Web | Estático/Marketing | Sitios corporativos, landings | CPX22 (~6€/mes) |
| Tier Producto | Aplicaciones | APIs, dashboards, workers | CPX31 (~12€/mes) |
| Tier Datos | Persistencia | PostgreSQL, Redis, backups | CPX22 + Volume |
Coolify corre junto a apps de producción. Si el servidor crashea, no se puede desplegar arreglos.
Coolify en servidor dedicado. Siempre se puede acceder y desplegar, incluso durante caídas.
PostgreSQL compite con apps por recursos. Sin infraestructura de backup dedicada.
La base de datos tiene recursos dedicados. Programación de backup adecuada. Puede escalar independientemente.
No estamos cambiando nuestro stack tecnológico. Estamos cambiando cómo está distribuido a través de la infraestructura. Esto minimiza el riesgo mientras resuelve nuestros desafíos de escalado.
Migraremos incrementalmente, no todo de una vez. Cada fase entrega valor y reduce riesgo.
Objetivo: Reducir riesgo sin cambios de infraestructura
Resultado: Menor superficie de ataque, capacidad de recuperación verificada
Objetivo: Sistema de despliegue independiente de producción
Resultado: Se puede desplegar y recuperar incluso durante caídas de producción
Objetivo: Bases de datos en infraestructura dedicada
Resultado: Estabilidad de base de datos, backups adecuados, escalado independiente
Objetivo: Todas las cargas de trabajo IA a través de Daytona, sin excepciones
Resultado: Uso de recursos predecible, servidores de producción protegidos
Objetivo: Testing seguro antes de producción
Resultado: Detectar problemas antes de que lleguen a producción
Objetivo: Saber qué está pasando en el sistema
Resultado: Detección proactiva de problemas, control de costes
# 1. Haz tus cambios localmente
git add .
git commit -m "feat: add new dashboard widget"
# 2. Push a main (dispara auto-deploy)
git push origin main
# 3. Monitoriza el despliegue en el panel Coolify
# El despliegue típicamente completa en 1-2 minutos
# SSH al servidor
ssh user@5.135.151.118
# Listar contenedores en ejecución
docker ps
# Ver logs de contenedor específico
docker logs <container_name> --tail 100
# Seguir logs en tiempo real
docker logs <container_name> -f
# Desde el servidor
docker exec -it <postgres_container> psql -U postgres
# Listar bases de datos
\l
# Conectar a base de datos específica
\c database_name
# Listar tablas
\dt
# Salir
\q
Nunca commitees secretos a Git. Siempre usa variables de entorno para:
En organización 498AS con estructura estándar
Crear nuevo proyecto o añadir a uno existente
Vincular repo GitHub, configurar ajustes de build
Configurar subdominio (ej: newapp.georadar.app)
En Cloudflare, apuntar subdominio a IP del servidor
Push del código, Coolify se encarga del resto
| Sistema | Quién Tiene Acceso | Cómo Obtener Acceso |
|---|---|---|
| GitHub (498AS) | Equipo de desarrollo | Solicitar al admin de org |
| Panel Coolify | DevOps / Devs senior | Admin crea cuenta |
| SSH Servidor | Solo DevOps | Clave SSH añadida por admin |
| Cloudflare | Equipo de infraestructura | Invitación de cuenta |
| BD Producción | Solo via aplicación | Sin acceso directo |
| Síntoma | Causa Probable | Solución |
|---|---|---|
| Falla el build | Dependencias faltantes o error de sintaxis | Revisar logs de build, ejecutar build localmente |
| Contenedor no arranca | Vars de entorno faltantes o conflicto de puerto | Revisar logs, verificar vars de entorno |
| Falla el health check | App crashea al iniciar | Revisar logs de aplicación |
| Síntoma | Causa Probable | Solución |
|---|---|---|
| 502 Bad Gateway | App crasheó o no responde | Reiniciar contenedor, revisar logs |
| 503 Service Unavailable | Contenedor no está corriendo | Iniciar contenedor en Coolify |
| Error SSL | Certificado no emitido | Verificar DNS, esperar certificado |
| Respuestas lentas | Contención de recursos | Revisar carga del servidor, optimizar queries |
| Servicio | URL |
|---|---|
| Panel Coolify | https://coolify.yourdomain.com |
| Dashboard Cloudflare | https://dash.cloudflare.com |
| Organización GitHub | https://github.com/498AS |
| Dashboard Convex | https://dashboard.convex.dev |
| API Daytona | https://api.daytona.io |
# Ver qué está corriendo
docker ps
# Ver logs de contenedor
docker logs <container> --tail 100
# Reiniciar un contenedor
docker restart <container>
# Verificar espacio en disco
df -h
# Verificar uso de memoria
free -h
# Probar resolución DNS
dig +short app.georadar.app
# Probar HTTPS
curl -I https://app.georadar.app
La arquitectura de 498AS se organiza en cinco planos con una clara separacion de responsabilidades, disenada para que los fallos en una capa no afecten a las demas.
Gestiona el trafico antes de que llegue a los servidores.
Una pregunta frecuente es si AWS puede sustituir nuestro stack actual. La respuesta corta es: en gran parte si, pero con matices importantes.
| Componente 498AS | Equivalente AWS | Notas |
|---|---|---|
| Cloudflare (Edge) | CloudFront + WAF + Route 53 + Shield | Funcionalidad equivalente, mas integracion con ecosistema AWS |
| Coolify (Control) | ECS/EKS + CodePipeline + CodeBuild | Mas complejo de configurar, pero mas escalable |
| Hetzner/OVH (VPS) | EC2 / Fargate / Lambda | Coste variable, excelente para elasticidad |
| PostgreSQL | RDS PostgreSQL / Aurora | Gestionado, backups automaticos, replicas |
| Redis | ElastiCache Redis | Gestionado, clustering disponible |
Convex combina varias funcionalidades en un solo producto:
En AWS: Requiere combinar varios servicios:
OpenSearch o pgvector para vectoresAppSync o API Gateway + WebSockets para reactividadLambda para funciones backendNo existe un "Convex en un solo producto" en AWS.
Daytona proporciona sandboxes efimeros con cold start de ~90ms, perfectos para ejecucion de codigo IA.
En AWS: Se sustituye por un patron, no por un producto equivalente:
AWS Batch + Fargate para ejecucion aisladaStep Functions para orquestacionLambda con contenedores para cargas pequenasMas complejo de implementar, pero mayor control y escala.
| Plano | 498AS Actual | Equivalente AWS |
|---|---|---|
| Edge | Cloudflare | CloudFront + WAF + Shield + Route 53 |
| Control | Coolify + GitHub | ECS/EKS + CodePipeline + CodeBuild |
| Apps | Docker en VPS | ECS Fargate / EKS / App Runner |
| Datos | PostgreSQL + Redis | RDS/Aurora + ElastiCache |
| Vectores | Convex | OpenSearch + pgvector + Kendra |
| Ejecucion IA | Daytona | Batch + Fargate + Step Functions |
| Storage | Cloudflare R2 | S3 |
| Colas | BullMQ (Redis) | SQS + Lambda / Step Functions |
Nuestro stack actual esta optimizado para agilidad y coste en una startup. AWS es una opcion valida cuando:
Para la mayoria de nuestros casos de uso actuales, el stack Cloudflare + Coolify + Hetzner ofrece mejor relacion coste-control.
Ahora has aprendido la imagen completa de la arquitectura de sistemas de 498AS:
Mantén las cargas de trabajo de IA en Daytona. Mantén la base de datos separada. Mantén el plano de control independiente. El aislamiento previene fallos en cascada.
Nuestro pipeline CI/CD nos permite desplegar rápido y seguro. Aprovéchalo. Haz push de cambios pequeños frecuentemente en lugar de cambios grandes raramente.
Nunca escribas secretos en el código. Siempre usa Cloudflare. Siempre valida el input. La seguridad no es una característica - es cómo construimos.
La hoja de ruta de migración muestra que estamos evolucionando activamente. Si ves formas de mejorar, habla. Las buenas ideas vienen de todas partes.
Cuando estés atascado:
Bienvenido a 498AS. Construyamos grandes cosas juntos.
Herramientas y plataformas de nuestra arquitectura, ordenadas según el flujo de desarrollo.
Además de la infraestructura, nuestro stack de desarrollo de aplicaciones incluye:
Herramientas completas para el desarrollo de código en 498AS.
| Herramienta | Propósito |
|---|---|
| Visual Studio Code | IDE principal |
| Cursor | IDE potenciado con IA (fork de VS Code con Claude/GPT) |
| Claude Code / OpenCode | Asistente de programación IA via terminal |
| GitHub Copilot | Autocompletado de código con IA |
| CLAUDE.md | Archivo de contexto del proyecto para asistentes IA |
| Herramienta | Propósito |
|---|---|
| Bun | Runtime JS/TS y gestor de paquetes principal |
| Node.js | Runtime alternativo |
| Turborepo | Orquestación de builds en monorepos |
| Vite | Herramienta de build y servidor de desarrollo |
| Next.js | Framework React full-stack (algunos proyectos) |
| Herramienta | Propósito |
|---|---|
| React (18/19) | Framework de UI |
| TanStack Router | Enrutamiento type-safe |
| TanStack Query | Estado del servidor y fetching de datos |
| TanStack Form | Gestión de formularios |
| TanStack Table | Tablas de datos |
| React Hook Form | Manejo alternativo de formularios |
| Zustand | Gestión de estado del cliente |
| Herramienta | Propósito |
|---|---|
| Tailwind CSS (v3/v4) | CSS utility-first |
| Radix UI | Primitivos de UI accesibles |
| shadcn/ui | Librería de componentes |
| Framer Motion | Animaciones |
| Lucide React | Iconos |
| Recharts | Gráficos y visualización de datos |
| React Flow / XYFlow | Diagramas basados en nodos |
| Herramienta | Propósito |
|---|---|
| Hono | Framework web ligero |
| tRPC | APIs type-safe end-to-end |
| Drizzle ORM | Acceso a base de datos type-safe |
| BullMQ | Colas de trabajos |
| Bull Board | UI de monitoreo de colas |
| Pino | Logging estructurado |
| better-auth | Autenticación |
| Herramienta | Propósito |
|---|---|
Vercel AI SDK (ai) | Interfaz unificada para LLMs |
| @ai-sdk/anthropic | Integración con Claude |
| @ai-sdk/openai | Integración con OpenAI/GPT |
| @ai-sdk/google | Integración con Google AI |
| Herramienta | Propósito |
|---|---|
| TypeScript | Tipado estático |
| Zod | Validación de esquemas en runtime |
| superjson | Serialización JSON preservando tipos |
| Herramienta | Propósito |
|---|---|
| ExcelJS | Parsing/generación de archivos Excel |
| Handlebars | Motor de plantillas |
| Marked | Conversión de Markdown a HTML |
| Shiki | Resaltado de sintaxis de código |
| day.js / date-fns | Manipulación de fechas |
| nanoid | Generación de IDs |
| Herramienta | Propósito |
|---|---|
| ESLint | Linting |
| Prettier | Formateo de código |
| Playwright | Testing E2E y automatización de navegador |
| Herramienta | Propósito |
|---|---|
| n8n (cloud) | Automatización visual de flujos de trabajo para prototipos rápidos |
| Herramienta | Propósito |
|---|---|
| @498as/ui | Librería de componentes compartida |
Cómo se integran las capas de arquitectura y las herramientas de desarrollo etapa por etapa.
CLAUDE.md con contexto del proyectobun installbun check-types (TypeScript)bun lint (ESLint + Prettier)bun build para verificar compilación| Activo | Método | Frecuencia | Ubicación |
|---|---|---|---|
| Código fuente | Git push | Cada commit | GitHub (org 498AS) |
| PostgreSQL | pg_dump via Coolify | Diario | Servidor de backup |
| Redis | Snapshots RDB | Diario (si persistente) | Local + backup |
| Convex | Gestionado | Automático | Convex cloud |
| Config Coolify | Exportar | Semanal | Almacenamiento seguro |
| Docs de clientes | Git + deploy | Por proyecto | GitHub + hosting |
| Tipo | Almacenamiento | Acceso |
|---|---|---|
| Contraseñas y API Keys | Zoho Vault | Miembros del equipo via compartir |
| Variables de entorno | Secretos de Coolify | Por aplicación |
| Claves SSH | Local + Zoho Vault (docs) | Equipo DevOps |
| Credenciales de BD | Zoho Vault → Coolify | Solo aplicación |
Admin crea cuenta de Zoho Vault para nuevo miembro
Compartir carpetas de credenciales relevantes según rol
Nuevo miembro configura autenticación de dos factores (obligatorio)
Revisar permisos de acceso cada 3 meses
Revocar acceso inmediatamente al salir del equipo
Para informes/documentos HTML creados con OpenCode para clientes:
| Opción | Autenticación | Complejidad | Notas |
|---|---|---|---|
| Coolify + Cloudflare Access | Email/OTP | Media | ⭐ RECOMENDADO - Control total, integra con infra existente |
| Cloudflare Pages + Access | Email/OTP | Baja | Bueno para docs estáticos simples |
| GitHub Pages | Ninguna (público) | Muy Baja | Solo para contenido no sensible |
| HTTP Basic Auth (Caddy) | Contraseña | Baja | Simple pero menos seguro |
| Cifrado client-side | Contraseña | Alta | Máxima seguridad, UX compleja |