# FRENZZY CDN CDN estático con la identidad de **FRENZZY** (Streetlab Clo.): imagotipos, isotipos, monogramas, sellos, banderas, lemas y mockups de producto. ![og-image](og-image.jpg) ## Para qué sirve - Centralizar las URLs de los assets de marca para el sitio, correos, redes, presentaciones y proveedores de impresión. - Ser fuente única para agentes de IA (Lovable, v0, Cursor, Bolt) — ver `agents.md`. - Inventario navegable con preview, búsqueda, filtros, copia de URL y descarga. Base: **https://cdn.frenzzy.shop/** ## Qué hay dentro | Carpeta | Qué es | Piezas | |---|---|---| | `PNG/` | Marcas con **fondo transparente**. Es lo que se usa. | 37 | | `JPG/` | Las mismas marcas con su fondo original, blanco o negro. | 37 | | `MOCKUPS/` | Parches, pines y producto. Llevan fondo y sombra propios. | 7 | ## De dónde salieron los PNG Los originales son 44 láminas JPG de 1772×1772 con el fondo plano incrustado — un logo negro venía dentro de un rectángulo blanco. Para que sirvieran de algo se desmezcló el fondo resolviendo, píxel a píxel, la ecuación de composición `P = a·F + (1-a)·B`. Dos cosas que hubo que resolver y conviene no volver a pisar: 1. **Los calados.** Una bandera negra con la F blanca calada, sobre fondo blanco: si solo se mira el color, la F se convierte en agujero. El fondo se detecta con relleno por inundación **desde el borde**, así que una zona del color del fondo encerrada dentro de la marca se queda opaca, que es lo correcto. 2. **Marcos fantasma.** Tres láminas traen un marco claro de un par de píxeles. Con él, ningún píxel del borde coincidía con el fondo y el relleno se quedaba sin semilla. Se recorta un 1.5 % antes de procesar. Los 44 JPG originales están intactos en `_backup_imagenes/`. ## Cómo abrir localmente ```bash open index.html ``` Funciona sin conexión: las miniaturas van por ruta relativa. Los botones de copiar sí generan URLs absolutas del CDN. ## Cómo desplegar Está en **Hostinger**, como subdominio de `frenzzy.shop` en la cuenta `u249751832`. Lo sirve el CDN de Hostinger (`server: hcdn`) con CORS abierto y `cache-control: public, max-age=604800`, sin que haya que configurar nada: esas cabeceras las pone el CDN por su cuenta. Mismo patrón que `cdn.lovepostal.studio`. El despliegue va por archivo comprimido y el protocolo TUS, no por FTP: ```bash # 1. Empaquetar, dejando fuera lo que no se publica zip -qr cdn-frenzzy.zip . \ -x '_backup_imagenes/*' '.git/*' '.DS_Store' '*/.DS_Store' # 2. Pedir credenciales de subida (API de Hostinger) # hosting_generateUploadURLV1 -> devuelve url, auth_key, rest_auth_key # 3. Crear la subida y mandar los bytes SIZE=$(stat -f%z cdn-frenzzy.zip) curl -X POST "$URL/cdn-frenzzy.zip?override=true" \ -H "X-Auth: $AUTH" -H "X-Auth-Rest: $REST" \ -H "Tus-Resumable: 1.0.0" -H "Upload-Length: $SIZE" -H "Upload-Offset: 0" curl -X PATCH "$URL/cdn-frenzzy.zip?override=true" \ -H "X-Auth: $AUTH" -H "X-Auth-Rest: $REST" \ -H "Tus-Resumable: 1.0.0" \ -H "Content-Type: application/offset+octet-stream" -H "Upload-Offset: 0" \ --data-binary "@cdn-frenzzy.zip" # 4. Extraer sobre el subdominio # hosting_deployStaticSiteArchiveV1 · domain: cdn.frenzzy.shop # · archive_path: cdn-frenzzy.zip ``` El paso 4 **reemplaza** el contenido del subdominio. Es lo que se quiere aquí, pero conviene saberlo: no fusiona, sustituye. ### La URL duplicada Hostinger obliga a que la raíz de un subdominio cuelgue de `public_html` del dominio padre. La del CDN es `/home/u249751832/domains/frenzzy.shop/public_html/cdn_assets`, así que **cada asset también responde en `frenzzy.shop/cdn_assets/...`**. En el repo del sitio (`frenzzy-astro`) hay preparado un `.htaccess` que redirige esa ruta al subdominio con 301, más un `Disallow` en `robots.txt`. Mientras no se despliegue, la duplicación existe y Google puede indexar la URL equivocada. ### Riesgo a vigilar El sitio `frenzzy.shop` se construye en Hostinger y copia su `dist/` sobre ese mismo `public_html`. **No está comprobado si ese proceso borra `cdn_assets/`.** Si un día el CDN aparece vacío, esa es la causa: se vuelve a desplegar con los pasos de arriba, y el repo es la fuente de verdad. ## Convención de nombres | Tipo | Patrón | Ejemplo | |---|---|---| | Imagotipo | `imagotipo_frenzzy_{color}_{n}.png` | `imagotipo_frenzzy_negroteal_1.png` | | Isotipo | `isotipo_frenzzy_{color}_{n}.png` | `isotipo_frenzzy_blanco_2.png` | | Monograma | `monograma_frenzzy_{color}_{n}.png` | `monograma_frenzzy_negro_1.png` | | Bandera | `bandera_frenzzy_{color}_{n}.png` | `bandera_frenzzy_negroteal_1.png` | | Inicial | `inicial_frenzzy_{color}_{n}.png` | `inicial_frenzzy_negro_1.png` | | Sello | `sello_frenzzy_{color}_{n}.png` | `sello_frenzzy_blancoteal_1.png` | | Emblema | `emblema_frenzzy_{color}_{n}.png` | `emblema_frenzzy_negro_1.png` | | Lockup | `lockup_frenzzy_{color}_{n}.png` | `lockup_frenzzy_blanco_2.png` | | Lema | `lema_frenzzy_{color}_{n}.png` | `lema_frenzzy_negroteal_2.png` | | Etiqueta | `etiqueta_frenzzy_{color}_{n}.png` | `etiqueta_frenzzy_negro_1.png` | | Mockup | `{tipo}_frenzzy_{variante}_{n}.jpg` | `parche_frenzzy_circular_1.jpg` | Reglas: - Snake-case, minúsculas, ASCII puro, sin espacios ni tildes. - El color es **el de la marca**, no el del fondo: `blanco` es la versión para fondos oscuros. - `negroteal` y `blancoteal` llevan el acento teal; `negro` y `blanco` son monocromas puras. - `{n}` es contador desde 1 para variantes con la misma combinación. ## Cómo agregar assets 1. Renombra respetando la convención. 2. Déjalo en `PNG/`, `JPG/` o `MOCKUPS/`. 3. Regenera `index.html` — sus datos salen de `manifiesto.json`, no están escritos a mano. 4. Actualiza las tablas de `CLAUDE.md` y las URLs de `agents.md`. 5. Vuelve a subir. ## Estructura ``` . ├── index.html ← galería navegable ├── og-image.jpg ← Open Graph 1200×630 ├── favicon.png/.ico ├── README.md ← este archivo ├── CLAUDE.md ← contexto para Claude Code ├── agents.md ← contexto para agentes de IA ├── CLAUDE_TEMPLATE.md ← pasos replicables para otro CDN ├── manifiesto.json ← inventario que alimenta la galería ├── PNG/ ← 37 marcas transparentes ├── JPG/ ← las mismas con fondo ├── MOCKUPS/ ← 7 piezas de producto └── _backup_imagenes/ ← las 44 láminas originales (no se sube, no se toca) ``` ## Paleta | Rol | Hex | |---|---| | Negro | `#000000` | | Blanco | `#FFFFFF` | | Teal de marca | `#20A0A8` | | Teal claro | `#3EC9D1` | El teal se midió sobre las láminas. **Ojo:** `frenzzy.shop` es monocromo estricto por decisión de diseño, así que este acento vive en la identidad pero hoy no aparece en la tienda. Ver `CLAUDE.md`. ## Inventario ### Marcas | Archivo | Tipo | Color | Dimensiones | PNG | JPG | |---|---|---|---|---|---| | `bandera_frenzzy_blanco_1.png` | bandera | blanco | 1096×841 | 35 KB | 52 KB | | `bandera_frenzzy_blancoteal_1.png` | bandera | blancoteal | 1097×841 | 65 KB | 56 KB | | `bandera_frenzzy_negro_1.png` | bandera | negro | 1096×841 | 34 KB | 45 KB | | `bandera_frenzzy_negroteal_1.png` | bandera | negroteal | 1096×841 | 66 KB | 47 KB | | `emblema_frenzzy_blanco_1.png` | emblema | blanco | 1463×1463 | 75 KB | 77 KB | | `emblema_frenzzy_negro_1.png` | emblema | negro | 1463×1463 | 72 KB | 70 KB | | `etiqueta_frenzzy_blanco_1.png` | etiqueta | blanco | 1205×420 | 19 KB | 52 KB | | `etiqueta_frenzzy_negro_1.png` | etiqueta | negro | 1205×421 | 18 KB | 48 KB | | `imagotipo_frenzzy_blanco_1.png` | imagotipo | blanco | 1368×602 | 71 KB | 81 KB | | `imagotipo_frenzzy_blancoteal_1.png` | imagotipo | blancoteal | 1369×602 | 80 KB | 82 KB | | `imagotipo_frenzzy_blancoteal_2.png` | imagotipo | blancoteal | 1590×716 | 576 KB | 157 KB | | `imagotipo_frenzzy_negro_1.png` | imagotipo | negro | 1368×602 | 68 KB | 74 KB | | `imagotipo_frenzzy_negroteal_1.png` | imagotipo | negroteal | 1368×602 | 100 KB | 74 KB | | `imagotipo_frenzzy_negroteal_2.png` | imagotipo | negroteal | 1590×716 | 556 KB | 157 KB | | `inicial_frenzzy_blanco_1.png` | inicial | blanco | 844×873 | 31 KB | 46 KB | | `inicial_frenzzy_negro_1.png` | inicial | negro | 844×873 | 29 KB | 38 KB | | `isotipo_frenzzy_blanco_1.png` | isotipo | blanco | 835×1031 | 40 KB | 60 KB | | `isotipo_frenzzy_blanco_2.png` | isotipo | blanco | 826×1136 | 38 KB | 50 KB | | `isotipo_frenzzy_negro_1.png` | isotipo | negro | 836×1031 | 54 KB | 50 KB | | `isotipo_frenzzy_negro_2.png` | isotipo | negro | 827×1136 | 35 KB | 42 KB | | `isotipo_frenzzy_teal_1.png` | isotipo | teal | 826×1136 | 97 KB | 47 KB | | `lema_frenzzy_blancoteal_1.png` | lema | blancoteal | 1209×1179 | 165 KB | 146 KB | | `lema_frenzzy_blancoteal_2.png` | lema | blancoteal | 1249×1461 | 1715 KB | 413 KB | | `lema_frenzzy_negroteal_1.png` | lema | negroteal | 1209×1178 | 155 KB | 137 KB | | `lema_frenzzy_negroteal_2.png` | lema | negroteal | 1250×1450 | 1590 KB | 404 KB | | `lockup_frenzzy_blanco_1.png` | lockup | blanco | 1484×369 | 40 KB | 64 KB | | `lockup_frenzzy_blanco_2.png` | lockup | blanco | 1361×609 | 70 KB | 89 KB | | `lockup_frenzzy_negro_1.png` | lockup | negro | 1484×369 | 39 KB | 59 KB | | `lockup_frenzzy_negro_2.png` | lockup | negro | 1361×609 | 67 KB | 83 KB | | `monograma_frenzzy_blanco_1.png` | monograma | blanco | 896×1097 | 38 KB | 57 KB | | `monograma_frenzzy_blanco_2.png` | monograma | blanco | 1000×1100 | 362 KB | 168 KB | | `monograma_frenzzy_negro_1.png` | monograma | negro | 896×1097 | 36 KB | 48 KB | | `monograma_frenzzy_negro_2.png` | monograma | negro | 963×1095 | 371 KB | 154 KB | | `sello_frenzzy_blanco_1.png` | sello | blanco | 1403×1343 | 115 KB | 120 KB | | `sello_frenzzy_blancoteal_1.png` | sello | blancoteal | 1403×1343 | 161 KB | 122 KB | | `sello_frenzzy_negro_1.png` | sello | negro | 1403×1343 | 124 KB | 111 KB | | `sello_frenzzy_negroteal_1.png` | sello | negroteal | 1402×1344 | 160 KB | 112 KB | ### Mockups | Archivo | Tipo | Variante | Dimensiones | Peso | |---|---|---|---|---| | `parche_frenzzy_rectangular_1.jpg` | parche | rectangular | 1773×1772 | 213 KB | | `parche_frenzzy_circular_1.jpg` | parche | circular | 1772×1772 | 241 KB | | `parche_frenzzy_monograma_1.jpg` | parche | monograma | 1773×1772 | 223 KB | | `mockup_frenzzy_patineta_1.jpg` | mockup | patineta | 1772×1772 | 170 KB | | `pin_frenzzy_bandera_1.jpg` | pin | bandera | 1773×1772 | 178 KB | | `pin_frenzzy_circular_1.jpg` | pin | circular | 1772×1772 | 193 KB | | `mockup_frenzzy_lata_1.jpg` | mockup | lata | 1773×1772 | 146 KB |