Spec · v1

The FestiView lineup spec.

A single JSON file that describes a festival — its stages, days, and every set. FestiView reads it straight into the lineup, the map, and your crew's shared schedule. No CMS, no backend calls.

Festivals missing from the app? Host a lineup file at a public URL and send it to lineups@festiview.com. We'll add it to the picker so anyone can subscribe.

Top-level shape

A lineup file is one JSON object with three keys.

{
  "festival": { ... },
  "stages":   [ ... ],
  "days":     [ ... ]
}

festival

Metadata about the event. Used for the lineup subtitle, the map anchor, and timezone-aware schedule rendering.

mapOverlay (optional)

If present, FestiView draws a bitmap venue map on top of the base map, aligned to the coordinates you provide.

stages

An array of every stage at the venue. FestiView uses the color to tint set cards and the coordinates to draw stages on the map.

days

An ordered array, one entry per festival day. Each day carries its own list of sets.

Set fields

Early lineups. When a festival announces the roster before the daily schedule, leave stageId, startTime, and endTime as null. FestiView still shows those sets in the Lineup tab so fans can search, browse, and star their favorites — the timeline and map just light up later when the schedule drops.

Minimal example

{
  "festival": {
    "name": "Mirage Music Festival",
    "edition": "2025 Edition",
    "venue": "Sunstone Flats",
    "location": "Joshua Tree, CA",
    "timezone": "America/Los_Angeles",
    "latitude": 33.6803,
    "longitude": -116.2373,
    "dates": { "start": "2025-04-11", "end": "2025-04-13" }
  },
  "stages": [
    {
      "id": "horizon",
      "name": "Horizon Stage",
      "sortOrder": 0,
      "color": "#E8453C",
      "latitude": 33.681,
      "longitude": -116.238
    }
  ],
  "days": [
    {
      "date": "2025-04-11",
      "label": "Friday",
      "sets": [
        {
          "artist": "LUNA RAY",
          "stageId": "horizon",
          "startTime": "2025-04-11T23:10:00-07:00",
          "endTime": "2025-04-12T00:30:00-07:00",
          "setID": "mirage-2025-luna-ray"
        }
      ]
    }
  ]
}

Validation rules

Updates after publication

Lineups change — rain delays, surprise guests, stage swaps. FestiView re-fetches the file on every app open and reconciles by setID. Safe edits to a published file:

Don't rename a setID or a stages[].id. That silently orphans every user's starred schedule.

Submitting a lineup

  1. Host the JSON at a stable public URL (Gist, S3, your own server — anything that serves CORS-friendly plain JSON).
  2. Email lineups@festiview.com with the URL, the festival name, and the dates.
  3. We'll validate it, add it to the in-app festival picker, and ping you when it's live.

Updates are automatic: once the picker entry exists, it points at your URL, and every re-fetch pulls your latest changes.