Dev spec

VapeHub Checkout — Developer Spec

What the checkout prototype demonstrates and what the production build must supply. Where the prototype fakes something, it says so and points at the real source. Companion to the design pack's checkout brief.

The checkout is a standalone page (/checkout/) with its own stripped header (logo + "Secure checkout" only — no nav/search/menu, deliberately, to remove exits at the pay step). Real VapeHub design system, not the mock's chrome.


1. Age verification — the critical flow

VapeHub legally must confirm buyers are 18+. The wrong build (an up-front ID/DOB wall) destroys conversion. The right one is silent electronic verification, pre-signposted.

  1. Signpost, don't gate. A calm block in Delivery explains age is confirmed instantly and automatically at payment — no DOB field or upload up front.
  2. On order submission (after payment auth): run an electronic age check on name + address via a data provider (Experian / TransUnion / Yoti / AgeChecked — 18+ electoral-roll / credit-header match). Invisible to the ~90%+ who pass.
  3. Pass → order proceeds to dispatch, customer sees nothing extra.
  4. Fail / inconclusive → hold the order (auth-not-captured, or captured with a clear refund path) and trigger a one-off ID step (e.g. Yoti / photo-ID upload) via a secure emailed link. Dispatch only after pass.
  5. Decline → cancel + refund with a clear message.

The 18+ tickbox (built): an explicit "I confirm I am 18 or over" above the Pay button.

Confirm before building the failure-path UI: which AV provider VapeHub uses, and its exact pass/fail/inconclusive handling + ID-step UX + retention rules (UK GDPR — never store ID docs longer than needed).

2. Delivery address — postcode lookup

The mock's lookup is hardcoded (sample Bolton addresses). Production wires a real address API (Loqate / getAddress.io / Royal Mail PAF): postcode → matching addresses → select → populate. Keep the interaction (find → pick → populate) and always keep "enter address manually" available. Correct autocomplete tokens on every field (name, address-line1, address-line2, address-level2, postal-code) so browser autofill works.

3. Delivery method + dispatch countdown

4. Payment

5. Contact + consent

6. Order summary rail

7. Validation, a11y, performance

8. Data model the back-end needs

9. Still to confirm

Age-verification provider & handling · address-lookup provider & key · Worldpay integration mode (hosted fields vs redirect vs drop-in) · real Trustpilot score · loyalty earn rate · dispatch calendar · payments timeline (Apple/Google Pay; PayPal/Klarna eligibility).

10. Compliance

No "disposable" wording · 18+ throughout · no health / "safer" / quit claims · factual button copy.