What needed solving.
A simple give-feedback-to-get-feedback exchange rewards the cheapest review that satisfies the rule, not necessarily a useful critique.
- 01Track + timed prompts
- 02Designed review incentives
- 03Feedback quality hypothesis
Simplified from the implementation and project notes.
How it fits together.
The proposed mechanism tied structured questions to audio playback, used model scoring to influence reputation rather than block every submission, and weighted recipients’ ratings by standing. Arbitration was designed for contested cases.
Earlier versions explored PlanetScale, Firebase, Supabase and a Postgres/Zero design with Solid, Hono and Bun. A later July 2026 repository revision uses Next.js, React and SQLite through Drizzle, with local media in development and S3 storage support. The screenshots show that later application.
The retrospective records two working hackathon pieces built with a collaborator: an inline review-writing assistant and a multi-agent quorum validator. It separately acknowledges that the wider exchange never reached a real musician trial.
The later code organizes credits and karma as append-only ledgers. Review requests and assignments have expiry rules, and domain functions accept the database and time explicitly for testing. The review cockpit uses wavesurfer.js for listening requirements and timestamped feedback; quality scoring combines a heuristic pass with an optional model pass.
Inside the software.
A collaborative music workspace for song versions, stem playback, timestamped reviews, and guest listening. This walkthrough uses the July 6, 2026 Next.js snapshot (d2e09cff), running locally with synthetic tracks and reviews.
Song and version workspace
Creators upload songs and revisions into a project workspace and track releases and feedback through a version tree.

Next.js app with SQLite/Drizzle domain and upload/media routes; version-tree UI visualizes relationships between versions.
UI captured locally. Data and integration limits are noted above.
Implementation references
spencermorris04/musephoria @ d2e09cff: src/app/dashboard/page.tsxspencermorris04/musephoria @ d2e09cff: src/app/submit/page.tsxspencermorris04/musephoria @ d2e09cff: src/app/songs/[id]/page.tsxspencermorris04/musephoria @ d2e09cff: src/components/versionTree/VersionTree.tsxspencermorris04/musephoria @ d2e09cff: src/domain/releases.ts
Multistem listening and mix controls
The player presents uploaded stems in a synchronized timeline with per-stem controls, meters, and a shared transport for listening to a mix.
Stem console, PlayerProvider, waveform strips, annotated timeline, audio queue and media streaming/peaks endpoints support playback UI.
Present in the reviewed source.
Implementation references
spencermorris04/musephoria @ d2e09cff: src/components/player/StemsConsole.tsxspencermorris04/musephoria @ d2e09cff: src/components/player/PlayerProvider.tsxspencermorris04/musephoria @ d2e09cff: src/components/player/AnnotatedTimeline.tsxspencermorris04/musephoria @ d2e09cff: src/app/api/media/[id]/stream/route.tsspencermorris04/musephoria @ d2e09cff: src/app/api/media/[id]/peaks/route.ts
Version comparison and A/B listening
Listeners can compare song versions and mix snapshots, switching between takes to hear changes in context.
Dedicated compare route and compare state/bar components keep selection state for versions and mix snapshots.
Present in the reviewed source.
Implementation references
spencermorris04/musephoria @ d2e09cff: src/app/songs/[id]/compare/page.tsxspencermorris04/musephoria @ d2e09cff: src/components/player/CompareBar.tsxspencermorris04/musephoria @ d2e09cff: src/components/player/compareState.tsspencermorris04/musephoria @ d2e09cff: src/components/player/snapshotMix.ts
Timestamped listening feedback
Reviewers can attach comments and reactions to moments in a song, tying discussion to what they heard in the track.

Draft comments and feedback context are handled in player components; feedback and reaction domain/API routes persist interactions.
UI captured locally. Data and integration limits are noted above.
Implementation references
spencermorris04/musephoria @ d2e09cff: src/app/review/[id]/page.tsxspencermorris04/musephoria @ d2e09cff: src/components/player/draftComments.tsspencermorris04/musephoria @ d2e09cff: src/components/player/feedbackContext.tsspencermorris04/musephoria @ d2e09cff: src/domain/reactions.tsspencermorris04/musephoria @ d2e09cff: src/app/api/feedback/route.tsspencermorris04/musephoria @ d2e09cff: src/app/api/reactions/route.ts
Reviewer queue and assignments
The review queue organizes assigned listening work, while reviewers claim or submit feedback through request-specific review screens.

Queue and assignment claim/submit APIs connect queue pages to persisted review requests and reviewer work.
UI captured locally. Data and integration limits are noted above.
Implementation references
spencermorris04/musephoria @ d2e09cff: src/app/queue/page.tsxspencermorris04/musephoria @ d2e09cff: src/app/reviewers/page.tsxspencermorris04/musephoria @ d2e09cff: src/app/api/assignments/claim/route.tsspencermorris04/musephoria @ d2e09cff: src/app/api/assignments/[id]/submit/route.tsspencermorris04/musephoria @ d2e09cff: src/domain/queue.ts
Feedback quality and reviewer reputation
The product tracks reviewer quality and reputation signals, supporting trust-aware assignment and progression rather than treating every review as equivalent.

Quality, karma, and matching modules calculate feedback and reviewer signals; the reputation page exposes a selected view.
UI captured locally. Data and integration limits are noted above.
Implementation references
spencermorris04/musephoria @ d2e09cff: src/domain/quality.tsspencermorris04/musephoria @ d2e09cff: src/domain/karma.tsspencermorris04/musephoria @ d2e09cff: src/domain/matching.tsspencermorris04/musephoria @ d2e09cff: src/app/reputation/page.tsxspencermorris04/musephoria @ d2e09cff: docs/self-review-and-matching-design.md
Reviewer levels and feature unlocks
Reviewer progress unlocks selected capabilities as quality and contribution thresholds are met; locked features explain their progression requirement.

Shared feature-shape mapping drives gates and unlock API; LockedCard and LevelChip communicate state in UI.
UI captured locally. Data and integration limits are noted above.
Implementation references
spencermorris04/musephoria @ d2e09cff: docs/BUILD-LOG.mdspencermorris04/musephoria @ d2e09cff: src/domain/unlocks.tsspencermorris04/musephoria @ d2e09cff: src/app/api/me/unlocks/route.tsspencermorris04/musephoria @ d2e09cff: src/components/unlocks/LockedCard.tsxspencermorris04/musephoria @ d2e09cff: src/components/unlocks/LevelChip.tsx
Reviewer practice and calibration
Practice tasks and calibration flows let reviewers build and check feedback skill before taking on more demanding work.
Practice and forms domain modules support onboarding/training completion and related quality calibration records.
Present in the reviewed source.
Implementation references
spencermorris04/musephoria @ d2e09cff: src/domain/practice.tsspencermorris04/musephoria @ d2e09cff: src/domain/forms.tsspencermorris04/musephoria @ d2e09cff: src/app/onboarding/page.tsxspencermorris04/musephoria @ d2e09cff: src/app/api/onboarding/practice/route.tsspencermorris04/musephoria @ d2e09cff: src/app/api/training/complete/route.tsspencermorris04/musephoria @ d2e09cff: docs/BUILD-LOG.md
Notifications and feedback forms
Members can manage notifications and community feedback forms provide structured collection and result views.
Notification preferences and forms have dedicated pages/APIs; form results are permissioned through separate routes.
Present in the reviewed source.
Implementation references
spencermorris04/musephoria @ d2e09cff: src/app/notifications/page.tsxspencermorris04/musephoria @ d2e09cff: src/app/feedback/forms/page.tsxspencermorris04/musephoria @ d2e09cff: src/app/feedback/forms/[id]/results/page.tsxspencermorris04/musephoria @ d2e09cff: src/app/api/notifications/route.tsspencermorris04/musephoria @ d2e09cff: src/domain/notify.ts
Building and checking it.
Most of the work went into mechanism design and successive foundations. The published retrospective identifies that imbalance directly: each migration solved a real technical limitation while delaying the test of the core social behavior.
The lesson is to build the smallest experiment that can disprove the central assumption. In this case, that was whether two strangers would exchange useful feedback under a simple playback constraint.
The earlier retrospective describes an unlaunched exchange and collaborative hackathon components. The later Next.js app runs locally, including its built-in example review pages. This capture does not establish production adoption, successful peer exchanges or the validity of the incentive model.
Source notes
Based on repository code and project records reviewed on October 30, 2026. Historical checks are described as recorded, not rerun for this article. Screenshots, renders, and mockups are labeled individually.
aspera-protocol/src/content/projects/musephoria.mdxspencermorris04/musephoria @ d2e09cff: README.mdspencermorris04/musephoria @ d2e09cff: src/app/examples/page.tsxspencermorris04/musephoria @ d2e09cff: src/domain/quality.ts
