# 38 — Lead Capture Specification ## HER — Home Enhancement and Renovation **Status**: Phase 3 — implementation-ready **Implements**: FR-1, FR-2, FR-3, FR-4, FR-5, FR-6, FR-7 | AC-1, AC-6 | ADR-002 **Authority**: This document is the authoritative spec for all form field definitions, validation rules, error states, spam protection, and API integration. `33-frontend-spec.md` §5.6 governs page layout and visual styling; where the two documents overlap, this document takes precedence for behavior and copy. --- ## Table of Contents 1. [Form Fields](#1-form-fields) 2. [Validation Rules](#2-validation-rules) 3. [Form UX States](#3-form-ux-states) 4. [UX Copy](#4-ux-copy) 5. [AWS SES Integration](#5-aws-ses-integration) 6. [Spam Protection](#6-spam-protection) 7. [Accessibility](#7-accessibility) 8. [Mobile Considerations](#8-mobile-considerations) 9. [Thank-You / Confirmation](#9-thank-you--confirmation) 10. [Requirements Traceability](#10-requirements-traceability) --- ## 1. Form Fields ### 1.1 Field Inventory The form collects five visible required fields plus one hidden honeypot field. All visible fields use the `FormField` component (see `33-frontend-spec.md` §6.7). | # | Field name | Label | HTML type | `name` attr | `id` attr | `autocomplete` | Required | |---|---|---|---|---|---|---|---| | 1 | Full Name | `Full name` | `text` | `name` | `field-name` | `name` | Yes | | 2 | Service Address | `Service address` | `text` | `address` | `field-address` | `off` | Yes | | 3 | Phone | `Phone number` | `tel` | `phone` | `field-phone` | `tel` | Yes | | 4 | Email | `Email address` | `email` | `email` | `field-email` | `email` | Yes | | 5 | Project Description | `Describe the work` | `textarea` | `description` | `field-description` | `off` | Yes | | — | Honeypot | *(none — hidden)* | `text` | `website` | `field-website` | `off` | No | > **Note on `autocomplete="off"` for address**: Browser autofill for `street-address` fills a billing/home address, which may differ from the *service location*. Using `off` prevents misplaced autofill. This is intentional. ### 1.2 Field Details #### Full Name - **Label**: `Full name` - **Placeholder**: `e.g. Jane Smith` - **Help text**: *(none)* #### Service Address - **Label**: `Service address` - **Placeholder**: `e.g. 123 Market St, San Francisco, CA` - **Help text** (visible below label, above input): `"Where is the work located? City or full address."` - **Style**: Help text rendered as `

` in DM Sans 400, `--text-sm`, `--col-slate`. Sits between label and input, `--space-1` margin below. #### Phone Number - **Label**: `Phone number` - **Placeholder**: `e.g. (415) 555-0123` - **Help text**: *(none)* - **Input mode**: `inputmode="tel"` #### Email Address - **Label**: `Email address` - **Placeholder**: `e.g. jane@example.com` - **Help text**: *(none)* - **Input mode**: `inputmode="email"` #### Project Description - **Label**: `Describe the work` - **Placeholder**: `What needs to be fixed, replaced, or improved? Include any relevant details — size, urgency, or special requirements.` - **Help text**: *(none; placeholder is the primary guide)* - **Element**: `