Skip to content

programmism/little-explorer-lab

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

39 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ§ͺ Little Explorer Lab

A safe, fullscreen interactive playground for curious kids aged 2–5.

Live Demo Deploy License: MIT


Little Explorer Lab preview


What is it?

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.

β–Ά Open the playground


Features

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

Roadmap (4–5 year olds)

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

Design principles

  • 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

Getting started

git clone https://github.com/programmism/little-explorer-lab.git
cd little-explorer-lab
npm install
npm run dev

Then open http://localhost:5173/little-explorer-lab/ in your browser.

Build for production

npm run build
# output in dist/

Architecture

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

Tech stack

  • 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

Contributing

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!


License

MIT Β© programmism

About

πŸ§ͺ Safe fullscreen interactive playground for toddlers 2–4. Touch anything β†’ the world reacts. No ads, no text, fully offline.

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors