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.
The map reads restaurant data from two JavaScript files: data.js, which contains the skeleton list (always loaded before the event goes live), and data-YYYY.js, which contains full menu details and is only loaded on or after the dataLiveDate set in config.js. This split lets you publish the map with placeholder entries before the event’s official data is released, then flip a single config value to reveal the real details.
Two-file pattern
Both files share an identical schema — the only structural difference is how much detail lives in each menuItems array.
| File | Contents | When loaded |
|---|
data.js | All restaurant entries with menuItems: [] (empty) | Always — before dataLiveDate |
data-YYYY.js | Same entries with full menuItems arrays and descriptions | Only on or after dataLiveDate in config.js |
Before dataLiveDate: the app loads data.js. Every restaurant shows a “Details coming soon!” message in its popup and sidebar entry, but the map, filters, search, and directions all work normally.
On or after dataLiveDate: the app switches to data-YYYY.js. Full menu item names and descriptions appear in popups and the sidebar.
Set dataLiveDate: null in config.js to skip the gate entirely and always load the full data file.
You can also pass ?year=YYYY in the URL (e.g. http://localhost:8000?year=2026) to force a specific year’s data file to load, bypassing the date gate. This is useful for previewing a future or past year’s data during local development.
Restaurant object schema
Each entry in the restaurants array is a plain JavaScript object. Here is a real example from data-2026.js:
{
name: "Arnoldi's",
address: "600 Olive St., Santa Barbara, CA",
area: "Downtown SB",
lat: 34.423278,
lng: -119.691155,
mapUrl: "https://maps.app.goo.gl/UUefNcGFbYjGUNPd7",
appleMapsUrl: "https://maps.apple/p/U3gWeWbcVqKjsb",
website: "https://www.arnoldis.com/",
phone: "805-962-5394",
instagram: "arnoldiscafesb",
vegetarian: true,
glutenFree: false,
hasFries: false,
menuItems: [
{
name: "Bocce Burrata Parm Pesto Chicken Burger",
description:
"A chicken parm sando with basil pesto and burrata on thick, house-baked ciabatta.",
},
{
name: "Bocce Burrata Pesto Caprese Burger",
description:
"A vegetarian caprese on thick, house-baked ciabatta with heirloom yellow and red tomatoes, pesto, and sharp parmesan.",
},
],
}
Every field is described in the table below.
| Field | Type | Required | Description |
|---|
name | string | Yes | Display name. Shown in the sidebar, popup, search results, and page title on deep link. |
address | string | Yes | Full street address. Used as fallback for directions when appleMapsUrl is null. |
area | string | Yes | Geographic zone. Must exactly match one key in AREA_COLORS. Controls marker color and filter group. |
lat | number | Yes | Latitude (decimal degrees). Used to place the map marker. |
lng | number | Yes | Longitude (decimal degrees). Used to place the map marker. |
mapUrl | string | Yes | Google Maps share link (short maps.app.goo.gl URL). Used for the Directions button and by fetch-place-ids.py to resolve Place IDs for the hours feature. |
appleMapsUrl | string | null | No | Apple Maps share link. Shown on iOS/macOS. Set null to fall back to an address-based Apple Maps search. |
website | string | null | No | Restaurant website URL. Set null to hide the link. |
phone | string | null | No | Phone number as a string (e.g. "805-962-5394"). Set null to hide. |
instagram | string | null | No | Instagram handle without the @ (e.g. "arnoldiscafesb"). Set null to hide. |
vegetarian | boolean | Yes | true if a vegetarian option is available. Powers the Vegetarian filter button. |
glutenFree | boolean | Yes | true if a gluten-free option is available. Powers the Gluten Free filter button. |
hasFries | boolean | Yes | true if the burger week item includes fries. Powers the Includes Fries filter button. |
menuItems | array | Yes | Array of { name, description } objects — the event special(s). See below. |
menuItems is an array of objects, each with a name string and a description string (or null):
menuItems: [
{
name: "The Broken Yolk Smashburger",
description:
"Two smashed beef patties with ooey-gooey cheddar, a bold fried egg purée, bacon-onion jam, house-brined pickles, crisp lettuce, and juicy tomato on a tender Hawaiian bun. Dine-in only.",
},
{
name: "Veggie Smash",
description: null, // → shows "More details coming soon!" for this item
},
]
Two special cases control placeholder messaging:
| Value | What the user sees |
|---|
menuItems: [] | ”Details coming soon!” — used in data.js skeleton entries and when the event organiser hasn’t published menu details yet. |
description: null | ”More details coming soon!” — used when the item name is known but the description hasn’t been written yet. |
Getting coordinates and map links
| What you need | How to get it |
|---|
| Lat/Lng | Google Maps → right-click the map pin → Copy coordinates. Paste the two numbers as lat and lng. |
Google Maps link (mapUrl) | Google Maps → click Share → Copy link. Use the short maps.app.goo.gl URL. |
Apple Maps link (appleMapsUrl) | Apple Maps → tap Share → Copy Link. Set null to use address-based directions instead. |
Multi-location restaurants
When the same restaurant has more than one location participating in the event, create a separate entry for each location and disambiguate with a parenthetical suffix:
// Two separate entries — each with its own coordinates and map links
{ name: "Kyle's Kitchen (Hollister)", area: "Goleta", lat: 34.430453, lng: -119.872319, ... }
{ name: "Kyle's Kitchen (Calle Real)", area: "Goleta", lat: 34.44078, lng: -119.82405, ... }
The suffix appears in the sidebar, popup, and search results, so keep it short and recognisable.
Dietary flags
Three boolean fields power the dietary filter buttons in the sidebar:
| Field | Filter label | Meaning |
|---|
vegetarian | Vegetarian | The restaurant’s burger week item has a vegetarian option |
glutenFree | Gluten Free | A gluten-free version or item is available |
hasFries | Includes Fries | Fries are included with the burger week special |
Set each to true or false. The filter buttons appear automatically only when at least one restaurant in the dataset has that flag set to true — no other configuration is needed.