agentcyone commited on
Commit
58b7726
·
verified ·
1 Parent(s): 941998a

proceed - Initial Deployment

Browse files
Files changed (2) hide show
  1. README.md +7 -5
  2. index.html +892 -19
README.md CHANGED
@@ -1,10 +1,12 @@
1
  ---
2
- title: Knowledge Whisper
3
- emoji: 😻
4
- colorFrom: indigo
5
- colorTo: red
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: knowledge-whisper
3
+ emoji: 🐳
4
+ colorFrom: blue
5
+ colorTo: purple
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,892 @@
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
+
2
+ #!/bin/bash
3
+ set -euo pipefail
4
+
5
+ echo "🔨 Building all Docker images and pushing..."
6
+
7
+ for app in ../spaces/*; do
8
+ appname=$(basename "$app")
9
+ docker build -t ghcr.io/agentcyone/$appname:latest "$app"
10
+ docker push ghcr.io/agentcyone/$appname:latest
11
+ done
12
+
13
+ echo "🚀 Deploying Helm charts..."
14
+
15
+ for app in ../helm_charts/*; do
16
+ appname=$(basename "$app")
17
+ helm upgrade --install $appname "$app" --namespace totality --create-namespace
18
+ done
19
+
20
+ echo "✅ Build and deploy complete."
21
+
22
+
23
+ apiVersion: networking.k8s.io/v1
24
+ kind: Ingress
25
+ metadata:
26
+ name: totality-ingress
27
+ namespace: totality
28
+ annotations:
29
+ nginx.ingress.kubernetes.io/rewrite-target: /
30
+ spec:
31
+ rules:
32
+ - http:
33
+ paths: {{- range $app := (list "space_app_1" "space_app_2") }}
34
+ - path: /api/{{ $app }}
35
+ pathType: Prefix
36
+ backend:
37
+ service:
38
+ name: {{ $app }}-service
39
+ port:
40
+ number: 80 {{- end }}
41
+
42
+
43
+ apiVersion: apps/v1
44
+ kind: Deployment
45
+ metadata:
46
+ name: prometheus
47
+ namespace: totality
48
+ spec:
49
+ replicas: 1
50
+ selector:
51
+ matchLabels:
52
+ app: prometheus
53
+ template:
54
+ metadata:
55
+ labels:
56
+ app: prometheus
57
+ spec:
58
+ containers:
59
+ - name: prometheus
60
+ image: prom/prometheus:latest
61
+ ports:
62
+ - containerPort: 9090
63
+ volumeMounts:
64
+ - mountPath: /etc/prometheus
65
+ name: config
66
+ volumes:
67
+ - name: config
68
+ configMap:
69
+ name: prometheus-config
70
+ ---
71
+ apiVersion: v1
72
+ kind: Service
73
+ metadata:
74
+ name: prometheus
75
+ namespace: totality
76
+ spec:
77
+ type: ClusterIP
78
+ ports:
79
+ - port: 9090
80
+ selector:
81
+ app: prometheus
82
+
83
+
84
+ name: Totality Spaces CI/CD
85
+
86
+ on:
87
+ push:
88
+ branches: [main]
89
+ pull_request:
90
+ branches: [main]
91
+
92
+ env:
93
+ REGISTRY: ghcr.io
94
+ IMAGE_NAME: ${{ github.repository }}
95
+
96
+ jobs:
97
+ build-and-deploy:
98
+ runs-on: ubuntu-latest
99
+ permissions:
100
+ contents: read
101
+ packages: write
102
+
103
+ steps:
104
+ - name: Checkout code
105
+ uses: actions/checkout@v3
106
+
107
+ - name: Set up Docker Buildx
108
+ uses: docker/setup-buildx-action@v2
109
+
110
+ - name: Login to GitHub Container Registry
111
+ uses: docker/login-action@v2
112
+ with:
113
+ registry: ${{ env.REGISTRY }}
114
+ username: ${{ github.actor }}
115
+ password: ${{ secrets.GITHUB_TOKEN }}
116
+
117
+ - name: Build and push images
118
+ run: |
119
+ for app in spaces/*; do
120
+ appname=$(basename "$app")
121
+ echo "Building $appname..."
122
+ docker build -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/$appname:latest $app
123
+ docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/$appname:latest
124
+ done
125
+
126
+ - name: Set up Helm
127
+ uses: azure/setup-helm@v3
128
+ with:
129
+ version: 'v3.11.1'
130
+
131
+ - name: Deploy to Kubernetes
132
+ run: |
133
+ for app in helm_charts/*; do
134
+ appname=$(basename "$app")
135
+ echo "Deploying $appname..."
136
+ helm upgrade --install $appname $app \
137
+ --namespace totality \
138
+ --create-namespace \
139
+ --wait \
140
+ --timeout 5m
141
+ done
142
+
143
+ - name: Verify deployments
144
+ run: |
145
+ kubectl get pods -n totality
146
+
147
+
148
+ # Default values for space_app_1
149
+ replicaCount: 2
150
+
151
+ image:
152
+ repository: ghcr.io/agentcyone/space_app_1
153
+ tag: latest
154
+ pullPolicy: IfNotPresent
155
+
156
+ service:
157
+ type: ClusterIP
158
+ port: 80
159
+ targetPort: 7860
160
+ annotations: {}
161
+
162
+ ingress:
163
+ enabled: false
164
+ className: ""
165
+ annotations: {}
166
+ hosts:
167
+ - host: chart-example.local
168
+ paths:
169
+ - path: /
170
+ pathType: ImplementationSpecific
171
+ tls: []
172
+
173
+ resources:
174
+ requests:
175
+ cpu: 250m
176
+ memory: 512Mi
177
+ limits:
178
+ cpu: 500m
179
+ memory: 1Gi
180
+
181
+ autoscaling:
182
+ enabled: true
183
+ minReplicas: 2
184
+ maxReplicas: 10
185
+ targetCPUUtilizationPercentage: 50
186
+ targetMemoryUtilizationPercentage: 50
187
+
188
+ nodeSelector: {}
189
+
190
+ tolerations: []
191
+
192
+ affinity: {}
193
+
194
+
195
+ # Generic Dockerfile template for Spaces applications
196
+ FROM python:3.10-slim
197
+
198
+ WORKDIR /app
199
+
200
+ # Install dependencies first for better caching
201
+ COPY requirements.txt .
202
+ RUN pip install --no-cache-dir -r requirements.txt
203
+
204
+ # Copy application code
205
+ COPY . .
206
+
207
+ # Expose default Gradio port
208
+ EXPOSE 7860
209
+
210
+ # Health check
211
+ HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \
212
+ CMD curl -f http://localhost:7860/ || exit 1
213
+
214
+ # Run the application
215
+ CMD ["python", "app.py"]
216
+
217
+
218
+ # Totality SaaS Platform
219
+
220
+ Enterprise-grade mathematical knowledge platform with scalable deployment architecture.
221
+
222
+ ## Features
223
+ - Dockerized Spaces applications
224
+ - Helm charts for Kubernetes deployment
225
+ - CI/CD pipelines
226
+ - Monitoring stack (Prometheus + Grafana)
227
+ - API Gateway with NGINX
228
+ - Ray Serve for distributed computing
229
+ - Multi-cloud Terraform configs
230
+
231
+ ## Quick Start
232
+
233
+ ```bash
234
+ # Build and deploy all spaces
235
+ ./scripts/build_and_deploy.sh
236
+ ```
237
+
238
+ ## Repository Structure
239
+
240
+ ```
241
+ totality_saas/
242
+ ├── README.md
243
+ ├── spaces/
244
+ │ ├── space_app_1/
245
+ │ │ ├── app.py
246
+ │ │ ├── requirements.txt
247
+ │ │ └── Dockerfile
248
+ │ └── space_app_2/
249
+ │ ├── app.py
250
+ │ ├── requirements.txt
251
+ │ └── Dockerfile
252
+ ├── dockerfiles/
253
+ │ └── generic.Dockerfile
254
+ ├── helm_charts/
255
+ │ ├── space_app_1/
256
+ │ │ ├── Chart.yaml
257
+ │ │ ├── values.yaml
258
+ │ │ └── templates/
259
+ │ │ ├── deployment.yaml
260
+ │ │ └── service.yaml
261
+ │ └── space_app_2/
262
+ │ ├── Chart.yaml
263
+ │ ├── values.yaml
264
+ │ └── templates/
265
+ │ ├── deployment.yaml
266
+ │ └── service.yaml
267
+ ├── ci_cd/
268
+ │ └── github-actions.yaml
269
+ ├── monitoring/
270
+ │ ├── prometheus-deployment.yaml
271
+ │ ├── grafana-deployment.yaml
272
+ │ └── dashboards/
273
+ │ └── totality-dashboard.json
274
+ ├── api_gateway/
275
+ │ └── nginx-ingress.yaml
276
+ ├── ray_serve/
277
+ │ └── ray-serve-cluster.yaml
278
+ ├── terraform/
279
+ │ └── multi-cloud-clusters.tf
280
+ └── scripts/
281
+ ├── build_and_deploy.sh
282
+ └── scale_autoscaler.yaml
283
+ ```
284
+
285
+ ## Architecture
286
+
287
+ ![Architecture Diagram](docs/architecture.png)
288
+
289
+ <!DOCTYPE html>
290
+ <html lang="en">
291
+ <head>
292
+ <meta charset="UTF-8">
293
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
294
+ <title>Knowledge Whisper - Enterprise Agents</title>
295
+ <script src="https://cdn.tailwindcss.com"></script>
296
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
297
+ <style>
298
+ .fade-in {
299
+ animation: fadeIn 0.5s ease-in-out;
300
+ }
301
+ @keyframes fadeIn {
302
+ from { opacity: 0; transform: translateY(10px); }
303
+ to { opacity: 1; transform: translateY(0); }
304
+ }
305
+ .card-hover {
306
+ transition: all 0.3s ease;
307
+ }
308
+ .card-hover:hover {
309
+ transform: translateY(-5px);
310
+ box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
311
+ }
312
+ .search-container {
313
+ position: relative;
314
+ }
315
+ .search-container:after {
316
+ content: "";
317
+ position: absolute;
318
+ left: 0;
319
+ bottom: 0;
320
+ width: 100%;
321
+ height: 2px;
322
+ background: linear-gradient(90deg, #3b82f6, #8b5cf6);
323
+ transform: scaleX(0);
324
+ transform-origin: left;
325
+ transition: transform 0.3s ease;
326
+ }
327
+ .search-container:focus-within:after {
328
+ transform: scaleX(1);
329
+ }
330
+ .timeline-item:before {
331
+ content: "";
332
+ position: absolute;
333
+ left: -1.5rem;
334
+ top: 0;
335
+ width: 12px;
336
+ height: 12px;
337
+ border-radius: 50%;
338
+ background: #3b82f6;
339
+ border: 2px solid white;
340
+ }
341
+ .timeline-line:before {
342
+ content: "";
343
+ position: absolute;
344
+ left: -1.125rem;
345
+ top: 0;
346
+ width: 2px;
347
+ height: 100%;
348
+ background: #e5e7eb;
349
+ }
350
+ .floating-btn {
351
+ animation: float 3s ease-in-out infinite;
352
+ }
353
+ @keyframes float {
354
+ 0% { transform: translateY(0px); }
355
+ 50% { transform: translateY(-10px); }
356
+ 100% { transform: translateY(0px); }
357
+ }
358
+ </style>
359
+ </head>
360
+ <body class="bg-gray-50 font-sans antialiased">
361
+ <!-- Header -->
362
+ <header class="bg-gradient-to-r from-blue-600 to-indigo-700 text-white shadow-lg">
363
+ <div class="container mx-auto px-4 py-6">
364
+ <div class="flex flex-col md:flex-row justify-between items-center">
365
+ <div class="flex items-center mb-4 md:mb-0">
366
+ <i class="fas fa-brain text-3xl mr-3"></i>
367
+ <div>
368
+ <h1 class="text-2xl font-bold">Knowledge Whisper</h1>
369
+ <p class="text-blue-100 text-sm">Enterprise Agents Portal</p>
370
+ </div>
371
+ </div>
372
+ <div class="relative w-full md:w-1/3 search-container">
373
+ <input type="text" placeholder="Search mathematicians..."
374
+ class="w-full bg-white/20 backdrop-blur-sm rounded-lg py-2 px-4 pl-10 text-white placeholder-blue-100 focus:outline-none focus:ring-2 focus:ring-blue-300 transition-all">
375
+ <i class="fas fa-search absolute left-3 top-3 text-blue-100"></i>
376
+ </div>
377
+ </div>
378
+ </div>
379
+ </header>
380
+
381
+ <!-- Main Content -->
382
+ <main class="container mx-auto px-4 py-8">
383
+ <!-- Hero Section -->
384
+ <section class="mb-12 bg-gradient-to-br from-blue-50 to-indigo-50 rounded-2xl p-8 shadow-inner">
385
+ <div class="flex flex-col lg:flex-row items-center">
386
+ <div class="lg:w-1/2 mb-8 lg:mb-0 lg:pr-8">
387
+ <h2 class="text-3xl md:text-4xl font-bold text-gray-800 mb-4">Mathematical Legacy Explorer</h2>
388
+ <p class="text-gray-600 mb-6 text-lg">Discover the interconnected knowledge of history's greatest mathematical minds. Explore their contributions, relationships, and impact on modern mathematics.</p>
389
+ <div class="flex flex-wrap gap-3">
390
+ <button class="bg-blue-600 hover:bg-blue-700 text-white px-6 py-2 rounded-full font-medium transition-all flex items-center">
391
+ <i class="fas fa-play mr-2"></i> Interactive Tour
392
+ </button>
393
+ <button class="border border-blue-600 text-blue-600 hover:bg-blue-50 px-6 py-2 rounded-full font-medium transition-all flex items-center">
394
+ <i class="fas fa-book-open mr-2"></i> View Timeline
395
+ </button>
396
+ </div>
397
+ </div>
398
+ <div class="lg:w-1/2 relative">
399
+ <div class="bg-white p-6 rounded-xl shadow-lg">
400
+ <div class="flex justify-between items-center mb-4">
401
+ <h3 class="font-bold text-gray-800">Top Influential Mathematicians</h3>
402
+ <span class="text-xs bg-blue-100 text-blue-800 px-2 py-1 rounded-full">By Impact Score</span>
403
+ </div>
404
+ <div class="space-y-4">
405
+ <div class="flex items-center p-3 bg-blue-50 rounded-lg">
406
+ <div class="w-10 h-10 bg-blue-100 rounded-full flex items-center justify-center text-blue-800 font-bold mr-4">1</div>
407
+ <div>
408
+ <h4 class="font-medium">Leonhard Euler</h4>
409
+ <p class="text-xs text-gray-500">12% influence score</p>
410
+ </div>
411
+ <div class="ml-auto text-blue-600">
412
+ <i class="fas fa-arrow-right"></i>
413
+ </div>
414
+ </div>
415
+ <div class="flex items-center p-3 hover:bg-blue-50 rounded-lg transition-colors">
416
+ <div class="w-10 h-10 bg-blue-100 rounded-full flex items-center justify-center text-blue-800 font-bold mr-4">2</div>
417
+ <div>
418
+ <h4 class="font-medium">Carl Gauss</h4>
419
+ <p class="text-xs text-gray-500">10% influence score</p>
420
+ </div>
421
+ <div class="ml-auto text-gray-400 hover:text-blue-600 transition-colors">
422
+ <i class="fas fa-arrow-right"></i>
423
+ </div>
424
+ </div>
425
+ <div class="flex items-center p-3 hover:bg-blue-50 rounded-lg transition-colors">
426
+ <div class="w-10 h-10 bg-blue-100 rounded-full flex items-center justify-center text-blue-800 font-bold mr-4">3</div>
427
+ <div>
428
+ <h4 class="font-medium">Archimedes</h4>
429
+ <p class="text-xs text-gray-500">10% influence score</p>
430
+ </div>
431
+ <div class="ml-auto text-gray-400 hover:text-blue-600 transition-colors">
432
+ <i class="fas fa-arrow-right"></i>
433
+ </div>
434
+ </div>
435
+ </div>
436
+ </div>
437
+ <div class="absolute -bottom-6 -right-6 bg-white p-4 rounded-xl shadow-lg w-32 h-32 flex items-center justify-center floating-btn">
438
+ <div class="text-center">
439
+ <div class="w-12 h-12 bg-indigo-100 rounded-full flex items-center justify-center mx-auto mb-1">
440
+ <i class="fas fa-plus text-indigo-600"></i>
441
+ </div>
442
+ <p class="text-xs font-medium text-gray-600">Add Agent</p>
443
+ </div>
444
+ </div>
445
+ </div>
446
+ </div>
447
+ </section>
448
+
449
+ <!-- Categories Section -->
450
+ <section class="mb-12">
451
+ <h2 class="text-2xl font-bold text-gray-800 mb-6 flex items-center">
452
+ <i class="fas fa-tags text-blue-500 mr-3"></i> Explore by Categories
453
+ </h2>
454
+ <div class="grid grid-cols-2 md:grid-cols-4 lg:grid-cols-6 gap-4">
455
+ <div class="bg-white rounded-xl p-4 shadow-sm hover:shadow-md transition-shadow card-hover flex flex-col items-center text-center">
456
+ <div class="w-12 h-12 bg-blue-100 rounded-full flex items-center justify-center text-blue-600 mb-3">
457
+ <i class="fas fa-calculator"></i>
458
+ </div>
459
+ <h3 class="font-medium text-gray-800">Calculus</h3>
460
+ <p class="text-xs text-gray-500 mt-1">Newton, Leibniz, Euler</p>
461
+ </div>
462
+ <div class="bg-white rounded-xl p-4 shadow-sm hover:shadow-md transition-shadow card-hover flex flex-col items-center text-center">
463
+ <div class="w-12 h-12 bg-green-100 rounded-full flex items-center justify-center text-green-600 mb-3">
464
+ <i class="fas fa-shapes"></i>
465
+ </div>
466
+ <h3 class="font-medium text-gray-800">Geometry</h3>
467
+ <p class="text-xs text-gray-500 mt-1">Euclid, Pythagoras</p>
468
+ </div>
469
+ <div class="bg-white rounded-xl p-4 shadow-sm hover:shadow-md transition-shadow card-hover flex flex-col items-center text-center">
470
+ <div class="w-12 h-12 bg-purple-100 rounded-full flex items-center justify-center text-purple-600 mb-3">
471
+ <i class="fas fa-infinity"></i>
472
+ </div>
473
+ <h3 class="font-medium text-gray-800">Number Theory</h3>
474
+ <p class="text-xs text-gray-500 mt-1">Fermat, Gauss</p>
475
+ </div>
476
+ <div class="bg-white rounded-xl p-4 shadow-sm hover:shadow-md transition-shadow card-hover flex flex-col items-center text-center">
477
+ <div class="w-12 h-12 bg-yellow-100 rounded-full flex items-center justify-center text-yellow-600 mb-3">
478
+ <i class="fas fa-project-diagram"></i>
479
+ </div>
480
+ <h3 class="font-medium text-gray-800">Algebra</h3>
481
+ <p class="text-xs text-gray-500 mt-1">Galois, Abel</p>
482
+ </div>
483
+ <div class="bg-white rounded-xl p-4 shadow-sm hover:shadow-md transition-shadow card-hover flex flex-col items-center text-center">
484
+ <div class="w-12 h-12 bg-red-100 rounded-full flex items-center justify-center text-red-600 mb-3">
485
+ <i class="fas fa-wave-square"></i>
486
+ </div>
487
+ <h3 class="font-medium text-gray-800">Analysis</h3>
488
+ <p class="text-xs text-gray-500 mt-1">Cauchy, Weierstrass</p>
489
+ </div>
490
+ <div class="bg-white rounded-xl p-4 shadow-sm hover:shadow-md transition-shadow card-hover flex flex-col items-center text-center">
491
+ <div class="w-12 h-12 bg-indigo-100 rounded-full flex items-center justify-center text-indigo-600 mb-3">
492
+ <i class="fas fa-atom"></i>
493
+ </div>
494
+ <h3 class="font-medium text-gray-800">Physics</h3>
495
+ <p class="text-xs text-gray-500 mt-1">Newton, Lagrange</p>
496
+ </div>
497
+ </div>
498
+ </section>
499
+
500
+ <!-- Mathematicians Grid -->
501
+ <section class="mb-12">
502
+ <div class="flex justify-between items-center mb-6">
503
+ <h2 class="text-2xl font-bold text-gray-800 flex items-center">
504
+ <i class="fas fa-users text-blue-500 mr-3"></i> All Mathematicians
505
+ </h2>
506
+ <div class="flex items-center space-x-2">
507
+ <span class="text-sm text-gray-500">Filter:</span>
508
+ <select class="bg-white border border-gray-200 rounded-lg px-3 py-1 text-sm focus:outline-none focus:ring-1 focus:ring-blue-300">
509
+ <option>All Time Periods</option>
510
+ <option>Ancient</option>
511
+ <option>Medieval</option>
512
+ <option>Renaissance</option>
513
+ <option>Modern</option>
514
+ </select>
515
+ </div>
516
+ </div>
517
+
518
+ <div class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 gap-4">
519
+ <!-- Mathematician Cards -->
520
+ <!-- We'll generate these dynamically with JavaScript -->
521
+ <div id="mathematicians-container"></div>
522
+ </div>
523
+
524
+ <div class="mt-8 flex justify-center">
525
+ <button class="bg-white border border-gray-200 hover:border-blue-300 text-blue-600 px-6 py-2 rounded-full font-medium transition-all flex items-center">
526
+ <i class="fas fa-redo mr-2"></i> Load More
527
+ </button>
528
+ </div>
529
+ </section>
530
+
531
+ <!-- Timeline Section -->
532
+ <section class="mb-12 bg-white rounded-xl shadow-sm p-6">
533
+ <h2 class="text-2xl font-bold text-gray-800 mb-6 flex items-center">
534
+ <i class="fas fa-history text-blue-500 mr-3"></i> Mathematical Timeline
535
+ </h2>
536
+
537
+ <div class="relative pl-8">
538
+ <div class="timeline-line absolute left-0 top-0 bottom-0"></div>
539
+
540
+ <div class="mb-8 timeline-item relative pl-6">
541
+ <div class="bg-blue-50 rounded-xl p-4">
542
+ <div class="flex justify-between items-start mb-2">
543
+ <h3 class="font-bold text-blue-800">Ancient Mathematics</h3>
544
+ <span class="text-xs bg-blue-100 text-blue-800 px-2 py-1 rounded-full">600 BCE - 500 CE</span>
545
+ </div>
546
+ <p class="text-sm text-gray-600">Thales, Pythagoras, Euclid, Archimedes, Ptolemy, Diophantus</p>
547
+ </div>
548
+ </div>
549
+
550
+ <div class="mb-8 timeline-item relative pl-6">
551
+ <div class="bg-indigo-50 rounded-xl p-4">
552
+ <div class="flex justify-between items-start mb-2">
553
+ <h3 class="font-bold text-indigo-800">Medieval Mathematics</h3>
554
+ <span class="text-xs bg-indigo-100 text-indigo-800 px-2 py-1 rounded-full">500 - 1500</span>
555
+ </div>
556
+ <p class="text-sm text-gray-600">Al-Khwarizmi, Fibonacci, Bhaskara II, Omar Khayyam</p>
557
+ </div>
558
+ </div>
559
+
560
+ <div class="mb-8 timeline-item relative pl-6">
561
+ <div class="bg-purple-50 rounded-xl p-4">
562
+ <div class="flex justify-between items-start mb-2">
563
+ <h3 class="font-bold text-purple-800">Renaissance Mathematics</h3>
564
+ <span class="text-xs bg-purple-100 text-purple-800 px-2 py-1 rounded-full">1500 - 1700</span>
565
+ </div>
566
+ <p class="text-sm text-gray-600">Cardano, Viete, Napier, Descartes, Fermat, Pascal</p>
567
+ </div>
568
+ </div>
569
+
570
+ <div class="mb-8 timeline-item relative pl-6">
571
+ <div class="bg-pink-50 rounded-xl p-4">
572
+ <div class="flex justify-between items-start mb-2">
573
+ <h3 class="font-bold text-pink-800">Age of Enlightenment</h3>
574
+ <span class="text-xs bg-pink-100 text-pink-800 px-2 py-1 rounded-full">1700 - 1800</span>
575
+ </div>
576
+ <p class="text-sm text-gray-600">Newton, Leibniz, Euler, Bernoulli family, Lagrange, Laplace</p>
577
+ </div>
578
+ </div>
579
+
580
+ <div class="timeline-item relative pl-6">
581
+ <div class="bg-green-50 rounded-xl p-4">
582
+ <div class="flex justify-between items-start mb-2">
583
+ <h3 class="font-bold text-green-800">Modern Mathematics</h3>
584
+ <span class="text-xs bg-green-100 text-green-800 px-2 py-1 rounded-full">1800 - Present</span>
585
+ </div>
586
+ <p class="text-sm text-gray-600">Gauss, Cauchy, Galois, Riemann, Poincaré, Hilbert, Grothendieck</p>
587
+ </div>
588
+ </div>
589
+ </div>
590
+ </section>
591
+
592
+ <!-- Connections Graph -->
593
+ <section class="mb-12 bg-gray-900 rounded-xl p-6 text-white">
594
+ <div class="flex justify-between items-center mb-6">
595
+ <h2 class="text-2xl font-bold flex items-center">
596
+ <i class="fas fa-project-diagram text-blue-300 mr-3"></i> Knowledge Connections
597
+ </h2>
598
+ <button class="bg-blue-600 hover:bg-blue-700 text-white px-4 py-1 rounded-full text-sm font-medium transition-all">
599
+ <i class="fas fa-expand mr-1"></i> Fullscreen
600
+ </button>
601
+ </div>
602
+
603
+ <div class="bg-gray-800 rounded-lg p-4 h-96 flex items-center justify-center">
604
+ <div class="text-center">
605
+ <i class="fas fa-network-wired text-5xl text-gray-600 mb-4"></i>
606
+ <h3 class="text-xl font-medium mb-2">Interactive Graph Visualization</h3>
607
+ <p class="text-gray-400 max-w-md mx-auto">This area would display an interactive network graph showing connections between mathematicians, their influences, and collaborations.</p>
608
+ <button class="mt-4 bg-blue-600 hover:bg-blue-700 text-white px-6 py-2 rounded-full font-medium transition-all">
609
+ <i class="fas fa-play mr-2"></i> Launch Visualizer
610
+ </button>
611
+ </div>
612
+ </div>
613
+ </section>
614
+ </main>
615
+
616
+ <!-- Footer -->
617
+ <footer class="bg-gray-800 text-white py-8">
618
+ <div class="container mx-auto px-4">
619
+ <div class="flex flex-col md:flex-row justify-between">
620
+ <div class="mb-6 md:mb-0">
621
+ <div class="flex items-center mb-4">
622
+ <i class="fas fa-brain text-2xl text-blue-300 mr-2"></i>
623
+ <span class="text-xl font-bold">Knowledge Whisper</span>
624
+ </div>
625
+ <p class="text-gray-400 max-w-xs">Exploring the interconnected legacy of mathematical thought through history.</p>
626
+ </div>
627
+
628
+ <div class="grid grid-cols-2 md:grid-cols-3 gap-8">
629
+ <div>
630
+ <h3 class="text-lg font-medium mb-4">Resources</h3>
631
+ <ul class="space-y-2">
632
+ <li><a href="#" class="text-gray-400 hover:text-white transition-colors">Documentation</a></li>
633
+ <li><a href="#" class="text-gray-400 hover:text-white transition-colors">API</a></li>
634
+ <li><a href="#" class="text-gray-400 hover:text-white transition-colors">Tutorials</a></li>
635
+ </ul>
636
+ </div>
637
+ <div>
638
+ <h3 class="text-lg font-medium mb-4">Company</h3>
639
+ <ul class="space-y-2">
640
+ <li><a href="#" class="text-gray-400 hover:text-white transition-colors">About</a></li>
641
+ <li><a href="#" class="text-gray-400 hover:text-white transition-colors">Blog</a></li>
642
+ <li><a href="#" class="text-gray-400 hover:text-white transition-colors">Careers</a></li>
643
+ </ul>
644
+ </div>
645
+ <div>
646
+ <h3 class="text-lg font-medium mb-4">Connect</h3>
647
+ <div class="flex space-x-4">
648
+ <a href="#" class="text-gray-400 hover:text-white transition-colors">
649
+ <i class="fab fa-twitter"></i>
650
+ </a>
651
+ <a href="#" class="text-gray-400 hover:text-white transition-colors">
652
+ <i class="fab fa-github"></i>
653
+ </a>
654
+ <a href="#" class="text-gray-400 hover:text-white transition-colors">
655
+ <i class="fab fa-linkedin"></i>
656
+ </a>
657
+ <a href="#" class="text-gray-400 hover:text-white transition-colors">
658
+ <i class="fab fa-youtube"></i>
659
+ </a>
660
+ </div>
661
+ </div>
662
+ </div>
663
+ </div>
664
+
665
+ <div class="border-t border-gray-700 mt-8 pt-8 text-sm text-gray-400">
666
+ <div class="flex flex-col md:flex-row justify-between items-center">
667
+ <p>© 2023 Knowledge Whisper. All rights reserved.</p>
668
+ <div class="flex space-x-6 mt-4 md:mt-0">
669
+ <a href="#" class="hover:text-white transition-colors">Privacy</a>
670
+ <a href="#" class="hover:text-white transition-colors">Terms</a>
671
+ <a href="#" class="hover:text-white transition-colors">Cookies</a>
672
+ </div>
673
+ </div>
674
+ </div>
675
+ </div>
676
+ </footer>
677
+
678
+ <script>
679
+ // Mathematicians data
680
+ const mathematicians = [
681
+ { id: 1, name: "Isaac Newton", era: "17th-18th", field: "Calculus, Physics", influence: 1 },
682
+ { id: 2, name: "Gottfried Leibniz", era: "17th-18th", field: "Calculus", influence: 6 },
683
+ { id: 3, name: "Joseph Lagrange", era: "18th", field: "Analysis", influence: 6 },
684
+ { id: 4, name: "Leonhard Euler", era: "18th", field: "All", influence: 12 },
685
+ { id: 5, name: "Pierre Laplace", era: "18th-19th", field: "Analysis", influence: 1 },
686
+ { id: 6, name: "Euclid", era: "Ancient", field: "Geometry", influence: 8 },
687
+ { id: 7, name: "Carl Gauss", era: "18th-19th", field: "All", influence: 10 },
688
+ { id: 8, name: "Archimedes", era: "Ancient", field: "Geometry", influence: 10 },
689
+ { id: 9, name: "Rene Descartes", era: "17th", field: "Algebra", influence: 2 },
690
+ { id: 10, name: "Gerolamo Cardano", era: "16th", field: "Algebra", influence: 3 },
691
+ { id: 11, name: "Adrien-Marie Legendre", era: "18th-19th", field: "Number Theory", influence: 0 },
692
+ { id: 12, name: "Pythagoras", era: "Ancient", field: "Geometry", influence: 3 },
693
+ { id: 13, name: "Gaspard Monge", era: "18th-19th", field: "Geometry", influence: 0 },
694
+ { id: 14, name: "Jean d'Alembert", era: "18th", field: "Analysis", influence: 0 },
695
+ { id: 15, name: "Augustin Cauchy", era: "19th", field: "Analysis", influence: 9 },
696
+ { id: 16, name: "Joseph Fourier", era: "18th-19th", field: "Analysis", influence: 0 },
697
+ { id: 17, name: "Pierre Fermat", era: "17th", field: "Number Theory", influence: 13 },
698
+ { id: 18, name: "John Napier", era: "16th-17th", field: "Logarithms", influence: 0 },
699
+ { id: 19, name: "Blaise Pascal", era: "17th", field: "Probability", influence: 10 },
700
+ { id: 20, name: "Apollonius", era: "Ancient", field: "Geometry", influence: 0 },
701
+ { id: 21, name: "Leonardo Fibonacci", era: "Medieval", field: "Number Theory", influence: 30 },
702
+ { id: 22, name: "François Viete", era: "16th-17th", field: "Algebra", influence: 48 },
703
+ { id: 23, name: "Ptolemy", era: "Ancient", field: "Astronomy", influence: 0 },
704
+ { id: 24, name: "Christiaan Huygens", era: "17th", field: "Physics", influence: 0 },
705
+ { id: 25, name: "Regiomontanus", era: "15th", field: "Trigonometry", influence: 0 },
706
+ { id: 26, name: "Diophantus", era: "Ancient", field: "Algebra", influence: 38 },
707
+ { id: 27, name: "Colin Maclaurin", era: "18th", field: "Calculus", influence: 0 },
708
+ { id: 28, name: "Jacob Bernoulli", era: "17th-18th", field: "Calculus", influence: 53 },
709
+ { id: 29, name: "Pappus", era: "Ancient", field: "Geometry", influence: 0 },
710
+ { id: 30, name: "Bonaventura Cavalieri", era: "17th", field: "Geometry", influence: 0 },
711
+ { id: 31, name: "Carl Jacobi", era: "19th", field: "Analysis", influence: 18 },
712
+ { id: 32, name: "Johann Bernoulli", era: "17th-18th", field: "Calculus", influence: 0 },
713
+ { id: 33, name: "John Wallis", era: "17th", field: "Calculus", influence: 0 },
714
+ { id: 34, name: "William Hamilton", era: "19th", field: "Algebra", influence: 39 },
715
+ { id: 35, name: "Niccolò Tartaglia", era: "16th", field: "Algebra", influence: 0 },
716
+ { id: 36, name: "Heron", era: "Ancient", field: "Geometry", influence: 0 },
717
+ { id: 37, name: "Jean-Victor Poncelet", era: "19th", field: "Geometry", influence: 51 },
718
+ { id: 38, name: "Bernhard Riemann", era: "19th", field: "Analysis", influence: 21 },
719
+ { id: 39, name: "Siméon Poisson", era: "18th-19th", field: "Analysis", influence: 0 },
720
+ { id: 40, name: "Niels Abel", era: "19th", field: "Algebra", influence: 18 },
721
+ { id: 41, name: "Michel Chasles", era: "19th", field: "Geometry", influence: 0 },
722
+ { id: 42, name: "Luigi Cremona", era: "19th", field: "Geometry", influence: 0 },
723
+ { id: 43, name: "Gilles Roberval", era: "17th", field: "Calculus", influence: 0 },
724
+ { id: 44, name: "Roger Boscovich", era: "18th", field: "Physics", influence: 0 },
725
+ { id: 45, name: "Galileo Galilei", era: "16th-17th", field: "Physics", influence: 37 },
726
+ { id: 46, name: "Alexis Clairaut", era: "18th", field: "Analysis", influence: 46 },
727
+ { id: 47, name: "Johann Lambert", era: "18th", field: "Geometry", influence: 49 },
728
+ { id: 48, name: "Isaac Barrow", era: "17th", field: "Calculus", influence: 0 },
729
+ { id: 49, name: "Jacques Strum", era: "19th", field: "Algebra", influence: 0 },
730
+ { id: 50, name: "Simon Stevin", era: "16th-17th", field: "Decimal System", influence: 0 },
731
+ { id: 51, name: "Augustus de Morgan", era: "19th", field: "Logic", influence: 0 },
732
+ { id: 52, name: "Brook Taylor", era: "18th", field: "Analysis", influence: 0 },
733
+ { id: 53, name: "Johannes Kepler", era: "16th-17th", field: "Astronomy", influence: 33 },
734
+ { id: 54, name: "Daniel Bernoulli", era: "18th", field: "Physics", influence: 0 },
735
+ { id: 55, name: "Girard Desargues", era: "17th", field: "Geometry", influence: 0 },
736
+ { id: 56, name: "Henri Briggs", era: "16th-17th", field: "Logarithms", influence: 0 },
737
+ { id: 57, name: "James Sylvester", era: "19th", field: "Algebra", influence: 0 },
738
+ { id: 58, name: "Lazare Carnot", era: "18th-19th", field: "Geometry", influence: 0 },
739
+ { id: 59, name: "Pierre Maupertuis", era: "18th", field: "Physics", influence: 0 },
740
+ { id: 60, name: "Charles Babbage", era: "19th", field: "Computing", influence: 0 },
741
+ { id: 61, name: "Charles Hermite", era: "19th", field: "Number Theory", influence: 52 },
742
+ { id: 62, name: "Thales", era: "Ancient", field: "Geometry", influence: 0 },
743
+ { id: 63, name: "Henry Smith", era: "19th", field: "Number Theory", influence: 0 },
744
+ { id: 64, name: "Sofia Kovalevskaya", era: "19th", field: "Analysis", influence: 0 },
745
+ { id: 65, name: "Luca Pacioli", era: "15th-16th", field: "Accounting", influence: 0 },
746
+ { id: 66, name: "Hippocrates", era: "Ancient", field: "Geometry", influence: 35 },
747
+ { id: 67, name: "Gerbert", era: "10th", field: "Arithmetic", influence: 0 },
748
+ { id: 68, name: "Alfred Clebsch", era: "19th", field: "Algebra", influence: 0 },
749
+ { id: 69, name: "Julius Plucker", era: "19th", field: "Geometry", influence: 0 },
750
+ { id: 70, name: "Hermann Grassmann", era: "19th", field: "Algebra", influence: 0 },
751
+ { id: 71, name: "Peter Dirichlet", era: "19th", field: "Number Theory", influence: 27 },
752
+ { id: 72, name: "Arthur Cayley", era: "19th", field: "Algebra", influence: 27 },
753
+ { id: 73, name: "Muhammed al-Khwārizmi", era: "9th", field: "Algebra", influence: 31 },
754
+ { id: 74, name: "Roger Cotes", era: "18th", field: "Analysis", influence: 0 },
755
+ { id: 75, name: "Abraham De Moivre", era: "17th-18th", field: "Probability", influence: 0 },
756
+ { id: 76, name: "George Boole", era: "19th", field: "Logic", influence: 54 },
757
+ { id: 77, name: "Karl Weierstrass", era: "19th", field: "Analysis", influence: 26 },
758
+ { id: 78, name: "Sophus Lie", era: "19th", field: "Algebra", influence: 0 },
759
+ { id: 79, name: "Nikolai Lobachevsky", era: "19th", field: "Geometry", influence: 45 },
760
+ { id: 80, name: "Ahmes", era: "Ancient", field: "Arithmetic", influence: 0 },
761
+ { id: 81, name: "Jean-Charles Borda", era: "18th", field: "Geometry", influence: 0 },
762
+ { id: 82, name: "Eugenio Beltrami", era: "19th", field: "Geometry", influence: 0 },
763
+ { id: 83, name: "Paolo Frisi", era: "18th", field: "Physics", influence: 0 },
764
+ { id: 84, name: "Evariste Galois", era: "19th", field: "Algebra", influence: 23 },
765
+ { id: 85, name: "Evangelista Torricelli", era: "17th", field: "Physics", influence: 0 },
766
+ { id: 86, name: "Jean-Étienne Montucla", era: "18th", field: "History", influence: 0 },
767
+ { id: 87, name: "Otto Hesse", era: "19th", field: "Algebra", influence: 0 },
768
+ { id: 88, name: "Jordanus de Nemore", era: "13th", field: "Mechanics", influence: 0 },
769
+ { id: 89, name: "Plato", era: "Ancient", field: "Philosophy", influence: 0 },
770
+ { id: 90, name: "Henri Poincare", era: "19th-20th", field: "Topology", influence: 20 },
771
+ { id: 91, name: "Jakob Steiner", era: "19th", field: "Geometry", influence: 38 },
772
+ { id: 92, name: "Edmond Halley", era: "17th-18th", field: "Astronomy", influence: 0 },
773
+ { id: 93, name: "Andre Ampere", era: "18th-19th", field: "Physics", influence: 0 },
774
+ { id: 94, name: "Guillaume L'Hospital", era: "17th-18th", field: "Calculus", influence: 0 },
775
+ { id: 95, name: "William Thomson", era: "19th", field: "Physics", influence: 0 },
776
+ { id: 96, name: "Boethius", era: "5th-6th", field: "Arithmetic", influence: 0 },
777
+ { id: 97, name: "Ehrenfried Tschirnhausen", era: "17th-18th", field: "Algebra", influence: 0 },
778
+ { id: 98, name: "Bhaskara II", era: "12th", field: "Algebra", influence: 0 },
779
+ { id: 99, name: "Eratosthenes", era: "Ancient", field: "Geometry", influence: 0 },
780
+ { id: 100, name: "Zeno of Elea", era: "Ancient", field: "Philosophy", influence: 0 }
781
+ ];
782
+
783
+ // Function to get a random color class
784
+ function getRandomColor() {
785
+ const colors = ['blue', 'indigo', 'purple', 'pink', 'red', 'orange', 'yellow', 'green', 'teal', 'cyan'];
786
+ return colors[Math.floor(Math.random() * colors.length)];
787
+ }
788
+
789
+ // Function to render mathematician cards
790
+ function renderMathematicians() {
791
+ const container = document.getElementById('mathematicians-container');
792
+ container.innerHTML = '';
793
+
794
+ mathematicians.forEach(math => {
795
+ const color = getRandomColor();
796
+ const card = document.createElement('div');
797
+ card.className = 'bg-white rounded-xl p-4 shadow-sm hover:shadow-md transition-all card-hover fade-in';
798
+ card.innerHTML = `
799
+ <div class="flex items-center mb-3">
800
+ <div class="w-10 h-10 bg-${color}-100 rounded-full flex items-center justify-center text-${color}-600 font-bold mr-3">
801
+ ${math.name.charAt(0)}
802
+ </div>
803
+ <div>
804
+ <h3 class="font-medium text-gray-800">${math.name}</h3>
805
+ <p class="text-xs text-gray-500">${math.era} century</p>
806
+ </div>
807
+ </div>
808
+ <div class="text-xs text-gray-600 mb-2">${math.field}</div>
809
+ <div class="flex justify-between items-center">
810
+ <div class="text-xs">
811
+ <span class="font-medium text-${color}-600">Influence:</span>
812
+ <span> ${math.influence}%</span>
813
+ </div>
814
+ <button class="text-xs bg-${color}-50 text-${color}-600 hover:bg-${color}-100 px-2 py-1 rounded-full transition-colors">
815
+ <i class="fas fa-arrow-right text-xs"></i>
816
+ </button>
817
+ </div>
818
+ `;
819
+ container.appendChild(card);
820
+ });
821
+ }
822
+
823
+ // Initialize the page
824
+ document.addEventListener('DOMContentLoaded', () => {
825
+ renderMathematicians();
826
+
827
+ // Add animation to cards as they appear
828
+ const cards = document.querySelectorAll('.fade-in');
829
+ cards.forEach((card, index) => {
830
+ card.style.animationDelay = `${index * 0.05}s`;
831
+ });
832
+
833
+ // Simple search functionality
834
+ const searchInput = document.querySelector('input[type="text"]');
835
+ searchInput.addEventListener('input', (e) => {
836
+ const searchTerm = e.target.value.toLowerCase();
837
+ const filtered = mathematicians.filter(math =>
838
+ math.name.toLowerCase().includes(searchTerm) ||
839
+ math.field.toLowerCase().includes(searchTerm) ||
840
+ math.era.toLowerCase().includes(searchTerm)
841
+ );
842
+
843
+ // Re-render with filtered results
844
+ if (searchTerm.length > 0) {
845
+ const container = document.getElementById('mathematicians-container');
846
+ container.innerHTML = '';
847
+
848
+ if (filtered.length === 0) {
849
+ container.innerHTML = `
850
+ <div class="col-span-full text-center py-12">
851
+ <i class="fas fa-search text-4xl text-gray-300 mb-4"></i>
852
+ <h3 class="text-lg font-medium text-gray-500">No mathematicians found</h3>
853
+ <p class="text-gray-400">Try a different search term</p>
854
+ </div>
855
+ `;
856
+ } else {
857
+ filtered.forEach(math => {
858
+ const color = getRandomColor();
859
+ const card = document.createElement('div');
860
+ card.className = 'bg-white rounded-xl p-4 shadow-sm hover:shadow-md transition-all card-hover fade-in';
861
+ card.innerHTML = `
862
+ <div class="flex items-center mb-3">
863
+ <div class="w-10 h-10 bg-${color}-100 rounded-full flex items-center justify-center text-${color}-600 font-bold mr-3">
864
+ ${math.name.charAt(0)}
865
+ </div>
866
+ <div>
867
+ <h3 class="font-medium text-gray-800">${math.name}</h3>
868
+ <p class="text-xs text-gray-500">${math.era} century</p>
869
+ </div>
870
+ </div>
871
+ <div class="text-xs text-gray-600 mb-2">${math.field}</div>
872
+ <div class="flex justify-between items-center">
873
+ <div class="text-xs">
874
+ <span class="font-medium text-${color}-600">Influence:</span>
875
+ <span> ${math.influence}%</span>
876
+ </div>
877
+ <button class="text-xs bg-${color}-50 text-${color}-600 hover:bg-${color}-100 px-2 py-1 rounded-full transition-colors">
878
+ <i class="fas fa-arrow-right text-xs"></i>
879
+ </button>
880
+ </div>
881
+ `;
882
+ container.appendChild(card);
883
+ });
884
+ }
885
+ } else {
886
+ renderMathematicians();
887
+ }
888
+ });
889
+ });
890
+ </script>
891
+ <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=agentcyone/knowledge-whisper" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
892
+ </html>