Alex Dunmow f2c8b3643c fix(art-deco): Wave B remediation — drop stray reservation strip + header divider, unbreak hero override, size icon SVGs, richer seed articles + gold-room media
- master_pages: remove orphaned reservation strip (marquee) and header fan divider (default) — the strip stacked under the navbar as a duplicate full-width band
- hero override: eyebrow/headline/sub/desc use |get:"text" so bare-string fields no longer error the whole block to empty (was rendering a dead band above home content)
- divider override: replace ::icon:sm:: shortcode (rendered an unsized <use> SVG that ballooned — the broken About 'tally-mark' divider) with an explicit width/height-sized inline SVG
- SVG geometry guard: explicit width/height on all <use> icon SVGs across overrides (testimonial stars + inherited set)
- seed: expand 3 blog articles to ~9 paragraphs (1926 supper-club voice) so articles fill the viewport; wire gold-room.svg media into the private-dining block
- re-capture 6 gallery shots (home/about/article x light+dark) on a fresh reprovisioned instance

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 15:53:47 +08:00

210 lines
19 KiB
JSON

{
"demo": true,
"settings": {
"merge": {
"companyName": "Maison Doré",
"tagline": "A supper club in the grand manner."
}
},
"media": [
{
"id": "d3c0d3c0-a11d-4ec0-9000-000000000001",
"file": "media/gold-room.svg",
"alt": "Gilded Art Deco fan crest — the Gold Room at Maison Doré",
"folder": "Demo"
}
],
"data_tables": [
{
"key": "contact_submissions",
"name": "Reservation Enquiries",
"description": "Seeded contact-form submissions for the Maison Doré demo. A submission becomes a row here and emails the site admins.",
"columns": [
{ "key": "name", "label": "Name", "type": "text", "required": true },
{ "key": "email", "label": "Email", "type": "email", "required": true },
{ "key": "party", "label": "Party size", "type": "text", "required": false },
{ "key": "message", "label": "Message", "type": "text", "required": true }
]
}
],
"pages": [
{
"slug": "/",
"title": "Maison Doré",
"template_key": "landing",
"blocks": [
{
"block_key": "hero",
"title": "Hero",
"slot": "main",
"sort_order": 1,
"content": {
"template": "centered",
"eyebrow": "Established 1926",
"headline": "Maison Doré",
"subheadline": "A supper club in the grand manner.",
"description": "Dinner and late suppers, served under gilded ceilings. A short tasting menu, a long cellar, and a room built for the evening.",
"ctaPrimary": { "text": "Reserve a table", "url": "/contact" },
"ctaSecondary": { "text": "Read the menu", "url": "#tasting" }
}
},
{
"block_key": "art-deco:chef_signature",
"title": "Chef's Signature",
"slot": "main",
"sort_order": 2,
"content": {
"eyebrow": "Chef's signature",
"dish": "Gold-leaf oyster, champagne mignonette",
"note": "The dish that opened the room in 1926. We still serve it the same way, on ice, one at a time.",
"chef": "Elise Marchand, Head Chef"
}
},
{
"block_key": "art-deco:menu",
"title": "Tasting Menu",
"slot": "main",
"sort_order": 3,
"content": {
"title": "Chef's Tasting",
"courses": [
{ "name": "Oysters, champagne mignonette", "description": "Half a dozen, on ice.", "price": "$32" },
{ "name": "Consommé doré", "description": "Clarified beef broth, tarragon, gold leaf.", "price": "$24" },
{ "name": "Turbot, beurre blanc", "description": "Line-caught, roasted on the bone.", "price": "$58" },
{ "name": "Crown of lamb", "description": "Herbs, salt-baked roots, jus.", "price": "$62" },
{ "name": "Grand Marnier soufflé", "description": "To finish. Order at the start.", "price": "$28" }
]
}
},
{
"block_key": "art-deco:private_dining",
"title": "Private Dining",
"slot": "main",
"sort_order": 4,
"content": {
"eyebrow": "Private dining",
"title": "The Gold Room",
"image": "d3c0d3c0-a11d-4ec0-9000-000000000001",
"description": "A room of your own behind the main floor. One long table, a dedicated maître d', and the full cellar. We write the menu with you.",
"seats": "Seats 2 to 14",
"minimum": "From $2,400",
"enquireLabel": "Enquire",
"enquireUrl": "/contact",
"mediaPosition": "left"
}
}
]
},
{
"slug": "/about",
"title": "The House",
"template_key": "default",
"blocks": [
{ "block_key": "heading", "title": "Heading", "slot": "main", "sort_order": 1, "content": { "text": "The House", "level": 1 } },
{ "block_key": "rich-text", "title": "Story", "slot": "main", "sort_order": 2, "content": { "html": "<p>Maison Doré opened on a narrow street in 1926 and has kept its hours ever since. We take reservations for dinner and hold a few tables back for late suppers.</p><p>The kitchen runs a short tasting menu that changes with the season. The cellar runs long. The room stays the same, which is the point.</p>" } },
{ "block_key": "divider", "title": "Divider", "slot": "main", "sort_order": 3, "content": { "variant": "ornament", "icon": "lucide:diamond" } },
{ "block_key": "quote", "title": "Quote", "slot": "main", "sort_order": 4, "content": { "style": "block", "align": "center", "quote": "Come for dinner, stay for the last pour.", "attribution": "The House" } }
]
},
{
"slug": "/blog",
"title": "From the Floor",
"template_key": "blog-index",
"blocks": [
{ "block_key": "card", "title": "Post: Gold Standard", "slot": "main", "sort_order": 1, "content": { "layout": "vertical", "title": "The gold standard", "text": "<p>Why one oyster, served one at a time, still opens every table.</p>", "link": "/blog/the-gold-standard", "linkLabel": "Read on" } },
{ "block_key": "card", "title": "Post: A Night", "slot": "main", "sort_order": 2, "content": { "layout": "vertical", "title": "A night at the club", "text": "<p>From the first cocktail to the last soufflé. How an evening unfolds.</p>", "link": "/blog/a-night-at-the-club", "linkLabel": "Read on" } },
{ "block_key": "card", "title": "Post: Cellar", "slot": "main", "sort_order": 3, "content": { "layout": "vertical", "title": "Notes from the cellar", "text": "<p>What we pour and why. A short walk through the list.</p>", "link": "/blog/notes-from-the-cellar", "linkLabel": "Read on" } }
]
},
{
"slug": "/blog/the-gold-standard",
"title": "The gold standard",
"template_key": "article",
"parent_slug": "/blog",
"blocks": [
{ "block_key": "heading", "title": "Title", "slot": "main", "sort_order": 1, "content": { "text": "The gold standard", "level": 1 } },
{ "block_key": "rich-text", "title": "Body", "slot": "main", "sort_order": 2, "content": { "html": "<p>The oyster came first, in 1926, and it has not left the menu since. Before the tables were dressed, before the band had a name, before the sign above the door had dried, the kitchen had settled on one dish to open the room. We serve it still on ice, one at a time, with a champagne mignonette and a single leaf of gold.</p><p>People ask why only one. The honest answer is that a supper club is a matter of tempo, and the first thing on the table sets it. A dozen oysters is generosity; one oyster, presented as though it were the only one in the house, is an argument about how the evening intends to proceed. Slowly. Deliberately. With attention paid.</p><p>The mignonette is older than the room. A cook we no longer have the name of set down the proportions on the back of a wine list: shallots cut fine enough to disappear, a good vinegar cut with a little champagne, cracked pepper, and nothing else that would announce itself. It has been copied and it has been improved upon, and every improvement has been quietly abandoned. We make it the way it was written.</p><p>The gold leaf is not decoration, whatever the photographs suggest. It is a signature — the way a house marks a dish as its own. A single flake, laid on with a dry brush at the pass, catches the low light of the room and tells you, without a word, where you are sitting. It tastes of nothing. That is the point of it.</p><p>Service is a small ceremony. The plate is carried in two hands, set down without a sound, and left alone. No pepper is offered. No lemon is brought unless it is asked for, and it is not encouraged. The oyster is not garnished at the table; the table is not the place for it. Everything that could be decided has been decided in the kitchen already.</p><p>We take the shells from a single bed on the cold side of the coast, from a grower who has sold to the house for three generations and who still telephones when the water turns. They arrive closed, heavy, and smelling of the sea. A shucker who has been with us longer than most of the room opens them to order, never in advance, because an oyster opened early is an oyster that has begun to forget itself.</p><p>The ice is shaved, not cubed, and banked so the shell sits level and spills nothing. A cook once suggested we set the oyster on rock salt for the look of it. The suggestion was heard and not taken. Salt draws the liquor out; ice keeps it in. The liquor is the dish.</p><p>What follows on the menu changes with the season and the mood of the kitchen — the consommé, the turbot, the crown of lamb, the soufflé ordered at the start. But the oyster does not change, because it is not a course so much as a promise. It says: we have thought about this. We will keep thinking about it, right through to the last pour.</p><p>Regulars have their rituals. One takes it with nothing but the mignonette and closes his eyes. One tips the shell and drinks the liquor first, then eats the oyster after, which the kitchen considers correct. One has ordered it every Friday for eleven years and has never once been offered a menu before it arrives.</p><p>That is the gold standard, and it has very little to do with the gold. It is the standard of doing one small thing exactly, every night, for a hundred years less six, and letting the rest of the meal follow from it. Come for dinner. Start with the oyster. Let the room take it from there.</p>" } }
]
},
{
"slug": "/blog/a-night-at-the-club",
"title": "A night at the club",
"template_key": "article",
"parent_slug": "/blog",
"blocks": [
{ "block_key": "heading", "title": "Title", "slot": "main", "sort_order": 1, "content": { "text": "A night at the club", "level": 1 } },
{ "block_key": "rich-text", "title": "Body", "slot": "main", "sort_order": 2, "content": { "html": "<p>Doors open at six. For the first hour the room belongs to the staff — cloths pressed, silver counted, candles trimmed to the same height along every table — and then the first guests arrive and it belongs to them until it is dark outside and dark again on the far side of midnight.</p><p>The first cocktail comes before the menu, always. It is a house rule old enough that no one remembers making it. A drink is put in your hand before a decision is asked of you, on the theory that no one should have to choose anything until they have been given a moment to arrive. The moment is the point of a supper club. Everything else is arranged around it.</p><p>Dinner runs five courses and is not to be hurried. The kitchen sends when the table is ready and not before, reads the pace of a room the way a good conductor reads an orchestra, and would rather hold a plate two minutes than land it on a conversation that has not finished. If you are in a hurry, the kitchen will know, and it will be sorry, and it will still not rush the turbot.</p><p>The soufflé is ordered at the start. This surprises first-timers and delights everyone else. A Grand Marnier soufflé cannot be summoned at the end of a meal on a whim; it must be begun while the oysters are still on ice, folded and set and watched, so that it arrives at the table risen and warm at the exact moment the last plate is cleared. To order it early is to plan your evening. We approve of planning your evening.</p><p>Between courses there is room to breathe. The cellar sends up a glass you did not order but should have. The maître d' passes and says nothing, which is its own kind of service. A regular two tables over lifts a glass to a regular she has never spoken to. The room does this on its own; we only set the conditions.</p><p>The band plays after nine. Before then the music is low and comes from nowhere in particular; after nine it comes from the corner and has names attached to it. The songs are old and the tempo is kind. No one is made to dance and a good many people do, in the narrow space between the bar and the last banquette, which was left narrow on purpose.</p><p>Late suppers begin at ten. The full menu closes and a shorter one opens — the oyster still, of course, and a plate of something warm, and whatever the kitchen has kept back for the hours when the room thins to the people who did not want to leave. These are the best hours. The staff will not tell you so, but they are.</p><p>Somewhere past midnight the pace changes again. The band puts down its instruments and picks up a glass. The kitchen sends out what it is eating itself. Conversations that started at separate tables have found their way to the bar. This is not on any menu and cannot be reserved.</p><p>We do not announce a closing time, because the club closes when the last table is ready to leave and not one minute sooner. The candles are replaced if they burn down. The cellar stays open. When the room is finally empty the staff sit where the guests sat, and that is a night at the club — begun with a drink you did not choose, ended at an hour no one agreed on, and worth every course in between.</p>" } }
]
},
{
"slug": "/blog/notes-from-the-cellar",
"title": "Notes from the cellar",
"template_key": "article",
"parent_slug": "/blog",
"blocks": [
{ "block_key": "heading", "title": "Title", "slot": "main", "sort_order": 1, "content": { "text": "Notes from the cellar", "level": 1 } },
{ "block_key": "rich-text", "title": "Body", "slot": "main", "sort_order": 2, "content": { "html": "<p>The list is long and the choices are few, by design. A cellar can be built two ways: wide, to have a little of everything, or deep, to have the right thing in quantity. We have always built ours deep. There are fewer names on our list than on most, and more bottles behind each one.</p><p>We pour champagne by the glass and mean it. Not one champagne — several, opened through the night so the glass in your hand was drawn from a bottle opened within the hour, never the morning. A supper club that will not open a fresh bottle for a single glass is not a supper club we would care to sit in.</p><p>The bench of burgundy is the pride of the room. It was begun by the first owner, who bought more than he could sell in the belief that a cellar is a promise to the future, and it has been added to every year since by people who took the promise seriously. Some of those bottles have been waiting under this floor longer than most of the staff have been alive.</p><p>We keep a small shelf of older bottles for the ones who ask. It is not printed. It is not offered. It exists for the guest who leans in and says, in effect, surprise me, and is prepared to be surprised at the price as well as the pour. The sommelier keeps the shelf in his head and brings it out for the right question.</p><p>The list favours the grower over the label. We would rather pour a careful wine from a name you have never heard than a famous one made carelessly, and we will tell you as much if you let us. A great many of our bottles come from families the house has bought from for decades, some of whom now send the grandchildren of the people who first shook hands on the arrangement.</p><p>Tell the sommelier what you are eating. This is the whole of the method and it is worth more than any list. He is not there to sell you the dear bottle; he is there to put the right glass beside the right plate, and the right glass is very often not the dear one. Trust it. The pairing is the point, and the pairing takes care of itself.</p><p>There is a house style to the pouring, too. Glasses are filled less than you might expect — enough to swirl, never enough to warm — and topped through the course so the wine keeps pace with the food. An empty glass is considered a small failure of attention. A glass filled to the brim is considered a larger one.</p><p>For the table that cannot decide, we keep a pairing that runs the length of the tasting menu, a glass to each course, chosen the same afternoon by whoever is on the floor that night. It is never written down and never twice the same. Order it and you are drinking the sommelier's evening, which is the best thing on the list and the one thing you cannot ask for by name.</p><p>What we pour and why is, in the end, a long answer to a short question, and the short answer is this: we buy carefully, we keep patiently, and we open generously. Come hungry, say what you are eating, and let the cellar do the rest. It has been doing it since 1926 and it has not been wrong often.</p>" } }
]
},
{
"slug": "/contact",
"title": "Reservations",
"template_key": "contact",
"blocks": [
{
"block_key": "contact-form",
"title": "Reservation Enquiry",
"slot": "main",
"sort_order": 1,
"content": {
"heading": "Request a table",
"description": "Tell us the date, the hour and the party. We will confirm by email.",
"submitLabel": "Request a table",
"successMessage": "Thank you. Your table request has been received. We will confirm by email.",
"fields": [
{ "name": "name", "label": "Your name", "type": "text", "required": true, "width": "half" },
{ "name": "email", "label": "Email", "type": "email", "required": true, "width": "half" },
{ "name": "party", "label": "Party size", "type": "text", "required": false, "width": "half" },
{ "name": "message", "label": "Date, time and any notes", "type": "textarea", "required": true, "width": "full" }
],
"formConfig": { "enabled": true, "captchaEnabled": false, "targetTable": "contact_submissions" }
}
},
{
"block_key": "hours-location",
"title": "Hours & Location",
"slot": "aside",
"sort_order": 1,
"content": {
"heading": "Hours",
"hours": [
{ "day": "Tuesday to Thursday", "hours": "6pm to late" },
{ "day": "Friday to Saturday", "hours": "5pm to late" },
{ "day": "Sunday", "hours": "5pm to 10pm" },
{ "day": "Monday", "closed": true }
],
"specialHoursNote": "Late suppers from 10pm, Friday and Saturday.",
"address": "12 Gilt Lane\nThe Old Quarter",
"phone": "+1 555 0126"
}
}
]
},
{
"slug": "/login",
"title": "Members",
"template_key": "auth",
"blocks": [
{ "block_key": "auth-form", "title": "Sign in", "slot": "main", "sort_order": 1, "content": { "default_tab": "login", "show_social": false } },
{ "block_key": "text", "title": "Foot", "slot": "footer", "sort_order": 1, "content": { "text": "<p>Members book priority tables and private-room dates.</p>" } }
]
}
],
"menu_items": [
{ "menu": "main", "label": "Home", "page_slug": "/", "sort_order": 1 },
{ "menu": "main", "label": "The House", "page_slug": "/about", "sort_order": 2 },
{ "menu": "main", "label": "From the Floor", "page_slug": "/blog", "sort_order": 3 },
{ "menu": "main", "label": "Reservations", "page_slug": "/contact", "sort_order": 4 }
]
}