# Deploy — Sr. Pan (panaderia)

Guía de referencia para desplegar cambios en **producción PHP** y, opcionalmente, en **preview Cloudflare**.

**Última actualización:** julio 2026  
**Repo:** [gitlab.com/sistematlan/panaderia](https://gitlab.com/sistematlan/panaderia)

---

## Entornos

| Entorno | URL | Método de deploy |
|---|---|---|
| **Local** | `https://panaderia.test/` | Docker + DAMP |
| **Preview landing** | `https://feat-landing-srpan.srpan-landing-preview.pages.dev` | Cloudflare Pages (estático) |
| **Producción PHP** | `https://srpan.sistematlan.icu` | FTPS manual |
| **Producción (legacy)** | `https://srpan.sistematlan.com` | Mismo servidor |

No hay CI/CD automático (sin `.gitlab-ci.yml`). El deploy a producción es **manual**.

---

## Flujo general (producción PHP)

```
Local → commit + push → MR en GitLab → merge a main → FTPS → comandos en servidor → verificar
```

---

## 1. Verificar en local

Antes de subir cualquier cambio:

- [ ] Landing carga en `/`
- [ ] Bolsa: card con altura correcta (probar con 1 artículo)
- [ ] Bolsa en móvil (≤767px): elementos en una fila
- [ ] Checkout WhatsApp con sucursal seleccionada
- [ ] POS/admin operativo (`/entrar`, `/inicio`, `/articulos`, `/tiendas`)

### Comandos útiles (Docker)

```bash
docker exec -i panaderia php /app/spark migrate
docker exec -i panaderia php /app/spark prices:seed-stores --force
```

### Retomar trabajo en el feature

```bash
git checkout feat/landing-srpan && git pull
```

---

## 2. Commitear y pushear

```bash
# Revisar qué cambió
git status
git diff

# Agregar archivos relevantes
git add public/assets/css/srpan-landing.css
git add app/Views/landing.php          # si aplica
git add public/assets/js/srpan-cart.js # si aplica

git commit -m "Descripción clara del cambio"
git push origin feat/landing-srpan
```

---

## 3. Merge Request en GitLab

1. Ir a GitLab → proyecto `sistematlan/panaderia`
2. Crear **Merge Request**: `feat/landing-srpan` → `main`
3. Revisar el diff. Archivos frecuentes del feature landing:

   | Archivo | Rol |
   |---|---|
   | `app/Views/landing.php` | Vista principal |
   | `app/Controllers/Home.php` | Catálogo y datos |
   | `public/assets/css/srpan-landing.css` | Estilos landing + bolsa |
   | `public/assets/js/srpan-cart.js` | Lógica de bolsa |
   | `public/assets/js/srpan-landing.js` | Nav y menú móvil |
   | `public/assets/img/srpan/products/` | Imágenes de productos |

4. Mergear a `main` cuando esté aprobado

---

## 4. Subir al servidor (FTPS)

**Destino:** `/public_html/srpan.sistematlan.com`  
**Herramientas:** FileZilla, Cyberduck, o cliente FTPS del hosting

### Qué subir

| Carpeta/archivo | Cuándo |
|---|---|
| `app/` | Siempre que haya cambios en backend/vistas |
| `public/` | Siempre que haya cambios en CSS, JS o imágenes |
| `spark` | Si cambió la CLI |
| `composer.json`, `composer.lock` | Si cambiaron dependencias |
| `vendor/` | Solo si **no** puedes correr `composer install` en el servidor |

### Qué NO subir

- `.env` local (el servidor tiene su propio `.env`)
- `writable/debugbar/`
- `dist/` (solo para preview Cloudflare)
- `.git/`, `node_modules/`, archivos de desarrollo

### Requisito CodeIgniter 4

El **document root** del hosting debe apuntar a la carpeta `public/`, no a la raíz del proyecto.

---

## 5. Comandos en el servidor

Conéctate por SSH o terminal del panel de hosting. Desde la raíz de la aplicación:

```bash
# Dependencias (si no subiste vendor/)
composer install --no-dev --optimize-autoloader

# Migraciones de BD — obligatorio en primer deploy del feature
php spark migrate

# Precios por sucursal — obligatorio en primer deploy o re-sync
php spark prices:seed-stores --force
```

### ¿Cuándo correr migrate y seed?

| Tipo de cambio | migrate | prices:seed-stores |
|---|---|---|
| Solo CSS/JS de landing | No | No |
| Primer deploy de `feat/landing-srpan` | **Sí** | **Sí** |
| Nuevas migraciones en `app/Database/Migrations/` | **Sí** | Según caso |
| Cambios en artículos/precios desde admin | No | Opcional (`--force`) |

### Variables `.env` de producción

Verificar que existan y sean correctas:

- `CI_ENVIRONMENT = production`
- Credenciales MySQL (`database.default.*`)
- `app.baseURL` apuntando al dominio real

---

## 6. Verificación post-deploy

### Landing y bolsa

- [ ] `https://srpan.sistematlan.icu/` carga la landing (ver nota de routing abajo)
- [ ] Bolsa con 1 producto: card compacto, no estirado a todo el alto
- [ ] Móvil (≤767px): nombre, stepper y subtotal en una fila
- [ ] Seleccionar sucursal → total calculado → botón WhatsApp activo
- [ ] Hard refresh sin caché: `Cmd+Shift+R` (CSS puede estar cacheado)

### POS y admin

- [ ] `/entrar` — login funciona
- [ ] `/inicio` — POS con selector de sucursal
- [ ] `/articulos` — precios por sucursal
- [ ] `/tiendas` — edición de nombre y dirección

---

## 7. Routing: `/` vs `/entrar`

El feature `feat/landing-srpan` define en `app/Config/Routes.php`:

```php
$routes->get('/', 'Home::landing');
```

En producción histórica, la raíz **puede redirigir a `/entrar`** (POS). Antes del deploy definitivo, confirmar con el equipo:

| Opción | Comportamiento |
|---|---|
| **A** | `/` = landing pública para clientes |
| **B** | `/` = redirect al POS; landing en subdominio o ruta alternativa |

Sin esta decisión, el deploy puede funcionar técnicamente pero los clientes no verían la landing en la URL principal.

---

## 8. Preview Cloudflare (opcional)

La preview es un **snapshot estático** de la landing. Útil para validar diseño sin tocar producción PHP.

**URL actual:** `https://feat-landing-srpan.srpan-landing-preview.pages.dev`  
**Proyecto:** `srpan-landing-preview`  
**Config:** `wrangler.toml`

```bash
# 1. Build (requiere app local en https://panaderia.test/)
./scripts/build-cloudflare-preview.sh

# 2. Deploy
wrangler pages deploy dist \
  --project-name=srpan-landing-preview \
  --branch=feat/landing-srpan \
  --commit-dirty=true
```

**Limitación:** el catálogo queda congelado al momento del build. Bolsa, WhatsApp y filtros funcionan en cliente con datos del JSON embebido.

---

## 9. Rollback

### Código

1. Revertir el merge en GitLab o restaurar backup FTPS anterior
2. Volver a subir la versión estable

### Base de datos

- Hacer **backup de MySQL antes** de `php spark migrate` en primer deploy
- Las migraciones no tienen rollback automático documentado

### Hotfix puntual (solo CSS)

Basta con restaurar la versión anterior de:

```
public/assets/css/srpan-landing.css
```

---

## 10. Checklist rápido

```
[ ] Probar en panaderia.test
[ ] git commit + push
[ ] MR feat/landing-srpan → main (merge)
[ ] Subir app/ y public/ por FTPS
[ ] composer install (si aplica)
[ ] php spark migrate (si aplica)
[ ] php spark prices:seed-stores --force (si aplica)
[ ] Verificar landing + bolsa + POS en producción
[ ] Hard refresh para descartar caché de CSS
```

---

## Referencias

- Contexto general: [`docs/CONTEXTO.md`](CONTEXTO.md)
- Landing técnica: [`docs/LANDING-SRPAN.md`](LANDING-SRPAN.md)
- Build preview: [`scripts/build-cloudflare-preview.sh`](../scripts/build-cloudflare-preview.sh)