← Concepts directory ← Restaurants & Cafes

Slipstream Cafe Template v2

Bulletproof cafe template — calibrated against 506 AU cafes. Designed for the new visitor choosing from search.

◐ In review v2.0
92 FVS
90 PSI Mobile
91 Accessibility
100 SEO
96 Best Practices
Live preview Thought process Data fields (40) Metadata Open standalone ↗
{
    "title": "Slipstream Cafe Template v2",
    "niche": "cafe",
    "version": "2.0",
    "status": "review",
    "date": "2026-05-06",
    "summary": "Bulletproof cafe template \u2014 calibrated against 506 AU cafes. Designed for the new visitor choosing from search.",
    "tags": [
        "cafe",
        "template",
        "FVS-92",
        "schema-rich",
        "CLS-clean"
    ],
    "metrics": {
        "FVS": 92,
        "PSI Mobile": 90,
        "Accessibility": 91,
        "SEO": 100,
        "Best Practices": 96
    },
    "data_fields": [
        {
            "key": "business_name",
            "type": "string",
            "required": true,
            "example": "Cafe 2261",
            "note": "Used in title tag, schema.org, header logo, footer copyright"
        },
        {
            "key": "tagline",
            "type": "string",
            "required": true,
            "example": "Long Jetty's Earliest-Opening Cafe",
            "note": "The H1 \u2014 must include location AND business type for local SEO"
        },
        {
            "key": "subtitle",
            "type": "string",
            "required": true,
            "example": "Veneziano coffee, light meals & a community heart, every day from 4am.",
            "note": "Hero lede \u2014 1-2 sentences, communicate the wedge"
        },
        {
            "key": "establishment_year",
            "type": "int",
            "required": false,
            "example": "2018",
            "note": "Shown as 'since YYYY' in hero eyebrow + footer"
        },
        {
            "key": "street_address",
            "type": "string",
            "required": true,
            "example": "352 The Entrance Rd",
            "note": "Used in schema.org, footer, visit section"
        },
        {
            "key": "suburb",
            "type": "string",
            "required": true,
            "example": "Long Jetty",
            "note": "Used in title, H1, schema, hero trust strip"
        },
        {
            "key": "state",
            "type": "enum",
            "required": true,
            "enum": [
                "NSW",
                "VIC",
                "QLD",
                "WA",
                "SA",
                "TAS",
                "NT",
                "ACT"
            ],
            "example": "NSW"
        },
        {
            "key": "postcode",
            "type": "string",
            "required": true,
            "example": "2261"
        },
        {
            "key": "lat",
            "type": "decimal",
            "required": true,
            "example": "-33.3614",
            "note": "For schema.org geo \u2014 find via Google Maps right-click \u2192 'What's here?'"
        },
        {
            "key": "lng",
            "type": "decimal",
            "required": true,
            "example": "151.4929"
        },
        {
            "key": "google_maps_share_url",
            "type": "url",
            "required": true,
            "example": "https://goo.gl/maps/cafe2261",
            "note": "From Google Maps 'Share' button"
        },
        {
            "key": "google_maps_embed_url",
            "type": "url",
            "required": true,
            "example": "https://www.google.com/maps/embed?pb=!1m18!...",
            "note": "From Google Maps 'Embed a map' option"
        },
        {
            "key": "phone_au",
            "type": "string",
            "required": true,
            "example": "0468 342 880",
            "note": "Display format"
        },
        {
            "key": "phone_intl",
            "type": "string",
            "required": true,
            "example": "+61468342880",
            "note": "International format for tel: links + schema"
        },
        {
            "key": "email",
            "type": "string",
            "required": true,
            "example": "hello@cafe2261.com.au"
        },
        {
            "key": "hours",
            "type": "object",
            "required": true,
            "note": "Per-weekday opening hours. Each value: 'HH:MM-HH:MM' or 'closed'.",
            "example": "{ mon: '04:00-13:00', tue: '04:00-13:00', wed: '04:00-16:00', thu: '04:00-13:00', fri: '04:00-13:00', sat: '04:30-14:00', sun: '04:30-14:00' }"
        },
        {
            "key": "hero_image",
            "type": "image",
            "required": true,
            "note": "Cafe exterior at dawn, ideally with warm interior lights visible. Min 1600x900. THE single highest-impact photo on the page \u2014 without it, FVS drops 12+ points."
        },
        {
            "key": "hero_image_alt",
            "type": "string",
            "required": true,
            "example": "Cafe 2261 exterior at dawn, with warm interior lights visible through the front window"
        },
        {
            "key": "front_entry_image",
            "type": "image",
            "required": true,
            "note": "Close-up of the front entrance with signage clearly visible. Used in gallery. Critical for the front-entry test."
        },
        {
            "key": "interior_images",
            "type": "array<image>",
            "required": true,
            "note": "2-4 interior photos showing seating, atmosphere, light. NOT just food shots."
        },
        {
            "key": "food_images",
            "type": "array<image>",
            "required": true,
            "note": "3-6 photos of signature menu items. Each with alt text."
        },
        {
            "key": "og_image",
            "type": "image",
            "required": true,
            "note": "1200x630 \u2014 the social-share preview. Use the hero image at this aspect ratio."
        },
        {
            "key": "cuisine_types",
            "type": "array<string>",
            "required": true,
            "example": "['Cafe', 'Breakfast', 'Brunch', 'Australian', 'Middle Eastern']",
            "note": "Schema.org servesCuisine + meta description"
        },
        {
            "key": "price_range",
            "type": "enum",
            "required": true,
            "enum": [
                "$",
                "$$",
                "$$$",
                "$$$$"
            ],
            "example": "$$"
        },
        {
            "key": "google_review_count",
            "type": "int",
            "required": false,
            "example": "127",
            "note": "Pulled from Google Business Profile"
        },
        {
            "key": "google_rating",
            "type": "decimal",
            "required": false,
            "example": "4.7"
        },
        {
            "key": "instagram_url",
            "type": "url",
            "required": false,
            "example": "https://www.instagram.com/cafe2261/"
        },
        {
            "key": "facebook_url",
            "type": "url",
            "required": false,
            "example": "https://www.facebook.com/cafe2261/"
        },
        {
            "key": "google_business_url",
            "type": "url",
            "required": false,
            "example": "https://www.google.com/maps/place/cafe2261"
        },
        {
            "key": "story_paragraphs",
            "type": "array<string>",
            "required": true,
            "note": "2-3 short paragraphs telling the cafe's story / wedge. Should reinforce the hero positioning."
        },
        {
            "key": "community_initiatives",
            "type": "array<object>",
            "required": false,
            "note": "0-3 community cards. Each: { icon, heading, body }.",
            "example": "[{ icon: '\ud83e\udd63', heading: 'First-Friday Soup Kitchen', body: '...' }]"
        },
        {
            "key": "testimonial",
            "type": "object",
            "required": false,
            "example": "{ quote: 'Every dawn shift starts here.', cite: 'Mark, Surf Life-Saver' }"
        },
        {
            "key": "menu_items",
            "type": "array<object>",
            "required": true,
            "note": "5-8 menu highlights. Each: { name, price, description, dietary_tags }.",
            "example": "[{ name: 'Shakshuka', price: '$19.50', description: '...', dietary_tags: ['V'] }]"
        },
        {
            "key": "menu_pdf_url",
            "type": "url",
            "required": false,
            "example": "/menu/full-menu.pdf",
            "note": "Link to the full menu PDF if menu is too long for the page"
        },
        {
            "key": "amenities",
            "type": "array<enum>",
            "required": true,
            "enum": [
                "outdoor_seating",
                "wheelchair_accessible",
                "dog_friendly",
                "free_parking",
                "takeaway",
                "dine_in",
                "vegetarian",
                "vegan",
                "gluten_free",
                "wifi",
                "kids_friendly",
                "high_chairs"
            ],
            "note": "Used in schema.org amenityFeature + visit-section pills"
        },
        {
            "key": "payment_methods",
            "type": "array<enum>",
            "required": true,
            "enum": [
                "Cash",
                "Credit Card",
                "EFTPOS",
                "Apple Pay",
                "Google Pay",
                "Square",
                "Stripe"
            ],
            "example": "['Cash','Credit Card','EFTPOS','Apple Pay']"
        },
        {
            "key": "accepts_reservations",
            "type": "bool",
            "required": true,
            "example": false
        },
        {
            "key": "reservation_platform",
            "type": "enum",
            "required": false,
            "enum": [
                "resdiary",
                "opentable",
                "sevenrooms",
                "now_book_it",
                "quandoo",
                "inhouse",
                "none"
            ]
        },
        {
            "key": "newsletter_action_url",
            "type": "url",
            "required": false,
            "example": "https://list-manage.com/...subscribe",
            "note": "POST endpoint for newsletter signup (Mailchimp / Mailerlite etc.)"
        },
        {
            "key": "newsletter_pitch",
            "type": "string",
            "required": false,
            "example": "Get the first-Friday soup-kitchen schedule + what's brewing each month.",
            "note": "Concrete value proposition \u2014 NOT 'subscribe to our newsletter'"
        }
    ],
    "open_status_strings": {
        "_design_rule": "Status badge and bar must speak in one voice and always anchor to 'now'. The word 'now' resolves the ambiguity of whether 'Open' means 'open today', 'open generally', or 'open right now'. Added 2026-05-11 from PaparottiS review.",
        "open_today": "Open now \u00b7 closes {closesAt}",
        "closed_opens_today": "Closed now \u00b7 opens at {opensAt} today",
        "closed_opens_tomorrow": "Closed now \u00b7 opens tomorrow {opensAt}",
        "closed_opens_later": "Closed now \u00b7 opens {dayName} {opensAt}"
    },
    "design_rules_applied": [
        {
            "rule": "establishment_year_footer",
            "description": "When establishment_year is known, the footer copyright MUST show a range: '\u00a9 YYYY-founded \u2013 YYYY-current Business Name'. Year-range reads as longevity (trust signal).",
            "field": "establishment_year",
            "added": "2026-05-11",
            "source": "paparottis-tuggerah review"
        },
        {
            "rule": "status_strings_say_now",
            "description": "Live open/closed indicator must include the word 'now' so the badge anchors to the moment of reading. Badge and bar must speak in one voice. See open_status_strings.",
            "added": "2026-05-11",
            "source": "paparottis-tuggerah review"
        },
        {
            "rule": "placeholder_treatment",
            "description": "Placeholder images use stock photo + dark gradient overlay + light blur + centred label. Not flat colour blocks. Page reads as finished design pre-photos.",
            "added": "2026-05-11",
            "source": "paparottis-tuggerah round-2 review"
        },
        {
            "rule": "status_bar_no_duplicate_ctas",
            "description": "Status strip between hero and story carries the live open/closed indicator only. CTAs that appear in the hero or mobile sticky bottom bar should NOT be duplicated here.",
            "added": "2026-05-11",
            "source": "paparottis-tuggerah round-2 review"
        },
        {
            "rule": "story_needs_companion_image",
            "description": "Story sections use a 2-column grid: text + companion image (or above on mobile). Single-column text-only story is lopsided.",
            "added": "2026-05-11",
            "source": "paparottis-tuggerah round-2 review"
        },
        {
            "rule": "visit_amenities_under_map",
            "description": "When the visit right-column (Address / Hours / Contact / Amenities) is taller than the map+padding, lift the amenities pills out and place them as a card under the map.",
            "added": "2026-05-11",
            "source": "paparottis-tuggerah round-2 review"
        },
        {
            "rule": "restaurant_instagram_block",
            "description": "Restaurant / hospitality / food-led venues include a full-width Instagram grid (6 tiles, edge-to-edge) between Our Story and Menus. Production: Elfsight embed / IG Basic Display API / curated static grid.",
            "added": "2026-05-11",
            "source": "paparottis-tuggerah round-2 review"
        },
        {
            "rule": "shopping_centre_venues_name_the_centre",
            "description": "When a venue is in a shopping centre / mall, the address must include the centre name on the first line (e.g. 'Shop 1038A, Westfield Tuggerah'). Customers navigate to the centre first.",
            "added": "2026-05-11",
            "source": "paparottis-tuggerah round-2 review"
        }
    ]
}

Sidecar files: /restaurants/design-4-slipstream-v2.html, /restaurants/design-4-slipstream-v2.md, /restaurants/design-4-slipstream-v2.json