# IRW Website HTML Structure Reference ## Restaurant Page URL Live: `https://inlanderrestaurantweek.com/project/SLUG/` Archived: `https://web.archive.org/web/TIMESTAMP/https://inlanderrestaurantweek.com/project/SLUG/` ## Page Framework The site uses WordPress + Divi theme. Relevant container class: `et_pb_text_inner`. Each course section typically occupies one or two `et_pb_text_inner` divs. --- ## Course Layout Types ### Layout A — Heading and items in SEPARATE divs (most restaurants) ```html

First Course

Dish Name
Description

Dish Name 2
Description 2

Second Course

... ``` ### Layout B — Heading and items in SAME div (tavolata, durkins, table13, others) ```html

First Course

Dish Name
Description

Dish Name 2
Description 2

Second Course

...
``` --- ## Dish Name Tag Styles ### Style 1 — `` tag (most restaurants) Examples: 315cuisine, anthonys, bardenay, barkrescuepub, etc. ```html

Dish Name
Description text here

Dish Name
With space before br

``` ### Style 2 — `` tag with `
` inside (India House, Lebanon, Karma, ponderosa) ```html

Dish Name
Description text

Dish Name
Description without span

``` Key: name is inside ``, the `
` is INSIDE the `` tag. ### Style 3 — `` + `` combo (1898 restaurant) ```html

First PartSecond Part Description

``` Full dish name = "First Part" + " " + "Second Part" --- ## Field Extraction Patterns ### Name (from page title) ``` Restaurant Name | Inlander Restaurant Week ``` Regex: `(.+?) \| Inlander` ### Price (WARNING: unreliable — use price listing page instead) ```html <h1 style="text-align: left;"><strong>$45</strong></h1> ``` Regex: `<strong>\$(\d+)</strong>` PROBLEM: Some pages show drink prices like $22 that match before the real price. SOLUTION: Always build an authoritative slug→price map from the price listing page. ### Price Listing Page — Authoritative Prices URL: `https://inlanderrestaurantweek.com/price/` (or Wayback archived version) ```html <article class="et_pb_portfolio_item ... project_category_45 ..."> ... <a href="https://inlanderrestaurantweek.com/project/SLUG/"> ``` Extract price tier from `project_category_(25|35|45)` CSS class. Extract slug from `href=".../project/SLUG/"`. ### Cuisine ```html CUISINE: AMERICAN COMFORT FOOD ``` Often inside `<strong>` or `<em>` tags. Extract uppercase text after "CUISINE:". Apply `.ToTitleCase()` for proper formatting. ### Phone Area codes: 509 (Spokane area) or 208 (Idaho/CDA area) Pattern: `(509) 555-1234` or `(208) 555-1234` Regex: `\((?:208|509)\) \d{3}-\d{4}` ### Hours ``` Menu served 5pm-9pm nightly Menu served Thursday-Sunday, 5-9pm ``` Regex: `Menu served [^<]+` ### Area Look for area keywords (ALL CAPS in source) anywhere in the HTML: - DOWNTOWN, NORTH SPOKANE, SOUTH SPOKANE, WEST SPOKANE, SPOKANE VALLEY - AIRWAY HEIGHTS, LIBERTY LAKE, COEUR D'ALENE, POST FALLS, HAYDEN, ATHOL, WORLEY Default to ["Downtown"] if nothing matched. Some restaurants appear in multiple areas — collect all matches. --- ## Dietary Tag Filtering Skip these as dish names — they appear in `<strong>` but are dietary labels, not dish names: - GF (gluten free) - GFA (gluten free available) - V, V+ (vegetarian, vegan) - DF, DFA (dairy free, dairy free available) - V:, V+A (legend lines) - 2025 (year marker some restaurants include) - Drink (some restaurants label beverage course) Full regex: `^(GF|GFA|V\+?|DF|DFA|V:|2025|Drink|V\+A)$` Also skip names matching `^[A-Z]{1,3}:` (legend lines like "GF: Gluten Free") Also skip names shorter than 3 chars or longer than 80 chars. --- ## Restaurants by Known HTML Style (2025) **Layout B (same-block)**: tavolata, durkins, table13, terraza, and others **Style 2 (`<b>` tags)**: indiahouse, lebanon, karma, ponderosa, collectivekitchen, dryfly, masselowslounge, vieuxcarre, wileys, osprey, shawnodonnells, ganderryegrass **Style 3 (`<b>`+`<strong>` combo)**: 1898 Note: These styles may change year to year as restaurants update their pages. Always check a few representative pages before assuming the same structure applies. --- ## JS-Only Pages (no static HTML menu content) These restaurants had no recoverable menu data from any Wayback snapshot in 2025: heritage, kismet, littlenoodle, macdaddys, purgatory, redtail, republickitchen, republicpi, vicinopizza Their pages are fully JS-rendered — the static HTML captured by Wayback Machine shows the page shell but not the menu content. For future years, these may or may not have static caches depending on server-side rendering changes.