Objetivo: Desplegar FocusXP a Vercel (frontend) y Supabase (database)
- Cuenta en Vercel (vercel.com)
- Cuenta en Supabase (supabase.com)
- Git configurado y repositorio en GitHub
- CLI de Vercel instalado:
npm.cmd install -g vercel
-
Ve a https://supabase.com y crea cuenta
-
Dashboard → Nuevo Proyecto
-
Configura:
- Name: focusxp-db
- Database Password: [Genera uno seguro]
- Region: [Tu región más cercana]
- Pricing Plan: Free tier está bien para empezar
-
Espera a que se cree (~2 minutos)
- En Supabase Dashboard, ve a: Settings → Database → Connection Strings
- Copia la connection string en "URI" (nodejs)
- Se verá así:
postgresql://postgres:[PASSWORD]@[HOST]:[PORT]/postgres
CONNECTION_STRING=postgresql://postgres:[PASSWORD]@[HOST]:[PORT]/postgres
- Reemplaza
[PASSWORD],[HOST],[PORT]con los valores reales - Usa esta URL en Vercel environment variables, NO en git
Asegúrate que tu .gitignore en root incluya:
.env
.env.local
.env.*.local
backend-node/.env
backend-node/.env.local
node_modules
dist
build
git add .
git commit -m "Phase 2: Ready for Vercel deployment"
git push origin backend-devO si quieres pushar a main:
git push origin backend-dev:mainOpción A: Desde CLI
cd c:\Users\Usuario\ I\ 2026\Desktop\FocusXP\Focusxp
# Instalar Vercel CLI globalmente (una sola vez)
npm.cmd install -g vercel
# Deploy
vercelOpción B: Desde Dashboard
- Ve a https://vercel.com/dashboard
- Click en "Add New..." → "Project"
- Importa tu repositorio de GitHub
- Vercel detectará automáticamente:
- Root Directory:
.(raíz) - Framework: Vite
- Build Command:
npm.cmd run build - Output Directory:
dist
- Root Directory:
En Vercel Dashboard → Project Settings → Environment Variables
Agregar:
VITE_API_URL = https://backend.example.com
O si el backend está en Vercel también:
VITE_API_URL = https://focusxp-backend.vercel.app
VITE_WS_URL = wss://focusxp-backend.vercel.app
Vercel soporta Node.js serverless functions. Requiere refactoring del código.
Para un servidor Express con WebSocket en vivo, mejor usar:
- Railway (fácil, soporta PostgreSQL)
- Render (heroku gratuito alternativo)
- Fly.io (buena performance)
- DigitalOcean App Platform
- Ve a https://railway.app
- Create New Project → GitHub Repo
- Railway detecta Node.js automáticamente
- Configura Build:
-
npm --prefix backend-node install npm --prefix backend-node run build
-
- Configura Start:
-
npm --prefix backend-node start
-
- Agrega variables de entorno:
DATABASE_URL= tu Supabase connection stringNODE_ENV= productionCORS_ORIGINS= https://tu-frontend.vercel.app
En backend-node/src/server.js, actualiza CORS:
corsOptions = {
origin: [
'http://localhost:5173',
'http://localhost:5174',
'https://focusxp.vercel.app', // Tu frontend Vercel
'https://backend-focusxp.railway.app' // Tu backend
],
credentials: true
};En src/hooks/useApi.ts, asegúrate de usar la variable de entorno:
const API_URL = import.meta.env.VITE_API_URL || 'http://localhost:8000';
export async function useApi(endpoint: string, options: any) {
const response = await fetch(`${API_URL}${endpoint}`, options);
// ...
}# Desde tu máquina local
curl -X GET https://backend-focusxp.railway.app/health
# Respuesta esperada:
# { "status": "ok", "database": "postgresql" }curl -X POST https://backend-focusxp.railway.app/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"test@example.com","password":"password123"}'En tu dashboard de Supabase, ve a:
- SQL Editor → Ejecuta:
SELECT current_database(), current_user, now();
- Frontend deployado en Vercel
- Backend deployado (Railway/Render/etc)
- Base de datos Supabase creada
- DATABASE_URL configurada en backend
- CORS configurado correctamente
- VITE_API_URL configurada en frontend
- Health check endpoint responde
- Login desde frontend funciona
- Datos persisten en Supabase
- WebSocket conecta (si lo necesitas)
# 1. Verificar cambios
git status
# 2. Commit
git add .
git commit -m "Deploy config for Vercel + Supabase"
# 3. Push a GitHub
git push origin backend-dev
# 4. Vercel auto-deploya cuando pushas (si está conectado)
# 5. Railway auto-deploya cuando pushas (si está conectado)
# 6. Verificar status
vercel logs # Para ver logs de Vercel# Frontend
vercel deploy --prod
# Backend (desde Railway CLI)
railway upVITE_API_URL=https://backend-focusxp.railway.app
VITE_WS_URL=wss://backend-focusxp.railway.appDATABASE_URL=postgresql://user:password@host:port/database
NODE_ENV=production
CORS_ORIGINS=https://focusxp.vercel.app
JWT_SECRET=your-secret-key-hereNo necesita variables, está todo en CONNECTION_STRING
Solución: Actualiza CORS_ORIGINS en backend con tu Vercel URL
Solución: Verifica que DATABASE_URL está correcto y Supabase está online
Solución: Asegúrate que backend está en https/wss (no http/ws en producción)
Solución: Backend puede estar reiniciando, espera 1-2 minutos
| Componente | URL |
|---|---|
| Frontend | https://focusxp.vercel.app |
| Backend | https://backend-focusxp.railway.app |
| Database | PostgreSQL via Supabase |
| API Health | https://backend-focusxp.railway.app/health |
- Deploy a Vercel/Railway today
- Phase 3: Liveness challenges en backend
- Monitoreo con Sentry o Datadog (opcional)
- Custom domain (ejemplo: focus-xp.app)
Estado: Listo para deployment
Tiempo Estimado: 20-30 minutos
Costo: $0 (Free tier Vercel + Free tier Railway + Free tier Supabase)