FEATURES_ROSTER.md raw

Musiquay — Feature: Event Roster

From the promoter to the girl pouring beer at the bar, everyone. Well structured, in the same place. Scene police validation.

Overview

The event roster is the feature that turns every show into a permanent, structured, validated record of the scene in action.

Film has IMDb. Every movie lists every actor, every grip, every caterer. The credits roll and everyone who made it happen is named. The music scene has nothing like this. Shows happen. People work. The night ends. No record exists beyond a poster and some blurry phone photos. The sound engineer who mixed the show, the lighting tech who ran the rig, the door person who worked from 7pm to 2am, the road crew who loaded in at noon — they're invisible.

The roster changes that. Every event on Musiquay has a complete, structured list of everyone who made it happen. Not just the bands on the poster. Every role, every person, documented and linked to their Nostr identity. And the scene itself validates it.

This is the mechanism that turns social activity into professional history. It's the connective tissue between the event calendar, the services marketplace, and the scene graph. It's how Musiquay becomes the definitive record of the music scene.

Core Concepts

Validation Without Bureaucracy

Musiquay's roster system doesn't require official confirmation to be useful. The system is designed to embrace ambiguity rather than demand certainty.

This approach recognizes how the music world actually works. Roster details are often incomplete, remembered differently, or documented long after the fact. The system should accommodate this reality, not demand perfection.

No Business Logic in the Protocol

Musiquay event kinds define structure, not behavior. The protocol specifies how to represent a roster, a confirmation, or a setlist—it does not specify what clients should do with that data.

This separation keeps the protocol lean and extensible. New clients can experiment with different UX paradigms without requiring protocol changes. The events are the source of truth; everything else is interpretation.

The Roster is the Receipt

After a show happens, the roster is the definitive record of who was involved. It's film credits for live events. Every role, every person, structured and linked.

A typical roster for a mid-sized show might include:

RoleWho
PromoterThe person/company who booked and promoted the event
VenueThe physical space (already a Nostr identity)
Door / Box OfficeThe person handling admission
Bar StaffPeople working the bar
SecurityDoor security, crowd management
Sound — FOHFront-of-house engineer
Sound — MonitorsMonitor engineer (if separate)
LightingLighting tech / designer
Stage ManagerCoordinating changeovers, running order
HeadlinerThe main act
↳ Individual musiciansNamed members and session players
SupportOpening / support acts
↳ Individual musiciansNamed members, fill-ins, guest appearances
Backline TechGuitar/drum/keys techs
Road CrewLoad-in, load-out, merch
Van DriverThe person who drove the band and gear
PhotographerCovering the event
Filmmaker / Live StreamVideo recording, streaming
Poster / Flyer DesignerVisual artist who created the event artwork
CateringFood and drink for artists/crew
Van Rental CompanyCompany that provided the transport
Backline RentalCompany that provided rental gear
PA RentalCompany that provided the sound system

A festival roster is the same concept, massively expanded — hundreds of participants across multiple stages and days. And it's not just people — service companies are first-class participants too. The van rental company, the PA rental house, the catering company, the backline provider — they all have Nostr identities, they all get tagged, they all build roster history. A rental company that's been on the roster for 50 festivals has a reputation that matters.

Every Role Matters

This is not "headliner, support, opener." The roster captures the full depth of work that goes into making music happen live. From the promoter to the girl pouring beer at the bar, from the van driver who got everyone there to the company that rented the PA — everyone gets a place.

The scene is built by all of these people and companies. A sound engineer who's mixed 500 shows has a story to tell. A door person who's worked every Wednesday at a venue for three years is part of that venue's identity. A photographer who's shot every edition of a festival has a body of work tied to that event. A van rental company that's supplied transport for 200 tours has a track record. A catering company that feeds artists at festivals has a reputation.

People and organizations alike are Nostr identities. A rental house, a production company, a catering service — they all have pubkeys, they all get tagged on rosters, they all build history. The roster doesn't distinguish between humans and companies as a matter of protocol — they're all participants.

The roster makes all of this visible, searchable, and permanent.

Scene Police Validation

This is the crucial social mechanism that makes the roster trustworthy without a centralized authority.

The problem with self-reported credentials: Anyone can claim they did sound at a famous venue. Anyone can put "tour manager for Band X" on their LinkedIn. There's no verification. The music scene runs on personal knowledge — "yeah, I know they're legit, I've seen them work" — but that knowledge doesn't scale beyond your immediate network.

The roster's solution: Distributed social validation.

  1. The event creator (usually the promoter or venue) updates the calendar event with the initial roster, tagging participants by Nostr pubkey and role.
  2. Tagged participants receive the tag and can confirm their involvement. A confirmation is a signed Nostr event — cryptographic proof that this person acknowledges their role.
  3. Other scene members who were there can publish attestations — "I was at this show, can confirm that [pubkey] did FOH." These are independent signed events referencing the roster.
  4. Disputes are visible too. If someone is incorrectly listed, they can deny their involvement, or others can flag inaccuracies.

This creates a web of social proof that is nearly impossible to fake at scale. The music scene is small enough — especially at the local level — that bullshit gets called out instantly. If you claim you did sound at a show and you didn't, someone who was actually there will flag it. If a promoter lists a fake roster to inflate their event's prestige, the people who were actually there will correct the record.

It's not a centralized verification system. There's no "verified" badge from Musiquay. It's the scene itself doing the validation — peer review by the people who were in the room.

Think of it like LinkedIn endorsements, except they actually mean something, because the community is small enough that everyone knows everyone, and the protocol makes every claim and counter-claim visible and signed.

Wiki-Style Open Editing

The roster is open like Wikipedia. Anyone can contribute, not just the event creator.

The event creator (usually the promoter or venue) updates the calendar event with the initial roster. But they don't know everything. They might not know the name of the fill-in drummer. They might forget who did monitors. They might not have tagged the photographer because they didn't hire them — the photographer came independently.

So the roster is open:

Contributions from anyone are published as Nostr events that reference the roster. The scene fills in the gaps collectively, exactly like a wiki. And the validation mechanisms still apply — the tagged person can confirm or deny, and scene police validation ensures accuracy over time.

This means rosters get richer over time. The initial post-show roster might be 15 people. A week later, community contributions have filled it out to 25. A month later, someone remembers the name of the door person and adds them. The record is always growing, always being refined by the people who were there.

Setlists

Every show should have setlists. This is huge — for fans, for the bands, and for the historical record.

What setlists capture:

Setlists are wiki-style too. The band can publish their own setlist. Fans who were there can contribute from memory if the band doesn't post one. Band members can confirm or edit fan-submitted setlists. The same scene police validation applies — if someone posts a wrong setlist, people who were actually there will correct it.

The data this creates is incredible:

Setlists bridge the gap between the recorded music (tracks on Musiquay) and the live experience (calendar events and rosters). A track's page can show: "This song has been performed live 47 times, most recently at [linked event]." An event page shows the full setlist with links to the studio recordings.

How It Works

Lifecycle of a Roster

┌─────────────────────────────────────────────────────────┐
│  1. PRE-EVENT                                           │
│     Calendar event published with initial p tags        │
│     (performers, confirmed crew)                        │
├─────────────────────────────────────────────────────────┤
│  2. EVENT HAPPENS                                       │
│     The actual show / festival / event takes place      │
├─────────────────────────────────────────────────────────┤
│  3. ROSTER PUBLISHED                                    │
│     Event creator updates the calendar event            │
│     with known participants and roles                   │
├─────────────────────────────────────────────────────────┤
│  4. COMMUNITY CONTRIBUTIONS (wiki-style)                │
│     Anyone can add missing participants, setlists,      │
│     corrections. The scene fills in the gaps.           │
├─────────────────────────────────────────────────────────┤
│  5. CONFIRMATIONS                                       │
│     Tagged participants confirm their involvement       │
│     (signed events = cryptographic proof)               │
├─────────────────────────────────────────────────────────┤
│  6. ATTESTATIONS                                        │
│     Other scene members vouch for participants          │
│     ("I was there, can confirm X did monitors")         │
├─────────────────────────────────────────────────────────┤
│  7. DISPUTES (if any)                                   │
│     Incorrect entries flagged by participants or        │
│     witnesses. Visible to all.                          │
├─────────────────────────────────────────────────────────┤
│  8. PERMANENT RECORD                                    │
│     Roster + contributions + setlists +                 │
│     confirmations + attestations =                      │
│     the scene's verified history                        │
└─────────────────────────────────────────────────────────┘

Step 1: Pre-Event

When a calendar event is published (NIP-52, kind 31923), it already includes p tags for confirmed participants — the performing artists, maybe the confirmed sound engineer, the photographer. This is the pre-show lineup.

But the pre-event tags are incomplete by nature. You know who's performing. You might not know who's doing monitors or working the door until the night itself.

Step 2: The Show Happens

Real life. Music. People doing their jobs.

Step 3: Roster Published

After the event, the event creator (or a designated person — the stage manager, the venue manager, whoever is responsible) updates the calendar event with the full roster. The NIP-52 kind 31923 event is addressable and role-bearing, so the post-show update replaces the pre-show listing with the participants and roles they actually know about.

The roster extends the pre-event p tags with the fuller picture: who actually did sound, who worked the door, which session musician sat in, who shot photos. But the initial roster is rarely complete — which is why the next step exists.

Step 4: Community Contributions

The roster is open for wiki-style editing. Anyone can add missing entries:

Contributions are separate Nostr events that reference the roster — they don't overwrite the original, they augment it. The client UI aggregates the original roster plus all contributions into a unified view.

Tagged participants still confirm or deny (Step 5), and scene police validation still applies. Wiki-style editing makes the roster richer; validation makes it trustworthy.

Step 5: Confirmations

Each tagged participant receives a notification (they're tagged with their pubkey). They can publish a confirmation event — a signed Nostr event that says "yes, I was there, I did this role."

A confirmation is lightweight but powerful:

Participants can also decline a tag if it's wrong — "I wasn't at this show" or "I wasn't the FOH engineer, I did monitors."

Step 6: Attestations

Beyond self-confirmation, anyone who was there can publish attestation events. These are third-party vouches:

Attestations are separate signed events that reference the roster. They create a mesh of social proof around the record.

Step 7: Disputes

The system is transparent about disagreements:

This isn't about automated resolution. It's about visibility. In a community where reputation matters, having a disputed roster entry is meaningful social information.

Step 8: Permanent Record

Over time, each event accumulates:

This composite record becomes the permanent, socially-validated history of the event. It exists on the protocol, replicated across relays, cryptographically signed by the people who were there.

Data Model

Roster Event (NIP-52 kind 31923)

The roster is the calendar event itself, updated post-show with the full participant record. No new kind: the event is addressable, and NIP-52 p tags already carry roles.

{
  "kind": 31923,
  "pubkey": "<event-creator-pubkey>",
  "content": "Optional notes about the event — 'Great night, sold out, 3 encores.'",
  "tags": [
    ["d", "<calendar-event-d-tag>"],
    ["title", "Friday Night at Lux Frágil"],
    ["start", "1735851600"],
    ["end", "1735876800"],
    ["D", "20090"],
    ["location", "Lux Frágil, Av. Infante Dom Henrique, Lisboa"],
    ["g", "eyckch"],

    ["p", "<promoter-pubkey>", "wss://relay.musiquay.com", "promoter"],
    ["p", "<venue-pubkey>", "wss://relay.musiquay.com", "venue"],

    ["p", "<foh-engineer-pubkey>", "wss://relay.musiquay.com", "sound-foh"],
    ["p", "<monitor-engineer-pubkey>", "wss://relay.musiquay.com", "sound-monitors"],
    ["p", "<lighting-pubkey>", "wss://relay.musiquay.com", "lighting"],
    ["p", "<stage-manager-pubkey>", "wss://relay.musiquay.com", "stage-manager"],

    ["p", "<headliner-pubkey>", "wss://relay.musiquay.com", "performer-headliner"],
    ["p", "<session-musician-pubkey>", "wss://relay.musiquay.com", "performer-session"],
    ["p", "<support-act-pubkey>", "wss://relay.musiquay.com", "performer-support"],
    ["p", "<guest-pubkey>", "wss://relay.musiquay.com", "performer-guest"],

    ["p", "<backline-tech-pubkey>", "wss://relay.musiquay.com", "backline"],
    ["p", "<road-crew-pubkey>", "wss://relay.musiquay.com", "road-crew"],

    ["p", "<door-pubkey>", "wss://relay.musiquay.com", "door"],
    ["p", "<bar-staff-pubkey>", "wss://relay.musiquay.com", "bar"],
    ["p", "<security-pubkey>", "wss://relay.musiquay.com", "security"],

    ["p", "<photographer-pubkey>", "wss://relay.musiquay.com", "photographer"],
    ["p", "<filmmaker-pubkey>", "wss://relay.musiquay.com", "filmmaker"],
    ["p", "<designer-pubkey>", "wss://relay.musiquay.com", "designer"],

    ["p", "<van-driver-pubkey>", "wss://relay.musiquay.com", "van-driver"],
    ["p", "<van-rental-company-pubkey>", "wss://relay.musiquay.com", "van-rental"],
    ["p", "<pa-rental-pubkey>", "wss://relay.musiquay.com", "pa-rental"],
    ["p", "<catering-pubkey>", "wss://relay.musiquay.com", "catering-company"]
  ]
}

Design notes:

Role Vocabulary

A standardized but extensible set of role identifiers:

CategoryRole IDsDescription
Organizationpromoter, booking-agent, venue, label, sponsorWho made the event happen
Soundsound-foh, sound-monitors, sound-broadcast, sound-recordingAudio engineers
Technicallighting, stage-manager, backline, av-tech, riggerTechnical production
Performanceperformer-headliner, performer-support, performer-session, performer-guest, performer-dj, performer-mcAnyone who performed
Crewroad-crew, tour-manager, merch, van-driverTouring and logistics
Venue Staffdoor, bar, security, venue-manager, venue-tech, cateringVenue operations and hospitality
Documentationphotographer, filmmaker, live-stream, journalist, reviewerEvent documentation
Creativedesigner, vj, visual-artistVisual and design contributions
Service Companiesvan-rental, backline-rental, pa-rental, lighting-rental, catering-company, production-company, studioCompanies and organizations that provided services or equipment

This vocabulary is a convention, not a rigid schema. The community will evolve it. New roles can be added simply by using new role identifiers — no protocol change required.

Confirmation Event (NIP-32 kind 1985)

A participant confirms their roster entry. A NIP-32 label event: the participant labels the roster event address and their own pubkey.

{
  "kind": 1985,
  "pubkey": "<participant-pubkey>",
  "content": "Optional comment — 'Great gig, crowd was amazing.'",
  "tags": [
    ["a", "31923:<event-creator-pubkey>:<calendar-event-d-tag>", "wss://relay.musiquay.com"],
    ["p", "<participant-pubkey>"],
    ["L", "musiquay.credit"],
    ["l", "confirmed", "musiquay.credit"],
    ["role", "sound-foh"]
  ]
}

Label values:

Kind 1985 is regular, so a person can publish several. Clients SHOULD treat the latest created_at for a given (signer, target, role) as the current state, tie-broken by lowest event id, and keep the earlier ones visible as history. A denial never removes the roster entry.

The confirmation is signed by the participant's key. This is cryptographic proof of acknowledgment — nobody can forge a confirmation on someone else's behalf. NIP-32 supports self-reporting (l tags on the author's own events) and third-party labeling, so the same kind covers both "I confirm my role" and "I label someone else's role."

Attestation Event (NIP-32 kind 1985)

A third party vouches for a roster entry. Same kind, authored by a witness, targeting the roster address and the participant's pubkey.

{
  "kind": 1985,
  "pubkey": "<witness-pubkey>",
  "content": "I was at this show. Can confirm the sound was incredible — [tagged engineer] absolutely nailed the mix.",
  "tags": [
    ["a", "31923:<event-creator-pubkey>:<calendar-event-d-tag>", "wss://relay.musiquay.com"],
    ["p", "<participant-being-vouched-for-pubkey>"],
    ["L", "musiquay.attest"],
    ["l", "attests", "musiquay.attest"],
    ["role", "sound-foh"]
  ]
}

Attestations are independent events. Anyone can publish one. Their weight comes from the attestor's own reputation in the scene graph — an attestation from a well-known promoter carries more social weight than one from an anonymous account, not because the protocol treats them differently, but because the scene does.

Contribution Event (NIP-22 kind 1111)

A community member adds a missing participant to the roster (wiki-style). A NIP-22 comment scoped to the roster event: the content names the participant and role, the p tag carries the pubkey. NIP-32 is unsuitable here — a contribution carries values, not labels.

{
  "kind": 1111,
  "pubkey": "<contributor-pubkey>",
  "content": "Adding the lighting tech — pretty sure this was their first show at this venue.",
  "tags": [
    ["A", "31923:<event-creator-pubkey>:<calendar-event-d-tag>", "wss://relay.musiquay.com"],
    ["K", "31923"],
    ["P", "<event-creator-pubkey>"],
    ["a", "31923:<event-creator-pubkey>:<calendar-event-d-tag>", "wss://relay.musiquay.com"],
    ["e", "<roster-event-id>", "wss://relay.musiquay.com"],
    ["k", "31923"],
    ["p", "<event-creator-pubkey>"],
    ["p", "<missing-participant-pubkey>", "wss://relay.musiquay.com"],
    ["role", "lighting"]
  ]
}

The contributed participant goes through the same confirmation/attestation flow as any roster entry. The wiki-style contribution is a suggestion — the tagged person confirms, and the scene validates.

Setlist Event (Kind 32213)

A setlist for one artist/band at one event.

{
  "kind": 32213,
  "pubkey": "<author-pubkey>",
  "content": "Incredible set. Third encore was unexpected — first time they've played that song in 2 years.",
  "tags": [
    ["a", "31923:<event-creator-pubkey>:<calendar-event-d-tag>", "wss://relay.musiquay.com"],
    ["p", "<performing-artist-pubkey>", "wss://relay.musiquay.com", "performer"],
    ["title", "Setlist: Band Name @ Lux Frágil, 2026-03-15"],

    ["song", "1", "Song Title One", "<track-address-if-published>"],
    ["song", "2", "Song Title Two", "<track-address-if-published>"],
    ["song", "3", "Song Title Three"],
    ["song", "4", "New Unreleased Song"],
    ["song", "5", "Song Title Five", "<track-address>", "feat", "<guest-artist-pubkey>"],
    ["song", "6", "Cover Song Title", "", "cover", "<original-artist-name>"],

    ["encore", "1"],
    ["song", "7", "Deep Cut That Fans Lost Their Minds Over", "<track-address>"],

    ["a", "<track-address-1>"],
    ["a", "<track-address-2>"],
    ["a", "<track-address-5>"],
    ["a", "<track-address-7>"],

    ["t", "setlist"]
  ]
}

Setlist design notes:

Scene Police Validation

This is where the roster becomes something no centralized platform can replicate.

Why It Works

The music scene is a high-trust, high-visibility community, especially at the local level. Everyone knows everyone. If you've been going to shows in a city for a few years, you recognize the sound engineers, the photographers, the door people, the promoters. You know who does what.

This social reality is what makes roster validation work:

There is no automated resolution. No algorithm deciding who's right. No centralized moderator. The visibility of claims and counter-claims is the mechanism. In a community where reputation is everything, having a disputed or unconfirmed roster entry is meaningful information.

Trust Signals

The client UI can surface trust signals without making centralized judgment calls:

None of these are hard verification. They're social signals — the same kind of judgment calls people make in real life when deciding whether to trust someone's credentials, now made visible and queryable at scale.

Anti-Gaming

The roster system is resistant to manipulation because:

  1. Confirmations require the participant's private key. You cannot confirm someone else's roster entry.
  2. Attestations are signed and attributable. Fake attestations are traceable to the attesting pubkey, which has its own reputation.
  3. The scene graph provides context. A sound engineer with 200 confirmed roster entries and relationships with dozens of known venues has a credibility profile that's extremely expensive to fabricate.
  4. The community is the arbiter. In small-to-medium scenes, fabrication is socially costly. People talk. Bullshit travels fast.
  5. History is immutable. Once confirmations and attestations are published and replicated, they can't be silently removed. The record persists.

Building the Scene Graph

Every confirmed roster entry is a node in the scene graph that creates connections and builds history.

Professional History (IMDb for the Scene)

The roster turns every participant's profile into a living CV:

This history is earned, not claimed. It's built event by event, confirmation by confirmation. It cannot be inflated by self-reporting — it requires the participation of others.

Connection Mapping

Rosters create a dense web of "worked together" relationships:

These connections emerge from roster data without anyone explicitly declaring them. The relationships are implicit in the shared event history.

Discovery Queries

The roster feeds discovery across the platform:

This is the professional network the scene has never had — and it builds itself, event by event, from the ground up.

Integration with Other Pillars

Calendar Integration

The roster is the post-event state of the calendar event.

Post-event content (photos, reactions, reviews) attaches to the calendar event, creating a rich record of the event from every angle.

Marketplace Integration

The roster is the reputation engine that powers the services marketplace.

Payment Integration

Optionally, the roster can link to revenue distribution for the event.

But this is optional. The roster's primary value is the record, not the money. Payment integration is a powerful addition for events that choose to use it, but the roster stands on its own as a documentation and reputation system even without any financial component.

NIP Strategy

Following the project's reuse-first approach:

ConceptNIP StatusNotes
Participant taggingNIP-52 p tags with rolesAlready exists — the roster extends the role vocabulary significantly
Roster eventNIP-52 kind 31923The calendar event is addressable and already carries role-bearing p tags; updating it post-show with the full roster is spec-legal.
ConfirmationNIP-32 kind 1985Label event by the participant: a tag to the roster event, p tag to self, namespace + label confirmed/denied/corrected, role in a role tag.
AttestationNIP-32 kind 1985Witness labels the roster address and the participant's p tag with an attestation label.
ContributionNIP-22 kind 1111Comment scoped to the roster via A/K tags; content names the participant and role, p tag carries the pubkey. NIP-32 is unsuitable here — a contribution carries values (pubkey, role), not labels.
SetlistCustom kind 32213No existing NIP covers setlists. Per-artist song list with track linking and featured artist tagging.
Event referenceNIP-52 a tagsStandard mechanism for linking to addressable events
Deletion/correctionNIP-09Standard deletion requests; corrections are new events that reference the original

The roster system requires one custom event kind (setlist, 32213). The roster itself reuses NIP-52 kind 31923, confirmations and attestations are NIP-32 label events, and contributions are NIP-22 comments. The setlist kind should be proposed as a NIP once the design is validated — the concept has value beyond Musiquay and could serve any Nostr community that organizes events.

UI Concepts

Event Page — Post-Show View

After a show, the event page transitions from "upcoming event" to "event record":

Profile Page — Work History

Each participant's profile includes a "Roster" or "Credits" section:

Track Page — Live History

Each published track gains a "Played Live" section:

Discovery — Reputation at a Glance

When viewing a marketplace listing or a profile:

None of this is a "score." It's structured data that people can interpret with their own judgment — the same way you'd evaluate someone's CV, but with cryptographic proof backing every line.