Aquí escribo sobre diseño, trabajo con IA, productos digitales, el sector inmobiliario y la vida en familia en Dubái. Necesito un sitio donde todo eso pueda convivir: artículos, fotografías, proyectos profesionales y herramientas interactivas.
Todo empezó con Framer
Construí mi primer sitio con Framer. Sigue disponible en nevskii.me y sirve como mi portfolio de diseñador de producto.
Más tarde abrí un blog independiente en Ghost Pro. Compré el tema Scope de Priority Vision y empecé a modificarlo. Trabajaba en el tema a través de GitHub y GitHub Actions. Al mismo tiempo, seguía escribiendo y acumulando contenidos, pagando 35 dólares al mes por Ghost Pro.
Con el tiempo, el sitio adquirió un diseño propio y un historial de cambios. Quería conservar todo eso en la siguiente mudanza.

Por qué me pasé a Astro
En un momento dado decidí que sería más sencillo construir el sitio con Astro. Porté el diseño del tema y seguí trabajando en él desde el código.
Astro compone las páginas a partir de componentes y puede generar el HTML completo de antemano. Para un blog tiene sentido: el texto del artículo, las fotografías y la navegación pueden llegar al navegador ya maquetados. El lector no tiene que esperar a que JavaScript construya la página en su dispositivo.
La migración exigió trasladar las plantillas de artículos, los listados de publicaciones, las galerías, los menús y los temas claro y oscuro. Cada página puede tener una composición distinta. Un artículo fotográfico y un flujo de notas no tienen por qué verse iguales.
El aspecto del blog sigue basado en Scope, pero sus plantillas ahora funcionan en Astro. Framer se mantiene como portfolio independiente y como una de las referencias visuales.

Después llegó EmDash
Cuando apareció la primera versión de EmDash, decidí trasladar allí todos los contenidos. Todavía seguimos trabajando en esa migración y en el desarrollo del sitio.
EmDash hace de CMS, el sistema de gestión de contenidos del sitio. Aquí trabajo con los artículos, las páginas y sus traducciones, y modifico los pies de foto y los textos comunes de la interfaz. Los contenidos tienen borradores y versiones publicadas.
El código y los contenidos están separados. Los componentes Astro determinan cómo mostrar un artículo o una galería. EmDash almacena su contenido. Así, cambiar un párrafo no exige buscarlo en los archivos de las plantillas, y modificar el diseño no debería crear otra copia del artículo.

Cómo se conecta todo
El sitio tiene un editor, un proceso de generación y una versión pública.
Edito los contenidos en EmDash. Los textos y la información de las publicaciones se guardan en la base de datos Cloudflare D1. Los archivos multimedia subidos utilizan el almacenamiento de objetos Cloudflare R2: las fotografías y los demás archivos se mantienen separados del código del sitio.
Para cada lanzamiento, Astro recibe una instantánea de los contenidos publicados y genera las páginas. A la vez se preparan los enlaces a las traducciones, el mapa del sitio y el índice de búsqueda. Los borradores quedan fuera de esa generación.
El sitio generado funciona en Cloudflare Workers y se distribuye a través de la infraestructura de Cloudflare. Una página de artículo normal no consulta el editor ni la base de datos cada vez que se abre: su HTML ya está generado. La búsqueda utiliza el índice de esa misma versión publicada.
Un contenido sigue este recorrido:
EmDash → versión publicada en D1 → generación con Astro → Cloudflare → lectorLas imágenes se preparan por separado. Se conservan los originales y se crean variantes con tamaños adecuados para las páginas. Se distribuyen a través de cdn.nevsky.ae, para que, por ejemplo, una tarjeta pequeña no tenga que cargar una fotografía a tamaño completo.

La generación puede reutilizar páginas y recursos ya comprobados cuando sus dependencias no han cambiado. Los cambios en componentes comunes o en la estructura del sitio pueden requerir una regeneración completa.
Dónde utilizo Svelte
El proyecto utiliza Svelte para las interacciones más complejas. Se emplea en algunas presentaciones con búsqueda y filtrado del flujo de publicaciones: se puede cambiar la consulta o la categoría, actualizar los resultados y conservar los parámetros elegidos en la dirección de la página.
Astro permite incorporar esos componentes por separado. Un artículo sigue siendo una página HTML normal, mientras que un bloque interactivo recibe su propio JavaScript donde hace falta. Svelte no se carga en todas las páginas del blog principal.
Los menús, el cambio de tema y otros elementos pequeños pueden funcionar con JavaScript estándar. No necesitan un componente Svelte independiente.

Un contenido en siete idiomas
El sitio admite ruso, inglés, árabe, chino, francés, alemán y español. El ruso es el idioma de origen de los contenidos.
En EmDash, un artículo se guarda como un único documento. Tiene una secuencia común de bloques e imágenes, con versiones de idioma para el texto, los encabezados, los pies de foto y los campos SEO.
Esto mantiene conectadas las traducciones. Cuando cambio el orden de las fotografías, no tengo que repetir manualmente la misma operación en siete artículos distintos. Cada versión de idioma puede seguir teniendo su propia dirección y su propio estado de publicación.
Las páginas incluyen enlaces a las traducciones correspondientes y marcado hreflang para los buscadores. La versión árabe tiene en cuenta la escritura de derecha a izquierda. Cuando una traducción está publicada, el selector de idioma lleva a esa versión del contenido que se está leyendo.

Diseño y código
La tipografía y la estructura de Scope siguen siendo la base del diseño. Los colores comunes, los botones y otros elementos recurrentes se describen en el sistema de diseño.
El color de acento principal es actualmente #46a758. El sitio utiliza las fuentes Geist y Geist Mono servidas localmente, temas claro y oscuro e iconos de Remix Icon. Los estilos están escritos en CSS estándar.
La paleta y los ejemplos de componentes están reunidos en la página pública del sistema de diseño. Las reglas técnicas y los tokens se describen en design.md, para que las páginas nuevas utilicen los mismos colores, tamaños y estados de los botones.

Stack técnico en octubre de 2026
El proyecto se basa en Astro 7.3.8 y EmDash 1.2.0. Las vistas interactivas complejas usan Svelte 5.57.1 y el lenguaje de la aplicación es TypeScript 6.0.3. La integración con Cloudflare utiliza @astrojs/cloudflare 14.3.4. El editor de EmDash usa React 19.2.4; su modo de edición del texto completo está construido sobre Ghost Koenig y Lexical. Son las versiones de las dependencias del proyecto a 19 de octubre de 2026.
Cada capa tiene una tarea. Astro se ocupa del HTML y las plantillas, EmDash del contenido editorial y sus revisiones, y Svelte de los componentes interactivos. Cloudflare Workers ejecuta el código de servidor, D1 guarda los datos editoriales y R2 los medios y los paquetes privados de compilación. El diseño está hecho con CSS convencional: variables, rejillas adaptables, estados de componentes y composiciones de página diferenciadas.
Por qué este stack
Buena parte del contenido del blog se conoce antes de que llegue la petición del lector. Títulos, artículos, fotografías y listas de publicaciones pueden generarse de antemano. Por eso el sitio principal entrega HTML estático desde Cloudflare Workers Assets. Su entorno público no tiene conexión con D1: el editor y la compilación necesitan la base de datos, pero leer un artículo no provoca consultas al CMS.
Astro también permite crear interfaces complejas. En vistas separadas, los componentes Svelte controlan flujos interactivos y opciones de visualización. Los artículos normales no necesitan hidratación. La búsqueda, los menús y el cambio de apariencia utilizan pequeños scripts propios. Así puedo elegir la herramienta según el comportamiento de cada bloque y controlar cuánto JavaScript recibe el lector.
El documento editorial como modelo de datos
Un contenido de EmDash incluye locales, fields, un array blocks común y presentation con las asociaciones de diseño. Cada bloque tiene un ID estable, estructura y medios compartidos, y textos repartidos en celdas por idioma. Una galería comparte el orden de las imágenes; los pies y los textos alt se localizan. Mover una foto modifica una sola estructura para todas las traducciones.
El ruso es el idioma de origen. Las versiones inglesa, árabe, china, francesa, alemana y española viven en el mismo documento. Cada una tiene su ruta y su estado de publicación. Un cambio del original puede marcar una traducción desactualizada mediante sourceHash. Al importar se comprueban los ID, el hash del original y el número de fragmentos de texto, para que la respuesta del modelo no reestructure el contenido ni pierda una imagen.
Los rótulos compartidos, los menús y los ajustes también pertenecen a EmDash. Los contenidos pueden referenciar campos de su documento propietario. La vista pública resuelve esas referencias desde documentos publicados. Una etiqueta no se convierte en siete copias editables por separado y cambiar la navegación no exige buscar texto dentro de las plantillas.
Plugins propios del editor
Para este modelo desarrollé el plugin nativo nevsky-multilingual 1.0.0. Conecta el editor y las comprobaciones beforeSave, beforePublish y beforeSchedule. Valida la estructura del documento, las versiones lingüísticas, las rutas y los datos obligatorios. Las traducciones se añaden dentro del contenido. Publicar o retirar una publicación envía una señal al sistema de despliegue.
El modo de texto completo utiliza el editor Ghost Koenig. El modo por bloques sigue disponible; ambos editan el mismo documento. Un plugin separado, nevsky-grid 0.1.0, vincula contenido y diseño: comprueba a qué contenido pertenece la composición, sus referencias a bloques y la revisión del diseño. Cambiar la disposición conserva la fuente editorial.
La IA ayuda a preparar textos y traducciones, y los plugins verifican el resultado antes de guardar y publicar. Puedo preparar un texto en un proyecto o chat de ChatGPT, revisarlo con nuestras reglas humanizer y llevarlo a un único contenido multilingüe. El proveedor de traducción con IA del servidor no está configurado actualmente: el proceso usa una traducción preparada y revisada.

Cómo funcionan la compilación y los despliegues
La compilación lee únicamente revisiones nativas publicadas mediante live_revision_id y las relaciones publicadas con categorías, etiquetas y autores. Los borradores no entran en la exportación. Antes de un despliegue se fijan la versión del código y la huella de los datos publicados. Si alguien publica contenido o cambia el código durante la compilación, una nueva comprobación detiene el despliegue desactualizado.
Para las compilaciones siguientes desarrollé un seguimiento de dependencias por página. Durante el renderizado, el adaptador registra consultas SQL, parámetros y hashes de resultados. En el siguiente despliegue las ejecuta sobre una instantánea nueva: un resultado distinto exige volver a renderizar la página. El HTML sin cambios puede reutilizarse. Se tienen en cuenta la composición y el orden de los flujos, los resultados vacíos, los autores, los campos comunes y las tarjetas relacionadas. Un cambio de código, dependencias, entorno o inventario de rutas provoca una reconstrucción completa.
El resultado forma un paquete completo con HTML, índice de búsqueda, estilos, medios y archivos legibles por máquinas. Se verifica localmente antes de subir una nueva versión del Worker. Tras la subida se comprueban las URL públicas y los metadatos del despliegue. Una comprobación fallida puede activar el regreso a la versión anterior. El código y los datos publicados se verifican de nuevo justo antes de subirlos.
Cloudflare, compilación en la nube y trabajo desde el chat
El editor, D1, R2 y la entrega pública ya funcionan en Cloudflare; el código está en GitHub. Hay un publisher privado sobre Workers y Durable Objects preparado para la compilación en la nube. Recibe eventos de EmDash, agrupa publicaciones cercanas y puede iniciar una compilación verificada mediante GitHub Actions. Ahora mantengo desactivado el inicio automático y publico la versión de producción manualmente desde el terminal con las mismas comprobaciones.
Los paquetes de compilación aceptados pueden guardarse en una caché privada de R2 cifrada con AES-256-GCM. Cada paquete contiene la salida generada, dependencias y sumas de verificación. No incluye borradores, la base del CMS ni secretos. Antes de reutilizarlo se comparan el código, el entorno y la integridad de los archivos. Un paquete así permite continuar la compilación en otro entorno; un sistema operativo o una versión de herramientas nuevos necesitan primero su propia base completa.
Estoy trasladando más pasos a la nube para iniciar tareas desde un proyecto o chat, sin depender de un ordenador de trabajo encendido permanentemente. Preparar textos, editar código y desplegar siguen siendo acciones distintas. Una interfaz de conversación sigue necesitando borradores, comprobaciones de cambios y control de la publicación.

SEO técnico dentro de la compilación
Cada versión lingüística publicada tiene su URL, canonical, lang y enlaces hreflang a las traducciones correspondientes. El idioma predeterminado tiene x-default. Las páginas árabes reciben dir="rtl". Títulos, descripciones y metadatos Open Graph y Twitter proceden del mismo documento EmDash que el texto visible.
JSON-LD describe WebSite y el tipo concreto de página: BlogPosting para artículos, ProfilePage para autores, CollectionPage para colecciones y WebPage para páginas normales. Autoría y fechas proceden de los datos editoriales. Los sitemaps se separan por tipo de contenido; el RSS se genera con materiales publicados. Las comprobaciones recorren todo el grafo de enlaces internos, canonical, hreflang y URL de sitemap, más allá de verificar que existan unas etiquetas meta.
Contenido para LLM
Los contenidos publicados generan automáticamente versiones Markdown de las páginas, además de llms.txt y llms-full.txt en siete idiomas. El archivo corto ofrece el perfil, los idiomas y enlaces al contenido; el completo incluye una salida textual ampliada. La versión para máquinas comparte la fuente editorial del sitio. No mantengo otra biografía para los robots.
Las herramientas de IA reciben texto con títulos, enlaces y URL de origen que pueden leer sin analizar la interfaz de la página. Al compilar un despliegue se actualiza todo el conjunto relacionado. Aquí se unen para mí edición, SEO e IA: un contenido necesita una presentación cuidada para una persona, un buscador y un modelo.

Entrega de medios y verificación de cambios
Los medios se sirven por separado del HTML. La compilación elige variantes adaptables de imágenes, conserva enlaces a los originales y verifica los archivos derivados. Donde se aplica optimización sin pérdida se comparan los píxeles decodificados. Se prepara la cobertura de caracteres de las fuentes locales Geist y Geist Mono; los caracteres ausentes recurren a una fuente del sistema. Remix Icon utiliza máscaras CSS locales.
Los cambios pasan por comprobaciones de tipos, pruebas del modelo y de publicación, compilaciones de las vistas, auditorías de dependencias y escenarios de navegador. La versión publicada se verifica aparte: una compilación local correcta no demuestra que el HTML, la fuente y la traducción adecuados hayan llegado a la URL pública. Cada despliegue registra su versión de código, la huella del contenido y los resultados de las comprobaciones.
Cómo sigo trabajando en el sitio
Edito los contenidos en EmDash y mantengo el código en GitHub. Utilizo herramientas de IA para trabajar en el código; los cambios se comprueban mediante compilaciones, pruebas y revisiones en el navegador. GitHub Actions ya formaba parte del trabajo en el tema de Ghost. El proyecto actual también dispone de un proceso de lanzamiento desde el terminal, con comprobaciones antes de la subida y después del despliegue.
Guardar un texto crea un borrador. Publicar en EmDash y llevar una versión nueva al sitio público son pasos separados. Por ahora, los lanzamientos del sitio se inician manualmente después de las comprobaciones.
La migración continúa. Ya funcionan las publicaciones en siete idiomas, una biblioteca común de contenidos y varias formas de presentarlos. Sobre esa base sigo desarrollando el editor, el diseño y las páginas interactivas.
Qué puedo construir sobre esta base
Puedo diseñar y desarrollar un sitio así para un autor, un estudio o una empresa: migrar contenidos desde el CMS anterior, conservar URL, configurar varios idiomas y adaptar el editor al trabajo real con el contenido. Para un catálogo o una presentación compleja se pueden añadir componentes interactivos y composiciones de página propias.
En este trabajo combino mi experiencia en diseño de producto con desarrollo asistido por IA. Puedo ocuparme de todo el recorrido: definir la estructura del contenido, construir la interfaz, escribir plugins editoriales, configurar la entrega en la nube y verificar el resultado publicado. Si necesitas un sitio así, escríbeme por Telegram y enséñame qué quieres publicar y cómo piensas trabajar con ello.
@nevsky_alexander
En Instagram, Dubái más allá de la postal: familia, ciudad, descubrimientos y la vida entre proyectos. En Threads, ideas en voz alta sobre diseño e IA. En YouTube, vídeos que necesitan más espacio que una historia. Sígueme donde te sientas más a gusto y seguimos en contacto