# Creating Events with a Text Editor

You can create Conductor events in any text editor — Notepad, VS Code, your phone's notes app, whatever. Save it as a `.txt` file and import it, or just paste the text directly into the input field.

## Quick Example

```
# Flash mob event — lines starting with # are comments
Title: Flash Mob at Central Park
Description: Meet by the fountain, east side
Start: 2026-03-15 2:00 PM
Timezone: America/New_York
NotifyWindow: 10
Countdown: true

0:00  Get ready
0:15  [emphasis] Wave left
0:30  [emphasis, countdown] Wave right
1:00  [alert, countdown:3, haptic:triple] Jump!
1:30  [no-notify] Freeze in place
```

## Headers

Put these at the top of the file, one per line:

| Header | Required? | Example |
|--------|-----------|---------|
| `Title` | Yes | `Title: Flash Mob at Central Park` |
| `Start` | Yes | `Start: 2026-03-15 2:00 PM` |
| `Description` | No | `Description: Meet by the fountain` |
| `Timezone` | No | `Timezone: America/New_York` |

If you leave out `Timezone`, it defaults to your browser's local timezone.

**Start time is flexible** — all of these work:
- `2026-03-15 2:00 PM`
- `March 15, 2026 14:00`
- `2026-03-15T14:00`

### Config Headers

These optional headers set event-level defaults:

| Header | What it does | Example |
|--------|-------------|---------|
| `NotifyWindow` | Default seconds before action to give notice (default: 5) | `NotifyWindow: 15` |
| `CountdownWindow` | Default countdown duration in seconds | `CountdownWindow: 5` |
| `Countdown` | Whether countdown is on by default (`true`/`false`) | `Countdown: true` |
| `Haptic` | Default haptic mode (`action`, `countdown`, or `off`) | `Haptic: countdown` |

Per-action tags (below) override these event-level defaults.

## Timeline Actions

After the headers, add a blank line, then list your actions. Each line is a timestamp followed by **two or more spaces** (or a tab), then the action text:

```
M:SS  Action text here
```

For events longer than an hour, use `H:MM:SS`:

```
0:00    Opening remarks
0:30    Start moving
1:15:00 Final gathering
```

The timestamp is the offset from the event start time — `0:00` means "right when the event starts", `1:30` means "one minute and thirty seconds in."

## Tags (Optional)

Tags let you customize individual actions. There are four categories:

- **Styles** (`normal`, `emphasis`, `alert`) — change how the action looks on screen
- **Countdown** (`countdown`, `countdown:N`, `no-countdown`) — an audible "5, 4, 3, 2, 1" before the action
- **Haptic** (`haptic:single`, `haptic:double`, `haptic:triple`) — vibration pattern on the phone
- **Notify** (`notify:N`, `no-notify`) — controls the "heads up" announcement before the action

Add `[tags]` **before** the action text to customize how it looks and feels:

```
0:30  [emphasis, countdown, haptic:triple] Wave right
```

### Style Tags

| Tag | What it does |
|-----|-------------|
| `normal` | Default blue style |
| `emphasis` | Gold/highlighted style |
| `alert` | Red/urgent style |

### Countdown Tags

| Tag | What it does |
|-----|-------------|
| `countdown` | Announces "5, 4, 3, 2, 1" before the action |
| `countdown:N` | Custom countdown duration (e.g. `countdown:3` announces "3, 2, 1") |
| `no-countdown` | Suppress countdown for this action |

### Notification Tags

| Tag | What it does |
|-----|-------------|
| `notify:N` | Override notice seconds for this action (e.g. `notify:10`) |
| `no-notify` | Suppress audio notice entirely for this action |

The `notify` and `no-notify` tags control the "heads up" announcement that plays before an action (e.g., "Get ready to wave left"). By default, a notice plays before each action. The timing is set by the `NotifyWindow` header (default: 5 seconds before).

### Haptic Tags

| Tag | What it does |
|-----|-------------|
| `haptic:single` | Single vibration pulse |
| `haptic:double` | Double vibration pulse (default) |
| `haptic:triple` | Triple vibration pulse |

Note: Haptic works on Android. iOS does not support vibration from web apps.

Combine multiple tags with commas: `[alert, countdown:3, haptic:triple]`

## Briefing Blocks

Add a `[BRIEFING]` section between the headers and the timeline to include persistent reference info displayed on screen during the event — role, exit route, rally point, and abort instructions. Use `[TIMELINE]` to mark where the timeline actions begin.

```
Title: Flash Mob at Central Park
Start: 2026-03-15 2:00 PM

[BRIEFING]
role:         Main group — all participants
exit:         Northeast corner, 5th and Main
exit_coords:  40.7829, -73.9654
rally:        Weston Park, near fountain
rally_coords: 40.7845, -73.9632
abort:        Open umbrella. Walk to exit. Do not run.
notes:        Wear blue shirt

[TIMELINE]
0:00  Get ready
0:30  [emphasis] Wave left
1:00  [alert, countdown] Jump!
```

### Briefing Keys

| Key | What it does |
|-----|-------------|
| `role` | Participant role (displayed prominently) |
| `event` | Event-level description or context |
| `exit` | Exit route description |
| `exit_coords` | GPS coordinates for exit (LAT, LNG) — adds a Navigate button |
| `rally` | Rally point description |
| `rally_coords` | GPS coordinates for rally (LAT, LNG) — adds a Navigate button |
| `abort` | Abort/emergency instructions |
| `notes` | Additional notes |

All keys are optional. If no `[BRIEFING]` section is present, the format works exactly as before.

When coordinates are provided, the app shows a **Navigate** button that opens the device's map app with walking directions (Apple Maps on iOS, native map chooser on Android, Google Maps on desktop).

## Backward Compatibility

Tags placed **after** the action text still work but are deprecated:

```
# Old style (still works, but prefer the new style above)
0:30  Wave right  [emphasis, countdown]

# New style (preferred)
0:30  [emphasis, countdown] Wave right
```

## Comments and Blank Lines

- Lines starting with `#` are ignored (comments)
- Blank lines are ignored
- Lines that don't match any format are skipped. The app will still load — check the preview to see which actions were recognized. (Warnings appear in your browser's developer console — press F12.)

## Loading Your Event

Two ways to get your text event into Conductor:

1. **Paste it** — Copy the text, paste it into the "Got an event code?" field on the start screen, and tap **Load Event**
2. **Import a file** — Tap **Import Event File** and pick your `.txt` file

The app auto-detects the format. The same input field also accepts JSON events and compressed `v1_` event codes.

## Other Supported Formats

Besides the text format above, Conductor also accepts:

- **JSON** — Paste raw JSON with `title`, `startTime`, `timezone`, and `timeline` fields
- **Event codes** — The compressed `v1_` strings generated by the app's share features

All three formats work in the paste field, file import, and URL fragments.
