Add the Academy: narrated, animated roasting & brewing lessons; cupping link on roast detail
Test and deploy / test-and-deploy (push) Successful in 53s
Test and deploy / test-and-deploy (push) Successful in 53s
Academy (/academy, 'Learn' nav group): - 10 lessons / 45 slides across two tracks. Roasting: seed anatomy and composition, drying & the turning point, Maillard, first crack & development (DTR), curve/RoR reading (crash, flick, stall), defects → one-change discipline. Brewing: extraction physics (dissolving order, yield, grind, temp/time/ratio), then technique per brewer family — immersion (French press, AeroPress, Clever/Hario Switch, cold brew, cupping), percolation (bloom, V60, Chemex/Kalita, batch, percolator), espresso & pressure (puck prep, shot reading, dialing in, moka) - One cohesive scene system: 25 parameterized animated SVG scenes drawn from the app's palette (beans, curves, phase bars, brewers reusing the silhouette library), CSS keyframe animations, reduced-motion support - Narration: Azure TTS (en-US-Andrew HD, eastus) pre-generated to 45 committed MP3s by scripts/generate-academy-audio.mjs; slides speak phonetic respellings (my-YARD, KEM-ex, MOH-kah…) while captions show normal spelling; hands-free autoplay advances after each clip - Player: slide dots, keyboard arrows/space, per-slide captions Roast detail: 'Open cupping session' button next to cup notes (opens or creates the linked plan's session) — its score and flavors flow into the updated .alog download. Co-Authored-By: Claude Fable 5 <[email protected]>
This commit is contained in:
co-authored by
Claude Fable 5
parent
0b4857c225
commit
64c1b3605b
@@ -50,6 +50,7 @@ const PUBLIC_SHELL_FILES = new Set([
|
||||
"/brews.html",
|
||||
"/gear.html",
|
||||
"/roasters.html",
|
||||
"/academy.html",
|
||||
"/api-docs.html",
|
||||
]);
|
||||
|
||||
@@ -146,6 +147,7 @@ export function createApp({
|
||||
req.path === "/brews" ||
|
||||
req.path === "/gear" ||
|
||||
req.path === "/roasters" ||
|
||||
req.path === "/academy" ||
|
||||
req.path === "/api-docs"
|
||||
)
|
||||
res.set("Cache-Control", "no-store, private");
|
||||
@@ -428,6 +430,7 @@ export function createApp({
|
||||
["/brews", "brews.html"],
|
||||
["/gear", "gear.html"],
|
||||
["/roasters", "roasters.html"],
|
||||
["/academy", "academy.html"],
|
||||
["/api-docs", "api-docs.html"],
|
||||
]) {
|
||||
app.get(route, async (req, res, next) => {
|
||||
|
||||
Reference in New Issue
Block a user