| Do | Always provide a visible label so users know what the field is for. Only hide the label when surrounding context makes it obvious, like a search bar with a magnifying-glass icon. |
| Do | Use validation status with a message to explain what went wrong — "Email must include @" is better than just turning the border red. |
| Do | Size the input to match the expected content length so users can gauge how much to type — small for zip codes, medium for names, large for URLs. |
| Do | Add a clear button for search and filter inputs so users can quickly reset without selecting all text. |
| Don't | Don't use placeholder text as a replacement for a label — placeholders disappear on focus and are not reliably read by screen readers. |
| Don't | Don't use TextInput for multi-line content like comments or descriptions — use TextArea instead. |
| Don't | Don't mark every field as required — only flag truly mandatory fields so users are not overwhelmed by validation errors. |