Se desarrollará una aplicación web interactiva para generar paletas de colores armónicas basadas en teoría del color, con funcionalidades clave:
Área | Tecnología | Justificación |
---|---|---|
Color | Chroma.js | Mejor soporte para espacios de color y conversiones |
Selector | Pickr | Ligero (15KB), themable, sin dependencias |
Animaciones | GSAP | Rendimiento superior a CSS para animaciones complejas |
Estilos | Tailwind CSS | Rapid development + PostCSS para optimización |
Bundling | Vite | HMR rápido y output optimizado |
"dependencies": {
"chroma-js": "^2.4.2",
"@simonwep/pickr": "^1.8.2",
"gsap": "^3.11.4"
}
src/
├── assets/ # SVGs, JSON de colores
├── css/
│ └── main.scss # Estilos base (compilado a CSS)
├── js/
│ ├── core/ # Lógica de negocio
│ │ ├── color.js # Wrapper Chroma.js
│ │ ├── harmonies.js # Generadores de esquemas
│ │ └── storage.js # localStorage manager
│ ├── ui/ # Componentes visuales
│ │ ├── picker.js # Integración Pickr
│ │ ├── cards.js # Tarjetas de color
│ │ └── exporter.js # Lógica de exportación
│ └── app.js # Punto de entrada
└── index.html # Estructura base
graph TD
A[Entrada de Color] --> B{Validación}
B -->|Hex/Nombre| C[Conversión Chroma]
C --> D[Generar Armonías]
D --> E[Renderizar Paletas]
E --> F[Interacción Usuario]
F -->|Favorito| G[localStorage]
F -->|Exportar| H[Generar Archivo]
export function generateTriad(base) {
return [
base,
base.set('hsl.h', (base.hsl()[0] + 120) % 360),
base.set('hsl.h', (base.hsl()[0] + 240) % 360)
];
}
const pickr = Pickr.create({
el: '.color-picker',
default: '#FF5733',
components: {
preview: true,
opacity: false,
hue: true
}
});
<div class="grid grid-cols-2 md:grid-cols-4 gap-4">
<!-- Dynamic cards -->
</div>
export const saveFavorite = (hex) => {
const favs = JSON.parse(localStorage.getItem('favorites') || [];
if (!favs.includes(hex)) {
localStorage.setItem('favorites', JSON.stringify([...favs, hex]));
}
};
function exportCSS(colors) {
return `:root {\n${
colors.map((c,i) => ` --color-${i+1}: ${c.hex()};`).join('\n')
}\n}`;
}
Riesgo | Probabilidad | Impacto | Mitigación |
---|---|---|---|
Rendimiento en móviles | Media | Alto | Test temprano en dispositivos limitados |
Inconsistencias de color | Baja | Crítico | Validar con Chroma.js todos los inputs |
localStorage limitado | Media | Medio | Notificar al usuario al alcanzar límite |
Unit Tests (Jest)
Pruebas UI
Pruebas de Rendimiento
Fase | Tareas | Duración | Total |
---|---|---|---|
Setup | Config inicial, dependencias | 1 día | 1 |
Core | Lógica de color, generadores | 2 días | 3 |
UI | Componentes principales | 3 días | 6 |
Extras | Exportación, favoritos | 2 días | 8 |
Ajustes | Testing, optimización | 2 días | 10 |
Total estimado: 10 días laborales
Este plan cubre todos los FR/NFR del documento, priorizando una implementación robusta pero ágil, con especial atención a la experiencia de usuario y rendimiento cross-device.
Por favor, genera la Aplicación completa.