diff --git a/app/assets/sass/prototype-specific/_ios-dynamic-text.scss b/app/assets/sass/prototype-specific/_ios-dynamic-text.scss index dd441697..ea2a014f 100644 --- a/app/assets/sass/prototype-specific/_ios-dynamic-text.scss +++ b/app/assets/sass/prototype-specific/_ios-dynamic-text.scss @@ -1,6 +1,12 @@ // apple ios dynamic text +// Scoped to .nhs-app-native only (set in app/views/layout-app.html for the +// native app webview) so this doesn't override typography site-wide - +// otherwise Safari/WebKit (including desktop Safari) applies the system +// Dynamic Type body size to every page, making text on the NHS website +// journey (and any other non-native-app page) render smaller than it +// should. @supports (font: -apple-system-body) { - html { + .nhs-app-native { font: -apple-system-body !important; } } diff --git a/app/routes.js b/app/routes.js index 90eff4cf..12b3ea0d 100644 --- a/app/routes.js +++ b/app/routes.js @@ -70,6 +70,101 @@ } }) + // Website (non-app) opt-out journey routes + + router.post('/website/pages/opt-out/do-you-know-nhs-number-answer', function (req, res) { + const input = req.session.data.knowsNhsNumber + + if (input === 'Yes') { + res.redirect('/website/pages/opt-out/enter-your-nhs-number') + } else if (input === 'No') { + res.redirect('/website/pages/opt-out/enter-your-name') + } else { + // Validation fallback if they select nothing + res.render('website/pages/opt-out/do-you-know-nhs-number', { + error: true + }) + } + }) + + router.post('/website/pages/opt-out/enter-your-nhs-number-answer', function (req, res) { + const input = req.session.data.nhsNumber + + if (!input || input.trim() === '') { + res.render('website/pages/opt-out/enter-your-nhs-number', { + error: true + }) + } else { + res.redirect('/website/pages/opt-out/enter-your-postcode') + } + }) + + router.post('/website/pages/opt-out/enter-your-name-answer', function (req, res) { + const { firstName, lastName } = req.session.data + + if (!firstName || !lastName) { + res.render('website/pages/opt-out/enter-your-name', { + error: true + }) + } else { + res.redirect('/website/pages/opt-out/enter-your-postcode') + } + }) + + // The postcode page is shared by both the NHS number and name/date of + // birth routes through identity verification - branch based on whether + // an NHS number was already given. + router.post('/website/pages/opt-out/enter-your-postcode-answer', function (req, res) { + const { postcode, knowsNhsNumber } = req.session.data + + if (!postcode || postcode.trim() === '') { + res.render('website/pages/opt-out/enter-your-postcode', { + error: true + }) + } else if (knowsNhsNumber === 'Yes') { + res.redirect('/website/pages/opt-out/check-your-details-nhs-number') + } else { + res.redirect('/website/pages/opt-out/enter-date-of-birth') + } + }) + + router.post('/website/pages/opt-out/check-your-details-nhs-number-answer', function (req, res) { + // Simulate an identity check against the example patient record + const postcode = (req.session.data.postcode || '').replace(/\s+/g, '').toUpperCase() + + if (postcode !== 'SW12CV') { + res.redirect('/website/pages/opt-out/identity-details-error') + } else { + res.redirect('/website/pages/opt-out/confirm-unsubscribe-request') + } + }) + + router.post('/website/pages/opt-out/check-your-details-answer', function (req, res) { + // Simulate an identity check against the example patient record + const postcode = (req.session.data.postcode || '').replace(/\s+/g, '').toUpperCase() + + if (postcode !== 'SW12CV') { + res.redirect('/website/pages/opt-out/identity-details-error') + } else { + res.redirect('/website/pages/opt-out/confirm-unsubscribe-request') + } + }) + + router.post('/website/pages/opt-out/confirm-unsubscribe-request-answer', function (req, res) { + const input = req.session.data.confirmUnsubscribe + + if (input === 'Unsubscribe from age-based messages') { + res.redirect('/website/pages/opt-out/confirmation-saved-yes') + } else if (input === 'Keep receiving age-based messages') { + res.redirect('/website/pages/opt-out/confirmation-saved-no') + } else { + // Validation fallback if they select nothing + res.render('website/pages/opt-out/confirm-unsubscribe-request', { + error: true + }) + } + }) + // V6 Routes router.post('/v6/pages/opt-in/preferences-1-post', function (req, res) { diff --git a/app/views/index.html b/app/views/index.html index 3e5e753f..4f0b9f6b 100755 --- a/app/views/index.html +++ b/app/views/index.html @@ -14,6 +14,14 @@

Digital Child Health NHS App prototype

A prototype for Digital Child Health to test new design components and patterns for the NHS App.

+

NHS Website journeys

+

A non-app, standard NHS website version of the opt-out flow.

+ +

V6

Content designer has been added to the team

21/07/2025 Updated the flow to reflect an "unsubscribe" route.

diff --git a/app/views/layout-nhsuk-website.html b/app/views/layout-nhsuk-website.html new file mode 100644 index 00000000..4cd09d9d --- /dev/null +++ b/app/views/layout-nhsuk-website.html @@ -0,0 +1,103 @@ +{% extends 'layout.html' %} + + + +{% set mainClasses = "nhsuk-main-wrapper--s" %} + +{% block pageTitle %} + Unsubscribe from age-based messages – NHS +{% endblock %} + + +{% block header %} + {{ header({ + search: { + action: "https://www.nhs.uk/search" + }, + navigation: { + items: [ + { href: "https://www.nhs.uk/nhs-services/", text: "NHS services" }, + { href: "https://www.nhs.uk/conditions/", text: "Health A to Z" }, + { href: "https://www.nhs.uk/live-well/", text: "Live Well" }, + { href: "https://www.nhs.uk/mental-health/", text: "Mental health" }, + { href: "https://www.nhs.uk/care-and-support/", text: "Care and support" }, + { href: "https://www.nhs.uk/pregnancy/", text: "Pregnancy" } + ] + } + }) }} +{% endblock %} + + +{% block beforeContent %} + {{ breadcrumb({ + items: [ + { href: "https://www.nhs.uk", text: "Home" }, + { href: "https://www.nhs.uk/nhs-services/", text: "NHS services" }, + { href: "https://www.nhs.uk/nhs-services/online-services/", text: "Online services" } + ] + }) }} +{% endblock %} + + +{% block footer %} + {{ footer({ + copyright: { + text: "© Crown copyright" + }, + navigation: [ + { + items: [ + { href: "https://www.nhs.uk/", text: "Home" }, + { href: "https://www.nhs.uk/health-a-to-z/", text: "Health A to Z" }, + { href: "https://www.nhs.uk/nhs-services/", text: "NHS services" }, + { href: "https://www.nhs.uk/live-well/", text: "Healthy living" }, + { href: "https://www.nhs.uk/mental-health/", text: "Mental health" }, + { href: "https://www.nhs.uk/social-care-and-support/", text: "Care and support" } + ] + }, + { + items: [ + { href: "https://www.nhs.uk/nhs-app/", text: "NHS App" }, + { href: "https://www.nhs.uk/nhs-services/online-services/find-nhs-number/", text: "Find my NHS number" }, + { href: "https://www.nhs.uk/using-the-nhs/about-the-nhs/", text: "About the NHS" }, + { href: "https://www.nhs.uk/using-the-nhs/healthcare-abroad/", text: "Healthcare abroad" } + ] + }, + { + items: [ + { href: "https://www.nhs.uk/our-policies/manage-nhs-profiles/", text: "Manage NHS profiles" }, + { href: "https://www.nhs.uk/nhs-sites/", text: "Other NHS websites" } + ] + }, + { + items: [ + { href: "https://www.nhs.uk/about-us/", text: "About us" }, + { href: "https://www.nhs.uk/accessibility-statement/", text: "Accessibility statement" }, + { href: "https://www.nhs.uk/our-policies/", text: "Our policies" }, + { href: "https://www.nhs.uk/our-policies/choose-your-cookie-settings/", text: "Cookies" }, + { href: "/prototype-admin/reset?returnPage=" + (currentPage | urlencode), text: "Reset data" } + ] + } + ] + }) }} +{% endblock %} diff --git a/app/views/layout-website.html b/app/views/layout-website.html new file mode 100644 index 00000000..fcd449f5 --- /dev/null +++ b/app/views/layout-website.html @@ -0,0 +1,65 @@ +{% extends 'layout.html' %} + + + + +{% set mainClasses = "nhsuk-main-wrapper--s" %} + +{% block pageTitle %} + Digital Child Health – NHS +{% endblock %} + + +{% block header %} + {{ header({ + service: { + text: "Digital Child Health", + href: "/website/pages/opt-out/start" + } + }) }} +{% endblock %} + + +{% block footer %} + {{ footer({ + copyright: { + text: "© NHS England" + }, + meta: { + items: [ + { + href: "#", + text: "Accessibility statement" + }, + { + href: "#", + text: "Contact us" + }, + { + href: "#", + text: "Cookies" + }, + { + href: "#", + text: "Privacy policy" + }, + { + href: "#", + text: "Terms and conditions" + }, + { + href: "/prototype-admin/reset?returnPage=" + (currentPage | urlencode), + text: "Reset data" + } + ] + } + }) }} +{% endblock %} diff --git a/app/views/website/pages/opt-out/README.md b/app/views/website/pages/opt-out/README.md new file mode 100644 index 00000000..235a2910 --- /dev/null +++ b/app/views/website/pages/opt-out/README.md @@ -0,0 +1,84 @@ +# NHS website opt-out journey — flow diagram + +Non-app, standard NHS website version of the age-based messages opt-out flow. +Routes live under `/website/pages/opt-out/`, views in +`app/views/website/pages/opt-out/`, and POST handlers in `app/routes.js`. + +```mermaid +flowchart TD + start["01 start
Unsubscribe introduction"] + nhsChoice["05 do-you-know-nhs-number
Do you know your NHS number?"] + enterNhs["06 enter-your-nhs-number
What is your NHS number?"] + enterName["09 enter-your-name
Enter your full name"] + postcode["03 enter-your-postcode
What is your post code"] + dob["02 enter-date-of-birth
What is your date of birth?"] + checkNhs["07 check-your-details-nhs-number
Confirm details (NHS number + postcode)"] + checkNoNhs["08 check-your-details
Confirm details (name, DOB, postcode)"] + error["04 identity-details-error
We can't identify you"] + confirmRequest["13 confirm-unsubscribe-request
Keep or unsubscribe?"] + keep["11 confirmation-saved-no
You will continue to receive messages"] + unsub["12 confirmation-saved-yes
You will no longer receive messages"] + + start --> nhsChoice + nhsChoice -- Yes --> enterNhs + nhsChoice -- No --> enterName + enterNhs --> postcode + enterName --> postcode + postcode -- "has NHS number" --> checkNhs + postcode -- "no NHS number" --> dob + dob --> checkNoNhs + checkNhs -- "identity matched" --> confirmRequest + checkNhs -- "identity not matched" --> error + checkNoNhs -- "identity matched" --> confirmRequest + checkNoNhs -- "identity not matched" --> error + error -- Continue --> nhsChoice + confirmRequest -- Keep --> keep + confirmRequest -- Unsubscribe --> unsub +``` + +## Notes + +- The postcode step is shared by both identity paths (NHS number, or + name + date of birth). +- The identity check is simulated in `app/routes.js`: enter postcode + `SW1 2CV` to pass verification on either path; anything else routes to + the `identity-details-error` page, whose Continue button loops back to + `do-you-know-nhs-number` to retry. +- Both confirmation pages (`confirmation-saved-yes` / `confirmation-saved-no`) + use the standard `nhsuk-frontend` panel component, not app-specific styling. +- Session data keys use `camelCase` (`knowsNhsNumber`, `nhsNumber`, `firstName`, + `lastName`, `postcode`, `dateOfBirth`, `confirmUnsubscribe`), and radio + values match their visible text exactly, per the + [NHS prototype kit guide](https://github.com/edwardhorsford/NHS-LLM-documentation). +- POST routes use the `-answer` suffix (for example `enter-your-name-answer`) + rather than `-post`, and only exist where branching or validation is + needed — `enter-date-of-birth` posts straight to `check-your-details` + since no route is required there. +- Back links use the real `backLink()` component in a `beforeContent` block. + The rest of this prototype's pages set `{% set backLink = true %}`. which + `layout.html` does not read, so that flag renders nothing — that pattern + is left as-is elsewhere to avoid touching unrelated journeys. +- `start.html` extends a separate layout, `app/views/layout-nhsuk-website.html`, + not `layout-website.html`. Start pages for services like this are usually + hosted on the main NHS.UK website, with the full NHS.UK header (search + + navigation) and breadcrumbs, per the + [start page pattern](https://service-manual.nhs.uk/design-system/patterns/start-page). + The "Start now" button then takes the user off nhs.uk and into the + transactional service itself, which is why every other page in this + journey switches to the simpler logo + service name header + (`layout-website.html`) - matching how real services like "Find your NHS + number" work in production. +- All other pages in this journey extend `app/views/layout-website.html` (not + `layout.html`/`layout-app.html` directly). It overrides only the header + and footer to match the standard NHS.UK transactional-service pattern — + logo + service name, no app navigation, and a footer with Accessibility + statement / Contact us / Cookies / Privacy policy / Terms and conditions + links per the [header](https://service-manual.nhs.uk/design-system/components/header) + and [footer](https://service-manual.nhs.uk/design-system/components/footer) + guidance — and sets `mainClasses = "nhsuk-main-wrapper--s"` as recommended + by the [question pages](https://service-manual.nhs.uk/design-system/patterns/question-pages) + and [start page](https://service-manual.nhs.uk/design-system/patterns/start-page) + patterns, which fixes the excess top padding that showed above the back + link. This override is scoped to `layout-website.html` only, so the app + journeys (which still extend `layout.html`/`layout-app.html`) are + unaffected. diff --git a/app/views/website/pages/opt-out/check-your-details-nhs-number.html b/app/views/website/pages/opt-out/check-your-details-nhs-number.html new file mode 100644 index 00000000..68f979a6 --- /dev/null +++ b/app/views/website/pages/opt-out/check-your-details-nhs-number.html @@ -0,0 +1,55 @@ +{% extends 'layout-website.html' %} +{% set version = "website" %} +{% set hub = "Opt Out" %} + +{% block beforeContent %} + {{ backLink({ + href: "/website/pages/opt-out/enter-your-postcode", + text: "Back" + }) }} +{% endblock %} + +{% block content %} + +
+
+
+
+ +

Confirm your details

+ + {{ summaryList({ + rows: [ + { + key: { text: "NHS number" }, + value: { text: data.nhsNumber }, + actions: { + items: [ + { href: "/website/pages/opt-out/enter-your-nhs-number", text: "Change", visuallyHiddenText: "NHS number" } + ] + } + }, + { + key: { text: "Post code" }, + value: { text: data.postcode }, + actions: { + items: [ + { href: "/website/pages/opt-out/enter-your-postcode", text: "Change", visuallyHiddenText: "postcode" } + ] + } + } + ] + }) }} + +
+ {{ button({ + text: "Confirm details" + }) }} +
+ +
+
+
+
+ +{% endblock %} diff --git a/app/views/website/pages/opt-out/check-your-details.html b/app/views/website/pages/opt-out/check-your-details.html new file mode 100644 index 00000000..db094ea5 --- /dev/null +++ b/app/views/website/pages/opt-out/check-your-details.html @@ -0,0 +1,64 @@ +{% extends 'layout-website.html' %} +{% set version = "website" %} +{% set hub = "Opt Out" %} + +{% block beforeContent %} + {{ backLink({ + href: "/website/pages/opt-out/enter-date-of-birth", + text: "Back" + }) }} +{% endblock %} + +{% block content %} + +
+
+
+
+ +

Confirm your details

+ + {{ summaryList({ + rows: [ + { + key: { text: "Name" }, + value: { text: data.firstName + " " + data.lastName }, + actions: { + items: [ + { href: "/website/pages/opt-out/enter-your-name", text: "Change", visuallyHiddenText: "name" } + ] + } + }, + { + key: { text: "Date of birth" }, + value: { text: data.dateOfBirth.day + " " + data.dateOfBirth.month + " " + data.dateOfBirth.year }, + actions: { + items: [ + { href: "/website/pages/opt-out/enter-date-of-birth", text: "Change", visuallyHiddenText: "date of birth" } + ] + } + }, + { + key: { text: "Post code" }, + value: { text: data.postcode }, + actions: { + items: [ + { href: "/website/pages/opt-out/enter-your-postcode", text: "Change", visuallyHiddenText: "postcode" } + ] + } + } + ] + }) }} + +
+ {{ button({ + text: "Confirm details" + }) }} +
+ +
+
+
+
+ +{% endblock %} diff --git a/app/views/website/pages/opt-out/confirm-unsubscribe-request.html b/app/views/website/pages/opt-out/confirm-unsubscribe-request.html new file mode 100644 index 00000000..8cecec8b --- /dev/null +++ b/app/views/website/pages/opt-out/confirm-unsubscribe-request.html @@ -0,0 +1,45 @@ +{% extends 'layout-website.html' %} +{% set version = "website" %} +{% set hub = "Opt Out" %} + +{% block content %} + +
+
+ +
+ + {{ radios({ + idPrefix: "confirmUnsubscribe", + name: "confirmUnsubscribe", + errorMessage: { text: "Select an option" } if error, + fieldset: { + legend: { + text: "Confirm your unsubscribe request", + size: "l", + isPageHeading: true + } + }, + value: data.confirmUnsubscribe, + items: [ + { + value: "Keep receiving age-based messages", + text: "Keep receiving age-based messages" + }, + { + value: "Unsubscribe from age-based messages", + text: "Unsubscribe from age-based messages" + } + ] + }) }} + + {{ button({ + text: "Submit" + }) }} + +
+ +
+
+ +{% endblock %} diff --git a/app/views/website/pages/opt-out/confirmation-saved-no.html b/app/views/website/pages/opt-out/confirmation-saved-no.html new file mode 100644 index 00000000..2b138bf9 --- /dev/null +++ b/app/views/website/pages/opt-out/confirmation-saved-no.html @@ -0,0 +1,29 @@ +{% from "panel/macro.njk" import panel %} +{% extends 'layout-website.html' %} +{% set version = "website" %} +{% set hub = "Opt Out" %} + +{% block content %} + +
+
+ + {{ panel({ + titleText: "You will continue to receive age-based messages.", + titleSize: "l" + }) }} + +

What happens next

+

You do not need to do anything else. We will keep sending you timed reminders based on your baby's age.

+ +

Before you leave this page

+

You can:

+ + +
+
+ +{% endblock %} diff --git a/app/views/website/pages/opt-out/confirmation-saved-yes.html b/app/views/website/pages/opt-out/confirmation-saved-yes.html new file mode 100644 index 00000000..e2c81172 --- /dev/null +++ b/app/views/website/pages/opt-out/confirmation-saved-yes.html @@ -0,0 +1,30 @@ +{% from "panel/macro.njk" import panel %} +{% extends 'layout-website.html' %} +{% set version = "website" %} +{% set hub = "Opt Out" %} + +{% block content %} + +
+
+ + {{ panel({ + titleText: "You will no longer receive age-based messages.", + titleSize: "l" + }) }} + +

What happens next

+

It may take up to one working day to update.

+

You can find support and guidance for you and your baby at Best Start In Life.

+ +

Before you leave this page

+

You can:

+ + +
+
+ +{% endblock %} diff --git a/app/views/website/pages/opt-out/do-you-know-nhs-number.html b/app/views/website/pages/opt-out/do-you-know-nhs-number.html new file mode 100644 index 00000000..81a45206 --- /dev/null +++ b/app/views/website/pages/opt-out/do-you-know-nhs-number.html @@ -0,0 +1,52 @@ +{% extends 'layout-website.html' %} +{% set version = "website" %} +{% set hub = "Opt Out" %} + +{% block beforeContent %} + {{ backLink({ + href: "/website/pages/opt-out/start", + text: "Back" + }) }} +{% endblock %} + +{% block content %} + +
+
+ +
+ + {{ radios({ + idPrefix: "knowsNhsNumber", + name: "knowsNhsNumber", + errorMessage: { text: "Select an option" } if error, + fieldset: { + legend: { + text: "Do you know your NHS number?", + size: "l", + isPageHeading: true + } + }, + value: data.knowsNhsNumber, + items: [ + { + value: "Yes", + text: "Yes, I know my NHS number" + }, + { + value: "No", + text: "No, I do not know my NHS number" + } + ] + }) }} + + {{ button({ + text: "Continue" + }) }} + +
+ +
+
+ +{% endblock %} diff --git a/app/views/website/pages/opt-out/enter-date-of-birth.html b/app/views/website/pages/opt-out/enter-date-of-birth.html new file mode 100644 index 00000000..9f2ad1f1 --- /dev/null +++ b/app/views/website/pages/opt-out/enter-date-of-birth.html @@ -0,0 +1,47 @@ +{% extends 'layout-website.html' %} +{% set version = "website" %} +{% set hub = "Opt Out" %} + +{% block beforeContent %} + {{ backLink({ + href: "/website/pages/opt-out/enter-your-postcode", + text: "Back" + }) }} +{% endblock %} + +{% block content %} + +
+
+ + +
+ + {{ dateInput({ + id: "dateOfBirth", + namePrefix: "dateOfBirth", + fieldset: { + legend: { + text: "What is your date of birth?", + size: "l", + isPageHeading: true + } + }, + items: [ + { name: "day", value: data.dateOfBirth.day }, + { name: "month", value: data.dateOfBirth.month }, + { name: "year", value: data.dateOfBirth.year } + ] + }) }} + + {{ button({ + text: "Continue" + }) }} + +
+ +
+
+ +{% endblock %} diff --git a/app/views/website/pages/opt-out/enter-your-name.html b/app/views/website/pages/opt-out/enter-your-name.html new file mode 100644 index 00000000..e631f3b8 --- /dev/null +++ b/app/views/website/pages/opt-out/enter-your-name.html @@ -0,0 +1,56 @@ +{% extends 'layout-website.html' %} +{% set version = "website" %} +{% set hub = "Opt Out" %} + +{% block beforeContent %} + {{ backLink({ + href: "/website/pages/opt-out/do-you-know-nhs-number", + text: "Back" + }) }} +{% endblock %} + +{% block content %} + +
+
+ +
+ + {% call fieldset({ + legend: { + text: "Enter your full name", + size: "l", + isPageHeading: true + } + }) %} + +

Use the same full name that you registered with your GP surgery

+ + {{ input({ + label: { text: "First name" }, + errorMessage: { text: "Enter your first name" } if error, + id: "firstName", + name: "firstName", + value: data.firstName + }) }} + + {{ input({ + label: { text: "Last name" }, + errorMessage: { text: "Enter your last name" } if error, + id: "lastName", + name: "lastName", + value: data.lastName + }) }} + + {% endcall %} + + {{ button({ + text: "Continue" + }) }} + +
+ +
+
+ +{% endblock %} diff --git a/app/views/website/pages/opt-out/enter-your-nhs-number.html b/app/views/website/pages/opt-out/enter-your-nhs-number.html new file mode 100644 index 00000000..43e5aa41 --- /dev/null +++ b/app/views/website/pages/opt-out/enter-your-nhs-number.html @@ -0,0 +1,44 @@ +{% extends 'layout-website.html' %} +{% set version = "website" %} +{% set hub = "Opt Out" %} + +{% block beforeContent %} + {{ backLink({ + href: "/website/pages/opt-out/do-you-know-nhs-number", + text: "Back" + }) }} +{% endblock %} + +{% block content %} + +
+
+ +
+ + {{ input({ + label: { + text: "What is your NHS number?", + size: "l", + isPageHeading: true + }, + hint: { + text: "Your NHS number is a 10 digit number that you find on any letter the NHS has sent you. For example, 485 777 3456" + }, + errorMessage: { text: "Enter your NHS number" } if error, + id: "nhsNumber", + name: "nhsNumber", + value: data.nhsNumber, + classes: "nhsuk-input--width-20" + }) }} + + {{ button({ + text: "Continue" + }) }} + +
+ +
+
+ +{% endblock %} diff --git a/app/views/website/pages/opt-out/enter-your-postcode.html b/app/views/website/pages/opt-out/enter-your-postcode.html new file mode 100644 index 00000000..112b1634 --- /dev/null +++ b/app/views/website/pages/opt-out/enter-your-postcode.html @@ -0,0 +1,44 @@ +{% extends 'layout-website.html' %} +{% set version = "website" %} +{% set hub = "Opt Out" %} + +{% block beforeContent %} + {{ backLink({ + href: "javascript:history.back()", + text: "Back" + }) }} +{% endblock %} + +{% block content %} + +
+
+ +
+ + {{ input({ + label: { + text: "What is your post code", + size: "l", + isPageHeading: true + }, + hint: { + text: "For this prototype, enter SW1 2CV to pass identity verification" + }, + errorMessage: { text: "Enter your postcode" } if error, + id: "postcode", + name: "postcode", + value: data.postcode, + classes: "nhsuk-input--width-10" + }) }} + + {{ button({ + text: "Continue" + }) }} + +
+ +
+
+ +{% endblock %} diff --git a/app/views/website/pages/opt-out/identity-details-error.html b/app/views/website/pages/opt-out/identity-details-error.html new file mode 100644 index 00000000..8b48e70e --- /dev/null +++ b/app/views/website/pages/opt-out/identity-details-error.html @@ -0,0 +1,20 @@ +{% extends 'layout-website.html' %} +{% set version = "website" %} +{% set hub = "Opt Out" %} + +{% block content %} + +
+
+ +

We're sorry. We can't identify you at this time. Please check your details and try again.

+ + {{ button({ + text: "Continue", + href: "/website/pages/opt-out/do-you-know-nhs-number" + }) }} + +
+
+ +{% endblock %} diff --git a/app/views/website/pages/opt-out/start.html b/app/views/website/pages/opt-out/start.html new file mode 100644 index 00000000..197a9f9a --- /dev/null +++ b/app/views/website/pages/opt-out/start.html @@ -0,0 +1,35 @@ +{% extends 'layout-nhsuk-website.html' %} +{% set version = "website" %} +{% set hub = "Opt Out" %} +{% set pageHeading = "Unsubscribe from Age-Based Messages" %} + +{% block content %} + +
+
+ +

{{ pageHeading }}

+ +

You were automatically signed up to receive timed reminders based on your baby's age, including information about appointments, check-ups and more.

+ +

You can use this service to unsubscribe from these messages.

+ +

You'll need to confirm your identity before you can make changes.

+ +

We'll need your:

+ + + {{ button({ + text: "Start now", + href: "/website/pages/opt-out/do-you-know-nhs-number" + }) }} + +
+
+ +{% endblock %}