LIP-1440 checkout: answers and handover from UX

From Ferdinand (UX), 2026-10-08: his answers to our questions in Slack, then his handover document, both copied unchanged apart from formatting. Where they disagree, the Slack answers are newer. How baseline follows them is in Decisions (D3, D5, D15–D17, D20–D22, D30–D32).

Answers in Slack (2026-10-08)

#Our questionFerdinand's answer
1VAT basis: new design (company excl., private incl.) or incl. VAT for everyone? Breakdown for private buyers?Show line prices including VAT for everyone, business or private, and put the same VAT breakdown at the bottom of the rail for both.
2One terms checkbox, or "accept terms" and "confirm restrictions"?One checkbox is right; the acceptance criteria are outdated and he's updating them. Private buyers also get a separate withdrawal checkbox (required by law).
3"Buying as" always from the active workspace?Yes, the buyer comes from the active workspace, no company/private choice.
4In the user test: mobile, invoice details, contact card?Mobile responsiveness is not necessary, but the contact card and additional details for invoice should be.
5Credit line: answer from Elisabeth?No answer yet; show it as an open question.
6Real data on the item cards; direction for terms links and contact card?Use real data. No direction yet for terms links and the contact card: suggestions welcome. The contact card should tie in with LIP-1432.
7New FigJam link for the single purchase flow?FigJam V1PQF8WkLy2WMXUHhVjTHj ("Order system – scoping"), node 381:7458.
8claude.ai or Claude Code?Claude Code.

Handover document (2026-10-08)

Sources he lists: decisions log 2026-10-02/05, Make prompt fix-5, LIP-1440 acceptance criteria, his checkout layout research (legal and UX). Jira LIP-1440; Figma wireframes f5hqGpjBqXvfbWnNr4AXXO node 3764:18597; Figma Make sIwoD0foGnRzW9yvgNX1W3 (Checkout-Page-Layouts-A-B), state after fix-5.

The Jira acceptance criteria are behind the design: written 2026-10-01, before the layout decisions of 2026-10-05 (conditional restrictions and instructions, one combined license checkbox, the VAT split, references, validate on click). Where they disagree, this document is the newer intent. [OPEN] = not decided; [ASSUMPTION] = his reading, to be confirmed.

1. Decision log

IDTopicDecisionWhy / alternatives considered
D1LayoutA: items on the left, act-zone on the right. Layout B is removed.Checking licences is the main task, and company buyers have almost nothing to type. The closest competitor, Alamy, also puts items on the left. Alternative: summary on the right (Komplett, Getty, Elkjøp, Adobe), but that is convention, not evidence. B also split the act-cards across both columns.
D2Visual emphasisLeft = read (page background, no cards). Right = act (white cards). Restrictions/instructions are inline alerts.Principle: a white card means "act here". Alternative: cards everywhere, which flattens the hierarchy.
D3Order zoneDirectly above the button, repeat each item (title · licence · price), the VAT lines, the total, the checkboxes, the hint line and the button.Angrerettloven §16 + EU guidance 2021/C 525/01 §4.2.1 require key info "in close vicinity" of the button. It also serves as the review required by ehandelsloven §11 / WCAG 3.3.4. Cost: licence and price appear twice (left = detail, right = receipt).
D4StickyDesktop: the whole order zone is sticky, never the button alone, and it is not sticky if it's taller than the viewport. Mobile: a slim "Total · Review order ↓" bar, hidden when the order zone is visible or an input has focus.Baymard: 23% of sites hide the button. The law requires the button next to the total. NN/g warns against stacked sticky bars, and the mobile keyboard collides with bottom bars.
D5One page vs stepsOne page.Few fields and no delivery step. A separate review page isn't legally required (ehandelsloven §11).
D6Button stateAlways enabled. Validate on click: inline errors under unticked checkboxes, then focus the first one.GOV.UK / Adam Silver: disabled buttons don't say what's missing. Getty and Elkjøp both do this badly. Alternative: a disabled button plus a hint (v1–v4).
D7Payment methodNot chosen in checkout. Card, Vipps and invoice are chosen on the provider page.The law only requires informing the buyer about payment arrangements (angrerettloven §8(1)g). Depends on LIP-1436.
D8Button label"Pay now · {total incl. VAT}", and ours is the binding button.EU guidance accepts "pay now", and C-249/21 says only the words on the button count. The price in the label follows Elkjøp. Rejected: "Order with obligation to pay" (clunky), "Continue" (not binding).
D9"Buying as"Comes from the active workspace, read-only. No company/private toggle and no editable fields. Company → name, org. no., address; personal → name, address. Caption: "Details come from your workspace. Change them in Workspace settings." with a link. Switching workspace in the header updates the whole page.The buyer is the workspace. Alternatives: an Elkjøp-style toggle at the top, or editable billing. This implies login is required, which affects LIP-1546 (guest purchase).
D10VAT displayCompany: item prices excl. VAT, then Subtotal excl. VAT, VAT (25%), Total incl. VAT. Private: everything incl. VAT, then "Includes VAT (25%)" and Total. The button always shows the amount charged (incl. VAT).Prisopplysningsforskriften requires incl. VAT for consumers. B2B norm (Elkjøp business) is excl. VAT lines. [OPEN] Superseded by the Slack answer: incl. VAT for everyone.
D11Terms checkboxesOne licence checkbox whose label depends on the cart. If any item has a restriction or instruction: "I accept the licence agreement and the restrictions and instructions listed for the images." Otherwise: "I accept the licence agreement." Private buyers only: a separate, unticked withdrawal checkbox: "I agree that delivery starts immediately, and I understand that I lose my 14-day right of withdrawal when the download starts."Angrerettloven §22 n requires a separate express consent for the withdrawal right. Licence + restrictions are combined to cut one checkbox for deadline-driven buyers (Getty shows restrictions only when relevant). Replaces the AC's separate "accept terms" + "confirm restrictions". Alternative: passive terms text, which all five competitors use; needs legal confirmation, so the checkbox stays for now.
D12Restrictions / instructionsShown only when the image has them, as an inline Alert inside the item. [ASSUMPTION] Restriction first, then instruction.Avoids empty boxes and makes the licence label conditional (D11). Changes the AC, which says "always".
D13Item card fieldsThumbnail, title, image ID, selected licence (the only badge), resolution and 300 dpi print size (only if resolution exists), price with VAT note, credit line [OPEN Q4], restriction/instruction alerts (conditional), Remove.From the AC plus v1 feedback. No per-item checkbox. Changing the licence in checkout is out of scope.
D14RemoveA quiet ghost/link button per item (icon + "Remove", muted, underline on hover).AC requirement. A filled button competed with Pay.
D15Company referencesCompany only: a collapsed disclosure "Add references (optional)" in "Buying as" with Your reference ("Shown as «Deres referanse» on the receipt. Often a name or cost centre.") and PO / order number ("Your internal purchase order number, if you use one."). Starts open if a value exists from workspace settings.EHF invoicing norm, and Getty does the same. Licensee/project fields deferred to the PO.
D16Mobile orderItems → Buying as → Credit → Order zone, with the review bar (D4).Follows the task order. The review bar is navigation, not submit.

2. Make prototype: intended vs incidental

ElementStatusNotes
Layout A, read/act emphasis, sticky order zoneIntendedD1–D4
Order zone contents and orderIntendedD3
Workspace switcher driving the pageIntended (behaviour) / incidental (the switcher UI)A stand-in for the real workspace context.
VAT split company/privateIntended, but [OPEN Q1]D10
Checkbox labels, error copy, validate on click, focus handlingIntendedD6, D11. Copy close to final, not legally reviewed.
Button label "Pay now · {total}"IntendedD8
Conditional alerts and licence labelIntendedD11–D12
References disclosure + helper textIntended (structure); in the test [OPEN Q3]D15
Remove + empty stateIntended (Remove). Empty state is a placeholder.The AC says back to the empty cart.
Sample data (Aftenposten AS, Kari Nordmann, prices, "Redaksjonen – 4410")IncidentalReplace with real MediaObject records.
Restriction/instruction textsIncidentalReplace with real supplier instructions. The API has one free-text field.
Exact spacing, sizes, shadowsIncidentalUse DS tokens and components.
Number/price formattingIncidentalUse Intl nb-NO.
Contact card / "Contact us" under the buttonIncidental / [OPEN Q5]Not designed; content belongs to LIP-1432.
Terms links (licence PDF, privacy, complaints)Incidental / [OPEN Q5]Placeholders.
NTB seller footer (org. no.)IncidentalPlaceholder org. no.
Dark mode toggle, device toggleIncidentalPrototype tools.
Mobile layoutIntended (section order and review bar, D16); visuals incidentalIn the test [OPEN Q3].
"Order placed" state after PayIncidentalStands in for the provider page (LIP-1436).

3. States

StateWhat the customer seesWhat they can do
S1 Company workspace"Buying as" with company name, org. no., address, settings caption and references. Items, order zone with VAT breakdown, one licence checkbox, hint line, "Pay now · {total}".Review, remove items, add references, open licence terms, tick, pay, back to cart, workspace settings, switch workspace.
S2 Personal workspace"Buying as" with name and address, no references. Licence checkbox and withdrawal checkbox.As S1, without references, with two required checkboxes.
S3 Switch workspaceThe whole page updates. [ASSUMPTION] Ticks and errors reset, because consent is given per buyer.Continue in the new context.
S4 Pay with a required box untickedNo submit. An inline error under each unticked box ("Accept the licence agreement to continue." / "Confirm immediate delivery to continue."), destructive border, aria-invalid; focus and scroll to the first.Tick (clears its error), pay again.
S5 All ticked, PayHands over to the provider page.—
S6 Item with restriction and/or instructionInline alert(s); the licence label mentions them.Read, remove the item if it doesn't fit.
S7 No restrictions or instructionsNo alerts; "I accept the licence agreement."—
S8 No resolution dataResolution and print size rows hidden. [ASSUMPTION] Hide rather than "Not available".As normal.
S9 Remove an item (not the last)Item gone; lines, VAT, total, button amount and licence label update. [OPEN] Undo or toast?Continue.
S10 Remove the last itemBack to the cart in its empty state.Browse.
S11 Many items (10+)The list grows; the order zone lists every item; it stops being sticky when taller than the viewport. [OPEN] Collapse after N items?Scroll and pay.
S12 Long titles[OPEN] Suggestion: 2 lines then ellipsis in the item list, 1 line in the order zone, full title in a title attribute or tooltip. The image ID always in full.—
S13 MobileItems → Buying as → credit → order zone, with the review bar.The bar scrolls to the order zone; paying only from the order zone.
S14 Logged outOut of scope (LIP-1546). Checkout requires a workspace.—

4. Rules as states and events

  • R1. In any checkout state, when the page loads, "Buying as" shows the active workspace's details read-only, with a link to Workspace settings.
  • R2. In any checkout state, when the customer switches workspace, the buyer card, VAT display, references and withdrawal checkbox update [ASSUMPTION: ticks and errors reset].
  • R3. With ≥1 item, each item shows a thumbnail, title, image ID, selected licence and price.
  • R4. When an item's HIGHRES_1 asset has a width and height, the item shows the resolution and the print size at 300 dpi; otherwise both rows are hidden.
  • R5. When an item has supplier instructions, they're shown as an alert inside that item; otherwise no alert.
  • R6. With >1 item, when the customer removes one, it disappears and the order zone, VAT, total, button amount and licence label recalculate.
  • R7. With 1 item, when the customer removes it, they're sent to the cart in its empty state.
  • R8. In a company workspace, items show prices excl. VAT, and the order zone shows Subtotal excl. VAT, VAT (25%) and Total incl. VAT. [OPEN Q1]
  • R9. In a personal workspace, all prices include VAT, and the order zone shows "Includes VAT (25%)" and Total.
  • R10. The total is the most prominent price, amounts are NOK formatted with Intl nb-NO, and the button shows the total incl. VAT.
  • R11. When the customer opens the licence agreement link, they can read the full terms without leaving checkout [ASSUMPTION: new tab or dialog].
  • R12. When ≥1 item has a restriction or instruction, the licence checkbox mentions them; otherwise "I accept the licence agreement."
  • R13. In a personal workspace, a separate, unticked withdrawal checkbox is shown; not in a company workspace.
  • R14. With a required checkbox unticked, when the customer clicks Pay, nothing is submitted, an error shows under each unticked box, and focus moves to the first.
  • R15. In an error state, ticking a checkbox clears its error immediately.
  • R16. With all required boxes ticked, Pay continues to payment (LIP-1436 / LIP-1445).
  • R17. Back to cart returns to the cart with the items unchanged.
  • R18. On mobile, when the order zone isn't visible and no input has focus, the review bar shows; tapping it scrolls to the order zone. It doesn't submit.
  • R19. [OPEN Q4] Each item shows the credit line the customer must use when publishing. Editorial vs commercial: pending Elisabeth.

5. Open questions (his list)

  1. VAT basis. (Answered in Slack: incl. VAT for everyone, same breakdown for both.)
  2. AC update: replace "accept terms" + "confirm restrictions" with D11. (Answered: yes, he updates the AC.)
  3. Test scope: mobile, references, contact card. (Answered: no mobile; references and contact card yes.)
  4. Credit line: pending Elisabeth.
  5. Terms links and contact card: no direction; proposals welcome (contact card with LIP-1432).
  6. Instructions vs restrictions: the search API has one free-text instructions field. Proposal: one alert headed "Supplier instructions", no restriction/instruction split. Needs confirming.
  7. Many items and long titles (S11, S12): proposals only.
  8. Remove feedback: undo or toast? Not designed.
  9. Legal: English UI for consumers, and checkbox vs passive terms text. Both need legal before launch.
  10. FigJam link. (Answered: node 381:7458.)

He also notes the Make prototype stores item prices excl. VAT and computes total incl. VAT = subtotal × 1.25.