Skip to content

On-chain IP for independent music. A home for artists who won’t play the influencer game — and creators who need real sound. Commercial licensing, encrypted collaboration, real payouts. Built at Story Buildathon 2025 — powered by Story Protocol · Coinbase CDP · Base L2 · Waku · IPFS · Prisma · Next.js.

Notifications You must be signed in to change notification settings

ValenteCreativo/Side-B

Repository files navigation

Side B Sessions

🎵 SIDE B SESSIONS

On-chain IP for independent music

Built for musicians who won't play the influencer game — and creators who need real music.


🎧 The Essence

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.


🎬 How It Works

User Flow — From Upload to Payout

For Musicians:

  1. Sign in with email/OTP → get a non-custodial wallet automatically (Coinbase CDP)
  2. Upload your track or jam → audio stored on Vercel Blob, validated, pinned to IPFS via Pinata
  3. Register as IP asset → Story Protocol creates on-chain provenance for your work
  4. Set pricing → define licensing terms and prices in USDC/ETH
  5. Track analytics → see who licenses your music, how much you earn, usage stats

For Creators:

  1. Browse the catalog → discover IP-verified tracks ready for licensing
  2. Preview & License → stream previews, purchase licenses with USDC/ETH on Base L2
  3. Fiat on-ramp → use credit card via Halliday if you don't have crypto
  4. Payment verified → smart contract confirms transfer before unlocking downloads
  5. 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

🏗️ Architecture Overview

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
Loading

🔧 Tech Stack

One stack. Full IP lifecycle. Web3 UX that feels like Web2.

Web3 & IP Infrastructure

Story Protocol Base L2 Coinbase CDP Halliday Waku

  • 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

Frontend & User Experience

Next.js React Tailwind

  • 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

Smart Contracts & Security

Foundry OpenZeppelin Viem

  • Foundry — Solidity testing, deployment, contract scripting
  • OpenZeppelin — Battle-tested ERC-20, payment splitter contracts
  • Viem — Type-safe Ethereum interactions, transaction verification

Storage, Database & Infrastructure

Pinata Neon Vercel

  • 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

🛠 For Devs: Setup & Code

Quick Start — Installation

Prerequisites

  • Node.js 18+
  • PostgreSQL (or use Neon serverless)
  • API keys for: Coinbase CDP, Story Protocol, Pinata, Halliday

Setup Steps

# 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 dev

Environment Variables

Key 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


📂 Code Map — Key Integrations

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

Story Protocol — IP Registration

// 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
    }
  })
}

Coinbase CDP — Email Authentication

// 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' }
})

Waku — Encrypted Messaging

// 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])

Payment Verification — Smart Contract

// 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
}

🎯 What Makes This Different

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.


🗺️ Roadmap

Post-Hackathon Plans

🛣️ Roadmap — Side B (Post Hackathon - 2026)

Q1 — Validate

  • 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

Q2 — Scale

  • 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

Q3 — Grow

  • 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

Q4 — Expand

  • 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 ❤️‍🔥


About

On-chain IP for independent music. A home for artists who won’t play the influencer game — and creators who need real sound. Commercial licensing, encrypted collaboration, real payouts. Built at Story Buildathon 2025 — powered by Story Protocol · Coinbase CDP · Base L2 · Waku · IPFS · Prisma · Next.js.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •