Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/samgutentag/sbburgerweek/llms.txt

Use this file to discover all available pages before exploring further.

config.js exports a single THEME object that is the single source of truth for every event-specific value in the map. Every field is documented below with its type, the default value from the SB Burger Week 2026 configuration, and whether changing it requires running python3 apply-theme.py to propagate the update into static files like og-image.png, index.html, and the Worker code.
googlePlacesApiKey should always be null in committed code. The actual API key goes in the GOOGLE_PLACES_API_KEY GitHub repo secret and is injected at runtime by the fetch-hours.yml and fetch-place-ids.py scripts. Committing a live key exposes it publicly and may result in unexpected API charges.
Fields that affect static files — ogLine1, ogLine2, siteUrl, cfAnalyticsToken, trackUrl, and emoji — require running python3 apply-theme.py after every change. The script regenerates og-image.png, injects the analytics snippet into index.html, and updates the CNAME file. Forgetting this step means the deployed site will be out of sync with config.js.

Event Identity

These fields control how the event is named and presented across the map header, About modal, social preview image, and browser favicon.
eventName
string
required
Full event title shown in the page header, About modal, and Open Graph tags. Example: "SB Burger Week 2026".
eventDates
string
required
Date range string displayed in the header beneath the event name. Example: "Feb 19–25". No specific format is enforced — use whatever reads naturally for your event.
emoji
string
required
A single emoji used as the browser favicon, map marker icon, popup header, and random-restaurant picker button. Example: "🍔". Changing this requires running python3 apply-theme.py to update index.html and regenerate the social preview image.
ogLine1
string
required
First line of large text rendered on the social preview OG image (og-image.png). Typically the city or region name. Example: "Santa Barbara". Requires running python3 apply-theme.py after changing.
ogLine2
string
required
Second line of large text rendered on the social preview OG image. Typically the event name and year. Example: "Burger Week 2026". Requires running python3 apply-theme.py after changing.

Item Labels

These fields control how the featured menu item is referred to throughout the UI — in filter labels, tooltips, the random picker button, and the tip jar copy.
itemLabel
string
required
Singular name for the featured menu item. Used wherever the UI refers to a single item. Example: "burger". For a taco event, use "taco".
itemLabelPlural
string
required
Plural form of the featured menu item label. Example: "burgers". Used in headings like “X burgers found” and filter result counts.

Site & SEO

These fields control how the site identifies itself to search engines and link-unfurlers, and provide the source article attribution shown in the header and About modal.
siteUrl
string
required
Full canonical URL of the deployed site, including the https:// scheme and no trailing slash. Example: "https://sbburgerweekmap.com". Used for Open Graph og:url tags, the copy-embed snippet, share links, and the print page header. Requires running python3 apply-theme.py after changing.
description
string
required
Meta description used by search engines and link previews. Appears in the <meta name="description"> tag. Example: "Interactive map of all participating restaurants. Search, filter by area, and get directions.".
sourceLabel
string
required
Display text for the source article link shown in the page header and About modal. Example: "Source: The Independent".
sourceUrl
string
required
Full URL of the source article where the restaurant list was published. Example: "https://www.independent.com/2026/02/18/go-beast-mode-for-santa-barbara-burger-week-2026".
githubRepoUrl
string
required
URL of the GitHub repository. Shown in the About modal and footer “Fork it” links. Example: "https://github.com/samgutentag/sbburgerweek".

Map

These fields set the initial viewport when the map first loads.
mapCenter
[lat, lng]
required
Starting map center as a two-element array of [latitude, longitude] in decimal degrees. Example: [34.42, -119.7] (downtown Santa Barbara). The map uses this as the initial view before any user interaction.
mapZoom
number
required
Starting Leaflet zoom level. Higher values zoom in closer. Example: 13 (neighborhood level). Typical values range from 11 (city-wide) to 15 (street-level).

Tip Jar

The tip jar is an optional Venmo link that appears in the footer. Set venmoUser to null to hide it entirely. The tip jar supports three tiers displayed as buttons of different sizes.
venmoUser
string | null
Venmo username (without the @). When set, a tip jar button appears in the footer that opens a Venmo payment link. Set to null to hide the tip jar completely. Example: "samgutentag".
venmoNote
string
Pre-filled payment note that appears in the Venmo app when the tip link is opened. Example: "Buy me a burger?".
tipTiers
array
Array of tip tier objects defining the three buttons in the tip jar modal. Each object has the following shape:
PropertyTypeDescription
size"s" | "m" | "l"Button size. "s" uses a custom emoji. "m" uses half the theme emoji. "l" uses the full theme emoji.
labelstringHuman-readable label shown on the button. Example: "Half a Burger".
emojistringCustom emoji, only used when size is "s". Example: "🍟".
amountnumberDollar amount sent to Venmo.
The "m" (medium) tier is automatically featured with an orange border. Clicking any tier fires a tip-s, tip-m, or tip-l tracking event.

Data & Dates

These fields control which data file is loaded, when the event is considered active, and how localStorage namespacing works to avoid collisions between events.
storageKey
string
required
The localStorage key used to persist each user’s saved favorites (the “My Picks” checklist). Use a unique value per event year to avoid collisions with previous events on the same domain. Example: "sbburgerweek-checklist".
printTitle
string
Title shown at the top of the printable “My Picks” page (/print). Example: "SB Burger Week 2026 — My Picks".
eventStartDate
string
ISO date string ("YYYY-MM-DD") for the first day of the event. Used by the stats dashboard for analytics time filters and by getEventState() to determine whether the map is in pre-event, during, or post-event state. Example: "2026-02-19".
eventEndDate
string | null
ISO date string ("YYYY-MM-DD") for the last day of the event. After this date, the concluded banner and modal are automatically shown. Set to null to never show the concluded state. Example: "2026-02-25".
dataLiveDate
string | null
ISO date string ("YYYY-MM-DD") that gates when full restaurant data is shown. Before this date, data.js (the skeleton with empty menuItems) is loaded. On or after this date, data-YYYY.js (full menu details) is loaded. The switchover happens at 12:01 AM local time. Set to null to always load the full data file. Example: "2026-02-18".

Integrations

These fields connect the map to external services. All are nullable — setting any of them to null disables the corresponding feature with no other changes required.
trackUrl
string | null
Full URL of the deployed Cloudflare Worker that receives tracking events via sendBeacon POST requests. null disables all click tracking and the stats dashboard will show no data. Requires running python3 apply-theme.py after changing so the Worker URL is updated in static files. Example: "https://sbburgerweek-track.example.workers.dev".
cfAnalyticsToken
string | null
Cloudflare Web Analytics token (a hex string). When set, apply-theme.py injects the Cloudflare analytics <script> into index.html. This token is public and safe to commit — it is client-side only. Set to null to remove the analytics snippet entirely. Requires running python3 apply-theme.py after changing.
contactDomain
string | null
Domain used to auto-generate the contact email address shown in the About modal. The full address is constructed as sb{itemLabel}week{year}@{contactDomain}. Example: "samgutentag.com" produces sbburgerweek2026@samgutentag.com. Set to null to hide the contact link entirely.
googlePlacesApiKey
null
This field should always be null in committed code. It exists as a documentation placeholder — the actual Google Places API key is stored in the GOOGLE_PLACES_API_KEY GitHub repo secret and is read by fetch-hours.py and fetch-place-ids.py at workflow runtime. The key is never exposed client-side.

Filters

These arrays define the filter buttons that appear in the map sidebar. Tag filters are always visible; hours filters are hidden until hours.json successfully loads.
tagFilters
array
Array of dietary tag filter objects. Each filter maps to a boolean field on restaurant objects. When a user activates a filter, only restaurants where that field is true are shown.Each object has the following shape:
PropertyTypeDescription
keystringMust exactly match a boolean field name on restaurant objects (e.g. "vegetarian").
iconstringEmoji displayed on the filter button.
labelstringHuman-readable label. Example: "Vegetarian".
Default filters: vegetarian (🌱), glutenFree (🚫), hasFries (🍟).
hoursFilters
array
Array of time-of-day filter objects. These filters are hidden until hours.json loads successfully. The key values ("open", "lunch", "dinner") are computed dynamically from the hours data — they do not correspond to static boolean fields on restaurant objects.Each object has the following shape:
PropertyTypeDescription
keystringFilter key ("open", "lunch", or "dinner").
iconstringEmoji displayed on the filter button.
labelstringHuman-readable label. Example: "Open Now".
Default filters: open (🟢 Open Now), lunch (☀️ Lunch), dinner (🌙 Dinner).

Next Event

This property is assigned on the THEME object after the object literal, at the bottom of config.js.
nextEvent
object | null
Promo object shown in the off-season banner to point visitors to the next upcoming event. Set to null to display a generic “check back soon” message instead. Example:
// Set at the bottom of config.js:
THEME.nextEvent = null;
When not null, the value should be an object describing the next event (name, URL, dates). During the active SB Burger Week 2026 season this is set to null.

Build docs developers (and LLMs) love