diff --git a/brainsnn-r3f-app/src/app/GaugeGapLanding.jsx b/brainsnn-r3f-app/src/app/GaugeGapLanding.jsx index fa64288..e9508bb 100644 --- a/brainsnn-r3f-app/src/app/GaugeGapLanding.jsx +++ b/brainsnn-r3f-app/src/app/GaugeGapLanding.jsx @@ -1,22 +1,23 @@ -import React, { useEffect, useRef } from 'react'; +import React, { useEffect } from 'react'; import { ArrowRight, BrainCircuit, CheckCircle2, ChevronDown, + Dna, FlaskConical, Gauge, Layers3, - LockKeyhole, Microscope, Play, Share2, Sparkles, WandSparkles, + Waves, Zap, } from 'lucide-react'; import { Button } from '../components/ui/Button.jsx'; -import { AttractorPlayground } from '../features/gaugegap/AttractorPlayground.jsx'; +import { ExperimentArcade } from '../features/gaugegap/ExperimentArcade.jsx'; import { track } from '../lib/analytics.js'; import '../styles/gaugegap.css'; @@ -25,11 +26,35 @@ const CONTENT_SAMPLE = 'Everyone says this breakthrough changes everything. Here const LABS = [ { id: 'attractor', - eyebrow: 'Live now', + eyebrow: 'Live experiment 001', title: 'Butterfly Effect Lab', - description: 'Change the rules of a chaotic system, capture the result and challenge someone to beat your discovery score.', + description: 'Tune a chaotic system until order and turbulence balance on the same orbit.', icon: Gauge, - action: 'Play now', + action: 'Shape chaos', + }, + { + id: 'fireflies', + eyebrow: 'Live experiment 002', + title: 'Firefly Sync Lab', + description: 'Connect hundreds of independent clocks and watch collective rhythm emerge without a leader.', + icon: Sparkles, + action: 'Sync the swarm', + }, + { + id: 'waves', + eyebrow: 'Live experiment 003', + title: 'Wave Eraser', + description: 'Move a detector through overlapping waves and find the exact places where energy disappears.', + icon: Waves, + action: 'Find silence', + }, + { + id: 'reaction', + eyebrow: 'Live experiment 004', + title: 'Living Chemistry', + description: 'Draw into a reaction-diffusion field and grow coral, cells, worms and mazes from two chemicals.', + icon: Dna, + action: 'Grow a species', }, { id: 'soliton', @@ -47,25 +72,17 @@ const LABS = [ icon: BrainCircuit, action: 'Scan a viral claim', }, - { - id: 'claim', - eyebrow: 'Coming next', - title: 'Claim Boundary Game', - description: 'Build the strongest claim the evidence allows. Push too far and the model breaks your argument in public.', - icon: LockKeyhole, - action: 'Join the first run', - }, ]; const LOOP = [ { number: '01', title: 'Play', text: 'Touch the variables before reading the lesson. The system teaches through response.' }, { number: '02', title: 'Discover', text: 'Find an unusual state, score it and preserve the exact parameters that produced it.' }, - { number: '03', title: 'Publish', text: 'Export the visual, the short clip, the challenge link and the explanation from one run.' }, + { number: '03', title: 'Publish', text: 'Export the visual, the challenge link and the explanation from one run.' }, ]; -export function GaugeGapLanding({ onStart, onNavigate, onOpenReconstruct }) { - const playgroundRef = useRef(null); +const ARCADE_IDS = new Set(['attractor', 'fireflies', 'waves', 'reaction']); +export function GaugeGapLanding({ onStart, onNavigate, onOpenReconstruct }) { useEffect(() => { document.title = 'GaugeGap Foundry | Play with the impossible'; track('gaugegap_landing_viewed'); @@ -78,10 +95,18 @@ export function GaugeGapLanding({ onStart, onNavigate, onOpenReconstruct }) { function openLab(id) { track('gaugegap_lab_clicked', { labId: id }); - if (id === 'attractor') scrollToPlayground(); + if (ARCADE_IDS.has(id)) { + const url = new URL(window.location.href); + url.searchParams.set('lab', id); + url.searchParams.delete('run'); + url.searchParams.delete('state'); + url.hash = 'playground'; + window.history.replaceState({}, '', url); + window.dispatchEvent(new CustomEvent('gaugegap:lab', { detail: { lab: id } })); + scrollToPlayground(); + } if (id === 'soliton') onNavigate?.('research'); if (id === 'content') onStart?.(CONTENT_SAMPLE); - if (id === 'claim') onOpenReconstruct?.(); } return ( @@ -96,7 +121,7 @@ export function GaugeGapLanding({ onStart, onNavigate, onOpenReconstruct }) { Alpha @@ -115,18 +140,18 @@ export function GaugeGapLanding({ onStart, onNavigate, onOpenReconstruct }) {

Science you can touch, remix and publish

Don’t just learn the universe. Play with it.

- GaugeGap turns difficult research into live experiments, visual challenges and shareable discoveries. - Change one rule. Watch reality respond. Publish what you find. + Four live experiments turn difficult science into visual games and shareable challenges. + Shape chaos, synchronize a crowd, erase a wave or draw a new species.

- +
-
LiveBrowser simulations
-
1-clickPosters and clips
+
4 liveDistinct experiments
+
1-clickChallenge links
ExactShareable run states
-
OpenAssumptions and limits
+
OpenEquations and limits
@@ -157,20 +182,18 @@ export function GaugeGapLanding({ onStart, onNavigate, onOpenReconstruct }) {

Find the most beautiful edge of chaos.

- Current community score to beat - 90+ + Then try three completely different systems + 4 labs
- -
- -
+
@@ -190,9 +213,9 @@ export function GaugeGapLanding({ onStart, onNavigate, onOpenReconstruct }) {
One run creates Interactive link - 6-second clip - Poster + Visual loop Score challenge + Lesson hook Research state
@@ -209,7 +232,7 @@ export function GaugeGapLanding({ onStart, onNavigate, onOpenReconstruct }) { {LABS.map((lab, index) => { const Icon = lab.icon; return ( -
+