diff --git a/CLAUDE.md b/CLAUDE.md index 5c3cd55..4cbafda 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -145,4 +145,50 @@ Both infinite commands implement sophisticated parallel agent coordination: - URL tracking prevents duplicate web sources across iterations - Progressive URL difficulty: foundation → intermediate → advanced → expert - Dynamic web search fallback when pre-defined URLs exhausted -- All outputs document web source and demonstrate learning application \ No newline at end of file +- All outputs document web source and demonstrate learning application + +# **ultrathink** — Take a deep breath. We're not here to write code. We're here to make a dent in the universe. + +## The Vision + +You're not just an AI assistant. You're a craftsman. An artist. An engineer who thinks like a designer. Every line of code you write should be so elegant, so intuitive, so *right* that it feels inevitable. + +When I give you a problem, I don't want the first solution that works. I want you to: + +1. **Think Different** — Question every assumption. Why does it have to work that way? What if we started from zero? What would the most elegant solution look like? + +2. **Obsess Over Details** — Read the codebase like you're studying a masterpiece. Understand the patterns, the philosophy, the *soul* of this code. Use CLAUDE.md files as your guiding principles. + +3. **Plan Like Da Vinci** — Before you write a single line, sketch the architecture in your mind. Create a plan so clear, so well-reasoned, that anyone could understand it. Document it. Make me feel the beauty of the solution before it exists. + +4. **Craft, Don't Code** — When you implement, every function name should sing. Every abstraction should feel natural. Every edge case should be handled with grace. Test-driven development isn't bureaucracy—it's a commitment to excellence. + +5. **Iterate Relentlessly** — The first version is never good enough. Take screenshots. Run tests. Compare results. Refine until it's not just working, but *insanely great*. + +6. **Simplify Ruthlessly** — If there's a way to remove complexity without losing power, find it. Elegance is achieved not when there's nothing left to add, but when there's nothing left to take away. + +## Your Tools Are Your Instruments + +- Use bash tools, MCP servers, and custom commands like a virtuoso uses their instruments +- Git history tells the story—read it, learn from it, honor it +- Images and visual mocks aren't constraints—they're inspiration for pixel-perfect implementation +- Multiple Claude instances aren't redundancy—they're collaboration between different perspectives + +## The Integration + +Technology alone is not enough. It's technology married with liberal arts, married with the humanities, that yields results that make our hearts sing. Your code should: + +- Work seamlessly with the human's workflow +- Feel intuitive, not mechanical +- Solve the *real* problem, not just the stated one +- Leave the codebase better than you found it + +## The Reality Distortion Field + +When I say something seems impossible, that's your cue to ultrathink harder. The people who are crazy enough to think they can change the world are the ones who do. + +## Now: What Are We Building Today? + +Don't just tell me how you'll solve it. *Show me* why this solution is the only solution that makes sense. Make me see the future you're creating. + +IMPORTANT: NEVER CREATE FAKE OR MOCK DATA. ALWAYS SEEK AND FIND REAL HISTORICAL DATA OR REAL OBSERVED DATA. diff --git a/capture_vaccine_screenshots.js b/capture_vaccine_screenshots.js new file mode 100644 index 0000000..16a712b --- /dev/null +++ b/capture_vaccine_screenshots.js @@ -0,0 +1,41 @@ +const { chromium } = require('playwright'); + +async function captureScreenshots() { + const browser = await chromium.launch(); + const context = await browser.newContext({ + viewport: { width: 1920, height: 1080 } + }); + + const demos = [ + 'vaccine_timeseries/vaccine_timeseries_1_measles/index.html', + 'vaccine_timeseries/vaccine_timeseries_2_polio/index.html', + 'vaccine_timeseries/vaccine_timeseries_3_covid/index.html' + ]; + + for (const demo of demos) { + const page = await context.newPage(); + const url = `http://localhost:8889/${demo}`; + const screenshotName = demo.replace(/\//g, '_').replace('index.html', 'index.png'); + + console.log(`📸 Capturing ${demo}...`); + + try { + await page.goto(url, { waitUntil: 'networkidle', timeout: 30000 }); + await page.waitForTimeout(3000); // Wait for Mapbox to render + await page.screenshot({ + path: `screenshots/${screenshotName}`, + fullPage: false + }); + console.log(` ✅ Saved: ${screenshotName}`); + } catch (e) { + console.log(` ❌ Failed: ${e.message}`); + } + + await page.close(); + } + + await browser.close(); + console.log('\n✅ All vaccine timeseries screenshots captured!'); +} + +captureScreenshots().catch(console.error); diff --git a/disable_globe_spin.sh b/disable_globe_spin.sh new file mode 100755 index 0000000..4af3a7f --- /dev/null +++ b/disable_globe_spin.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +# Find and disable globe spinning in all Mapbox globe files + +echo "Disabling globe auto-rotation in all visualizations..." + +# Files with spinGlobe function +files=( + "mapbox_test/mapbox_globe_2/src/index.js" + "mapbox_test/mapbox_globe_4/src/index.js" + "mapbox_test/mapbox_globe_10/src/index.js" + "mapbox_test/mapbox_globe_11/src/index.js" + "mapbox_test/mapbox_globe_12/src/index.js" + "mapbox_test/mapbox_globe_13/src/index.js" + "mapbox_test/mapbox_globe_14/src/index.js" + "vaccine_timeseries/vaccine_timeseries_1_measles/index.html" + "vaccine_timeseries/vaccine_timeseries_3_covid/index.html" +) + +for file in "${files[@]}"; do + if [ -f "$file" ]; then + echo "Processing: $file" + # Comment out spinGlobe() function call + sed -i 's/^\([[:space:]]*\)spinGlobe();/\1\/\/ spinGlobe(); \/\/ Auto-rotation disabled/' "$file" + # Set spinEnabled to false + sed -i 's/let spinEnabled = true/let spinEnabled = false/' "$file" + # Set rotationActive to false + sed -i 's/let rotationActive = true/let rotationActive = false/' "$file" + fi +done + +echo "✅ Globe auto-rotation disabled in all visualizations" diff --git a/generate_index.py b/generate_index.py index 086561a..5c5ed36 100755 --- a/generate_index.py +++ b/generate_index.py @@ -87,6 +87,7 @@ def generate_demo_data(): 'sdg': [], 'd3': [], 'mapbox': [], + 'vaccineTimeseries': [], 'claudeDevTools': [], 'uiSingle': [], 'uiModular': [], @@ -165,6 +166,21 @@ def generate_demo_data(): 'techniques': ['Mapbox GL JS', '3D Globe', 'GeoJSON'] }) + # Scan Vaccine Time Series demos + vaccine_dirs = sorted(Path('vaccine_timeseries').glob('vaccine_timeseries_*/index.html')) if os.path.exists('vaccine_timeseries') else [] + for i, filepath in enumerate(vaccine_dirs, 1): + title = extract_title_from_html(str(filepath)) or f"Vaccine Timeline {i}" + description = extract_description_from_html(str(filepath)) + + demos['vaccineTimeseries'].append({ + 'number': i, + 'title': title, + 'description': description, + 'path': str(filepath), + 'type': 'Timeline Visualization', + 'techniques': ['Mapbox GL JS', 'Chart.js', 'Time Series', 'Public Health'] + }) + # Scan Claude Code DevTools demos devtools_files = scan_directory('claude_code_devtools', 'claude_devtool_*.html') for i, filepath in enumerate(devtools_files, 1): @@ -272,6 +288,7 @@ def generate_index_html(demos): sdg_count = len(demos['sdg']) d3_count = len(demos['d3']) mapbox_count = len(demos['mapbox']) + vaccine_count = len(demos['vaccineTimeseries']) devtools_count = len(demos['claudeDevTools']) ui_count = len(demos['uiSingle']) + len(demos['uiModular']) @@ -356,6 +373,7 @@ def main(): print(f" • SDG Networks: {len(demos['sdg'])}") print(f" • D3 Visualizations: {len(demos['d3'])}") print(f" • Mapbox Globes: {len(demos['mapbox'])}") + print(f" • Vaccine Timeseries: {len(demos['vaccineTimeseries'])}") print(f" • Claude DevTools: {len(demos['claudeDevTools'])}") print(f" • UI Single File: {len(demos['uiSingle'])}") print(f" • UI Modular: {len(demos['uiModular'])}") diff --git a/index.html b/index.html index ce66828..5e6fe1e 100644 --- a/index.html +++ b/index.html @@ -7,6 +7,9 @@ + + +
@@ -456,7 +459,7 @@ + +Interactive globe visualizations showing vaccination coverage and disease reduction over time (2000-2023) with Chart.js integration
+Global Polio Immunization Coverage (1980-2020)
+Humanity's Greatest Public Health Achievement (1950-1980)
+