## đź§ FilosofĂa de Desarrollo
En EgoCX, el cĂłdigo no es solo cĂłdigo. Es la estructura invisible que sostiene la identidad digital de marcas y profesionales. Cada lĂnea debe ser **clara, mantenible y creativa**.
**Nuestros principios son:**
- **KISS** — Keep It Simple, Stupid. La solución más simple es casi siempre la mejor.
- **DRY** — Don't Repeat Yourself. La reutilización es sagrada.
- **YAGNI** — You Aren't Gonna Need It. No construyas para el futuro; construye para ahora.
- **Disrupción con propósito** — Innovar no es hacer cosas raras. Es hacer lo que funciona de una manera que nadie más está haciendo.
---
## đź“‹ Reglas de Oro del Desarrollo
### 1. El código se lee más de lo que se escribe.
Escribe código como si la persona que lo mantendrá fuera un colega recién llegado. O tu yo de dentro de 6 meses.
âś… *"Nombres claros y consistentes."*
❌ *"Abreviaturas crĂpticas y lĂłgica enrevesada."*
### 2. Cada componente tiene una sola responsabilidad.
Un archivo, una funciĂłn, una tarea. Separar para dominar.
✅ *"button.js → solo botones."*
❌ *"ui-components.js → botones, modales, tooltips, y formularios."*
### 3. La performance no es un lujo; es un requisito.
El código debe ser rápido por defecto. No se optimiza al final; se optimiza desde el principio.
âś… *"Lazy loading por defecto."*
❌ *"Cargar todo al inicio y arreglarlo después."*
### 4. Documenta mientras escribes.
El cĂłdigo que necesita explicaciĂłn deberĂa ser mejor cĂłdigo. Pero si hay que explicarlo, hazlo.
âś… *"// Este hook maneja la autenticaciĂłn con OAuth2"*
❌ *"// Hace cosas"*
### 5. El CSS no es un accidente.
Usa clases semánticas. No uses `!important`. Usa variables CSS. Que el diseño sea parte del sistema.
âś… *"class="button-primary""*
❌ *"style="color: red; font-size: 16px;""*
---
## 🛠️ Estructura de Archivos y Proyectos
```
proyecto/
├── src/
│ ├── components/ # Componentes reutilizables
│ │ ├── Button/
│ │ │ ├── Button.jsx
│ │ │ ├── Button.css
│ │ │ └── Button.test.js
│ │ └── Card/
│ │ ├── Card.jsx
│ │ ├── Card.css
│ │ └── Card.test.js
│ ├── pages/ # Páginas especĂficas
│ │ ├── Home/
│ │ ├── Product/
│ │ └── About/
│ ├── hooks/ # Hooks personalizados
│ │ ├── useAuth.js
│ │ └── useTheme.js
│ ├── utils/ # Funciones de utilidad
│ │ ├── formatDate.js
│ │ └── validateEmail.js
│ ├── styles/ # Estilos globales y variables
│ │ ├── variables.css
│ │ └── global.css
│ └── config/ # Configuraciones
│ └── constants.js
├── public/ # Archivos estáticos
│ ├── images/
│ └── fonts/
├── tests/ # Tests de integración
├── README.md
├── LICENSE
└── package.json
```
---
## 🎨 GuĂa de Estilo de CĂłdigo
### JavaScript / TypeScript
âś… **Nombres de variables en camelCase**
```javascript
const userName = 'Carlos';
const isAuthenticated = true;
```
âś… **Nombres de funciones verbos + sustantivos**
```javascript
function getUserData() { ... }
function validateEmail() { ... }
```
âś… **Componentes en PascalCase**
```javascript
function ButtonPrimary({ children, onClick }) { ... }
function CardFeature({ title, description }) { ... }
```
âś… **Constantes en UPPER_SNAKE_CASE**
```javascript
const API_URL = 'https://api.ego.cx/v1';
const MAX_RETRIES = 3;
```
âś… **Usa arrow functions para funciones puras**
```javascript
const sum = (a, b) => a + b;
```
âś… **Usa async/await para promesas**
```javascript
const fetchData = async (url) => {
const response = await fetch(url);
return response.json();
};
```
### CSS / SCSS
âś… **Variables CSS primero**
```css
:root {
--color-primary: #DC0000;
--spacing-base: 4px;
--font-family-base: 'Inter', sans-serif;
}
```
✅ **Clases semánticas y utilitarias**
```css
.button-primary {
background: var(--color-primary);
padding: 12px 24px;
border-radius: 4px;
}
```
âś… **Usa el sistema de spacing base**
```css
.card {
padding: calc(var(--spacing-base) * 4); /* 16px */
margin-bottom: calc(var(--spacing-base) * 6); /* 24px */
}
```
---
## 🤖 IA y Copilotos: Cómo Usarlos Bien
### Principios para ProgramaciĂłn con IA
1. **Contexto es poder.** Dale al copiloto el contexto completo: el archivo, las dependencias, el propĂłsito.
2. **Revisa antes de confiar.** La IA escribe código rápido; tú sabes si es correcto.
3. **Pide explicaciones.** No solo código; pide que te explique *por qué* eligió esa solución.
4. **Itera.** El primer intento rara vez es el mejor. Pide alternativas.
5. **MantĂ©n la consistencia.** La IA puede saltar de un estilo a otro. GuĂala con ejemplos.
### Ejemplos de Prompts para Copiloto
#### đź§© Generar un Componente
```
Crea un componente Button en React con TypeScript.
Debe tener:
- Propiedades: variant (primary | secondary), size (sm | md | lg), onClick, children
- Usar CSS Modules para estilos
- Incluir comentarios para cada prop
- Seguir el sistema de diseño de EgoCX (colores #DC0000, #181716, #FCFCFC)
```
#### 🛠️ Optimizar una Función
```
Esta funciĂłn procesa una lista de usuarios:
[insertar cĂłdigo]
OptimĂzala para:
1. Reducir la complejidad O(n²) a O(n)
2. Usar métodos de array modernos (map, filter, reduce)
3. Mantener la legibilidad
4. Agregar comentarios sobre la optimizaciĂłn
```
#### đź“„ Refactorizar CSS
```
Refactoriza este CSS para usar variables CSS y un sistema de spacing de 4px:
[insertar cĂłdigo]
Debe mantener exactamente el mismo aspecto visual.
```
---
## đź§Ş Testing y Calidad
### Principios
1. **Escribe tests antes o durante, no después.**
2. **Cada componente tiene su test.**
3. **Los tests deben ser rápidos y deterministas.**
4. **Mockea lo externo, prueba lo interno.**
### Estructura de Tests
```javascript
// Button.test.js
import { render, fireEvent } from '@testing-library/react';
import { ButtonPrimary } from './Button';
describe('ButtonPrimary', () => {
it('renderiza con el texto correcto', () => {
const { getByText } = render(Click me);
expect(getByText('Click me')).toBeInTheDocument();
});
it('ejecuta onClick cuando se hace clic', () => {
const handleClick = jest.fn();
const { getByText } = render(
Click me
);
fireEvent.click(getByText('Click me'));
expect(handleClick).toHaveBeenCalled();
});
});
```
---
## 🚀 Despliegue y Monitoreo
### Checklist de Despliegue
- [ ] Todos los tests pasan
- [ ] Linter sin errores
- [ ] Bundle optimizado (code splitting, tree shaking)
- [ ] Assets comprimidos (WebP, AVIF, minificados)
- [ ] Variables de entorno configuradas
- [ ] Logs de errores configurados
- [ ] Métricas de performance (Core Web Vitals)
### Monitoreo
- **Errores:** Sentry / LogRocket
- **Performance:** Lighthouse / Web Vitals
- **Analytics:** Google Analytics / Plausible / Umami
---
## 📚 Recursos y Referencias
- [React Documentation](https://react.dev)
- [TypeScript Handbook](https://www.typescriptlang.org/docs/)
- [CSS Variables Guide](https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties)
- [KISS Principle](https://en.wikipedia.org/wiki/KISS_principle)
- [DRY Principle](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself)
---
[Error: Referencia no disponible] [license(1234)]