*"A continuación, adjunto el Documento de Requerimientos de Software (DRS v1.1) para el desarrollo del 'Diccionario de Inteligencia Artificial'. Por favor, asegúrese de seguir estas directrices clave durante la implementación:*
1. **Alcance y Calidad**:
- Implemente **exclusivamente** lo especificado en el DRS, priorizando usabilidad, accesibilidad (WCAG 2.1 AA) y rendimiento optimizado.
- Código modular, en inglés, con comentarios para funciones críticas (búsqueda, caché, carga de videos).
2. **Tecnologías**:
- Frontend: **Vanilla JS** (sin frameworks) + **Tailwind CSS** (vía CDN).
- Offline: **Service Worker** para caché completo de `data.json` y assets.
- Videos: Use `lite-youtube-embed` (carga bajo demanda en modal).
3. **Validación**:
- Cumpla los **Criterios de Aceptación** (Sección 9 del DRS).
- Testee en móviles (3G simulada) y valide contrastes de color.
4. **Entregables**:
- Código fuente estructurado (HTML/JS/CSS separados).
- README.md con instrucciones de despliegue.
*Reporte cualquier ambigüedad en el DRS antes de comenzar.*
## **Documento de Requerimientos de Software (DRS)**
**Diccionario de Inteligencia Artificial**
**Versión 1.1** | **Fecha: [Fecha Actual]**
---
### **1. Introducción y Propósito**
#### **1.1 Objetivo**
Desarrollar un diccionario web público sobre Inteligencia Artificial y áreas relacionadas, dirigido a usuarios de 18 a 65 años con diversos niveles educativos.
#### **1.2 Alcance**
- Aplicación web estática (HTML, Vanilla JS) que carga datos desde `data.json`.
- Funcionalidades clave:
- Buscador dinámico con filtros (término, sinónimos, etiquetas).
- Vista de tarjetas y modal de detalle con carga eficiente de recursos.
- Sistema de historial y caché offline.
#### **1.3 Fuera del Alcance (v1.1)**
- Roles de usuario o edición en línea de datos.
- Exportación de datos o integración con APIs externas (excepto YouTube).
---
### **2. Requisitos Funcionales (FR)**
#### **2.1 Gestión de Datos**
- **FR1**: Carga inicial de datos desde `data.json` con caché en `localStorage` y Service Worker para soporte offline completo.
- **FR2**: Botón para recargar datos y actualizar caché manualmente.
#### **2.2 Búsqueda y Filtrado**
- **FR3**: Buscador con filtrado en tiempo real (prioridad: término > sinónimos > etiquetas).
- **FR4**: Filtro desplegable por categorías dinámicas.
- **FR5**: Filtro por nivel (1 a 5, representado con estrellas: ⭐ a ⭐⭐⭐⭐⭐).
#### **2.3 Interfaz de Usuario**
- **FR6**: Rejilla responsive de tarjetas (3/1 columnas) con:
- Término, sinónimos, categorías y nivel (visualizado con estrellas).
- Color de fondo asignado desde una paleta predefinida de 12 colores accesibles (WCAG AA).
- Botón para copiar término.
- **FR7**: Modal de detalle que:
- Carga contenido al abrir (incluyendo iframes de YouTube) y libera recursos al cerrar.
- Muestra definición, ejemplos, recomendaciones y videos embebidos.
#### **2.4 Experiencia de Usuario**
- **FR8**: Tema light/dark con toggle y persistencia en `localStorage`.
- **FR9**: Historial de últimos 10 términos visitados (sin timestamps).
---
### **3. Requisitos No Funcionales (NFR)**
#### **3.1 Rendimiento**
- **NFR1**: Tiempo de carga inicial < 1s (datos cacheados tras primera visita).
- **NFR2**: Lazy loading para tarjetas (12 por carga).
#### **3.2 Seguridad**
- **NFR3**: Sanitización de entradas en buscador (protección XSS).
#### **3.3 Usabilidad y Accesibilidad**
- **NFR4**: Cumplimiento WCAG 2.1 AA (contraste, ARIA labels).
- **NFR5**: Diseño responsive (PC, móvil, tablet).
#### **3.4 Mantenibilidad**
- **NFR6**: Código modular en inglés con comentarios.
---
### **4. Modelo de Datos**
#### **Estructura de `data.json`**
```json
[
{
"term": "Machine Learning",
"synonyms": ["Aprendizaje Automático"],
"definition": "Rama de la IA que...",
"examples": ["Recomendaciones en Netflix"],
"level": 3,
"categories": ["IA"],
"tags": ["Python"],
"recommendations": "Curso de Andrew Ng..."
}
]
Nota: level
ahora usa valores del 1 al 5.
#E3F2FD
, #F3E5F5
) para tarjetas. slate-50
(fondo), slate-800
(texto). gray-900
(fondo), gray-100
(texto). lite-youtube-embed
(carga eficiente de videos). localStorage
. data.json
se actualiza manualmente vía FTP/Git. Fin del Documento
## La respuesta es una confirmación en inglés...
Based on the provided **Software Requirements Document (DRS v1.1)** for the *"AI Dictionary"*, I'll outline a structured implementation plan while highlighting key technical considerations:
---
### **Implementation Roadmap**
#### **1. Core Architecture**
- **Static Web App**: Single HTML (`index.html`) with modular JS (`app.js`, `sw.js`) and Tailwind CSS (CDN).
- **Data Flow**:
```mermaid
graph LR
A[data.json] --> B[Fetch/Load]
B --> C[localStorage Cache]
C --> D[Service Worker Pre-cache]
D --> E[UI Rendering]
// app.js
const CORE = {
init: () => {
this.loadData().then(data => this.renderGrid(data));
this.setupServiceWorker();
this.bindSearch(); // Debounced input handler
},
loadData: () => {
// Priority: localStorage > Network > Fallback
}
};
// sw.js (Service Worker)
const CACHE_NAME = 'ai-dict-v1';
self.addEventListener('install', (e) => {
e.waitUntil(caches.open(CACHE_NAME).then(cache => cache.addAll(['/data.json'])));
});
Search System:
<input>
with input
event listener + debounce (300ms)const filtered = data.filter(item =>
item.term.toLowerCase().includes(query) ||
item.synonyms.some(s => s.toLowerCase().includes(query)) ||
item.tags.some(t => t.toLowerCase().includes(query))
);
Card Grid:
Tailwind's grid-cols-1 md:grid-cols-3
const colors = ['bg-[#E3F2FD]', 'bg-[#F3E5F5]', ...]; // 12 WCAG-compliant colors
const cardColor = colors[Math.abs(hashCode(term)) % 12];
YouTube Modal:
<div x-data="{ open: false }">
<button @click="open = true">View Video</button>
<template x-teleport="body">
<lite-youtube videoid="dQw4w9WgXcQ" @close="open = false"></lite-youtube>
</template>
</div>
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) loadMoreCards();
});
});
data.json
, Cache-first for static assets.tailwindcss/colors
with WCAG AA ratios.<button aria-label="Toggle dark mode">...</button>
Functional:
Performance:
Accessibility:
/ai-dictionary/
├── index.html # Alpine.js directives + main layout
├── app.js # Core logic (DRS-compliant)
├── sw.js # Service Worker (Cache API)
├── data/ # Optional for local dev
│ └── data.json # Sample dataset
├── styles/ # Additional CSS if needed
└── README.md # Deployment: "Just upload to any static host"
Would you like me to elaborate on any specific component (e.g., Service Worker caching strategy or the YouTube lazy-loading implementation)?