Przejdź do treści
Biblioteka skilli
Projektowanie i UX · Budowanie i kod

forms-pro

/forms-pro

Buduje dobre formularze webowe: wzorce UX, walidację, dostępność, wieloetapowe przepływy i przesyłanie plików.

Licencja
MIT
Ostatnia zmiana repozytorium
11.11.2026

Ocena i bezpieczeństwo

100/ 100Klasa: dobry
Format25 / 25
Frontmatter z nazwą i opisem, poprawna nazwa, opis do 1024 znaków, nazwa zgodna z folderem.
Odkrywalność25 / 25
Opis mówi, kiedy użyć skilla, ma sensowną długość i jest w 3. osobie.
Treść35 / 35
Co najmniej 150 słów i do 500 linii, nagłówki, listy kroków, przykłady albo kod.
Higiena15 / 15
Bez zaślepek typu TODO, bez ścieżek Windows, z licencją.
Ryzykobrak sygnałów w skanie
Pliki w paczce
4
Skrypty
0
Komentarze HTML
0
Adresy URL w SKILL.md
0
Przestarzałość

Brak sygnałów. Repozytorium zmienione 11.11.2026, bez odwołań do wycofanych modeli i API.

Licencja

MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.

Co robi i kiedy

Buduje dobre formularze webowe: wzorce UX, walidację, dostępność, wieloetapowe przepływy i przesyłanie plików.

Oryginalny opis (EN)

Build excellent web forms: UX patterns, validation, accessibility, multi-step flows, and file uploads. Use for any form beyond trivial inputs.

Jak działa

  1. Overview
  2. When to use
  3. Core concepts
  4. Practical workflow
  5. Common pitfalls
Sekcje z nagłówków SKILL.md, w oryginale · 79 linii, 635 słów
Podgląd SKILL.md
---
name: forms-pro
description: Build excellent web forms: UX patterns, validation, accessibility, multi-step flows, and file uploads. Use for any form beyond trivial inputs.
category: web-development
---

# Forms Pro

A practical guide to web forms that convert and don't frustrate: UX patterns, validation timing, accessibility, multi-step flows, and file uploads — the details separating forms users complete from forms they abandon.

## Overview

Forms are where business happens (signup, checkout, application) and where UX most often fails. The principles: **minimize friction** (fewer fields, smart defaults, autofill), **validate helpfully** (right time, clear messages, preserve input), and **never lose user data** (drafts, recovery). Technical implementation (React Hook Form, Zod — see those skills) serves these goals.

## When to use

- Signup, checkout, application, settings, and contact forms.
- Multi-step wizards and conditional flows.
- File uploads with progress.
- Form UX audits and conversion optimization.

## Core concepts

- **Friction budget.** Every field costs conversion. Cut ruthlessly: is this needed now, or can it be collected later / inferred / defaulted?
- **Validation timing.** Validate on blur/touch first, then live as the user fixes. Never error on pristine fields; never wait until submit for obvious mistakes (but always validate on submit too).
- **Error UX.** Inline errors next to fields, linked via `aria-describedby`; error summary at top with anchor links on submit failure; focus moves to first error. Preserve all input on failed submit.
- **Input design.** Right input for the data: `type="email|tel|number"`, `inputmode`, `autocomplete` attributes (huge for mobile), date pickers for dates (not free text), masks that help (not hinder).
- **Multi-step.** One topic per step; progress indicator; back preserves everything; validate per step before advancing; review step before final submit; save drafts.
- **File uploads.** Drag-and-drop + browse; accept filters; size/type validation client-side (and server-side!); progress bars; resumable/chunked for large files; previews.
- **Autosave.** Draft persistence (localStorage or server) for long forms — losing 20 minutes of input is unforgivable.

## Practical workflow

**1. Design the fields.**
- List every field; justify each ("why now?"). Remove half.
- Order: easiest first, sensitive (payment, SSN-equivalents) last.
- Group related fields with `<fieldset>`/`<legend>`.

**2. Markup (accessible by default).**
```html
<div>
  <label for="email">Email address</label>
  <input id="email" name="email" type="email" autocomplete="email"
         required aria-describedby="email-hint email-error" />
  <p id="email-hint">We'll send your receipt here.</p>
  <p id="email-error" role="alert">Enter a valid email address.</p>
</div>
```

**3. Validation.**
- Schema (Zod/Yup) shared client/server.
- `mode: 'onTouched'` (RHF) — validate after blur, revalidate live.
- Server revalidates everything (client validation is UX, not security).

**4. Multi-step state.**
```ts
// single form state at wizard root; per-step validation via trigger(fields)
// persist draft: useEffect debounce → localStorage; restore on mount
```

**5. Submit.**
- Disable during submission; prevent double-submit.
- Success: clear draft, show confirmation (don't just redirect silently).
- Failure: preserve input, show errors, focus first error, log for debugging.

**6. Uploads.**
```js
// chunked upload sketch: slice file, POST chunks with index, server assembles
// show per-file progress; validate type/size before uploading a byte
```

## Common pitfalls

- **Too many fields.** The #1 form killer. Audit every field's necessity.
- **Errors on pristine fields.** Validating before the user interacts = hostile. onTouched/onBlur first.
- **Wiping input on error.** Failed submit clearing the form. Preserve everything, always.
- **Placeholder as label.** Disappears on type, poor contrast, not a real label. Real `<label>` elements.
- **No autocomplete.** Missing `autocomplete` attributes = mobile users typing everything manually. Add them; it's free conversion.
- **Client-only validation.** Bypassable in seconds. Server validates independently.
- **No draft saving.** Long forms without autosave. Persist drafts; users get interrupted.
- **File upload failures.** No size limits communicated, no progress, no resume — large uploads fail silently. Validate early, show progress, chunk large files.
- **Inaccessible errors.** Errors shown only in red text (no text = color-only), not linked to fields, not announced. Text + `aria-describedby` + `role="alert"`.
- **Submit button ambiguity.** "Submit" vs "Create account" vs "Pay $49" — the button should say what happens. Include the consequence.
Pliki w paczce (4)
  • ATTRIBUTION.md 1 KB
  • INSTALL-NOTES.md 1 KB
  • SKILL.md 5 KB
  • skill.yaml 1 KB

Wersje

W bazie nie ma innych skilli o nazwie forms-pro.

Migawka bazy z 13.11.2026 · wersja paczki 458c09364308 (skrót SHA-256 całej paczki)

Pobrania w ostatnich 30 dniach: 0 · ranking

Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.

Podobne skille

  • 100forms
    Obejmuje architekturę formularzy: kreatory wieloetapowe, walidację po stronie klienta i serwera (także asynchroniczną), przesyłanie plików i dostępny projekt formularzy.
  • 95forms
    Zbiera wiedzę o formularzach: react-hook-form, walidacja Zod, Server Actions, wgrywanie plików i formularze wieloetapowe.
  • 90vue-forms
    Buduje i sprawdza formularze w Vue 3: v-model, walidację schematem, kreatory wieloetapowe i dostępne komunikaty o błędach.
  • 100fec-form-handling
    Pomaga budować i przeglądać rozbudowane formularze z React Hook Form i schematami Zod: walidacja z typami, pola dynamiczne, przesyłanie plików, formularze wieloetapowe i wydajność.
  • 100forms-inputs-checkout
    Pomaga projektować, oceniać i wdrażać formularze, pola, walidację, checkout, rejestrację, płatności i inne przepływy wprowadzania danych.
  • 90forms
    Buduje i naprawia dostępne formularze: komunikaty o błędach, stan wysyłania, kreatory wieloetapowe i stopniowe ujawnianie pól.

Uwagi i zgłoszenia

Wiadomość trafi do Bartosza Sokolińskiego. Adres e-mail jest potrzebny tylko do odpowiedzi. Szczegóły w polityce prywatności.