ia-aNima commited on
Commit
632d6d0
·
verified ·
1 Parent(s): 9aafb1a

sigue mejorandola - Initial Deployment

Browse files
Files changed (2) hide show
  1. README.md +6 -4
  2. index.html +449 -19
README.md CHANGED
@@ -1,10 +1,12 @@
1
  ---
2
- title: Voxos Ai
3
- emoji: 🚀
4
  colorFrom: blue
5
- colorTo: gray
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: voxos-ai
3
+ emoji: 🐳
4
  colorFrom: blue
5
+ colorTo: red
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite
10
  ---
11
 
12
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
index.html CHANGED
@@ -1,19 +1,449 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="es">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial initial-scale=1.0">
6
+ <title>VoxOS - Centro de Control por Voz</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
9
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
10
+ <style>
11
+ body {
12
+ font-family: 'Inter', sans-serif;
13
+ background: #000;
14
+ overflow: hidden;
15
+ }
16
+
17
+ .glass-effect {
18
+ background: rgba(255, 255, 255, 0.05);
19
+ backdrop-filter: blur(20px);
20
+ border: 1px solid rgba(255, 255, 255, 0.1);
21
+ }
22
+
23
+ .glow {
24
+ box-shadow: 0 0 20px rgba(59, 130, 246, 0.5);
25
+ }
26
+
27
+ .pulse-ring {
28
+ animation: pulse-ring 2s cubic-bezier(0.455, 0.03, 0.515, 0.955) infinite;
29
+ }
30
+
31
+ @keyframes pulse-ring {
32
+ 0% {
33
+ transform: scale(0.33);
34
+ opacity: 1;
35
+ }
36
+ 80%, 100% {
37
+ opacity: 0;
38
+ }
39
+ }
40
+
41
+ .typing-animation {
42
+ overflow: hidden;
43
+ border-right: 3px solid #3b82f6;
44
+ white-space: nowrap;
45
+ animation: typing 2s steps(20, end), blink-caret 0.75s step-end infinite;
46
+ }
47
+
48
+ @keyframes typing {
49
+ from { width: 0 }
50
+ to { width: 100% }
51
+ }
52
+
53
+ @keyframes blink-caret {
54
+ from, to { border-color: transparent }
55
+ 50% { border-color: #3b82f6 }
56
+ }
57
+
58
+ .app-icon {
59
+ transition: all 0.3s ease;
60
+ background: rgba(255, 255, 255, 0.1);
61
+ border-radius: 12px;
62
+ text-align: center;
63
+ cursor: pointer;
64
+ aspect-ratio: 1;
65
+ display: flex;
66
+ flex-direction: column;
67
+ align-items: center;
68
+ justify-content: center;
69
+ }
70
+
71
+ .app-icon:hover {
72
+ transform: scale(1.05);
73
+ background: rgba(59, 130, 246, 0.2);
74
+ }
75
+
76
+ .notification {
77
+ animation: slideIn 0.5s ease-out;
78
+ }
79
+
80
+ @keyframes slideIn {
81
+ from {
82
+ transform: translateX(100%);
83
+ opacity: 0;
84
+ }
85
+ to {
86
+ transform: translateX(0);
87
+ opacity: 1;
88
+ }
89
+ }
90
+
91
+ .voice-wave {
92
+ display: flex;
93
+ align-items: center;
94
+ justify-content: center;
95
+ gap: 2px;
96
+ }
97
+
98
+ .voice-wave span {
99
+ width: 3px;
100
+ background: #3b82f6;
101
+ border-radius: 3px;
102
+ animation: wave 0.5s infinite ease-in-out;
103
+ }
104
+
105
+ .voice-wave span:nth-child(2) { animation-delay: 0.1s; }
106
+ .voice-wave span:nth-child(3) { animation-delay: 0.2s; }
107
+ .voice-wave span:nth-child(4) { animation-delay: 0.3s; }
108
+ .voice-wave span:nth-child(5) { animation-delay: 0.4s; }
109
+
110
+ @keyframes wave {
111
+ 0%, 100% { height: 10px; }
112
+ 50% { height: 30px; }
113
+ }
114
+ </style>
115
+ </head>
116
+ <body class="bg-black text-white">
117
+ <div id="app" class="min-h-screen flex">
118
+ <!-- Sidebar de notificaciones -->
119
+ <aside id="sidebar" class="glass-effect w-full sm:w-96 h-screen overflow-hidden flex-shrink-0 transition-transform duration-300 ease-in-out">
120
+ <div class="p-4 h-full flex flex-col">
121
+ <!-- Header -->
122
+ <div class="flex items-center justify-between mb-4">
123
+ <h1 class="text-xl font-bold flex items-center">
124
+ <i class="fas fa-brain mr-2 text-blue-400"></i>
125
+ VoxOS AI
126
+ </h1>
127
+ <button onclick="toggleSidebar()" class="text-gray-400 hover:text-white transition-colors">
128
+ <i class="fas fa-times text-lg"></i>
129
+ </button>
130
+ </div>
131
+
132
+ <!-- Micrófono de voz -->
133
+ <div class="mb-4">
134
+ <div class="glass-effect rounded-xl p-4 text-center">
135
+ <div id="voiceStatus" class="mb-2">
136
+ <div class="w-16 h-16 mx-auto mb-2 relative">
137
+ <div class="absolute inset-0 bg-blue-500 rounded-full opacity-20 pulse-ring"></div>
138
+ <button onclick="toggleVoice()" id="voiceButton" class="w-16 h-16 bg-blue-500 rounded-full flex items-center justify-center hover:bg-blue-600 transition-colors">
139
+ <i class="fas fa-microphone text-xl"></i>
140
+ </button>
141
+ </div>
142
+ <p id="voiceText" class="text-gray-300 text-sm">Presiona para hablar</p>
143
+ </div>
144
+
145
+ <div id="voiceWave" class="voice-wave hidden">
146
+ <span></span>
147
+ <span></span>
148
+ <span></span>
149
+ <span></span>
150
+ <span></span>
151
+ </div>
152
+ </div>
153
+ </div>
154
+
155
+ <!-- Aplicaciones rápidas -->
156
+ <div class="mb-4">
157
+ <h2 class="text-sm font-semibold mb-2">Aplicaciones</h2>
158
+ <div class="grid grid-cols-4 gap-2">
159
+ <div class="app-icon p-2" onclick="openApp('notas')">
160
+ <i class="fas fa-sticky-note text-xl mb-1"></i>
161
+ <p class="text-xs">Notas</p>
162
+ </div>
163
+ <div class="app-icon p-2" onclick="openApp('calculadora')">
164
+ <i class="fas fa-calculator text-xl mb-1"></i>
165
+ <p class="text-xs">Calc</p>
166
+ </div>
167
+ <div class="app-icon p-2" onclick="openApp('tiempo')">
168
+ <i class="fas fa-cloud-sun text-xl mb-1"></i>
169
+ <p class="text-xs">Tiempo</p>
170
+ </div>
171
+ <div class="app-icon p-2" onclick="openApp('musica')">
172
+ <i class="fas fa-music text-xl mb-1"></i>
173
+ <p class="text-xs">Música</p>
174
+ </div>
175
+ </div>
176
+ </div>
177
+
178
+ <!-- Notificaciones -->
179
+ <div class="flex-1 flex flex-col min-h-0">
180
+ <h2 class="text-sm font-semibold mb-2 flex-shrink-0">Notificaciones</h2>
181
+ <div id="notifications" class="space-y-2 overflow-y-auto flex-1"></div>
182
+ </div>
183
+ </div>
184
+ </aside>
185
+
186
+ <!-- Área principal -->
187
+ <main class="flex-1 flex items-center justify-center">
188
+ <div class="text-center">
189
+ <h1 class="text-6xl font-bold mb-4 bg-gradient-to-r from-blue-400 to-purple-500 bg-clip-text text-transparent">
190
+ Bienvenido a VoxOS
191
+ </h1>
192
+ <p class="text-gray-400 text-xl mb-8">Tu asistente de voz inteligente</p>
193
+ <button onclick="toggleSidebar()" class="glass-effect px-8 py-4 rounded-full hover:glow transition-all">
194
+ <i class="fas fa-chevron-left mr-2"></i>
195
+ Abrir centro de control
196
+ </button>
197
+ </div>
198
+ </main>
199
+
200
+ <!-- Modal de aplicación -->
201
+ <div id="appModal" class="fixed inset-0 bg-black bg-opacity-50 hidden items-center justify-center">
202
+ <div class="glass-effect rounded-2xl p-6 w-full max-w-md mx-4">
203
+ <div class="flex justify-between items-center mb-4">
204
+ <h3 id="appTitle" class="text-xl font-bold"></h3>
205
+ <button onclick="closeApp()" class="text-gray-400 hover:text-white">
206
+ <i class="fas fa-times text-xl"></i>
207
+ </button>
208
+ </div>
209
+ <div id="appContent"></div>
210
+ </div>
211
+ </div>
212
+ </div>
213
+
214
+ <script>
215
+ // Estado global
216
+ let isListening = false;
217
+ let recognition = null;
218
+
219
+ // Inicialización
220
+ document.addEventListener('DOMContentLoaded', function() {
221
+ initVoiceRecognition();
222
+ loadNotifications();
223
+ checkTime();
224
+ setInterval(checkTime, 60000); // Actualizar cada minuto
225
+ });
226
+
227
+ // Control de sidebar
228
+ function toggleSidebar() {
229
+ const sidebar = document.getElementById('sidebar');
230
+ sidebar.classList.toggle('transform');
231
+ sidebar.classList.toggle('-translate-x-full');
232
+ }
233
+
234
+ // Reconocimiento de voz
235
+ function initVoiceRecognition() {
236
+ if ('webkitSpeechRecognition' in window) {
237
+ recognition = new webkitSpeechRecognition();
238
+ recognition.lang = 'es-ES';
239
+ recognition.continuous = false;
240
+ recognition.interimResults = false;
241
+
242
+ recognition.onstart = () => {
243
+ isListening = true;
244
+ document.getElementById('voiceText').textContent = 'Escuchando...';
245
+ document.getElementById('voiceWave').classList.remove('hidden');
246
+ document.getElementById('voiceButton').classList.add('bg-red-500');
247
+ };
248
+
249
+ recognition.onresult = (event) => {
250
+ const command = event.results[0][0].transcript.toLowerCase();
251
+ processCommand(command);
252
+ };
253
+
254
+ recognition.onend = () => {
255
+ isListening = false;
256
+ document.getElementById('voiceText').textContent = 'Presiona para hablar';
257
+ document.getElementById('voiceWave').classList.add('hidden');
258
+ document.getElementById('voiceButton').classList.remove('bg-red-500');
259
+ };
260
+
261
+ recognition.onerror = (event) => {
262
+ console.error('Error de reconocimiento:', event.error);
263
+ document.getElementById('voiceText').textContent = 'Error al escuchar';
264
+ };
265
+ }
266
+ }
267
+
268
+ // Control de voz
269
+ function toggleVoice() {
270
+ if (!recognition) {
271
+ alert('Tu navegador no soporta reconocimiento de voz');
272
+ return;
273
+ }
274
+
275
+ if (isListening) {
276
+ recognition.stop();
277
+ } else {
278
+ recognition.start();
279
+ }
280
+ }
281
+
282
+ // Procesar comandos de voz
283
+ function processCommand(command) {
284
+ addNotification('Comando recibido', `"${command}"`, 'success');
285
+
286
+ if (command.includes('abrir')) {
287
+ if (command.includes('notas')) openApp('notas');
288
+ else if (command.includes('calculadora')) openApp('calculadora');
289
+ else if (command.includes('tiempo')) openApp('tiempo');
290
+ else if (command.includes('música')) openApp('musica');
291
+ } else if (command.includes('hora')) {
292
+ checkTime();
293
+ } else if (command.includes('cerrar')) {
294
+ closeApp();
295
+ } else if (command.includes('limpiar')) {
296
+ clearNotifications();
297
+ } else {
298
+ addNotification('IA', 'Procesando tu comando...', 'info');
299
+ }
300
+ }
301
+
302
+ // Abrir aplicaciones
303
+ function openApp(app) {
304
+ const modal = document.getElementById('appModal');
305
+ const title = document.getElementById('appTitle');
306
+ const content = document.getElementById('appContent');
307
+
308
+ modal.classList.remove('hidden');
309
+ modal.classList.add('flex');
310
+
311
+ switch(app) {
312
+ case 'notas':
313
+ title.textContent = 'Notas';
314
+ content.innerHTML = `
315
+ <textarea class="w-full h-40 p-4 bg-gray-800 rounded-lg text-white"
316
+ placeholder="Escribe aquí tus notas..."></textarea>
317
+ <button onclick="saveNote()" class="mt-4 bg-blue-500 px-4 py-2 rounded-lg hover:bg-blue-600">
318
+ Guardar nota
319
+ </button>
320
+ `;
321
+ break;
322
+ case 'calculadora':
323
+ title.textContent = 'Calculadora';
324
+ content.innerHTML = `
325
+ <input type="text" id="calcDisplay" class="w-full p-4 bg-gray-800 rounded-lg text-right text-white text-2xl mb-4" value="0" readonly>
326
+ <div class="grid grid-cols-4 gap-2">
327
+ ${['7','8','9','/','4','5','6','*','1','2','3','-','0','.','=','+'].map(btn =>
328
+ `<button onclick="calcClick('${btn}')" class="bg-gray-700 p-4 rounded-lg hover:bg-gray-600">${btn}</button>`
329
+ ).join('')}
330
+ </div>
331
+ `;
332
+ window.currentCalc = '0';
333
+ break;
334
+ case 'tiempo':
335
+ title.textContent = 'Tiempo';
336
+ content.innerHTML = `
337
+ <div class="text-center">
338
+ <div class="text-6xl mb-4">☀️</div>
339
+ <p class="text-2xl mb-2">22°C</p>
340
+ <p class="text-gray-400">Madrid, España</p>
341
+ <p class="text-sm mt-4">Despejado con nubes</p>
342
+ </div>
343
+ `;
344
+ break;
345
+ case 'musica':
346
+ title.textContent = 'Música';
347
+ content.innerHTML = `
348
+ <div class="text-center">
349
+ <div class="text-4xl mb-4">🎵</div>
350
+ <p class="font-semibold mb-2">Reproduciendo</p>
351
+ <p class="text-gray-400 mb-4">"Bohemian Rhapsody"</p>
352
+ <div class="flex justify-center space-x-4">
353
+ <button class="text-2xl hover:text-blue-400">⏮️</button>
354
+ <button class="text-2xl hover:text-blue-400">⏸️</button>
355
+ <button class="text-2xl hover:text-blue-400">⏭️</button>
356
+ </div>
357
+ </div>
358
+ `;
359
+ break;
360
+ }
361
+ }
362
+
363
+ // Cerrar aplicación
364
+ function closeApp() {
365
+ document.getElementById('appModal').classList.add('hidden');
366
+ document.getElementById('appModal').classList.remove('flex');
367
+ }
368
+
369
+ // Calculadora
370
+ function calcClick(btn) {
371
+ if (btn === '=') {
372
+ try {
373
+ window.currentCalc = eval(window.currentCalc).toString();
374
+ } catch {
375
+ window.currentCalc = 'Error';
376
+ }
377
+ } else {
378
+ if (window.currentCalc === '0' || window.currentCalc === 'Error') {
379
+ window.currentCalc = btn;
380
+ } else {
381
+ window.currentCalc += btn;
382
+ }
383
+ }
384
+ document.getElementById('calcDisplay').value = window.currentCalc;
385
+ }
386
+
387
+ // Guardar nota
388
+ function saveNote() {
389
+ addNotification('Notas', 'Nota guardada correctamente', 'success');
390
+ closeApp();
391
+ }
392
+
393
+ // Sistema de notificaciones
394
+ function addNotification(title, text, type = 'info') {
395
+ const notifications = document.getElementById('notifications');
396
+ const notification = document.createElement('div');
397
+ notification.className = 'notification glass-effect rounded-lg p-4';
398
+ notification.innerHTML = `
399
+ <div class="flex items-start">
400
+ <i class="fas fa-${getNotificationIcon(type)} text-${getNotificationColor(type)} mt-1 mr-3"></i>
401
+ <div>
402
+ <h4 class="font-semibold">${title}</h4>
403
+ <p class="text-gray-400 text-sm">${text}</p>
404
+ <p class="text-xs text-gray-500 mt-1">${new Date().toLocaleTimeString()}</p>
405
+ </div>
406
+ </div>
407
+ `;
408
+ notifications.insertBefore(notification, notifications.firstChild);
409
+ }
410
+
411
+ function getNotificationIcon(type) {
412
+ const icons = {
413
+ success: 'check-circle',
414
+ error: 'exclamation-circle',
415
+ info: 'info-circle',
416
+ warning: 'exclamation-triangle'
417
+ };
418
+ return icons[type] || 'info-circle';
419
+ }
420
+
421
+ function getNotificationColor(type) {
422
+ const colors = {
423
+ success: 'green-400',
424
+ error: 'red-400',
425
+ info: 'blue-400',
426
+ warning: 'orange-400'
427
+ };
428
+ return colors[type] || 'blue-400';
429
+ }
430
+
431
+ function loadNotifications() {
432
+ addNotification('Bienvenido', 'VoxOS está listo para ayudarte', 'success');
433
+ addNotification('Actualización', 'Nuevas funciones de voz disponibles', 'info');
434
+ }
435
+
436
+ function clearNotifications() {
437
+ document.getElementById('notifications').innerHTML = '';
438
+ addNotification('Sistema', 'Notificaciones limpiadas', 'info');
439
+ }
440
+
441
+ function checkTime() {
442
+ const now = new Date();
443
+ if (now.getHours() === 8 && now.getMinutes() === 0) {
444
+ addNotification('Buenos días', 'Es hora de comenzar el día', 'info');
445
+ }
446
+ }
447
+ </script>
448
+ <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=ia-aNima/voxos-ai" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
449
+ </html>