Fehlende Komponenten
Überblick
Dies ist eine exhaustive Liste aller Komponenten und Features, die für den Launch benötigt werden. Jeder Eintrag enthält eine Effort-Schätzung, Impact-Assessment, und Dependencies.
Landing Page (KRITISCH - Blockiert alles)
Status: ❌ Komplett fehlend
Impact: KRITISCH (10/10) - First Impression und Conversion
Effort: 3-4 Tage
Dependencies: Keine
Anforderungen
1. Hero Section
- Large Headline: "Discover Tomorrow's Music Stars Today"
- Subheadline: "A platform where Creators curate, Artists compete, A&Rs discover"
- Hero CTA Button: "Get Started" (splits to Creator vs Artist signup)
- Background: Animated gradient oder Video Loop mit Song-Snippets
- Design: Modern, Music Industry Standard (siehe: Splice, Amuse, DistroKid)
Components needed:
HeroSection.jsx(animated background, text, CTA)ValuePropositionGrid.jsx(3-4 tiles: For Creators, For Artists, For A&Rs)SocialProofSection.jsx(Testimonials, Stats, Logos)PricingShowcase.jsx(Boost pricing tiers, Tournament announcement)FAQSection.jsx(Common questions)FooterCTA.jsx(Newsletter signup, final call-to-action)
2. Creator-Specific Section
- "Host Sessions, Earn Revenue"
- Feature bullets:
- "Curate songs from emerging artists"
- "Earn money when fans boost your queue"
- "Build your audience"
- "Compete on the leaderboard"
- Screenshot/Video of host interface
- Testimonial from early creator
Components:
CreatorShowcase.jsx(video or screenshot carousel)CreatorBenefitsGrid.jsx(features with icons)
3. Artist-Specific Section
- "Get Discovered, Climb the Leaderboard"
- Feature bullets:
- "Submit your music once"
- "Get voted on by thousands"
- "Qualify for our Global Tournament"
- "Impress Label Scouts (A&Rs)"
- Screenshot of voting interface
- "Path to Breakout" visual
Components:
ArtistShowcase.jsxQualificationPathVisual.jsx(animated progress of qualification)
4. Tournament Teaser
- "Breakout Tournament"
- "Discover 50 new artists, live streamed, scored by top industry judges"
- Date announcement
- Early signup button
Components:
TournamentTeaser.jsx
Code Structure
apps/web/src/pages/
├── Landing.jsx # Main landing page
└── components/
├── HeroSection.jsx
├── ValuePropositionGrid.jsx
├── CreatorShowcase.jsx
├── ArtistShowcase.jsx
├── TournamentTeaser.jsx
├── SocialProofSection.jsx
├── PricingShowcase.jsx
├── FAQSection.jsx
└── FooterCTA.jsx
Onboarding Flows (KRITISCH - Blockiert User Retention)
Status: ❌ Komplett fehlend
Impact: Sehr Hoch (9/10) - High churn ohne onboarding
Effort: 4-5 Tage
Dependencies: Landing Page, User Auth
Creator Onboarding
Flow:
- Creator signups → "Let's get you started"
- Profile Setup (name, profile picture, bio, social links)
- Session Creation Tutorial (step-by-step: create session, add description, set queue size)
- First Session Preview (what will viewers see?)
- Invite Friends (QR code, copy link)
- Go Live Button
- Post-Session: Creator Dashboard preview
Components:
OnboardingContainer.jsx(wizard container)ProfileSetupForm.jsx(input fields)SessionCreationWizard.jsx(step-by-step)SessionPreview.jsx(live preview)InviteFriendsStep.jsx(QR code + link copy)
Features:
- Progress bar (Step 1 of 5)
- Ability to skip (but strongly encourage not to)
- Save progress (if user leaves mid-onboarding)
- Post-completion: autostart first session
Artist Onboarding
Flow:
- Artist signups → "Welcome to Breakout"
- Profile Setup (name, profile pic, bio, social links, Spotify/SoundCloud)
- Submit First Song (upload MP3, add title, add description, add cover art)
- Understanding Queue System (visual explanation of voting + boosting)
- Leaderboard Preview (where will my song rank?)
- Tournament Information (qualification path, dates)
- Community Guidelines (consent)
- Invitation to join Discord/Twitter
Components:
OnboardingContainer.jsx(reuse from Creator)ArtistProfileForm.jsxSongUploadForm.jsx(file upload, metadata)QueueSystemExplanation.jsx(interactive visual)LeaderboardPreview.jsxTournamentInformation.jsxCommunityGuidelinesAccept.jsx
Features:
- Audio preview while uploading
- Drag-and-drop file upload
- Cover art auto-detection from Spotify (if linked)
- Validation: Song must be 2-10 minutes, MP3/WAV format
A&R Onboarding
Flow:
- A&R signups (requires label/scout verification - Phase 4)
- Profile Setup (name, label, role)
- Dashboard Tour (how to search, filter, save artists)
- Bookmarking Tutorial (save artists for later)
- Create First "Saved List" (e.g., "Potential Signees Q1 2025")
Creator Dashboard (HIGH - Blockiert Creator Retention)
Status: ❌ Komplett fehlend
Impact: Hoch (8/10) - Creator engagement metric
Effort: 3-4 Tage
Dependencies: Supabase auth, session data schema
Main Dashboard View
Sections:
-
Welcome Card - "You're the #23 Creator this month!" (leaderboard position)
-
Live Session Card - If currently hosting, show live stats:
- Current viewers
- Songs played so far
- Total boosts (€)
- Leaderboard position
-
Recent Sessions Table
- Date, duration, viewers, boosts, earnings
- Click to see detailed stats
-
Earnings Summary
- Total lifetime earnings
- This month earnings
- This week earnings
- Average per session
-
Invite Stats
- How many artists submitted via your invite link?
- How many viewers signed up via your invite?
- Potential commission structure (future)
-
Leaderboard Widget
- Top 10 creators this month
- Highlight: where you are
- Metric: sessions hosted, total viewers, or total earnings
Components
components/host/
├── CreatorDashboard.jsx
├── WelcomeCard.jsx
├── LiveSessionCard.jsx
├── SessionHistoryTable.jsx
├── EarningsSummary.jsx
├── InviteStatsWidget.jsx
└── LeaderboardWidget.jsx
Data Schema (Supabase)
-- creator_sessions
CREATE TABLE creator_sessions (
id UUID PRIMARY KEY,
creator_id UUID REFERENCES users(id),
started_at TIMESTAMP,
ended_at TIMESTAMP,
total_viewers INT,
total_boosts_euros DECIMAL(10, 2),
songs_played INT,
created_at TIMESTAMP DEFAULT NOW()
);
-- creator_invite_tracking
CREATE TABLE creator_invites (
id UUID PRIMARY KEY,
creator_id UUID REFERENCES users(id),
invite_code VARCHAR UNIQUE,
artist_signups INT DEFAULT 0,
viewer_signups INT DEFAULT 0,
created_at TIMESTAMP DEFAULT NOW()
);
Artist Profile (HIGH - Artist Portfolio & Marketing)
Status: ❌ Komplett fehlend
Impact: Hoch (8/10) - Artist credibility, A&R discovery
Effort: 3-4 Tage
Dependencies: Artist user data, song database, voting system
Public Artist Profile
Sections:
-
Artist Header
- Profile picture
- Name
- Bio (editable by artist)
- Social links (Spotify, Instagram, TikTok, Twitter, YouTube)
-
Stats Section
- Total votes across all songs
- Breakout qualification status (% towards 50)
- Total boosts received
- Best performing song
- Join date
-
Songs Table
- All songs submitted
- Current rank, votes, boosts
- Submission date
- Play count (if available)
- Link to vote/boost this song
-
Qualification Path (if not yet qualified)
- Visual progress bar: "3/50 qualified"
- Estimated time to qualification at current pace
- Required votes for qualification
-
Breakout Badge (if qualified)
- "✨ Qualified Breakout Artist"
- Tournament bracket position (once tournament starts)
- Tournament results (once tournament ends)
-
Recent Activity Feed
- "Just submitted 'Neon Dreams'"
- "Entered tournament group B"
- "Got 100 votes on 'Lost Paradise'"
Components
components/shared/ (or community/)
├── ArtistProfile.jsx
├── ArtistHeader.jsx
├── ArtistStats.jsx
├── SongTable.jsx
├── QualificationPath.jsx
├── BreakoutBadge.jsx
└── ActivityFeed.jsx
Data Schema
CREATE TABLE artist_profiles (
id UUID PRIMARY KEY,
user_id UUID REFERENCES users(id) UNIQUE,
bio TEXT,
profile_picture_url VARCHAR,
spotify_url VARCHAR,
instagram_url VARCHAR,
youtube_url VARCHAR,
twitter_url VARCHAR,
tiktok_url VARCHAR,
is_qualified BOOLEAN DEFAULT FALSE,
qualified_date TIMESTAMP,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
CREATE TABLE user_songs (
id UUID PRIMARY KEY,
artist_id UUID REFERENCES users(id),
title VARCHAR NOT NULL,
description TEXT,
audio_url VARCHAR NOT NULL,
cover_art_url VARCHAR,
duration_seconds INT,
total_votes INT DEFAULT 0,
total_boosts_count INT DEFAULT 0,
total_boosts_euros DECIMAL(10, 2) DEFAULT 0,
submitted_at TIMESTAMP DEFAULT NOW(),
created_at TIMESTAMP DEFAULT NOW()
);
Invite System (CRITICAL - Viral Growth Dependent)
Status: ❌ Komplett fehlend
Impact: KRITISCH (10/10) - Network effects depend on this
Effort: 2-3 Tage
Dependencies: qrcode.react, Supabase tables
Components
1. Invite Link Generation
- User can generate unique invite link
- Link format:
https://breakout.music/?ref=xyz123 - One link per user (reusable)
- Can view QR code at any time
Flow:
- User goes to Settings → Invite Friends
- Generate button creates unique code if doesn't exist
- Display: link + QR code
- Copy button for link, Download button for QR code
Component:
// InvitePanel.jsx
const [inviteCode, setInviteCode] = useState(null);
const [qrUrl, setQrUrl] = useState(null);
const generateInvite = async () => {
const code = await generateUniqueCode();
const fullLink = `https://breakout.music/?ref=${code}`;
const qrCode = await QRCode.toDataURL(fullLink);
setInviteCode(code);
setQrUrl(qrCode);
};
return (
<div>
<h2>Share Breakout</h2>
<button onClick={generateInvite}>Generate Invite Link</button>
{inviteCode && (
<>
<p>Your link: {`https://breakout.music/?ref=${inviteCode}`}</p>
<img src={qrUrl} />
<button onClick={() => copyToClipboard(...)}>Copy Link</button>
<button onClick={() => downloadQR(...)}>Download QR</button>
</>
)}
</div>
);
2. Invite Redemption
- When new user signs up with
?ref=xyz123, track it - Associate new user with referrer
- Count signups per referrer
Implementation:
// In signup flow
useEffect(() => {
const params = new URLSearchParams(window.location.search);
const referrerCode = params.get('ref');
if (referrerCode) {
localStorage.setItem('referrer_code', referrerCode);
// Later, when user completes signup:
await trackInviteRedemption(userId, referrerCode);
}
}, []);
3. Invite Tracking
- Creator can see: "You've invited 47 people who signed up"
- Artist can see: "5 of your invites are now voting"
- Leaderboard section: "Top Inviters" (gamification)
Components:
pages/invite/
├── InvitePanel.jsx
├── InviteQRCode.jsx
└── InviteStats.jsx
Database:
CREATE TABLE invite_tracking (
id UUID PRIMARY KEY,
inviter_id UUID REFERENCES users(id),
invitee_id UUID REFERENCES users(id),
invite_code VARCHAR,
redeemed_at TIMESTAMP,
inviter_type VARCHAR ('creator' or 'artist'),
invitee_type VARCHAR,
created_at TIMESTAMP DEFAULT NOW()
);
A&R Interface (Phase 4 - Not needed for Launch, but important later)
Status: ❌ Komplett fehlend
Impact: Sehr Hoch (9/10) - Revenue model + platform differentiation
Effort: 5-7 Tage
Dependencies: Artist data, filtering, authentication/verification
A&R Onboarding & Authentication
- Requires label verification (manual Breakout approval)
- Badge: "Verified Label Scout" or "Verified A&R Manager"
- Access to special tools
Artist Discovery Interface
Features:
-
Search & Filter
- By qualification status (all artists, qualified only)
- By genre
- By region
- By date (new artists, trending)
- By votes (top 100, rising stars)
-
Artist Cards
- Profile picture, name, bio
- Top song preview (play button)
- Stats: total votes, social followers
- "Save" button to list
-
Saved Lists
- Create custom lists (e.g., "Potential Signees Q1 2025")
- Add/remove artists
- Share lists with team members
- Notes per artist ("Great vocalist, needs production help")
-
Bulk Actions
- Export list to CSV
- Send message to all (batch email template)
Components
components/ard/ (A&R-specific)
├── ArtistDiscovery.jsx
├── ArtistSearchFilters.jsx
├── ArtistCard.jsx
├── SavedLists.jsx
└── ArtistNotes.jsx
Tournament Mode (CRITICAL - Core Feature for Launch)
Status: ❌ Komplett fehlend
Impact: KRITISCH (10/10)
Effort: 10-15 Tage
Dependencies: Major feature, see Technische Anforderungen Tournament
See separate document for detailed requirements.
Notification System (MEDIUM - Engagement Feature)
Status: ❌ Komplett fehlend
Impact: Mittel (7/10) - User engagement and retention
Effort: 2-3 Tage
Dependencies: Email backend, Supabase jobs/scheduling
In-App Notifications
Components:
components/shared/
├── NotificationCenter.jsx (Toast, Notification Bell)
├── NotificationList.jsx (History view)
└── NotificationPreferences.jsx (Settings)
Types of notifications:
- "Your song got 50 votes!"
- "You just qualified for the tournament!"
- "X people are voting on your song right now"
- "A session you invited friends to is starting soon"
- "An artist you voted for qualified!"
Email Notifications
Types:
- Weekly digest - "Your stats this week: 200 votes, €50 earned"
- Milestone notifications - "Congrats! You qualified for Breakout Tournament"
- Tournament notifications - "Your group stage bracket is live"
- Artist notifications - "Your song is trending (top 50)"
Implementation:
- Supabase scheduled jobs or Netlify functions
- Email templates in service like SendGrid/Mailgun
- User preferences (opt-in/out per type)
Analytics Dashboard (Internal Tools - Not for Launch but Important)
Status: ❌ Komplett fehlend
Impact: Hoch (8/10) - Growth decisions depend on this
Effort: 3-4 Tage
Dependencies: Data warehouse or aggregation layer
Metrics to Track
User Growth:
- DAU (Daily Active Users)
- WAU (Weekly Active Users)
- New signups per day (Creator vs Artist split)
- Retention (Day 1, Day 7, Day 30)
Session Metrics:
- Sessions per day
- Average viewers per session
- Average session duration
- Concurrent viewers peak
Revenue Metrics:
- Total boost revenue
- Boosts per session (average)
- Conversion rate (% of viewers who boost)
- Average boost value
Artist Metrics:
- Total songs submitted per day
- Qualification progress ("X/50 qualified")
- Artist retention (how many submit 2nd song)
- Top songs (by votes)
Creator Metrics:
- Top creators by viewers
- Top creators by earnings
- New creator retention
Components
apps/admin/ (separate admin dashboard)
├── Dashboard.jsx
├── MetricsGrid.jsx
├── Charts/
│ ├── DAUChart.jsx
│ ├── RevenueChart.jsx
│ └── QualificationProgressChart.jsx
└── Tables/
├── TopArtistsTable.jsx
├── TopCreatorsTable.jsx
└── RecentSignupsTable.jsx
Progress Tracker / Public Leaderboards
Status: ❌ Komplett fehlend
Impact: Mittel (6/10) - Gamification + urgency
Effort: 1-2 Tage
Dependencies: Real-time vote/boost aggregation
Public Progress Tracker
Component:
// ProgressTracker.jsx
export const ProgressTracker = () => {
const [qualifiedCount, setQualifiedCount] = useState(0);
useEffect(() => {
// Subscribe to real-time updates
const subscription = supabase
.from('artist_profiles')
.on('*', payload => {
setQualifiedCount(payload.new.is_qualified ? qualifiedCount + 1 : qualifiedCount);
})
.subscribe();
return () => subscription.unsubscribe();
}, []);
return (
<div className="text-center p-8">
<h2 className="text-3xl font-bold">
🎵 {qualifiedCount} / 50 Artists Qualified
</h2>
<div className="w-full bg-gray-200 rounded-full mt-4">
<div
className="bg-green-500 h-2 rounded-full transition-all"
style={{ width: `${(qualifiedCount / 50) * 100}%` }}
/>
</div>
<p className="text-gray-600 mt-2">
{50 - qualifiedCount} spots remaining
</p>
</div>
);
};
Leaderboards
Creator Leaderboard:
- Ranked by: Sessions hosted, Total viewers, or Total earnings
- Time period: This week, This month, All time
- Display: Rank, name, avatar, metric value
Artist Leaderboard:
- Ranked by: Total votes, Total boosts, Qualification status
- Time period filters
- Display: Rank, name, avatar, stats
Implementation: Real-time query with Supabase, or cached/materialized view updated hourly
Priority Matrix & Build Order
graph LR
A["Landing Page
(3-4d)"] -->|Converts traffic| B["Creator Onboarding
(2-3d)"]
A -->|Converts traffic| C["Artist Onboarding
(2-3d)"]
B --> D["Creator Dashboard
(3-4d)"]
C --> E["Artist Profile
(3-4d)"]
D --> F["Invite System
(2-3d)"]
E --> F
F --> G["Tournament Mode
(10-15d)"]
G --> H["A&R Interface
(5-7d) - Phase 4"]
B -.->|Nice to have| I["Notifications
(2-3d)"]
E -.->|Nice to have| I
G -.->|Internal only| J["Analytics
(3-4d)"]
F -.->|Engagement| K["Leaderboards
(1-2d)"]Effort & Impact Summary Table
| Component | Impact | Effort (days) | Priority | Dependencies |
|---|---|---|---|---|
| Landing Page | 10/10 KRITISCH | 3-4 | P0 | None |
| Creator Onboarding | 9/10 Sehr Hoch | 2-3 | P0 | Landing |
| Artist Onboarding | 9/10 Sehr Hoch | 2-3 | P0 | Landing |
| Creator Dashboard | 8/10 Hoch | 3-4 | P1 | Auth |
| Artist Profile | 8/10 Hoch | 3-4 | P1 | Auth |
| Invite System | 10/10 KRITISCH | 2-3 | P1 | Supabase |
| Tournament Mode | 10/10 KRITISCH | 10-15 | P0 | All above |
| A&R Interface | 9/10 Sehr Hoch | 5-7 | P3 | Artist Data |
| Notifications | 7/10 Hoch | 2-3 | P2 | Backend jobs |
| Analytics | 8/10 Hoch | 3-4 | P2 | Data schema |
| Leaderboards | 6/10 Mittel | 1-2 | P2 | Real-time |
Total Effort (P0+P1+P2): ~40-50 days / ~8-10 weeks
Critical Path to Launch
Week 1: Landing + Creator/Artist Onboarding (3 + 2 + 2 = 7 days, but parallel = 3-4 days)
Week 2-3: Creator Dashboard + Artist Profile (3 + 3 = 6 days)
Week 3-4: Invite System (2-3 days) + Quick Wins (2 days) = 4-5 days
Week 4-6: Tournament Mode (10-15 days, biggest piece)
Week 6-7: A/B Testing, bugfixes, performance (5 days)
Week 7-8: Soft launch, gather feedback (3 days)
Week 8: Public launch
Dann: Tournament Mode (live version, not just UI) läuft parallel mit A&R Interface (Phase 4)
Links
MOC - Map of Content | Aktueller Stand der App | Quick Wins | Technische Anforderungen Tournament | Phasen-Plan | Invite-Mechanik