Repository navigation
Expand file tree
/
Copy pathapp.js
More file actions
274 lines (242 loc) 路 13.6 KB
/
Copy pathapp.js
File metadata and controls
274 lines (242 loc) 路 13.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
/**
* CYBER-ZEN ENGINE V4.2 - DEBUGGED
*/
const canvas = document.getElementById('canvas-bg');
const ctx = canvas.getContext('2d');
let particles = [];
let mouse = { x: null, y: null };
// 1. MOTOR DE PART脥CULAS
function initCanvas() {
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
}
class Particle {
constructor() { this.reset(); }
reset() {
this.x = Math.random() * canvas.width;
this.y = Math.random() * canvas.height;
this.size = Math.random() * 2 + 0.5;
this.vx = (Math.random() - 0.5) * 0.5;
this.vy = (Math.random() - 0.5) * 0.5;
this.opacity = Math.random() * 0.5 + 0.1;
}
update() {
this.x += this.vx;
this.y += this.vy;
if (this.x < 0 || this.x > canvas.width) this.vx *= -1;
if (this.y < 0 || this.y > canvas.height) this.vy *= -1;
}
draw() {
ctx.fillStyle = `rgba(0, 255, 204, ${this.opacity})`;
ctx.beginPath();
ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);
ctx.fill();
}
}
function createParticles() {
particles = [];
const count = Math.floor((canvas.width * canvas.height) / 12000);
for (let i = 0; i < count; i++) particles.push(new Particle());
}
function animate() {
ctx.fillStyle = "rgba(2, 8, 8, 0.2)";
ctx.fillRect(0, 0, canvas.width, canvas.height);
particles.forEach(p => { p.update(); p.draw(); });
requestAnimationFrame(animate);
}
// 2. DATA DE PROYECTOS
const projectsData = {
// Info para el bot贸n de tu perfil (PITCH PERSONAL)
'pitch-principal': {
title: "PITCH_PERSONAL: KALED SML",
videoID: "v5YESJcaK84",
github: "https://github.com/KaledSML",
badges: ["ING_INFO", "CYBER_SEC", "I+D+i"],
description: "Bienvenido a mi n煤cleo de datos. Soy Ingeniera Inform谩tica con distinci贸n un谩nime, enfocada en crear soluciones tecnol贸gicas con prop贸sito humano y seguridad robusta."
},
// Info para Pudin
'pudin': {
title: "PUDIN: THE GHOST CAT RPA",
videoID: "qB2oQJQuG6k",
github: "https://github.com/KaledSML/Pudin-Ghost-Cat-RPA",
badges: ["RPA", "PYTHON", "FSM", "WIN32_API"],
description: "<b>Agente Aut贸nomo de Escritorio.</b> Pudin monitorea tu actividad en Windows mediante FSM. Si trabajas demasiado, ejecuta maldades programadas para obligarte a descansar."
},
// NUEVO PROYECTO: NIST SENTINEL
'nist': {
title: "NIST SENTINEL: CSF 2.0 ORCHESTRATOR",
videoID: "MbYpAKBpVT4",
github: "https://github.com/KaledSML/nist-sentinel",
badges: ["CIBERSEGURIDAD", "AUDIT_IT", "ZERO_TRUST", "AIR_GAPPED"],
description: `
<b>Orquestador de Cumplimiento Normativo.</b> Herramienta dise帽ada para simplificar auditor铆as bajo el marco NIST CSF 2.0. <br><br>
Implementa una arquitectura <b>Serverless de Conocimiento Cero (Zero-Knowledge)</b>, asegurando que los datos sensibles de la auditor铆a nunca abandonen el entorno local del auditor (LocalStorage). <br><br>
Incluye un sistema visual Kanban para la gesti贸n de las 6 funciones del Core: Govern, Identify, Protect, Detect, Respond y Recover, transformando excels est谩ticos en flujos de trabajo din谩micos.
`
},
// NUEVO PROYECTO: MISHI HEALTHTECH
'mishi': {
title: "MISHI: ECOSISTEMA HEALTH-TECH",
videoID: "qPd3npeGM_A",
github: "https://github.com/KaledSML/Mishi-HealthTech-App",
badges: ["AI_NLP", "PROTOCOLO_PAP", "OCTALYSIS", "IEEE_830"],
description: `
<b>Ingenier铆a de Software Aplicada al Bienestar.</b> Ecosistema inmersivo dise帽ado bajo est谩ndares <b>ISO/IEC 25010</b> para mitigar el deterioro de la salud mental. <br><br>
El sistema integra <b>Inteligencia Artificial (NLP)</b> para escucha activa y un motor de gamificaci贸n basado en qu铆micos <b>DOSE</b> (Dopamina, Oxitocina, Serotonina, Endorfina), validado en pruebas de campo. <br><br>
Incluye un m贸dulo cr铆tico de <b>Primeros Auxilios Psicol贸gicos (PAP)</b> con t茅cnicas de anclaje sensorial 5-4-3-2-1 para contenci贸n en episodios de crisis, operando bajo lineamientos de seguridad <b>NIST</b>.
`
},
'te_acompano': {
title: "TE ACOMPA脩O: SEGURIDAD H脥BRIDA",
videoID: "j-x6SNg3ECg",
//github: "#",
badges: ["3ER_LUGAR_INNOVACI脫N", "BT_DIRECT", "MESH_PROTOCOLS", "RALLY_2021"],
description: `
<b>Propuesta de Innovaci贸n y Dise帽o UX.</b> Proyecto desarrollado por el equipo <b>INDUCOMINF ALERT</b>. <br><br>
Se dise帽贸 una soluci贸n h铆brida para combatir la violencia de g茅nero en zonas sin cobertura, utilizando protocolos <b>Bluetooth y Wi-Fi Direct</b> para crear redes de seguridad local. <br><br>
Obtuvo el <b>3er lugar en la Categor铆a de Innovaci贸n</b> en la sede UBO del Rally Latinoamericano de Innovaci贸n 2021. El proyecto consisti贸 en la formulaci贸n t茅cnica, investigaci贸n de factibilidad y maquetaci贸n de la experiencia de usuario.
`
},
'spmg': {
title: "SPMG: SISTEMA DE PREVENCI脫N DE GAS",
videoID: "eweGFmQ_UTY",
github: "https://github.com/KaledSML/SPMG-Arduino-Safety-System",
badges: ["ARDUINO", "HARDWARE_EMBEDDED", "SISTEMAS_CONTROL", "C++"],
description: `
<b>Hardware Embebido para Seguridad Ambiental.</b> Sistema dise帽ado para la detecci贸n temprana de mon贸xido de carbono y gas, orientado a prevenir accidentes en hogares vulnerables. <br><br>
Implementa una arquitectura de sensores con <b>Arduino UNO</b>, utilizando un sensor MQ para gas y un TMP36 para temperatura. El firmware gestiona una l贸gica de sem谩foro (Normal/Alerta/Cr铆tico) y conversi贸n ADC para monitoreo en tiempo real a trav茅s de un display LCD 16x2. <br><br>
Este proyecto documenta mis fundamentos en l贸gica de programaci贸n y electr贸nica aplicada, demostrando el uso de la tecnolog铆a como una herramienta de protecci贸n civil de bajo costo.
`
},
'pymenton': {
title: "PYMENTON: EDTECH & INCLUSI脫N SOCIAL",
videoID: "a94pk1NaHpw",
github: "https://github.com/KaledSML/pymenton-edtech-platform",
badges: ["EDTECH", "GAMIFICACI脫N", "BUDDYPRESS", "OPTIMIZACI脫N_WPO"],
description: `
<b>Ecosistema Digital de Aprendizaje Gamificado.</b> Framework dise帽ado como respuesta estrat茅gica a la brecha digital, transformando la vulnerabilidad tecnol贸gica en autonom铆a comercial. <br><br>
La arquitectura integra un <b>LMS (LearnPress)</b> para formaci贸n t茅cnica, una <b>Capa Social (BuddyPress)</b> para mentor铆as y un sistema de <b>Gamificaci贸n (GamiPress)</b> para incentivar la retenci贸n. <br><br>
Optimizado mediante protocolos <b>WPO (Web Performance Optimization)</b> para garantizar acceso desde dispositivos con recursos limitados y bajo consumo de datos, aline谩ndose con el programa "Digitaliza tu Pyme".
`
},
'veranum': {
title: "VERANUM: TRANSFORMACI脫N DIGITAL",
videoID: "6A6aBmMGhFw",
github: "https://github.com/KaledSML/veranum-hotel-management",
badges: ["MYSQL", "WORDPRESS_CMS", "OPTIMIZACI脫N_PROCESOS", "QA_VALIDATED"],
description: `
<b>Modernizaci贸n de Sistemas para Gesti贸n Hotelera.</b> Proyecto enfocado en mitigar la obsolescencia operativa mediante la automatizaci贸n del ciclo de reservas y el control de activos. <br><br>
La soluci贸n incluye un <b>Motor de Reservas din谩mico</b>, un sistema de gesti贸n de inventarios para restaurante/backoffice y una arquitectura relacional en <b>MySQL</b> para asegurar la integridad de los datos. <br><br>
Desarrollado bajo una metodolog铆a <b>Fast-Track de 20 d铆as</b>, integrando ingenier铆a de requerimientos, modelado UML y optimizaci贸n de rendimiento (WPO) para mejorar la competitividad digital de una cadena con 30 a帽os de trayectoria.
`
},
'shiro': {
title: "SHIRO'S COFFEE: DELIVERY UX",
videoID: "x3sDgAEe2fk",
github: "#", // Al ser No-Code, no hay repo, pero se compensa con el video demo
badges: ["MVP", "UX_DESIGN", "GOODBARBER", "CAUSA_ANIMAL"],
description: `
<b>Prototipado de App M贸vil para Cafeter铆a Tem谩tica.</b> Dise帽o de una soluci贸n de delivery centrada en la experiencia del usuario y el apoyo a la adopci贸n de gatos rescatados. <br><br>
El proyecto abarca desde la gesti贸n de perfiles y m煤ltiples direcciones de env铆o hasta el flujo completo de compra (User Journey). <br><br>
Desarrollado con <b>GoodBarber</b>, demuestra mi habilidad para transformar conceptos creativos en productos m铆nimos viables funcionales, priorizando la conexi贸n emocional con el cliente y la eficiencia log铆stica en nichos de mercado espec铆ficos.
`
},
'data_science': {
title: "DATA SCIENCE & ANALYTICS PORTFOLIO",
videoID: "F-3e8exnVJY", // Al ser un repo de notebooks y scripts, podemos usar el placeholder de an谩lisis
github: "https://github.com/KaledSML/Applied-Data-Science",
badges: ["RANDOM_FOREST", "SQL_PRO", "EDA", "SCIKIT-LEARN"],
description: `
<b>Arquitectura y An谩lisis Predictivo de Datos.</b> Repositorio especializado en la transformaci贸n de datos crudos en inteligencia de negocio. <br><br>
Incluye modelos de <b>Machine Learning</b> con un 93.6% de precisi贸n en predicci贸n de radiaci贸n solar y sistemas de clasificaci贸n para potabilidad del agua (89% Accuracy). <br><br>
Adem谩s, integra dise帽o de bases de datos relacionales con <b>SAP PowerDesigner</b> y SQL Server, implementando Stored Procedures y vistas de trazabilidad 360掳 para gesti贸n log铆stica compleja.
`
}
};
// 3. L脫GICA DEL MODAL
const modal = document.getElementById('video-modal');
const iframe = document.getElementById('pitch-video');
const closeModalBtn = document.getElementById('close-modal');
function openProject(projectId) {
const data = projectsData[projectId];
if(!data) return;
// Rellenar contenido
document.getElementById('modal-title').innerText = data.title;
document.getElementById('modal-description').innerHTML = data.description;
document.getElementById('modal-github').href = data.github;
// Badges
const badgeContainer = document.getElementById('modal-badges');
badgeContainer.innerHTML = '';
data.badges.forEach(tag => {
const span = document.createElement('span');
span.className = 'badge';
span.innerText = tag;
badgeContainer.appendChild(span);
});
// Cargar video y mostrar modal
iframe.src = `https://www.youtube.com/embed/${data.videoID}?autoplay=1`;
modal.classList.add('active');
}
// Evento para el bot贸n del perfil (Pitch)
document.getElementById('open-pitch').addEventListener('click', () => {
openProject('pitch-principal');
});
// Evento para cerrar
closeModalBtn.addEventListener('click', () => {
modal.classList.remove('active');
iframe.src = "";
});
// 4. NAVEGACI脫N DOCK
const navBtns = document.querySelectorAll('.nav-btn');
const sections = document.querySelectorAll('.section');
const indicator = document.querySelector('.nav-indicator');
function switchSection(targetId, button) {
sections.forEach(sec => sec.classList.remove('active'));
document.getElementById(targetId).classList.add('active');
navBtns.forEach(btn => btn.classList.remove('active'));
button.classList.add('active');
updateIndicator(button);
}
function updateIndicator(button) {
indicator.style.width = `${button.offsetWidth}px`;
indicator.style.left = `${button.offsetLeft}px`;
}
navBtns.forEach(btn => {
btn.addEventListener('click', () => switchSection(btn.getAttribute('data-section'), btn));
});
// 5. INICIALIZACI脫N
window.addEventListener('resize', () => {
initCanvas();
updateIndicator(document.querySelector('.nav-btn.active'));
});
initCanvas();
createParticles();
animate();
window.onload = () => updateIndicator(document.querySelector('.nav-btn.active'));
const slider = document.getElementById('carousel-slider');
const track = document.getElementById('carousel-track');
const cards = document.querySelectorAll('.info-card-3d');
slider.addEventListener('input', (e) => {
const value = e.target.value;
// Rotar el carrusel
track.style.transform = `rotateY(${-value}deg)`;
// Calcular qu茅 tarjeta est谩 al frente (cada 90 grados)
// El Math.abs asegura que funcione si el slider diera valores negativos
const activeIndex = Math.round(value / 90) % 4;
cards.forEach((card, i) => {
// Normalizamos el 铆ndice para que coincida con --i
const isFocused = i === (activeIndex < 0 ? 4 + activeIndex : activeIndex);
if (isFocused) {
card.style.opacity = "1";
card.style.filter = "brightness(1.2) drop-shadow(0 0 15px rgba(0, 255, 194, 0.4))";
card.style.border = "1px solid var(--primary)";
} else {
card.style.opacity = "0.2";
card.style.filter = "brightness(0.5) blur(2px)";
card.style.border = "1px solid rgba(0, 255, 194, 0.1)";
}
});
// EFECTO EXTRA: El brillo de la barra cambia seg煤n la posici贸n
const intensity = 0.5 + (value / 360);
slider.style.boxShadow = `0 0 ${intensity * 10}px var(--primary)`;
});