Lil Beasties
Vision
A monster music game for kids — choose monsters, place them on islands, and hear them perform together. Each monster plays a different musical part (beat, bass, melody, harmony, percussion, vocal). Complete performances to win new monsters and unlock new islands. Built with Rails 8 + Phaser 4. Duolingo aesthetic. Deploy through the pal-e pipeline, wrap for App Store with Hotwire Native.
User Stories
| Key | Story Note | Role | Success Metric |
|---|---|---|---|
| perform | <a href="story-lil-beasties-perform">Perform Music</a> | Kid | Place 3 monsters, hear them play music together |
| progress | <a href="story-lil-beasties-progress">Progress Through Islands</a> | Kid | Complete island 1, win monster, unlock island 2 |
| play-anywhere | <a href="story-lil-beasties-play-anywhere">Play Anywhere</a> | Player | Same progress on phone and desktop |
Architecture
- Domain Model — monsters with musical parts, islands as levels, placement grid
- Data Flow — Rails API + Phaser game loop + audio layering (to be created)
- Deployment — k3s + ArgoCD + Harbor (to be created)
Key decisions:
- Rails 8 monolith — game state, auth, API all in one app
- Phaser 4 in Stimulus controllers — sprites, game loop, audio, touch input at 60fps
- Six musical parts (beat, bass, melody, harmony, percussion, vocal) — same BPM/key, any combo works
- One monster per part per island — no stacking, enforced by Placement validation
- Earn monsters through performance, not purchase — progression drives collection
- Islands are levels — each one is a new stage for building a new song
- Island-first landing — kids see their current island immediately after login
- Hotwire Native for iOS App Store wrapper
- Keycloak for auth (existing platform SSO)
Board
Status
2026-06-06: Tone.js audio stack documented (PR #9 merged). Phaser handles visuals only, Tone.js owns AudioContext + Transport for beat-synced loop playback. All docs aligned: architecture, user-stories, music-theory. Issues #1-3, #7 updated with part/sound/vibe terminology + Tone.js references. Next: scaffold Rails app (Issue #1).
Milestones
| Milestone | Issues | Gate | Status |
|---|---|---|---|
| M1: Playable prototype | #1 Scaffold + #2 Phaser island + #3 Sprites | Place 3 monsters on an island, hear them play music | Not started |
| M2: Progression loop | #7 Island progression + monster rewards | Complete island 1, win monster, unlock island 2 | Not started |
| M3: Ship it | #4 Keycloak auth + #5 Deploy pipeline | Live on cluster, accessible via Tailscale Funnel | Not started |
Repos
| Repo | Platform | Role | Status |
|---|---|---|---|
| <a href="https://forgejo.tail5b443a.ts.net/ldraney/lil-beasties">lil-beasties</a> | Forgejo | Rails 8 + Phaser 4 monolith | Active |