A safe, fullscreen interactive playground for curious toddlers aged 2β4.
A toddler-safe fullscreen world where every touch causes a friendly reaction. No goals. No scores. No text. Just cause and effect.
"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 sound |
| π 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 |
- 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 + exit gesture
AudioManager.js # Web Audio API synthesized sounds
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
Ball.js # Gravity + squish + color change
Rocket.js # Launch trajectory + particle trail
Star.js # Float + sparkle burst
Butterfly.js # Wander AI + scatter on tap
- 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