Simplifico procesos
Casi todo el trabajo de llevar una tienda es repetitivo, y en la repetición es donde salen los errores. Estas son herramientas internas: no las ve nadie más que yo.
Un fichero, un botón
Toda la galería está descrita en un único fichero de datos. De él se generan las páginas, el sitemap y los feeds de producto, así que hay un solo sitio donde cambiar un precio o marcar una obra como vendida.
Un panel de administración local edita ese fichero. Comprueba cada cambio antes de guardarlo y rechaza lo que rompería una página: un título demasiado largo para la ficha, una descripción que Google cortaría. No deja borrar una obra, porque sus enlaces ya están compartidos, y conserva las 40 últimas versiones de cada fichero.
Publicar es un botón que ejecuta, por este orden: las pruebas, un despliegue en seco, el despliegue real, un aviso a los buscadores por IndexNow y una comparación de la web en vivo con la copia local. Ese último paso existe porque «el despliegue ha terminado» y «la web enseña lo que tengo aquí» son afirmaciones distintas, y solo importa la segunda.
Un fichero, dos lectores
El catálogo lo carga el navegador como un script, y también lo lee el Worker que genera las páginas. El segundo lector tiene una limitación: los Workers prohíben eval, así que el Worker no puede ejecutar el fichero. Recorta el objeto entre la primera { y la última } y lo interpreta como JSON.
const text = await (await env.ASSETS.fetch(url)).text();
return JSON.parse(text.slice(text.indexOf("{"), text.lastIndexOf("}") + 1));
Son unas pocas líneas en lugar de una base de datos, y tienen un precio. El objeto tiene que ser JSON estricto, porque un objeto de JavaScript perfectamente válido con claves sin comillas carga en el navegador y tumba todas las páginas generadas en el servidor. Y el comentario de cabecera no puede llevar una llave: una vez la llevó, y el recorte empezó dentro del comentario.
Sigo prefiriéndolo. El fallo es ruidoso e inmediato, y un script comprueba que el fichero se sigue pudiendo interpretar antes de publicar nada.
Funcionaba en curl y daba 404 en el navegador
Esto me costó más de una vez. Una página nueva respondía 200 con el HTML correcto cuando la probaba desde el terminal. En un navegador de verdad, la misma dirección devolvía 404.
La causa: cuando una petición parece una navegación a una página, el servidor de ficheros estáticos de la plataforma puede contestarla sin llamar nunca al Worker, salvo que esa ruta esté en la lista de las que ejecutan primero el Worker. Un navegador manda la cabecera que marca una navegación. curl no. Así que curl llegaba a mi código y el navegador no.
El arreglo es una línea de configuración. La lección es la regla que vino con él: una ruta nueva se comprueba en un navegador de verdad, nunca solo con curl. Una prueba que va por un camino distinto al del usuario no demuestra nada sobre el usuario.
Anuncios sin volver a teclear
Dos herramientas se ocupan de los anuncios en un marketplace.
La primera los sube en lote. En vez de copiar a mano un anuncio que ya existe y cambiar cuatro cosas, escribo esas cuatro cosas en un CSV: título, etiquetas, fotos y dos líneas de descripción. Todo lo demás (categoría, tamaños, precios, envío, política de devolución) se clona de un anuncio que ya está bien configurado. Clonar es la decisión de diseño: la herramienta no necesita entender todos los ajustes que tiene el marketplace, solo copiar un conjunto que se sabe que funciona.
La segunda convierte la imagen de un diseño en un anuncio completo con un modelo de lenguaje, y comprueba el resultado en código antes de que yo lo vea. Cómo funciona esa comprobación.
- JavaScript56.6%
- Python33.2%
- HTML4.7%
- TypeScript3.5%
- Shell1.1%
- Otros0.9%