Fuente:
CLAUDE.mdde cada proyecto y memoriasclaria-crm,github-backup,claria-infra-hardening,ollama-infra.
| Proyecto | Stack |
|---|---|
| Web (claria-co.com) | Next.js 15 (App Router), Vercel. Repo claria-web. |
| CRM (crm.claria-co.com) | Next.js 15 + pnpm, App Router, NextAuth v5 (Credentials + JWT), Drizzle ORM (postgres-js), Supabase, shadcn/ui (dark "Claria"). |
| Infra | Docker compose: n8n + Evolution API + nginx-proxy-manager + letsencrypt. |
| Wiki | Wiki.js 2.5 + PostgreSQL 16 (stack docker independiente). |
| IA local | Ollama en la VM (172.17.0.1:11434, CPU, qwen2.5:7b / 3b). |
claria-web — privado, conectado a Vercel por Git (push = deploy).claria-crm — git propio (dentro de claria-backup); deploy por vercel --prod (sin git remote en Vercel).claria-wiki — contenido de la wiki, git sync bidireccional cada 5 min.claria-backup — backup completo del workspace (monorepo, snapshot rolling). Privado.src/db/schema.ts = fuente de verdad. Migraciones en drizzle/.db:migrate/db:generate: usar DOTENV_CONFIG_PATH=.env.local pnpm db:migrate (drizzle.config carga .env, no .env.local).rls_enabled_no_policy es esperado.force-dynamic en páginas de datos (usan auth()/cookies). Cachear option lists con unstable_cache + tags para no quemar egress (ver lección).leads)..env.local (gitignored) de cada app y en _backup/secrets/ en la VM..env de cada stack, fuera de git, respaldadas a _backup/secrets/./home/brayanporras (raíz git) para que aplique .claudeignore.claria-infra/ (ruido / datos runtime).CLAUDE.md cuando exista.CLAUDE.md.