-
-
Ripple's landing page — step into any moment in history, make the decisions that shaped the world, and watch your choices ripple across time
-
Be Susan B. Anthony in 1872 — accused of voting when women had no right to. Your choice. Your ripple through history
-
Every decision matters. Choose how to defend yourself in Susan B. Anthony's 1872 trial — and watch how your choice ripples through history.
-
The Consequence Map — see exactly where your decisions ripple across the globe. One choice in 1873 Rochester echoed all the way to Europe
-
My EASTER Lens live on Snapchat — built in Lens Studio this weekend. Scan the Snapcode to try it!
Inspiration: History class always told me what happened. It never asked me what I would have done. What if you could stand in Rosa Parks' seat on December 1st, 1955? What if you were the one who had to decide whether to drop the bomb on Hiroshima? What if the Cuban Missile Crisis was yours to resolve — and you had 10 minutes? I built Ripple because I believe the single most powerful way to understand history is to feel the weight of it. Not to read about decisions, but to make them — and then watch the world change because of you.
What it does: Ripple is a cinematic, AI-powered interactive history experience. Here's the full loop:
- You choose any moment in history. Type "Rosa Parks 1955," "Chernobyl 1986," "The Fall of the Berlin Wall," or any moment that ever happened. The AI instantly builds a fully playable, historically grounded scenario.
- You're dropped inside it as the key decision-maker. You get a real Wikipedia portrait of the historical figure, your role, the year, the location, and a typewriter-narrated intro that puts you in the moment.
- You face three real decisions. Each choice is a fully researched historical option with real tradeoffs — not fake multiple choice. Every option shows who benefits and who bears the cost.
- Before each decision, you can enter the Unheard Room. A private space to hear from someone whose life depends on your choice — a civilian, a child, a displaced family. You don't have to listen. But the game remembers if you didn't.
- After each choice, you see the Human Cost Counter. A real number of people affected by your decision, counting up live on screen. You control when you're ready to move on.
- Your choices ripple across an interactive 3D globe. Five regions worldwide light up with specific, documented causal chains from your decision to their reality — not "ongoing social inequality," but exactly who, what, and how many.
- You get your full Ripple Score + Decision DNA profile. Were you a long-term thinker or short-term? Did you protect people or systems first? Did you listen to the unheard? Your profile is built entirely from your choices.
- The Mirror Moment. Your choices side-by-side with what history actually chose — three real documented sentences about what actually happened, compared directly to every decision you made.
- The Regret Archive. A live, anonymous, real-time corkboard of reflections from every player who stepped into history. Powered by Supabase with live subscriptions — your reflection appears instantly for everyone.
How I built it: Frontend: React 19 + Vite 8. Framer Motion for all animations — glass-shatter screen transitions, the animated DNA double helix, sliding consequence cards, consequence bar animations. React Router for the homepage/demo split. CSS Modules throughout for scoped styling. K2 Think V2 (primary reasoning engine): K2 generates all three scenario choices — the hardest reasoning task in the app. It models the full historical consequence space: 9 consequence trees per scenario, real vs. alternate-timeline causality, quantified human impact grounded in documented data. K2's chain-of-thought reasoning block is stripped before JSON parsing, then the structured output feeds directly into the game. Groq (llama-3.3-70b-versatile) serves as the fallback if K2 is unavailable — I built the entire dual-engine architecture with graceful degradation so the app never breaks. Groq (scenario backbone): Two sequential Groq calls build the scenario foundation — player role, setting, narrator intro, generational view (1/5/20/50 years out), who bears the cost, and what actually happened. Structured as separate API calls to stay within token limits and keep latency manageable. Google Gemini 1.5 Flash: Powers the Historical Verdict at the end of each playthrough — a real historian's judgment of your decisions, a legacy label (e.g. "The Cautious Peacemaker"), and a direct comparison to what history actually chose. Mapbox GL JS: The interactive 3D globe consequence map. Regions pulse as color-coded markers (positive/negative/unresolved). Each popup includes a specific 40-80 word causal chain with real named actors and real statistics — engineered through repeated prompt iteration to eliminate vagueness. Supabase: Real-time Regret Archive backed by PostgreSQL. Players submit anonymous reflections, the corkboard updates live across all sessions via Postgres channel subscriptions. Also tracks total global play count. Wikipedia API: Fetches real historical portrait photos for the character card using a multi-variant search pipeline — full name → first+last → title-stripped → full-text search fallback — so figures like "Rosa Louise Parks" always resolve correctly. Web Speech API: Narrator voiceover on the role intro screen using a male voice preference filter with graceful cross-browser fallback.
Challenges I ran into: K2 Think V2's reasoning format. K2 is a reasoning model — it wraps output in ... chain-of-thought blocks before producing JSON. Those blocks contain { and } characters that completely broke my brace-counting JSON extractor. I had to build a two-stage parser: strip the think block with a regex first, then run the brace extractor on the clean output, with the raw response kept as a second fallback source. Wikipedia photo resolution for full names. The AI returns full three-word names like "Rosa Louise Parks" but Wikipedia's pageimages API needs exact title matches. I built a 5-variant search system — exact name, first+last only, title-stripped, and a full-text search fallback that resolves redirects — plus a React imgError state for graceful fallback to initials when all variants fail. The History's Path sentence split. The Mirror Moment shows what history actually chose as 3 bullet points. But naive .split('.') shattered "Dr. Martin Luther King Jr." into two entries mid-sentence. I built a smart splitter that protects known abbreviations (Dr., Jr., U.S., Gen., Col., etc.) by temporarily replacing their periods before splitting on sentence-ending punctuation, then restoring them. Making AI consequences actually specific. Early builds returned vague phrases like "ongoing social inequality" and "widespread effects." I rewrote the entire system prompt and user prompts with explicit rules: banned phrases list, minimum 3 complete sentences, required named actors, required statistics or documented numbers, required causal chain structure. The difference between the first and final version is dramatic. Auth scope creep. I originally built full Supabase auth with sign-in, journal, and personal ripple history. Halfway through, I made the call to strip all auth and go demo-only — simplifying the UX, eliminating the sign-in barrier, and making the Regret Archive the only persistent layer. That was the right call. Screen timing. The Human Cost Counter was auto-advancing after 4.2 seconds — users had less than half a second to actually read the tradeoff text after the counter finished. I replaced the auto-advance timer with a user-controlled "See the Ripple →" button that only appears after the counter completes.
Accomplishments I'm proud of: The Unheard Room — the idea that you should have to actively choose not to hear from people affected by your decision, and that the game permanently records if you skipped it. That mechanic says something real about how decisions get made. The Mirror Moment — your choices next to history's choices, same layout, no commentary. Just the distance between two columns. No judgment. The player does all the work. The dual-engine architecture — K2 Think V2 as primary with Groq as fallback, graceful degradation at every layer, robust JSON parsing that handles reasoning model output formats. The app never crashes. Building the entire thing — backend, frontend, AI orchestration, real-time database, 3D globe, DNA profile system — solo, in one hackathon weekend at Yale.
What I learned: The hardest part of building an educational game isn't the tech — it's making people feel something. Every prompt rewrite, every screen design decision, every animation timing was in service of one question: does this make the player feel the weight of what they just chose? I also learned that reasoning models like K2 Think V2 require different engineering patterns than standard LLMs. The block is a feature, not noise — it means the model is genuinely working through causality before answering. Parsing around it, not against it, was the right call. And I learned that stripping auth mid-hackathon and going demo-only is sometimes the bravest product decision you can make.
What's next for Ripple:
Multiplayer mode — two players, same historical moment, opposite roles (JFK and Khrushchev, for example) Teacher dashboard — assign scenarios, track student Decision DNA profiles over time, compare class results Ripple Journal — personal history of every moment you've played, your evolving decision profile, AI-generated growth insights over time Mobile app with haptic feedback on the Human Cost Counter
Links:
Live Demo: https://ripple-six-omega.vercel.app/demo Homepage: https://ripple-six-omega.vercel.app/ GitHub: https://github.com/nylaimanii/ripple
Tracks: 🌍 Societal Impact ·🎭 Entertainment · 🧠 Best Use of K2 Think V2 · 🏆 Best Solo Hack · 🎨 Most Creative Hack
🕶️ Bonus: Snapchat Lens I was also really excited by the Snapchat Lens Studio challenge! This weekend I learned how to use Lens Studio to build AR lenses for Snapchat. I got to meet with Phil, Ben, and Reaga, who were incredibly helpful in teaching me how to use it and how to monetize my lenses so I can get paid as a creator. I built my own AR Lens called "EASTER" — it's live and unlocked on Snapchat!

Log in or sign up for Devpost to join the conversation.