AashishAIHub commited on
Commit
d6b424d
Β·
1 Parent(s): a840673

Fix: Add missing GenAI-AgenticAI/index.html (was never tracked in git)

Browse files
Files changed (1) hide show
  1. GenAI-AgenticAI/index.html +469 -0
GenAI-AgenticAI/index.html ADDED
@@ -0,0 +1,469 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>GenAI & Agentic AI Masterclass | DataScience</title>
7
+ <link rel="preconnect" href="https://fonts.googleapis.com">
8
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
9
+ <style>
10
+ :root {
11
+ --bg: #0d1117;
12
+ --surface: #161b22;
13
+ --surface2: #21262d;
14
+ --border: #30363d;
15
+ --text: #e6edf3;
16
+ --text-muted: #8b949e;
17
+ --accent: #58a6ff;
18
+ --accent2: #f78166;
19
+ --green: #3fb950;
20
+ --purple: #d2a8ff;
21
+ --orange: #ffa657;
22
+ --yellow: #e3b341;
23
+
24
+ /* categories */
25
+ --cat-foundation: #58a6ff;
26
+ --cat-core: #3fb950;
27
+ --cat-agent: #d2a8ff;
28
+ --cat-production: #ffa657;
29
+ }
30
+
31
+ * { margin: 0; padding: 0; box-sizing: border-box; }
32
+
33
+ body {
34
+ background: var(--bg);
35
+ color: var(--text);
36
+ font-family: 'Inter', system-ui, sans-serif;
37
+ min-height: 100vh;
38
+ }
39
+
40
+ /* ── NAV ── */
41
+ nav {
42
+ background: var(--surface);
43
+ border-bottom: 1px solid var(--border);
44
+ padding: 14px 32px;
45
+ display: flex;
46
+ align-items: center;
47
+ gap: 16px;
48
+ position: sticky;
49
+ top: 0;
50
+ z-index: 100;
51
+ }
52
+ nav a { color: var(--text-muted); text-decoration: none; font-size: 0.9rem; }
53
+ nav a:hover { color: var(--text); }
54
+ nav .sep { color: var(--border); }
55
+ nav .brand {
56
+ font-weight: 700;
57
+ font-size: 1.1rem;
58
+ background: linear-gradient(90deg, #58a6ff, #d2a8ff);
59
+ -webkit-background-clip: text;
60
+ -webkit-text-fill-color: transparent;
61
+ }
62
+ nav .nav-search {
63
+ margin-left: auto;
64
+ background: var(--surface2);
65
+ border: 1px solid var(--border);
66
+ border-radius: 8px;
67
+ padding: 6px 14px;
68
+ color: var(--text);
69
+ font-size: 0.85rem;
70
+ width: 220px;
71
+ outline: none;
72
+ }
73
+ nav .nav-search:focus { border-color: var(--accent); }
74
+
75
+ /* ── HERO ── */
76
+ .hero {
77
+ text-align: center;
78
+ padding: 64px 32px 48px;
79
+ background: radial-gradient(ellipse at top, rgba(88,166,255,0.06) 0%, transparent 60%);
80
+ }
81
+ .hero h1 {
82
+ font-size: clamp(1.8rem, 4vw, 3rem);
83
+ font-weight: 800;
84
+ background: linear-gradient(135deg, #58a6ff 0%, #d2a8ff 50%, #ffa657 100%);
85
+ -webkit-background-clip: text;
86
+ -webkit-text-fill-color: transparent;
87
+ margin-bottom: 14px;
88
+ }
89
+ .hero p {
90
+ color: var(--text-muted);
91
+ font-size: 1.1rem;
92
+ max-width: 600px;
93
+ margin: 0 auto 28px;
94
+ }
95
+ .hero-stats {
96
+ display: flex;
97
+ justify-content: center;
98
+ gap: 32px;
99
+ flex-wrap: wrap;
100
+ }
101
+ .hero-stat { text-align: center; }
102
+ .hero-stat .num { font-size: 1.8rem; font-weight: 700; color: var(--accent); }
103
+ .hero-stat .lbl { font-size: 0.8rem; color: var(--text-muted); }
104
+
105
+ /* ── FILTER TABS ── */
106
+ .filter-bar {
107
+ display: flex;
108
+ gap: 8px;
109
+ padding: 0 32px 28px;
110
+ flex-wrap: wrap;
111
+ justify-content: center;
112
+ }
113
+ .filter-btn {
114
+ background: var(--surface2);
115
+ border: 1px solid var(--border);
116
+ border-radius: 20px;
117
+ padding: 6px 18px;
118
+ color: var(--text-muted);
119
+ cursor: pointer;
120
+ font-size: 0.85rem;
121
+ font-family: inherit;
122
+ transition: all 0.2s;
123
+ }
124
+ .filter-btn:hover, .filter-btn.active {
125
+ border-color: var(--accent);
126
+ color: var(--accent);
127
+ background: rgba(88,166,255,0.1);
128
+ }
129
+
130
+ /* ── DASHBOARD GRID ── */
131
+ #dashboard {
132
+ display: none;
133
+ padding: 0 32px 60px;
134
+ max-width: 1300px;
135
+ margin: 0 auto;
136
+ }
137
+ #dashboard.active { display: block; }
138
+
139
+ .grid {
140
+ display: grid;
141
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
142
+ gap: 18px;
143
+ }
144
+
145
+ .card {
146
+ background: var(--surface);
147
+ border: 1px solid var(--border);
148
+ border-radius: 14px;
149
+ padding: 22px;
150
+ cursor: pointer;
151
+ transition: transform 0.2s, border-color 0.2s, box-shadow 0.2s;
152
+ position: relative;
153
+ overflow: hidden;
154
+ }
155
+ .card::before {
156
+ content: '';
157
+ position: absolute;
158
+ inset: 0;
159
+ opacity: 0;
160
+ transition: opacity 0.2s;
161
+ background: radial-gradient(ellipse at top left, rgba(88,166,255,0.06), transparent 70%);
162
+ }
163
+ .card:hover { transform: translateY(-4px); box-shadow: 0 12px 32px rgba(0,0,0,0.4); }
164
+ .card:hover::before { opacity: 1; }
165
+
166
+ .card-badge {
167
+ display: inline-block;
168
+ padding: 3px 10px;
169
+ border-radius: 12px;
170
+ font-size: 0.72rem;
171
+ font-weight: 600;
172
+ text-transform: uppercase;
173
+ letter-spacing: 0.05em;
174
+ margin-bottom: 12px;
175
+ }
176
+ .cat-foundation .card-badge { background: rgba(88,166,255,0.15); color: var(--cat-foundation); }
177
+ .cat-foundation:hover { border-color: var(--cat-foundation); }
178
+ .cat-core .card-badge { background: rgba(63,185,80,0.15); color: var(--cat-core); }
179
+ .cat-core:hover { border-color: var(--cat-core); }
180
+ .cat-agent .card-badge { background: rgba(210,168,255,0.15); color: var(--cat-agent); }
181
+ .cat-agent:hover { border-color: var(--cat-agent); }
182
+ .cat-production .card-badge{ background: rgba(255,166,87,0.15); color: var(--cat-production); }
183
+ .cat-production:hover { border-color: var(--cat-production); }
184
+
185
+ .card-icon { font-size: 2rem; margin-bottom: 10px; display: block; }
186
+ .card h3 { font-size: 1.05rem; font-weight: 600; margin-bottom: 6px; }
187
+ .card p { font-size: 0.85rem; color: var(--text-muted); line-height: 1.5; }
188
+ .card-arrow {
189
+ position: absolute;
190
+ right: 18px; top: 50%;
191
+ transform: translateY(-50%);
192
+ color: var(--border);
193
+ font-size: 1.2rem;
194
+ transition: color 0.2s, transform 0.2s;
195
+ }
196
+ .card:hover .card-arrow { color: var(--text-muted); transform: translateY(-50%) translateX(4px); }
197
+
198
+ /* ── MODULE VIEW ── */
199
+ #modulesContainer { max-width: 1100px; margin: 0 auto; padding: 0 32px 60px; }
200
+ .module { display: none; }
201
+ .module.active { display: block; }
202
+
203
+ .btn-back {
204
+ background: var(--surface2);
205
+ border: 1px solid var(--border);
206
+ color: var(--text-muted);
207
+ padding: 8px 18px;
208
+ border-radius: 8px;
209
+ cursor: pointer;
210
+ font-size: 0.9rem;
211
+ font-family: inherit;
212
+ margin-bottom: 28px;
213
+ transition: all 0.2s;
214
+ }
215
+ .btn-back:hover { border-color: var(--accent); color: var(--accent); }
216
+
217
+ .module header { margin-bottom: 28px; }
218
+ .module header h1 { font-size: 1.8rem; font-weight: 700; }
219
+ .module header .subtitle { color: var(--text-muted); margin-top: 6px; }
220
+
221
+ /* ── TABS ── */
222
+ .tabs {
223
+ display: flex;
224
+ gap: 4px;
225
+ border-bottom: 1px solid var(--border);
226
+ margin-bottom: 28px;
227
+ }
228
+ .tab-btn {
229
+ background: none;
230
+ border: none;
231
+ padding: 10px 20px;
232
+ color: var(--text-muted);
233
+ cursor: pointer;
234
+ font-size: 0.9rem;
235
+ font-family: inherit;
236
+ border-bottom: 2px solid transparent;
237
+ margin-bottom: -1px;
238
+ transition: all 0.2s;
239
+ }
240
+ .tab-btn:hover { color: var(--text); }
241
+ .tab-btn.active { color: var(--accent); border-bottom-color: var(--accent); }
242
+ .tab { display: none; }
243
+ .tab.active { display: block; }
244
+
245
+ /* ── CONTENT STYLES ── */
246
+ .section { max-width: 860px; }
247
+ .section h2 { font-size: 1.4rem; font-weight: 700; margin-bottom: 18px; color: var(--text); }
248
+ .section h3 { font-size: 1.05rem; font-weight: 600; color: var(--accent); margin: 24px 0 10px; }
249
+ .section p { color: var(--text-muted); line-height: 1.7; margin-bottom: 12px; }
250
+ .section strong { color: var(--text); }
251
+ .section code { background: var(--surface2); border: 1px solid var(--border); padding: 2px 6px; border-radius: 4px; font-family: 'JetBrains Mono', monospace; font-size: 0.85em; color: var(--orange); }
252
+
253
+ table { width: 100%; border-collapse: collapse; margin: 16px 0; font-size: 0.88rem; }
254
+ th { background: var(--surface2); color: var(--text-muted); text-align: left; padding: 10px 14px; border-bottom: 1px solid var(--border); font-weight: 600; }
255
+ td { padding: 10px 14px; border-bottom: 1px solid var(--border); color: var(--text-muted); vertical-align: top; }
256
+ tr:last-child td { border-bottom: none; }
257
+ td strong { color: var(--text); }
258
+
259
+ .info-box {
260
+ background: rgba(88,166,255,0.06);
261
+ border: 1px solid rgba(88,166,255,0.2);
262
+ border-radius: 10px;
263
+ padding: 18px;
264
+ margin-bottom: 24px;
265
+ }
266
+ .box-title { font-weight: 700; color: var(--accent); margin-bottom: 8px; }
267
+ .box-content { color: var(--text-muted); line-height: 1.6; }
268
+
269
+ .callout { border-radius: 8px; padding: 14px 18px; margin: 16px 0; }
270
+ .callout.tip { background: rgba(63,185,80,0.06); border-left: 3px solid var(--green); }
271
+ .callout.warning { background: rgba(255,166,87,0.06); border-left: 3px solid var(--orange); }
272
+ .callout.insight { background: rgba(210,168,255,0.06); border-left: 3px solid var(--purple); }
273
+ .callout-title { font-weight: 600; margin-bottom: 6px; }
274
+ .callout.tip .callout-title { color: var(--green); }
275
+ .callout.warning .callout-title { color: var(--orange); }
276
+ .callout.insight .callout-title { color: var(--purple); }
277
+
278
+ .formula {
279
+ background: var(--surface2);
280
+ border: 1px solid var(--border);
281
+ border-radius: 8px;
282
+ padding: 14px 20px;
283
+ font-family: 'JetBrains Mono', monospace;
284
+ font-size: 0.92rem;
285
+ color: var(--yellow);
286
+ margin: 16px 0;
287
+ overflow-x: auto;
288
+ }
289
+
290
+ .comparison { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin: 16px 0; }
291
+ .comparison-bad { background: rgba(248,81,73,0.06); border: 1px solid rgba(248,81,73,0.2); border-radius:8px; padding:14px; color:var(--text-muted); }
292
+ .comparison-good { background: rgba(63,185,80,0.06); border: 1px solid rgba(63,185,80,0.2); border-radius:8px; padding:14px; color:var(--text-muted); }
293
+
294
+ .code-block {
295
+ background: #010409;
296
+ border: 1px solid var(--border);
297
+ border-radius: 10px;
298
+ padding: 20px;
299
+ font-family: 'JetBrains Mono', monospace;
300
+ font-size: 0.83rem;
301
+ line-height: 1.65;
302
+ overflow-x: auto;
303
+ margin: 16px 0;
304
+ white-space: pre-wrap;
305
+ color: #e6edf3;
306
+ }
307
+ .code-block .keyword { color: #ff7b72; }
308
+ .code-block .string { color: #a5d6ff; }
309
+ .code-block .comment { color: #8b949e; font-style: italic; }
310
+ .code-block .function { color: #d2a8ff; }
311
+ .code-block .number { color: #79c0ff; }
312
+ .code-block .preprocessor { color: #ffa657; }
313
+
314
+ .interview-box {
315
+ background: var(--surface);
316
+ border: 1px solid var(--border);
317
+ border-radius: 10px;
318
+ padding: 18px;
319
+ margin-bottom: 14px;
320
+ }
321
+ .interview-box strong { color: var(--accent); display: block; margin-bottom: 8px; }
322
+ .interview-box p { color: var(--text-muted); line-height: 1.6; }
323
+
324
+ /* ── NO RESULTS ── */
325
+ .no-results {
326
+ text-align: center;
327
+ padding: 60px;
328
+ color: var(--text-muted);
329
+ display: none;
330
+ }
331
+
332
+ /* ── RESPONSIVE ── */
333
+ @media (max-width: 640px) {
334
+ nav { padding: 12px 16px; }
335
+ .hero { padding: 40px 16px 32px; }
336
+ .filter-bar { padding: 0 16px 20px; }
337
+ #dashboard, #modulesContainer { padding: 0 16px 40px; }
338
+ .comparison { grid-template-columns: 1fr; }
339
+ }
340
+ </style>
341
+ </head>
342
+ <body>
343
+
344
+ <nav>
345
+ <a href="../index.html">🏠 Home</a>
346
+ <span class="sep">β€Ί</span>
347
+ <span class="brand">GenAI &amp; Agentic AI</span>
348
+ <input class="nav-search" type="search" id="searchInput" placeholder="πŸ” Search modules…" oninput="filterModules(this.value)">
349
+ </nav>
350
+
351
+ <div id="dashboard" class="active">
352
+ <div class="hero">
353
+ <h1>πŸ€– GenAI &amp; Agentic AI Masterclass</h1>
354
+ <p>From LLM fundamentals to production-ready agentic systems β€” complete theory, code, and interview prep.</p>
355
+ <div class="hero-stats">
356
+ <div class="hero-stat"><div class="num" id="statModules">13</div><div class="lbl">Modules</div></div>
357
+ <div class="hero-stat"><div class="num">3</div><div class="lbl">Tabs / Module</div></div>
358
+ <div class="hero-stat"><div class="num">∞</div><div class="lbl">Code Examples</div></div>
359
+ </div>
360
+ </div>
361
+
362
+ <div class="filter-bar">
363
+ <button class="filter-btn active" onclick="setFilter('All', this)">All</button>
364
+ <button class="filter-btn" onclick="setFilter('Foundation', this)">🧱 Foundation</button>
365
+ <button class="filter-btn" onclick="setFilter('Core Tools', this)">πŸ›  Core Tools</button>
366
+ <button class="filter-btn" onclick="setFilter('Core', this)">βš™οΈ Core</button>
367
+ <button class="filter-btn" onclick="setFilter('Agentic', this)">πŸ€– Agentic</button>
368
+ <button class="filter-btn" onclick="setFilter('Production', this)">πŸš€ Production</button>
369
+ </div>
370
+
371
+ <div style="max-width:1300px;margin:0 auto;padding:0 32px;">
372
+ <div class="grid" id="moduleGrid"></div>
373
+ <div class="no-results" id="noResults">No modules match your search.</div>
374
+ </div>
375
+ </div>
376
+
377
+ <div id="modulesContainer"></div>
378
+
379
+ <script src="app.js"></script>
380
+ <script>
381
+ let activeFilter = 'All';
382
+
383
+ function renderDashboard(query = '') {
384
+ const grid = document.getElementById('moduleGrid');
385
+ const noResults = document.getElementById('noResults');
386
+ const q = query.toLowerCase().trim();
387
+
388
+ const filtered = modules.filter(m => {
389
+ const matchFilter = activeFilter === 'All' || m.category === activeFilter;
390
+ const matchSearch = !q || m.title.toLowerCase().includes(q) || m.desc.toLowerCase().includes(q) || m.category.toLowerCase().includes(q);
391
+ return matchFilter && matchSearch;
392
+ });
393
+
394
+ document.getElementById('statModules').textContent = modules.length;
395
+
396
+ if (filtered.length === 0) {
397
+ grid.innerHTML = '';
398
+ noResults.style.display = 'block';
399
+ return;
400
+ }
401
+ noResults.style.display = 'none';
402
+
403
+ grid.innerHTML = filtered.map(m => `
404
+ <div class="card ${m.catClass}" onclick="openModule('${m.id}')">
405
+ <span class="card-icon">${m.icon}</span>
406
+ <span class="card-badge">${m.category}</span>
407
+ <h3>${m.title}</h3>
408
+ <p>${m.desc}</p>
409
+ <span class="card-arrow">β†’</span>
410
+ </div>
411
+ `).join('');
412
+ }
413
+
414
+ function setFilter(cat, btn) {
415
+ activeFilter = cat;
416
+ document.querySelectorAll('.filter-btn').forEach(b => b.classList.remove('active'));
417
+ btn.classList.add('active');
418
+ renderDashboard(document.getElementById('searchInput').value);
419
+ }
420
+
421
+ function filterModules(q) {
422
+ renderDashboard(q);
423
+ }
424
+
425
+ function openModule(id) {
426
+ const m = modules.find(x => x.id === id);
427
+ const c = MODULE_CONTENT[id] || {};
428
+
429
+ document.getElementById('dashboard').classList.remove('active');
430
+
431
+ const container = document.getElementById('modulesContainer');
432
+ container.innerHTML = `
433
+ <div class="module active" id="module-${id}">
434
+ <button class="btn-back" onclick="showDashboard()">← Back to Dashboard</button>
435
+ <header>
436
+ <h1>${m.icon} ${m.title}</h1>
437
+ <p class="subtitle">${m.desc}</p>
438
+ </header>
439
+ <div class="tabs">
440
+ <button class="tab-btn active" onclick="switchTab(event,'concepts-${id}','${id}')">πŸ“– Key Concepts</button>
441
+ <button class="tab-btn" onclick="switchTab(event,'code-${id}','${id}')">πŸ’» Code Examples</button>
442
+ <button class="tab-btn" onclick="switchTab(event,'interview-${id}','${id}')">🎯 Interview Questions</button>
443
+ </div>
444
+ <div id="concepts-${id}" class="tab active">${c.concepts || '<p style="color:var(--text-muted);padding:40px 0">Content coming soon.</p>'}</div>
445
+ <div id="code-${id}" class="tab">${c.code || '<p style="color:var(--text-muted);padding:40px 0">Code examples coming soon.</p>'}</div>
446
+ <div id="interview-${id}" class="tab">${c.interview || '<p style="color:var(--text-muted);padding:40px 0">Interview questions coming soon.</p>'}</div>
447
+ </div>`;
448
+
449
+ window.scrollTo({ top: 0, behavior: 'smooth' });
450
+ }
451
+
452
+ function showDashboard() {
453
+ document.getElementById('modulesContainer').innerHTML = '';
454
+ document.getElementById('dashboard').classList.add('active');
455
+ }
456
+
457
+ function switchTab(event, tabId, moduleId) {
458
+ const mod = document.getElementById('module-' + moduleId);
459
+ mod.querySelectorAll('.tab').forEach(t => t.classList.remove('active'));
460
+ mod.querySelectorAll('.tab-btn').forEach(b => b.classList.remove('active'));
461
+ document.getElementById(tabId).classList.add('active');
462
+ event.target.classList.add('active');
463
+ }
464
+
465
+ // Init
466
+ renderDashboard();
467
+ </script>
468
+ </body>
469
+ </html>