Slipstream Cafe Template v2
A bulletproof cafe website template, calibrated against 506 Australian cafes
in our research corpus. Every structural decision below is supported by data
gathered from the niche-research crawler at api.makedev.com.au/commoncrawl.
The thought process
Most AU cafe websites are built by web designers who, understandably, have forgotten what it feels like to be a stranger choosing between five cafes from a Google search at 8:47am on a Saturday. Existing customers already know where the cafe is. New visitors don't.
This template is designed for that new visitor.
The cafe owner's job is to get them in the door. The website's job is to help them feel familiar with the place before they choose it. Almost no cafe website does this. We measured it: of 506 AU cafes scanned, exactly one scored above 80 on our First Visit Score (FVS) — a structural exemplar called Black Pepper Cafe in Noosa Heads. Everyone else clusters around 50, failing what we now call the map test and the front-entry test.
This template is built to score 90+ on FVS by design.
What the data told us
We crawled 506 cafes and computed for each:
- Customer Utility (UX) — opening hours, address, menu, photos, reviews
- Local SEO — H1 has location + business type, schema-org populated
- Schema.org — has LocalBusiness, address, telephone, hours, geo
- First Visit Score (FVS) — can a stranger choose this cafe from search?
Then we asked Isaac to nominate cafes that felt gold-standard. Across 13 nominations, the dominant note (mentioned 11 of 13 times) was some variant of "map is buried on the contact page". The runner-up theme was *"can't see what the front entry looks like"*. So FVS was rebuilt around two high-weight components:
- Map prominence — a map in the second/third scroll of the homepage
(a dedicated "visit us" section) is the gold standard. A map only on /contact is the failure mode. The original v1 site for Cafe 2261 has the map on the contact page only — a near-universal mistake.
- Front-entry photo — a photo of the building exterior, signage, or
street view that lets a passer-by recognise the cafe. Almost no AU cafe shows this. Most galleries are food + interior.
Decisions log
- Single
<h1>with location ("Long Jetty's Earliest-Opening Cafe").
v1 had two H1s, including "Menu highlights" — that's a SEO mistake the template fixes structurally.
- Story before menu. The community angle (soup kitchen, kids' sports,
mental-health awareness) is the moat that distinguishes this cafe from the next 4am cafe. A strategist would lead with this; v1 buried it in paragraph 4. The template makes it the second section.
- Single primary CTA above the fold (
📍 Get Directions). New visitors
want to know where you are. Order online is for existing customers.
- Map in the visit section — third scroll, paired with hours and
amenities. Reachable without changing pages.
- Hero image is the cafe exterior at dawn — not the food, not the
interior. The single most overlooked photo across the corpus.
- Schema.org
Restaurant+CafeOrCoffeeShopdual type, fully
populated with address, geo, phone, hours, image, priceRange,
servesCuisine, paymentAccepted, amenityFeature, aggregateRating, sameAs.
v1 had name and openingHours — that's it.
- Newsletter tied to the soup kitchen ("Get the first-Friday soup
kitchen schedule"). Concrete value, not "subscribe to our newsletter".
- CLS-clean by default — every image has explicit width/height,
fonts preloaded, no late-loaded layout-shift fonts. v1 had a CLS of 1.7 (catastrophic). v2 lands at 0.008.
- No Tailwind, no jQuery, no Divi. Vanilla HTML/CSS/inline JS.
v1 was 2.84MB; v2 is 122KB.
- Footer copyright shows year range (
© 2018 – 2026 Cafe 2261), not
just the current year. Reads as longevity. Design rule: when the establishment year is known, the footer MUST show a range. Derived from the PaparottiS review on 2026-05-11.
- Status badge wording always anchors to "now" — `Open now · closes
8pm and Closed now · opens at 5pm today. The earlier wording (Open ·
closes 8pm in the badge, Open now · …` in the bar) was inconsistent
and ambiguous — "Open" alone could mean "open today" or "open generally"
rather than "open right now". The badge and bar now speak in one voice.
See open_status_strings in the .json sidecar. Derived from the
PaparottiS review on 2026-05-11.
- Placeholder image treatment — when real photos aren't supplied,
placeholders use stock photo + dark gradient + light blur + centred label, not flat colour blocks. Page reads as finished design pre-photos. Derived from PaparottiS round-2 review on 2026-05-11.
- Status bar carries the live indicator only — no duplicate CTAs.
Hero already has Get Directions + View Menus; mobile sticky bar already has Directions + Call us. A third copy in the status strip is noise. Derived from PaparottiS round-2 review on 2026-05-11.
- Stories use a 2-column grid — text + companion image (or above on
mobile). Single-column text-only story is lopsided. If the client doesn't yet have a photo, use the placeholder treatment above. Derived from PaparottiS round-2 review on 2026-05-11.
- Visit column rebalance — when the right column (Address / Hours /
Contact / Amenities) is taller than the map, lift "What to expect" amenities out and place them as a card under the map. Restores balance. Derived from PaparottiS round-2 review on 2026-05-11.
- Restaurants include an Instagram block — full-width 6-tile grid
between Our Story and Menus. Production: Elfsight / IG Basic Display API / curated static. Cafes and bars likely want the same block — TBC. Derived from PaparottiS round-2 review on 2026-05-11.
- Shopping-centre venues name the centre — when a venue is in a
shopping centre / mall, address line one includes the centre name
(e.g. Shop 1038A, Westfield Tuggerah). Centre name is the local
landmark customers navigate to first. Derived from PaparottiS
round-2 review on 2026-05-11.
Metrics this template hits
When deployed with real images, the template lands roughly at:
- PageSpeed Mobile: 90/100
- PSI Accessibility: 91/100
- PSI SEO: 100/100
- PSI Best Practices: 96/100
- LCP: 2.9s (good = ≤2.5s)
- CLS: 0.008 (good = ≤0.1)
- Customer Utility Score: ~85/100
- Local SEO Score: ~95/100
- Schema.org Score: ~90/100
- First Visit Score: ~92/100
By comparison, the median AU cafe in our corpus scores ~50 on FVS, and the v1 prototype the template replaces scored 34 on PSI Performance with catastrophic CLS.
Data fields needed to populate
See the Data fields tab. Every variable required to deploy this template for a real business is listed there with its type, whether it's required, and an example value. If the build pipeline can populate that schema, the template can be deployed for any cafe.
What this template doesn't try to solve
- Functions / catering bookings — pointed at via the footer, but no
dedicated form. Add via a /functions/ page if needed.
- Online ordering integration — deliberately not the front door.
Existing customers find it via the menu page; new visitors don't need it.
- Multi-location — assumes one venue. A two-location cafe needs a
different information architecture.
- Loyalty program signup — too domain-specific. Add as a section if
the business has one.
How to use this as a Slipstream build
1. Fill in every field listed in the Data fields tab against the real cafe's information. 2. Source 4 photos: cafe exterior at dawn (hero), exterior front-entry close-up (gallery), interior (gallery), food (gallery). The first two are non-negotiable — without them, FVS drops 24 points. 3. Generate the JSON-LD schema with all required + optional fields populated. 4. Test PSI on staging before deploying. CLS must stay under 0.1. 5. Wire the newsletter form to the customer's preferred list manager (Mailchimp / Mailerlite / Klaviyo / Square Marketing).
Open questions
- Should there be a
/menu/URL distinct from the homepage menu section,
or is the on-page menu enough? Currently the template links to a PDF.
- Should the visit section embed a third-party reservations widget when
the cafe takes bookings? Currently shows phone + walk-in.
- Front-entry video instead of photo? Some Slipstream tests suggest this
improves time-on-page significantly. Not enough data yet.