Actualiza la web de tu cliente desde el móvil: Claude + GitHub + deploy automático
main, y (3) la app de Claude para pedir el cambio en lenguaje natural. Claude edita el código, abre un pull request; tú lo fusionas desde el teléfono y la Action publica en el servidor en segundos. Es exactamente el sistema con el que se despliega este sitio.
Las 3 piezas del sistema
Mientras la gente normal a tu alrededor se drena el alma viendo Reels en la fila del banco, tú puedes estar enviándole cambios en vivo a un cliente desde el bus. No es magia: es una tubería sencilla con tres componentes.
- Tu servidor (cPanel / hosting con FTP). Donde vive la web del cliente, en
public_html. Solo necesita aceptar conexiones FTP o, mejor, FTPS. - GitHub. Un repositorio con el código de todos tus proyectos en desarrollo. Cada cliente, su carpeta. Es la fuente de la verdad y el historial de todo lo que cambia.
- Claude. Conectado a ese repositorio. Le pides los cambios en lenguaje natural y él escribe el código, hace commit y abre el pull request por ti.
Cómo se conecta: la GitHub Action de deploy
El pegamento es una GitHub Action: un pequeño archivo YAML en .github/workflows/ que se dispara cada vez que llega un cambio a la rama main y sube los archivos por FTP a tu servidor. La acción más usada para esto es SamKirkland/FTP-Deploy-Action. Este es, casi literal, el workflow con el que se despliega c6n.eu:
name: Deploy website
on:
push:
branches: [main] # se dispara al fusionar en main
paths:
- "site/**" # solo si cambió la carpeta del sitio
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Deploy por FTPS a cPanel
uses: SamKirkland/FTP-Deploy-Action@v4.3.5
with:
server: ${{ secrets.FTP_SERVER }}
username: ${{ secrets.FTP_USERNAME }}
password: ${{ secrets.FTP_PASSWORD }}
protocol: ftps # FTP sobre TLS, nunca plano
local-dir: site/
server-dir: ./
dangerous-clean-slate: false # no borra lo que no esté en el repo
exclude: |
api/config.php # protege archivos sensibles del server
Traducción: cada vez que un cambio aterriza en main, GitHub levanta una máquina, coge tu carpeta y la sube al servidor. dangerous-clean-slate: false garantiza que nunca borra archivos que no estén en el repo (como el config.php que subiste a mano), y exclude protege lo que no debe tocarse. Lo configuras una vez por proyecto y se olvida.
El flujo desde el móvil, paso a paso
La magia real pasa cuando estás apretado en el metro y el cliente te escribe: «Oye, cámbiame el texto de los precios y arregla el botón de pago que se ve raro». En vez de estresarte o sacar el portátil en medio de la calle:
- Abres la app de Claude en el móvil.
- Le pones el encargo: «Claude, entra a la carpeta de este cliente, cambia el texto de precios por este y arregla el diseño del botón de pago». (Cuanto más concreto seas, mejor sale — ver cómo darle contexto sin que salga genérico.)
- Claude hace el cambio de código, hace commit y abre un pull request a
main. - Fusionas el pull request desde el propio móvil. Ese merge dispara la GitHub Action y el servidor se actualiza solo en segundos.
- Le respondes al cliente: «Listo, revisa la web».
| Momento | Lo que haces tú | Lo que pasa solo |
|---|---|---|
| El cliente escribe | Abres Claude en el móvil | — |
| Pides el cambio | Lo describes en una frase | Claude edita el código y abre el PR |
| Revisas y apruebas | Fusionas el PR a main | La GitHub Action arranca |
| Deploy | Nada | Subida por FTPS al servidor en segundos |
| Cierras | «Listo, revisa la web» | Cambio en vivo y registrado en el historial |
¿Por qué pull request a main y no editar en producción?
Podrías editar el archivo directo en el servidor por FTP, sí. Pero entonces no tienes historial, ni revisión, ni vuelta atrás. Pasar siempre por un pull request a main te da tres seguros: ves el diff exacto antes de publicar, queda registrado quién cambió qué y cuándo, y si algo sale mal reviertes el commit y el servidor vuelve al estado anterior en el siguiente deploy. La rama main es, por definición, lo que está publicado.
Buenas prácticas y errores comunes
- Credenciales en GitHub Secrets, nunca en el repo. Servidor, usuario y contraseña van en Settings → Secrets and variables → Actions, cifrados y fuera de los logs.
- FTPS, no FTP plano. El FTP sin cifrar manda tus credenciales en texto claro. Usa
protocol: ftpssiempre que el hosting lo permita. - Excluye lo sensible y lo ajeno. Con
excludeprotegeconfig.php, claves y subdirectorios que gestione otra cuenta o pipeline. - Filtra por
paths. Que la Action solo se dispare cuando cambia la carpeta relevante evita deploys innecesarios y minutos gastados. - Un repo, muchas carpetas de cliente. Centralizar los proyectos en desarrollo facilita que Claude «entre a la carpeta de este cliente» sin perderse.
Este tipo de tuberías —que un cambio se publique solo, sin tocar nada a mano— es el corazón de la automatización y del diseño web que montamos para clientes: webs que no solo se ven bien, sino que se mantienen sin fricción.
"La próxima vez que te toque perder la mañana en un trámite o atrapado en el tráfico, no llores: pon a Claude a trabajar desde el bolsillo. El servidor se actualiza solo mientras tú haces la fila." — Juan Camilo Calderón, fundador de c6n
Preguntas frecuentes
¿Se puede actualizar una web de verdad desde el móvil?
Sí. Con el código en GitHub y una GitHub Action que despliega por FTP/FTPS a tu servidor, puedes pedirle el cambio a la app de Claude desde el teléfono, fusionar el pull request a la rama main y la web se actualiza sola en segundos. No necesitas abrir el portátil ni conectarte por FTP a mano.
¿Necesito saber programar para hacer esto?
Necesitas montar el sistema una vez (repositorio, secretos FTP y el archivo de la GitHub Action), y eso sí requiere conocimiento técnico o ayuda puntual. Pero el día a día —los cambios que pide el cliente— los describes en lenguaje natural y Claude escribe el código. Una vez configurado, no tocas FTP ni servidores manualmente.
¿Es seguro guardar las credenciales FTP en GitHub?
Sí, si usas GitHub Secrets. Los datos (servidor, usuario, contraseña) se guardan cifrados en Settings → Secrets and variables → Actions y nunca aparecen en el código ni en los logs. Usa siempre FTPS (FTP sobre TLS) en lugar de FTP plano, y excluye del deploy archivos sensibles como config.php para no sobrescribirlos.
¿Funciona con cualquier hosting o solo con cPanel?
Funciona con cualquier hosting que ofrezca acceso FTP o FTPS, que es la inmensa mayoría del hosting compartido y cPanel. La GitHub Action más usada para esto es SamKirkland/FTP-Deploy-Action. Si tu servidor admite SSH, también puedes desplegar por SFTP o rsync con el mismo patrón.
¿Cuánto cuesta montar este flujo de deploy automático?
Prácticamente nada en herramientas: GitHub Actions incluye 2.000 minutos de ejecución gratis al mes en repositorios privados (ilimitado en públicos), y un deploy por FTP consume segundos. El coste real es el tiempo de configurarlo una vez; a partir de ahí, cada actualización es gratis e instantánea.
¿Quieres este flujo montado en tus proyectos?
Montamos la tubería completa —GitHub, deploy automático por FTP/FTPS y Claude conectado a tus repos— para que publiques cambios de cliente desde el móvil en segundos. Pídenos el diagnóstico gratuito.
Hablar con CA.IA — gratisDiagnóstico en 48h · Máximo 10 clientes activos · c6n.eu
Fuentes
- SamKirkland — "FTP Deploy Action", GitHub Marketplace: deploy por FTP/FTPS desde GitHub Actions y opción
dangerous-clean-slate. - GitHub Docs — Workflows de Actions: disparadores
on: push, filtros porpathsy gestión de secrets cifrados. - GitHub Docs — Facturación de Actions: 2.000 minutos/mes gratis en repositorios privados (uso ilimitado en repositorios públicos).
- Documentación de despliegue GitHub → cPanel vía FTP (guías de hosting con cPanel, 2025-2026).