Skip to content

Funcionamiento de la Web

Fuente de Datos (JSON)

La aplicación utiliza archivos JSON para almacenar los recursos, que incluyen enlaces a documentación, APIs, herramientas y otros recursos útiles. Estos archivos están estructurados en categorías y subcategorías, y cada recurso cuenta con propiedades como:

  • nombre
  • descripción
  • URL
  • imagen

Ejemplo de Archivo JSON

{
"macroCategoria": "Recursos API",
"subcategorias": [
{
"subcategoria": "APIs Públicas",
"links": [
{
"nombre": "API de Ejemplo",
"url": "https://api.ejemplo.com",
"descripcion": "Una API de ejemplo para desarrolladores.",
"imagen": "https://api.apiflash.com/v1/urltoimage?access_key=Mykey&wait_until=page_loaded&url=https://api.ejemplo.com"
}
]
}
]
}

Componente MacroCategory (section.astro)

Este componente recibe los datos del JSON y organiza la información. Recorre cada macro categoría y, dentro de ellas, cada subcategoría para mapear y renderizar los recursos mediante la utilización del componente Card.

Ejemplo de Código en section.astro

---
import StarlightPage from '@astrojs/starlight/components/StarlightPage.astro';
import Card from '../components/Card.astro';
interface Link {
nombre: string;
url: string;
descripcion: string;
imagen: string;
}
interface Subcategoria {
subcategoria: string;
links: Link[];
}
interface MacroCategoryData {
macroCategoria: string;
subcategorias: Subcategoria[];
}
interface Props {
data: MacroCategoryData;
}
const { data } = Astro.props as Props;
const macroCategoria = data.macroCategoria;
const subcategorias = data.subcategorias;
---
<StarlightPage frontmatter={{ title: macroCategoria }}>
<h1>{macroCategoria}</h1>
{subcategorias.map((subcat) => (
<>
<h2>{subcat.subcategoria}</h2>
<div class="container flex flex-wrap gap-4">
{subcat.links.map((link) => (
<Card
nombre={link.nombre}
image={link.imagen}
description={link.descripcion}
link={link.url}
/>
))}
</div>
</>
))}
</StarlightPage>

Componente Card (Card.astro)

Cada recurso se muestra en forma de tarjeta interactiva. El componente Card se encarga de presentar la imagen, el nombre, la descripción y un enlace que redirige al usuario al recurso correspondiente. Además, incorpora efectos de hover y escalado para mejorar la experiencia visual.

Ejemplo de Código en Card.astro

---
export interface Props {
image: string;
nombre: string;
description: string;
link: string;
}
const { image, description, link, nombre } = Astro.props;
---
<div class="bg-[var(--sl-color-background)] border border-[var(--sl-color-accent-low)] rounded-2xl shadow-lg p-4 max-w-xs text-center transform transition-all hover:scale-105 hover:shadow-xl">
<img src={image} alt="Imagen de {nombre}" class="w-full h-40 object-cover rounded-t-lg" />
<div class="p-4">
<h3 class="font-bold text-lg">{nombre}</h3>
<p class="text-[var(--sl-color-text)] mb-3">{description}</p>
<a href={link} target="_blank" class="inline-block bg-[var(--sl-color-accent)] text-[var(--sl-color-background)] font-semibold px-4 py-2 rounded-lg hover:bg-[var(--sl-color-accent-high)] transition">
Ver más
</a>
</div>
</div>

StarlightPage Component

Para mantener una estructura y un diseño coherentes en toda la documentación, se utiliza el componente StarlightPage. Este envuelve el contenido principal, heredando los estilos y layouts predefinidos de la plantilla Starlight, garantizando una apariencia uniforme en todas las páginas.

Ejemplo de Uso

<StarlightPage frontmatter={{ title: 'Título de la Página' }}>
<!-- Contenido principal de la página -->
</StarlightPage>

Actualización Dinámica

Cuando se modifican o agregan recursos en los archivos JSON, la web se actualiza automáticamente. Esto se debe a que el componente MacroCategory vuelve a mapear los datos y renderiza las tarjetas correspondientes sin necesidad de realizar cambios adicionales en el código.

Ejemplo de Integración

---
import MacroCategory from '../components/section.astro';
import data from '../info/APIS.json';
---
<MacroCategory data={data} />

Cada vez que se actualiza el archivo JSON (APIS.json), el componente MacroCategory procesa los nuevos datos y renderiza las tarjetas actualizadas.

Integración y Escalabilidad

Gracias a la utilización de Astro, es posible combinar contenido en Markdown/MDX con componentes interactivos. Esto permite que la documentación sea fácil de mantener y escalar, facilitando la adición de nuevas secciones o funcionalidades conforme la colección de recursos crece.

Ejemplo de Combinar Markdown con Componentes

---
import MacroCategory from '../components/section.astro';
import data from '../info/APIS.json';
---
# Bienvenido a la Biblioteca de Links
Esta es la documentación de la web, donde se centralizan los recursos para desarrolladores.
<MacroCategory data={data} />

Este ejemplo demuestra cómo se puede integrar el contenido escrito en Markdown con componentes interactivos para crear una documentación dinámica y actualizable.