Patterns that earn user trust
Every reusable interaction in CareerKit — empty states, loading, errors, destructive confirms, autosave, offline. Each pattern is enforced by a component primitive and a rule in DESIGN.md. Don't recreate these from scratch.
1 · Empty states
Rule 7.1 · EmptyState primitive ·action prop required
An empty state is a teaching moment. Never "Keine Daten" — always tell users what they can do next. First-time states differ from "you have nothing yet" states. After a filter that returns nothing, show how to clear the filter.
Trag deine erste Bewerbung ein
Sammle alle Bewerbungen an einem Ort und sieh in Echtzeit, wo du stehst.
Noch kein Angebot
Bereite dich mit der Interview-Bank vor — Angebote kommen vom letzten Schritt.
Keine Treffer
Keine Bewerbung passt zu "Berlin". Filter entfernen, oder neue Suche starten.
2 · Loading states
Rule 3 · 0–100ms nothing · 100–1000ms spinner · 1000+ skeletonDifferent waits need different signals. A button click that resolves in 200ms doesn't need a spinner. A page that loads data needs a skeleton. Spinner is for buttons, Skeleton is for content. Never a centered spinner on a blank page.
3 · Destructive action with undo
Rule 1.4 ·Button variant="destructive" requires confirm OR undo
Confirmation modals are friction tax. Undo is the better pattern for most destructive actions — the action happens immediately, a toast appears with 5s to undo. Click "Entfernen" below to try it.
When to use confirm-modal instead of undo: when the action can't be undone (account deletion, sending an email), or when the cost of a mistake is high. For "remove from list", "archive", "mark as not interested" — always undo.
4 · Inline form validation
Rule 5.1 · validate on blur · error below field · preserves inputValidate on blur (when the user leaves the field), not on every keystroke. The error message sits directly below the field it concerns, explains the problem, and never wipes the input. Submit stays disabled until valid.
5 · Auto-save indicator
Rule 3.4 ·SaveIndicator + useAutoSave hook
Active-edit surfaces (CV Builder, profile, settings) auto-save and visibly tell users so. Three states: saving (pulse amber), saved (steady green), error (Hot-Rod with retry).
6 · System state banners
Rules 7.4 / 7.5 · offline + session expired never lose workNetwork down? Session timed out? Tell users, preserve their work, give them a path forward. Banners sit at the top of the affected surface — never modal, never blocking.
7 · Error pages
Rule 7.3 · 404/500 offer paths forward, never dead-endEvery error page gives 2-3 options: go home, search, or contact support. Never just "Etwas ging schief." Tell users what happened and what they can do.
Diese Seite gibt's nicht
Vielleicht alter Link oder Tippfehler. Hier ist, was du tun kannst:
Bei uns hängt's gerade
Das Problem ist uns gemeldet. Deine Daten sind sicher.
8 · Mobile bottom sheet
Rule 2.1 · primary actions in thumb zone · sheet not modalOn mobile, "More actions" lives in a bottom sheet, not a top-anchored dropdown. The sheet rises from the bottom edge (thumb zone), has a grabber for swipe-to-dismiss, and groups destructive actions visually separated at the bottom.
Personio · Senior PM, Growth
9 · Optimistic UI
Rule 3.3 · reversible actions update immediatelyFor actions the server is almost certain to accept (status change, like, mark-as-read), update the UI immediately and tell the server in parallel. If the server rejects, revert with a toast. Used in Tracker for stage transitions.
10 · Keyboard shortcuts
Rule 4 · Flexibility & efficiency for power usersEvery dashboard surface ships with discoverable shortcuts. Press ? to see them all. The shortcut overlay is a sheet (not a modal), with shortcuts grouped by section and shortcut hints inline on the buttons.
Principles, tokens, enforcement mechanisms, persona red-flag checklists, exception process. Read before opening any UI PR.