Glossar — breakout.now

Zurück zur MOC - Map of Content


Kernbegriffe

Session

Eine Live-Musik-Broadcast-Session, die ein Creator hostet. Sessions haben eine aktive Warteschlange (Queue) mit eingereichten Songs, Voting-Mechaniken und Payouts.

Technisch (sessions Table):

Siehe: Executive Summary für Session-Lifecycle


Entry / Einreichung

Ein Song, den ein Artist in eine Session einreicht. Jede Entry geht in die Queue und wird bei der Reihe abgespielt und bewertet.

Technisch (queue_entries Table):

RLS: Viewer (via participant_token) können eigene Entries editieren


Queue / Warteschlange

Sortierte Liste aller 'waiting' Entries in einer Session. Die Sortierung bestimmt, welche Songs als nächstes gespielt werden.

Mechanik:

  1. Free Entries: Sortiert nach created_at
  2. Paid Entries: Nach paid_amount_eur_cents DESC (höchstes Gebot zuerst)
  3. Boosts: Erhöhen queue_position via desired_position

Queue-Position ist relativ: Wenn Entry 1 → played, verschieben sich alle anderen up.


Queue-Boost / Positioni-Boost

Kostenpflichtige Upgrade, um eine Entry höher in der Queue zu positionieren.

Preis-Berechnung (lib/pricing.ts):

skip_to_position_N = max(
  min_skip_price_eur_cents,
  ceil(topBid_at_position_N × (1 + min_increment_pct / 100))
)

Beispiel: Session mit min_skip_price = 100 EUR-Cents, min_increment_pct = 20:

Safety Cap: MAX_PRICE_CENTS = 1.000.000 (10.000 EUR)

Flow:

  1. Viewer klickt "Skip zu Position N"
  2. createCheckoutSession berechnet Preis
  3. Stripe Checkout Session wird erstellt
  4. Nach Payment → stripeWebhookinsert_paid_entry_atomic RPC
  5. Entry wird in Queue verschoben

Breakout (Outcome-Type)

Der höchste Qualitäts-Status für einen Song in einer Session.

3 Outcome-Typen (via BreakoutOutcome Enum):

Breakout-Definition (aus computeBreakoutResults.mts):

Wichtig: Ein Artist, der 2× Upcoming in verschiedenen Sessions erreicht, steigt automatisch zum vollen Breakout-Status auf (geplantes Feature, noch nicht im Code).

Outcome für Artist-Profil:


Upcoming (Zweit-Status)

Top 3 einer Session, aber nicht klarer Gewinner.

Mechanik:

Boost-Tokens: 1× Upcoming → 0 Tokens; aber 2× Upcoming-Pair → 2 Tokens verdient


Breakout Phase (Session State)

Das Stadium eines Breakout-Votings innerhalb einer Session.

Enum (BreakoutPhase):

Ablauf:

  1. Session aktiv → Community-Voting startet automatisch
  2. Nach Timer → Phase wechselt zu creator_voting
  3. Creator trifft Entscheidung → RPC berechnet Finals
  4. Phase = completed, Outcomes in breakout_results

Entry Type

Kategorisierung einer Entry nach Bezahlstatus.

Enum (EntryType):

Logik: submitEntry RPC setzt entry_type basierend auf Payment-Status


Entry Status

Lebenszyklus-State eines Songs in der Queue.

Enum (EntryStatus):

State Diagram:

waiting → playing → played
   ↓
removed (jederzeit)

Payment Mode

Kategorisierung der Zahlungs-Quelle für eine Entry.

Enum (PaymentMode):

Aktuell: Nur skip_to_n ist live. Andere sind Placehodler für zukünftige Features.


Participant Token

Eindeutige anonyme ID für Viewer (nicht Creator/Artist).

Technisch:

RLS: Supabase akzeptiert participant_token in Anon-Kontext


Stream Platform

Das Broadcast-Medium, das ein Creator nutzt.

Enum (StreamPlatform):

Zweck: Linking zurück zu Creator's Main-Stream, Social Proof


Nutzergruppen

Creator

Streamer, der Live-Sessions hostet. Verdient durch Queue-Boosts und Benutzungs-Gebühren. Im Tournament können Top-Creator Jury-Mitglieder sein.

Technisch (creators Table + users Table):

Auth: Creator Auth via Supabase (separate User-Pool von Artists)


Artist

Musiker, der Songs einreicht. Verdient indirekt durch Exposure und kann Breakout-Status erreichen.

Technisch (artists Table + users Table):

Auth: Artist Auth via Supabase (separate von Creator)

Registrierung: Artists können anonym Entries einreichen, dann später ein Profil erstellen


Viewer / Zuschauer

Community-Mitglied, der an Sessions teilnimmt, für Songs votet und Musik entdeckt.

Identifikation:

RLS: Anon-User können lesen (active Sessions, öffentliche Queue), schreiben limitiert


A&R (Artist & Repertoire)

Vertreter von Labels/Publishern, der neue Talente scouted. Später kann breakout.now A&R-Dashboard mit Filtered Artist-Views anbieten.

Status: Geplant (Phase 4), noch nicht implementiert


Breakout Voting System

Community Voting Phase

Live-Abstimmung der Zuschauer über beste Songs.

Mechanik (castBreakoutVote.mts):

  1. Breakout-Runde startet → Phase = community_voting
  2. Jeder Viewer mit participant_token kann 1× voten
  3. Vote wird in breakout_votes gespeichert (dedupliziert via (participant_token, round_id))
  4. Nach Timer (z.B. 2–3 Min) → Phase wechselt zu creator_voting

Sicherheit: Advisory Locks verhindern doppelte Votes


Creator Voting Phase

Creator (Host) trifft final Entscheidung.

Mechanik (computeBreakoutResults.mts):

  1. Nach Community-Voting kann Creator:
    • Top 1 Song als Favorit wählen, ODER
    • Top 3 Songs wählen
  2. Creator-Wahl wird in breakout_rounds.creator_pick_entry_id gespeichert
  3. Entscheidungslogik:
    • Wenn Creator Top 3 wählt → zusätzliche Qualifizierung
    • Wenn Creator außerhalb Top 3 wählt → eigene Entscheidung steht

BreakoutOutcome

Final-Status einer Entry nach Voting.

Typen (Enum):

Berechnung:

if (community_votes >= 15) {
  if (first_place_pct >= second_place_pct + 10pp) {
    outcome = 'breakout'
  } else {
    outcome = 'upcoming'
  }
} else {
  outcome = 'no_winner'
}

Hard Gates (Qualification)

Mindestanforderungen für Artist-Tournament-Eingangsticket.

Regel (aus Qualification-Updated):

Effekt: Filtert vorbei-einsichtige "One-Hit-Wunder" Artists


Reward-Systeme

Boost Token

Kostenlose Gutschrift für höhere Queue-Position, verdient durch Quality-Achievements.

Technisch (breakout_boost_tokens Table):

Verdienung:

Nutzung:


Technische Infrastruktur

Supabase

Backend-as-a-Service mit PostgreSQL, Auth, Realtime, Storage.

Verwendung in breakout.now:

Client: @supabase/supabase-js in lib/supabase.ts


Netlify Functions

Serverless Functions für Critical Business Logic (atomare Payments, Votes).

13 Functions (alle in netlify/functions/):

Funktion Trigger Zweck
submitEntry.mts POST /api/submitEntry Free Entry via insert_queue_entry_atomic RPC
createCheckoutSession.mts POST /api/checkout Stripe Session mit Idempotency-Key
stripeWebhook.mts Stripe Event Payment → Atomic Insert
createConnectAccount.mts POST /api/connectAccount Stripe Connect Onboarding
stripeConnectWebhook.mts Stripe Connect Event Account Refresh
getSignedUrl.mts POST /api/signedUrl Audio Playback URL (3600s Expiry)
cleanupStorage.mts Cron (daily) Delete Stale Audio (7+ days)
castBreakoutVote.mts POST /api/vote Vote Atomicity
computeBreakoutResults.mts POST /api/computeResults Final Rankings + Outcomes
editEntry.mts POST /api/editEntry Edit Queue Entry
freeBoost.mts POST /api/freeBoost Apply Boost Token
processWeeklyPayouts.mts Cron (weekly) Stripe → Creator Batch
devSeed.mts POST /api/seed Test-Daten (nur Dev)

Pattern: Advisory Locks in RPCs für Atomarität, Service Role Key für RLS Bypass


Supabase RPC (Remote Procedure Calls)

PostgreSQL Functions aufgerufen vom Frontend/Functions via Supabase Client.

Kritische RPCs:


Stripe

Payment Processor für Queue-Boosts.

Flow:

  1. createCheckoutSession → Stripe Session ID
  2. Frontend redirect zu Stripe Checkout
  3. User zahlt
  4. Stripe Event → stripeWebhook → RPC Insert
  5. Entry moved in Queue

Payout: Stripe Connect für Creator Withdrawals


Stripe Connect

Marketplace-Payout System für Creators.

Flow:

  1. Creator autorisiert Stripe Connect Account
  2. createConnectAccount generiert Link
  3. Payouts werden weekly via processWeeklyPayouts verarbeitet
  4. Plattformgebühr = abgezogen, Creator erhält Netto

Business-Konzepte

Revenue Split

Aufteilung des Transaktionsumsatzes.

Struktur (Beispiel: €100 Queue-Boost):


Rating Criteria / Bewertungskriterien

Custom-Bewertungsskala pro Creator.

Technisch (rating_criteria + entry_ratings Tables):


Artist Achievements

Historisches Log von Breakout/Upcoming Ergebnissen.

Technisch (artist_achievements Table):

Zweck: Tracking für Qualification (2× Upcoming = Breakout)



Letztes Update: 16.02.2026
Status: Aligned mit Codebase v42-migrations