Skip to content

Add coffee & tea menu with espresso shot telemetry charts#14

Open
Glitched wants to merge 6 commits into
mainfrom
claude/coffee-tea-menu-9tio1u
Open

Add coffee & tea menu with espresso shot telemetry charts#14
Glitched wants to merge 6 commits into
mainfrom
claude/coffee-tea-menu-9tio1u

Conversation

@Glitched

@Glitched Glitched commented Jul 9, 2026

Copy link
Copy Markdown
Owner

Adds a complete coffee & tea menu section to the site alongside the existing cocktail menu, featuring real espresso shot telemetry visualization.

Summary

This PR introduces a new /coffee page with a curated coffee & tea menu, equipment details, and an interactive SVG chart component that visualizes espresso shot profiles and real pull telemetry. The chart is server-rendered with no JavaScript overhead and supports both planned pressure curves and actual shot data with pressure/weight tracking.

Key Changes

  • New Coffee Menu Page (src/pages/coffee.astro): Dedicated page with navigation tabs to switch between cocktails and coffee menus
  • Coffee Data (src/coffee.ts): Centralized data for the current bean on bar, GaggiMate espresso profiles, drink recipes, tea selection, and equipment details
  • Shot Chart Component (src/components/coffee/ShotChart.tsx): Server-rendered SVG visualization that displays:
    • Planned pressure curves from GaggiMate profile phases with exit targets
    • Real shot telemetry with target vs. actual pressure and weight-in-cup tracking
    • Phase boundaries, pump-off markers, and weight targets
    • Responsive scaling with proper axis labels and legends
  • Coffee Menu UI (src/components/coffee/CoffeeMenu.tsx): Composed page layout with sections for current bean, espresso/pour-over recipes, tea list, and equipment
  • Type System (src/types/coffee.ts): Complete TypeScript definitions for GaggiMate profiles, shot samples, beans, drinks, and gear
  • Shot Data Processing (scripts/slim-shot.mjs): Utility script to compress raw GaggiMate exports from ~100KB to ~5KB by extracting only chart-relevant fields
  • Navigation (src/components/MenuTabs.astro): Shared tab component for switching between cocktails and coffee sections
  • Styling: Added CSS variables for shot chart colors (pressure: amber, weight: cyan) with CVD/contrast validation

Implementation Details

  • The ShotChart component uses pure SVG with CSS custom properties for theming—no JavaScript required
  • GaggiMate profiles are stored verbatim as exported from the machine for easy profile updates
  • Shot telemetry includes the post-pump drip tail, showing how brew-by-weight cuts the pump early and lets drips land the final grams on target
  • Phase durations in profiles are maximums; exit targets (e.g., "39.6g volumetric") end phases early, which is why a "28 second" profile pulls in under 20 seconds
  • The chart intelligently detects pump cutoff and annotates the drip-finish phase

https://claude.ai/code/session_019Up3A1AKGQYm9bNfXkkFNB

Adds a second menu tab alongside cocktails, reachable at /coffee via a
toggle on every page. The coffee tab is a static composed page: a
"proudly brew SEY" sign, the single bean currently on bar with its
origin story, three drinks (espresso, pour over, americano), a short
tea list, and the gear rundown.

Espresso carries its GaggiMate profile (stored verbatim as exported,
both standard and pro schemas) rendered as a static SVG chart: target
vs actual pressure and brew-by-weight cup weight on stacked panels
sharing a time axis, with phase boundaries and the pump-cut drip tail
annotated. Shot telemetry ships slimmed by scripts/slim-shot.mjs
(~100KB raw export -> ~3KB of chart fields). Profile and shot are
community data placeholders until the machine mod is installed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019Up3A1AKGQYm9bNfXkkFNB
@netlify

netlify Bot commented Jul 9, 2026

Copy link
Copy Markdown

Deploy Preview for thenightlatch ready!

Name Link
🔨 Latest commit 1939ec4
🔍 Latest deploy log https://app.netlify.com/projects/thenightlatch/deploys/6a4f1bd19f75b40008588dd8
😎 Deploy Preview https://deploy-preview-14--thenightlatch.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

claude added 5 commits July 9, 2026 03:01
- Soften the active tab treatment (secondary fill instead of primary)
- Sign reads "We Proudly Serve SEY Coffee", no trademark symbol
- Drop the redundant roasted-by line; the sign covers attribution
- Origin breadcrumb uses slashes instead of arrows
- Label the bean chips (Process/Varietal/Elevation) and add a
  plain-language line explaining what a natural, a landrace varietal,
  and the elevation actually mean
- Progressive disclosure for drinks: cards show title + one-line blurb,
  and params, brew steps, and the shot chart move into a tap-in dialog
  matching the cocktail cards
- Replace placeholder teas with the real program, starting with Kettl's
  Nagano Soba Cha: tasting notes and caffeine tag on the card,
  producer/cultivar/region and brew params in the dialog

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019Up3A1AKGQYm9bNfXkkFNB
Espresso and pour over blurbs no longer reference the bean — the Now
Brewing section covers that; the drink entries describe the preparation
style. Tea cards slim down to name, caffeine tag, and tasting notes,
while the dialog picks up the type, caffeine chip, and a per-tea source
attribution (Kettl, Greenpoint), replacing the section footer.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019Up3A1AKGQYm9bNfXkkFNB
- Pour over brews at 93°C with a ~50 g bloom, ~30 s rest, and two
  pours — matching how it's actually made
- Temperature chips render Fahrenheit by default and toggle to the
  Celsius source value on tap (conversions rounded to whole degrees)
- Brew steps lose the hanging list indent; numbers render inline and
  flush with the description text
- The V60 is glass (regrettably or not) with CAFEC Abaca filters

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019Up3A1AKGQYm9bNfXkkFNB
The html element's background was set to var(--background) — a raw HSL
triplet meant for hsl() — so the declaration was invalid and the root
element stayed white, flashing between page loads. Wrap it in hsl()
and declare color-scheme per theme so the pre-paint canvas (and
scrollbars) follow the active theme too.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019Up3A1AKGQYm9bNfXkkFNB
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants