Ryan Perez · Form system

A form is a decision path.

Ask the fewest questions necessary, use the clearest control for each answer, and never make someone recover from a system decision they cannot understand. Every control below is live — type in it, break it, watch it validate.

The formula Goal + Questions + Inputs + Conditions + Validation + Feedback + Outcome
Selection engine

What the answer is decides the control

{{ e.a }}{{ e.b }}
Live controls

Every control, working

Persistent labels throughout. A placeholder never replaces one, because it disappears the moment someone types.
Text & textarea
Radio · 2–5 exclusive options
Where does it stall? {{ r.t }} Nothing is preselected — no default is a truthful default here.
Checkbox & switch
What should the audit cover? {{ c.mark }} {{ c.t }}
Share findings with my team Takes effect immediately A switch applies now. If it needs a Save, it is a checkbox.
Select · long predictable list
Slider · approximate, with exact entry Minimum, maximum and current value are all labelled. An unlabelled slider never carries a price.
Selection cards · 2–5 explained choices
{{ c.t }} {{ c.d }} {{ c.tag }}
The whole card is the target, and the recommendation is labelled honestly without hiding the rest.
File upload
Drag a process map here, or Choose a file PDF, PNG or Miro export · up to 20 MB
intake-map-v4.pdf Replace
Restrictions stated before selection. A failed upload never costs the rest of the form.
Password & search Requirements shown before entry. Paste and password managers stay allowed.
States

Thirteen states per field

If a state affects meaning, it is communicated by more than colour.
{{ s.t }}{{ s.tag }} {{ s.value }} {{ s.mark }} {{ s.msg }}
Validation

Problem plus correction

{{ e.bad }} {{ e.good }}
{{ r.t }}
Error summary

On submit, focus moves here

Two answers need attention before this can be sent
{{ s.t }}
Everything you already entered has been kept.
Disabled vs read-only
Read-only RP-2027-0148 Visible and selectable — you may need to copy it
Disabled Pick a package first Unavailable, and the reason is stated — never silent
{{ r.t }}
Working prototype

The qualified lead form

Three stages, one column, conditional fields, honest progress. Move through it.
{{ stepTitle }} Stage {{ stepNum }} of 3 · ~2 min
{{ stepBlurb }}
Which best describes the problem? {{ p.t }}
Can you approve this work? Changes who I follow up with {{ a.t }}
You get the brief within one business day. No list, no sequence, no follow-up unless you reply.
Sent Ryan reads this himself. Brief back within one business day, with the two steps most likely to be the bottleneck and what an audit would cost. The form is replaced by the confirmation — never left sitting there ambiguous. Run it again
{{ backLabel }} {{ nextLabel }}
Layout

One column by default

{{ r.t }}
Multi-step

When steps are honest

Use steps when {{ s.t }}
Do not {{ s.t }}
Anatomy

Eighteen possible parts

{{ a.t }}
Highlighted parts are in the prototype. If a part does not help someone answer, understand, recover or complete — it goes.
{{ g.n }}{{ g.t }}
{{ g.role }}
{{ r.a }} {{ r.b }}
{{ n.t }}
Accessibility

The twelve non-negotiables

{{ a.t }}
IF the form cannot be completed by keyboard, THEN it is not ready. IF an error is visible but not announced, THEN accessibility is incomplete. IF meaning depends on placeholder text, THEN add a persistent label.
Transformations

A form, run through LAKA

{{ l.a }}{{ l.b }}
Agent-readable

qualified_lead_form

{{ l.t }}
Final decision engine
{{ e.t }}