infinite-agents-public/index.html

687 lines
24 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Infinite Agents - Demo Dashboard</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
:root {
--primary: #6366f1;
--primary-dark: #4f46e5;
--secondary: #8b5cf6;
--success: #10b981;
--warning: #f59e0b;
--danger: #ef4444;
--dark: #1e293b;
--dark-light: #334155;
--light: #f8fafc;
--border: #e2e8f0;
--text: #0f172a;
--text-muted: #64748b;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', sans-serif;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: var(--text);
line-height: 1.6;
min-height: 100vh;
}
.container {
max-width: 1400px;
margin: 0 auto;
padding: 20px;
}
/* Header */
header {
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px);
padding: 30px 0;
margin-bottom: 40px;
border-radius: 20px;
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.1);
}
.header-content {
text-align: center;
}
h1 {
font-size: 3rem;
font-weight: 800;
background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
margin-bottom: 10px;
}
.subtitle {
font-size: 1.2rem;
color: var(--text-muted);
margin-bottom: 20px;
}
/* Stats Bar */
.stats-bar {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
margin-bottom: 40px;
}
.stat-card {
background: white;
padding: 25px;
border-radius: 15px;
text-align: center;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.stat-card:hover {
transform: translateY(-5px);
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);
}
.stat-number {
font-size: 2.5rem;
font-weight: 800;
background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.stat-label {
color: var(--text-muted);
font-size: 0.9rem;
text-transform: uppercase;
letter-spacing: 1px;
margin-top: 5px;
}
/* Search & Filter */
.controls {
background: white;
padding: 25px;
border-radius: 15px;
margin-bottom: 30px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
}
.search-box {
display: flex;
gap: 15px;
margin-bottom: 20px;
}
#searchInput {
flex: 1;
padding: 15px 20px;
border: 2px solid var(--border);
border-radius: 10px;
font-size: 1rem;
transition: border-color 0.3s ease;
}
#searchInput:focus {
outline: none;
border-color: var(--primary);
}
.filter-buttons {
display: flex;
gap: 10px;
flex-wrap: wrap;
}
.filter-btn {
padding: 10px 20px;
border: 2px solid var(--border);
background: white;
border-radius: 25px;
cursor: pointer;
transition: all 0.3s ease;
font-weight: 600;
font-size: 0.9rem;
}
.filter-btn:hover {
border-color: var(--primary);
color: var(--primary);
}
.filter-btn.active {
background: var(--primary);
color: white;
border-color: var(--primary);
}
/* Category Sections */
.category-section {
margin-bottom: 50px;
}
.category-header {
display: flex;
align-items: center;
gap: 15px;
margin-bottom: 25px;
padding: 20px;
background: white;
border-radius: 15px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
}
.category-icon {
width: 50px;
height: 50px;
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.5rem;
background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%);
}
.category-title {
flex: 1;
}
.category-title h2 {
font-size: 1.8rem;
color: var(--text);
margin-bottom: 5px;
}
.category-title p {
color: var(--text-muted);
font-size: 0.95rem;
}
.category-count {
background: var(--light);
padding: 8px 16px;
border-radius: 20px;
font-weight: 600;
color: var(--primary);
}
/* Demo Grid */
.demo-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 25px;
}
.demo-card {
background: white;
border-radius: 15px;
overflow: hidden;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
transition: all 0.3s ease;
cursor: pointer;
position: relative;
}
.demo-card:hover {
transform: translateY(-8px);
box-shadow: 0 12px 30px rgba(0, 0, 0, 0.2);
}
.demo-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4px;
background: linear-gradient(90deg, var(--primary) 0%, var(--secondary) 100%);
}
.demo-header {
padding: 20px;
background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);
}
.demo-number {
display: inline-block;
background: var(--primary);
color: white;
padding: 4px 12px;
border-radius: 15px;
font-size: 0.8rem;
font-weight: 600;
margin-bottom: 10px;
}
.demo-title {
font-size: 1.2rem;
font-weight: 700;
color: var(--text);
margin-bottom: 8px;
}
.demo-description {
color: var(--text-muted);
font-size: 0.9rem;
line-height: 1.5;
}
.demo-footer {
padding: 15px 20px;
display: flex;
justify-content: space-between;
align-items: center;
border-top: 1px solid var(--border);
}
.demo-type {
font-size: 0.85rem;
color: var(--text-muted);
font-weight: 500;
}
.demo-link {
color: var(--primary);
text-decoration: none;
font-weight: 600;
display: flex;
align-items: center;
gap: 5px;
transition: gap 0.3s ease;
}
.demo-link:hover {
gap: 10px;
}
/* Footer */
footer {
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px);
padding: 30px;
margin-top: 50px;
border-radius: 20px;
text-align: center;
box-shadow: 0 -5px 20px rgba(0, 0, 0, 0.1);
}
footer p {
color: var(--text-muted);
margin-bottom: 10px;
}
.github-link {
color: var(--primary);
text-decoration: none;
font-weight: 600;
}
/* Responsive */
@media (max-width: 768px) {
h1 {
font-size: 2rem;
}
.demo-grid {
grid-template-columns: 1fr;
}
.stats-bar {
grid-template-columns: repeat(2, 1fr);
}
}
/* Loading State */
.loading {
text-align: center;
padding: 50px;
color: white;
font-size: 1.2rem;
}
/* Hidden */
.hidden {
display: none !important;
}
</style>
</head>
<body>
<div class="container">
<header>
<div class="header-content">
<h1>🤖 Infinite Agents</h1>
<p class="subtitle">Progressive AI-Generated Demo Gallery</p>
<p style="color: var(--text-muted); font-size: 0.9rem;">
Exploring web-enhanced infinite agentic loops for progressive learning
</p>
</div>
</header>
<!-- Statistics -->
<div class="stats-bar">
<div class="stat-card">
<div class="stat-number" id="totalDemos">73</div>
<div class="stat-label">Total Demos</div>
</div>
<div class="stat-card">
<div class="stat-number">4</div>
<div class="stat-label">Categories</div>
</div>
<div class="stat-card">
<div class="stat-number" id="threejsCount">5</div>
<div class="stat-label">Three.js 3D</div>
</div>
<div class="stat-card">
<div class="stat-number" id="uiCount">65</div>
<div class="stat-label">UI Components</div>
</div>
</div>
<!-- Search & Filter Controls -->
<div class="controls">
<div class="search-box">
<input type="text" id="searchInput" placeholder="🔍 Search demos by name, type, or technique...">
</div>
<div class="filter-buttons">
<button class="filter-btn active" data-filter="all">All Demos</button>
<button class="filter-btn" data-filter="threejs">Three.js 3D</button>
<button class="filter-btn" data-filter="sdg">SDG Networks</button>
<button class="filter-btn" data-filter="ui-single">UI Hybrid (Single File)</button>
<button class="filter-btn" data-filter="ui-modular">UI Hybrid (Modular)</button>
</div>
</div>
<!-- Three.js Category -->
<div class="category-section" data-category="threejs">
<div class="category-header">
<div class="category-icon">🎨</div>
<div class="category-title">
<h2>Three.js 3D Visualizations</h2>
<p>Progressive WebGL/WebGPU visualizations with foundation → expert learning path</p>
</div>
<div class="category-count">5 demos</div>
</div>
<div class="demo-grid" id="threejs-grid"></div>
</div>
<!-- SDG Networks Category -->
<div class="category-section" data-category="sdg">
<div class="category-header">
<div class="category-icon">🌍</div>
<div class="category-title">
<h2>SDG Network Visualizations</h2>
<p>Force-directed network graphs with API discovery and progressive D3.js techniques</p>
</div>
<div class="category-count">3 demos</div>
</div>
<div class="demo-grid" id="sdg-grid"></div>
</div>
<!-- UI Hybrid Single File Category -->
<div class="category-section" data-category="ui-single">
<div class="category-header">
<div class="category-icon"></div>
<div class="category-title">
<h2>Themed Hybrid UI Components</h2>
<p>Self-contained HTML components with unique themes and multi-functional design</p>
</div>
<div class="category-count">60 demos</div>
</div>
<div class="demo-grid" id="ui-single-grid"></div>
</div>
<!-- UI Hybrid Modular Category -->
<div class="category-section" data-category="ui-modular">
<div class="category-header">
<div class="category-icon">🧩</div>
<div class="category-title">
<h2>Modular UI Components</h2>
<p>Professional 3-file architecture (HTML/CSS/JS) with separation of concerns</p>
</div>
<div class="category-count">5 demos</div>
</div>
<div class="demo-grid" id="ui-modular-grid"></div>
</div>
<footer>
<p><strong>Infinite Agents</strong> - Web-Enhanced Infinite Agentic Loop Pattern</p>
<p>Generated with parallel AI agents using progressive learning from web sources</p>
<p style="margin-top: 15px;">
<a href="CLAUDE.md" class="github-link">📖 Documentation</a>
<a href="ai_docs/threejs_infinite_loop_manual.md" class="github-link">📚 Three.js Manual</a>
<a href="README.md" class="github-link"> About</a>
</p>
</footer>
</div>
<script>
// Demo Data
const demos = {
threejs: [
{
number: 1,
title: 'Rotating Geometries',
description: 'Foundation: Scene setup, camera, renderer, and basic geometric objects with rotation animation',
path: 'threejs_viz/threejs_viz_1.html',
type: 'Foundation',
techniques: ['Scene Setup', 'PerspectiveCamera', 'WebGLRenderer', 'Basic Animation']
},
{
number: 2,
title: 'Animated Lighting',
description: 'Foundation: Dynamic lighting with orbiting colored point lights and material interaction',
path: 'threejs_viz/threejs_viz_2.html',
type: 'Foundation',
techniques: ['PointLight', 'AmbientLight', 'MeshStandardMaterial', 'Light Animation']
},
{
number: 3,
title: 'Particle Universe',
description: 'Foundation: 10,000 GPU-accelerated particles with custom shaders and BufferGeometry',
path: 'threejs_viz/threejs_viz_3.html',
type: 'Foundation',
techniques: ['BufferGeometry', 'Custom Shaders', 'Points', 'GPU Particles']
},
{
number: 4,
title: 'Material Gallery',
description: 'Foundation: Showcase of 6 different Three.js material types and their properties',
path: 'threejs_viz/threejs_viz_4.html',
type: 'Foundation',
techniques: ['Materials', 'PBR', 'Lighting', 'MeshStandardMaterial']
},
{
number: 5,
title: 'Geometry Morphing',
description: 'Foundation: Dynamic geometry transformation with easing and choreographed animation',
path: 'threejs_viz/threejs_viz_5.html',
type: 'Foundation',
techniques: ['Transformation', 'Easing', 'Animation', 'Morphing']
}
],
sdg: [
{
number: 1,
title: 'SDG Network Viz 1',
description: 'Force-directed network graph with API-sourced SDG data',
path: 'sdg_viz/sdg_viz_1.html',
type: 'Network',
techniques: ['D3.js', 'Force Simulation', 'API Integration']
},
{
number: 2,
title: 'SDG Network Viz 2',
description: 'Enhanced network visualization with interactive node exploration',
path: 'sdg_viz/sdg_viz_2.html',
type: 'Network',
techniques: ['D3.js', 'Interactivity', 'Data Binding']
},
{
number: 3,
title: 'SDG Network Viz 3',
description: 'Advanced network with progressive enhancement techniques',
path: 'sdg_viz/sdg_viz_3.html',
type: 'Network',
techniques: ['D3.js', 'Progressive Enhancement', 'Complex Networks']
}
],
uiSingle: [],
uiModular: [
{
number: 1,
title: 'UI Hybrid 1 (Modular)',
description: 'Professional 3-file architecture with separated HTML, CSS, and JavaScript',
path: 'src_group/ui_hybrid_1/index.html',
type: 'Modular',
techniques: ['Separation of Concerns', 'Modular Architecture']
},
{
number: 2,
title: 'UI Hybrid 2 (Modular)',
description: 'Themed component with professional file organization',
path: 'src_group/ui_hybrid_2/index.html',
type: 'Modular',
techniques: ['File Organization', 'Best Practices']
},
{
number: 3,
title: 'UI Hybrid 3 (Modular)',
description: 'Multi-functional component with clean architecture',
path: 'src_group/ui_hybrid_3/index.html',
type: 'Modular',
techniques: ['Clean Code', 'Maintainability']
},
{
number: 4,
title: 'UI Hybrid 4 (Modular)',
description: 'Advanced themed component with production-ready structure',
path: 'src_group/ui_hybrid_4/index.html',
type: 'Modular',
techniques: ['Production Ready', 'Team Collaboration']
},
{
number: 5,
title: 'UI Hybrid 5 (Modular)',
description: 'Sophisticated UI with separated concerns and scalable design',
path: 'src_group/ui_hybrid_5/index.html',
type: 'Modular',
techniques: ['Scalability', 'Professional Architecture']
}
]
};
// Generate UI Single File demos (src/ and src_infinite/)
for (let i = 1; i <= 35; i++) {
demos.uiSingle.push({
number: i,
title: `UI Hybrid ${i}`,
description: 'Themed hybrid UI component combining multiple interface elements',
path: `src/ui_hybrid_${i}.html`,
type: 'Single File',
techniques: ['Themed Design', 'Hybrid Components']
});
}
for (let i = 1; i <= 25; i++) {
demos.uiSingle.push({
number: i + 35,
title: `UI Hybrid ${i} (Infinite)`,
description: 'Infinite mode generated themed component',
path: `src_infinite/ui_hybrid_${i}.html`,
type: 'Single File (Infinite)',
techniques: ['Infinite Generation', 'Progressive Complexity']
});
}
// Render demos
function renderDemoCard(demo, category) {
return `
<div class="demo-card" data-category="${category}" data-title="${demo.title.toLowerCase()}" data-type="${demo.type.toLowerCase()}">
<div class="demo-header">
<span class="demo-number">#${demo.number}</span>
<h3 class="demo-title">${demo.title}</h3>
<p class="demo-description">${demo.description}</p>
</div>
<div class="demo-footer">
<span class="demo-type">${demo.type}</span>
<a href="${demo.path}" class="demo-link" target="_blank">
View Demo →
</a>
</div>
</div>
`;
}
// Initialize grids
document.getElementById('threejs-grid').innerHTML = demos.threejs.map(d => renderDemoCard(d, 'threejs')).join('');
document.getElementById('sdg-grid').innerHTML = demos.sdg.map(d => renderDemoCard(d, 'sdg')).join('');
document.getElementById('ui-single-grid').innerHTML = demos.uiSingle.map(d => renderDemoCard(d, 'ui-single')).join('');
document.getElementById('ui-modular-grid').innerHTML = demos.uiModular.map(d => renderDemoCard(d, 'ui-modular')).join('');
// Search functionality
const searchInput = document.getElementById('searchInput');
searchInput.addEventListener('input', (e) => {
const searchTerm = e.target.value.toLowerCase();
document.querySelectorAll('.demo-card').forEach(card => {
const title = card.dataset.title;
const type = card.dataset.type;
const matches = title.includes(searchTerm) || type.includes(searchTerm);
card.classList.toggle('hidden', !matches);
});
});
// Filter functionality
document.querySelectorAll('.filter-btn').forEach(btn => {
btn.addEventListener('click', () => {
// Update active state
document.querySelectorAll('.filter-btn').forEach(b => b.classList.remove('active'));
btn.classList.add('active');
const filter = btn.dataset.filter;
// Show/hide category sections
document.querySelectorAll('.category-section').forEach(section => {
if (filter === 'all') {
section.classList.remove('hidden');
} else {
section.classList.toggle('hidden', section.dataset.category !== filter);
}
});
// Reset search
searchInput.value = '';
document.querySelectorAll('.demo-card').forEach(card => {
card.classList.remove('hidden');
});
});
});
// Add click handler to demo cards
document.querySelectorAll('.demo-card').forEach(card => {
card.addEventListener('click', (e) => {
if (!e.target.classList.contains('demo-link')) {
const link = card.querySelector('.demo-link');
window.open(link.href, '_blank');
}
});
});
// Update stats
document.getElementById('totalDemos').textContent = demos.threejs.length + demos.sdg.length + demos.uiSingle.length + demos.uiModular.length;
document.getElementById('threejsCount').textContent = demos.threejs.length;
document.getElementById('uiCount').textContent = demos.uiSingle.length + demos.uiModular.length;
</script>
</body>
</html>