Layouts · Shops, cafés and venues · The full pattern

Shops, cafés and venues: the full pattern

Plan it first: the blueprint It lists the pages you need and what to write on each one.

People come to my place, during opening hours.

Sites like this: café, restaurant, bakery, bar, barber or salon, independent shop, pharmacy, tasting room, spa.

What a visitor comes to find out

“Open now? What’s on? Where? How do I book or order?”

Untested Worked out from research and real briefs. No site has been built from it yet, so treat it as reasoning to check, not a tested template.

Illustration · one way it could look
The pattern, on a phone
Left: an illustration of one way the homepage could look, with example wording. It isn’t a finished site, and the look is chosen in Design. Right: the same homepage as the pattern draws it, on a phone.

Planning a site? Read from the top. Designing or building one? Jump to the structure or the file.

Explore the website

Four kinds of page. Home is on every site like this; the other three depend on the business. Pick a situation to see which pages stay.

Show the plan for

On every page, when the business needs itLanguage switch

On every siteDepends on the businessLeft out for this businessOne page for each item

Home

“Open now? What’s on? Where? How do I book or order?”

Status
Always
Address
/
Eight sections, top to bottom
What this is · Open now · Main action · On today · How to find us · Prices · Who you’ll deal with · What clients say

How visitors move through it

  • Every page is one click from the homepage.
  • The main action (get directions until the business says otherwise) sits on every page.

Why it works

A nearby visitor wants to know: are you open now, what have you got today, what does it cost, where exactly are you, and can I book or order?

So the homepage leads with Open now, what’s on, where. The action changes with the opening state.

What each part of the homepage is for

  1. What this is always

    What the place is, and where.

  2. Open now always

    Today’s state first; hours as text.

  3. Main action always

    Book a table, order ahead, message, or come in.

  4. On today optional

    Today’s bake or specials, if someone will keep it current.

  5. How to find us depends

    Address as text, landmark, getting there.

  6. Prices depends

    Short lists (a barber’s prices) sit on home; long menus get a page.

  7. Who you’ll deal with depends

    Barbers and stylists people book by name.

  8. What clients say optional

    Attributed, dated.

On every page

  • Language switch required when it applies

    Several languages: a way to switch is required on every page. Where and how it shows is Design’s.

Which button leads

The main action changes with how people buy. The first rule that matches the business wins.

  1. What should a ready visitor do? Book a time

    Book a time or dates, then phone

    Tables and chairs are booked. When closed, the booking still works; say when you next open. observed

  2. What should a ready visitor do? Order ahead

    Order ahead, then come in (directions)

    Bakeries and cafés taking pre-orders. observed

  3. What should a ready visitor do? Message us

    Message (WhatsApp, Viber, SMS), then phone

    Ordering by WhatsApp (pharmacy delivery, Tirana venues). observed

  4. Otherwise

    Come in (directions), then phone

    For a walk-in place the action is getting there: hours, address, map link. our reasoning

Check before you build

  • Whether a salon books a slot (venue) or a person (practice). unknown
  • Where online-only shops that take orders by message belong. unknown
  • Whether an events mode belongs here. unknown
  • Reviews and real photos of the place carry most of it. our reasoning

Make it yours

A pattern is a starting point. Some of it holds for every business like this, some of it bends, and some of it only you can answer.

Holds for every site

  • Home
  • On the homepage: What this is, Open now, Main action

Depends on the business

  • Menu or price list If: Can you publish prices? Yes, fixed prices or “From” prices or ranges
  • Locations If: How many places can people visit? Several
  • Book or order If: What should a ready visitor do? Book a time or Order ahead or Send an enquiry

One pattern, two situations

The same homepage, drawn by the pattern from each situation’s answers. Sections the answers leave out are gone.

Walk-in The action is getting there: hours, address, map link.
Main button
Get directions
Pages
Home, Menu or price list
Left out
Locations, Book or order
Book a table Booking leads and still works when closed.
Main button
Book
Pages
Home, Menu or price list, Book or order
Left out
Locations

What you’ll need to supply

For the homepage alone. Nobody can write these for you; the file marks each one as still to supply.

What this is
What you do, in plain words
Open now
Regular hours, as text

Questions only you can answer

  1. Do opening hours decide whether people come or call?
  2. What should a ready visitor do?
  3. How many places can people visit?
  4. Can you publish prices?
  5. Do clients care which person they get?
  6. How many languages?

What changes with the answers

How many places can people visit? SeveralA location page per branch; home shows the nearest or a list.
What should a ready visitor do? Book a timeBooking leads; when closed, the page says when you open next and keeps booking available.
Can you publish prices? Yes, fixed pricesA menu or price-list page as HTML text.
How many languages? Two or moreLanguage switcher; menus in each language.
Answer for your own business

The plan, every drawing and the file on this page redraw as you answer.

Your brief

Answer what you know and the drawings redraw. Anything you skip stays open, and goes into your site plan as a question, never a guess.

Or start from a real brief

Inspect the structure

Every page as a wireframe: the sections in order, what each one is for, and what moves on a phone. Select a violet label for its job, the content it needs and every page it appears on.

Home answers “Open now? What’s on? Where? How do I book or order?”

On a phone · First screen: open now, the action and the address. Most venue visits start on a phone, nearby.

On a phone · The address opens the map app: link it, don’t embed a map (NN/g).

Example wording.

Use it in Design and Build

Everything above, as one file you can hand on. It describes the site’s structure. It doesn’t design or build anything.

In the file
4 pages, 21 sections in order, the main action, and what each section needs from you
Still to decide
9 open questions. Anything you haven’t answered travels as a question, never a guess.
In Design
The order of pages and sections is the hierarchy to design. The look, type and images are yours to choose.
With a coding agent
Give it the file with your design. It lists every page, its address and its sections in order, and marks the content you still have to write.

JSON is for coding agents and other tools. Markdown reads like a document, for people.

What it isn’t: a finished site, a template to publish, or proof the structure works for your business. Status: untested.

For designers and developers: what each stage reads

Design reads

  • pages[].name, job and order (the hierarchy)
  • pages[].modules[] in order, with jobs and role
  • status “depends” (unresolved) vs optional
  • page_frame with required/recommended strength
  • pages[].phone_first and phone_notes (the phone order)
  • primary_action label and intent

Read pages[] in order and modules[] in order: that is the hierarchy. jobs[] say what each module must achieve; status "depends" means unresolved, not optional. Look, type, imagery and Elements are Design’s; nothing here prescribes them.

Build reads

  • pages[].route and one_per (routes and repeating pages)
  • pages[].modules[] in order
  • modules[].slots with need, many and any profile obligation
  • primary_action.intent and second_routes (implemented per platform)
  • page_frame (required/recommended)
  • left_out (must stay out)
  • entities, when the project names them

Make one route per page (one per entity where one_per is set), modules in the given order, every slot with need "required" filled before ship. Implement each action so it achieves its intent on this project’s platform. Do not read why as an instruction.

QA checks: Check that each included module does its jobs, required slots are filled with real content, left_out items stayed out, and the primary action leads where its label says.

Your site plan, as a file

Project IA file · 0.2

Shops, cafés and venues

No project named · 2026-10-06 · pattern maturity: reasoned, not built

From the Strategy brief

  • Do opening hours decide whether people come or call?Yes, set opening hours
  • What should a ready visitor do?Book a time
  • How many places can people visit?One
  • Can you publish prices?Yes, fixed prices
  • Do clients care which person they get?unanswered
  • How many languages?unanswered

Primary action

Book a time or dates

Secure a time or dates

Build decides (likely navigate)

Second route: Phone

On every page

  • Language switch required depends

Pages, in order · modules in reading order

  1. Home

    /

    1. What this is orient · explain1 required slot
    2. Open now orient · act1 required slot
    3. Main action act1 required slot
    4. On today explore · act optional2 required slots
    5. How to find us orient · act1 required slot
    6. Prices reassure · explain2 required slots
    7. Who you’ll deal with reassure · prove depends2 required slots
    8. What clients say prove optional1 required slot
  2. Menu or price list

    /menu

    1. Prices reassure · explain2 required slots
    2. On today explore · act optional2 required slots
    3. Questions people ask reassure optional1 required slot
    4. Main action act1 required slot
  3. Book or order

    /book

    1. The form act · recover3 required slots
    2. What happens next explain · reassure1 required slot
    3. Main action act optional1 required slot
    4. It’s sent reassure · recover2 required slots

Left out, and why

  • page: Locations left out because the answer to “How many places can people visit?” is “One”

Open questions

  • Do clients care which person they get?
  • How many languages?
  • Whether a salon books a slot (venue) or a person (practice).
  • Where online-only shops that take orders by message belong.
  • Whether an events mode belongs here.

Design reads Read pages[] in order and modules[] in order: that is the hierarchy. jobs[] say what each module must achieve; status "depends" means unresolved, not optional. Look, type, imagery and Elements are Design’s; nothing here prescribes them.

Build reads Make one route per page (one per entity where one_per is set), modules in the given order, every slot with need "required" filled before ship. Implement each action so it achieves its intent on this project’s platform. Do not read why as an instruction.

QA checks Check that each included module does its jobs, required slots are filled with real content, left_out items stayed out, and the primary action leads where its label says.

Where it goes next
The raw file
{
  "format": "aesthetary.ia-structure",
  "version": "0.2",
  "made": {
    "by": "Aesthetary IA Library",
    "on": "2026-10-06",
    "pattern": "local-venue",
    "pattern_maturity": "reasoned, not built"
  },
  "project": {
    "name": null,
    "note": "Facts below are the brief. Anything unanswered is listed, never assumed."
  },
  "copy_guidance": {
    "source": "Aesthetary Website Blueprints: the same copywriting guidance the blueprint pages show",
    "how_to_use": {
      "formula": "An instruction, not text to publish. Write original copy for this project that does what the formula describes, using the project’s real facts. Never publish the formula, or anything in square brackets.",
      "why_it_works": "The reasoning behind the section, for whoever writes the copy. Use it to judge a draft; don’t put it on the page.",
      "illustrative_example": "Written for a made-up business to show the formula applied. Never reuse its wording, names, places, numbers or quotes.",
      "project_content": "The project’s own facts are the brief’s answers, any entities and project decisions, and the slots marked “to supply”. Fill slots only with real content from the business. If it isn’t available, leave the slot visibly empty and list it; never invent reviews, ratings, registrations, prices or results."
    }
  },
  "brief": {
    "answered": {
      "hours": {
        "question": "Do opening hours decide whether people come or call?",
        "answer": "Yes, set opening hours",
        "value": "yes"
      },
      "main_action": {
        "question": "What should a ready visitor do?",
        "answer": "Book a time",
        "value": "book"
      },
      "locations": {
        "question": "How many places can people visit?",
        "answer": "One",
        "value": "one"
      },
      "prices": {
        "question": "Can you publish prices?",
        "answer": "Yes, fixed prices",
        "value": "fixed"
      }
    },
    "unanswered": [
      {
        "fact": "people",
        "question": "Do clients care which person they get?"
      },
      {
        "fact": "languages",
        "question": "How many languages?"
      }
    ]
  },
  "site_pattern": {
    "id": "local-venue",
    "name": "Shops, cafés and venues",
    "problem": "A nearby visitor wants to know: are you open now, what have you got today, what does it cost, where exactly are you, and can I book or order?",
    "leads_with": "Open now, what’s on, where. The action changes with the opening state."
  },
  "primary_action": {
    "role": "book",
    "label": "Book a time or dates",
    "intent": "Secure a time or dates",
    "outcome": "booking_handoff",
    "implementation": "Build decides (likely navigate)",
    "decided": true,
    "second_routes": [
      {
        "role": "call",
        "label": "Phone",
        "intent": "Reach the business by phone, now"
      }
    ],
    "why": "Tables and chairs are booked. When closed, the booking still works; say when you next open.",
    "stated_preference": {
      "role": "book",
      "label": "Book a time or dates",
      "answer": "Book a time"
    },
    "follows_preference": true
  },
  "page_frame": [
    {
      "module": "language-switch",
      "name": "Language switch",
      "strength": "required",
      "status": "depends",
      "depends_on": [
        "languages"
      ],
      "why": "Several languages: a way to switch is required on every page. Where and how it shows is Design’s.",
      "presentation": "Design decides; Build implements.",
      "copy": {
        "formula": "[Each language, named in itself]",
        "why_it_works": "Lets people switch to their language, named in that language.",
        "illustrative_example": "“English · Italiano”"
      }
    }
  ],
  "pages": [
    {
      "page": "home",
      "name": "Home",
      "route": "/",
      "phone_first": [
        "opening-hours",
        "action",
        "location"
      ],
      "phone_notes": [
        {
          "module": "opening-hours",
          "note": "First screen: open now, the action and the address. Most venue visits start on a phone, nearby."
        },
        {
          "module": "location",
          "note": "The address opens the map app: link it, don’t embed a map (NN/g)."
        }
      ],
      "status": "include",
      "job": "Open now? What’s on? Where? How do I book or order?",
      "modules": [
        {
          "module": "proposition",
          "name": "What this is",
          "jobs": [
            "orient",
            "explain"
          ],
          "status": "include",
          "role": "Positioning",
          "latitude": null,
          "slots": [
            {
              "slot": "what",
              "name": "What you do, in plain words",
              "need": "required",
              "content": "to supply"
            },
            {
              "slot": "who",
              "name": "Who it is for",
              "need": "conditional",
              "content": "to supply"
            },
            {
              "slot": "where",
              "name": "Where (town or area)",
              "need": "conditional",
              "content": "to supply"
            }
          ],
          "why": "What the place is, and where.",
          "copy": {
            "formula": "[What you serve + when], then [what to come in for + how to book or order]",
            "why_it_works": "A nearby visitor is deciding where to go right now. What you serve and when you’re open answers that in one glance; a mood line doesn’t.",
            "illustrative_example": "“Café by day. Small plates and wine at night.” Then: “Breakfast and lunch from early; book a table for the evening.”"
          }
        },
        {
          "module": "opening-hours",
          "name": "Open now",
          "jobs": [
            "orient",
            "act"
          ],
          "status": "include",
          "role": "Local information",
          "latitude": null,
          "slots": [
            {
              "slot": "regular",
              "name": "Regular hours, as text",
              "need": "required",
              "content": "to supply"
            },
            {
              "slot": "exceptions",
              "name": "Holidays and seasonal changes",
              "need": "conditional",
              "content": "to supply"
            },
            {
              "slot": "out-of-hours",
              "name": "What to do when closed",
              "need": "conditional",
              "content": "to supply"
            }
          ],
          "why": "Today’s state first; hours as text.",
          "copy": {
            "formula": "[Today’s status] + [regular hours] + [holidays and what to do when closed]",
            "why_it_works": "Tells people whether they can come or call right now, and what to do when you’re closed.",
            "illustrative_example": "“Open now · closes 11pm. Kitchen closes at 10. Closed Mondays in January.”"
          }
        },
        {
          "module": "action",
          "name": "Main action",
          "jobs": [
            "act"
          ],
          "status": "include",
          "role": "Primary action",
          "latitude": null,
          "slots": [
            {
              "slot": "primary",
              "name": "Primary action (a role, not a label)",
              "need": "required",
              "content": "to supply"
            },
            {
              "slot": "secondary",
              "name": "Second route",
              "need": "optional",
              "content": "to supply"
            },
            {
              "slot": "reassurance",
              "name": "Terms at the action",
              "need": "conditional",
              "content": "to supply"
            }
          ],
          "why": "Book a table, order ahead, message, or come in.",
          "copy": {
            "formula": "[Book or order + for when], with [deposit, group size or order cut-off]",
            "why_it_works": "People booking a table or ordering ahead want it done in one step. Naming the time and any deposit up front avoids a booking that falls through later.",
            "illustrative_example": "“Book a table for tonight”, with “Groups of 8+ pay a deposit” beside it."
          }
        },
        {
          "module": "today",
          "name": "On today",
          "jobs": [
            "explore",
            "act"
          ],
          "status": "optional",
          "role": "The offer",
          "latitude": null,
          "slots": [
            {
              "slot": "items",
              "name": "Today’s items",
              "need": "required",
              "many": true,
              "content": "to supply"
            },
            {
              "slot": "date",
              "name": "Date it applies to",
              "need": "required",
              "content": "to supply"
            }
          ],
          "why": "Today’s bake or specials, if someone will keep it current.",
          "copy": {
            "formula": "[What’s on today, dated] + [item + price + how to get it]",
            "why_it_works": "Shows what’s available right now, so a nearby visitor has a reason to come in or order today.",
            "illustrative_example": "“Tuesday 14 October: pumpkin soup £—, lamb flatbread £—.”"
          }
        },
        {
          "module": "location",
          "name": "How to find us",
          "jobs": [
            "orient",
            "act"
          ],
          "status": "include",
          "role": "Local information",
          "latitude": null,
          "slots": [
            {
              "slot": "address",
              "name": "Address, as text",
              "need": "required",
              "content": "to supply"
            },
            {
              "slot": "landmark",
              "name": "Landmark line",
              "need": "optional",
              "content": "to supply"
            },
            {
              "slot": "getting-there",
              "name": "Parking, transport, access",
              "need": "optional",
              "content": "to supply"
            },
            {
              "slot": "map",
              "name": "Map link",
              "need": "optional",
              "content": "to supply"
            }
          ],
          "why": "Address as text, landmark, getting there.",
          "copy": {
            "formula": "[Address as text] + [a landmark people recognize] + [parking, transport, access]",
            "why_it_works": "Gets people to your door: the address as text, how to get there and a link that opens in their map app.",
            "illustrative_example": "“14 Mill Street, next to the clock tower. Bus 12 stops outside; one step at the door.”"
          }
        },
        {
          "module": "price-list",
          "name": "Prices",
          "jobs": [
            "reassure",
            "explain"
          ],
          "status": "include",
          "role": "Price",
          "latitude": null,
          "slots": [
            {
              "slot": "items",
              "name": "Item and price (or “from” price)",
              "need": "required",
              "many": true,
              "content": "to supply"
            },
            {
              "slot": "includes",
              "name": "What’s included",
              "need": "conditional",
              "content": "to supply"
            },
            {
              "slot": "tax",
              "name": "Tax shown or included",
              "need": "required",
              "content": "to supply"
            },
            {
              "slot": "extras",
              "name": "Extra fees (call-out, deposit, travel)",
              "need": "conditional",
              "content": "to supply"
            },
            {
              "slot": "depends",
              "name": "What changes the price",
              "need": "conditional",
              "content": "to supply"
            },
            {
              "slot": "updated",
              "name": "Last updated",
              "need": "optional",
              "content": "to supply"
            }
          ],
          "why": "Short lists (a barber’s prices) sit on home; long menus get a page.",
          "copy": {
            "formula": "[Dish or service + price + allergens], as text",
            "why_it_works": "Visitors check the menu and prices before they come in. Text they can read on a phone, with allergens marked, beats a photo of a printed menu.",
            "illustrative_example": "“Small plates £—–£— · Wine by the glass from £— · Prices include service.”"
          }
        },
        {
          "module": "people",
          "name": "Who you’ll deal with",
          "jobs": [
            "reassure",
            "prove"
          ],
          "status": "depends",
          "depends_on": [
            "people"
          ],
          "role": "Trust & proof",
          "latitude": null,
          "slots": [
            {
              "slot": "name",
              "name": "Name and role",
              "need": "required",
              "many": true,
              "content": "to supply"
            },
            {
              "slot": "register",
              "name": "Personal registration and number",
              "need": "conditional",
              "content": "to supply"
            },
            {
              "slot": "photo",
              "name": "Photo (consented)",
              "need": "optional",
              "content": "to supply"
            },
            {
              "slot": "does",
              "name": "What they do for you",
              "need": "required",
              "content": "to supply"
            },
            {
              "slot": "book-with",
              "name": "Book with this person",
              "need": "conditional",
              "content": "to supply"
            }
          ],
          "why": "Barbers and stylists people book by name.",
          "copy": {
            "formula": "[Name + role] + [what this person does for the customer]",
            "why_it_works": "Puts names and faces on the business. That matters most when you come into someone’s home or handle their money or health.",
            "illustrative_example": "“Ana runs the kitchen; Tom chooses the wine.”"
          }
        },
        {
          "module": "reviews",
          "name": "What clients say",
          "jobs": [
            "prove"
          ],
          "status": "optional",
          "role": "Supporting evidence",
          "latitude": null,
          "slots": [
            {
              "slot": "quotes",
              "name": "Quote, name or initials, context, date, where it was left",
              "need": "required",
              "many": true,
              "content": "to supply"
            }
          ],
          "why": "Attributed, dated.",
          "copy": {
            "formula": "[A real customer’s words + the specific result], with name or initials, place, date and where it was left",
            "why_it_works": "Lets someone like the visitor say it for you. A quote about the job they need does more than general praise.",
            "illustrative_example": "An illustration of the shape, for a made-up business: “Came for coffee, stayed for dinner. Ask Tom what’s open by the glass.” R.K., October, on Google. Use your real reviews."
          }
        }
      ]
    },
    {
      "page": "menu",
      "name": "Menu or price list",
      "route": "/menu",
      "page_pattern": "prices",
      "status": "include",
      "job": "What’s on and what it costs, as text, with allergens.",
      "modules": [
        {
          "module": "price-list",
          "name": "Prices",
          "jobs": [
            "reassure",
            "explain"
          ],
          "status": "include",
          "role": "Price",
          "latitude": null,
          "slots": [
            {
              "slot": "items",
              "name": "Item and price (or “from” price)",
              "need": "required",
              "many": true,
              "content": "to supply"
            },
            {
              "slot": "includes",
              "name": "What’s included",
              "need": "conditional",
              "content": "to supply"
            },
            {
              "slot": "tax",
              "name": "Tax shown or included",
              "need": "required",
              "content": "to supply"
            },
            {
              "slot": "extras",
              "name": "Extra fees (call-out, deposit, travel)",
              "need": "conditional",
              "content": "to supply"
            },
            {
              "slot": "depends",
              "name": "What changes the price",
              "need": "conditional",
              "content": "to supply"
            },
            {
              "slot": "updated",
              "name": "Last updated",
              "need": "optional",
              "content": "to supply"
            }
          ],
          "why": "The list itself, with tax, extras and what changes the price.",
          "copy": {
            "formula": "[Dish or service + price + allergens], as text",
            "why_it_works": "Visitors check the menu and prices before they come in. Text they can read on a phone, with allergens marked, beats a photo of a printed menu.",
            "illustrative_example": "“Small plates £—–£— · Wine by the glass from £— · Prices include service.”"
          }
        },
        {
          "module": "today",
          "name": "On today",
          "jobs": [
            "explore",
            "act"
          ],
          "status": "optional",
          "role": "The offer",
          "latitude": null,
          "slots": [
            {
              "slot": "items",
              "name": "Today’s items",
              "need": "required",
              "many": true,
              "content": "to supply"
            },
            {
              "slot": "date",
              "name": "Date it applies to",
              "need": "required",
              "content": "to supply"
            }
          ],
          "why": "Menus that change daily: what’s on today, dated.",
          "copy": {
            "formula": "[What’s different this week, dated] + [price]",
            "why_it_works": "Shows any price that only applies now, dated, so the main list stays true.",
            "illustrative_example": "“Tuesday 14 October: pumpkin soup £—, lamb flatbread £—.”"
          }
        },
        {
          "module": "faq",
          "name": "Questions people ask",
          "jobs": [
            "reassure"
          ],
          "status": "optional",
          "role": "Reassurance",
          "latitude": null,
          "slots": [
            {
              "slot": "items",
              "name": "Question and answer",
              "need": "required",
              "many": true,
              "content": "to supply"
            }
          ],
          "why": "Payment, deposits, finance, cancellations: only if people ask.",
          "copy": {
            "formula": "[Real customer objection + direct answer]",
            "why_it_works": "Answers the doubts that stop people acting, in the words they use when they ask.",
            "illustrative_example": "“Can you do gluten-free? Yes: every dish on the menu is marked, and the kitchen can adapt most of them.”"
          }
        },
        {
          "module": "action",
          "name": "Main action",
          "jobs": [
            "act"
          ],
          "status": "include",
          "role": "Primary action",
          "latitude": null,
          "slots": [
            {
              "slot": "primary",
              "name": "Primary action (a role, not a label)",
              "need": "required",
              "content": "to supply"
            },
            {
              "slot": "secondary",
              "name": "Second route",
              "need": "optional",
              "content": "to supply"
            },
            {
              "slot": "reassurance",
              "name": "Terms at the action",
              "need": "conditional",
              "content": "to supply"
            }
          ],
          "why": "Book, order or ask for a quote from the page where the decision is made.",
          "copy": {
            "formula": "[Book or order + for when], with [deposit, group size or order cut-off]",
            "why_it_works": "People booking a table or ordering ahead want it done in one step. Naming the time and any deposit up front avoids a booking that falls through later.",
            "illustrative_example": "“Book a table for tonight”, with “Groups of 8+ pay a deposit” beside it."
          }
        }
      ]
    },
    {
      "page": "book",
      "name": "Book or order",
      "route": "/book",
      "page_pattern": "enquiry",
      "status": "include",
      "job": "Book or order, or hand off to the system that does.",
      "modules": [
        {
          "module": "form",
          "name": "The form",
          "jobs": [
            "act",
            "recover"
          ],
          "status": "include",
          "role": "Conversion point",
          "latitude": null,
          "slots": [
            {
              "slot": "fields",
              "name": "Fields",
              "need": "required",
              "many": true,
              "content": "to supply"
            },
            {
              "slot": "attach",
              "name": "Attachments (photos, documents)",
              "need": "conditional",
              "content": "to supply"
            },
            {
              "slot": "consent",
              "name": "What happens to their details",
              "need": "required",
              "content": "to supply"
            },
            {
              "slot": "error",
              "name": "Error summary and messages",
              "need": "required",
              "content": "to supply"
            }
          ],
          "why": "Only what is needed to respond; attachments where photos help.",
          "copy": {
            "formula": "[What they’re asking for] + [only the fields you need] + [what happens to their details] + [send + what happens next]",
            "why_it_works": "Makes asking easy: only the fields you need, and a clear promise of what happens next.",
            "illustrative_example": "“Book a table” with date, time, people and phone. Button: “Request this table, we confirm by text”."
          }
        },
        {
          "module": "steps",
          "name": "What happens next",
          "jobs": [
            "explain",
            "reassure"
          ],
          "status": "include",
          "role": "What happens next",
          "latitude": null,
          "slots": [
            {
              "slot": "step",
              "name": "Step",
              "need": "required",
              "many": true,
              "content": "to supply"
            },
            {
              "slot": "when",
              "name": "Time per step",
              "need": "optional",
              "content": "to supply"
            },
            {
              "slot": "cost",
              "name": "Cost per step",
              "need": "optional",
              "content": "to supply"
            }
          ],
          "why": "What happens after sending, and when.",
          "copy": {
            "formula": "[What they do first] → [what you do next + how fast] → [the work] → [how it ends + what it costs]",
            "why_it_works": "Takes the unknown out of getting in touch: what happens after the first click, who does it, how long it takes and what it costs.",
            "illustrative_example": "“1 You pick a day and time. 2 We confirm by text. 3 Your table is held when you arrive. 4 You pay at the table.”"
          }
        },
        {
          "module": "action",
          "name": "Main action",
          "jobs": [
            "act"
          ],
          "status": "optional",
          "role": "Primary action",
          "latitude": null,
          "slots": [
            {
              "slot": "primary",
              "name": "Primary action (a role, not a label)",
              "need": "required",
              "content": "to supply"
            },
            {
              "slot": "secondary",
              "name": "Second route",
              "need": "optional",
              "content": "to supply"
            },
            {
              "slot": "reassurance",
              "name": "Terms at the action",
              "need": "conditional",
              "content": "to supply"
            }
          ],
          "why": "The second route (call, message) for people who won’t fill a form.",
          "copy": {
            "formula": "[Book or order + for when], with [deposit, group size or order cut-off]",
            "why_it_works": "People booking a table or ordering ahead want it done in one step. Naming the time and any deposit up front avoids a booking that falls through later.",
            "illustrative_example": "“Book a table for tonight”, with “Groups of 8+ pay a deposit” beside it."
          }
        },
        {
          "module": "confirmation",
          "name": "It’s sent",
          "jobs": [
            "reassure",
            "recover"
          ],
          "status": "include",
          "role": "Conversion point",
          "latitude": null,
          "slots": [
            {
              "slot": "reference",
              "name": "Reference",
              "need": "optional",
              "content": "to supply"
            },
            {
              "slot": "next",
              "name": "What happens next, and when",
              "need": "required",
              "content": "to supply"
            },
            {
              "slot": "contact",
              "name": "Contact meanwhile",
              "need": "required",
              "content": "to supply"
            }
          ],
          "why": "After sending: a reference, the next step and when, a contact.",
          "copy": {
            "formula": "[It’s sent] + [what happens next, and when] + [how to reach you meanwhile]",
            "why_it_works": "Confirms it worked and says what to expect, so nobody sends it twice or rings to check.",
            "illustrative_example": "“Requested. We’ll text you to confirm within the hour. Running late? Call —.”"
          }
        }
      ]
    }
  ],
  "left_out": [
    {
      "what": "page: Locations",
      "why": "left out because locations is “One”"
    }
  ],
  "constraint_profiles": [],
  "field_rules": "Not applied. Rules for this field (what it must show) will add requirements to existing sections once they are approved; they never change the structure.",
  "open_questions": [
    "Do clients care which person they get?",
    "How many languages?",
    "Whether a salon books a slot (venue) or a person (practice).",
    "Where online-only shops that take orders by message belong.",
    "Whether an events mode belongs here."
  ],
  "receives": {
    "design": [
      "pages[].name, job and order (the hierarchy)",
      "pages[].modules[] in order, with jobs and role",
      "status “depends” (unresolved) vs optional",
      "page_frame with required/recommended strength",
      "pages[].phone_first and phone_notes (the phone order)",
      "primary_action label and intent"
    ],
    "build": [
      "pages[].route and one_per (routes and repeating pages)",
      "pages[].modules[] in order",
      "modules[].slots with need, many and any profile obligation",
      "primary_action.intent and second_routes (implemented per platform)",
      "page_frame (required/recommended)",
      "left_out (must stay out)",
      "entities, when the project names them"
    ]
  },
  "handoff": {
    "design": "Read pages[] in order and modules[] in order: that is the hierarchy. jobs[] say what each module must achieve; status \"depends\" means unresolved, not optional. Look, type, imagery and Elements are Design’s; nothing here prescribes them.",
    "build": "Make one route per page (one per entity where one_per is set), modules in the given order, every slot with need \"required\" filled before ship. Implement each action so it achieves its intent on this project’s platform. Do not read why as an instruction.",
    "qa": "Check that each included module does its jobs, required slots are filled with real content, left_out items stayed out, and the primary action leads where its label says.",
    "copy": "Write each section’s copy from copy.formula and the project’s real facts; check it against copy.why_it_works. Never reproduce copy.illustrative_example or publish text in square brackets. The guidance is a set of recommendations to test with real visitors, not a promise of results."
  }
}
The research behind it9 statements · 4 sourced · 3 untested or unknown

Use it when

  • The business has premises and opening hours, and the visit is the point. observedour brief studyour brief studyour brief study
  • Many people look a place up in a map app first and come to the site to confirm hours, holiday closings and what that location offers. sourcedNN/g 2019

Not when

  • You sell mainly online with delivery.
  • Each thing you sell needs its own page (a car dealer, a furniture showroom with a catalog). Listings, rooms and tours →
  • Clients pick a named practitioner and pay for advice or treatment by appointment (a clinic, though a salon is open: see unknowns). Advisers, practices and clinics →

Boundary cases

Which sections go on which pages

● required · ◐ conditional on the brief · ○ common, not required. Select a section to find it in the drawings.

Job on the page · sectionHomeMenu or price listLocationsBook or order
PositioningRequired
Local informationRequiredRequired
ConditionalRequired
Primary actionRequiredRequiredRequiredCommon
The offerCommonCommon
PriceConditionalRequired
Trust & proofConditionalCommon
Supporting evidenceCommon
ReassuranceCommon
Service navigationCommon
Conversion pointRequired
Required
What happens nextRequired

What the research says

  • 21 of the briefs we studied asked for what’s on today, or for a one-page site. observedAesthetary
  • NN/g: people come back to the site to confirm hours, holiday closings and services at a location; contact pages should give a map-linked address, phone and hours. schema.org models opening and special hours as structured facts. sourcedNN/g 2019NN/g 2019schema.org
  • Menus as PDFs fail on phones; NN/g’s evidence includes a menu PDF a user gave up on. The FSA accepts written allergen information on a menu and requires it before purchase when food is sold at a distance. sourcedNN/g 2020FSA

Rules for your field

What a business in this field must show (a registration, prices with tax) depends on its own rules, not on this pattern. Those rules are still being worked out, so none are applied here as requirements.

Common structural mistakes

  • The menu as a PDF or a photo of a chalkboard. our reasoning
  • Hours that are wrong for holidays. People trust the map app’s hours over the site’s. sourcedNN/g 2019
  • An embedded map with no address in text. our reasoning