Onchain Radio for the Base Ecosystem
Live DJs · Crypto Tipping · Token-Gated Access · Onchain Events
Live: basefm.space · Shop: shop.basefm.space · Guide: /guide
baseFM is a community-owned radio station built on Base. DJs stream live, listeners tip in crypto, and everyone owns a piece of the culture.
We're not a platform. We're a scene.
- Tune in live at basefm.space — jungle, dub, drum & bass, electronic
- Push notifications — get alerted when your favourite DJ goes live
- Chat in real-time during streams
- Tip your DJ — ETH, USDC, RAVE, cbBTC straight to their wallet
- Stream live from OBS — RTMP in, HLS out, global CDN
- Your own profile — stats, followers, banner, bio
- Get paid directly — tips go straight to your wallet, no middleman
- Show archives — automatic recording and playback
- Weekly schedule — lock in your recurring timeslot
baseFM is open source. We welcome contributors of all levels.
git clone https://github.com/Eskyee/baseFM.git
cd baseFM
npm install
cp .env.example .env.local
npm run devSee the Developer Guide below for setup details.
- Community events — listings, parties, and shows
- Onchain tickets — buy with USDC, verify with your wallet
- Promoter tools — crew management, POS, check-in, Slack notifications
- 35+ production roles — from stage manager to sound engineer
- $RAVE — 5,000+ tokens for DJ-gated community access
- Show NFTs — mint recordings as collectibles
- Direct payments — tips and tickets go straight to wallets
We want your help. Seriously.
Good first issues — check the issues tab for beginner-friendly tasks.
How to contribute:
- Fork the repo
- Create a branch:
git checkout -b feature/amazing - Make your changes
- Push and open a PR
What we need help with:
- UI/UX improvements
- Mobile experience
- Chat moderation tools
- Genre filtering and search
- Analytics dashboards
- Documentation
- Testing
Code style: TypeScript, Tailwind CSS, Next.js App Router. Check CLAUDE.md for full conventions.
| Feature | Description |
|---|---|
| Live Streaming | RTMP → HLS via Mux, global CDN |
| Show Archives | Automatic recording and playback |
| Live Chat | Real-time during streams (Supabase) |
| Multi-Token Tips | ETH, USDC, RAVE, cbBTC |
| Follow System | Track your favourite DJs |
| Push Notifications | Never miss a live show |
| PWA | Install as app on iOS/Android |
| Feature | Description |
|---|---|
| Streaming Dashboard | Start/stop, OBS credentials, stats |
| DJ Profiles | Bio, banner, socials, follower count |
| Weekly Schedule | Lock in recurring timeslots |
| DJ of the Day | Featured artist spotlight |
| Direct Wallet | Tips arrive in your wallet instantly |
| Feature | Description |
|---|---|
| Event Management | Create events, sell tickets, manage attendees |
| Onchain Tickets | USDC payments, wallet verification |
| Crew Dashboard | 35+ roles, check-in, notifications |
| POS System | QR payment generation + ticket scanner |
| Accounting | Revenue tracking with GBP conversion |
| Feature | Description |
|---|---|
| CI/CD | GitHub Actions (lint, test, build) |
| Tests | 55+ unit tests with Vitest |
| TypeScript | Full type safety |
| OnchainKit | Base names, avatars, wallet auth |
| Layer | Tech |
|---|---|
| Framework | Next.js 14 (App Router) |
| Database | Supabase (Postgres + Realtime) |
| Streaming | Mux (RTMP → HLS) |
| Blockchain | Base (wagmi, viem, OnchainKit) |
| Styling | Tailwind CSS |
| Language | TypeScript |
cp .env.example .env.local# Supabase
NEXT_PUBLIC_SUPABASE_URL=https://xxxxx.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbG...
SUPABASE_SERVICE_ROLE_KEY=eyJhbG...
# Mux (https://dashboard.mux.com)
MUX_TOKEN_ID=xxxxx
MUX_TOKEN_SECRET=xxxxx
MUX_WEBHOOK_SECRET=xxxxx
# Base Network
NEXT_PUBLIC_BASE_CHAIN_ID=8453
NEXT_PUBLIC_BASE_RPC_URL=https://mainnet.base.org
# OnchainKit (https://portal.cdp.coinbase.com)
NEXT_PUBLIC_ONCHAINKIT_API_KEY=
# Push Notifications (npx web-push generate-vapid-keys)
NEXT_PUBLIC_VAPID_PUBLIC_KEY=
VAPID_PRIVATE_KEY=
# App
NEXT_PUBLIC_APP_URL=http://localhost:3000Run these SQL files in Supabase SQL Editor (in order):
supabase/schema-djs.sql- DJ profilessupabase/schema-schedule.sql- Weekly schedulesupabase/schema-members.sql- Community directorysupabase/schema-chat.sql- Live chatsupabase/schema-notifications.sql- Favorites + pushsupabase/schema-tips.sql- Tips trackingsupabase/schema-nfts.sql- NFT collectibles
Enable Realtime for chat_messages table in Supabase dashboard.
baseFM/
├── app/ # Next.js App Router
│ ├── api/ # API routes
│ ├── dashboard/ # DJ dashboard
│ ├── djs/ # DJ profiles
│ ├── events/ # Community events
│ └── community/ # Token-gated directory
├── components/ # React components
├── lib/ # Utilities
│ ├── db/ # Database functions
│ ├── mux/ # Mux API client
│ └── supabase/ # Supabase client
├── supabase/ # SQL schema files
└── public/ # Static assets + PWA
┌─────────────────────────────────────────────────┐
│ Vercel (Next.js) │
│ ┌─────────────┐ ┌─────────────────┐ │
│ │ API Routes │────────▶│ Supabase │ │
│ └──────┬──────┘ └─────────────────┘ │
│ │ RTMP │
│ ▼ │
│ ┌─────────────┐ ┌──────────────┐ │
│ │ Mux │────▶│ Webhooks │ │
│ └──────┬──────┘ └──────────────┘ │
│ ▼ HLS │
│ ┌─────────────┐ │
│ │ Listeners │ │
│ └─────────────┘ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Base │◀───────▶│ OnchainKit │ │
│ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────┘
- Live: basefm.space
- Shop: shop.basefm.space
- GitHub: Eskyee/baseFM
- Issues: github.com/Eskyee/baseFM/issues
- RaveCulture: base.app/profile/raveculture
MIT
Built with love by RaveCulture for Base Builders
📻 Keep the signal alive
