Subchapter 17.10
references/inline-recipes/experience-donations.mdMarkdown8 KBView on GitHub
EXPERIENCE OVERLAY: What makes a donation experience good — read after the general DESIGN.md and CONTENT.md when using those guides.
Read alongside How to Code Donations. These are defaults, not a prescribed design: the user’s brief wins. Configure campaigns only when asked; presentation must follow their live settings. These principles are framework- and hosting-independent; this is a Headless experience, not instructions to install an Editor widget.
Scripts
BootstrapInspect campaign count, names, imagery, amounts/impact text, frequencies, goals and giving rules before choosing layout and tokens. Use the organization’s supplied story and brand to choose a distinctive visual direction; “nonprofit” does not imply one palette, stock photograph or page formula. Treat approved imagery with dignity; do not present generated beneficiaries or events as documentary evidence. The campaign entity has no story field; keep authored narrative separate from its data.
/donate; do not add an unnecessary selection step. On phones, keep the
introduction and covers compact enough that the first cause’s name and entry point appear in the
first screen, not just a large image. This is discovery, not a second homepage hero.Restore a per-campaign draft after navigation, refresh and checkout cancellation: preset/custom mode, amount, frequency, fee choice and note. Scope short-lived, per-tab state to the content site, visitor and campaign; keep notes out of URLs, logs and long-lived storage. Revalidate restored choices against current campaign settings and show a correction when necessary; do not silently replace an amount or cadence. Expire drafts and clear them on explicit reset, visitor change or verified completion. A checkout return alone is neither completion nor a reason to reset the form.
Use goals and metrics only when configured and readable. No goal means no progress module. A failed metrics read is not zero donations; omit unavailable figures while keeping the form usable. Counts are donations, not unique donors. A bar stays within its track above 100%, while the real number may exceed the goal. Let the API’s status/acceptance rules decide closure, not an inferred percentage.
Use organization-supplied identity, contact, policies and substantiated claims. Do not invent tax deductibility, matching grants, certifications, urgency, donors, receipts or outcomes. For recurring giving, include the actual cancellation/help route or policy when supplied; no nonfunctional “manage subscription” control. Keep offline giving and other support paths secondary and accurately labeled. Avoid unsolicited signup/promotional popups that interrupt giving. Metadata, social links and policy destinations must belong to the organization, with no template placeholders. Give each campaign its own title, description and sharing image from its name and approved content, not a repeated generic homepage description. Do not invent a campaign SEO API field.
Verify loading, empty, closed, missing, invalid, submitting, failed and return states, not only the happy-path screenshot. Test desktop, a common phone width (around 390px) and a narrow phone (320px), including long campaign names, header/logo/CTA fit, discovery density, form controls and focus/error states. No horizontal overflow or clipped actions; do not just hide overflow. A sticky region must not cover controls; any modal/sheet needs scroll and focus management. Follow a monthly entry link through cause selection, then test custom amount + fee + note → checkout → cancel/back; choices must survive. Check refresh recovery too, without submitting a payment.
Check the anonymous API → hosted-checkout handoff as required by the integration recipe. Verify that the checkout names the right cause and commitment. On return, show paid/order facts only when verified with appropriate access; an abandoned flow or direct thank-you visit is not proof of payment. Keep a generic acknowledgement when order details cannot be read. Do not claim a tax receipt or successful payment from the URL alone. Even an unverified return needs a meaningful heading, a clear verification-status message and a useful next step, not an empty page or a disclaimer alone. Verify hosted checkout separately from the custom form; qualify a desktop-viewport-only mobile check and confirm suspected hosted rendering problems on a real mobile browser. No live payment without explicit authorization.