# Events & tours
Source: https://docs.aden.space/docs/help/work-together/events

Org- and team-level event management with tours, lineup bookings, waitlists, writers camp signups, and Bandsintown import.
{/* Generated by `bun docs:publish` from docs/features/events.md: edit the spec, not this file. */}

## What it is [#what-it-is]

Events, tours, and writers camps are the three live-activity surfaces in Aden,
covering everything that happens off the recording console.

* **Events** are individual shows, gigs, or performances. They carry a date,
  venue, set times, a ticket link, and an optional cover image. An event can
  belong to a team (the performing artist) or to an organisation (the promoter /
  management company that hosts the show).
* **Tours** group a run of events into a named series with its own dates and
  cover. Teams and organisations both manage tours; each tour can contain any
  number of individual events.
* **Writers camps** are organisation-hosted creative retreats where a label or
  management company gathers songwriters. Participants apply via a public signup
  link; the org accepts or declines them and, once the camp runs, pitches tracks
  for review.

## Using it [#using-it]

### Creating and managing events (team) [#creating-and-managing-events-team]

1. Go to [**Events**](https://aden.space/app/teams/\{teamId}/events) in your
   team sidebar.
2. Click **New event**, fill in date, venue, start/end times, ticket URL, and
   optional cover image. The date picker accepts a typed phrase (next Friday
   8pm): confirm the result, and times fill start/end when the phrase includes
   them.
3. Save. The event appears on your public profile page at
   `/@yourslug/events` and on any tour it belongs to.
4. To mark a show as sold out or cancelled, edit the event and toggle the
   relevant flag. Sold-out events show a waitlist signup form publicly.

### Importing bookings from an agency calendar [#importing-bookings-from-an-agency-calendar]

Shows booked through an agency tool reach the events board by linking that
tool's calendar link: **Add** → **Booking calendars**. Holds arrive as pending
bookings, confirmed dates as confirmed ones, and the profile publishes only
what you allow. The full flow, what a title is read for, and what the feed
overwrites are in the `calendar` spec.

### Public event & tour pages [#public-event--tour-pages]

Every event and tour with a confirmed public booking gets its own detail page
(`/@yourslug/events/<slug>` and `/@yourslug/tours/<slug>`). The cover art opens
the page as a poster running the full width of the column, with the way back and
the artist over it and the date, title and location reading off its bottom edge.
Under it: the ticket, waitlist and info actions, then the description, lineup,
tour link and gallery, each a plain block separated by a hairline rule rather
than a card. Events or tours without their own cover fall back to the artist's
logo/avatar so the page always looks finished.

A tour page lists its dates as an itinerary: one row per show with the date,
city, venue and its action, upcoming first and past below, dimmed.

Past shows stay reachable. The public **Events** tab lists **Upcoming** first,
then a **Past** archive; the **Tours** tab and each tour page split shows into
**Upcoming** and **Past** the same way. Anything that has already happened is
dimmed and tagged **Past**, and its ticket button is hidden, but the page and
its details remain viewable.

The create form is split into icon-labelled tabs (Details, Location, Booking,
Day-of timing, Tickets & extras). The active tab is kept in the URL (`?tab=`),
and the in-progress draft is saved to your browser so a refresh never wipes what
you typed (the draft is cleared once you save or leave).

The **Booking** tab is two columns: the deal on the left (status, fee +
currency, offer/follow-up dates, private notes) and how it shows publicly on the
right (visibility, a **Preview public page** link, and the contract card with
its **Contract signed** toggle). Status, currency and tour are searchable
comboboxes. Visibility only takes effect once the booking is confirmed.

The team-side event **detail** page is likewise organised into tabs (Details,
People, Setlist, Tasks, Contracts: host-only, Media, Domains) rather than one
long scroll; the active tab is kept in the URL (`?tab=`) so a refresh or shared
link lands on the same section. The Details tab opens with a summary: event
name, date and venue, then chips for the team's booking (status, role, fee,
contract, tour, profile visibility, hotels nearby) and a day timeline (load-in,
your soundcheck, doors, your set, length, end). Clicking a chip or a timeline
point opens the field that edits it. Below, a switch picks **Event** (shared
with the lineup) or **Your booking** (only your team). Both panels stay mounted
so unsaved edits survive a switch, and each keeps its own save button. The
hosting team edits the event in a two-column form; a team booked on someone
else's event sees a read-only reference (description, ticket/event links) and
starts on its booking. The lineup follows below.
Booking day-of-timing and offer/follow-up fields use the shared date/time
pickers (`InputCalendar` / `InputTime`), not native inputs. Booking contacts
are picked through a searchable combobox that can also create a new team
contact inline.

### Browsing the events pipeline [#browsing-the-events-pipeline]

The events list has a toolbar with **Preview public page** (opens the public
profile Events or Tours page in a new tab), **Filters**, **Display** and **Add**
on the top right (all the same size), a **search** box and **status tabs** below.
Status tabs and badges are color-coded with an icon per status
(pending/confirmed/lost/declined/cancelled). **Display** switches between four
view modes:

* **Recent**: events grouped by date.
* **List**: a flat list.
* **Board**: a kanban of the booking statuses (drag a card to change status).
* **Calendar**: a month grid with status-colored chips; click a chip to edit,
  click a day to create an event on that date.

**Filters** narrow by status, date range, year, city, country, venue, role and
tour; the search box matches name/venue/city/country/tour. All of it lives in
the URL, so a filtered view is shareable and survives a refresh.

The **Tours** tab uses the same toolbar: Preview public page, **Filters** (year,
city, country, venue: matched against the tour's events) and **Add** on the top
right, a **search** box (tour name, venue, city, country) and **All / Active /
Ended** status tabs below. Tour rows look like event rows. Cover, start date,
status badge, event count, and the event chips of that tour. Tour filters use
`tr*` URL params so they never clash with the event (`ev*`) ones; the status tab
uses the shared `?status=` param.

### Attaching the booking contract [#attaching-the-booking-contract]

The **Booking** tab of the event create form takes the signed (or unsigned)
booking contract straight away. Drop a PDF/DOC/DOCX (up to five files) next to
the *Contract signed* toggle. The files are held in the browser while you finish
the form and are uploaded once the event is saved, so a failed save never leaves
orphaned paperwork. They land in the shared documents store attached to the
event, and stay retrievable from the event afterwards.

Creating a contract from a template, signing it, and sending it to the promoter
by link or email is the next step on this surface; the storage side already
matches what the signature-request flow expects.

### Grouping events into a tour [#grouping-events-into-a-tour]

1. Open [**Tours**](https://aden.space/app/teams/\{teamId}/tours) in your team
   sidebar and click **New tour**.
2. Give the tour a name, optional date range, and cover image.
3. When creating or editing any event, pick this tour from the tour selector.
   Events in the same tour appear together on the tour's public page.

### Inviting another artist to the lineup [#inviting-another-artist-to-the-lineup]

On any event you own, open the **Lineup** panel and search for the other team
by its `@slug`. Aden sends them a booking invite. If you are an admin of both
teams the invite auto-confirms.

### Signing up to a waitlist (fans) [#signing-up-to-a-waitlist-fans]

When an event is marked as sold out its public page shows a waitlist form.
Enter your name and email (and opt in to marketing if you like) to be notified
if tickets become available. No account required.

### Org-hosted events [#org-hosted-events]

Organisation admins create events at the
[org level](https://aden.space/org/\{orgId}/events): for shows the org promotes
rather than performs. The same event fields apply; the lineup is built by
inviting teams through the booking system.

The lineup invite dialog has two modes:

* **On Aden**: look up the artist team by slug, exactly like the team-side
  flow. Team admins are notified by email and accept/decline from their own
  events pipeline.
* **By email**: for artists not on Aden yet. The org enters a display name +
  email; a placeholder booking (`team_id` null, `external_artist_name`,
  `invited_email`) is created with a single-use `claim_token` (30-day expiry)
  and the artist receives a claim email. Opening
  `/invite?type=event-booking&token=…` walks them through signup, then they
  link an existing admin team or create a new one (`claimEventBooking`). The
  booking stays `pending` after claiming. Accepting the gig is a separate,
  explicit step from their team. This is also a signup entry point, like
  session invites.

Both modes capture an optional **fee** (amount + currency) on the invite.

### Writers camps (organisations) [#writers-camps-organisations]

1. Open [**Camps**](https://aden.space/org/\{orgId}/camps) in your org sidebar
   and click **New camp**.
2. Set dates, location, and a description.
3. Enable the public signup page. Share the signup link with writers.
4. Review applicants in the **Participants** panel and accept or decline each
   one. Accepted participants receive an invite email.
5. During the camp, participants pitch tracks; the org team votes to keep or
   pass on each pitch.

### Importing events from Bandsintown [#importing-events-from-bandsintown]

In your team's Events settings connect your Bandsintown profile (paste your
Bandsintown URL or API app ID). Once connected, use **Import from Bandsintown**
to pull your upcoming tour dates in one step.