A safe, fullscreen interactive playground for curious kids aged 2β5.
A kid-safe fullscreen world where every touch causes a friendly reaction. For toddlers (2β3): pure cause and effect. For older kids (4β5): mini-goals with star progress, a collectible album, themed rooms to explore, and an owl companion that reacts alongside them.
"I touched something β and the world responded."
Works on phones, tablets, laptops. Fully offline. Zero ads. Zero links.
| Feature | Description |
|---|---|
| π Cars | Drive across the road β tap to honk, flash, and zoom |
| β½ Balls | Physics-based bouncing β tap to smash in any direction |
| π Rocket | Floats peacefully β tap for a blazing launch with particle trail |
| β Stars | Drift through the sky β tap for a golden sparkle burst |
| π¦ Butterflies | Wander freely β tap to scatter them away |
| π¨ Drawing | Drag a finger or mouse to paint glowing rainbow trails that fade |
| β¨οΈ Keyboard | Every key press shows a giant colorful floating letter with spoken pronunciation |
| π Day/night cycle | The world slowly cycles from dawn β noon β dusk β midnight |
| π Emergent events | Random confetti, rainbow bursts, new actors appear spontaneously |
| π Synthesized audio | All sounds generated via Web Audio API β no audio files needed |
| π Input capture | Keyboard shortcuts, context menus, and browser gestures disabled |
| πͺ Safe exit | Hold top-right corner for 3 seconds to exit fullscreen |
| π― Launch pad | Aim and launch rockets at moving targets for points |
| π₯ Car crashes | Cars can swerve into oncoming lane and crash with explosion effects |
| π Mini-goals | Star progress bar β hit targets to fill stars, then celebrate with fanfare |
| π΅ Background music | Ambient pentatonic melodies that crossfade between day and night |
| π Collectible album | Tap the book icon to view collected target emojis with counts |
| π Themed rooms | Swipe to explore Road, Space, and Underwater scenes |
| π¦ Owl companion | Friendly owl that celebrates hits, sleeps at night, and waves when idle |
| π Fish | Underwater scene actors β swim around and scatter on tap |
| π§βπ Astronaut | Space scene actors β float and spin in zero gravity |
| π Letter speech | Letters spoken aloud via Speech Synthesis API on key press |
| πΊ Fanfare | Triumphant ascending melody when a goal is completed |
| πΉ Xylophone | Musical scene with rainbow bars β tap to play pentatonic notes |
| ποΈ Coloring | Color outlines of animals/vehicles β they come alive when filled |
| π± Device tilt | Balls roll, butterflies drift, stars parallax with device orientation |
All planned UX improvements for children aged 4β5 have been implemented:
| Priority | Feature | Issue |
|---|---|---|
| β Done | Mini-goals with celebrations | #6 |
| β Done | Letter pronunciation on keypress | #7 |
| β Done | Ambient background music (day/night) | #8 |
| β Done | Fix tap vs drawing input conflict | #9 |
| β Done | Themed rooms with swipe navigation | #10 |
| β Done | Companion character | #11 |
| β Done | Collectible album for targets | #12 |
| β Done | Visual progress bar instead of score | #13 |
| β Done | Coloring mode with animated results | #14 |
| β Done | Musical instrument mode | #15 |
| β Done | Device tilt/accelerometer interactions | #16 |
- Zero failure states β nothing can be broken
- No text in the experience β purely visual
- Touch-first β large hit areas, no precision required
- Calm visuals β no flashes, no aggressive camera movement
- Offline-capable β no network required after first load
- No ads, no links, no tracking
git clone https://github.com/programmism/little-explorer-lab.git
cd little-explorer-lab
npm install
npm run devThen open http://localhost:5173/little-explorer-lab/ in your browser.
npm run build
# output in dist/src/
main.js # Entry point, fullscreen request
GameLoop.js # requestAnimationFrame loop with dt cap
InputManager.js # Mouse, touch, keyboard capture + tap-vs-drag fix + exit gesture
AudioManager.js # Web Audio API synthesized sounds + speech synthesis
MusicManager.js # Ambient background music with day/night crossfade
GoalManager.js # Mini-goals with star progress bar + fanfare celebration
CollectionManager.js # Collectible album with persistence (localStorage)
SceneManager.js # Themed rooms (Road, Space, Underwater, Music, Coloring) + swipe navigation
MusicScene.js # Xylophone instrument with pentatonic scale
ColoringScene.js # Coloring outlines that come alive when filled
ParticleSystem.js # Burst and trail particle effects
DrawingLayer.js # Freehand rainbow drawing with fade
KeyLabel.js # Floating letter animation on key press
Background.js # Animated day/night sky, clouds, stars, road
World.js # Scene manager, emergent events, input routing
actors/
Actor.js # Base class
Car.js # Physics + color flash + honk + swerve + crash
Ball.js # Gravity + squish + color change
Rocket.js # Launch trajectory + particle trail
Star.js # Float + sparkle burst
Butterfly.js # Wander AI + scatter on tap
Target.js # Score targets β bob, drift, explode on hit
LaunchPad.js # Rocket aiming + reload state
Companion.js # Owl companion β celebrates, sleeps, waves, reacts to taps
Fish.js # Underwater fish β swim, scatter on tap
Astronaut.js # Space actors β float and spin in zero gravity
- Vanilla JS (ES modules) β no framework
- HTML5 Canvas 2D β all rendering
- Web Audio API β synthesized sounds
- Vite β dev server and build
- GitHub Actions β CI and deploy to GitHub Pages
New actors are easy to add β extend Actor and drop into World._spawn().
Each actor needs: update(dt, w, h, particles), draw(ctx), hitTest(x, y), onTap(x, y, particles, audio).
PRs welcome!
MIT Β© programmism