A Visitor Itinerary Builder for a Craft Fair Directory
The idea
A craft fair directory lists makers, stalls and workshops. Visitors often want to say, "I will see these five first". An itinerary builder lets them arrange listings in a personal order. The risk is that the page blends three different things: the order the visitor prefers to browse, when each stall is open, and whether anything is booked. This article proposes keeping them as three separate layers. It is an example workflow, not a report from a real fair, and it makes no claims about routes or safety.
The three layers
- Browsing order: a visitor's own ranked list. It is only a preference. It has no time attached.
- Opening information: the hours the organiser has published for each stall or session, shown as published text.
- Bookings: anything that needs a reservation, such as a workshop place. This is a separate action with its own confirmation.
The itinerary shows layer 1 by default. Layers 2 and 3 appear as labelled notes attached to each entry, never merged into the order.
Inputs
- A directory of hypothetical sample stalls with a name, a category and optional published hours.
- A flag marking which entries have a bookable session.
- A visitor action to add, remove and reorder entries.
Decision branches
When a visitor adds an entry, check its data.
- If the entry has published hours, show them beside it as text, with the label "hours as published".
- If hours are missing, show "hours not listed" and do not guess.
- If the entry is bookable, show a separate button reading "Book a place", leading to its own flow. Adding it to the itinerary does not book it.
- If the visitor puts a stall first whose published hours begin later than another, keep their order and show both hours. Do not silently reorder or warn as if they made an error. An optional gentle note, such as "opens later than the next item", is a choice, not a rule.
Stop conditions
Hold the feature back from release if any of these happen:
- Reordering changes a booking, or a booking changes the order.
- The itinerary displays a suggested walking time, a route or any statement about safety or crowds.
- An entry shows hours that the organiser has not published.
- Saving the itinerary implies the visitor has a reservation.
Worked example
Imagine a visitor adds three hypothetical stalls: a ceramics stall, a leatherwork stall and a candle workshop. They order them candle, ceramics, leather. The candle workshop is bookable and lists a session at a published time. The ceramics stall lists hours. The leather stall lists none.
The itinerary reads: 1. Candle workshop, session as published, "Book a place" button, status not booked. 2. Ceramics stall, hours as published. 3. Leather stall, hours not listed. The visitor's order stays exactly as chosen. Pressing "Book a place" opens the separate booking step, and only its confirmation changes the status line.
Wording to use
Title the list "My browsing order" rather than "My schedule" or "My route", since neither a time plan nor a path is promised. Under the list, add a sentence: "Check each entry for published hours. Bookings are separate."
Acceptance test
Run this with six hypothetical entries, two of them bookable and one with no hours.
- Add all six and reorder them. Confirm the order persists after leaving and returning to the page.
- Confirm each entry shows hours as published, or the text "hours not listed".
- Add a bookable entry without pressing the booking button. Confirm its status stays "not booked".
- Complete one booking. Confirm only that entry's status changes and the order stays the same.
- Search the page for any route, timing or safety wording. There should be none.
The test passes when all five checks hold.
Conclusion
Keeping browsing order, published hours and bookings in separate layers lets visitors plan in their own way without the page promising anything it cannot support.