Riderboard

The advance that builds itself
while Miki sleeps.

A complete pipeline proposal: from the agency email to a finished Tour Bible — already understanding where the artist is coming from, where they're heading, and what still needs confirming. Built by people who lived the work.

For Miki · co-founder 10 stages
The north star

The magic morning

Email → ready proposal

From a deal memo to a complete advance — with no one firing it.

CAA/Analog deal memo detect + classify extract the Show tour-graph: coming from / heading to cheap research fan-out drafts (intro / advance) render Tour Bible ping Miki

A CAA/Analog deal memo lands in Miki's inbox at 2am while she sleeps in another timezone. Riderboard — connected read-and-draft-only to her own Google Workspace inbox — quietly notices it. A two-tier sender filter lets it through: a static AGENCY allowlist (caa.com / analoghq / purplewall / wmeagency) catches the deal_memo and promoter_handoff that TRIGGER a new Show; the moment a Show is born, every promoter, venue, and travel-agency address bound to it is auto-added to a DYNAMIC per-Show allowlist keyed first on Gmail threadId, second on sender domain — so the later promoter and Altour mail that actually carries the rich payload is never rejected pre-LLM (the fatal gap fixed: the gold-standard's villa, Hi Driver mobiles, 3-room set grid, 6-day meal plan, guest-list deadline and flight locators all came from The Night League + Altour, NOT the agency). A Haiku classifier reads the trigger email as a deal_memo (or, days later, the agency-assistant promoter_handoff that loops her in with the promoter's advancing contact), and that single email wakes the machine. Claude extracts the Show — artist, date, venue, city, country, promoter contact, fee, and the four inclusion flags (flights/hotel/ground/rider) that gate which research lanes are even allowed to fire — parsing attached deal-memo and rider PDFs natively. The artist-calendar primitive resolves where the artist is COMING FROM and HEADING TO via Bandsintown + a scan of Miki's own calendar, so this fly-date is a node in a tour graph, not an island — which is what produces a multi-night StayWindow ('party stays Jul 12-17, Felipe departs Jul 13'), a lobby call timed against the NEXT gig's load-in, and 'recover before the boat trip'. In this early fan-out only the CHEAP continuity lanes run — calendar, routing, venue geocode, tz, distances, contacts, country/visa — plus a ROUGH flight feasibility explicitly labeled 'indicative routing — refreshed at booking'; the real reconciled flight + lodging search is deliberately NOT fired here, because Miki books flights only AFTER promoter info lands and the artist approves, so firing it now would render stale options by booking day. From the populated Show it WRITES DRAFTS — never sends: the intro email if >8 weeks out, or, at the ~2-month window, the full advance email (the promoter questionnaire) requesting every promoter-owned field the gold-standard proves is core — set times across ALL rooms, tech pack, dressing rooms, runner, hotel, ground/driver, guest-list deadline, dinner, soundcheck, load-in, curfew, check-in/out, AND accreditation/wristband policy, press/photo/video policy, in-house visuals ownership, and WiFi — each registered as a pending field so the tracker and follow-ups derive for free. It renders the branded 12-section Tour Bible to a private isolated URL, tz-stamped 'Last updated' in Miki's CURRENT zone (JST when she's in Japan), and fires ONE Telegram/WhatsApp ping: 'New advance ready — Dubfire @ Hi Ibiza, Jul 12. Coming from Berlin, heading to Tokyo. Party stays to Jul 17. Advance email staged, 14 promoter Qs seeded. Review: <url>.' Miki wakes, opens one link, lands on a board showing ONLY what needs her this morning, edits, and sends from her own Gmail by hand. Nothing was sent, nothing was booked, every figure from free data is visibly marked 'confirm before booking'. From that moment the same dynamic-allowlist watcher keeps the Show alive: promoter replies route to parse-promoter-reply and confirm ONLY the fields they positively match (a partial reply — dinner CONFIRMED, soundcheck still TBD, Ali's departure blank — leaves the rest pending with their original asked_at intact, so per-field overdue math never silently flips a missing critical field to green); overdue items surface a one-tap chase hitting ONLY what's outstanding; and a last-minute flight or set-time change re-renders the whole day-sheet with a 'what moved' diff — flight Dep/Arr times rendered in each AIRPORT's local zone (never converted to JST), venue schedule in venue-local, header in Miki's-current — instead of an 11pm manual rewrite, with her human-judgment Notes preserved verbatim and untouched. The magic morning is the easy part; the living, self-chasing, cascade-safe, multi-day Show record is the actual product.

The journey

The pipeline, stage by stage

From pre-confirmation to a living Tour Bible. Each stage gates the next; the expensive research lanes are deferred until the promoter replies.
01
0 · ROUTING-CHECK (pre-confirm, optional)
Before a gig is locked, the agent/mgmt cc's Miki and asks 'is this routing doable?'. Riderboard answers GO/CAUTION/NO-GO and creates a PROSPECT Show stub — no promoter contact, no full fan-out. Mirrors Miki's verbatim first step ('artist or mgmt asks me to check the routing').
IN Proposed artist + date + city (from a cc'd thread or a one-line Miki prompt)
OUT GO/CAUTION/NO-GO paragraph + a PROSPECT Show record + tight-connection / Altour-escalation flag
/routing-check/artist-calendar
02
1 · INBOX WATCH + TWO-TIER CLASSIFY (auto-trigger, invisible)
Always-on watch over Miki's Workspace inbox detects the deal_memo/handoff (static agency allowlist) AND routes promoter/Altour replies on open Shows (dynamic per-Show allowlist). This is the auto-fire spine; below-confidence hits go to a daily noise digest so misses surface. Nothing Miki sees yet.
IN Inbound emails passing either the static AGENCY allowlist OR a dynamic per-Show threadId/sender allowlist (everything else rejected pre-LLM)
OUT Classified event {deal_memo | promoter_handoff | advance_reply | schedule_change | noise} + confidence; daily noise digest
/connect-inbox/classify-mail
03
2 · DEAL-MEMO INGEST → SHOW RECORD (PROSPECT→CONFIRMED)
Parse the CAA/Analog memo (body + attached PDF) into the canonical Show schema, set the four inclusion flags that gate downstream research lanes, stamp every field source/status. Low-confidence fields AND low-confidence inclusion flags render [TBC—Miki], never guessed (a wrong flag silently fires or skips a whole lane).
IN Deal-memo email + attached deal-memo/rider PDFs (parsed natively, vision-based)
OUT A persisted Show in state=CONFIRMED with deal-memo-lane fields + inclusion flags + a versioned Rider entity + a seeded dynamic allowlist entry
/parse-deal-memo/parse-rider-pdf
04
3 · INTRO HANDSHAKE (on promoter handoff, >8wk out)
When the agency assistant connects Miki to the promoter, auto-draft the 4-line intro ('nice to e-meet you, in touch ~2mo prior'). The 1-day build that earns trust on Day 1 of the pilot. Binds the promoter address to the Show's dynamic allowlist.
IN Promoter contact + show date from the Show record
OUT A dormant Gmail DRAFT (gmail.compose only); PromoterContact row added; promoter address added to dynamic allowlist
/draft-intro-email
05
4 · CONTINUITY + CHEAP RESEARCH FAN-OUT (parallel, headless Python)
Resolve the artist's tour-graph position (coming-from/heading-to) + StayWindow FIRST, then run only the CHEAP inclusion-flag-gated lanes: geocode+tz+EXACT distances, contact sheet, country/visa norms, venue research, weather, and a ROUGH flight feasibility. Reconciled flight+lodging search is deliberately deferred to Stage 8. State → ADVANCING.
IN Show record (venue, city, country, inclusion flags, artist, dates, party)
OUT Enriched Show: TourGraphNode, StayWindow, geocode/tz/OSRM distances, contacts, visa+withholding norms, weather, indicative routing — each with source+confidence in sources.json
/artist-calendar/routing-context/venue-research/contact-sheet/country-norms/visa-check/rough-flight-feasibility
06
5 · ADVANCE EMAIL — THE PROMOTER QUESTIONNAIRE
From the Show + rider templates, draft the full advance email requesting EVERY promoter-owned field the gold-standard proves is core (set times ALL rooms, tech pack, dressing rooms, runner, hotel, ground/driver, guest-list deadline, dinner, soundcheck, load-in, curfew, check-in/out, accreditation/wristband, press/photo/video policy, in-house visuals, WiFi, settlement contact), language-matched. Each ask is registered as a pending field with a per-field-class SLA so tracker + follow-ups derive automatically.
IN Show record (which fields are pending) + versioned rider templates + country language
OUT Gmail DRAFT (the promoter questionnaire) + a seeded per-field response tracker with per-field-class SLAs
/draft-advance-email/rider-templates/seed-tracker
07
6 · RENDER + SHARE THE TOUR BIBLE
Compile all confirmed + [TBC] fields into the branded 12-section Tour Bible (StayWindow/PartyEvent/per-passenger Departure aware), tz-stamped 'Last updated' in Miki's CURRENT zone, deploy to an isolated private URL, fire ONE ping. The 'wake up to a proposal' moment. Partially-populated by design.
IN Full Show record + children + sources.json + human-judgment Notes
OUT Branded HTML + Playwright PDF at an isolated per-show URL + Telegram/WhatsApp ping with routing strip + stay window + draft count
/render-tour-bible/deploy-tourbook/notify-miki
08
7 · CHASE + TRACK (rank-1 pain, as a per-field query)
Promoter replies parse back into the tracker, confirming ONLY positively-matched fields; per-FIELD overdue (asked_at + field-class SLA, NOT thread-level last contact) surfaces RED so a partial reply can't silently green a still-missing field. A one-tap follow-up hits ONLY outstanding items. The tz-aware guest-list deadline drives a countdown. The dashboard IS this query.
IN Inbound promoter replies + per-field statuses (asked_at, sla_days) + tz-aware deadlines
OUT RED/YELLOW/GREEN per show, per-field overdue list, targeted follow-up Gmail DRAFTs
/parse-promoter-reply/chase-tracker/draft-followup
09
8 · ARTIST-APPROVAL → BOOKING → ITINERARY CHECKLIST (correctly sequenced)
ONLY after promoter info lands and the artist approves it: fire the RECONCILED flight + lodging search (Amadeus×SerpApi / OSM), present 2-3 flight + 3-5 lodging options for async phone approval across timezones, log the booked details + CC, emit a paste-ready expense row, then draft the 4th promoter email — flight details + a first-class itinerary-checklist artifact (every still-pending promoter field) with a ≥1-week-prior hard deadline.
IN Artist-approved promoter info (re-run trigger) + flight/lodging shortlists; Miki's chosen option + booked details (locator, cost, card)
OUT FlightSegment/Accommodation rows, paste-ready Expense row, a 4th promoter Gmail DRAFT embedding the itinerary checklist + tz-aware deadline feeding the chase-tracker
/flight-options/lodging-options/present-options/log-booking/expense-row/draft-flightdetails-email/itinerary-checklist
10
9 · LAST-MINUTE CASCADE (the OTHER rank-1 pain)
A schedule_change email (or paid-later live flight-status) edits ONE field; the change-log diffs old vs new, computes the downstream delta (lobby call, ground legs, day-sheet) and re-renders the Tour Bible with a CHANGED banner + plain-language 'what moved'. Three render zones honored: flight Dep/Arr=airport-local, venue schedule=venue-local, header=Miki-current. Never a silent rewrite; human-judgment Notes survive untouched.
IN Changed field + dependency graph + current Show state
OUT Re-rendered tz-correct Tour Bible with a 'what moved' diff + re-drafted affected emails; on Miki's approve, updated PDF to WhatsApp
/detect-change/cascade-rebuild/render-tour-bible/flight-status-watch
The artifact

The Tour Bible

The output — our own source of truth (Notion fades). Anchored in the real Dubfire itinerary.
  • (a) Header — artist logo + tz-aware 'Last updated: <day, time + TIMEZONE>' stamp computed from MIKI's CURRENT zone (JST when she's in Japan, not the show's zone — gold-standard header is literally 'Friday, Jul 11 at 9:00JST'). Plain-text-tolerant like the real doc.
  • (a+) Routing strip + Stay window (lens-signature, new) — 'Coming from X → THIS show → heading to Y' from the TourGraphNode, plus the StayWindow span ('party stays Jul 12-17; Felipe departs Jul 13') driving the hospitality arc and lobby-call timing.
  • (b) Summary table — Date | City | Venue | Travelers | Visa/Permit (renders even N/A, owner_lane=artist) | Guest List (allocation N, submission DEADLINE tz-aware, AAA vs VIP/Backstage counts, ACCREDITATION + wristband + stage-access-restriction note) | Travel-agency emergency contacts (Altour: after-hours email music24@altour.com + in-hours + UK team + 'indicate passenger name + locator#') | Notes.
  • (c) Flights — Google-Drive e-ticket links (link-tolerant, not parsed as data) + per-passenger arrival tables: Passenger, Locator#, Date, Airline, Flight#, From, IATA, Dep (AIRPORT-LOCAL tz), To, IATA, Arr (AIRPORT-LOCAL tz), Cabin, Seats. Renders shared-locator (AE3HXI, 3 pax) + asymmetric + fully-blank/TBC departures (Ali's empty table) as visible blanks.
  • (d) Transportation — multi-leg table: Date | Time | Routing (airport→hotel, villa→soundcheck→villa, dinner→venue, venue→villa, villa→airport) | Driver | Mobile | Car type. Mixed sourcing (rental car airport-leg + Hi Driver 24h on +34 698 93 84 74) in one table; literal note cells preserved ('Contact Lauren when ready to leave', 'TBC by Felipe').
  • (e) Promoter contacts — Role (Artist Liaison day / night, Operations Manager, production, press) | Name | Mobile. (Liz Messiha / Lauren Edwards / Charlie Tatman + press Ana@thenightleague.com.)
  • (f) Accommodation — Villa/Hotel name | Maps-link address | Dates | Check-in/out (or 'TBC by Jeanne') | Room type (4 rooms + 1 room w/2 beds) | Distances (airport/venue/dinner, OSRM-exact) | Notes.
  • (g) Meals/Dinner — per-DAY rows across the StayWindow (Jul 12-17) with Lunch/Dinner/Club + pax count (per-day, drifting 9→6→11) + time + *CONFIRMED* flags + PartyEvent rows (Formentera Boat Trip 12:00-21:00 for 9 pax *CONFIRMED*) + human-judgment notes ('Ali and his chef friend Seb will cook at the villa', 'stay in and recover before the boat trip').
  • (h) Venue — Name | Address | Website/IG | #rooms/stages (3) | Capacity (5,692) | Soundcheck (TBD) | Hours (23:30-6:00) | Interview | SET TIMES (FULL multi-room lineup — Theatre/Club/Wild Corner — the artist's slot HIGHLIGHTED via is_our_artist, B2B-aware so '01:00-03:00 DUBFIRE' highlights and 'BLACK COFFEE B2B TBC' is matchable) | Rider (Confirmed?) | Notes (press/photo/video policy: 'all content in-house, press enquiries to Ana@thenightleague.com'; in-house VISUALS ownership).
  • (i) Departures — per-passenger flight tables (same shape as (c), AIRPORT-LOCAL tz); renders Felipe's Jul 13 IBZ→BCN (YNLRPN, 18:40/19:40) AND Ali's fully-blank departure table natively.
  • GLOBAL RENDER RULES — confirmed fields render clean; pending/unknown render as visible [TBC—Miki] blanks (her fill-in-stages pattern); free-sourced/indicative fields styled VISUALLY DISTINCT from Miki-verified; THREE TZ ZONES honored (flight Dep/Arr=airport-local, venue schedule=venue-local, header+lobby-relative-to-now=Miki-current); human-judgment Notes render verbatim and are NEVER auto-generated or overwritten on any re-render or cascade (a single wiped note on show #1 ends the pilot).
Migration

Notion → our own

How Miki leaves Notion without losing what she already loves.
Notion is the real incumbent and must be BEATEN, not dismissed — Miki pays $20/mo for Notion Business specifically for its AI Agent, it already fills her itinerary ('saves tons of time'), and she set up a twice-daily email summary she loves. Her actual frustration is the Notion AI not understanding her instructions after many attempts. So the migration is honest and named per-capability, not asserted: (1) Notion's itinerary auto-fill → replaced by the branded Tour Bible render (better because it follows the gold-standard 12-section schema, is tz-correct across three zones, blank-tolerant, multi-day/StayWindow-aware, B2B-aware, and re-renders on a 4-field change instead of being hand-fought); (2) Notion's twice-daily email summary → replaced by the chase-tracker 'needs you today' view + ONE bounded-event Telegram ping. But the four things Notion structurally CANNOT do are the wedge and must lead every pitch: it cannot (a) CHASE promoters per-field and track confirmed-vs-pending across her three stakeholder threads, (b) CASCADE a last-minute change through the whole day-sheet, (c) understand artist-specific travel taste (no early-AM, flat-bed, connection backups), (d) keep all three threads in ONE truth. Riderboard's branded Tour Bible — on a stable isolated URL — becomes the single source of truth; Notion fades only once those four are demonstrably live.
Riderboard · pipeline proposal v1 designed by a multi-agent council · ARC stealth — Felipe + Miki only