← Volver a Proyectos

Ixiptla - Exposición de Réplicas Arqueológicas

Ixiptla - Exposición de Réplicas Arqueológicas

Descripción

Ixiptla es una aplicación web moderna que presenta una colección curada de reproducciones arqueológicas meticulosamente elaboradas. Construida con Astro.js y React, esta plataforma combina rendimiento con una impresionante presentación visual para dar vida a réplicas antiguas en el ámbito digital. El proyecto incluye modelos 3D interactivos utilizando Three.js, diseño completamente responsivo y soporte integral de internacionalización en inglés y español.

Desafíos

Soluciones

Implementación de Modelos 3D

Utilicé React Three Fiber y Drei para crear un componente de escena 3D abstracto que maneja la carga de modelos, controles de cámara e iluminación. La implementación incluye:

// El componente Scene3D maneja toda la configuración de Three.js
export function Scene3D({ modelPath = '/images/models/colibri.glb' }: Scene3DProps) {
  const [autoRotate, setAutoRotate] = useState(false);
  const controlsRef = useRef<OrbitControlsImpl>(null);
  
  // Sistema de eventos personalizados para controles externos
  useEffect(() => {
    const handleResetCamera = () => {
      if (controlsRef.current) {
        controlsRef.current.reset();
      }
    };

    window.addEventListener('reset-camera', handleResetCamera);
    // Manejadores de eventos adicionales...
    
    return () => {
      window.removeEventListener('reset-camera', handleResetCamera);
      // Limpieza...
    };
  }, []);
  
  // Configuración de Canvas, iluminación, controles...
}

Arquitectura de Internacionalización

Diseñé un sistema i18n robusto utilizando:

  1. Detección de idioma basada en la configuración del navegador
  2. Enrutamiento basado en idioma en URL (/en/, /es/)
  3. Archivos de traducción basados en JSON con claves anidadas
  4. Funciones de utilidad de traducción personalizadas
// Función de utilidad de traducción
export function useTranslations(lang: "en" | "es") {
  const translations = lang === "es" ? es : en;

  return function t(key: string) {
    const keys = key.split(".");
    let value: any = translations;
    for (const k of keys) {
      value = value[k];
      if (value === undefined) return key;
    }

    return value as string;
  };
}

Esquema y Organización de Contenido

Implementé un esquema de contenido fuertemente tipado utilizando Zod para validación, asegurando la integridad de datos en todas las réplicas:

const replicaSchema = z.object({
  id: z.string(),
  title: z.string(),
  culture: z.string(),
  period: z.string(),
  image: z.string(),
  description: z.string(),
  museum: z.string(),
  location: z.string(),
  dimensions: z.string().optional(),
  material: z.string().optional(),
  technique: z.string().optional(),
  has3DModel: z.boolean().optional(),
  slug: z.string(),
});

Este enfoque refuerza la consistencia del contenido a la vez que proporciona flexibilidad para atributos opcionales.

Optimizaciones de Rendimiento

Para asegurar un rendimiento óptimo manteniendo la calidad visual:

  1. Implementé carga de imágenes responsiva con dimensiones adecuadas y formato WebP
  2. Utilicé carga diferida para contenido fuera de pantalla
  3. Optimicé la carga de modelos 3D con suspense y fallbacks
  4. Aproveché la hidratación parcial de Astro para JavaScript mínimo

Resultados

Visuales

Ixiptla - Exposición de Réplicas Arqueológicas - View 1
Ixiptla - Exposición de Réplicas Arqueológicas - View 2
Ixiptla - Exposición de Réplicas Arqueológicas - View 3
Ixiptla - Exposición de Réplicas Arqueológicas - View 4
Ixiptla - Exposición de Réplicas Arqueológicas - View 5
Ixiptla - Exposición de Réplicas Arqueológicas - View 6
Ixiptla - Exposición de Réplicas Arqueológicas - View 7
Ixiptla - Exposición de Réplicas Arqueológicas - View 8
Ixiptla - Exposición de Réplicas Arqueológicas - View 9
Ixiptla - Exposición de Réplicas Arqueológicas - View 10
Ixiptla - Exposición de Réplicas Arqueológicas - View 11

Enlaces