Ecommerce para un cliente
En desarrolloSublime Ecommerce
Tienda online para un negocio de stickers, remeras sublimadas, DTF y vinilos: catálogo administrable, pedidos, encargos personalizados con Custom Lab y despliegue propio en un VPS.
Proyecto para un cliente, en desarrollo. Las funcionalidades corren en staging; la tienda ya está en el dominio del cliente, en modo mantenimiento mientras se carga el catálogo real. Empezó en Vercel con una base gestionada y lo migré a un VPS propio.
Resultado: 298pruebas automáticas en el repositorio, sobre 18 migraciones de base versionadas.
- Next.js
- TypeScript
- PostgreSQL
- Docker
- Traefik
Arquitectura
- DominioTienda en el dominio del cliente; staging protegido con contraseñaDNS
- ProxyHTTPS automático y ruteo por dominio; www redirige al dominio principalTraefik
- AppUn contenedor por entorno, construido con su propia configuraciónNext.js · Docker
- BaseUna base por entorno, sin acceso desde internetPostgreSQL
- RespaldosDiarios, con copia cifrada fuera del servidor y restauración probadarclone · Drive
Estado de las funcionalidades
Implementado en staging
- Catálogo administrable desde un panel: categorías, imágenes, variantes, precios y stock con auditoría.
- Pedidos con reserva de stock y envíos calculados por reglas.
- Sublime Custom Lab: stickers con quitado de fondo, contorno y armado automático de planchas; el servidor genera el PNG y el PSD para el plotter.
- Custom Lab de remeras: diseño propio o de catálogo, ubicación y tamaño; el servidor genera el mockup y la estampa a 300 dpi.
- Cuentas de cliente, puntos de venta y portada editables desde el panel.
- Encargos copiados automáticamente a Google Drive y cola de avisos.
Infraestructura en producción
- Migración de Vercel y una base gestionada a un VPS con Docker Compose.
- Deploy automático de staging al hacer push; la tienda se despliega a mano.
- Respaldos diarios: 14 días en el servidor y 60 días cifrados en Google Drive.
- Modo mantenimiento: el público ve una página de aviso y el panel sigue disponible.
Pendiente
- Pagos con Mercado Pago, sujeto a aprobación del cliente.
- Emails al cliente y recuperación de contraseña, cuando se elija un proveedor.
- Quitado de fondo con IA en Custom Lab.
- Apertura de la tienda al público.
Arquitectura
- Next.js App Router con TypeScript strict, en modo standalone dentro de Docker.
- PostgreSQL con migraciones versionadas; los cambios de catálogo, su movimiento de stock y su auditoría se guardan en una sola sentencia SQL.
- Archivos en disco con rutas públicas y privadas; los adjuntos de los encargos solo se descargan desde el panel.
- Autorización del panel verificada en el servidor en cada página y acción.
Decisiones de despliegue
- Una imagen por entorno: parte de las páginas se generan en el build y necesitan la configuración de ese entorno, que entra como secreto y no queda en la imagen.
- Deploy por pull: el VPS lee GitHub con una clave de solo lectura y GitHub no guarda credenciales del servidor.
- Traefik compartido con otros servicios del mismo VPS: cada app solo agrega sus etiquetas.
- La base solo escucha en el propio servidor; nunca queda expuesta a internet.
Código de ejemplo
# Runs every minute: deploy the watched branch when it has a new commit.
git --git-dir="$REPO" fetch --quiet --prune origin "+refs/heads/$BRANCH:refs/heads/$BRANCH"
SHA=$(git --git-dir="$REPO" rev-parse "refs/heads/$BRANCH")
[ "$SHA" = "$(cat .deployed-sha 2>/dev/null)" ] && exit 0 # already live
[ "$SHA" = "$(cat .last-attempt 2>/dev/null)" ] && exit 0 # failed once, wait for a new commit
echo "$SHA" > .last-attempt
NEW=$(mktemp -d "$ROOT/.src.XXXXXX")
git --git-dir="$REPO" archive "$SHA" | tar -x -C "$NEW"
mv "$ROOT/src" "$ROOT/src.previous" && mv "$NEW" "$ROOT/src"
if bash "$ROOT/src/deploy/deploy-staging.sh"; then
echo "$SHA" > .deployed-sha
else
echo "deploy failed: staging keeps the previous version"
fiLímites del caso
- La tienda todavía no está abierta al público: está en modo mantenimiento.
- No hay cobros en línea; los pagos dependen de la aprobación del cliente.
- No se publican datos de ventas ni del negocio del cliente.