top of page

WebApp LK World Control News: Construyendo un dashboard global de monitorización de noticias

  • 14 mar
  • 18 Min. de lectura

En muchas situaciones necesitamos seguir información global en tiempo real: noticias internacionales, conflictos, mercados, webcams, mapas o canales de televisión en directo.


Profesionales que trabajan en contextos internacionales —operaciones, logística, análisis geopolítico o gestión de proyectos— suelen consultar múltiples fuentes abiertas para mantenerse informados.


El problema es que esa información suele estar fragmentada en decenas de páginas web diferentes.

Un mapa en una pestaña, un canal de televisión en otra, varios periódicos en otra más… y al final se pierde una visión global de lo que está ocurriendo.


Para resolver este problema hemos desarrollado en Lozkorp una pequeña aplicación web llamada:

LK World Control News


Un dashboard de monitorización global que reúne en una sola pantalla diferentes fuentes de información:

  • mapas interactivos

  • noticias internacionales

  • canales de televisión en directo

  • webcams de diferentes ciudades del mundo

  • relojes internacionales

  • eventos y countdowns


Todo ello dentro de una aplicación web ligera, configurable y fácilmente ampliable.

Además, este proyecto es especialmente interesante porque está construido con una arquitectura extremadamente sencilla:

  • HTML

  • CSS

  • JavaScript

  • JSON

Sin frameworks, sin backend y sin dependencias complejas. Esto hace que el sistema sea muy fácil de mantener, modificar y escalar.


La aplicación puede verse funcionando aquí:


WebApp LK World Control News
WebApp LK World Control News

En este artículo vamos a explicar cómo está construida la aplicación, cómo funciona y cómo puede ampliarse fácilmente. Al final del artículo hay un enlace desde donde puedes descargar la aplicación para que puedas modificarla tu mismo y adaptarla a tus necesidades.


El concepto: una sala de control informativa

La idea detrás de LK World Control News es reproducir el concepto de una control room informativa.

En muchos entornos profesionales —centros de operaciones, trading rooms, centros de crisis o salas de control industriales— la información se organiza en paneles visuales simultáneos que permiten observar diferentes aspectos de una situación al mismo tiempo.


En lugar de consultar una única fuente de información, se combinan múltiples vistas:

  • mapas operativos

  • canales de noticias

  • datos en tiempo real

  • cámaras

  • indicadores clave

De esta forma se obtiene una visión global y contextualizada de lo que está ocurriendo.

Este mismo principio puede aplicarse al seguimiento de la actualidad internacional.

La mayoría de las veces consumimos información de forma lineal: abrimos un periódico, vemos un canal de televisión o revisamos redes sociales.

Sin embargo, cuando se quiere entender mejor el contexto global, resulta mucho más útil observar varias fuentes simultáneamente.


Por ejemplo:

  • un mapa de conflictos

  • titulares de noticias internacionales

  • un canal de noticias en directo

  • cámaras de diferentes ciudades

  • indicadores de mercado

Cuando todo esto aparece en una misma pantalla se obtiene algo parecido a una pequeña sala de control personal.


Screenshot de la webapp: "LK World Control News". Interfaz de noticias con mapa de conflictos en Medio Oriente, relojes mundiales y transmisión en vivo sobre Irán. Fondo azul oscuro.
WebApp LK World Control News

Ese es precisamente el objetivo de esta aplicación.

Crear un dashboard global de monitorización que permita observar diferentes fuentes de información al mismo tiempo y que pueda utilizarse como panel de referencia.

Además, el diseño visual del dashboard está inspirado en interfaces utilizadas en:

  • salas de operaciones financieras

  • centros de control industrial

  • interfaces de monitorización técnica

  • paneles de trading o análisis de datos


Por eso se ha optado por una estética oscura, con colores fríos y paneles modulares que recuerdan a una consola de supervisión.

El objetivo no es solo mostrar información, sino hacerlo de una forma que facilite la observación continua y el análisis rápido del contexto global.


Estructura del dashboard

El dashboard de LK World Control News está diseñado como un panel modular dividido en varias zonas, donde cada área muestra un tipo diferente de información.

La interfaz se organiza utilizando CSS Grid, lo que permite construir un layout flexible y fácilmente redimensionable.


La pantalla se divide en tres grandes zonas:

  1. Cabecera superior

  2. Panel principal de información

  3. Barra inferior de enlaces

Esto crea una estructura muy clara que recuerda a los paneles utilizados en centros de control y sistemas de monitorización.


Cabecera (Header)

La cabecera muestra información general del sistema: nombre de la aplicación, estado del sistema, reloj en tiempo real, fecha actual y selector de perfil de configuración

El objetivo de esta zona es proporcionar información contextual rápida sobre el dashboard.


Panel principal

El área principal es donde aparece el dashboard de monitorización.

Este panel se divide en dos columnas principales:

  • columna izquierda

  • columna derecha

Cada columna se subdivide en varios paneles independientes.

Visualmente la estructura se puede representar así:


Panel de noticias con mapas, transmisión en vivo y webcams. Texto destacado: "MAPAS", "Noticias", "News Live", "Webcams". Colores oscuros.
Paneles de la aplicación

Cada uno de estos bloques es un panel independiente que puede mostrar diferentes tipos de contenido.

Por ejemplo:

Panel Mapas

  • OpenStreetMap, Liveuamap (conflictos), Earth Nullschool (clima)

Panel Noticias

  • Links de periódicos

Panel News Live

  • canales de televisión en directo

Panel Webcams

  • cámaras en directo de diferentes ciudades


Paneles con pestañas

Cada panel puede contener múltiples pestañas. Esto permite mostrar varias fuentes dentro del mismo espacio.

Por ejemplo, el panel de mapas puede alternar entre:

  • mapa base mundial

  • mapa humanitario

  • mapa de conflictos

  • mapa climático

El usuario simplemente cambia entre pestañas para visualizar cada fuente. Este sistema permite multiplicar el contenido disponible sin saturar la interfaz.


Paneles redimensionables

Otro elemento importante del diseño es que los paneles pueden redimensionarse dinámicamente.

Entre los paneles existen separadores que permiten modificar el tamaño de cada área arrastrando con el ratón.


La interfaz se comporta de forma similar a las herramientas profesionales de análisis o trading.


Un panel diseñado para escalar

La clave del diseño del dashboard es que cada panel es independiente.

Esto significa que se pueden añadir fácilmente nuevos módulos como:

  • datos de mercados

  • seguimiento de vuelos

  • actividad sísmica

  • seguimiento marítimo

  • indicadores económicos

El sistema está pensado para evolucionar y convertirse en una plataforma de monitorización completamente personalizable.


Arquitectura del proyecto

Uno de los objetivos principales de LK World Control News era construir una herramienta útil sin depender de frameworks complejos ni de infraestructuras pesadas.

Por eso la aplicación se ha desarrollado siguiendo un principio muy simple:

máxima funcionalidad con la mínima complejidad técnica.


El resultado es una aplicación basada únicamente en tecnologías web estándar:

  • HTML para la estructura

  • CSS para el diseño visual

  • JavaScript para la lógica de funcionamiento

  • JSON para la configuración

Esto permite que la aplicación funcione simplemente sirviendo archivos estáticos desde cualquier servidor web.

No requiere:

  • backend

  • base de datos

  • compilación

  • frameworks externos

Cualquier servidor web sencillo —incluso un hosting estático— es suficiente para ejecutarla.


Estructura de archivos

Cada archivo cumple una función muy concreta dentro del sistema.

Archivo

Función

index.html

estructura del dashboard

styles.css

diseño visual de la interfaz

app.js

lógica de la aplicación

config.json

configuración del contenido


Separación entre lógica y contenido

Uno de los aspectos más importantes del diseño es la separación entre:

la lógica de la aplicación y el contenido que se muestra

Toda la lógica está implementada en el archivo:

app.js

Mientras que todo el contenido del dashboard —mapas, canales, webcams, RSS, enlaces— está definido en:

config.json

Esto significa que es posible modificar completamente el contenido del dashboard sin tocar el código JavaScript.

Por ejemplo:

  • añadir nuevos canales de noticias

  • cambiar webcams

  • modificar paneles

  • crear nuevos perfiles de configuración

Todo esto se realiza únicamente editando el archivo JSON.


Flujo de funcionamiento de la aplicación

El proceso de arranque de la aplicación sigue una secuencia sencilla:

Carga de la página
        ↓
Inicialización del sistema
        ↓
Carga del archivo config.json
        ↓
Creación dinámica del dashboard
        ↓
Renderizado de paneles y pestañas

Este flujo permite que la interfaz se genere automáticamente en función de la configuración.


Una arquitectura pensada para escalar

Aunque el proyecto es sencillo, la arquitectura permite ampliarlo fácilmente.

Por ejemplo, podrían añadirse módulos como:

  • integración con APIs de noticias

  • datos financieros en tiempo real

  • seguimiento de vuelos

  • mapas de actividad sísmica

  • monitorización meteorológica avanzada

Todo ello manteniendo la misma estructura de base.

Este tipo de diseño demuestra que una buena arquitectura no depende de utilizar herramientas complejas, sino de organizar correctamente el sistema.


Archivo 01: La estructura HTML del dashboard

El archivo HTML define la estructura básica de la aplicación. Su función principal es crear los contenedores donde posteriormente el JavaScript insertará dinámicamente los distintos elementos del dashboard.

El archivo principal de la aplicación es:

index.html

Este archivo contiene tres grandes bloques:

  1. Cabecera

  2. Panel principal

  3. Barra inferior


La estructura general de la página

La estructura principal de la aplicación está organizada dentro de un contenedor llamado:

app-shell

Este contenedor define el layout general del dashboard.

<div class="app-shell">
  <header class="banner"></header>
  <main class="main-grid"></main>
  <footer class="footer-bar"></footer>
</div>

Este diseño permite separar claramente:

  • la zona de información superior

  • el área principal de monitorización

  • los accesos rápidos inferiores


La cabecera del sistema

La cabecera muestra la información básica del dashboard.

Incluye:

  • logotipo de la aplicación

  • nombre del sistema

  • estado del panel

  • reloj en tiempo real

  • selector de perfil


El contenido de algunos elementos se actualiza dinámicamente desde JavaScript, como por ejemplo

la hora, la fecha y el perfil activo

Este enfoque permite que la interfaz sea parcialmente dinámica sin complicar el HTML. LK_WorldControlNews


El área principal del dashboard

La zona principal de la aplicación está contenida dentro de:

main-grid

Este elemento organiza todo el dashboard.

<main class="main-grid" id="mainGrid">
  <section class="column left-column"></section>
  <section class="column right-column"></section>
</main>

El layout está dividido en dos columnas principales.

Columna izquierda: contiene dos paneles:

  • panel superior (normalmente mapas)

  • panel inferior (noticias)

Columna derecha: Contiene tres paneles:

  • panel superior (tiempo / operaciones)

  • panel central (canales de noticias)

  • panel inferior (webcams)


Los paneles del dashboard

Cada zona del dashboard es un panel independiente.

En el HTML estos paneles aparecen como contenedores vacíos:

<section class="panel panel-slot" id="panel-topLeft"></section>
<section class="panel panel-slot" id="panel-bottomLeft"></section>
<section class="panel panel-slot" id="panel-topRight"></section>
<section class="panel panel-slot" id="panel-middleRight"></section>
<section class="panel panel-slot" id="panel-bottomRight"></section>

Estos contenedores funcionan como slots donde el JavaScript insertará posteriormente el contenido correspondiente. Este diseño permite que el HTML permanezca limpio y simple, mientras que el contenido se genera dinámicamente. LK_WorldControlNews


Separadores para redimensionar paneles

Entre los paneles existen elementos llamados resizers.

Estos elementos permiten modificar el tamaño de los paneles arrastrando con el ratón.

Por ejemplo:

<div
  class="resizer resizer-horizontal"
  data-resize="leftColumn"
  data-target-a="panel-topLeft"
  data-target-b="panel-bottomLeft">
</div>

Estos separadores no contienen contenido visual complejo, pero permiten implementar la lógica de redimensionado mediante JavaScript.


La barra inferior

El último bloque del HTML es la barra inferior del sistema.

<footer class="footer-bar" id="footerLinks"></footer>

Al igual que los paneles, su contenido se genera dinámicamente desde el archivo de configuración.


Archivo 02: Diseño visual con CSS

El aspecto visual del dashboard está definido en el archivo:

styles.css

Este archivo contiene todo el diseño de la interfaz y define elementos como:

  • colores

  • tipografías

  • paneles

  • layout del dashboard

  • animaciones

  • diseño responsive


El objetivo del diseño era recrear una estética similar a la de una sala de control o dashboard técnico, donde la información se muestra de forma clara, organizada y fácil de consultar durante largos periodos de tiempo.


Uso de variables CSS

Uno de los primeros elementos del archivo es la definición de variables CSS.

Esto permite controlar todo el estilo de la aplicación desde un único punto.

Por ejemplo:

:root {
  --bg: #090d12;
  --panel: #111a24;
  --primary: #1e6cff;
  --accent: #00d9ff;
  --text: #d9e4f2;
}

Estas variables se utilizan posteriormente en todo el diseño.

Esto tiene varias ventajas:

  • facilita cambiar el tema visual

  • permite mantener coherencia de colores

  • hace el código más fácil de mantener

Este tipo de diseño basado en variables es habitual en interfaces modernas. styles


Paneles del dashboard

Cada sección del dashboard está representada por un panel independiente.

Los paneles tienen:

  • fondo oscuro

  • bordes sutiles

  • sombras suaves

  • efecto de iluminación azul

Por ejemplo:

.panel {
  border: 1px solid rgba(47, 107, 255, 0.28);
  box-shadow:
    0 0 0 1px rgba(47, 107, 255, 0.10),
    0 0 12px rgba(47, 107, 255, 0.08);
}

Este tipo de diseño ayuda a que cada panel se perciba como un módulo independiente dentro del dashboard. styles


Sistema de pestañas

Muchos paneles contienen pestañas internas que permiten alternar entre diferentes fuentes de información.

El diseño de estas pestañas busca mantener una estética técnica y minimalista.

Las pestañas activas se resaltan mediante:

  • cambios de color

  • borde luminoso

  • gradiente azul

Esto facilita identificar rápidamente qué contenido está activo en cada panel.


Paneles redimensionables

Entre los paneles existen separadores llamados resizers. Estos elementos permiten redimensionar los paneles arrastrando con el ratón.

Visualmente se representan mediante barras sutiles con iluminación azul que aparecen entre los paneles.

Cuando el usuario pasa el ratón por encima, el separador cambia ligeramente de color para indicar que es interactivo.


Adaptación a diferentes pantallas

El dashboard también incluye reglas responsive para adaptarse a diferentes tamaños de pantalla.

Por ejemplo, cuando el ancho de la pantalla se reduce, el layout cambia automáticamente y los paneles pasan a organizarse en una sola columna.


Una estética pensada para uso prolongado

Otro objetivo importante del diseño era que la interfaz fuese cómoda de observar durante largos periodos de tiempo.

Por ello se han utilizado:

  • colores oscuros

  • contrastes moderados

  • tipografías claras

  • animaciones muy sutiles


Archivo 03: La lógica del sistema con JavaScript

El comportamiento de LK World Control News se apoya en un único archivo JavaScript:

app.js

Aquí es donde se concentra toda la lógica de la aplicación:

  • carga de la configuración

  • creación dinámica de paneles

  • gestión de pestañas

  • renderizado de contenido

  • actualización de relojes

  • countdowns

  • redimensionado de paneles


Es decir, si el HTML pone la estructura base y el CSS define la apariencia, el JavaScript es lo que realmente da vida al dashboard.


Un sistema guiado por configuración

La aplicación no tiene los paneles definidos manualmente uno a uno en el HTML.

En su lugar, el JavaScript lee la configuración desde el archivo JSON y genera el dashboard en tiempo de ejecución.

Ese proceso comienza con una función muy clara:

async function loadConfig() {
  const response = await fetch("config/config.json");
  return await response.json();
}

Con esto, la aplicación obtiene toda la información necesaria para construir la interfaz. Este enfoque tiene una ventaja enorme: el comportamiento del dashboard depende de la configuración, no de código fijo.


Identificación de paneles

Desde el principio del archivo se define una lista con los paneles del sistema:

const PANEL_IDS = ["topLeft", "bottomLeft", "topRight", "middleRight", "bottomRight"];

Esto permite recorrer el dashboard de forma ordenada y aplicar la lógica de renderizado a cada zona.

En paralelo se mantiene un objeto de estado:

const panelState = {};

Inicialización de la aplicación

Toda la aplicación arranca a través de una función principal:

async function init() {
  appConfig = await loadConfig();
  setupHeader(appConfig);
  populateProfileSelector(appConfig);
  renderProfile(activeProfileKey);
  normalizeColumnWeights("left");
  normalizeColumnWeights("right");
  setGridSizes();
  attachResizeHandlers();
  startClock();
  startWorldClocks();
  startCountdowns();
}

Y esta función se ejecuta cuando el DOM ya está cargado:

document.addEventListener("DOMContentLoaded", init);

Este patrón hace que la aplicación se inicialice de forma ordenada y fácil de entender.


Construcción dinámica de perfiles

Uno de los elementos más interesantes del sistema es que soporta varios perfiles de configuración.

El selector superior se rellena automáticamente recorriendo los perfiles disponibles en el JSON.

Object.entries(config.profiles).forEach(([key, profile]) => {
  const option = document.createElement("option");
  option.value = key;
  option.textContent = profile.label || key;
  select.appendChild(option);
});

Después, cuando el usuario cambia de perfil, se vuelve a renderizar todo el dashboard:

select.addEventListener("change", (event) => {
  activeProfileKey = event.target.value;
  renderProfile(activeProfileKey);
});

Esto permite pasar, por ejemplo, de una vista global a una vista especializada sin recargar la página.


Renderizado de paneles

Cada panel se construye dinámicamente con la función:

renderPanel(panelId, panelConfig)

Esta función:

  • localiza el contenedor HTML correspondiente

  • genera la cabecera del panel

  • crea la barra de pestañas

  • define el contenido inicial

Si un panel no tiene configuración válida, el sistema muestra una tarjeta de fallback para evitar errores visuales. Esto hace que la app sea más robusta frente a configuraciones incompletas.


Gestión de pestañas

Cuando un panel tiene varias pestañas, el JavaScript crea automáticamente un botón para cada una.

const button = document.createElement("button");
button.className = `tab-btn${tab.id === defaultTabId ? " active" : ""}`;
button.textContent = tab.label || tab.id;

Cada botón incorpora su propio evento de clic:

button.addEventListener("click", async () => {
  panelState[panelId].activeTabId = tab.id;
  updateActiveTabButton(panelId);
  await renderTabContent(panelId);
});

Con este sistema, el cambio de contenido dentro de cada panel es inmediato y limpio.


Renderizado según el tipo de contenido

Una de las partes más potentes del archivo es la función que decide cómo pintar cada pestaña según su tipo:

function buildTabHtml(tab) {
  switch (tab.type) {
    case "embed":
    case "youtube":
    case "webcam":
      return buildLazyEmbed(tab);
    case "rss":
      return buildRssList(tab.items || []);
    case "calendar":
      return buildCalendarCard();
    case "links":
      return buildLinksGrid(tab.links || []);
    case "countdowns":
      return buildCountdownsGrid(tab.events || []);
    case "webcamGrid":
      return buildWebcamGrid(tab.cams || []);
    case "html":
      return `<div class="html-card">${tab.html || "<p>Sin contenido HTML definido.</p>"}</div>`;
  }
}

Aquí está una de las claves del diseño:cada pestaña declara un type, y el sistema sabe automáticamente cómo construirla.

Este enfoque hace que el sistema sea muy escalable, porque añadir un nuevo contenido consiste en:

  1. declararlo en el JSON

  2. asignarle un tipo

  3. dejar que el motor lo pinte


Carga diferida de iframes

La app integra muchos contenidos embebidos, como YouTube, mapas o webcams. Para no sobrecargar la página desde el principio, se utiliza un sistema de lazy loading.

Primero se genera un placeholder:

return `
  <div
    class="lazy-embed"
    data-url="${escapeAttribute(tab.url)}"
    data-label="${escapeAttribute(tab.label || tab.title || "Media")}"
    data-type="${escapeAttribute(tab.type || "embed")}"
  >
    <div class="lazy-embed-placeholder">
      <div class="lazy-embed-loader">Loading…</div>
      <div class="lazy-embed-title">${escapeHtml(tab.label || tab.title || "Media")}</div>
    </div>
  </div>
`;

Después, cuando toca hidratar ese bloque, el sistema inserta el iframe real:

const iframe = document.createElement("iframe");
iframe.className = "content-frame";
iframe.src = url;
iframe.loading = "lazy";

Esto mejora bastante la experiencia de uso y evita cargar decenas de iframes simultáneamente al arrancar la aplicación.


Relojes y countdowns

Además del contenido informativo, el sistema incorpora componentes dinámicos de tiempo.

Por ejemplo, el reloj principal se actualiza cada segundo mediante setInterval, al igual que los relojes mundiales y los countdowns.

Esto añade una capa operativa al dashboard y refuerza su estética de centro de control.


Una lógica sencilla, pero muy escalable

La gran virtud de este archivo no es la complejidad, sino la organización.

El sistema está pensado para:

  • leer configuración

  • interpretar tipos de contenido

  • generar interfaz

  • actualizar componentes dinámicos

Y todo ello de una forma relativamente compacta y fácil de mantener.


Archivo 04: El corazón del sistema: el archivo de configuración JSON

Si hay un elemento que define realmente el funcionamiento de LK World Control News, ese es el archivo:

config.json

Este archivo contiene toda la configuración operativa del dashboard.

En lugar de definir los paneles directamente en el HTML o en el JavaScript, el sistema lee este archivo y genera dinámicamente toda la interfaz.

En otras palabras: la aplicación no está programada panel por panel, sino que se construye a partir de configuración.

Este enfoque hace que el sistema sea extremadamente flexible.


Qué define el archivo de configuración

La versión actual del archivo JSON define varios niveles de información:

  • los datos generales de la aplicación

  • el perfil por defecto

  • una librería global de webcams

  • los perfiles disponibles

  • los paneles de cada perfil

  • las pestañas de cada panel

  • los enlaces y recursos que se muestran en pantalla

Es decir, el JSON no solo contiene contenido: contiene también la estructura funcional del dashboard.


Estructura general del archivo JSON

La estructura principal del archivo es bastante clara.

{  "app": { ... },  "webcams": [ ... ],  "profiles": { ... }}

Cada uno de estos bloques cumple una función distinta.


Bloque general de la aplicación

El primer bloque es app, y define la identidad básica del dashboard:

"app": {
  "title": "LK World Control News",
  "subtitle": "Global Real-Time News",
  "statusText": "Online · Perfil cargado correctamente",  "defaultProfile": "global_news"
}

Aquí se establecen elementos como:

  • el título que aparece en la cabecera

  • el subtítulo del sistema

  • el texto de estado

  • el perfil que debe cargarse al arrancar la aplicación

Esto permite modificar el comportamiento inicial del dashboard sin tocar el JavaScript. config


Librería global de webcams

Una de las mejoras más interesantes de esta última versión es la existencia de un bloque independiente llamado:

"webcams": { ... }

Aquí se define una biblioteca reutilizable de cámaras y streams.

Cada webcam tiene su propia ficha de configuración: label, type y url


Esto es importante porque evita repetir URLs dentro de varios paneles y permite reutilizar fácilmente cámaras en distintos grids o perfiles. En otras palabras, el JSON ya no solo define vistas, sino también recursos compartidos reutilizables.


Sistema de perfiles

El siguiente gran bloque es:

"profiles": { ... }

En la versión actual existen dos perfiles principales:

  • global_news

  • iran_focus


Cada perfil representa una forma distinta de organizar la sala de control.

  1. Perfil global_news

Es la vista general del sistema. Está pensada como dashboard global, con cobertura amplia de mapas, medios, canales en directo, mercados y webcams internacionales.


  1. Perfil iran_focus

Es una variante especializada. Mantiene la misma arquitectura general, pero reorganiza el contenido para centrarse en seguimiento regional de Irán, Israel/Palestina, contexto geopolítico, medios regionales y cámaras relacionadas.


Esto demuestra una de las ideas más potentes del proyecto:

la misma aplicación puede comportarse como herramientas distintas simplemente cambiando de perfil.


La estructura de paneles

Dentro de cada perfil aparece el bloque panels, que define la distribución del contenido en las cinco zonas principales del dashboard:

"panels": {
  "topLeft": { ... },
  "bottomLeft": { ... },
  "topRight": { ... },
  "middleRight": { ... },
  "bottomRight": { ... }
}

Estas zonas se corresponden con la estructura visual de la app:

  • arriba izquierda: mapas

  • abajo izquierda: noticias / enlaces

  • arriba derecha: tiempo y contexto operativo

  • centro derecha: canales de noticias en directo

  • abajo derecha: webcams

El valor de este enfoque es que la posición física del panel queda desacoplada del contenido. El JavaScript solo necesita saber qué panel debe renderizar y qué pestañas contiene.


Las pestañas como unidad real de contenido

Dentro de cada panel aparece una lista de tabs.Y aquí es donde realmente se define lo que verá el usuario.

Cada pestaña incluye normalmente:

  • id

  • label

  • type

  • y después los datos concretos según el tipo


Por ejemplo, una pestaña sencilla de mapa puede definirse así:

{  
"id": "maps",
"label": "Maps",
  "type": "embed",
  "url": "https://www.openstreetmap.org/..."
}

Es decir :el tipo de pestaña determina cómo debe interpretarse y renderizarse su contenido.


Tipos de contenido presentes en la versión actual

La versión actual del JSON utiliza varios tipos de contenido reales dentro del dashboard:

  • html para paneles informativos o tarjetas explicativas

  • embed para webs embebidas, mapas o radares

  • youtube para streams en directo

  • links para colecciones de enlaces temáticos

  • countdowns para eventos con cuenta atrás

  • webcamGrid para mosaicos de varias cámaras simultáneas

Esto le da a la aplicación bastante riqueza, porque puede combinar vistas muy distintas dentro de una misma arquitectura.


Cómo ampliar el dashboard y añadir nuevas fuentes

Una de las principales ventajas de la arquitectura de LK World Control News es que el sistema está diseñado para ampliarse fácilmente.

Gracias al enfoque basado en configuración, añadir nuevas fuentes de información no requiere modificar el código principal de la aplicación.

En la mayoría de los casos basta con editar el archivo config.json y añadir una nueva pestaña o un nuevo recurso.

Esto convierte el dashboard en una plataforma flexible que puede adaptarse a diferentes necesidades.


Añadir una nueva pestaña a un panel

El método más sencillo para ampliar el dashboard es añadir una nueva pestaña dentro de uno de los paneles existentes.

Por ejemplo, si queremos añadir un nuevo mapa al panel de mapas, bastaría con añadir un nuevo bloque dentro de la lista de tabs.

{  
  "id": "earthquakes",
  "label": "Earthquakes",
  "type": "embed",
  "url": "https://earthquake.usgs.gov/earthquakes/map/"
}

Una vez añadido al JSON, el sistema lo integrará automáticamente como una nueva pestaña en el panel correspondiente. No es necesario modificar el HTML ni el JavaScript.


Añadir un nuevo canal de televisión

El sistema también permite integrar canales de televisión o streams en directo.

Para ello se utiliza normalmente el tipo:

"type": "youtube"

Por ejemplo:

{
  "id": "cnn",
  "label": "CNN",
  "type": "youtube",
  "url": "https://www.youtube.com/embed/live_stream?channel=UCupvZG-5ko_eiXAupbDfxWw"
}

Esto hará que el dashboard muestre automáticamente el canal dentro de un iframe. Este tipo de contenido es especialmente útil para el panel News Live.


Añadir nuevas webcams

Las webcams pueden añadirse de dos formas:

Como cámara individual

{
  "id": "newyork",
  "label": "New York",
  "type": "webcam",
  "url": "https://www.youtube.com/embed/..."
}

Como grid de webcams

El sistema también permite crear mosaicos de cámaras mediante el tipo:

"type": "webcamGrid"

En este caso se puede utilizar la librería global de webcams definida en el JSON.

Esto permite reutilizar fácilmente cámaras ya configuradas.


Crear un nuevo perfil del dashboard

Una de las ampliaciones más interesantes es crear un perfil completamente nuevo.

Por ejemplo, podríamos crear un perfil orientado a seguimiento económico o financiero.

La estructura sería algo como:

"finance_monitor": {  "label": "Finance Monitor",  "panels": { ... }}

Este perfil podría incluir:

  • mapas de actividad económica

  • paneles de mercados

  • noticias financieras

  • cámaras de bolsas internacionales

Al seleccionar ese perfil desde el menú superior, el dashboard se reorganizaría automáticamente.


Añadir nuevos tipos de contenido

Si se desea ampliar aún más el sistema, también es posible crear nuevos tipos de contenido en el archivo JavaScript.

Por ejemplo, en el futuro podrían añadirse tipos como:

  • stocks

  • crypto

  • weather

  • alerts

Bastaría con añadir un nuevo caso dentro del renderizador de pestañas.


De dashboard personal a herramienta operativa

Aunque el proyecto nace como una herramienta personal de monitorización de noticias, su arquitectura permite convertirlo en algo mucho más amplio.

Por ejemplo:

  • panel de seguimiento geopolítico

  • dashboard de operaciones internacionales

  • monitorización de eventos globales

  • sala de control de proyectos internacionales

Con pequeños ajustes en la configuración, el mismo sistema puede adaptarse a diferentes contextos.


Conclusiones y descarga del proyecto

El desarrollo de LK World Control News demuestra que es posible construir herramientas útiles y potentes utilizando tecnologías web muy sencillas.

La aplicación está basada únicamente en: HTML, CSS, JavaScript y JSON- Sin frameworks complejos, sin backend y sin dependencias externas.

Sin embargo, gracias a una arquitectura bien planteada, el resultado es un sistema capaz de integrar múltiples fuentes de información y presentarlas de forma organizada dentro de un único panel.


Una pequeña sala de control personal

El concepto detrás de esta aplicación es bastante simple:

crear una pequeña sala de control informativa que permita observar lo que está ocurriendo en el mundo desde una única pantalla.

En lugar de abrir múltiples páginas web, el dashboard permite combinar en tiempo real:

  • mapas globales

  • titulares de noticias

  • canales de televisión en directo

  • webcams internacionales

  • relojes y eventos

  • enlaces a fuentes relevantes

Esta forma de consumir información facilita tener una visión más amplia del contexto global.


Desarrollo asistido con inteligencia artificial

Este proyecto también es un buen ejemplo de cómo la inteligencia artificial puede utilizarse como herramienta de ingeniería.

Durante el desarrollo de esta aplicación se ha utilizado ChatGPT como asistente técnico para:

  • diseñar la arquitectura del sistema

  • generar partes del código

  • estructurar el archivo de configuración

  • optimizar la interfaz

  • documentar el proyecto

En lugar de sustituir al desarrollador, la IA actúa como un acelerador de desarrollo, permitiendo construir herramientas funcionales de forma mucho más rápida.


Próximos pasos

En el futuro es posible ampliar el proyecto con nuevas funcionalidades, como por ejemplo:

  • integración con APIs de noticias

  • alertas automáticas

  • datos de mercados en tiempo real

  • seguimiento de vuelos o tráfico marítimo

  • integración con herramientas de automatización como N8N

Este tipo de evoluciones convertirían el dashboard en una plataforma todavía más potente para monitorización global.


Descargar el proyecto

Online: Ver la aplicación en funcionamiento

Puedes ver la aplicación funcionando online en:


Si quieres probar LK World Control News o utilizarlo como base para tus propios dashboards, puedes descargar el proyecto completo.


Para facilitar las pruebas hemos preparado dos versiones diferentes del proyecto.

Opción 1 — Versión estándar del proyecto

Esta versión contiene la estructura original del proyecto con los cuatro archivos principales:

LKWorldControlNews/
│
├── index.html
├── styles.css
├── app.js
└── config.json

En esta versión el archivo de configuración se carga mediante JavaScript utilizando fetch(). Por este motivo es necesario ejecutar la aplicación desde un servidor web.

Por ejemplo:

  • Apache

  • Nginx

  • un servidor local con Python

  • Live Server de VSCode

  • cualquier hosting web

Esto se debe a que los navegadores modernos bloquean las peticiones fetch() cuando se abre un archivo directamente desde el sistema de archivos (file://). Una vez servido desde un webserver, la aplicación funciona normalmente.


📦 Descargar proyecto (versión estándar)



Opción 2 — Versión standalone (sin servidor)

También hemos preparado una segunda versión pensada para probar la aplicación rápidamente sin necesidad de servidor web.

En esta versión el contenido del archivo:

config.json

se ha integrado directamente dentro del HTML.

De esta forma el JavaScript no necesita realizar ninguna petición fetch() y la aplicación puede ejecutarse simplemente abriendo el archivo:

index.html

directamente en el navegador.

Esta versión es especialmente útil para:

  • pruebas rápidas

  • demostraciones

  • compartir el proyecto fácilmente

  • ejecutar el dashboard sin infraestructura adicional


📦 Descargar proyecto (versión standalone)



Diferencias entre ambas versiones

Versión

Uso recomendado

Versión estándar

desarrollo y ampliación del proyecto

Versión standalone

pruebas rápidas sin servidor

La versión estándar es la más adecuada si se quiere modificar el sistema o ampliar el dashboard.

La versión standalone, en cambio, es perfecta para explorar la aplicación o utilizarla como demo.



Un pequeño proyecto… con muchas posibilidades

A veces los proyectos más interesantes no son los más grandes, sino aquellos que combinan ideas sencillas de forma inteligente.

Con unas pocas tecnologías web y una arquitectura flexible es posible construir herramientas muy útiles.

Y en el contexto actual, con el apoyo de la inteligencia artificial como asistente de desarrollo, este tipo de proyectos se vuelven cada vez más accesibles.


Comentarios


© 2025 by Lozkorp                                                         

bottom of page