Fixed some of the restaurants that had broken information due to special characters, like GF. Updated the ReadMe file with the fix for future pulls.
This commit is contained in:
106
README.md
106
README.md
@@ -48,3 +48,109 @@ restaurant-picker.html # The entire app — HTML, CSS, and JS in one file
|
|||||||
LICENSE
|
LICENSE
|
||||||
README.md
|
README.md
|
||||||
```
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Data Entry Guide
|
||||||
|
|
||||||
|
Each year's restaurant data is stored as a JavaScript array (`const RESTAURANTS = [...]`) inline in `restaurant-picker.html`. The source data comes from the [IRW restaurant listing pages](https://inlanderrestaurantweek.com/restaurants/). This section covers the data schema and common pitfalls to avoid when entering or updating restaurant records.
|
||||||
|
|
||||||
|
### Restaurant Object Schema
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"name": "Restaurant Name",
|
||||||
|
"slug": "restaurantname",
|
||||||
|
"price": 35,
|
||||||
|
"areas": ["Downtown"],
|
||||||
|
"cuisine": "Italian",
|
||||||
|
"url": "https://inlanderrestaurantweek.com/project/restaurantname/",
|
||||||
|
"menu": {
|
||||||
|
"hours": "Menu served Tue-Sat, 5 pm-close",
|
||||||
|
"phone": "(509) 555-1234",
|
||||||
|
"courses": {
|
||||||
|
"First Course": [
|
||||||
|
{ "name": "Dish Name", "desc": "Ingredients and description GF" }
|
||||||
|
],
|
||||||
|
"Second Course": [
|
||||||
|
{ "name": "Dish Name", "desc": "Ingredients and description" }
|
||||||
|
],
|
||||||
|
"Third Course": [
|
||||||
|
{ "name": "Dish Name", "desc": "Ingredients and description V+" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Field notes:**
|
||||||
|
- `slug` — lowercase, no spaces or special characters; used as an internal identifier
|
||||||
|
- `price` — must be `25`, `35`, or `45` (the three IRW price tiers)
|
||||||
|
- `areas` — array; a restaurant can belong to more than one area (e.g. `["Downtown", "Coeur d'Alene"]`)
|
||||||
|
- `phone` — use empty string `""` if not listed
|
||||||
|
- Each course is an **array** — restaurants sometimes offer a choice of two or more dishes per course; add one object per option
|
||||||
|
|
||||||
|
### Valid Area Values
|
||||||
|
|
||||||
|
```
|
||||||
|
Airway Heights Athol Coeur d'Alene Downtown
|
||||||
|
Hayden Liberty Lake North Spokane Post Falls
|
||||||
|
South Spokane Spokane Valley West Spokane Worley
|
||||||
|
ID (Coeur d'Alene-area catch-all)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Valid Cuisine Values
|
||||||
|
|
||||||
|
```
|
||||||
|
American Asian Barbecue Bistro Eclectic European French
|
||||||
|
Fusion Gastropub German Indian Irish Italian Latin
|
||||||
|
Mediterranean Mexican Middle Eastern Northwest Pizza
|
||||||
|
Seafood Southern Steakhouse Thai
|
||||||
|
```
|
||||||
|
|
||||||
|
New cuisine types can be added, but check existing values first to keep filters consistent.
|
||||||
|
|
||||||
|
### Dietary Tags
|
||||||
|
|
||||||
|
Dietary tags go at the **end of the `desc` field**, separated by a space. Multiple tags are space-separated.
|
||||||
|
|
||||||
|
| Tag | Meaning |
|
||||||
|
|-----|---------|
|
||||||
|
| `GF` | Gluten Free |
|
||||||
|
| `GFA` | Gluten Free Available (on request or with substitution) |
|
||||||
|
| `V` | Vegetarian |
|
||||||
|
| `V+` | Vegan |
|
||||||
|
| `DF` | Dairy Free |
|
||||||
|
|
||||||
|
**Examples:**
|
||||||
|
```
|
||||||
|
"desc": "Mixed greens, candied walnuts, goat cheese, balsamic vinaigrette GF V"
|
||||||
|
"desc": "House pasta with roasted vegetables – sub GF pasta available GFA V"
|
||||||
|
"desc": "Coconut curry with tofu and seasonal vegetables V+ GF DF"
|
||||||
|
```
|
||||||
|
|
||||||
|
Tags that are inline notes within a description (e.g. `– sub GF crust for additional charge`) are fine to leave mid-sentence; only the primary applicable tags belong at the end.
|
||||||
|
|
||||||
|
### Common Data Entry Pitfall: Dietary Tag as Dish Name
|
||||||
|
|
||||||
|
The IRW website displays a dietary icon **before** the dish name. When copying menu data, it is easy to accidentally paste the dietary tag as the `name` field and run the dish name directly into the start of `desc` with no separator.
|
||||||
|
|
||||||
|
**Wrong (broken):**
|
||||||
|
```json
|
||||||
|
{ "name": "GFA", "desc": "Margherita PizzaSan Marzano Tomato Sauce. Fresh Mozzarella." }
|
||||||
|
```
|
||||||
|
|
||||||
|
**Correct:**
|
||||||
|
```json
|
||||||
|
{ "name": "Margherita Pizza", "desc": "San Marzano Tomato Sauce. Fresh Mozzarella. GFA" }
|
||||||
|
```
|
||||||
|
|
||||||
|
Signs that an entry has this problem:
|
||||||
|
- The `name` field is just a dietary tag (`"GF"`, `"GFA"`, `"V+"`, etc.)
|
||||||
|
- The `desc` field starts with what looks like a dish name run together with the description (no space or punctuation between them, e.g. `"Chocolate TorteA rich slice of flourless paradise"`)
|
||||||
|
|
||||||
|
### Special Characters
|
||||||
|
|
||||||
|
The data lives inside a JavaScript string, so be careful with quotation marks inside descriptions. Use a **curly/smart right double-quote** (`"`, U+201D) for inch marks (e.g. `7" pizza`) rather than a straight ASCII `"`, which would break the JS string delimiters. Em dashes (`–`) and curly apostrophes (`'`) from the source website copy fine as-is.
|
||||||
|
|
||||||
|
**Critical: field delimiters must be straight ASCII double quotes.** Some editors and AI tools auto-correct straight `"` to curly `"` / `"` (U+201C / U+201D). If curly quotes end up wrapping property names or values (e.g. `"name"` instead of `"name"`), JavaScript will fail to parse the entire `RESTAURANTS` array and no restaurants will appear in the app. Always verify that the structural quotes in the data use the straight ASCII `"` character (U+0022).
|
||||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user