Juicer
English

Configuration

site.toml keys juicercafe reads, per-page frontmatter for menus / events / albums, and the [juicercafe] palette table.

juicercafe reads its configuration from three places:

  • A small set of top-level site keys (the same ones every juicer theme uses, plus a few café-specific ones for hours / visit info).
  • A namespaced [juicercafe] table for theme-specific palette + sizing overrides.
  • Per-page frontmatter for menus, events, photo albums, and the “working on it” page.

Quick example

A minimal site.toml that produces a credible café page:

title    = "Magpie & Pearl"
tagline  = "Coffee, pastry, books — Lawrence Park."
author   = "Magpie & Pearl"
baseURL  = "https://example.com"
theme    = "juicercafe"

[visit]
address = "240 King St E"
city    = "Lawrence Park"
state   = "ON"
zip     = "M4S 1A1"
mapURL  = "https://maps.example.com/magpie"

[[hours]]
day  = "Mon"
open = "07:00"
close = "16:00"

[[hours]]
day  = "Tue"
open = "07:00"
close = "16:00"

# ... (Wed–Fri similar)# ... (Wed–Fri similar)

[[hours]]
day    = "Sat"
open   = "08:00"
close  = "17:00"

[[hours]]
day    = "Sun"
closed = true

[juicercafe]
brand     = "#9c3022"   # brick red# brick red
fontSerif = "'Source Serif 4', Georgia, serif"

A typical menu section page (content/menu/coffee.md):

---
title: Coffee
layout: menu-section
weight: 10
items:
  - { name: "Pour-over", price: "5.00", description: "Single-origin, brewed to order." }
  - { name: "Espresso", price: "3.50", description: "Double shot, in a small cup." }
  - { name: "Cortado", price: "4.50" }
---

A typical event page (content/events/picnic-may.md):

---
title: Spring Picnic
date: 2025-05-15T12:00:00
eventTime: "noon–4pm"
eventLocation: "Lawrence Park bandshell"
summary: Annual neighborhood picnic. Bring a side.
---

The full event writeup goes here.

Top-level keys

Standard juicer keys plus a few café-specific ones.

KeyTypeDefaultNotes
titleStringrequiredBrand text in topbar + footer; <title> element.
taglineStringunsetItalic subtitle next to the brand in the topbar; appended to <title> when the page title equals the site title.
authorStringunsetFooter copyright. Falls back to title.
baseURLStringrequiredStandard juicer key.
themeStringrequiredSet to "juicercafe".
faviconStringunsetPath to a favicon.
hideJuicerCreditBooleanfalseSet true to remove the “Built with juicer” line in the footer.
customCSS[String]unsetSite stylesheets loaded after the theme CSS. See Theming → Layer 2.
visitObjectunset{address, city, state, zip, mapURL} — the place’s physical address, surfaced in the footer on every page.
hoursArrayunsetDay-of-week hours: [[hours]] rows of {day, open?, close?, closed?, note?}. Drives the topbar “Open now” badge and the footer hours block.

Hours-row shape

Each [[hours]] row describes one day of the week:

FieldTypeNotes
dayStringMon, Tue, …, Sun. Used both for display and for the “Open now” computation.
openString"HH:MM" 24-hour. Required when not closed.
closeString"HH:MM" 24-hour. Required when not closed.
closedBooleanWhen true, the day shows as “closed” and the hours fields are ignored.
noteStringOptional small note, e.g. "holiday hours", "breakfast only".

Palette + token overrides — [juicercafe]

All optional. Anything you don’t set keeps the warm-paper / brick-red defaults. The full mapping (which token drives which CSS variable) is documented in Theming — juicercafe follows the same pattern as the other themes.

KeyCSS variableNotes
brand--brandPrimary brand accent — link hover, “Open now” pill, active topbar entries.
brandStrong--brand-strongHover-emphasis on brand-coloured elements.
brandSoft--brand-softSubtle paper-tinted backgrounds.
accent--accentWarm secondary — used sparingly on CTAs.
leaf--leaf“Open now” green; success states.
brandDarkdark counterpartsOne per light token.
fontSans--font-sansBody / UI / nav face.
fontSerif--font-serifHeadings, brand.
fontMono--font-monoPrices on menu pages.
measure--measureProse column max-width. Default 38rem.
gutter--gutterOuter padding around content blocks.
radiusLg--radius-lgLarge border-radius (cards, hero images).

Per-page frontmatter

The menu has a two-level structure: a [layout: menu] page on /menu/_index.md and one [layout: menu-section] page per menu section (/menu/coffee.md, /menu/pastry.md, …). Each menu-section page lists its items inline.

KeyTypeWhat
layoutStringmenu for the menu landing; menu-section for each section.
titleStringSection heading on the menu page.
weightIntSort order of the section within the full menu. Lower first.
items[Object]Items in this section. Each {name, price, description?, vegan?, gf?}.

Event pages

Event pages live in the eventsSection (default events).

KeyTypeWhat
dateISO stringRequired for an event to surface in .site.events.
eventTimeStringDisplay time ("noon–4pm", "7pm–10pm").
eventLocationStringAddress or named location.
recurringString"weekly" for weekly recurrence. Expands the event onto every matching weekday in .site.calendar.
recurringDayStringDay name for recurrence. Defaults to the start date’s day of week.
photos[String] or [Object]Photos for the event — surface on .site.photos and on the event page itself.

Photo album pages

A [layout: album] page renders a 3-up image grid; a [layout: photo-album] page renders the site-wide aggregated .site.photos list. Use the first for one event’s gallery, the second for “every photo on the site, sorted by date.”

KeyTypeWhat
layoutStringalbum (one event’s photos) or photo-album (the site-wide grid).
photos[Object]The album’s photos. Each {src, caption?, alt?}.

“Working on it” pages

A [layout: working] page lists pending projects — lease applications, renovations, hiring. Each page’s working: frontmatter is a list.

KeyTypeWhat
layoutStringworking.
working[Object]Projects. Each {title, status, body}status is a short label ("in review", "q2 2025", etc.).

Going beyond config

Drop a file with the same path under your own site to override anything in the theme — this is the ordinary theme overlay pattern:

You want to change…Override at…
The topbar<src>/partials/topbar.html
The footer<src>/partials/footer.html
The hours widget<src>/partials/hours-widget.html
The photo grid<src>/partials/photo-grid.html
The 404 page<src>/layouts/_default/404.html
Custom CSS<src>/static/site.css (and list it under customCSS in site.toml)

Site files always win over theme files, so overrides are a one-file-at-a-time operation — no forking the theme.

SEO

Every juicer theme ships a shared SEO partial (partials/seo.html) that emits the standard meta block: description (with site-level fallback), canonical link, author meta, robots noindex, OpenGraph + Twitter cards (via the ogTags builtin), Atom feed discovery, and theme-specific JSON-LD. The engine separately writes sitemap.xml and robots.txt.

Site-wide keys

description = "Hand-pulled espresso and tiny-batch pastries on Elgin Street."
ogImage     = "/og/default.jpg"

robots   = true
noindex  = false
disallow = ["/private/"]

# Optional: LocalBusiness JSON-LD on the homepage. Any subtype works# Optional: LocalBusiness JSON-LD on the homepage. Any subtype works
# (CafeOrCoffeeShop, Restaurant, Bakery — see schema.org/LocalBusiness).# (CafeOrCoffeeShop, Restaurant, Bakery — see schema.org/LocalBusiness).
[business]
type    = "CafeOrCoffeeShop"
phone   = "+1-555-0100"
address = "123 Elgin Street, Ottawa, ON K2P 1L4"
image   = "/img/storefront.jpg"

Per-page frontmatter

---
title: Espresso 101
summary: A one-sentence dek for search results and OG cards.
image: /img/menu/espresso.jpg
ogImage: /img/menu/espresso-social.jpg
ogTitle: Espresso, explained
ogDescription: Tightened for socials
noindex: true   # excluded from sitemap, JSON-LD suppressed, <meta robots> emitted
---

Structured data emitted

PageSchema
Root sectionWebSite (+ LocalBusiness when [business] is set in site.toml)
Non-section page with date:Article
Any page with ancestorsBreadcrumbList

noindex: true suppresses ALL JSON-LD on that page.

Overriding the SEO partial

Drop a file at <src>/partials/seo.html (or seo-jsonld.html for just the structured-data part). Site overrides win over the theme’s copy.

Search

Esc
to navigate to open Esc to close