Example · all examples
Family vacation
This Roadbook represents a four-day family trip to Normandy: two adults, a teenager and a seven-year-old in surprise mode (future days hidden for her), a rented gîte with rooms and their occupants, real-looking tickets (QR and Code 128 payloads, per-traveler memberId, timed slots), wind and rain alternatives, a day-level plan B, outfit hints and a packing checklist.
⤓ Download family-vacation.roadbook.json View raw JSON Validate Preview
What this example shows#
It shows how a leisure trip with kids uses the traveler model: surpriseMode: "day" on a child member, dietary on an adult, memberIds on an item that concerns everyone explicitly, and a deposit payment on the stay. Ticket payloads here are obviously fictional (…EXAMPLE) — in a real file they are the exact string encoded in the barcode.
Features demonstrated#
- Member (kind, age, surpriseMode, dietary)
- Booking rooms, payment (deposit)
- Ticket (payload, format, memberId, date/time)
- Alternative with windThreshold
- Day planB and route
- outfit / outfitNote
Manifest tags: children surpriseMode rooms tickets qr code128 memberId alternatives wind planB outfit checklist dietary — see examples/index.json.
Excerpt#
Abridged — the full file is the reference.
{
"members": [
{
"id": "m3",
"name": "Noa",
"role": "viewer",
"kind": "teen",
"age": 14
},
{
"id": "m4",
"name": "Lila",
"role": "viewer",
"kind": "child",
"age": 7,
"surpriseMode": "day"
}
],
"bookings": [
{
"id": "b-gite",
"type": "stay",
"status": "confirmed",
"title": "Gîte du Bessin",
"dates": "3 nights, Apr 10–13",
"checkin": "17:00",
"checkout": "10:00",
"breakfastIncluded": false,
"rooms": [
{
"label": "Parents",
"memberIds": [
"m1",
"m2"
]
},
{
"label": "Kids",
"memberIds": [
"m3",
"m4"
]
}
],
"address": "Route d'Arromanches, Bayeux",
"instructions": "Key box next to the blue door — code sent by SMS the day before.",
"price": 420,
"payment": {
"status": "deposit",
"deposit": 120,
"note": "Balance in cash on arrival"
},
"refs": [
{
"label": "Booking",
"value": "GITE-EXAMPLE-42",
"sensitive": true
}
]
},
{
"id": "b-abbey",
"type": "activity",
"status": "confirmed",
"title": "Abbey of Mont-Saint-Michel — timed entry",
"price": 26,
"tickets": [
{
"id": "t2",
"label": "Adult",
"code": "ABB-1001",
"memberId": "m1",
"payload": "ABB1001EXAMPLE",
"format": "code128",
"date": "2027-04-12",
"time": "10:30"
},
{
"id": "t3",
"label": "Adult",
"code": "ABB-1002",
"memberId": "m2",
"payload": "ABB1002EXAMPLE",
"format": "code128",
"date": "2027-04-12",
"time": "10:30"
}
]
}
]
}
Use it#
- As a reader test: load the file in your player or importer; it must open without error and unknown fields (if you add some) must survive a round-trip.
- As a writer reference: copy the shapes you need — the specification documents every field and the JSON Schema validates the structure.
- With an AI assistant: hand it the file URL as a shape reference ("produce a Roadbook like family-vacation.roadbook.json for …"); then validate the output.