How the Balboa Park Free Days schedule data works, and how to update it.
The interactive schedule data for this site lives in a single file: data.json.
Every museum name, website link, free-day slot, month exclusion, source URL, and verification date is defined there.
The HTML page reads it on load to render the calendar, upcoming dates, and monthly schedule.
Search-visible reference and FAQ content is also included in index.html. If a museum, slot,
exclusion, or note changes, update that copy and the structured data there after editing data.json.
| Field | Type | Description |
|---|---|---|
| meta.source | string | Official schedule URL used for verification. |
| meta.lastVerified | string | Date the schedule was checked, in YYYY-MM-DD format. This supplies the visible verification date on the main page. |
The file contains a slots array. Each slot represents one free-day type —
for example, "every 3rd Tuesday" is one slot.
| Field | Type | Description |
|---|---|---|
| id | number | Unique identifier. Not shown on the site — just used internally. Don't reuse IDs if you remove a slot. |
| label | string | Display name shown in the UI, e.g. "3rd Tuesday". |
| weekday | string | Day of the week, lowercase. Must be one of: "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday". |
| occurrence | number | Which occurrence of that weekday in the month. 1 = first, 2 = second, 3 = third, 4 = fourth. |
| museums | object[] | List of museums participating on this slot's day. See museum fields below. |
Each entry in a slot's museums array has these fields:
| Field | Type | Description |
|---|---|---|
| name | string | Display name of the museum as it appears on the site. |
| url | string | Official website URL. This is what the museum name links to. |
| note | string | Short caveat shown in parentheses in the "Next Free Day" banner — e.g. "films excluded" or "special exhibitions excluded". Use an empty string "" if there's nothing to note. |
| skipMonths | string[] | Months when just this museum opts out, even though the rest of the slot still runs. Same format as the slot-level skipMonths — full lowercase month names. Leave as [] if the museum participates all year. |
Use these exact lowercase strings in any skipMonths array:
A slot where two museums participate, but one skips January and December:
Live view of what's in data.json right now, rendered in plain English:
Museum schedules change without much notice. If you spot incorrect data — a missing museum, a wrong exclusion month, a dead link, or anything else — please check against the official Balboa Park schedule and send a note to hi@nicokatzen.com.