Soundquest is a browser-based roguelike music-production adventure. Players progress through quests, earn notes, instruments, and effects, and compose loops with the bundled Strudel runtime.
Play Soundquest: soundquest-e5v.pages.dev
Requirements: Node.js 22 and npm.
npm ci
npm run devThe supported release checks are:
npm run typecheck
npm run lint
npm test
npm run test:e2e
npm run buildnpm run verify runs the complete sequence. Application checks deliberately exclude deploy/strudel/, which is a vendored Git subtree with its own upstream test suite and release process.
src/components/game/: game UI and Strudel integrationsrc/data/: version-controlled game content and progression rulessrc/hooks/useGameState.ts: run state and progressionsrc/lib/runShare.ts: bounded, non-executable shared-run formatsrc/lib/runStorage.ts: local run metadata and IndexedDB audio persistencedeploy/strudel/: modified vendored Strudel source
The game is a static client application. Hash routing is implemented locally in src/App.tsx; no backend or routing service is required.
Production builds do not include developer sample caches. They load only the pinned piano and VCSL manifests declared in src/lib/runtimeConfig.ts. Deployments may override those URLs with a controlled asset origin:
VITE_STRUDEL_SAMPLES_BASE_URL=https://assets.example.com/dough
VITE_STRUDEL_VCSL_BASE_URL=https://assets.example.com/vcsl
VITE_STRUDEL_TR808_BASE_URL=https://assets.example.com/clean/tr808
VITE_STRUDEL_FLBASS_BASE_URL=https://assets.example.com/clean/flbass
VITE_STRUDEL_CBOW_BASE_URL=https://assets.example.com/clean/cbow
VITE_STRUDEL_UKULELE_BASE_URL=https://assets.example.com/clean/ukulelenpm run sync:strudel downloads the pinned assets and checksums into .cache/strudel/ for inspection or preparation of a separate offline distribution. The cache is never copied into a normal Vite build. An offline release must deliberately publish the cache beneath /strudel, retain its notices, and set VITE_OFFLINE_MODE=true.
The production artifact verifier rejects cached Strudel content and distributions larger than 30 MiB.
tidalcycles/Dirt-Samples is deliberately not used because the collection does not provide sufficiently complete license and provenance information for redistribution. New sample banks must be added individually, pinned to an immutable revision, and documented with their source, creator, and explicit sample license in THIRD_PARTY_NOTICES.md. A collection's name or umbrella repository is not treated as a license for its dependencies.
Shared links contain a small versioned inventory document. They never contain or execute the sender's free-form Strudel code. Legacy compressed links are intentionally unsupported.
Run metadata is stored in localStorage. Recorded microphone audio is stored separately as bounded PCM Blob data in IndexedDB. Nothing is uploaded by this repository. See PRIVACY.md.
Follow RELEASE.md before publishing.
Soundquest is free software licensed under the GNU Affero General Public License, version 3 or later. A deployed version must provide users access to the complete corresponding source for that exact version. Third-party components and media retain their respective licenses; see THIRD_PARTY_NOTICES.md.