<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">

  
  <title>API, The Umami Post</title>

  
  <meta name="description" content="Public JSON API for The Umami Post, articles, quotes, events, glossary, and more.">

  
  
  <meta property="og:type" content="website">
  <meta property="og:title" content="API">
  <meta property="og:description" content="Public JSON API for The Umami Post, articles, quotes, events, glossary, and more.">
  <meta property="og:site_name" content="The Umami Post">
  <meta property="og:url" content="https://theumamipost.com/api/">
  <meta property="og:locale" content="en_US">
  
  
  
    <meta property="og:image" content="https://theumamipost.com/assets/favicon-512.png">
  

  
  <meta name="twitter:card" content="summary_large_image">
  <meta name="twitter:title" content="API">
  <meta name="twitter:description" content="Public JSON API for The Umami Post, articles, quotes, events, glossary, and more.">
  
  

  
  <link rel="canonical" href="https://theumamipost.com/api/">

  
  
    
  <link rel="me" href="https://github.com/jonajinga">
    
  
  
  <link rel="webmention" href="https://webmention.io/theumamipost.com/webmention">
  
  
  <link rel="pingback" href="https://webmention.io/theumamipost.com/xmlrpc">
  

  
  <link rel="alternate" type="application/rss+xml" title="The Umami Post" href="https://theumamipost.com/feed.xml">
  

  
  <link rel="icon" type="image/svg+xml" href="/assets/favicon.svg">
  <link rel="icon" type="image/png" sizes="32x32"   href="/assets/favicon-32.png">
  <link rel="icon" type="image/png" sizes="16x16"   href="/assets/favicon-16.png">
  <link rel="icon" type="image/png" sizes="192x192" href="/assets/favicon-192.png">
  <link rel="icon" type="image/png" sizes="512x512" href="/assets/favicon-512.png">
  <link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png">
  <link rel="manifest" href="/manifest.json">
  <meta name="theme-color" content="#FAF6EF" media="(prefers-color-scheme: light)">
  <meta name="theme-color" content="#1A1410" media="(prefers-color-scheme: dark)">

  
  <link rel="dns-prefetch" href="https://fonts.bunny.net">
  <link rel="preconnect" href="https://fonts.bunny.net" crossorigin>

  
  <link rel="preload" href="https://fonts.bunny.net/inter/files/inter-latin-400-normal.woff2" as="font" type="font/woff2" crossorigin>
  <link rel="preload" href="https://fonts.bunny.net/source-serif-4/files/source-serif-4-latin-400-normal.woff2" as="font" type="font/woff2" crossorigin>
  <link rel="preload" href="https://fonts.bunny.net/playfair-display/files/playfair-display-latin-700-normal.woff2" as="font" type="font/woff2" crossorigin>

  
  <link rel="preload" href="https://fonts.bunny.net/css?family=playfair-display:ital,wght@0,700;0,900;1,700&amp;family=source-serif-4:ital,wght@0,400;0,600;1,400&amp;family=inter:wght@400;500;600&amp;display=swap" as="style" crossorigin onload="this.onload=null;this.rel='stylesheet'">
  <noscript><link rel="stylesheet" href="https://fonts.bunny.net/css?family=playfair-display:ital,wght@0,700;0,900;1,700&amp;family=source-serif-4:ital,wght@0,400;0,600;1,400&amp;family=inter:wght@400;500;600&amp;display=swap" crossorigin></noscript>

  
  <style>:root{--color-bg:#FAF6EF;--color-bg-alt:#F2EBDE;--color-bg-inset:#EADFCB;--color-ink:#2B1F18;--color-ink-muted:#4A382C;--color-ink-faint:#6A5240;--color-rule:#D8CBB6;--color-rule-heavy:#8A7858;--color-accent:#D4793A;--color-accent-hover:#B66024;--color-link:#6B7340;--color-link-hover:#525830;--color-selection:#D4793A;--color-selection-ink:#FAF6EF;--font-masthead:'Playfair Display',Georgia,serif;--font-headline:'Playfair Display',Georgia,serif;--font-body:'Source Serif 4',Georgia,serif;--font-ui:'Inter',system-ui,sans-serif}[data-theme="dark"]{--color-bg:#1A1410;--color-bg-alt:#231B16;--color-bg-inset:#2C231C;--color-ink:#F2E9D8;--color-ink-muted:#C9BCA4;--color-ink-faint:#A99980;--color-rule:#3A2E25;--color-rule-heavy:#5A4838;--color-accent:#E89456;--color-accent-hover:#F0A86E;--color-link:#9AA565;--color-link-hover:#B5C081}@media(prefers-color-scheme:dark){:root:not([data-theme="light"]){--color-bg:#1A1410;--color-bg-alt:#231B16;--color-bg-inset:#2C231C;--color-ink:#F2E9D8;--color-ink-muted:#C9BCA4;--color-ink-faint:#A99980;--color-rule:#3A2E25;--color-rule-heavy:#5A4838;--color-accent:#E89456;--color-accent-hover:#F0A86E;--color-link:#9AA565;--color-link-hover:#B5C081}}*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}html{color-scheme:light dark}body{background:var(--color-bg);color:var(--color-ink);font-family:var(--font-body)}.site-wrapper{min-height:100vh;display:flex;flex-direction:column}</style>

  
  <link rel="stylesheet" href="/assets/css/main.css?v=1778703104659">

  

  
  
  <script type="application/ld+json">
  {
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    "itemListElement": [
      { "@type": "ListItem", "position": 1, "name": "Home", "item": "https://theumamipost.com/" },
      { "@type": "ListItem", "position": 2, "name": "API", "item": "https://theumamipost.com/api/" }
    ]
  }
  </script>
  

  
  <script>window.__PREFIX='umami';window.__repo={owner:"jonajinga",name:"the-umami-post",branch:"main"};</script>

  
  <script>(function(){'use strict';var STORAGE_KEY=(window.__PREFIX||'umami')+'-theme';var root=document.documentElement;function getSystemTheme(){return window.matchMedia('(prefers-color-scheme: dark)').matches?'dark':'light';}function getStoredTheme(){try{return localStorage.getItem(STORAGE_KEY);}catch{return null;}}function applyTheme(theme){root.setAttribute('data-theme',theme);root.classList.add('js-enabled');}applyTheme(getStoredTheme()||getSystemTheme());try{var bg=localStorage.getItem((window.__PREFIX||'umami')+'-gs-bg');if(bg&&bg!=='default')root.setAttribute('data-gs-bg',bg);var gsFont=localStorage.getItem((window.__PREFIX||'umami')+'-gs-font');if(gsFont&&gsFont!=='default'){root.setAttribute('data-gs-font',gsFont);var wf={inter:'inter:wght@400;600;700',merriweather:'merriweather:wght@400;700',roboto:'roboto:wght@400;700',opensans:'open-sans:wght@400;600;700',baskerville:'libre-baskerville:wght@400;700',crimson:'crimson-pro:wght@400;600;700',ibmplex:'ibm-plex-serif:wght@400;600;700',literata:'literata:wght@400;600;700',atkinson:'atkinson-hyperlegible:wght@400;700'};if(wf[gsFont]){var l=document.createElement('link');l.rel='stylesheet';l.href='https://fonts.bunny.net/css?family='+wf[gsFont]+'&display=swap';document.head.appendChild(l);}}var gsFontSize=localStorage.getItem((window.__PREFIX||'umami')+'-gs-font-size');if(gsFontSize&&parseInt(gsFontSize)>0)root.style.fontSize=gsFontSize+'px';var gsSpacing=localStorage.getItem((window.__PREFIX||'umami')+'-gs-spacing');if(gsSpacing&&gsSpacing!=='normal'){var map={tight:'1.3',relaxed:'1.8'};if(map[gsSpacing])root.style.lineHeight=map[gsSpacing];}var gsWordspace=localStorage.getItem((window.__PREFIX||'umami')+'-gs-wordspace');if(gsWordspace&&gsWordspace!=='normal'){var wsMap={wide:'0.12em',wider:'0.25em'};if(wsMap[gsWordspace])root.style.wordSpacing=wsMap[gsWordspace];}}catch(e){}document.addEventListener('DOMContentLoaded',function(){var btn=document.getElementById('theme-toggle');if(!btn)return;function updateButton(theme){btn.setAttribute('aria-label',theme==='dark'?'Switch to light mode':'Switch to dark mode');}updateButton(root.getAttribute('data-theme'));btn.addEventListener('click',function(){var current=root.getAttribute('data-theme');var next=current==='dark'?'light':'dark';applyTheme(next);try{localStorage.setItem(STORAGE_KEY,next);}catch{}updateButton(next);});window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change',function(e){if(!getStoredTheme()){var theme=e.matches?'dark':'light';applyTheme(theme);updateButton(theme);}});});})();</script>

  
  

  
</head>

<body data-page-url="/api/">
  <a href="#main-content" class="skip-link">Skip to main content</a>
  <div class="site-wrapper">

    

    
    

    
    ﻿<header class="masthead" role="banner" data-pagefind-ignore>
  <div class="container">

    
    <div class="masthead__nameplate">
      <div class="masthead__lead">
        <button
          class="nav-drawer-toggle js-only"
          id="nav-drawer-toggle"
          aria-label="Open navigation menu"
          aria-expanded="false"
          aria-controls="nav-drawer"
          type="button"
          onclick="var d=document.getElementById('nav-drawer');d.classList.add('is-open');d.setAttribute('aria-hidden','false');this.setAttribute('aria-expanded','true');document.getElementById('nav-drawer-close').focus();">
          <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
            <line x1="3" y1="6" x2="21" y2="6"/>
            <line x1="3" y1="12" x2="21" y2="12"/>
            <line x1="3" y1="18" x2="21" y2="18"/>
          </svg>
        </button>

        
        
      </div>
      <a href="/" class="masthead__title notranslate" aria-label="The Umami Post, Home" data-rough-skip-underline>
        The Umami Post
      </a>
      <button
        class="masthead__search-mobile"
        type="button"
        aria-label="Search"
        title="Search"
        onclick="var m=document.getElementById('search-modal'),o=document.getElementById('search-overlay');if(m){m.classList.add('is-open');m.setAttribute('aria-hidden','false');o&&o.classList.add('is-open');document.body.style.overflow='hidden';var i=document.getElementById('search-input');i&&i.focus();}">
        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
      </button>
      <div class="masthead__actions">

        
        <button
          class="masthead__icon-btn js-only"
          id="search-open"
          aria-label="Search"
          aria-expanded="false"
          aria-controls="search-modal"
          type="button"
          title="Search"
          onclick="var m=document.getElementById('search-modal'),o=document.getElementById('search-overlay');if(m){m.classList.add('is-open');m.setAttribute('aria-hidden','false');o&&o.classList.add('is-open');document.body.style.overflow='hidden';var i=document.getElementById('search-input');i&&i.focus();}">
          <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
            <circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/>
          </svg>
        </button>

        
        <a href="/reader-tools/"
           class="masthead__icon-btn"
           aria-label="Reader tools"
           title="Reader tools">
          <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
            <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/>
            <polyline points="14 2 14 8 20 8"/>
            <line x1="16" y1="13" x2="8" y2="13"/>
            <line x1="16" y1="17" x2="8" y2="17"/>
          </svg>
        </a>

        
        <div class="masthead__settings-wrap" style="position:relative;">
          <button
            class="masthead__icon-btn js-only"
            id="global-settings-btn"
            type="button"
            aria-label="Display settings"
            title="Display settings"
            onclick="var p=document.getElementById('global-settings-panel');if(p)p.classList.toggle('is-open');">
            <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
              <line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/>
              <line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/>
              <line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/>
              <line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/>
            </svg>
          </button>
        </div>


      </div>
    </div>

    
    <div id="global-settings-panel" class="gs-panel" role="dialog" aria-labelledby="gs-panel-title" aria-hidden="true">

      <header class="gs-panel__header">
        <div>
          <p class="gs-panel__kicker">Display</p>
          <h2 class="gs-panel__title" id="gs-panel-title">Reading settings</h2>
        </div>
        <button type="button" class="gs-panel__close" aria-label="Close display settings" onclick="this.closest('.gs-panel').classList.remove('is-open');">
          <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>
        </button>
      </header>

      
      <div class="gs-preview" aria-hidden="true">
        <p class="gs-preview__label">Preview</p>
        <p class="gs-preview__sample">&ldquo;First we eat, then we do everything else.&rdquo;</p>
        <p class="gs-preview__attrib">&mdash; M.F.K. Fisher</p>
      </div>

      
      <section class="gs-section">
        <h3 class="gs-section__title">Quick profiles</h3>
        <div class="gs-profiles" role="group" aria-label="Preset reading profiles">
          <button class="gs-profile-btn" data-gs-profile="default" type="button">
            <span class="gs-profile-btn__title">Default</span>
            <span class="gs-profile-btn__desc">Source Serif</span>
          </button>
          <button class="gs-profile-btn" data-gs-profile="comfort" type="button">
            <span class="gs-profile-btn__title">Comfort</span>
            <span class="gs-profile-btn__desc">Lora, sepia, relaxed</span>
          </button>
          <button class="gs-profile-btn" data-gs-profile="low-vision" type="button">
            <span class="gs-profile-btn__title">Low-vision</span>
            <span class="gs-profile-btn__desc">Atkinson Hyperlegible</span>
          </button>
          <button class="gs-profile-btn" data-gs-profile="night" type="button">
            <span class="gs-profile-btn__title">Night</span>
            <span class="gs-profile-btn__desc">Dark, wide spacing</span>
          </button>
        </div>
      </section>

      
      <section class="gs-section">
        <h3 class="gs-section__title">Type</h3>

        <div class="gs-row">
          <label class="gs-row__label" for="gs-font-select">Typeface</label>
          <select id="gs-font-select" class="gs-select">
            <optgroup label="Site fonts">
              <option value="default">Source Serif (default)</option>
              <option value="sans">DM Sans</option>
              <option value="lora">Lora</option>
              <option value="playfair">Playfair Display</option>
            </optgroup>
            <optgroup label="Serif">
              <option value="georgia">Georgia</option>
              <option value="palatino">Palatino</option>
              <option value="times">Times New Roman</option>
              <option value="garamond">Garamond</option>
              <option value="bookman">Bookman Old Style</option>
            </optgroup>
            <optgroup label="Sans-serif">
              <option value="system">System default</option>
              <option value="arial">Arial / Helvetica</option>
              <option value="verdana">Verdana</option>
              <option value="trebuchet">Trebuchet MS</option>
              <option value="tahoma">Tahoma</option>
              <option value="century">Century Gothic</option>
            </optgroup>
            <optgroup label="Monospace">
              <option value="mono">SF Mono / Consolas</option>
              <option value="courier">Courier New</option>
              <option value="lucida">Lucida Console</option>
            </optgroup>
            <optgroup label="Web fonts (loaded on demand)">
              <option value="inter">Inter</option>
              <option value="merriweather">Merriweather</option>
              <option value="roboto">Roboto</option>
              <option value="opensans">Open Sans</option>
              <option value="baskerville">Libre Baskerville</option>
              <option value="crimson">Crimson Pro</option>
              <option value="ibmplex">IBM Plex Serif</option>
              <option value="literata">Literata</option>
              <option value="atkinson">Atkinson Hyperlegible</option>
            </optgroup>
          </select>
        </div>

        <div class="gs-row">
          <p class="gs-row__label">Line spacing</p>
          <div class="gs-row__control gs-seg" role="group" aria-label="Line spacing">
            <button class="gs-seg__btn" data-gs-spacing="tight" type="button">Tight</button>
            <button class="gs-seg__btn is-active" data-gs-spacing="normal" type="button">Normal</button>
            <button class="gs-seg__btn" data-gs-spacing="relaxed" type="button">Relaxed</button>
          </div>
        </div>

        <div class="gs-row">
          <p class="gs-row__label">Word spacing</p>
          <div class="gs-row__control gs-seg" role="group" aria-label="Word spacing">
            <button class="gs-seg__btn is-active" data-gs-wordspace="normal" type="button">Normal</button>
            <button class="gs-seg__btn" data-gs-wordspace="wide" type="button">Wide</button>
            <button class="gs-seg__btn" data-gs-wordspace="wider" type="button">Wider</button>
          </div>
        </div>
      </section>

      
      <section class="gs-section">
        <h3 class="gs-section__title">Theme</h3>
        <div class="gs-themes" role="group" id="gs-theme-group" aria-label="Color theme">
          <button class="gs-theme-btn is-active" data-gs-theme="auto" type="button" aria-label="Auto (follow system)">
            <span class="gs-theme-btn__swatch gs-theme-btn__swatch--auto" aria-hidden="true"></span>
            <span class="gs-theme-btn__label">Auto</span>
          </button>
          <button class="gs-theme-btn" data-gs-theme="light" type="button">
            <span class="gs-theme-btn__swatch gs-theme-btn__swatch--light" aria-hidden="true"></span>
            <span class="gs-theme-btn__label">Light</span>
          </button>
          <button class="gs-theme-btn" data-gs-theme="sepia" type="button">
            <span class="gs-theme-btn__swatch gs-theme-btn__swatch--sepia" aria-hidden="true"></span>
            <span class="gs-theme-btn__label">Sepia</span>
          </button>
          <button class="gs-theme-btn" data-gs-theme="cream" type="button">
            <span class="gs-theme-btn__swatch gs-theme-btn__swatch--cream" aria-hidden="true"></span>
            <span class="gs-theme-btn__label">Cream</span>
          </button>
          <button class="gs-theme-btn" data-gs-theme="dark" type="button">
            <span class="gs-theme-btn__swatch gs-theme-btn__swatch--dark" aria-hidden="true"></span>
            <span class="gs-theme-btn__label">Dark</span>
          </button>
        </div>
      </section>

      
      <section class="gs-section gs-article-only">
        <h3 class="gs-section__title">Article tools</h3>

        <div class="gs-row">
          <p class="gs-row__label">Reading ruler</p>
          <div class="gs-row__control gs-seg" role="group" aria-label="Reading ruler">
            <button class="gs-seg__btn is-active" data-gs-ruler="off" type="button">Off</button>
            <button class="gs-seg__btn" data-gs-ruler="on" type="button">On</button>
          </div>
        </div>
        <div class="gs-row gs-ruler-opts" hidden>
          <label class="gs-row__label" for="gs-ruler-color">Ruler color</label>
          <select id="gs-ruler-color" class="gs-select">
            <option value="accent">Accent</option>
            <option value="red">Red</option>
            <option value="blue">Blue</option>
            <option value="green">Green</option>
            <option value="yellow">Amber</option>
            <option value="black">Black</option>
          </select>
        </div>
        <div class="gs-row gs-ruler-opts" hidden>
          <p class="gs-row__label">Ruler style</p>
          <div class="gs-row__control gs-seg" role="group" aria-label="Ruler style">
            <button class="gs-seg__btn is-active" data-gs-ruler-style="solid" type="button">Solid</button>
            <button class="gs-seg__btn" data-gs-ruler-style="dashed" type="button">Dashed</button>
            <button class="gs-seg__btn" data-gs-ruler-style="dotted" type="button">Dotted</button>
            <button class="gs-seg__btn" data-gs-ruler-style="glow" type="button">Glow</button>
          </div>
        </div>

        <div class="gs-row">
          <p class="gs-row__label">Paragraph numbers</p>
          <div class="gs-row__control gs-seg" role="group" aria-label="Paragraph numbers">
            <button class="gs-seg__btn is-active" data-gs-paranums="off" type="button">Off</button>
            <button class="gs-seg__btn" data-gs-paranums="on" type="button">On</button>
          </div>
        </div>

        <div class="gs-row gs-desktop-only">
          <p class="gs-row__label">Auto-scroll</p>
          <div class="gs-row__control gs-seg" role="group" aria-label="Auto-scroll">
            <button class="gs-seg__btn is-active" data-gs-autoscroll="off" type="button">Off</button>
            <button class="gs-seg__btn" data-gs-autoscroll="on" type="button">On</button>
          </div>
        </div>
        <div class="gs-row gs-desktop-only gs-autoscroll-opts" hidden>
          <label class="gs-row__label" for="gs-autoscroll-speed">Scroll speed</label>
          <div class="gs-row__control gs-size">
            <span class="gs-size__min" aria-hidden="true">&minus;</span>
            <input type="range" class="gs-size__slider" id="gs-autoscroll-speed" min="1" max="10" step="1" value="3" aria-label="Auto-scroll speed">
            <span class="gs-size__max" aria-hidden="true">+</span>
          </div>
        </div>
      </section>

      
      
      <section class="gs-section">
        <h3 class="gs-section__title">Language</h3>
        <div class="gs-row">
          <div class="gs-row__control">
            <div class="gtranslate_wrapper"></div>
          </div>
        </div>
      </section>
      

      
      <footer class="gs-panel__footer">
        <button type="button" class="gs-reset" onclick="if(window.__resetGlobalSettings)window.__resetGlobalSettings();">
          <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="1 4 1 10 7 10"/><path d="M3.51 15a9 9 0 1 0 2.13-9.36L1 10"/></svg>
          Reset to defaults
        </button>
        <p class="gs-panel__save-note">Your settings are saved automatically and persist across sessions on this device.</p>
      </footer>

    </div>

    
    <nav class="site-nav" aria-label="Main navigation">
      <div class="site-nav__inner">
        <ul class="site-nav__list" role="list">
          
          
          
          <li class="site-nav__item site-nav__item--has-dropdown">
            <a
              class="site-nav__link"
              href="/recipes/"
              id="nav-recipes" aria-haspopup="true" aria-expanded="false"
              >
              Recipes
            </a>
          </li>
          
          
          
          <li class="site-nav__item site-nav__item--has-dropdown">
            <a
              class="site-nav__link"
              href="/techniques/"
              id="nav-techniques" aria-haspopup="true" aria-expanded="false"
              >
              Techniques
            </a>
          </li>
          
          
          
          <li class="site-nav__item site-nav__item--has-dropdown">
            <a
              class="site-nav__link"
              href="/stories/"
              id="nav-stories" aria-haspopup="true" aria-expanded="false"
              >
              Stories
            </a>
          </li>
          
          
          
          <li class="site-nav__item site-nav__item--has-dropdown">
            <a
              class="site-nav__link"
              href="/reviews/"
              id="nav-reviews" aria-haspopup="true" aria-expanded="false"
              >
              Reviews
            </a>
          </li>
          
          
          
          <li class="site-nav__item site-nav__item--has-dropdown">
            <a
              class="site-nav__link"
              href="/seasonal/"
              id="nav-seasonal" aria-haspopup="true" aria-expanded="false"
              >
              Seasonal
            </a>
          </li>
          
          
          
          <li class="site-nav__item site-nav__item--has-dropdown">
            <a
              class="site-nav__link"
              href="/submit/"
              id="nav-submit" aria-haspopup="true" aria-expanded="false"
              >
              Submit
            </a>
          </li>
          
          
          
          <li class="site-nav__item site-nav__item--has-dropdown">
            <a
              class="site-nav__link"
              href="/more/"
              id="nav-more" aria-haspopup="true" aria-expanded="false"
              >
              Explore
            </a>
          </li>
          
        </ul>
      </div>

      
      
      
      
      
      <div class="nav-dropdown" id="dropdown-recipes" aria-label="Recipes">
        
          
          <div class="nav-mega">
            
            <div class="nav-mega__col">
              <p class="nav-mega__heading">By course</p>
              
              <a href="/recipes/?s=Breakfast" class="nav-mega__link">
                <span class="nav-mega__title">Breakfast</span>
              </a>
              
              <a href="/recipes/?s=Lunch" class="nav-mega__link">
                <span class="nav-mega__title">Lunch</span>
              </a>
              
              <a href="/recipes/?s=Dinner" class="nav-mega__link">
                <span class="nav-mega__title">Dinner</span>
              </a>
              
              <a href="/recipes/?s=Sides" class="nav-mega__link">
                <span class="nav-mega__title">Sides</span>
              </a>
              
              <a href="/recipes/?s=Sauces" class="nav-mega__link">
                <span class="nav-mega__title">Sauces</span>
              </a>
              
              <a href="/recipes/?s=Baking" class="nav-mega__link">
                <span class="nav-mega__title">Baking</span>
              </a>
              
              <a href="/recipes/?s=Drinks" class="nav-mega__link">
                <span class="nav-mega__title">Drinks</span>
              </a>
              
              <a href="/recipes/?s=Dessert" class="nav-mega__link">
                <span class="nav-mega__title">Dessert</span>
              </a>
              
              <a href="/recipes/?s=Snacks" class="nav-mega__link">
                <span class="nav-mega__title">Snacks</span>
              </a>
              
              <a href="/recipes/?s=Preserves" class="nav-mega__link">
                <span class="nav-mega__title">Preserves</span>
              </a>
              
            </div>
            
            <div class="nav-mega__col">
              <p class="nav-mega__heading">By diet</p>
              
              <a href="/recipes/?diet=vegan" class="nav-mega__link">
                <span class="nav-mega__title">Vegan</span>
              </a>
              
              <a href="/recipes/?diet=vegetarian" class="nav-mega__link">
                <span class="nav-mega__title">Vegetarian</span>
              </a>
              
              <a href="/recipes/?diet=gluten-free" class="nav-mega__link">
                <span class="nav-mega__title">Gluten-free</span>
              </a>
              
              <a href="/recipes/?diet=dairy-free" class="nav-mega__link">
                <span class="nav-mega__title">Dairy-free</span>
              </a>
              
              <a href="/recipes/?diet=nut-free" class="nav-mega__link">
                <span class="nav-mega__title">Nut-free</span>
              </a>
              
              <a href="/recipes/?diet=low-carb" class="nav-mega__link">
                <span class="nav-mega__title">Low-carb</span>
              </a>
              
            </div>
            
            <div class="nav-mega__col">
              <p class="nav-mega__heading">Discover</p>
              
              <a href="/seasonal/" class="nav-mega__link">
                <span class="nav-mega__title">Seasonal</span>
              </a>
              
              <a href="/ingredients/" class="nav-mega__link">
                <span class="nav-mega__title">Ingredients</span>
              </a>
              
              <a href="/recipes/" class="nav-mega__link">
                <span class="nav-mega__title">All recipes →</span>
              </a>
              
            </div>
            
          </div>
        
      </div>
      
      
      
      
      
      <div class="nav-dropdown" id="dropdown-techniques" aria-label="Techniques">
        
          
          <div class="nav-mega">
            
            <div class="nav-mega__col">
              <p class="nav-mega__heading">Foundations</p>
              
              <a href="/techniques/?s=Knife%20skills" class="nav-mega__link">
                <span class="nav-mega__title">Knife skills</span>
              </a>
              
              <a href="/techniques/?s=Heat" class="nav-mega__link">
                <span class="nav-mega__title">Heat</span>
              </a>
              
              <a href="/techniques/?s=Doughs%20%26%20batters" class="nav-mega__link">
                <span class="nav-mega__title">Doughs &amp; batters</span>
              </a>
              
              <a href="/techniques/?s=Stocks%20%26%20sauces" class="nav-mega__link">
                <span class="nav-mega__title">Stocks &amp; sauces</span>
              </a>
              
            </div>
            
            <div class="nav-mega__col">
              <p class="nav-mega__heading">Specialty</p>
              
              <a href="/techniques/?s=Fermentation" class="nav-mega__link">
                <span class="nav-mega__title">Fermentation</span>
              </a>
              
              <a href="/techniques/?s=Preservation" class="nav-mega__link">
                <span class="nav-mega__title">Preservation</span>
              </a>
              
              <a href="/techniques/?s=Plating" class="nav-mega__link">
                <span class="nav-mega__title">Plating</span>
              </a>
              
            </div>
            
            <div class="nav-mega__col">
              <p class="nav-mega__heading">Reference</p>
              
              <a href="/glossary/" class="nav-mega__link">
                <span class="nav-mega__title">Cooking glossary</span>
              </a>
              
              <a href="/techniques/" class="nav-mega__link">
                <span class="nav-mega__title">All techniques →</span>
              </a>
              
            </div>
            
          </div>
        
      </div>
      
      
      
      
      
      <div class="nav-dropdown" id="dropdown-stories" aria-label="Stories">
        
          
          <div class="nav-mega">
            
            <div class="nav-mega__col">
              <p class="nav-mega__heading">Reporting</p>
              
              <a href="/news/" class="nav-mega__link">
                <span class="nav-mega__title">News</span>
              </a>
              
              <a href="/opinion/" class="nav-mega__link">
                <span class="nav-mega__title">Opinion</span>
              </a>
              
              <a href="/deep-dives/" class="nav-mega__link">
                <span class="nav-mega__title">Deep Dives</span>
              </a>
              
              <a href="/cooks-letters/" class="nav-mega__link">
                <span class="nav-mega__title">Cook&#39;s Letters</span>
              </a>
              
            </div>
            
            <div class="nav-mega__col">
              <p class="nav-mega__heading">Features</p>
              
              <a href="/food-culture/" class="nav-mega__link">
                <span class="nav-mega__title">Food &amp; Culture</span>
              </a>
              
              <a href="/food-science/" class="nav-mega__link">
                <span class="nav-mega__title">Food Science</span>
              </a>
              
              <a href="/food-history/" class="nav-mega__link">
                <span class="nav-mega__title">Food History</span>
              </a>
              
            </div>
            
            <div class="nav-mega__col">
              <p class="nav-mega__heading">Discover</p>
              
              <a href="/archives/" class="nav-mega__link">
                <span class="nav-mega__title">Archives</span>
              </a>
              
              <a href="/most-read/" class="nav-mega__link">
                <span class="nav-mega__title">Most Read</span>
              </a>
              
              <a href="/stories/" class="nav-mega__link">
                <span class="nav-mega__title">All stories →</span>
              </a>
              
            </div>
            
          </div>
        
      </div>
      
      
      
      
      
      <div class="nav-dropdown" id="dropdown-reviews" aria-label="Reviews">
        
          
          <div class="nav-mega">
            
            <div class="nav-mega__col">
              <p class="nav-mega__heading">Subjects</p>
              
              <a href="/reviews/?s=Cookbooks" class="nav-mega__link">
                <span class="nav-mega__title">Cookbooks</span>
              </a>
              
              <a href="/reviews/?s=Restaurants" class="nav-mega__link">
                <span class="nav-mega__title">Restaurants</span>
              </a>
              
              <a href="/reviews/?s=Equipment" class="nav-mega__link">
                <span class="nav-mega__title">Equipment</span>
              </a>
              
              <a href="/reviews/?s=Pantry" class="nav-mega__link">
                <span class="nav-mega__title">Pantry</span>
              </a>
              
            </div>
            
            <div class="nav-mega__col">
              <p class="nav-mega__heading">Related</p>
              
              <a href="/bookshelf/" class="nav-mega__link">
                <span class="nav-mega__title">Cookbook shelf</span>
              </a>
              
              <a href="/library/" class="nav-mega__link">
                <span class="nav-mega__title">Public-domain cookbooks</span>
              </a>
              
              <a href="/submit/review/" class="nav-mega__link">
                <span class="nav-mega__title">Pitch a review</span>
              </a>
              
              <a href="/reviews/" class="nav-mega__link">
                <span class="nav-mega__title">All reviews →</span>
              </a>
              
            </div>
            
          </div>
        
      </div>
      
      
      
      
      
      <div class="nav-dropdown" id="dropdown-seasonal" aria-label="Seasonal">
        
          
          <div class="nav-mega">
            
            <div class="nav-mega__col">
              <p class="nav-mega__heading">By season</p>
              
              <a href="/seasonal/?s=Spring" class="nav-mega__link">
                <span class="nav-mega__title">Spring</span>
              </a>
              
              <a href="/seasonal/?s=Summer" class="nav-mega__link">
                <span class="nav-mega__title">Summer</span>
              </a>
              
              <a href="/seasonal/?s=Fall" class="nav-mega__link">
                <span class="nav-mega__title">Fall</span>
              </a>
              
              <a href="/seasonal/?s=Winter" class="nav-mega__link">
                <span class="nav-mega__title">Winter</span>
              </a>
              
            </div>
            
            <div class="nav-mega__col">
              <p class="nav-mega__heading">Discover</p>
              
              <a href="/seasonal/" class="nav-mega__link">
                <span class="nav-mega__title">What&#39;s in season now</span>
              </a>
              
              <a href="/ingredients/" class="nav-mega__link">
                <span class="nav-mega__title">Ingredients</span>
              </a>
              
              <a href="/events/" class="nav-mega__link">
                <span class="nav-mega__title">Farmers markets</span>
              </a>
              
            </div>
            
          </div>
        
      </div>
      
      
      
      
      
      <div class="nav-dropdown" id="dropdown-submit" aria-label="Submit">
        
          
          <div class="nav-mega">
            
            <div class="nav-mega__col">
              <p class="nav-mega__heading">Pitch</p>
              
              <a href="/submit/recipe/" class="nav-mega__link">
                <span class="nav-mega__title">A recipe</span>
              </a>
              
              <a href="/submit/story/" class="nav-mega__link">
                <span class="nav-mega__title">A story</span>
              </a>
              
              <a href="/submit/technique/" class="nav-mega__link">
                <span class="nav-mega__title">A technique</span>
              </a>
              
              <a href="/submit/review/" class="nav-mega__link">
                <span class="nav-mega__title">A review</span>
              </a>
              
            </div>
            
            <div class="nav-mega__col">
              <p class="nav-mega__heading">Respond</p>
              
              <a href="/letters/submit/" class="nav-mega__link">
                <span class="nav-mega__title">Cook&#39;s Letter</span>
              </a>
              
              <a href="/corrections/report/" class="nav-mega__link">
                <span class="nav-mega__title">Correction</span>
              </a>
              
              <a href="/events/submit/" class="nav-mega__link">
                <span class="nav-mega__title">Event</span>
              </a>
              
              <a href="/quotes/submit/" class="nav-mega__link">
                <span class="nav-mega__title">Quote</span>
              </a>
              
            </div>
            
            <div class="nav-mega__col">
              <p class="nav-mega__heading">Help</p>
              
              <a href="/volunteer/" class="nav-mega__link">
                <span class="nav-mega__title">Volunteer</span>
              </a>
              
              <a href="/tips/" class="nav-mega__link">
                <span class="nav-mega__title">Tip line</span>
              </a>
              
              <a href="/submit/" class="nav-mega__link">
                <span class="nav-mega__title">All ways to submit →</span>
              </a>
              
            </div>
            
          </div>
        
      </div>
      
      
      
      
      
      <div class="nav-dropdown" id="dropdown-more" aria-label="Explore">
        
          <div class="nav-mega">
            
            <div class="nav-mega__col">
              <p class="nav-mega__heading">Cook</p>
              
              <a href="/recipes/" class="nav-mega__link">
                <span class="nav-mega__title">Recipes</span>
              </a>
              
              <a href="/techniques/" class="nav-mega__link">
                <span class="nav-mega__title">Techniques</span>
              </a>
              
              <a href="/seasonal/" class="nav-mega__link">
                <span class="nav-mega__title">Seasonal</span>
              </a>
              
              <a href="/ingredients/" class="nav-mega__link">
                <span class="nav-mega__title">Ingredients</span>
              </a>
              
              <a href="/glossary/" class="nav-mega__link">
                <span class="nav-mega__title">Cooking Glossary</span>
              </a>
              
            </div>
            
            <div class="nav-mega__col">
              <p class="nav-mega__heading">Stories</p>
              
              <a href="/news/" class="nav-mega__link">
                <span class="nav-mega__title">News</span>
              </a>
              
              <a href="/opinion/" class="nav-mega__link">
                <span class="nav-mega__title">Opinion</span>
              </a>
              
              <a href="/deep-dives/" class="nav-mega__link">
                <span class="nav-mega__title">Deep Dives</span>
              </a>
              
              <a href="/food-culture/" class="nav-mega__link">
                <span class="nav-mega__title">Food &amp; Culture</span>
              </a>
              
              <a href="/food-science/" class="nav-mega__link">
                <span class="nav-mega__title">Food Science</span>
              </a>
              
              <a href="/food-history/" class="nav-mega__link">
                <span class="nav-mega__title">Food History</span>
              </a>
              
            </div>
            
            <div class="nav-mega__col">
              <p class="nav-mega__heading">Reviews</p>
              
              <a href="/reviews/" class="nav-mega__link">
                <span class="nav-mega__title">All Reviews</span>
              </a>
              
              <a href="/reviews/?s=Cookbooks" class="nav-mega__link">
                <span class="nav-mega__title">Cookbooks</span>
              </a>
              
              <a href="/reviews/?s=Restaurants" class="nav-mega__link">
                <span class="nav-mega__title">Restaurants</span>
              </a>
              
              <a href="/reviews/?s=Equipment" class="nav-mega__link">
                <span class="nav-mega__title">Equipment</span>
              </a>
              
              <a href="/reviews/?s=Pantry" class="nav-mega__link">
                <span class="nav-mega__title">Pantry</span>
              </a>
              
              <a href="/bookshelf/" class="nav-mega__link">
                <span class="nav-mega__title">Cookbook Shelf</span>
              </a>
              
            </div>
            
            <div class="nav-mega__col">
              <p class="nav-mega__heading">Library</p>
              
              <a href="/library/" class="nav-mega__link">
                <span class="nav-mega__title">Public-Domain Cookbooks</span>
              </a>
              
              <a href="/bookshelf/" class="nav-mega__link">
                <span class="nav-mega__title">Cookbook Shelf</span>
              </a>
              
              <a href="/quotes/" class="nav-mega__link">
                <span class="nav-mega__title">Quotes</span>
              </a>
              
              <a href="/documents/" class="nav-mega__link">
                <span class="nav-mega__title">Historical Menus</span>
              </a>
              
              <a href="/timeline/" class="nav-mega__link">
                <span class="nav-mega__title">Timeline</span>
              </a>
              
              <a href="/knowledge-map/" class="nav-mega__link">
                <span class="nav-mega__title">Knowledge Map</span>
              </a>
              
            </div>
            
            <div class="nav-mega__col">
              <p class="nav-mega__heading">Reader Tools</p>
              
              <a href="/search/" class="nav-mega__link">
                <span class="nav-mega__title">Search</span>
              </a>
              
              <a href="/reading-list/" class="nav-mega__link">
                <span class="nav-mega__title">Reading List</span>
              </a>
              
              <a href="/notes/" class="nav-mega__link">
                <span class="nav-mega__title">Cook&#39;s Notes</span>
              </a>
              
              <a href="/reading-history/" class="nav-mega__link">
                <span class="nav-mega__title">Reading History</span>
              </a>
              
              <a href="/reading-calendar/" class="nav-mega__link">
                <span class="nav-mega__title">Reading Calendar</span>
              </a>
              
              <a href="/print-basket/" class="nav-mega__link">
                <span class="nav-mega__title">Print Basket</span>
              </a>
              
              <a href="/reader-tools/" class="nav-mega__link">
                <span class="nav-mega__title">All reader tools →</span>
              </a>
              
            </div>
            
            <div class="nav-mega__col">
              <p class="nav-mega__heading">Discover</p>
              
              <a href="/archives/" class="nav-mega__link">
                <span class="nav-mega__title">Archives</span>
              </a>
              
              <a href="/most-read/" class="nav-mega__link">
                <span class="nav-mega__title">Most Read</span>
              </a>
              
              <a href="/random/" class="nav-mega__link">
                <span class="nav-mega__title">Random</span>
              </a>
              
              <a href="/newsletter/" class="nav-mega__link">
                <span class="nav-mega__title">Newsletter</span>
              </a>
              
              <a href="/reader/" class="nav-mega__link">
                <span class="nav-mega__title">RSS Reader</span>
              </a>
              
              <a href="/feeds/" class="nav-mega__link">
                <span class="nav-mega__title">Feeds</span>
              </a>
              
            </div>
            
            <div class="nav-mega__col">
              <p class="nav-mega__heading">Community</p>
              
              <a href="/community/" class="nav-mega__link">
                <span class="nav-mega__title">Cook Directory</span>
              </a>
              
              <a href="/events/" class="nav-mega__link">
                <span class="nav-mega__title">Events</span>
              </a>
              
              <a href="/cooks-letters/" class="nav-mega__link">
                <span class="nav-mega__title">Cook&#39;s Letters</span>
              </a>
              
              <a href="/community-guidelines/" class="nav-mega__link">
                <span class="nav-mega__title">Community Guidelines</span>
              </a>
              
            </div>
            
            <div class="nav-mega__col">
              <p class="nav-mega__heading">Contribute</p>
              
              <a href="/submit/recipe/" class="nav-mega__link">
                <span class="nav-mega__title">Submit a recipe</span>
              </a>
              
              <a href="/submit/story/" class="nav-mega__link">
                <span class="nav-mega__title">Pitch a story</span>
              </a>
              
              <a href="/submit/technique/" class="nav-mega__link">
                <span class="nav-mega__title">Pitch a technique</span>
              </a>
              
              <a href="/submit/review/" class="nav-mega__link">
                <span class="nav-mega__title">Pitch a review</span>
              </a>
              
              <a href="/volunteer/" class="nav-mega__link">
                <span class="nav-mega__title">Volunteer</span>
              </a>
              
              <a href="/tips/" class="nav-mega__link">
                <span class="nav-mega__title">Tips &amp; Letters</span>
              </a>
              
              <a href="/license/" class="nav-mega__link">
                <span class="nav-mega__title">Republish</span>
              </a>
              
            </div>
            
            <div class="nav-mega__col">
              <p class="nav-mega__heading">About</p>
              
              <a href="/about/" class="nav-mega__link">
                <span class="nav-mega__title">About Us</span>
              </a>
              
              <a href="/start-here/" class="nav-mega__link">
                <span class="nav-mega__title">Start Here</span>
              </a>
              
              <a href="/masthead/" class="nav-mega__link">
                <span class="nav-mega__title">Masthead</span>
              </a>
              
              <a href="/contributors/" class="nav-mega__link">
                <span class="nav-mega__title">Contributors</span>
              </a>
              
              <a href="/contact/" class="nav-mega__link">
                <span class="nav-mega__title">Contact</span>
              </a>
              
            </div>
            
            <div class="nav-mega__col">
              <p class="nav-mega__heading">Inside</p>
              
              <a href="/ethics/" class="nav-mega__link">
                <span class="nav-mega__title">Editorial Ethics</span>
              </a>
              
              <a href="/editorial/" class="nav-mega__link">
                <span class="nav-mega__title">Editorial Handbook</span>
              </a>
              
              <a href="/transparency/" class="nav-mega__link">
                <span class="nav-mega__title">Transparency</span>
              </a>
              
              <a href="/costs/" class="nav-mega__link">
                <span class="nav-mega__title">Costs</span>
              </a>
              
              <a href="/changelog/" class="nav-mega__link">
                <span class="nav-mega__title">Changelog</span>
              </a>
              
              <a href="/features/" class="nav-mega__link">
                <span class="nav-mega__title">Features</span>
              </a>
              
            </div>
            
            <div class="nav-mega__col">
              <p class="nav-mega__heading">Build</p>
              
              <a href="/stack/" class="nav-mega__link">
                <span class="nav-mega__title">Tech Stack</span>
              </a>
              
              <a href="/style-guide/" class="nav-mega__link">
                <span class="nav-mega__title">Style Guide</span>
              </a>
              
              <a href="/open-source/" class="nav-mega__link">
                <span class="nav-mega__title">Open Source</span>
              </a>
              
              <a href="/accessibility/" class="nav-mega__link">
                <span class="nav-mega__title">Accessibility</span>
              </a>
              
              <a href="/legal/" class="nav-mega__link">
                <span class="nav-mega__title">Legal</span>
              </a>
              
            </div>
            
          </div>
        
      </div>
      
      
    </nav>

  </div>
</header>


﻿






<div class="quote-bar" id="quote-bar" data-pagefind-ignore>
  <div class="container quote-bar__inner">
    <a class="quote-bar__link" href="/quotes/" title="View quotes collection">
      <span class="quote-bar__text">&ldquo;First we eat, then we do everything else.&rdquo;</span>
      <span class="quote-bar__author">&mdash; M.F.K. Fisher</span>
    </a>
  </div>
</div>


<div class="search-overlay js-only" id="search-overlay" aria-hidden="true" onclick="var m=document.getElementById('search-modal'),o=this;m.classList.remove('is-open');m.setAttribute('aria-hidden','true');o.classList.remove('is-open');document.body.style.overflow='';document.getElementById('search-input').value='';document.getElementById('search-results').innerHTML='';"></div>

<div
  class="search-modal js-only"
  id="search-modal"
  role="dialog"
  aria-label="Search"
  aria-hidden="true"
  aria-modal="true"
  data-rough-skip-frame>

  <div class="search-modal__header">
    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" style="flex-shrink:0;color:var(--color-ink-faint)">
      <circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/>
    </svg>
    <input
      class="search-modal__input"
      id="search-input"
      type="search"
      placeholder="Search articles, topics, authors…"
      autocomplete="off"
      autocorrect="off"
      spellcheck="false"
      aria-label="Search query"
      aria-controls="search-results"
      aria-autocomplete="list">
    <button
      class="search-modal__voice js-only"
      id="voice-search-btn"
      type="button"
      aria-label="Search by voice"
      title="Search by voice"
      hidden>
      <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z"/><path d="M19 10v2a7 7 0 0 1-14 0v-2"/><line x1="12" y1="19" x2="12" y2="23"/><line x1="8" y1="23" x2="16" y2="23"/></svg>
    </button>
    <button
      class="search-modal__close"
      id="search-close"
      type="button"
      aria-label="Close search"
      onclick="var m=document.getElementById('search-modal'),o=document.getElementById('search-overlay');m.classList.remove('is-open');m.setAttribute('aria-hidden','true');o&&o.classList.remove('is-open');document.body.style.overflow='';document.getElementById('search-input').value='';document.getElementById('search-results').innerHTML='';">
      ✕
    </button>
  </div>

  <div class="search-filters" id="search-filters" aria-label="Filter results by section">
    <button class="search-filter-btn is-active" data-filter-section="" type="button">All</button>
    
    <button class="search-filter-btn" data-filter-section="Recipes" type="button">Recipes</button>
    
    <button class="search-filter-btn" data-filter-section="Techniques" type="button">Techniques</button>
    
    <button class="search-filter-btn" data-filter-section="Reviews" type="button">Reviews</button>
    
    <button class="search-filter-btn" data-filter-section="News" type="button">News</button>
    
    <button class="search-filter-btn" data-filter-section="Opinion" type="button">Opinion</button>
    
    <button class="search-filter-btn" data-filter-section="Deep Dives" type="button">Deep Dives</button>
    
    <button class="search-filter-btn" data-filter-section="Food &amp; Culture" type="button">Food &amp; Culture</button>
    
    <button class="search-filter-btn" data-filter-section="Food Science" type="button">Food Science</button>
    
    <button class="search-filter-btn" data-filter-section="Food History" type="button">Food History</button>
    
    <button class="search-filter-btn" data-filter-section="Cook&#39;s Letters" type="button">Cook&#39;s Letters</button>
    
    <button class="search-filter-btn" data-filter-section="Cookbook Shelf" type="button">Cookbook Shelf</button>
    
    <button class="search-filter-btn" data-filter-section="Cooking Glossary" type="button">Cooking Glossary</button>
    
    <button class="search-filter-btn" data-filter-section="Quotes" type="button">Quotes</button>
    <button class="search-filter-btn" data-filter-section="Videos" type="button">Videos</button>
    <button class="search-filter-btn" data-filter-section="Timeline" type="button">Timeline</button>
  </div>

  <div class="search-modal__results" id="search-results" role="listbox" aria-label="Search results">
  </div>

  <div class="search-modal__footer" aria-hidden="true">
    <span><kbd>↑↓</kbd> navigate</span>
    <span><kbd>↵</kbd> open</span>
    <span><kbd>Esc</kbd> close</span>
    <span><kbd>/</kbd> open from anywhere</span>
  </div>

</div>



<nav
  class="nav-drawer js-only"
  id="nav-drawer"
  aria-label="Full site navigation"
  aria-hidden="true">

  <div class="nav-drawer__header">
    <a href="/" class="nav-drawer__brand notranslate" aria-label="The Umami Post, Home">
      <img src="/assets/favicon.svg" alt="" aria-hidden="true" width="32" height="32">
      <span class="nav-drawer__brand-stack">
        <span class="nav-drawer__label">The Umami Post</span>
        <span class="nav-drawer__edition" id="nd-edition" aria-label="Today's date"></span>
      </span>
    </a>
    <button class="nav-drawer__close" id="nav-drawer-close" type="button" aria-label="Close navigation menu" onclick="var d=document.getElementById('nav-drawer');d.classList.remove('is-open');d.setAttribute('aria-hidden','true');document.getElementById('nav-drawer-toggle').setAttribute('aria-expanded','false');">
      <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>
    </button>
  </div>

  <div class="nav-drawer__scroll">

    
    <form class="nav-drawer__search" role="search" action="/search/" method="get" aria-label="Site search">
      <svg class="nav-drawer__search-icon" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
      <label for="nav-drawer-search-input" class="visually-hidden">Search</label>
      <input
        id="nav-drawer-search-input"
        class="nav-drawer__search-input"
        type="search"
        name="q"
        placeholder="Search articles, topics, authors…"
        autocomplete="off"
        autocorrect="off"
        spellcheck="false"
        aria-label="Search query"
        data-rough-skip-frame>
      <button type="submit" class="nav-drawer__search-submit" aria-label="Submit search">
        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
          <line x1="5" y1="12" x2="19" y2="12"/>
          <polyline points="13 6 19 12 13 18"/>
        </svg>
      </button>
    </form>

    
    <div class="nav-drawer__quick" role="group" aria-label="Quick actions">
      <a href="/random/" class="nav-drawer__quick-btn" data-rough="frame" data-rough-color="ink">
        <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="16 3 21 3 21 8"/><line x1="4" y1="20" x2="21" y2="3"/><polyline points="21 16 21 21 16 21"/><line x1="15" y1="15" x2="21" y2="21"/></svg>
        <span>Surprise me</span>
      </a>
      <a href="/reader-tools/" class="nav-drawer__quick-btn" id="nd-readertools-link" data-rough="frame" data-rough-color="ink">
        <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/></svg>
        <span>Reader tools</span>
        <span class="nav-drawer__quick-badge" id="nd-readinglist-count" hidden></span>
      </a>
      <button type="button" class="nav-drawer__quick-btn" aria-label="Display settings" data-rough="frame" data-rough-color="ink"
        onclick="var d=document.getElementById('nav-drawer'),t=document.getElementById('nav-drawer-toggle');if(d){d.classList.remove('is-open');d.setAttribute('aria-hidden','true');}if(t)t.setAttribute('aria-expanded','false');setTimeout(function(){var p=document.getElementById('global-settings-panel');if(p)p.classList.add('is-open');},150);">
        <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></svg>
        <span>Display</span>
      </button>
    </div>

    
    <p class="nav-drawer__section-label">Sections</p>
    <ul class="nav-drawer__sections" role="list">
      
      
      
      <li>
        <a class="nav-drawer__section-tile" href="/recipes/" data-rough="frame" data-rough-color="accent" data-tippy-content="Tested recipes from our kitchen and yours.">
          <span class="nav-drawer__section-name">Recipes</span>
        </a>
      </li>
      
      
      
      
      <li>
        <a class="nav-drawer__section-tile" href="/techniques/" data-rough="frame" data-rough-color="accent" data-tippy-content="How to do the things that make cooking work.">
          <span class="nav-drawer__section-name">Techniques</span>
        </a>
      </li>
      
      
      
      
      
      
      <li>
        <a class="nav-drawer__section-tile" href="/reviews/" data-rough="frame" data-rough-color="accent" data-tippy-content="Cookbooks, restaurants, equipment, and pantry staples assessed honestly.">
          <span class="nav-drawer__section-name">Reviews</span>
        </a>
      </li>
      
      
      
      
      
      
      
      
    </ul>

    
    
    <p class="nav-drawer__section-label">Latest stories</p>
    <ul class="nav-drawer__latest" role="list">
      
      <li>
        <a class="nav-drawer__latest-row" href="/recipes/brown-butter-cornmeal-cake/">
          <span class="nav-drawer__latest-meta">
            <span class="nav-drawer__latest-kicker">recipes</span>
            <time datetime="2026-05-12">May 12, 2026</time>
          </span>
          <span class="nav-drawer__latest-title">Brown-Butter Cornmeal Cake</span>
        </a>
      </li>
      
      <li>
        <a class="nav-drawer__latest-row" href="/recipes/lentil-coconut-soup/">
          <span class="nav-drawer__latest-meta">
            <span class="nav-drawer__latest-kicker">recipes</span>
            <time datetime="2026-05-09">May 9, 2026</time>
          </span>
          <span class="nav-drawer__latest-title">Red Lentil and Coconut Soup with Crispy Shallots</span>
        </a>
      </li>
      
      <li>
        <a class="nav-drawer__latest-row" href="/news/seed-libraries-saved-cornmeal/">
          <span class="nav-drawer__latest-meta">
            <span class="nav-drawer__latest-kicker">News</span>
            <time datetime="2026-05-08">May 8, 2026</time>
          </span>
          <span class="nav-drawer__latest-title">How a Seed Library Saved a Variety of Cornmeal No One Else Was Growing</span>
        </a>
      </li>
      
      <li>
        <a class="nav-drawer__latest-row" href="/techniques/how-to-brown-butter/">
          <span class="nav-drawer__latest-meta">
            <span class="nav-drawer__latest-kicker">techniques</span>
            <time datetime="2026-05-05">May 5, 2026</time>
          </span>
          <span class="nav-drawer__latest-title">How to Brown Butter</span>
        </a>
      </li>
      
      <li>
        <a class="nav-drawer__latest-row" href="/reviews/misen-carbon-steel/">
          <span class="nav-drawer__latest-meta">
            <span class="nav-drawer__latest-kicker">reviews</span>
            <time datetime="2026-05-02">May 2, 2026</time>
          </span>
          <span class="nav-drawer__latest-title">Misen 10-inch Carbon Steel: A Three-Year Verdict</span>
        </a>
      </li>
      
    </ul>
    

    
    
    <div class="nav-drawer__divider"></div>
    
    <p class="nav-drawer__section-label">Cook</p>
    
    <ul class="nav-drawer__list nav-drawer__list--cols" role="list">
      
      <li><a class="nav-drawer__link" href="/recipes/">Recipes</a></li>
      
      <li><a class="nav-drawer__link" href="/techniques/">Techniques</a></li>
      
      <li><a class="nav-drawer__link" href="/seasonal/">Seasonal</a></li>
      
      <li><a class="nav-drawer__link" href="/ingredients/">Ingredients</a></li>
      
      <li><a class="nav-drawer__link" href="/glossary/">Cooking Glossary</a></li>
      
    </ul>
    
    
    <div class="nav-drawer__divider"></div>
    
    <p class="nav-drawer__section-label">Stories</p>
    
    <ul class="nav-drawer__list nav-drawer__list--cols" role="list">
      
      <li><a class="nav-drawer__link" href="/news/">News</a></li>
      
      <li><a class="nav-drawer__link" href="/opinion/">Opinion</a></li>
      
      <li><a class="nav-drawer__link" href="/deep-dives/">Deep Dives</a></li>
      
      <li><a class="nav-drawer__link" href="/food-culture/">Food &amp; Culture</a></li>
      
      <li><a class="nav-drawer__link" href="/food-science/">Food Science</a></li>
      
      <li><a class="nav-drawer__link" href="/food-history/">Food History</a></li>
      
    </ul>
    
    
    <div class="nav-drawer__divider"></div>
    
    <p class="nav-drawer__section-label">Reviews</p>
    
    <ul class="nav-drawer__list nav-drawer__list--cols" role="list">
      
      <li><a class="nav-drawer__link" href="/reviews/">All Reviews</a></li>
      
      <li><a class="nav-drawer__link" href="/bookshelf/">Cookbook Shelf</a></li>
      
    </ul>
    
    
    <div class="nav-drawer__divider"></div>
    
    <p class="nav-drawer__section-label">Library</p>
    
    <ul class="nav-drawer__list nav-drawer__list--cols" role="list">
      
      <li><a class="nav-drawer__link" href="/library/">Public-Domain Cookbooks</a></li>
      
      <li><a class="nav-drawer__link" href="/bookshelf/">Cookbook Shelf</a></li>
      
      <li><a class="nav-drawer__link" href="/quotes/">Quotes</a></li>
      
      <li><a class="nav-drawer__link" href="/documents/">Historical Menus</a></li>
      
      <li><a class="nav-drawer__link" href="/timeline/">Timeline</a></li>
      
      <li><a class="nav-drawer__link" href="/knowledge-map/">Knowledge Map</a></li>
      
    </ul>
    
    
    <div class="nav-drawer__divider"></div>
    
    <p class="nav-drawer__section-label">Reader Tools</p>
    
    <ul class="nav-drawer__list nav-drawer__list--cols" role="list">
      
      <li><a class="nav-drawer__link" href="/search/">Search</a></li>
      
      <li><a class="nav-drawer__link" href="/reading-list/">Reading List</a></li>
      
      <li><a class="nav-drawer__link" href="/notes/">Cook&#39;s Notes</a></li>
      
      <li><a class="nav-drawer__link" href="/reading-history/">Reading History</a></li>
      
      <li><a class="nav-drawer__link" href="/reading-calendar/">Reading Calendar</a></li>
      
      <li><a class="nav-drawer__link" href="/print-basket/">Print Basket</a></li>
      
      <li><a class="nav-drawer__link" href="/reader-tools/">All reader tools →</a></li>
      
    </ul>
    
    
    <div class="nav-drawer__divider"></div>
    
    <p class="nav-drawer__section-label">Discover</p>
    
    <ul class="nav-drawer__list nav-drawer__list--cols" role="list">
      
      <li><a class="nav-drawer__link" href="/archives/">Archives</a></li>
      
      <li><a class="nav-drawer__link" href="/most-read/">Most Read</a></li>
      
      <li><a class="nav-drawer__link" href="/random/">Random</a></li>
      
      <li><a class="nav-drawer__link" href="/newsletter/">Newsletter</a></li>
      
      <li><a class="nav-drawer__link" href="/reader/">RSS Reader</a></li>
      
      <li><a class="nav-drawer__link" href="/feeds/">Feeds</a></li>
      
    </ul>
    
    
    <div class="nav-drawer__divider"></div>
    
    <p class="nav-drawer__section-label">Community</p>
    
    <ul class="nav-drawer__list nav-drawer__list--cols" role="list">
      
      <li><a class="nav-drawer__link" href="/community/">Cook Directory</a></li>
      
      <li><a class="nav-drawer__link" href="/events/">Events</a></li>
      
      <li><a class="nav-drawer__link" href="/cooks-letters/">Cook&#39;s Letters</a></li>
      
      <li><a class="nav-drawer__link" href="/community-guidelines/">Community Guidelines</a></li>
      
    </ul>
    
    
    <div class="nav-drawer__divider"></div>
    
    <p class="nav-drawer__section-label">Contribute</p>
    
    <ul class="nav-drawer__list nav-drawer__list--cols" role="list">
      
      <li><a class="nav-drawer__link" href="/submit/recipe/">Submit a recipe</a></li>
      
      <li><a class="nav-drawer__link" href="/submit/story/">Pitch a story</a></li>
      
      <li><a class="nav-drawer__link" href="/submit/technique/">Pitch a technique</a></li>
      
      <li><a class="nav-drawer__link" href="/submit/review/">Pitch a review</a></li>
      
      <li><a class="nav-drawer__link" href="/volunteer/">Volunteer</a></li>
      
      <li><a class="nav-drawer__link" href="/tips/">Tips &amp; Letters</a></li>
      
      <li><a class="nav-drawer__link" href="/license/">Republish</a></li>
      
    </ul>
    
    
    <div class="nav-drawer__divider"></div>
    
    <p class="nav-drawer__section-label">About</p>
    
    <ul class="nav-drawer__list nav-drawer__list--cols" role="list">
      
      <li><a class="nav-drawer__link" href="/about/">About Us</a></li>
      
      <li><a class="nav-drawer__link" href="/start-here/">Start Here</a></li>
      
      <li><a class="nav-drawer__link" href="/masthead/">Masthead</a></li>
      
      <li><a class="nav-drawer__link" href="/contributors/">Contributors</a></li>
      
      <li><a class="nav-drawer__link" href="/contact/">Contact</a></li>
      
    </ul>
    
    <div class="nav-drawer__support">
      <a class="tip-badge" href="/support/"
         aria-label="Support The Umami Post">Support The Umami Post</a>
    </div>
    
    
    <div class="nav-drawer__divider"></div>
    
    <p class="nav-drawer__section-label">Inside</p>
    
    <ul class="nav-drawer__list nav-drawer__list--cols" role="list">
      
      <li><a class="nav-drawer__link" href="/ethics/">Editorial Ethics</a></li>
      
      <li><a class="nav-drawer__link" href="/editorial/">Editorial Handbook</a></li>
      
      <li><a class="nav-drawer__link" href="/transparency/">Transparency</a></li>
      
      <li><a class="nav-drawer__link" href="/costs/">Costs</a></li>
      
      <li><a class="nav-drawer__link" href="/changelog/">Changelog</a></li>
      
      <li><a class="nav-drawer__link" href="/features/">Features</a></li>
      
    </ul>
    
    
    <div class="nav-drawer__divider"></div>
    
    <p class="nav-drawer__section-label">Build</p>
    
    <ul class="nav-drawer__list nav-drawer__list--cols" role="list">
      
      <li><a class="nav-drawer__link" href="/stack/">Tech Stack</a></li>
      
      <li><a class="nav-drawer__link" href="/style-guide/">Style Guide</a></li>
      
      <li><a class="nav-drawer__link" href="/open-source/">Open Source</a></li>
      
      <li><a class="nav-drawer__link" href="/accessibility/">Accessibility</a></li>
      
      <li><a class="nav-drawer__link" href="/legal/">Legal</a></li>
      
    </ul>
    
    

  </div>

  
  <div class="nav-drawer__footer">
    <div class="nav-drawer__shortcuts" aria-label="Keyboard shortcuts">
      <span class="nav-drawer__shortcut"><kbd>/</kbd> Search</span>
      <span class="nav-drawer__shortcut"><kbd>g</kbd> <kbd>h</kbd> Home</span>
      <span class="nav-drawer__shortcut"><kbd>Esc</kbd> Close</span>
    </div>
    <p class="nav-drawer__footer-byline">
      A community food publication.
    </p>
    <div class="nav-drawer__footer-meta">
      <span>&copy; 2026 The Umami Post</span>
    </div>
  </div>

</nav>

<script>
(function () {
  // Edition kicker — render today's date in newspaper format
  var ed = document.getElementById('nd-edition');
  if (ed) {
    try {
      var fmt = new Intl.DateTimeFormat(document.documentElement.lang || 'en', {
        weekday: 'long', month: 'long', day: 'numeric', year: 'numeric'
      });
      ed.textContent = fmt.format(new Date());
    } catch (e) {}
  }

  // Reading-list + notes badges
  var PREFIX = window.__PREFIX || 'umami';
  function readArr(key) {
    try { var v = JSON.parse(localStorage.getItem(key)); return Array.isArray(v) ? v : []; } catch (e) { return []; }
  }
  function setBadge(id, n) {
    var el = document.getElementById(id);
    if (!el) return;
    if (n > 0) { el.textContent = n > 99 ? '99+' : String(n); el.hidden = false; }
    else { el.hidden = true; }
  }
  setBadge('nd-readinglist-count', readArr(PREFIX + '-reading-list').length);
  setBadge('nd-notes-count',       readArr(PREFIX + '-annotations').length);

})();
</script>


    
    <nav class="breadcrumbs-bar" aria-label="Breadcrumb">
  <ol class="breadcrumbs-bar__list container"><li class="breadcrumbs-bar__item"><a class="breadcrumbs-bar__link" href="/">Home</a></li><li class="breadcrumbs-bar__item breadcrumbs-bar__item--current"><span aria-current="page">API</span></li></ol>
</nav>

    
    <main id="main-content" class="site-main">
      
<div class="container" style="padding-top: var(--space-10); padding-bottom: var(--space-20);">
  <div class="container--prose">

    <header style="margin-bottom: var(--space-8); padding-bottom: var(--space-6); border-bottom: 3px solid var(--color-ink);">
      <h1 style="font-family: var(--font-masthead); font-size: clamp(1.8rem, 5vw, 3.815rem); margin-bottom: var(--space-4);">Public API</h1>
      <p style="font-size: var(--text-lg); color: var(--color-ink-muted); font-style: italic; max-width: 55ch;">
        Every piece of content on this site is also available as JSON. Use it for integrations, mirrors, research, or to build something new.
      </p>
    </header>

    <div class="article-body">

      <h2>Endpoints</h2>

      <p>All endpoints are static JSON files regenerated on every build. No authentication required. CORS is enabled for client-side use.</p>

      <table style="width:100%;font-size:var(--text-sm);border-collapse:collapse;margin:var(--space-6) 0;">
        <thead>
          <tr style="border-bottom:2px solid var(--color-ink);text-align:left;">
            <th style="padding:var(--space-2);">Endpoint</th>
            <th style="padding:var(--space-2);">Returns</th>
          </tr>
        </thead>
        <tbody>
          <tr style="border-bottom:1px solid var(--color-rule);"><td style="padding:var(--space-2);"><a href="/api/articles.json"><code>/api/articles.json</code></a></td><td style="padding:var(--space-2);">All published articles with metadata</td></tr>
          <tr style="border-bottom:1px solid var(--color-rule);"><td style="padding:var(--space-2);"><a href="/api/sections.json"><code>/api/sections.json</code></a></td><td style="padding:var(--space-2);">Editorial sections with descriptions and article counts</td></tr>
          <tr style="border-bottom:1px solid var(--color-rule);"><td style="padding:var(--space-2);"><a href="/api/authors.json"><code>/api/authors.json</code></a></td><td style="padding:var(--space-2);">All authors with their bylines and article counts</td></tr>
          <tr style="border-bottom:1px solid var(--color-rule);"><td style="padding:var(--space-2);"><a href="/api/quotes.json"><code>/api/quotes.json</code></a></td><td style="padding:var(--space-2);">All quotes with author, source, era, and tags</td></tr>
          <tr style="border-bottom:1px solid var(--color-rule);"><td style="padding:var(--space-2);"><a href="/api/timeline.json"><code>/api/timeline.json</code></a></td><td style="padding:var(--space-2);">Historical timeline entries</td></tr>
          <tr style="border-bottom:1px solid var(--color-rule);"><td style="padding:var(--space-2);"><a href="/api/glossary.json"><code>/api/glossary.json</code></a></td><td style="padding:var(--space-2);">All glossary terms with definitions</td></tr>
          <tr style="border-bottom:1px solid var(--color-rule);"><td style="padding:var(--space-2);"><a href="/api/bookshelf.json"><code>/api/bookshelf.json</code></a></td><td style="padding:var(--space-2);">Recommended reading entries</td></tr>
          <tr style="border-bottom:1px solid var(--color-rule);"><td style="padding:var(--space-2);"><a href="/api/events.json"><code>/api/events.json</code></a></td><td style="padding:var(--space-2);">Upcoming and past events</td></tr>
          <tr style="border-bottom:1px solid var(--color-rule);"><td style="padding:var(--space-2);"><a href="/api/videos.json"><code>/api/videos.json</code></a></td><td style="padding:var(--space-2);">Video library entries</td></tr>
          <tr style="border-bottom:1px solid var(--color-rule);"><td style="padding:var(--space-2);"><a href="/api/songs.json"><code>/api/songs.json</code></a></td><td style="padding:var(--space-2);">Food Music song collection</td></tr>
          <tr style="border-bottom:1px solid var(--color-rule);"><td style="padding:var(--space-2);"><a href="/api/trials.json"><code>/api/trials.json</code></a></td><td style="padding:var(--space-2);">Trials of Thought entries</td></tr>
          <tr style="border-bottom:1px solid var(--color-rule);"><td style="padding:var(--space-2);"><a href="/api/thought-experiments.json"><code>/api/thought-experiments.json</code></a></td><td style="padding:var(--space-2);">Thought experiments</td></tr>
          <tr><td style="padding:var(--space-2);"><a href="/api/manifest.json"><code>/api/manifest.json</code></a></td><td style="padding:var(--space-2);">Index of all endpoints with metadata</td></tr>
        </tbody>
      </table>

      <h2>Example: Fetching recent articles</h2>

      <pre style="background:var(--color-bg-alt);padding:var(--space-4);border:1px solid var(--color-rule);overflow-x:auto;font-size:var(--text-sm);"><code>fetch('https://theumamipost.com/api/articles.json')
  .then(r =&gt; r.json())
  .then(data =&gt; {
    console.log(`${data.count} articles`);
    data.articles.slice(0, 5).forEach(a =&gt; {
      console.log(`${a.title}, ${a.section}`);
    });
  });</code></pre>

      <h2>Data format</h2>

      <p>Each endpoint returns a JSON object with:</p>
      <ul>
        <li><code>generated</code>, ISO 8601 timestamp of the build</li>
        <li><code>count</code>, total items in the response</li>
        <li><code>[collection_name]</code>, array of items (e.g. <code>articles</code>, <code>quotes</code>, <code>events</code>)</li>
      </ul>

      <h2>Usage terms</h2>

      <p>The API is free to use for any purpose, commercial or non-commercial, with the following conditions:</p>
      <ul>
        <li>Content remains the property of its authors (editorial articles) or the public domain (library texts)</li>
        <li>Attribution is appreciated but not required</li>
        <li>Please be considerate with request volume, these are static files on a CDN, but high-frequency polling should use the RSS feed instead</li>
        <li>Let us know what you build, we'd love to see it</li>
      </ul>

      <h2>Feeds and sitemaps</h2>

      <ul>
        <li><a href="/feed.xml"><code>/feed.xml</code></a>, RSS feed of recent articles</li>
        <li><a href="/sitemap.xml"><code>/sitemap.xml</code></a>, XML sitemap of all pages</li>
        <li><a href="/news-sitemap.xml"><code>/news-sitemap.xml</code></a>, Google News sitemap</li>
      </ul>

    </div>
  </div>
</div>

    </main>

    
    
    <div class="sitewide-disclosures">
      



<div id="funding-panel" class="funding funding--panel" data-article-disclosure hidden aria-labelledby="funding-heading">
  <div class="funding__body">
    <p class="funding__kicker">No ads. No sponsors. No paywalls.</p>
    <h2 id="funding-heading" class="funding__heading">Funded entirely by readers</h2>
    <p class="funding__lede">
      The Umami Post runs on direct reader contributions and the unpaid time of its contributors, not advertising or platform deals. Reader tips go either to the publication&rsquo;s operating costs (hosting, public-records fees, the occasional travel for reporting) or, when sent through an author&rsquo;s individual link, directly to that writer. We take no money from advertisers, sponsors, partner networks, or syndication platforms.
    </p>

    <ul class="funding__bullets">
      <li><strong>What publication-level support pays for:</strong> hosting and infrastructure, public-records and FOIA fees, archival and software costs, and the occasional reporting expense. Itemised on the <a href="/costs/">costs page</a>.</li>
      <li><strong>How contributors are compensated:</strong> The Umami Post does not currently pay contributors a fee or salary. Writers publish here because they want their work read; reader tips through a writer&rsquo;s individual link are the only compensation they receive for a piece.</li>
      <li><strong>What this funding model doesn&rsquo;t include:</strong> ads, sponsorships, native content, tracking pixels, paywalls, or syndication-network fees. There are none, and editorial decisions are not influenced by individual reader contributions.</li>
    </ul>

    <div class="funding__actions">
      
      
      <a class="funding__action funding__action--ghost" href="/support/" data-umami-event="support-learn">
        Read the full disclosure &rsaquo;
      </a>
    </div>
  </div>
</div>

      
    </div>
    

    
    <footer class="site-footer" role="contentinfo" data-pagefind-ignore>
  <div class="container">

    
    <div class="site-footer__masthead">
      <div class="site-footer__brand-block">
        <a href="/" class="site-footer__brand-link">
          <img src="/assets/favicon.svg" alt="" aria-hidden="true" width="32" height="32">
          <span class="site-footer__brand-name notranslate">The Umami Post</span>
        </a>
        <p class="site-footer__byline">
          Founded 2026. A community food publication.
        </p>

        
        <ul class="site-footer__social" aria-label="Follow us">
          
          <li><a data-rough="frame" data-rough-color="ink" href="/feeds/" aria-label="RSS feeds — whole site, sections, authors, topics" title="RSS feeds — whole site, sections, authors, topics" data-umami-event="rss-sub" data-umami-event-feed="discovery">
            <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 11a9 9 0 0 1 9 9"/><path d="M4 4a16 16 0 0 1 16 16"/><circle cx="5" cy="19" r="1"/></svg>
          </a></li>
          
          
          
          
          
          <li><a data-rough="frame" data-rough-color="ink" href="/newsletter/" aria-label="Email newsletter" title="Email newsletter" data-umami-event="newsletter-cta">
            <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z"/></svg>
          </a></li>
          <li><a data-rough="frame" data-rough-color="ink" href="/contact/" aria-label="Contact the editors" title="Contact the editors">
            <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"/><polyline points="22,6 12,13 2,6"/></svg>
          </a></li>
          <li><a data-rough="frame" data-rough-color="ink" href="/tips/" aria-label="Anonymous tip line" title="Anonymous tip line">
            <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>
          </a></li>
          <li><a data-rough="frame" data-rough-color="ink" href="/feedback/" aria-label="Send site feedback" title="Send site feedback">
            <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>
          </a></li>
          <li><a data-rough="frame" data-rough-color="ink" href="/corrections/report/" aria-label="Report a correction" title="Report a correction">
            <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 9v2m0 4h.01M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/></svg>
          </a></li>
          <li><a data-rough="frame" data-rough-color="ink" href="/license/" aria-label="Republication license (CC BY-NC-ND 4.0)" title="Republication license (CC BY-NC-ND 4.0)" rel="license" data-umami-event="license-learn">
            <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="10"/><path d="M9.5 9a3 3 0 0 1 5.5 1.7c0 2-3 2-3 4"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>
          </a></li>
        </ul>

        <div class="site-footer__tip">
          <a class="tip-badge" href="/support/"
             aria-label="How The Umami Post is funded"
             data-umami-event="footer-support">Support The Umami Post</a>
        </div>
      </div>

      <div class="site-footer__newsletter">
        <p class="site-footer__heading">Newsletter</p>
        <p class="site-footer__newsletter-blurb">One email, occasionally. No tracking, no selling your address, one-click unsubscribe.</p>
        
        ﻿





<div class="subscribe-block--footer" aria-label="Subscribe">
  <h3 class="subscribe-block__heading">Subscribe to our newsletter</h3>
  <p class="subscribe-block__body">New recipes and stories, one at a time.</p>
  <form class="subscribe-form" data-action="https://buttondown.com/api/emails/embed-subscribe/theumamipost" novalidate>
    <label for="subscribe-email-footer" class="visually-hidden">Your email address</label>
    <input
      class="subscribe-form__input"
      id="subscribe-email-footer"
      type="email"
      name="email"
      placeholder="your@email.com"
      autocomplete="email"
      required>
    <button class="subscribe-form__btn" type="submit">Subscribe</button>
  </form>
  <div class="subscribe-status" role="alert" aria-live="polite"></div>
</div>



      </div>
    </div>

    
    <div class="site-footer__grid">

      
      <div class="site-footer__col">
        <p class="site-footer__heading">
          <a href="/archives/">Sections</a>
        </p>
        <ul class="site-footer__nav">
          
          
          <li><a href="/recipes/">Recipes</a></li>
          
          
          
          <li><a href="/techniques/">Techniques</a></li>
          
          
          
          
          
          <li><a href="/reviews/">Reviews</a></li>
          
          
          
          
          
          
          
          
        </ul>
      </div>

      
      
      <div class="site-footer__col">
        <p class="site-footer__heading">
          <a href="/recipes/">Cook</a>
        </p>
        <ul class="site-footer__nav">
          
          <li><a href="/recipes/">Recipes</a></li>
          
          <li><a href="/techniques/">Techniques</a></li>
          
          <li><a href="/seasonal/">Seasonal</a></li>
          
          <li><a href="/ingredients/">Ingredients</a></li>
          
          <li><a href="/glossary/">Cooking Glossary</a></li>
          
          
        </ul>
      </div>
      
      <div class="site-footer__col">
        <p class="site-footer__heading">
          <a href="/stories/">Stories</a>
        </p>
        <ul class="site-footer__nav">
          
          <li><a href="/news/">News</a></li>
          
          <li><a href="/opinion/">Opinion</a></li>
          
          <li><a href="/deep-dives/">Deep Dives</a></li>
          
          <li><a href="/food-culture/">Food &amp; Culture</a></li>
          
          <li><a href="/food-science/">Food Science</a></li>
          
          <li><a href="/food-history/">Food History</a></li>
          
          
        </ul>
      </div>
      
      <div class="site-footer__col">
        <p class="site-footer__heading">
          <a href="/library/">Library</a>
        </p>
        <ul class="site-footer__nav">
          
          <li><a href="/library/">Public-Domain Cookbooks</a></li>
          
          <li><a href="/bookshelf/">Cookbook Shelf</a></li>
          
          <li><a href="/quotes/">Quotes</a></li>
          
          <li><a href="/documents/">Historical Menus</a></li>
          
          <li><a href="/timeline/">Timeline</a></li>
          
          <li><a href="/knowledge-map/">Knowledge Map</a></li>
          
          
        </ul>
      </div>
      
      <div class="site-footer__col">
        <p class="site-footer__heading">
          <a href="/reader-tools/">Reader Tools</a>
        </p>
        <ul class="site-footer__nav">
          
          <li><a href="/search/">Search</a></li>
          
          <li><a href="/reading-list/">Reading List</a></li>
          
          <li><a href="/notes/">Cook&#39;s Notes</a></li>
          
          <li><a href="/reading-history/">Reading History</a></li>
          
          <li><a href="/reading-calendar/">Reading Calendar</a></li>
          
          <li><a href="/print-basket/">Print Basket</a></li>
          
          <li><a href="/reader-tools/">All reader tools →</a></li>
          
          
        </ul>
      </div>
      
      <div class="site-footer__col">
        <p class="site-footer__heading">
          <a href="/community/">Community</a>
        </p>
        <ul class="site-footer__nav">
          
          <li><a href="/community/">Cook Directory</a></li>
          
          <li><a href="/events/">Events</a></li>
          
          <li><a href="/cooks-letters/">Cook&#39;s Letters</a></li>
          
          <li><a href="/community-guidelines/">Community Guidelines</a></li>
          
          
        </ul>
      </div>
      
      <div class="site-footer__col">
        <p class="site-footer__heading">
          <a href="/contribute/">Contribute</a>
        </p>
        <ul class="site-footer__nav">
          
          <li><a href="/submit/recipe/">Submit a recipe</a></li>
          
          <li><a href="/submit/story/">Pitch a story</a></li>
          
          <li><a href="/submit/technique/">Pitch a technique</a></li>
          
          <li><a href="/submit/review/">Pitch a review</a></li>
          
          <li><a href="/volunteer/">Volunteer</a></li>
          
          <li><a href="/tips/">Tips &amp; Letters</a></li>
          
          <li><a href="/license/">Republish</a></li>
          
          
        </ul>
      </div>
      
      <div class="site-footer__col">
        <p class="site-footer__heading">
          <a href="/about/">About</a>
        </p>
        <ul class="site-footer__nav">
          
          <li><a href="/about/">About Us</a></li>
          
          <li><a href="/start-here/">Start Here</a></li>
          
          <li><a href="/masthead/">Masthead</a></li>
          
          <li><a href="/contributors/">Contributors</a></li>
          
          <li><a href="/contact/">Contact</a></li>
          
          
        </ul>
      </div>
      
      <div class="site-footer__col">
        <p class="site-footer__heading">
          <a href="/transparency/">Inside</a>
        </p>
        <ul class="site-footer__nav">
          
          <li><a href="/ethics/">Editorial Ethics</a></li>
          
          <li><a href="/editorial/">Editorial Handbook</a></li>
          
          <li><a href="/transparency/">Transparency</a></li>
          
          <li><a href="/costs/">Costs</a></li>
          
          <li><a href="/changelog/">Changelog</a></li>
          
          <li><a href="/features/">Features</a></li>
          
          <li><a href="/stack/">Tech Stack</a></li>
          
          <li><a href="/style-guide/">Style Guide</a></li>
          
          <li><a href="/open-source/">Open Source</a></li>
          
          <li><a href="/accessibility/">Accessibility</a></li>
          
          <li><a href="/legal/">Legal</a></li>
          
          
        </ul>
      </div>
      

    </div>

    
    <div class="site-footer__bottom">
      <p class="site-footer__copyright">
        &copy; 2026 The Umami Post. Articles licensed under
        <a href="/license/" rel="license">CC&nbsp;BY-NC-ND&nbsp;4.0</a>.
      </p>
    </div>

  </div>
</footer>


    <script>
      // Inline disclosures — toggle hidden + scroll the panel into
      // view in the same page. Mutual exclusion across all panels on
      // the page so opening one closes the rest.
      window.toggleArticleDisclosure = function (btn) {
        var id = btn.getAttribute('aria-controls');
        if (!id) return;
        var panel = document.getElementById(id);
        if (!panel) return;
        var willOpen = panel.hasAttribute('hidden');
        document.querySelectorAll('[data-article-disclosure]').forEach(function (p) {
          if (!p.hasAttribute('hidden')) p.setAttribute('hidden', '');
          var t = document.querySelector('[aria-controls="' + p.id + '"][aria-expanded="true"]');
          if (t) t.setAttribute('aria-expanded', 'false');
        });
        if (willOpen) {
          panel.removeAttribute('hidden');
          btn.setAttribute('aria-expanded', 'true');
          // Inline panels (funding / author-support) live in document
          // flow — scroll them into view. Fullscreen modal variants
          // (e.g. .republish--modal) are position:fixed and don't
          // need scrolling — they already cover the viewport.
          var isFixedModal = panel.classList.contains('republish--modal');
          if (!isFixedModal) {
            var rect = panel.getBoundingClientRect();
            var top = rect.top + window.scrollY - 80;
            window.scrollTo({ top: top, behavior: 'smooth' });
          }
          if (typeof panel.focus === 'function') {
            panel.setAttribute('tabindex', '-1');
            try { panel.focus({ preventScroll: true }); } catch (e) {}
          }
        }
      };
    </script>

  </div>

  
  
  
  
  <div class="reading-floats" id="reading-floats">
    <span class="reading-pct" id="reading-pct"></span>
    <button class="back-to-top" id="back-to-top" type="button" aria-label="Back to top">
      <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
        <line x1="12" y1="20" x2="12" y2="4"/>
        <polyline points="5 11 12 4 19 11"/>
      </svg>
    </button>
  </div>
  

  
  <script src="/assets/js/drawer.js?v=1778703104659" defer></script>
  <script src="/assets/js/progress.js?v=1778703104659" defer></script>
  <script src="/assets/js/paragraph-anchors.js?v=1778703104659" defer></script>
  <script src="/assets/js/pdf-viewer.js?v=1778703104659" defer></script>
  <script src="/assets/js/smart-header.js?v=1778703104659" defer></script>
  <script src="/assets/js/search.js?v=1778703104659" defer></script>
  <script src="/assets/js/subscribe.js?v=1778703104659" defer></script>
  <script src="/assets/js/global-settings.js?v=1778703104659" defer></script>
  <script src="/assets/js/spa-nav.js?v=1778703104659" defer></script>
  
  <script src="/assets/js/notes-page.js?v=1778703104659" defer></script>
  
  

  
  <script>
  window.__glossaryTerms=[{ term:"Al dente", def:"Italian for &#39;to the tooth.&#39; Pasta (and sometimes vegetables) cooked just past raw but with a firm bite remaining at the center. Drained at this stage so the residual heat and any sauce can finish the cook without going mushy.", url:"/glossary/al-dente/" },{ term:"Bain-marie", def:"A hot-water bath. A container of food set inside a larger container of hot water, so heat reaches the food gently and indirectly. Used for custards, terrines, melting chocolate, and keeping sauces warm without breaking them.", url:"/glossary/bain-marie/" },{ term:"Blanch", def:"Plunge into rapidly boiling salted water for a brief moment (often 30 seconds to 2 minutes), then drop into ice water to halt cooking. Used to set color in green vegetables, loosen tomato skins, and parcook firm vegetables before a saute.", url:"/glossary/blanch/" },{ term:"Braise", def:"Sear a piece of meat to build crust, then cook it slowly in a covered pot with a small amount of liquid (just enough to come up the sides, not cover) at low heat for hours. Tough cuts (chuck, shoulder, shank) become tender; collagen melts to gelatin.", url:"/glossary/braise/" },{ term:"Brunoise", def:"A very fine dice -- about 1/8 inch (3 mm) on a side. The reference cube of classical French knife work; harder than it looks. Smaller than small dice, larger than mince.", url:"/glossary/brunoise/" },{ term:"Caramelization", def:"The browning of pure sugars under heat (about 320F / 160C and up). Different chemistry from the Maillard reaction. The reason onions slowly cooked low and slow go sweet and amber.", url:"/glossary/caramelization/" },{ term:"Chiffonade", def:"A knife cut: stack leafy herbs or greens (basil, mint, sorrel), roll them like a cigar, and slice across to produce thin ribbons. Used for finishing rather than cooking; preserves color and aroma.", url:"/glossary/chiffonade/" },{ term:"Deglaze", def:"Add liquid (wine, stock, water, vinegar) to a hot pan after searing, then scrape up the browned bits stuck to the bottom. Those bits -- the fond -- are concentrated flavor; deglazing dissolves them into the start of a pan sauce.", url:"/glossary/deglaze/" },{ term:"Emulsify", def:"Bind two ingredients that normally separate (oil and water are the canonical pair) into a single stable mixture. Mayonnaise, vinaigrette, hollandaise, and a finished pan sauce are all emulsions. The trick is usually a third ingredient -- mustard, egg yolk, lecithin -- and slow, steady mixing.", url:"/glossary/emulsify/" },{ term:"Fold", def:"A mixing technique: cut a spatula through the batter, lift, and turn -- repeatedly, gently. Used when one component is light (whipped cream, beaten egg whites) and would deflate under stirring.", url:"/glossary/fold/" },{ term:"Fond", def:"The browned bits stuck to a hot pan after searing meat or sweating aromatics. Pure concentrated flavor. The foundation of pan sauces -- see deglaze. From the French for &#39;base.&#39;", url:"/glossary/fond/" },{ term:"Knead", def:"Work a dough by pressing, folding, and stretching to develop gluten -- the protein network that gives bread its chew and structure. Done by hand or by stand mixer.", url:"/glossary/knead/" },{ term:"Maillard reaction", def:"The chemical browning that happens when amino acids and reducing sugars meet heat above roughly 280F / 140C. The reason a seared steak, a crusty bread, and toasted coffee all smell like dinner. Not the same as caramelization, which is sugars browning alone.", url:"/glossary/maillard-reaction/" },{ term:"Mise en place", def:"French for &#39;everything in its place.&#39; A cook&#39;s pre-cook ritual: prep every ingredient (chop, measure, peel, mince) and lay it out in bowls before turning on a single burner. The discipline that lets a fast saute go right.", url:"/glossary/mise-en-place/" },{ term:"Proof", def:"(1) Let a yeasted dough rise in a warm place until it has roughly doubled and a finger-poke leaves a slow-springing indent. (2) Dissolve dry yeast in warm sweetened water to confirm it is alive before adding it to a dough.", url:"/glossary/proof/" },{ term:"Reduce", def:"Simmer a liquid uncovered to evaporate water and concentrate flavor. Reducing a cup of stock to a quarter cup intensifies it fourfold; reducing wine evaporates the alcohol while leaving the fruit.", url:"/glossary/reduce/" },{ term:"Score", def:"Cut shallow slashes in the surface of a dough, fish, or roast before cooking. On bread, it controls expansion; on fish, it lets fat render; on a roast, it lets seasoning penetrate.", url:"/glossary/score/" },{ term:"Sear", def:"Cook the surface of a piece of meat or fish over very high dry heat until a deep brown crust forms. Does not &#39;lock in juices&#39; (a myth) but does build serious Maillard flavor and texture. Pat the surface bone-dry before searing; wet surfaces steam instead of brown.", url:"/glossary/sear/" },{ term:"Season", def:"Two meanings. (1) Add salt, pepper, and aromatics throughout the cook to develop flavor (not just at the end). (2) Build a non-stick polymer layer on cast iron or carbon steel by repeatedly heating thin coats of oil until they bond to the metal.", url:"/glossary/season/" },{ term:"Simmer", def:"Cook in liquid just below the boil -- small bubbles break the surface lazily, never a rolling boil. Heat moves through the food gently. The default for stocks, beans, stews, and most braises after the initial sear.", url:"/glossary/simmer/" },{ term:"Sweat", def:"Cook aromatics (onion, garlic, celery, leek) gently in fat over low heat, with salt, until soft and translucent -- without color. The opposite of browning; the goal is to draw out water and concentrate flavor without Maillard.", url:"/glossary/sweat/" },{ term:"Temper", def:"(1) Gradually warm a cold ingredient (often eggs) into a hot one to prevent scrambling -- whisk a ladle of hot liquid into the cold first, then stream the warmed mixture back into the hot. (2) Bring chocolate to a controlled crystal state by precise heating and cooling so it sets glossy and snappy.", url:"/glossary/temper/" },{ term:"Umami", def:"The fifth taste, identified by Kikunae Ikeda in 1908 -- savory depth, distinct from sweet, salty, sour, and bitter. The lingering richness in a long-simmered stock, a cured anchovy, a ripe tomato, parmesan, soy sauce, mushrooms, miso. The taste this publication is named for.", url:"/glossary/umami/" }];
  </script>
  <script src="/assets/js/popper.min.js?v=1778703104659" defer></script>
  <script src="/assets/js/tippy.min.js?v=1778703104659" defer></script>
  <script src="/assets/js/tippy-rough.js?v=1778703104659" defer></script>
  <script src="/assets/js/glossary-tips.js?v=1778703104659" defer></script>
  <script src="/assets/js/author-bio-tippy.js?v=1778703104659" defer></script>
  <script src="/assets/js/badge-tips.js?v=1778703104659" defer></script>
  <script src="/assets/js/footer-tips.js?v=1778703104659" defer></script>

  
  
  <script src="/assets/js/revision-history.js?v=1778703104659" defer></script>
  

  
  <script src="/assets/js/reader-panel-migrate.js?v=1778703104659" defer></script>

  
  <script src="/assets/js/footnotes.js?v=1778703104659" defer></script>
  <script src="/assets/js/cite-inline.js?v=1778703104659" defer></script>

  
  <script src="/assets/js/keyboard-shortcuts.js?v=1778703104659" defer></script>

  
  <script src="/assets/js/reading-progress.js?v=1778703104659" defer></script>

  
  <script src="/assets/js/read-state.js?v=1778703104659" defer></script>

  
  <script src="/assets/js/like-btn.js?v=1778703104659" defer></script>

  
  <script src="/assets/js/pdf-basket.js?v=1778703104659" defer></script>

  
  

  
  <script>
  (function(){
    var eb=document.getElementById('data-export-btn');
    var ib=document.getElementById('data-import-btn');
    if(eb)eb.addEventListener('click',function(){
      var d={};for(var i=0;i<localStorage.length;i++){var k=localStorage.key(i);if(k)d[k]=localStorage.getItem(k);}
      var b=new Blob([JSON.stringify(d,null,2)],{type:'application/json'});
      var u=URL.createObjectURL(b);var a=document.createElement('a');
      a.href=u;a.download='umami-backup.json';a.click();URL.revokeObjectURL(u);
    });
    if(ib)ib.addEventListener('click',function(){
      var i=document.createElement('input');i.type='file';i.accept='.json';
      i.onchange=function(){var r=new FileReader();r.onload=function(){
        try{var d=JSON.parse(r.result);Object.keys(d).forEach(function(k){localStorage.setItem(k,d[k]);});
        alert('Imported '+Object.keys(d).length+' items.');}catch(e){alert('Invalid file.');}
      };r.readAsText(i.files[0]);};i.click();
    });
  })();
  </script>

  
  <script>
    if ('serviceWorker' in navigator) {
      window.addEventListener('load', function () {
        navigator.serviceWorker.register('/sw.js');
      });
    }
  </script>

  
  
  <script>
    window.gtranslateSettings = {
      "default_language": "en",
      "languages": ["en","af","sq","am","ar","hy","az","eu","be","bn","bs","bg","ca","ceb","zh-CN","zh-TW","co","hr","cs","da","nl","eo","et","fi","fr","fy","gl","ka","de","el","gu","ht","ha","haw","he","hi","hmn","hu","is","ig","id","ga","it","ja","jv","kn","kk","km","rw","ko","ku","ky","lo","la","lv","lt","lb","mk","mg","ms","ml","mt","mi","mr","mn","my","ne","no","ny","or","ps","fa","pl","pt","pa","ro","ru","sm","gd","sr","st","sn","sd","si","sk","sl","so","es","su","sw","sv","tl","tg","ta","tt","te","th","tr","tk","uk","ur","ug","uz","vi","cy","xh","yi","yo","zu"],
      "wrapper_selector": ".gtranslate_wrapper",
      "flag_size": 20,
      "flag_style": "3d",
      "alt_flags": { "en": "usa" }
    };
  </script>
  <script src="https://cdn.gtranslate.net/widgets/latest/dropdown.js" defer></script>
  

  
  

  
  <script src="/assets/js/rough-decorations.js?v=1778703104659" defer></script>

  
  <script src="/assets/js/form-decorations.js?v=1778703104659" defer></script>

  
  <script src="/assets/js/instant.page.js?v=1778703104659" type="module"></script>
<!-- Cloudflare Pages Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "10021fc67c9d4f6ba7d03cb6167b8108"}'></script><!-- Cloudflare Pages Analytics --></body>
</html>
