
Cuando abres cualquier herramienta de Free Animation Power no encuentras node_modules de medio gigabyte ni webpack.config.js ni import { Button } from './components/Button'. Encuentras un solo archivo PHP. Mobile: 2,488 lineas. Desktop Web: 2,867. Glitch: 2,102. Cada archivo es una herramienta completa. Esto no es un accidente. Es una declaracion de principios.
El archivo unico como atomo creativo
En fisica, un atomo es la unidad mas pequena de un elemento que conserva sus propiedades. No puedes dividirlo sin destruirlo. En FAP cada herramienta sigue esa logica: HTML, CSS, JavaScript y PHP conviven en un mismo archivo porque esa convivencia elimina la friccion mas peligrosa del desarrollo web — la distancia entre intencion y resultado.
Cuando tienes 47 archivos en 12 carpetas, modificar el color de un boton puede implicar tres capas distintas. En FAP, modificas el color del boton donde defines su comportamiento y su contenido. No hay estados desincronizados. No hay imports rotos.
La implicacion radical: independencia temporal. Si manana desaparece npm, FAP sigue funcionando. Si React cambia su API, FAP ni se entera. Si los CDN caen, solo hay que cambiar tres lineas. Todo lo demas es vanilla que corre en cualquier navegador con PHP 8.3+. No es minimalismo estetico: es resistencia contra la obsolescencia programada.
El proxy PHP como traduccion universal
En el corazon del Hub viven api/chat.php e api/img.php. Son proxies. Reciben peticiones del frontend y las reenvian. Llamarlos “hacks” es no entender su arquitectura.
chat.php es un transformador de protocolos. Recibe un body JSON con headers x-target-url y x-api-key, configura cURL con timeout de 120 segundos, reenvia la peticion y retorna el status code original. No necesita saber si al otro lado hay OpenAI, Gemini, DeepSeek, Mistral o Groq. Convierte la jaula del navegador — same-origin policy, CORS — en una autopista hacia cualquier API.
php
$ch = curl_init($targetUrl);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $rawBody,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_TIMEOUT => 120,
CURLOPT_RETURNTRANSFER => true
]);
img.php va mas lejos: interpreta. Detecta si la respuesta viene de DALL-E (data[0].url), de Gemini (predictions[0].bytesBase64Encoded), de HuggingFace (url/image/output) o de Pollinations. Normaliza y entrega siempre una imagen renderizable. Es una maquina de Turing para APIs de generacion visual: dado cualquier input, produce el output correcto sin que el frontend sepa de donde vino.
La sesion PHP como contrato social
Todo el ecosistema esta protegido por 89 lineas de PHP. Sin OAuth. Sin JWT. Sin cookies de terceros. Solo $_SESSION['email'], verificado en la primera linea:
php
if (!isset($_SESSION['email'])) {
header('Location: login.php?redirect=' . urlencode($_SERVER['REQUEST_URI']));
exit;
}
La sesion dura 24 horas con cache limiter en nocache. El email gate usa INSERT IGNORE: si el correo existe, inicia sesion; si no, lo registra. Sin contrasenas. Sin verificaciones SMS. Sin 2FA.
Esto no es autenticacion tradicional. Es un pacto de confianza en 89 lineas. FAP asume que quien pone un email real quiere usar herramientas reales. En un mundo donde cada startup te pide OAuth, telefono y DNI para probar un generador de paletas, FAP te pide un email y te abre todo por 24 horas.
CSS sin frameworks: el diseno como lenguaje nativo
El design system cabe en 1,255 lineas de CSS puro. Sin Tailwind, sin Bootstrap, sin utilidades generadas. Cada propiedad existe porque Eduardo Fierro Duque — desde Santiago de Chile — decidio que debia estar ahi. #ffdc00 no es un token JSON: es la identidad visual del ecosistema.
Las animaciones son vanilla. GSAP no: SplitText, Stagger, Magnetic, Ripple y ScrollTrigger recreados con @keyframes, IntersectionObserver y pointer events. --color-primary: #ffdc00 no es una variable: es la declaracion de que el diseno se escribe en el lenguaje del navegador, no en el de un framework.
La paradoja de la dependencia cero
En todo FAP hay tres dependencias externas: gif.js 0.2.0, p5.js 1.11.1 y jsPDF 2.5.1. Tres, desde CDN. No hay React, Vue, jQuery, GSAP, Axios, Lodash, Webpack, Babel ni TypeScript.
No es ludismo. Es matematicas a largo plazo. Cada dependencia que anades es una hipoteca: el mantenedor abandona, introduce breaking changes, aparece una vulnerabilidad o dejas de actualizar y nada compila. El vanilla que funciona hoy funcionara en 10 anos. Tu proyecto en React 18 con 47 dependencias… suerte.
Cada linea que escribes es una linea que no migraras, actualizaras ni lamentaras. Cada funcionalidad en vanilla sobrevive a cualquier cambio de paradigma. Cada herramienta autocontenida de FAP es un universo cerrado fuera del tiempo tecnologico.
Free Animation Power no depende de nada excepto un navegador y un servidor con PHP 8.3+. En un mundo donde cada “hola mundo” requiere 200 MB de node_modules, elegimos el camino inverso: menos dependencias, mas permanencia. Menos abstracciones, mas control. Menos archivos, mas densidad. Eso no es solo ingenieria. Es una apuesta por la permanencia. Es la conviccion de que el codigo que merece existir es el que puede sostenerse solo.
Hashtags: #archivoÚnico #singleFile #herramientaAutocontenida #selfContainedTool #independenciaTemporal #temporalIndependence #PHPinline #HTMLinline #CSSinline #JavaScriptinline #sinDependencias #zeroDependencies #npmIndependence #resistenciaTecnológica #obsolescenciaProgramada #plannedObsolescence #proxyHTTP #protocolTranslation #máquinaDeTuring #TuringMachine #sesionesPHP #PHPsessions #autenticaciónSinContraseña #passwordlessAuth #pactoDeConfianza #trustBasedDesign #CSS1255Lineas #designSystem #SplitTextVanilla #StaggerVanilla #MagneticVanilla #RippleVanilla #ScrollTriggerVanilla #keyframes #IntersectionObserver #gifJS #p5JS #jsPDF #únicasDependenciasCDN #only3CDNdeps #hipotecaTécnica #technicalDebt #permanencia #permanence #códigoQuePerdura #selfStandingCode #autonomíaDelCódigo #codeAutonomy #menosEsMás #lessIsMore #minimalWeb #filosofíaDeDesarrollo #softwarePhilosophy #10AñosDeVigencia #PHP83 #longTermCode #freeanimationpower #eduardofierroduque #fierroduque.com