Header wordmark leaked the gallery instance name ('Gallery
corporate-modernist') because the navbar master-page block set no
logoText, so it fell through to context.site.title (= the instance
name). Every correctly-rendering theme (art-deco, kindergarten,
terminal, gotham, noir) sets logoType/logoText on its navbar; this
theme was the only one that did not. Add logoText 'Meridian Advisory'
to both navbar master blocks (default + landing).
Seed: switch settings key to the fleet-standard companyName and add
settings.override.title so a consented customer install also sets the
real site title (SEO/meta/RSS/email); the gallery relies on the
master-page wordmark since demo-install override is grant-gated.
Expand the captured /blog/operations-reset article to 10 substantive
management-consulting paragraphs (was 2, stranding a dead band above
the footer); bring the other two articles to 5 paragraphs each.
bump to 0.4.0
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
126 lines
18 KiB
JSON
126 lines
18 KiB
JSON
{
|
|
"demo": true,
|
|
"settings": {
|
|
"merge": {
|
|
"companyName": "Meridian Advisory",
|
|
"tagline": "Strategy, operations, and risk counsel for boards."
|
|
},
|
|
"override": {
|
|
"title": "Meridian Advisory"
|
|
}
|
|
},
|
|
"data_tables": [
|
|
{
|
|
"key": "contact_submissions",
|
|
"name": "Contact submissions",
|
|
"description": "Messages sent from the Meridian Advisory contact form.",
|
|
"primary_key": "id",
|
|
"columns": [
|
|
{ "key": "name", "label": "Name", "type": "text", "required": true },
|
|
{ "key": "email", "label": "Email", "type": "email", "required": true },
|
|
{ "key": "organisation", "label": "Organisation", "type": "text", "required": false },
|
|
{ "key": "message", "label": "Message", "type": "text", "required": true }
|
|
]
|
|
}
|
|
],
|
|
"pages": [
|
|
{
|
|
"slug": "/",
|
|
"title": "Meridian Advisory",
|
|
"template_key": "full-width",
|
|
"reconcile_blocks": true,
|
|
"blocks": [
|
|
{ "block_key": "hero", "title": "Hero", "slot": "main", "sort_order": 1, "content": { "template": "left-aligned", "eyebrow": { "text": "B2B advisory" }, "headline": { "text": "Precise counsel for boards that move first" }, "subheadline": { "text": "We do strategy, operations, and risk work on a fixed scope. No retainers you cannot read." }, "ctaPrimary": { "text": "Book a working session", "url": "/contact" }, "ctaSecondary": { "text": "See how we work", "url": "/about" } } },
|
|
{ "block_key": "corporate-modernist:credential_bar", "title": "Credentials", "slot": "main", "sort_order": 2, "content": { "items": [ { "figure": "18", "label": "Years in practice" }, { "figure": "6", "label": "Sectors served" }, { "figure": "40+", "label": "Board engagements" }, { "figure": "3", "label": "Continents" } ] } },
|
|
{ "block_key": "corporate-modernist:capability_matrix", "title": "Capabilities", "slot": "main", "sort_order": 3, "content": { "eyebrow": "What we do", "heading": "Three disciplines, one team", "intro": "Every engagement draws on the same three capabilities. We assign a principal to each.", "columns": 3, "capabilities": [ { "mark": "circle", "title": "Strategy", "text": "Market entry, portfolio choices, and the operating model that carries them." }, { "mark": "triangle", "title": "Operations", "text": "Cost structure, process design, and the metrics a board can hold." }, { "mark": "square", "title": "Risk", "text": "Controls, resilience, and the reporting that keeps regulators satisfied." } ] } },
|
|
{ "block_key": "stats", "title": "Outcomes", "slot": "main", "sort_order": 4, "content": { "heading": "Outcomes we measure", "columns": 3, "countUp": false, "items": [ { "value": "3.2", "suffix": "x", "label": "Median return on engagement" }, { "value": "90", "suffix": " days", "label": "Time to first decision" }, { "value": "12", "label": "Week average engagement" } ] } },
|
|
{ "block_key": "corporate-modernist:engagement_process", "title": "Process", "slot": "main", "sort_order": 5, "content": { "eyebrow": "How we work", "heading": "A fixed path from brief to handover", "steps": [ { "title": "Frame", "text": "We agree the question and the scope in one working session." }, { "title": "Diagnose", "text": "We gather evidence and test it against the board's own numbers." }, { "title": "Decide", "text": "We present options with a clear recommendation and the trade-offs." }, { "title": "Hand over", "text": "We leave the model, the plan, and the owners in place." } ] } },
|
|
{ "block_key": "cta", "title": "Closing CTA", "slot": "main", "sort_order": 6, "content": { "background": "band", "heading": "Book a working session", "text": "Ninety minutes with a principal. No pitch deck.", "primaryLabel": "Request a session", "primaryUrl": "/contact" } }
|
|
]
|
|
},
|
|
{
|
|
"slug": "/about",
|
|
"title": "About",
|
|
"template_key": "default",
|
|
"reconcile_blocks": true,
|
|
"blocks": [
|
|
{ "block_key": "heading", "title": "Heading", "slot": "main", "sort_order": 1, "content": { "text": "A small firm by design", "level": 1 } },
|
|
{ "block_key": "text", "title": "Intro", "slot": "main", "sort_order": 2, "content": { "text": "<p>Meridian Advisory keeps a short bench. Every engagement is led by a principal, not passed to a junior team. We take fewer clients so we can go deeper on each one.</p>" } },
|
|
{ "block_key": "corporate-modernist:capability_matrix", "title": "Values", "slot": "main", "sort_order": 3, "content": { "eyebrow": "How we operate", "heading": "What holds across every brief", "columns": 3, "capabilities": [ { "mark": "square", "title": "Fixed scope", "text": "You know the price and the deadline before we start." }, { "mark": "circle", "title": "Evidence first", "text": "We argue from your data, not from a template deck." }, { "mark": "triangle", "title": "Clean handover", "text": "We finish by making ourselves unnecessary." } ] } },
|
|
{ "block_key": "team", "title": "Team", "slot": "main", "sort_order": 4, "content": { "heading": "The principals", "layout": "grid", "columns": 3, "members": [ { "name": "A. Reyes", "role": "Strategy", "bio": "Two decades in corporate strategy and market entry." }, { "name": "K. Osei", "role": "Operations", "bio": "Process and cost work across manufacturing and services." }, { "name": "M. Lindqvist", "role": "Risk", "bio": "Controls and resilience for regulated industries." } ] } },
|
|
{ "block_key": "corporate-modernist:case_study_card", "title": "Case study", "slot": "main", "sort_order": 5, "content": { "client": "Regional bank", "metric": "31%", "label": "Reduction in cost to serve", "summary": "A twelve-week operations review that reset the branch operating model.", "href": { "label": "Read the case", "href": "/blog/operations-reset" } } }
|
|
]
|
|
},
|
|
{
|
|
"slug": "/blog",
|
|
"title": "Insights",
|
|
"template_key": "blog-index",
|
|
"reconcile_blocks": true,
|
|
"blocks": [
|
|
{ "block_key": "card", "title": "Post 1", "slot": "main", "sort_order": 1, "content": { "title": "Resetting a branch operating model", "text": "<p>What changed when a regional bank moved from headcount targets to cost-to-serve.</p>", "link": "/blog/operations-reset", "linkLabel": "Read" } },
|
|
{ "block_key": "card", "title": "Post 2", "slot": "main", "sort_order": 2, "content": { "title": "Reading a risk register the board will use", "text": "<p>Most registers are written for auditors. Here is how to write one for directors.</p>", "link": "/blog/risk-register", "linkLabel": "Read" } },
|
|
{ "block_key": "card", "title": "Post 3", "slot": "main", "sort_order": 3, "content": { "title": "The ninety-day decision", "text": "<p>Why the first real decision should land inside three months, not six.</p>", "link": "/blog/ninety-day-decision", "linkLabel": "Read" } }
|
|
]
|
|
},
|
|
{
|
|
"slug": "/blog/operations-reset",
|
|
"parent_slug": "/blog",
|
|
"title": "Resetting a branch operating model",
|
|
"template_key": "article",
|
|
"reconcile_blocks": true,
|
|
"blocks": [
|
|
{ "block_key": "heading", "title": "Title", "slot": "main", "sort_order": 1, "content": { "text": "Resetting a branch operating model", "level": 1 } },
|
|
{ "block_key": "text", "title": "Body", "slot": "main", "sort_order": 2, "content": { "text": "<p>A regional bank came to us with a hard constraint and a soft one. The hard constraint was cost: the branch network ran at a cost to serve the board could no longer defend to its investors. The soft constraint was reputation: closing branches in the towns that had banked with the firm for a century was not on the table. The brief, in one line, was to cut the cost of the network without shrinking it.</p><p>The obvious answer was the wrong one. Every prior review had reached for the same lever, closing the smallest branches and rolling their customers into a larger site down the road. On a spreadsheet that lever works. In the field it moves cost rather than removing it, because the demand does not disappear with the building. It reappears as longer queues, higher attrition, and a call centre absorbing the overflow at a worse unit cost than the branch it replaced.</p><p>So we started where the board was most comfortable, with its own numbers. We took the management accounts the directors already trusted and treated every figure in them as a hypothesis rather than a fact. A cost-to-serve model is only as good as its assumptions about what staff actually do all day, and those assumptions are almost never measured. They are inherited.</p><p>To test them we spent a week inside four representative branches, logging every transaction and the time it consumed. Not a survey and not a workshop, but a straight count of the work as it happened. The picture that came back did not match the model. More than half of branch staff time went to back-office tasks that had drifted to the counter over the years: reconciliations, exception handling, compliance paperwork, and the small administrative jobs that no one had ever formally assigned to the front line.</p><p>That reframed the problem. The network was not carrying too many branches. It was carrying too many tasks per branch, and most of those tasks did not need a customer in front of them to be done. The cost was real, but it was in the work mix, not in the property.</p><p>The intervention followed from the diagnosis. We lifted the back-office work out of the branches and consolidated it into a single shared operations team, sized to the real volume rather than the headcount that history had left in each site. Branches kept the work that genuinely required presence and judgement: advice, complex transactions, and the relationships that brought the deposits in.</p><p>The harder change was cultural, not structural. Branch managers had come to measure themselves by activity, by how busy the floor looked, and a floor doing less back-office work looks quieter even when it is more productive. We replaced the crowded dashboard each manager had been chasing with one metric they could actually hold: cost to serve per active customer, reported monthly, owned by name.</p><p>A single metric does two things a dashboard cannot. It removes the argument about which number matters this quarter, and it makes the trade-offs visible to the person making them. When a manager can see that adding an hour of back-office work to the counter raises their one number, they stop asking for it back. The behaviour changes without a memo.</p><p>The results held because the design made them cheap to sustain. Cost to serve fell by roughly a third across the pilot branches inside two quarters, with no reduction in the network and no measurable hit to customer satisfaction. The shared team ran the consolidated work at a lower unit cost than the branches had, precisely because it was built for volume and specialisation rather than proximity.</p><p>We finished the way we try to finish every engagement, by making ourselves unnecessary. The model, the metric, and the reporting cadence stayed with the bank's own operations leadership, and the owners of each number were named before we left. A year on, the firm had extended the same operating model to the rest of the network without us. That is the outcome we measure: not the report we hand over, but the decision the client can keep making on their own.</p>" } }
|
|
]
|
|
},
|
|
{
|
|
"slug": "/blog/risk-register",
|
|
"parent_slug": "/blog",
|
|
"title": "Reading a risk register the board will use",
|
|
"template_key": "article",
|
|
"reconcile_blocks": true,
|
|
"blocks": [
|
|
{ "block_key": "heading", "title": "Title", "slot": "main", "sort_order": 1, "content": { "text": "Reading a risk register the board will use", "level": 1 } },
|
|
{ "block_key": "text", "title": "Body", "slot": "main", "sort_order": 2, "content": { "text": "<p>A risk register written for auditors lists everything. It is exhaustive by design, because its job is to prove that nothing was missed. A register written for directors does the opposite job. It ranks a few things, says who owns them, and helps a board decide where to spend its limited attention. The two documents look alike and serve almost opposite purposes, and most firms only own the first kind.</p><p>The tell is length. When a register runs to sixty lines, no director reads past the first page, and the risks that matter sink into the same grey list as the ones that do not. Completeness, past a point, is indistinguishable from noise. The board ends up governing by exception report rather than by the register itself.</p><p>We keep the top ten risks on a single page. Each has an owner named in person rather than by committee, a direction of travel since the last meeting, and a specific next action with a date. Everything else still exists, fully documented, in an appendix the auditors can have. The board's page is not the whole truth. It is the part of the truth a board can act on.</p><p>Ranking is the work most firms skip. It forces the executive team to agree, before the meeting, which risks are genuinely material this quarter, and that argument is uncomfortable because it cannot hide behind a long list. But a board that has seen the ranking debated trusts the register in a way it never trusts a catalogue.</p><p>The trend column earns its place by turning the register from a snapshot into a story. A risk that is amber and improving needs a different conversation from one that is amber and worsening, and only the direction of travel tells them apart. Directors govern change, not states, and the register should be built to show change.</p>" } }
|
|
]
|
|
},
|
|
{
|
|
"slug": "/blog/ninety-day-decision",
|
|
"parent_slug": "/blog",
|
|
"title": "The ninety-day decision",
|
|
"template_key": "article",
|
|
"reconcile_blocks": true,
|
|
"blocks": [
|
|
{ "block_key": "heading", "title": "Title", "slot": "main", "sort_order": 1, "content": { "text": "The ninety-day decision", "level": 1 } },
|
|
{ "block_key": "text", "title": "Body", "slot": "main", "sort_order": 2, "content": { "text": "<p>Long engagements drift because no decision anchors them. Work expands to fill the time available, evidence accumulates without ever being tested against a choice, and the project mistakes activity for progress. The cure is not tighter project management. It is a real decision, scheduled early, that the whole effort has to earn.</p><p>We set that decision inside the first ninety days. The date is fixed at the start and treated as immovable, because a movable deadline sets no discipline at all. Everything before it exists to make that one choice well: the analysis, the interviews, the modelling. Everything is scoped to the question the board will actually have to answer.</p><p>Ninety days is deliberate. It is long enough to gather evidence that is good enough to act on, and short enough that the organisation has not yet lost interest or reorganised around the problem. Past the first quarter, the cost of delay stops being analytical and starts being political, as sponsors move on and the mandate quietly erodes.</p><p>The decision does not have to be final. It has to be real, meaning it commits resources, closes off an option, and creates something to be right or wrong about. A reversible decision made on time teaches an organisation far more than a perfect decision made too late, because it produces feedback while the team still cares about the answer.</p><p>What we are really installing is a habit. A board that decides once, on evidence, inside a deadline, will decide again faster the next time, because it has learned that waiting for certainty is itself a decision, and usually the most expensive one available.</p>" } }
|
|
]
|
|
},
|
|
{
|
|
"slug": "/contact",
|
|
"title": "Contact",
|
|
"template_key": "contact",
|
|
"reconcile_blocks": true,
|
|
"blocks": [
|
|
{ "block_key": "contact-form", "title": "Contact form", "slot": "main", "sort_order": 1, "content": { "heading": "Request a working session", "description": "Tell us the question. We reply within one business day.", "submitLabel": "Send message", "successMessage": "Thank you. We will be in touch within one business day.", "formConfig": { "targetTable": "contact_submissions", "enabled": true, "captchaEnabled": false }, "fields": [ { "name": "name", "label": "Name", "type": "text", "required": true, "width": "half" }, { "name": "email", "label": "Email", "type": "email", "required": true, "width": "half" }, { "name": "organisation", "label": "Organisation", "type": "text", "required": false, "width": "full" }, { "name": "message", "label": "What can we help with?", "type": "textarea", "required": true, "width": "full" } ] } },
|
|
{ "block_key": "contact-card", "title": "Contact details", "slot": "aside", "sort_order": 1, "content": { "heading": "Direct", "columns": 1, "channels": [ { "icon": "lucide:mail", "label": "Email", "value": "hello@meridian.example", "link": "mailto:hello@meridian.example" }, { "icon": "lucide:phone", "label": "Phone", "value": "+61 2 5550 0100", "link": "tel:+61255500100" } ] } },
|
|
{ "block_key": "hours-location", "title": "Office hours", "slot": "aside", "sort_order": 2, "content": { "heading": "Office", "address": "Level 12, 100 Harbour Street, Sydney NSW 2000", "hours": [ { "day": "Monday to Friday", "hours": "9:00 to 17:30" }, { "day": "Saturday and Sunday", "closed": true } ] } }
|
|
]
|
|
},
|
|
{
|
|
"slug": "/login",
|
|
"title": "Sign in",
|
|
"template_key": "auth",
|
|
"reconcile_blocks": true,
|
|
"blocks": [
|
|
{ "block_key": "auth-form", "title": "Sign in", "slot": "main", "sort_order": 1, "content": { "default_tab": "login", "show_social": false } }
|
|
]
|
|
}
|
|
],
|
|
"menu_items": [
|
|
{ "menu": "main", "label": "Home", "page_slug": "/", "sort_order": 1 },
|
|
{ "menu": "main", "label": "About", "page_slug": "/about", "sort_order": 2 },
|
|
{ "menu": "main", "label": "Insights", "page_slug": "/blog", "sort_order": 3 },
|
|
{ "menu": "main", "label": "Contact", "page_slug": "/contact", "sort_order": 4 }
|
|
]
|
|
}
|