Skip to content
100% Redress — design demo Static mockups, not the live site
Build spec

The proposed blocks

Every block the mockups introduce — fourteen new, plus one new option on a CTA that already exists — with the Payload field schema I would write for each and the component those fields produce. This is the spec to sign off before any config.ts gets written.

Existing blocks are not listed here — supportHero, helpDoors, cardGrid, aboutSplit, accordion, iconTabs, trustBar, textImageChecklist, contactBlock, ctaBanner, noticeBanner, newsIndex, archive, membershipIntro and membershipCheckout already have their schemas and need no changes. affectedAreasMap and redressCalculator are built and only need registering.

Every block, at a glance

Fourteen new blocks, one new variant of an existing one, two already built and waiting to be registered, and fifteen that carry live content unchanged.

New — to be built (14)

New variant of an existing block (1)

Built, needs registering (2)

Existing, no changes (15)

supportHero · helpDoors · cardGrid · aboutSplit · accordion · iconTabs · trustBar · textImageChecklist · contactBlock · ctaBanner · noticeBanner · newsIndex · archive · membershipIntro · membershipCheckout

Every block also carries the shared Settings group

The existing meta field from src/blocks/_shared/meta.ts. It is assumed on all thirteen and is not repeated in the tables below.

FieldTypeNotes
meta.hiddencheckboxoptionalHide the block without deleting it. Still renders in draft preview.
meta.backgroundselectoptionalnone · primary · accent · pattern. Stored as bg.
meta.paddingTop / paddingBottomselectoptionalnone · small · medium · large. Stored as pt / pb.
meta.marginTop / marginBottomselectoptionalSame scale. Stored as mt / mb.

Postgres note. Every select below carries a short dbName for the same reason meta does — generated enum identifiers must stay under the 63-character limit.

01 · Journey Phases

journeyPhases Server component

The four scheme phases with a “you are here” state. Sits at the top of the scheme hub and repeats on every phase page, so a reader always knows how far through they are.

Editable fields
FieldTypeNotes
headingtextoptionalDefaults to a visually-hidden “Where you are in the process”.
phasesarray 2–6requiredOne entry per phase.
titletextrequired“Preparing your application”
captiontextoptional“Steps 1–7 · Pre-application to decision”. Replaced by the state label when the phase is current.
stateselectrequiredupcoming · current · done. Stored as st. Only one phase should be current per page.
linklinkoptionalThe whole tile is the link. Omit on the current phase.

Numerals are generated from array order, not authored — reordering phases renumbers them. Design: a four-cell bento row. Done sits on soft pink with a check, current is the plum tile that anchors the row, upcoming is white with the hairline.

Resulting component

02 · Scheme Steps

schemeSteps Server component

The flagship. Numbered steps inside a phase, each with the portal status it maps to, the documents needed, and the tips that make it survivable. This is the site’s most task-critical content.

Editable fields
FieldTypeNotes
eyebrowtextoptional“Phase 1 of 4 · Steps 1–7”
headingtextoptionalOmit when the page title already says it.
startNumbernumberdefault 1Phase 2 starts at 16, phase 3 at 23. Numerals continue from here.
stepsarray min 1requiredOne card per step.
titletextrequired“Get professional advice — the Building Condition Assessment”
portalStatustextoptionalThe literal status shown in the council portal, e.g. “BCA required”. Rendered as a pill chip.
bodytextarearequiredPlain prose. No rich text — the panels below carry the structure.
documentsarray of textoptional“Documents needed”. Omitting the array hides the panel.
tipsarray of textoptional“Tips”. Same — empty means no panel.
linkslinkGroup max 3optionalDescriptive labels only. The link component already forbids “Find out more”.

Each step renders with id="step-{n}" so pageAnchorNav can target it. Design: a white card with the numeral in a 52px soft-pink icon tile, and an inner two-cell bento — admin on the neutral band, reassurance on soft pink — so paperwork and human help are visibly separated.

Resulting component
03

Get professional advice — the Building Condition Assessment

Portal status: BCA required

A Building Condition Assessment must be carried out by a registered engineer, architect or chartered surveyor. This is the document the whole application rests on.

Documents needed

  • A completed BCA report
  • The professional’s registration details

Tips

  • Ask other homeowners locally who they used
  • Get the fee in writing before work starts

03 · On This Page

pageAnchorNav Client component

Anchor navigation for the long evidence pages — The Science, Finance, Exclusions, the EU dimension. Needs a client component for scroll-spy.

Editable fields
FieldTypeNotes
headingtextdefault On this pageRenders as the nav landmark’s <h2>.
itemsarray min 2requiredAuthored rather than derived, so the labels can be shorter than the headings.
labeltextrequired“Statutory exclusions”
anchortextrequiredThe target id, without the #.
stickycheckboxdefault trueSticky rail on desktop. Always a scrolling pill row below 1000px.

Uses the existing HashScroll component, and respects prefers-reduced-motion by jumping rather than smooth-scrolling. Design: pills sit on soft pink at rest and flip to plum when their section is in view.

Resulting component

04 · Previous / Next

pagerNav Server component

Moves a reader through an ordered sequence — the four scheme phases, or step ranges within them.

Editable fields
FieldTypeNotes
previousgroupoptionalOmit on the first page in a sequence — the next card then spans full width.
titletextrequired“Phase 1 — Preparing your application”
linklinkrequiredInternal page reference.
nextgroupoptionalSame shape. Omit on the last page.
titletextrequired
linklinkrequired

The “Back” / “Next” direction labels are generated, not authored, so they stay consistent across every sequence.

Resulting component

05 · Timeline

timeline Server component

Year-grouped, newest first, with sources attached to each event. Carries The Science page and the EU dimension — the two places where the evidence trail is the argument.

Editable fields
FieldTypeNotes
eyebrowtextoptional
headingtextoptional
introtextareaoptional
groupsarray min 1requiredOne per year or year range.
yeartextrequiredText, not a date — it has to hold “2020–2022”.
eventsarray min 1required
events.badgetextoptional“March 2023 · Peer review”
events.titletextrequired
events.pointsarray of textoptionalBullet summary of what happened.
events.noteLabelselectoptionalcritique · limitation · impact · why. Stored as nl. Drives the bolded lead-in.
events.notetextareaoptionalThe analysis panel. Hidden if empty.
events.sourcesarrayoptionallabel + url. Rendered as underlined inline links.

Groups render in authored order — the editor controls chronology, the block does not sort. Design: sticky year in rose beside event cards joined by a hairline with rose dots; the note panel sits on soft pink.

Resulting component
2023
March 2023 · Peer review

Peer-reviewed research overturns the mica hypothesis

  • Muscovite mica shown not to be the principal cause of block failure
  • Pyrrhotite and other iron sulphides identified as the driver
Critique: the State had built a decade of policy and public messaging around “mica”.

06 · Comparison List

comparisonList Server component

Two-sided eligibility: what the scheme covers against what it does not. The single most-asked question on the site.

Editable fields
FieldTypeNotes
headingtextoptional
introtextareaoptional
includedTitletextdefault CoveredEditable so it can read “Eligible” or “In scope” elsewhere.
includedarray min 1required
titletextrequired“Private homes”
descriptiontextoptionalThe qualifying condition, one line.
excludedTitletextdefault Not covered
excludedarray min 1requiredSame shape as included.

Design: uses the two poles of the palette — soft pink for covered, plum for not covered. The distinction is carried by the column heading and the ✓ / ✕ glyph as well, never by colour alone.

Resulting component

Covered

  • Private homesYour principal private residence
  • Social housingCouncil and approved housing body dwellings

Not covered

  • Apartments and duplexesA separate scheme has been promised, not delivered
  • Holiday and second homesOnly a principal private residence qualifies

07 · Callout Box

calloutBox Server component

A page-level aside. The existing banner block only works inside rich text; this is its sibling for the layout builder.

Editable fields
FieldTypeNotes
variantselectrequiredinfo · support · urgent · success. Stored as var. Default info.
headingtextoptionalRenders as <h3>. Omit for a single-paragraph note.
bodyrichTextrequiredRich text so inline links work — the “if this feels like too much” note needs to link to support mid-sentence.

Rich text is restricted to paragraphs, links and emphasis — no headings, no nested blocks. Design: 16px radius, deliberately under card scale so it reads as a note rather than a section.

Resulting component — all four variants

Information

Neutral, on the alternate band. Context and definitions.

What we can and can’t help with

Soft pink. Reassurance and limits honestly stated, help before caveats.

Time limits apply

Plum with an inset rose bar. Deadlines and appeal windows — anything with a cost to missing it.

Scheme now open in your county

Positive status, using the success token as a dot rather than a fill.

08 · Crisis Banner

crisisBanner Server component

The helpline strip. The audit’s loudest finding was that this pathway rendered at 2.9:1 with no focus ring; this block makes it the heaviest element on any page it appears on.

Editable fields
FieldTypeNotes
eyebrowtextoptional“Helplines & immediate support”
headingtextrequiredDefault “You are not alone.”
introtextareaoptional
linesarray 1–4requiredCapped at four — past that it stops reading as urgent.
nametextrequired“Pieta House”
valuetextrequiredWhat the reader sees: “1800 247 247”.
typeselectrequiredphone · text · web. Stored as ty. Chooses tel: / sms: / https:.
targettextrequiredThe dialable form, e.g. 1800247247. Kept separate so the display value can be spaced for legibility.
linklinkoptional“More emotional and mental-health support”.
fullBleedcheckboxdefault falseEdge-to-edge band instead of a rounded panel. Used at the top of the support page.

Design: solid rose pills on plum — the one deliberate exception in the system. White on rose is 5.05:1; every helpline is a real link with a visible focus ring.

Resulting component
Helplines & immediate support

You are not alone.

Free, open now, and you do not need to be in crisis to call.

09 · Support Directory

supportDirectory Server component

Grouped service listings. The mental-health page alone needs eight of these groups; the scheme hub needs one for “Helpful contacts”.

Editable fields
FieldTypeNotes
eyebrowtextoptional
headingtextoptional
introtextareaoptional
columnsselectdefault 32 · 3. Stored as col.
groupsarray min 1required
titletextoptionalGroup heading. When present, items render at h4; when absent they render at h3, keeping the outline correct either way.
itemsarray min 1required
items.nametextrequired“Jigsaw Donegal”
items.descriptiontextareaoptionalOne line on who it is for.
items.contactsarrayoptionaltype (phone · email · web, stored as ty), value, target. Icons come from the existing 17-icon registry.

Alternating groups sit on the neutral band so a very long page keeps its rhythm. That alternation is generated from group index, not authored.

Resulting component

Young people and young adults

Jigsaw Donegal

Free mental-health support for 12–25 year olds. No referral needed.

Donegal Youth Service

Youth groups, one-to-one support and outreach across the county.

CAMHS Donegal

Child and adolescent mental health services, by GP referral.

10 · People Grid

peopleGrid Server component Needs the People collection

The TD and four councillors. Queries a new People collection so a councillor’s phone number is edited once and correct everywhere.

Editable fields
FieldTypeNotes
eyebrowtextoptional
headingtextoptional
introtextareaoptional
populateByselectdefault collectioncollection · selection. Stored as pop. Mirrors the existing archive block exactly.
limitnumberdefault 5Only when populating by collection.
selectedDocsrelationshipconditionalpeople, hasMany. Only when populating by selection.
featureFirstcheckboxdefault trueFirst result renders as the large feature card. Off gives an even grid.

The People collection holds name, role, area (LEA), portrait, bio, priorities[], email, phone, socials[], featured, slug and an SEO tab — and gives each person a detail page at /people/<slug>. Design: an asymmetric bento — one large feature card beside a 2×2.

Resulting component
Buncrana LEA

Cllr Joy Beard

Donegal County Council

Carndonagh LEA

Cllr Ali Farren

Donegal County Council

Two of five shown. The full asymmetric layout is on Our people.

11 · Pull Quote

pullQuote Server component

Resident testimony and campaign lines. Two tones so the human register and the campaigning one never blur together.

Editable fields
FieldTypeNotes
quotetextarearequiredPlain text. Quotation marks are supplied by the component.
attributiontextoptional“A homeowner in Letterkenny”. Kept non-identifying by default.
toneselectdefault supportsupport (soft pink) · campaign (plum). Stored as tn.

The mark behind the text is the Tabler quote glyph rendered inline at 104px and low opacity, inheriting currentColor — not a typographic &ldquo; character, which sets inconsistently across the two typefaces.

Resulting component — all three tones

I started with just one phone call a week.

A homeowner in Letterkenny

It felt good just to be heard by someone who knew exactly what we were going through.

A homeowner in Carndonagh

Homeowners did nothing wrong.

100% Redress Party

12 · References

references Server component

Citations and further reading. The Science page rests on six peer-reviewed studies, and the credibility of the whole argument rests on them being visible.

Editable fields
FieldTypeNotes
eyebrowtextoptional
headingtextdefault Further reading
introtextareaoptional
itemsarray min 1requiredNumbering is generated from array order.
titletextrequiredThe paper title. Becomes the link text.
urltextoptionalDOI or publisher URL. Without one, the title renders as plain text.
sourcetextoptionalJournal, author or DOI string, shown beneath.

Design: reuses the article prose style’s leading-zero numerals, on the neutral band so it reads as an appendix rather than body copy.

Resulting component
  1. Deterioration of concrete blocks containing pyrrhotiteConstruction and Building Materials · DOI 10.1016/j.conbuildmat
  2. Reassessment of muscovite mica as a causal agent in blockwork failureCement and Concrete Research · peer-reviewed, 2023
  3. Mental health outcomes in households affected by defective concreteDr Karen Kirby, Ulster University

13 · Key Figures

keyFigures Server component

The numbers that carry the argument — 1,000+ social homes cracking, 3,150+ households waiting, 43 homeowners left behind by a cut-off date.

Editable fields
FieldTypeNotes
eyebrowtextoptional
headingtextoptional
figuresarray 2–4requiredCapped at four — a fifth stops being a headline.
valuetextrequiredText, not a number — it has to hold “3,150+”, “29%” and “ISA”.
captiontextrequiredWhat the figure counts. Should stand alone out of context.
highlightcheckboxdefault falseInverts that one tile to soft pink.
sourcetextoptionalWhere the figure comes from. Rendered as a footnote under the row.

Design: generalises the hero’s plum stat tile into a row of two to four. One highlighted cell breaks the rhythm — the same asymmetry the hero uses.

Resulting component
1,000+social homes showing visible cracking
3,150+households on Donegal waiting lists
29%rise in average weekly rents, 2016–2022
43homeowners left behind by the cut-off

14 · Media Banner

mediaBanner Server component + small client script

A full-bleed photograph carrying a headline and a CTA. The audit’s sharpest criticism of the current site was that it shows none of the subject matter — cracked walls, families in limbo — on a site whose whole reason for existing is that homes are falling down. This is the block that fixes that.

Editable fields
FieldTypeNotes
imageupload → mediarequiredAlt text is enforced by the Media collection. Decorative is not an option here — the image is the argument.
eyebrowtextoptional“Ballybofey, February”. Doubles as a place-and-date caption.
headingtextrequired
bodytextareaoptionalTwo lines at most over an image.
linkslinkGroup max 2optionalFirst renders solid rose, second white.
effectselectdefault staticstatic · parallax. Stored as fx.
parallaxRangenumberdefault 70Pixels of drift across a full viewport of scroll. Only when effect is parallax.
heightselectdefault standardstandard · tall. Stored as h.
fullBleedcheckboxdefault falseEdge-to-edge rather than a rounded panel inside the content width.
scrimselectdefault standardlight · standard · heavy. Stored as sc. Raise it when the photograph is bright enough to threaten the 4.5:1 on the headline.

Parallax is transform-based, not background-attachment: fixed — that is ignored on iOS and cannot be disabled per element. The media layer is inset -14% so the drift never exposes an edge, the scroll handler is requestAnimationFrame-throttled and passive, and the whole effect is switched off under prefers-reduced-motion. That is the only client-side JavaScript in the thirteen.

Resulting component — effect: static
◎ Photo
Ballybofey, February

Every one of these homes was signed off as safe.

Stepped cracking through the outer leaf, widening every winter.

Resulting component — effect: parallax (scroll to see it)
◎ Photo · parallax
Inishowen

We are not going away until every home is put right.

Formed by homeowners, for homeowners.

15 · Deep Red CTA

ctaBanner Existing block — new option

Not a new block. A third value on the style select that ctaBanner already has, for the one call to action per page that has to outrank everything else on it.

The change
FieldTypeNotes
styleselectexistingCurrently plain · panel. Add accent. One migration, no new table.

Plum panel stays the default; deep red is the escalation, and a page should carry at most one. White on #C1443A is 5.05:1, so headline and body are both plain white and the buttons invert to #A5372F-on-white at 6.4:1.

Resulting component

Join the people fighting for full redress.

€10 a year. No corporate money, no special interests, every euro accounted for.

Affected Areas Map

affectedAreasMap Built · not registered

A MapLibre choropleth of Ireland showing the affected counties, with a legend and a figures table. Already written and staged on /debug — it needs promoting, not building.

Existing fields
FieldTypeNotes
eyebrow / heading / introtextoptionalStandard section head.
focusselectexistingireland · west · donegal. Stored as foc.
showTablecheckboxexistingFigures table beneath the map.
captiontextexisting

To promote: add to the layout array in Pages/index.ts, to blockComponents and selfSpaced in RenderBlocks.tsx, then migrate and regenerate types. The checklist is already written in the block’s own config.ts.

Redress Calculator

redressCalculator Built · not registered

Grant estimate against the published statutory rates, with the shortfall against real rebuild cost. Also staged on /debug. Shown in place on Applying to the scheme.

Existing fields
FieldTypeNotes
eyebrow / heading / introtextoptional
showShortfallcheckboxexistingWhether to show the gap against real rebuild cost as well as the grant.
footnotetextexisting

The rates themselves live in rates.ts as hard-coded statutory figures and are deliberately not CMS-editable — they are set by regulation, not by us, and an editable copy would drift.

Fourteen blocks, one new collection, one promotion pass.

Sign off this spec and the next step is config.ts + Component.tsx for each, preview SVGs, migrations, then the seed.