Skip to content

Commit 19d2ebd

Browse files
KaylinCHCHclaude
andcommitted
Add principal grape varietal wines (all French) + grape variety field
New wines: Champagne, Sancerre, Chablis, Bourgogne Blanc, Bourgogne Rouge, Bordeaux. Added a grape variety to every wine, shown in the Wine Finder cards, flashcards, cheat sheet (new Grape column), and a new grape-based quiz question type. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent a752ed5 commit 19d2ebd

1 file changed

Lines changed: 61 additions & 13 deletions

File tree

index.html

Lines changed: 61 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -799,67 +799,103 @@ <h3>Memory Tips</h3>
799799
{
800800
name: "Beaujolais", country: "France", color: "red",
801801
type: "red", body: 1, sweetness: 1, tannins: 1, acidity: 2, alcohol: 2,
802-
oak: "unoaked", flavors: "Raspberry, red cherry",
802+
oak: "unoaked", grape: "Gamay", flavors: "Raspberry, red cherry",
803803
note: "Light & fresh — the easy-drinking French red"
804804
},
805805
{
806806
name: "Côtes du Rhône", country: "France", color: "red",
807807
type: "red", body: 2, sweetness: 1, tannins: 2, acidity: 2, alcohol: 2,
808-
oak: "varies", flavors: "Strawberry, red plum, white pepper",
808+
oak: "varies", grape: "Grenache, Syrah, Mourvèdre", flavors: "Strawberry, red plum, white pepper",
809809
note: "The peppery note sets it apart"
810810
},
811811
{
812812
name: "Châteauneuf-du-Pape", country: "France", color: "red",
813813
type: "red", body: 3, sweetness: 1, tannins: 2, acidity: 2, alcohol: 3,
814-
oak: "oaked", flavors: "Strawberry, clove",
814+
oak: "oaked", grape: "Grenache-based blend", flavors: "Strawberry, clove",
815815
note: "Full, bold, high alcohol — 'Pope's new castle'"
816816
},
817817
{
818818
name: "Sauternes", country: "France", color: "white",
819819
type: "white", body: 3, sweetness: 3, tannins: 0, acidity: 3, alcohol: 2,
820-
oak: "oaked", flavors: "Apricot, honey, vanilla",
820+
oak: "oaked", grape: "Sémillon & Sauvignon Blanc", flavors: "Apricot, honey, vanilla",
821821
note: "Luxurious sweet white from Bordeaux"
822822
},
823+
{
824+
name: "Champagne", country: "France", color: "sparkling",
825+
type: "sparkling", body: 2, sweetness: 1, tannins: 0, acidity: 3, alcohol: 2,
826+
oak: "unoaked", grape: "Chardonnay & Pinot Noir", flavors: "Apple, lemon, toasted bread",
827+
note: "The benchmark sparkling — high acidity, toasty brioche notes"
828+
},
829+
{
830+
name: "Sancerre", country: "France", color: "white",
831+
type: "white", body: 2, sweetness: 1, tannins: 0, acidity: 3, alcohol: 2,
832+
oak: "unoaked", grape: "Sauvignon Blanc", flavors: "Apple, grassy/herbaceous",
833+
note: "Crisp, grassy Sauvignon Blanc with high acidity"
834+
},
835+
{
836+
name: "Chablis", country: "France", color: "white",
837+
type: "white", body: 1.5, sweetness: 1, tannins: 0, acidity: 3, alcohol: 2,
838+
oak: "unoaked", grape: "Chardonnay", flavors: "Apple, lemon",
839+
note: "Unoaked Chardonnay — lean & mineral, high acidity"
840+
},
841+
{
842+
name: "Bourgogne Blanc", country: "France", color: "white",
843+
type: "white", body: 2, sweetness: 1, tannins: 0, acidity: 2, alcohol: 2,
844+
oak: "varies", grape: "Chardonnay", flavors: "Lemon, peach",
845+
note: "White Burgundy — riper fruit than Chablis"
846+
},
847+
{
848+
name: "Bourgogne Rouge", country: "France", color: "red",
849+
type: "red", body: 1.5, sweetness: 1, tannins: 1, acidity: 3, alcohol: 2,
850+
oak: "varies", grape: "Pinot Noir", flavors: "Raspberry, red cherry",
851+
note: "Red Burgundy — light, high acidity, sometimes smoky"
852+
},
853+
{
854+
name: "Bordeaux", country: "France", color: "red",
855+
type: "red", body: 2.5, sweetness: 1, tannins: 3, acidity: 3, alcohol: 2,
856+
oak: "oaked", grape: "Cabernet Sauvignon & Merlot", flavors: "Blackberry, blackcurrant, cedar",
857+
note: "Bold blend — tannic, age-worthy, cedar from oak"
858+
},
823859
{
824860
name: "Prosecco", country: "Italy", color: "sparkling",
825861
type: "sparkling", body: 1, sweetness: 1.5, tannins: 0, acidity: 2, alcohol: 2,
826-
oak: "unoaked", flavors: "Pear, floral aromas",
862+
oak: "unoaked", grape: "Glera", flavors: "Pear, floral aromas",
827863
note: "Italy's bubbly — light, floral, crowd-pleaser"
828864
},
829865
{
830866
name: "Chianti", country: "Italy", color: "red",
831867
type: "red", body: 2, sweetness: 1, tannins: 3, acidity: 3, alcohol: 2,
832-
oak: "oaked", flavors: "Red cherry, red plum, clove",
868+
oak: "oaked", grape: "Sangiovese", flavors: "Red cherry, red plum, clove",
833869
note: "High tannin + high acidity = classic Italian food wine"
834870
},
835871
{
836872
name: "Cava", country: "Spain", color: "sparkling",
837873
type: "sparkling", body: 1, sweetness: 1, tannins: 0, acidity: 2, alcohol: 2,
838-
oak: "unoaked", flavors: "Apple, lemon",
874+
oak: "unoaked", grape: "Macabeo, Parellada, Xarel·lo", flavors: "Apple, lemon",
839875
note: "Spain's sparkling — crisp, citrusy"
840876
},
841877
{
842878
name: "Rioja", country: "Spain", color: "red",
843879
type: "red", body: 2.5, sweetness: 1, tannins: 2, acidity: 2, alcohol: 2,
844-
oak: "oaked", flavors: "Strawberry, vanilla",
880+
oak: "oaked", grape: "Tempranillo", flavors: "Strawberry, vanilla",
845881
note: "Spain's signature red — strawberry + vanilla"
846882
},
847883
{
848884
name: "Sherry", country: "Spain", color: "white",
849885
type: "fortified", body: 2, sweetness: 2, tannins: 0, acidity: 2, alcohol: 3,
850-
oak: "oaked", flavors: "Varies by style",
886+
oak: "oaked", grape: "Palomino", flavors: "Varies by style",
851887
note: "Fortified + versatile — comes in every sweetness level"
852888
},
853889
{
854890
name: "Port", country: "Portugal", color: "red",
855891
type: "fortified", body: 3, sweetness: 3, tannins: 3, acidity: 2, alcohol: 3,
856-
oak: "oaked", flavors: "Blackberry",
892+
oak: "oaked", grape: "Touriga Nacional blend", flavors: "Blackberry",
857893
note: "Sweet, strong, dark — the dessert powerhouse"
858894
},
859895
{
860896
name: "White Zinfandel", country: "California", color: "rose",
861897
type: "rose", body: 1, sweetness: 2, tannins: 0, acidity: 2, alcohol: 1,
862-
oak: "unoaked", flavors: "Strawberry, raspberry",
898+
oak: "unoaked", grape: "Zinfandel", flavors: "Strawberry, raspberry",
863899
note: "Not white — it's a rosé! Low alcohol, fruity"
864900
}
865901
];
@@ -956,7 +992,7 @@ <h3>Memory Tips</h3>
956992
<div class="wine-card-result ${isMatch ? '' : 'dimmed'}">
957993
${scoreBadge}
958994
<div class="wine-name">${colorDot(w.type)} ${w.name}</div>
959-
<div class="wine-country">${w.country}</div>
995+
<div class="wine-country">${w.country}${w.grape ? ' · ' + w.grape : ''}</div>
960996
<div class="wine-attrs">
961997
${tags.map(t => `<span class="wine-tag ${t.match ? 'match' : ''}">${t.label}</span>`).join('')}
962998
</div>
@@ -1002,6 +1038,7 @@ <h3>Memory Tips</h3>
10021038
<h3>${w.name}</h3>
10031039
<table>
10041040
<tr><td>Country</td><td>${w.country}</td></tr>
1041+
${w.grape ? `<tr><td>Grape</td><td>${w.grape}</td></tr>` : ''}
10051042
<tr><td>Type</td><td>${colorDot(w.type)} ${typeLabel}</td></tr>
10061043
<tr><td>Body</td><td>${bodyLabels[Math.round(w.body)]}</td></tr>
10071044
<tr><td>Sweetness</td><td>${sweetnessLabels[Math.round(w.sweetness)]}</td></tr>
@@ -1060,6 +1097,16 @@ <h3>${w.name}</h3>
10601097
options: shuffle(['Light', 'Medium', 'Full'].filter(b => b !== bodyLabels[Math.round(w.body)])).concat(bodyLabels[Math.round(w.body)]),
10611098
explanation: `${w.name} has a ${bodyLabels[Math.round(w.body)].toLowerCase()} body.`
10621099
});
1100+
1101+
if (w.grape) {
1102+
const otherGrapes = [...new Set(wines.filter(x => x.grape && x.grape !== w.grape).map(x => x.grape))];
1103+
pool.push({
1104+
q: `Which grape variety is ${w.name} made from?`,
1105+
correct: w.grape,
1106+
options: shuffle(otherGrapes).slice(0, 3).concat(w.grape),
1107+
explanation: `${w.name} is made from ${w.grape}.`
1108+
});
1109+
}
10631110
});
10641111

10651112
quizQuestions = shuffle(pool).slice(0, 10);
@@ -1168,6 +1215,7 @@ <h2>Quiz Complete!</h2>
11681215
${rows.map(w => `<tr>
11691216
<td>${colorDot(w.type)} ${w.name}</td>
11701217
<td>${w.country}</td>
1218+
<td>${w.grape || '—'}</td>
11711219
<td>${bodyLabels[Math.round(w.body)]}</td>
11721220
<td>${sweetnessLabels[Math.round(w.sweetness)]}</td>
11731221
<td>${oakLabel(w.oak)}</td>
@@ -1176,7 +1224,7 @@ <h2>Quiz Complete!</h2>
11761224
</tr>`).join('')}`;
11771225
}
11781226

1179-
const headers = ['Wine', 'Country', 'Body', 'Sweetness', 'Oak', 'Key Flavors', 'Remember'];
1227+
const headers = ['Wine', 'Country', 'Grape', 'Body', 'Sweetness', 'Oak', 'Key Flavors', 'Remember'];
11801228
makeTable('redTable', reds, headers);
11811229
makeTable('sparklingTable', sparkling, headers);
11821230
makeTable('fortifiedTable', fortified, headers);

0 commit comments

Comments
 (0)