Casset
Founded and shipped a live music platform, solo and end to end
Casset gives artists a home for their music identity — founded, designed, and built solo. Artists claim a handle and get a profile world: songs, atmosphere, and release context in one place. Every track carries an authored 30-second hook — a window with synced lyrics and visuals that fans can export as vertical video for TikTok, so even unfinished songs can see the light of day. Fans collect with one tap of Apple Pay and artists keep roughly 90% through Stripe Connect. As music gets easier to generate, the scarce layer is authored identity — Casset is built around preserving it. It began as a way for artists to launch coins on Base — hence the name Casset (crypto asset) — before I pivoted to the simpler, broader product that’s live today at casset.fm.
Live Demo
This is the actual product running live.
01
Origin - Base Network MVP
Where it started: launching artist coins through the Flaunch API on Base Sepolia, with Coinbase Wallet and Sign In with Base. I killed this direction in favor of a simpler, broader product - but it named the company.
02
Create a casset - live
The most recent version, running, with the whole creation flow in the frame below; claim a name and walk it yourself on mobile. End to end: (1) Claim a handle on the landing and your artist world is built instantly (a profile with Hooks, Tracks, and a Room) before any sign-up. (2) Edit sets the avatar, cover, and bio and flips a one-tap Paid access toggle (fans pay once to unlock, or listen free). (3) Add track uploads your music - which stays yours, never used to train generative AI. (4) Design controls the surface fans see while hooks play: the track's own beat-reactive visuals, or a cover photo. (5) Continue with Apple or sign up with email saves and publishes it - signup is deliberately deferred until after you've already built something.

03
Creating a casset
The current flow, as a static screen since the live frame doesn't follow you onto mobile: claiming a handle is the whole onboarding - “build your first world.” Continue with Apple or Instagram, or email and password, and your artist world is created; the handle you pick becomes the link you share.
04
A closer look - inside the app
The shipped product, screen by screen - the artist profile, the hook player, and one-tap collecting.
05
Audio-reactive hooks & the collect gate
Every hook drives beat-reactive visuals off a shared playback clock; collecting unlocks the full track behind a per-stream entitlement check.
06
Visual Studio & packs
Artists compose beat-reactive shaders in an in-browser Visual Studio, then price and sell them as visual packs from their profile.
07
Synced lyrics
Lyrics are cued in real time off the same playback clock that drives the hook and its visuals.
08
Feed, store & social
The discovery and social layer around every drop - a trending feed, a store of featured cassets, and direct messages.
09
On the web
Casset on the desktop web.
10
Early brand exploration
Landing directions for the casset brand - the iridescent disc mark explored across light, cream, and dark treatments, with the wordmark scaled from a quiet lockup to a full-bleed graphic. Different bets on tone (“create a casset with exclusive content and tracks · earn money”) before the identity settled.
11
casset.fm - live today
Where it landed - the current landing page: claim a handle, build an artist world, drop differently. Underneath the cinematic surface sits a canonical, machine-readable layer - releases, manifests, permissions, and provenance - built on Next.js, Postgres, blob storage, Stripe, and Redis.
12
The product system
The whole product mapped in one board - the site and gate, onboarding and token launch, profile creation, playing with beat-reactive hooks, preview and tip purchases, and the library. Everything that ships, in one view.
Under the Hood
Casset is a single Next.js application, designed, built, and operated by one person since March 2026. It spans authenticated audio streaming, Stripe Connect payments, realtime social systems, and a machine-readable release layer. The architecture is documented publicly at casset.fm/docs.
- 829
- commits since March 2026
- 226
- API routes across audio, payments, social & cron
- 119
- screens in the app router
- 67
- database models · 45 migrations
- 321
- unit tests across 38 suites
- 17
- public architecture chapters at casset.fm/docs
Product status
- Solo-built since Mar 2026
- Live creator profiles
- Stripe Connect payments active
- AI visual generation & campaign intelligence active
- Mobile web + PWA
- Artist onboarding underway
Architecture
Streaming pipeline
Tokenized audio behind a byte-range proxy with per-request entitlement checks. Preview windows are computed server-side from bitrate estimation; no public file URLs exist.
Payments
Stripe Connect direct charges with Apple Pay and guest checkout. Webhooks across six event types are idempotent on every write path; refunds and chargebacks revoke access immediately.
Campaign engine
Autonomous promotional drops with fraud screening. Payouts settle only when the ledger reconciles to the prize pool exactly, behind four independent idempotency layers.
AI layer
Claude-backed visual generation and campaign intelligence: sanitized inputs, Redis cost caps, bounded structured output, deterministic fallbacks.
Realtime systems
Redis presence and server-sent events behind comments, follows, activity, and an append-only referral ledger.
Visual runtime
Audio-reactive visualizers and themed players driven by a shared playback clock; per-artist OG images; offline-capable PWA with tiered caching.
Engineering challenges
Instagram's in-app browser
Half of traffic arrives here. Storage, autoplay, and viewport constraints shaped auth, playback, and checkout.
iOS Safari playback
Suspended audio contexts, NaN durations before play resolves, background-tab garbage collection - the player recovers from each.
Route-persistent audio
A single audio element owned above the router. Playback survives every navigation and powers lock-screen controls.
Tokenized streaming
Every stream passes entitlement validation, served with the 206 range semantics iOS requires for seeking.
Preview-window playback
30-second hooks enforced server-side and looped client-side with a ~50ms micro-fade.
Stripe Connect marketplace flows
Direct charges to artist accounts, merchant-of-record duties, and dispute-driven access revocation.
Realtime on serverless
Presence and SSE where connection lifetime is the constraint, with Redis as shared state.