Skip to content
Statecraft

All patterns

  • Bulk Actions

    Let users perform one action across many records safely, with clear scope, eligibility and recovery.

    Data
  • Advanced Filters

    Help users narrow large datasets with filters they can see, edit, share and recover from.

    Data
  • Autosave

    Save changes continuously without a Save button, while keeping users certain their work is safe.

    Forms
  • Approval Workflow

    Route a request through one or more reviewers with clear status, accountability and an auditable history.

    Workflow
  • AI Response

    Present generated answers with streaming, sources, control and recovery, so users can trust and verify them.

    AI
  • File Upload

    Let users add files with visible progress, early validation and recovery that never loses what already uploaded.

    Files
  • Command Palette

    Give users one keyboard-first entry point to jump anywhere and run any action without hunting through menus.

    Navigation
  • Subscription Management

    Let customers upgrade, downgrade, change billing cycles and cancel with exact prices, dates and consequences shown before they confirm.

    Payments
  • Refunds

    Let support staff or customers return money with the exact amount, destination, timing and consequences stated before it's irreversible.

    Payments
  • Checkout

    Take a customer from plan choice to paid with the fewest fields, a total that never surprises, and errors that keep what they typed.

    Payments
  • Failed Payment Recovery

    Recover failed renewals with timely, specific prompts and a grace period, before customers lose access they still want.

    Payments
  • Usage & Limits

    Show customers how much of their plan they've used and handle the moment they hit a limit without breaking their work.

    Payments
  • App Sidebar

    Organise a product's main navigation so users always know where they are, reach frequent places in one click, and keep their place on small screens.

    Navigation
  • Tabs

    Split one object's content into peer views that users switch between without losing their place, state or URL.

    Navigation
  • Breadcrumbs & Back

    Show users where they are in a hierarchy and get them back to exactly where they came from — filters, scroll and all.

    Navigation
  • File Preview

    Let users look inside a file without downloading it, with a predictable fallback for every type the product can't render.

    Files
  • Attachments

    Attach files to records and comments with clear ownership, visibility and deletion rules that match the record they belong to.

    Files
  • CSV Import

    Bring spreadsheet data into the product with column mapping, row-level validation and a preview, so nothing is imported by surprise.

    Files
  • Confirmation

    Ask for confirmation only when an action is hard to undo, and make the dialog state exactly what will happen.

    Workflow
  • Partial Failure

    Report operations where some items succeed and some fail, so users know exactly what happened and what to do about the rest.

    Workflow
  • Permissions

    Show people what they can do, explain what they can't, and give them a way forward instead of a dead end.

    Workflow
  • Notifications

    Tell people about things that need them, in the right channel and at the right volume, without burying what matters.

    Workflow
  • Activity History

    Show who changed what and when on a record, in a timeline people can scan, filter and trust.

    Data
  • Empty States

    Design what users see when there's nothing to show, so every empty screen explains why and offers the next useful step.

    Data
  • Version History

    Let users see earlier versions of a document or record, compare them, and restore safely without losing current work.

    Forms
  • Human Review

    Put a person between AI output and real-world consequences, with review that's fast for good output and careful for risky output.

    AI
  • Feedback

    Collect quick, specific feedback on AI output that users actually give, and that the team can actually use.

    AI
  • Inline Validation

    Tell users about input problems at the right moment — not while they're still typing, and not only after they submit.

    Forms
  • Unsaved Changes

    Protect work in forms that save explicitly, warning only when something would actually be lost.

    Forms
  • Offline Mode

    Keep users working when the connection drops, with an honest view of what's synced, what's pending and what can't be done offline.

    Forms
  • Pagination

    Split long lists into pages or progressive loads in a way that keeps position, counts and selection predictable.

    Data
  • Saved Views

    Let users save a combination of filters, sorting and columns as a named view they and their team can return to.

    Data
  • Comments

    Let people discuss work where it happens — on the record or the exact part of it — with mentions, threads and resolution.

    Workflow
  • Error Recovery

    When something fails, say what happened in plain language, protect the user's work, and offer the most useful next step.

    Workflow
  • Keyboard Shortcuts

    Give frequent users fast keyboard paths that are discoverable, consistent and never get in the way of typing.

    Navigation
  • Prompt Input

    Design the box where users ask AI for things — with context, attachments and controls visible — so prompts start strong and never get lost.

    AI
  • AI Suggestions

    Offer AI-generated values, completions and next steps inline, so users accept good ones in one action and ignore the rest at no cost.

    AI
  • Agent Progress

    Show what an AI agent is doing during long, multi-step tasks — steps, tool use and decisions — so users can follow, steer and stop it.

    AI
  • AI Onboarding

    Introduce an AI feature by showing what it can do with the user's own data, setting honest expectations about limits and privacy.

    AI
  • Export

    Let users take their data out in the format they need, with a clear scope and no surprises about what's included.

    Files
  • Storage Limits

    Show how much storage is used and by what, and handle a full quota without blocking work or deleting anything.

    Files
DataFree

Pagination

Split long lists into pages or progressive loads in a way that keeps position, counts and selection predictable.

5 states4 edge casesDesktop + Mobile

01The problem

Large lists can't load all at once. The choice between page numbers, Load more and infinite scroll changes how users find things, share positions and come back. Infinite scroll on a work table breaks the footer, Back button and “where was I?”. Page numbers on a social feed feel bureaucratic.

02When to use

Use when

  • Any list or table with more records than load quickly in one request
  • Admin tables, search results, activity feeds

Avoid when

  • Lists under ~100 items — load them all and let users filter.

03Recommended UX

Statecraft recommendation

Use numbered pages for work tables where users compare, select and return to positions; use Load more for feeds and search results where users mainly scan forward. Avoid pure infinite scroll in work tools. Always show the total or range, and keep the page in the URL.

Numbered pages give stable positions (“it's on page 3”), predictable footers, and working Back navigation.

Load more keeps users in control of loading and preserves access to the footer, unlike automatic infinite scroll.

“51–100 of 1,284” tells users how big the set is, which shapes whether they filter or browse.

04Interaction flow

  1. 01

    First page loads

    Range and total shown.

  2. 02

    Navigate

    Next/previous, page number, or Load more.

  3. 03

    Position kept

    Page in URL; scroll to top of table on page change.

  4. 04

    Change page size or filters

    Return to page 1.

  5. Result

    • Found item
    • Reached end

05Desktop behaviour

On desktop, work tables use a compact footer with range, page size and page controls.

Desktop rules

  • Footer: “51–100 of 1,284”, page size selector, Previous / page numbers / Next.
  • Scroll to the top of the table, not the page, when changing pages.
  • Keep row selection across pages and show the total selected.
  • Disable Previous on the first page and Next on the last, but keep them visible.
A compact footer: range and total, page size, and page controls. The page lives in the URL.

06Mobile behaviour

On mobile, page number controls are fiddly. Use Load more with a clear count instead.

Mobile rules

  • “Show 50 more · 1,184 remaining” button at the end of the list.
  • Keep loaded items when returning from a detail view.
  • Show “You've reached the end” on the last page.
Load more with a remaining count instead of tiny page numbers.

07States

  • First page

    Previous disabled; range shown.

  • Middle page

    All controls enabled.

  • Loading page

    Previous rows dimmed; controls disabled briefly.

  • Last page

    Next disabled; “End of results”.

  • Out of range

    Requested page no longer exists; show the last page with a notice.

08Edge cases

  1. EC-01

    Data changes between pages

    New records are added while the user pages through, shifting rows.

    Recommendation

    Use cursor-based pagination for live data so items aren't skipped or duplicated.

  2. EC-02

    Deep link to a page that no longer exists

    A shared link points to page 12, but filters now give 8 pages.

    Recommendation

    Show page 8 with a notice rather than an empty page.

  3. EC-03

    Exact totals are expensive

    Counting 4 million rows is slow.

    Recommendation

    Show “1,000+” or an estimate, and keep Next/Previous working without the exact count.

  4. EC-04

    Selection across pages

    The user selects rows on pages 1 and 3.

    Recommendation

    Persist by ID and show the total selected in the toolbar, with “Show selected”.

09Microcopy

  • Range

    Avoid

    “Page 2”

    Prefer

    “51–100 of 1,284”

  • Load more

    Avoid

    “More”

    Prefer

    “Show 50 more · 1,184 remaining”

  • End

    Prefer

    “You’ve reached the end · 1,284 invoices”

  • Estimate

    Prefer

    “1,000+ results”

10Accessibility

  • Wrap controls in nav aria-label="Pagination" and mark the current page with aria-current="page".
  • After a page change, move focus to the table heading or first row and announce the new range.
  • Load more announces how many items were added.

11Developer notes

  1. 01

    Prefer cursor pagination for live or large datasets; offset is fine for small, stable ones.

  2. 02

    Store page, page size and cursor in the URL.

  3. 03

    Prefetch the next page on idle for instant navigation.

12Implementation prompt

For Claude Code, Codex or Cursor

Implement pagination for the existing tables and lists.

Requirements:
- Work tables: footer with range ("51–100 of 1,284"), page size selector, Previous / numbered pages / Next.
- Feeds and search results on mobile: Load more with remaining count and an end-of-list message.
- Page, size and cursor in the URL; Back restores position.
- Cursor pagination for live data; estimates when totals are expensive.
- Reset to page 1 when filters or page size change; out-of-range pages fall back to the last page with a notice.
- Selection persists across pages by ID.
- Scroll to table top on page change; focus and announce the new range.
- Prefetch next page.

Do not redesign the existing interface.