The Problem Musicians don't meaningfully profit from streaming unless they become content creators or influencers. The algorithm rewards personal brand over artistry. Practice hours and songwriting don't pay bills.
Our Solution: Side B Sessions transforms voice notes, jams, and under-monetized tracks into licensable IP assets that filmmakers, content creators, and indie game studios can discover and license directly.
This is a marketplace where musicians and visual artists meet — not just a licensing platform. It's also a collaboration space where sonic creatives who excel musically but struggle with video can connect with visual artists who understand their sound and co-create together.
IP rights are the foundation: We use Story Protocol to guarantee that rights, provenance, and payouts are handled correctly — on-chain, transparent, and automatic. Every upload becomes a registered IP asset. Every license is traceable. Every payment settles fairly.
We honor practice hours and songwriting, not follower counts — IP rights flow from the music itself.
User Flow — From Upload to Payout
For Musicians:
- Sign in with email/OTP → get a non-custodial wallet automatically (Coinbase CDP)
- Upload your track or jam → audio stored on Vercel Blob, validated, pinned to IPFS via Pinata
- Register as IP asset → Story Protocol creates on-chain provenance for your work
- Set pricing → define licensing terms and prices in USDC/ETH
- Track analytics → see who licenses your music, how much you earn, usage stats
For Creators:
- Browse the catalog → discover IP-verified tracks ready for licensing
- Preview & License → stream previews, purchase licenses with USDC/ETH on Base L2
- Fiat on-ramp → use credit card via Halliday if you don't have crypto
- Payment verified → smart contract confirms transfer before unlocking downloads
- Download & Use → commercial-grade licenses for film, content, games, etc.
For Collaboration:
- Encrypted messaging via Waku → coordinate custom work, negotiate extras, plan visual collaborations privately
- Direct connections → musicians find visual artists, filmmakers discover sound designers
System Diagram — Full Stack Flow
flowchart TB
%% Musician Flow
subgraph MUSICIAN["🎤 Musician Journey"]
A[Email/OTP Login<br/>Coinbase CDP]
B[Wallet Created<br/>Base L2 EOA]
C[Upload Audio<br/>Vercel Blob]
D[Metadata & Pricing<br/>PostgreSQL/Prisma]
E[Pin to IPFS<br/>Pinata Gateway]
F[Register IP Asset<br/>Story Protocol]
G[Dashboard<br/>Licenses · Revenue · Analytics]
end
%% Creator Flow
subgraph CREATOR["🎬 Creator Journey"]
H[Browse Catalog<br/>IP-verified Tracks]
I[License Purchase<br/>USDC/ETH on Base]
J[Payment Splitter<br/>Smart Contract]
K[Musician Payout<br/>Automated Split]
L[Platform Fee<br/>Revenue Share]
end
%% Messaging
subgraph MESSAGING["💬 Collaboration"]
M[Encrypted Chat<br/>Waku P2P Messaging]
end
%% Fiat Bridge
subgraph FIAT["💳 Fiat Gateway"]
N[Halliday On-Ramp<br/>Card → USDC/ETH]
end
%% Connections
A --> B --> C --> D --> E --> F --> G
F --> H
H --> I --> J
J --> K
J --> L
%% Messaging flows
K -. "custom work" .-> M
H -. "collaboration" .-> M
%% Fiat funding
N -. "fund wallet" .-> I
One stack. Full IP lifecycle. Web3 UX that feels like Web2.
- Story Protocol SDK — IP asset registration, licensing workflows, on-chain provenance
- Base L2 — USDC/ETH payments, low fees, Story Protocol alignment
- Coinbase CDP — Email/OTP authentication, non-custodial wallets, no seed phrases
- Halliday — Credit card → crypto on-ramp for seamless fiat purchases
- Waku — Decentralized P2P messaging with end-to-end encryption
- Next.js 14 — App Router, server components, optimized routing
- React 18 — TypeScript-first, modern hooks, concurrent features
- Tailwind + shadcn/ui — Rapid UI development with accessible components
- Particles.js — Interactive visual effects for artist branding
- Foundry — Solidity testing, deployment, contract scripting
- OpenZeppelin — Battle-tested ERC-20, payment splitter contracts
- Viem — Type-safe Ethereum interactions, transaction verification
- Pinata IPFS — Permanent metadata and asset storage
- Neon PostgreSQL — Serverless database for catalog and analytics
- Vercel Blob — Audio upload intake and validation
- Prisma — Type-safe database ORM
Quick Start — Installation
- Node.js 18+
- PostgreSQL (or use Neon serverless)
- API keys for: Coinbase CDP, Story Protocol, Pinata, Halliday
# 1. Install dependencies
npm install
# 2. Copy environment template
cp .env.example .env
# 3. Configure your .env with API keys
# See docs/INSTALLATION.md for detailed key setup
# 4. Initialize database
npx prisma generate
npx prisma db push
# 5. Run development server
npm run devKey integrations require these environment variables:
# Story Protocol
STORY_RPC_URL=
STORY_PRIVATE_KEY=
SPG_CONTRACT=
# Coinbase CDP
COINBASE_API_KEY_NAME=
COINBASE_API_KEY_SECRET=
# Base L2
BASE_RPC_URL=
BASE_PRIVATE_KEY=
# IPFS / Pinata
PINATA_JWT=
PINATA_GATEWAY=
# Halliday
HALLIDAY_API_KEY=
# Database
DATABASE_URL=
# Waku
WAKU_CONTENT_TOPIC=Full setup guide: docs/INSTALLATION.md
Documentation Vault
Comprehensive guides for every integration
docs/
├── 📘 INSTALLATION.md Complete setup guide + .env.example
├── 🏗️ ARCHITECTURE.md System design and data flow diagrams
├── 🔐 COINBASE_INTEGRATION.md CDP wallet setup and authentication
├── 🎯 STORY_PROTOCOL.md IP registration workflows
├── 💬 WAKU_MESSAGING.md P2P messaging implementation
├── 💳 PAYMENT_FLOWS.md ERC-20 verification + Halliday
├── 📦 SMART_CONTRACTS.md Foundry setup + OpenZeppelin
└── 🚀 DEPLOYMENT.md Production deployment checklist
Start here: docs/INSTALLATION.md — full environment setup in under 5 minutes
Quick Code Example — Story Protocol IP Registration
import { StoryClient } from '@story-protocol/core-sdk'
import { http } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
// Initialize Story Protocol client
export const storyClient = StoryClient.newClient({
transport: http(process.env.STORY_RPC_URL),
chainId: 'aeneid',
account: privateKeyToAccount(process.env.STORY_PRIVATE_KEY as `0x${string}`)
})
// Register track as IP asset
export async function registerIPAsset(
ipfsHash: string,
nftContract: string,
tokenId: string
) {
const response = await storyClient.ipAsset.register({
nftContract,
tokenId,
metadata: {
metadataURI: ipfsHash,
metadataHash: keccak256(ipfsHash)
}
})
return response.ipId // On-chain IP identifier
}See full implementation: lib/story.ts
Every integration, one file. Clean separation of concerns.
| Integration | Purpose | File Location |
|---|---|---|
| 🎯 Story Protocol | IP asset registration and licensing | lib/story.ts |
| 🔐 Coinbase CDP | Email/OTP authentication and wallet creation | components/providers/CoinbaseProvider.tsx |
| 💬 Waku Messaging | P2P encrypted chat setup and message handling | components/waku/WakuProvider.tsx |
| 💰 Payment Verification | ERC-20 transfer validation before license unlock | lib/payment-verification.ts |
| 📌 Pinata IPFS | Metadata pinning and gateway access | lib/pinata.ts |
| 💳 Halliday | Fiat on-ramp integration for credit card purchases | lib/halliday.ts |
| 🎵 Audio Upload | Vercel Blob intake and validation pipeline | app/api/sessions/route.ts |
View Code Snippets
// lib/story.ts
export async function registerTrack(ipfsHash: string, price: bigint) {
return storyClient.ipAsset.register({
nftContract: process.env.SPG_CONTRACT!,
tokenId: generateTokenId(),
metadata: {
metadataURI: ipfsHash,
licensingFee: price
}
})
}// components/providers/CoinbaseProvider.tsx
const sdk = new CoinbaseWalletSDK({
appName: 'Side B Sessions',
enableCDP: true,
cdpConfig: {
apiKeyName: process.env.COINBASE_API_KEY_NAME!,
apiKeySecret: process.env.COINBASE_API_KEY_SECRET!
}
})
const provider = sdk.makeWeb3Provider()
await provider.request({
method: 'eth_requestAccounts',
params: { loginType: 'email' }
})// components/waku/WakuProvider.tsx
const node = await createLightNode({
defaultBootstrap: true,
shardInfo: { contentTopics: ['/sideb/1/messages/proto'] }
})
await node.start()
await waitForRemotePeer(node, [Protocols.LightPush, Protocols.Filter])// lib/payment-verification.ts
export async function verifyPayment(
txHash: string,
expectedAmount: bigint,
recipient: string
) {
const receipt = await client.getTransactionReceipt({ hash: txHash })
const transferEvent = receipt.logs.find(
log => log.topics[0] === keccak256('Transfer(address,address,uint256)')
)
return transferEvent?.topics[2] === recipient &&
BigInt(transferEvent.data) >= expectedAmount
}Not another streaming platform. Not another NFT marketplace. A new music economy.
- 🎵 Licensing over Streaming — Musicians earn real money from usage rights, not fractions of a cent per play
- 🤝 Direct Marketplace — Musicians and creators transact directly. No labels, no distributors, no middlemen taking cuts
- 🎨 Collaboration Built-In — Musicians who can't do video meet filmmakers who need authentic sound. Private messaging enables real partnerships
- ✉️ Email = Web3 Wallet — Your email is your wallet. No seed phrases to lose, no scary crypto UX
- 💳 Credit Cards Work — Creators can pay with Visa/Mastercard via Halliday. Crypto is invisible infrastructure
- 🛡️ IP Rights First — Every track is a Story Protocol IP asset. Rights are immutable, traceable, and enforceable
- 📊 Full Transparency — Artists see every license sold, every dollar earned, every usage of their work
- 🔒 Private by Default — Waku encrypted messaging means collaborations stay between you and your partner
The vision: A place where musicians who won't play the influencer game can monetize their art, and creators find authentic sounds instead of stock music library #47.
Post-Hackathon Plans
- Onboard early creators and filmmakers
- Analyze product usage, licensing flow, conversion funnels
- Stress test database, uploads, streaming, and payments
- Rapid iterations to fix friction and prove core value
- Infrastructure hardening for larger catalogs + higher traffic
- Improve discovery flow for fast matches (genres, moods, tags)
- Onboarding playbooks for small agencies and indie studios
- Priority: More tracks, more buyers, more transactions
- Marketing + partnerships with film schools & indie communities
- Curator playlists driving discovery and licensing momentum
- Creator revenue dashboards and simple catalog tools
- Target: sustainable marketplace liquidity
- Collaboration tools (royalty splits, showcases)
- Extended licensing options and negotiation flow
- Strategic expansions into new regions and integrations
- Prepare for mobile + ecosystem services in 2026
🏆 Built at the Surreal World Assets Buildathon 2025 — empowering musicians to earn from their craft and helping visual storytellers discover authentic sounds.
Born at a Buildathon — continuing for the artists who won't play the "personal brand" game, and for the storytellers who need music with soul.
Built for musicians and artists — by one of them.
From México with ❤️🔥