Saltar al contenido

Ingeniería

Cómo este sitio fue hecho

Es la misma ingeniería que vendemos, aplicada primero a nosotros. Nada de lo que sigue hay que creerlo: se puede inspeccionar desde afuera.

HTML completo, sin depender de JavaScript

Los rastreadores de IA — GPTBot, ClaudeBot, PerplexityBot — no ejecutan JavaScript. Cada página de este sitio se genera estáticamente por idioma y llega entera en la primera respuesta del servidor. Podés comprobarlo vos mismo: apagá el JavaScript del navegador y el contenido sigue ahí.

Tres idiomas publicados, sin romper el guaraní

El guaraní usa caracteres que la mayoría de las tipografías populares no trae — ẽ, ỹ y la g̃, que ni siquiera existe como carácter precompuesto. Las fuentes de este sitio cargan el subconjunto que los cubre, y una verificación automática lee el CSS generado después de cada compilación: si alguien elige una tipografía que no los cubra, la verificación falla. Corre en cada cambio propuesto, no cuando alguien se acuerda de mirar.

La ruta en guaraní se publica cuando el contenido esté traducido, no antes. Servir /gn/ con texto en español sería contenido duplicado para los buscadores y una falta de respeto para quien habla el idioma.

Lo que se verifica en cada cambio

Cada verificación que corre acá nació de una falla concreta, y todas comparten la misma característica: no rompen la compilación y no muestran ningún aviso.

Una prohíbe formatear fechas y números con el idioma del contenido. Pedirle un formato al código «gn» no da error: cae silenciosamente en el idioma por defecto del servidor — portugués en la máquina donde se escribe, inglés dentro de un contenedor, con el mismo código. Otra exige que todos los textos estén en una única forma de normalización Unicode, porque la g̃ solo existe descompuesta y mezclar las dos formas rompe comparaciones, búsquedas y la generación de URLs sin que se vea nada raro en pantalla. Otra prohíbe la sintaxis de plural en guaraní, que elegiría siempre la rama equivocada. Y otra compara la cobertura real de traducción con la lista de idiomas publicados, fallando en los dos sentidos: idioma publicado a medias, o idioma ya completo que nadie publicó.

Junto con eso corren el chequeo de tipos y la compilación de producción entera, no el modo de desarrollo. Y una prueba en un navegador de verdad abre la página, confirma que el texto en guaraní está en el HTML que manda el servidor, que conserva la normalización y que hay una fuente web cargada que cubre esos caracteres. Esa prueba además guarda una captura del grupo g̃ para inspección humana: mirar cómo cae la tilde sobre la ge es lo único que ninguna verificación automática resuelve sola.

Detección de idioma sin sacrificar SEO

La raíz del sitio redirige una sola vez (307), según la cookie y el encabezado Accept-Language del navegador. Dentro de cada idioma no hay redirecciones, y el hreflang es recíproco con x-default. Los buscadores rastrean cada versión sin interferencia.

Datos estructurados con identidad estable

Un único grafo JSON-LD con @id conecta organización, servicios, personas y migas de pan. Sin FAQPage: Google retiró ese resultado enriquecido en 2026, y no implementamos esquemas de adorno.

Claro y oscuro, con el contraste medido en el píxel

El selector de tema tiene tres estados — claro, oscuro y el del sistema — y funciona por un atributo en la raíz del documento, no por la preferencia del sistema sola. Un script mínimo en la cabecera aplica la elección guardada antes del primer pintado, así nadie ve un destello claro antes de la página oscura. Esa elección se guarda en el navegador, en tu propio dispositivo, y volver a «sistema» borra el dato.

La primera implementación usaba la función CSS light-dark() y no funcionaba: dentro de una variable de color no reacciona al cambio manual, solo a la preferencia del sistema. El tema del sistema andaba, el selector no hacía nada, y no había error ni aviso en ninguna parte. Apareció midiendo el valor final del color, no mirando la captura de pantalla.

El contraste se trata igual: se mide en el píxel real, no se estima del CSS. El método importa — midiendo dentro de la caja del texto se mide el borde suavizado de la letra, y así un título blanco sobre fondo petróleo llegó a dar 1,56:1, un número físicamente imposible que fue justamente lo que delató el método. Lo que funciona es ocultar el texto, capturar de nuevo el fondo que quedaba detrás y leer el peor píxel de esa foto. Cada color nuevo y cada panel translúcido pasa por eso, en los dos temas, antes de entrar.

Las ilustraciones son interfaz nuestra, no fotos de banco

Lo que ilustra cada línea de servicio no es una foto de banco ni una imagen generada: son miniaturas de interfaz construidas con el mismo HTML y el mismo CSS del sitio, armadas en el servidor, una por línea. No hay ninguna imagen que descargar, y el texto de adentro pasa por el mismo diccionario que el resto del sitio, en los tres idiomas.

Las entidades son genéricas a propósito — «Pedido 0412», «AP 3». Un nombre con cara de cliente real o un número con cara de resultado prometido sería prueba social fabricada, que es exactamente lo que este sitio critica en otros.

Son ilustración y están marcadas como tal para los lectores de pantalla: lo que hay que leer vive en el texto, no adentro de la ventanita. La secuencia de entrada es CSS, y el estado final es el estado de reposo — con movimiento reducido se ve la pantalla completa, sin animación.

Rendimiento, y ningún tercero en el medio

Fuentes autoalojadas con precarga, espacio reservado para cada imagen antes de que cargue y ningún WebGL: el fondo animado de la portada son manchas de degradado en CSS, sin canvas y sin contexto de GPU. Las animaciones de entrada usan una biblioteca de movimiento que viaja en el JavaScript del cliente, después de que el HTML ya llegó entero. Ningún script de terceros y ningún rastreador: nada se interpone entre el servidor y el texto. El objetivo público: LCP ≤ 2,5 s, INP ≤ 200 ms y CLS ≤ 0,1 en el percentil 75.

El mapa de la página de contacto es la prueba más concreta de eso. En vez de incrustar un mapa ajeno, los mosaicos de OpenStreetMap se bajaron una sola vez, se cosieron en una imagen de 1200 × 675 y quedaron guardados como un archivo de unos 49 KB que servimos desde nuestro propio dominio. Un mapa incrustado escribe una cookie de terceros en la primera visita, antes de cualquier consentimiento, y haría que la página desmienta nuestra propia política de privacidad. Cuando abrís esa página no sale ni una petición fuera del dominio: WhatsApp, Google Maps y OpenStreetMap aparecen solo como enlaces, y se activan si vos hacés clic.

La versión oscura de ese mapa tampoco es un segundo archivo: es el mismo, con un filtro CSS que sigue al selector de tema. Una imagen alternativa por preferencia del sistema habría ignorado la elección manual, el mismo problema del light-dark().