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.

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.
FileContentsWhen loaded
data.jsAll restaurant entries with menuItems: [] (empty)Always — before dataLiveDate
data-YYYY.jsSame entries with full menuItems arrays and descriptionsOnly 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.
FieldTypeRequiredDescription
namestringYesDisplay name. Shown in the sidebar, popup, search results, and page title on deep link.
addressstringYesFull street address. Used as fallback for directions when appleMapsUrl is null.
areastringYesGeographic zone. Must exactly match one key in AREA_COLORS. Controls marker color and filter group.
latnumberYesLatitude (decimal degrees). Used to place the map marker.
lngnumberYesLongitude (decimal degrees). Used to place the map marker.
mapUrlstringYesGoogle 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.
appleMapsUrlstring | nullNoApple Maps share link. Shown on iOS/macOS. Set null to fall back to an address-based Apple Maps search.
websitestring | nullNoRestaurant website URL. Set null to hide the link.
phonestring | nullNoPhone number as a string (e.g. "805-962-5394"). Set null to hide.
instagramstring | nullNoInstagram handle without the @ (e.g. "arnoldiscafesb"). Set null to hide.
vegetarianbooleanYestrue if a vegetarian option is available. Powers the Vegetarian filter button.
glutenFreebooleanYestrue if a gluten-free option is available. Powers the Gluten Free filter button.
hasFriesbooleanYestrue if the burger week item includes fries. Powers the Includes Fries filter button.
menuItemsarrayYesArray 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:
ValueWhat 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.
What you needHow to get it
Lat/LngGoogle Maps → right-click the map pin → Copy coordinates. Paste the two numbers as lat and lng.
Google Maps link (mapUrl)Google Maps → click ShareCopy link. Use the short maps.app.goo.gl URL.
Apple Maps link (appleMapsUrl)Apple Maps → tap ShareCopy 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:
FieldFilter labelMeaning
vegetarianVegetarianThe restaurant’s burger week item has a vegetarian option
glutenFreeGluten FreeA gluten-free version or item is available
hasFriesIncludes FriesFries 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.

Build docs developers (and LLMs) love