Contact forms and contact sections
Forms with validation, channels, a map, booking, opening hours, a help center and a sales form.
Switch category
Marketing
- Hero17
- Features15
- Logo clouds8
- Stats8
- Pricing11
- Testimonials11
- Call to action11
- FAQ7
- Newsletter12
- Banners9
- Popups and consent7
- Services7
- Use cases6
- Security and trust7
- Changelog and roadmap6
- Launch and waitlist6
- Product tour6
- Press and awards10
- AI features6
- App download5
- Donations and support4
- Problem and solution5
- Objections5
- Calculators10
- Quiz and product finder5
- Free trial5
- Referral and partners10
- Community5
- Open source5
- Manifesto5
- Offer5
- Lead magnet4
- Scroll stories20
- Scroll journeys13
- Scroll effects13
- Scroll reveals and transitions15
Content
- Blog16
- Gallery7
- Team8
- About11
- Content8
- Process7
- Contact8
- Comparison5
- Integrations5
- Error pages5
- Careers7
- Case studies6
- Portfolio6
- Events and webinars6
- Help center6
- Legal pages5
- Documentation4
- Search results5
- Resources and downloads4
- Podcast4
- Editorial15
- Authors and interviews10
- Glossary5
- Recipes5
- Data stories10
- Long reads5
- Surveys and feedback14
- Form states12
- Request forms16
- Applications and sign-ups13
- Address, payment and consent12
App
- Authentication9
- Dashboards6
- Tables6
- Settings5
- AI and chat16
- Calendar5
- Inbox and messages5
- Notifications6
- Files6
- Projects6
- Profiles6
- Onboarding6
- Billing and usage10
- Developer settings15
- Security and access10
- Import, export and history15
- Automation and builders14
- AI answers18
- AI writing and creation13
- AI setup14
- AI assistants9
E-Commerce
Industries
- Menus7
- Appointments6
- Listings6
- Courses6
- Rooms and stays5
- Classes and schedules6
- Medical practice5
- Law firm5
- Salon and spa5
- Automotive5
- Travel5
- Sports club5
- Coworking5
- Museum5
- Cinema5
- School5
- Trades5
- Insurance5
- Banking5
- Personal brand15
- Speakers and media kits10
- Creators15
- Coaching and consulting10
- Artists and musicians15
- Dental practice5
- Veterinary practice5
- Therapy practice5
- Weddings and events5
- Architecture studio5
- Tax advisor5
- Estate agent5
- Florist5
- Winery5
- Daycare5
- Driving school5
- Care services5
- Festival5
Elements
- Buttons20
- Forms and inputs22
- Pickers and selections21
- Special input fields20
- Cards10
- Overlays21
- Navigation elements15
- Menu bars and switchers14
- Data display15
- Progress and states13
- Lists, trees and timelines17
- Charts22
- Comparison charts22
- Statistical charts20
- KPI, live and map charts22
- Text effects15
- Text accents16
- Backgrounds19
- Beams, particles and motion18
- Media19
- Code and JSON8
- Panels and splitters4
Form, map or opening hours
The contact section is where interest becomes a conversation. The eight variants here bring forms with real validation and errors written as text next to each field, so nobody gets stuck on a red border without knowing why.
Split with form is the default, with the form on one side and the ways to reach you on the other. Channel cards suits companies with several teams. Location map and Opening hours fit shops, practices and restaurants, Booking lets people pick a time right away. Support center routes questions to help articles first, Sales contact asks the few fields a sales team needs.
Ask only for what you need to answer, name, email and the message are often enough. Say how fast you reply. The form sends nowhere by itself, you pass your own onSubmit, so it works with any backend, form service or server action.
Contact
Details
What Contact brings along, read from the registry and the source.
- Area
- Content
- Variants
- 8
- Version
- 1.0.0 · since 1.0.0
- File
- components/ui/contact.tsx
- npm packages
- None
- Languages
- English and German, 47 texts of its own
- Studio
- All 8 variants editable
- In collections
- Local businessMedical practicePortfolio
- Build with AI
- Over MCP in Claude, Cursor, Copilot and Codex
Props
The ContactProps interface from components/ui/contact.tsx, with the comments from the code.
variantoptionalContactVariantsplit-formchannel-cardslocation-mapbookingminimalopening-hourssupport-centersales-contact
eyebrowoptionalReact.ReactNodetitleoptionalReact.ReactNodedescriptionoptionalReact.ReactNodechannelsoptionalContactChannel[]topicsoptionalstring[]Options for the topic select (split-form)
mapoptionalReact.ReactNodeMap or picture for location-map and opening-hours
addressoptional{ label?: string; lines: string[]; directionsHref?: string; phone?: string }hoursoptionalContactHours[]Monday first
hoursNoteoptionalstringdaysoptionalContactDay[]Booking: free days and times
meetingoptional{ title: string; duration: number; text?: string; person?: ContactPerson }Booking: what is being booked
emailoptionalstringminimal
phoneoptionalstringhelpTopicsoptionalContactTopic[]support-center
popularSearchesoptionalstring[]teamSizesoptionalstring[]sales-contact
expectationsoptionalstring[]quoteoptional{ text: string; person: ContactPerson }logosoptionalReact.ReactNode[]onSubmitoptional(data: FormData) => void | Promise<void>Called with the form data. Without it the form shows its success state right away.
Built-in texts
Contact writes these texts itself. The language follows the KitProvider, the labels prop replaces single ones.
Show all 47 texts
| Key | English | German |
|---|---|---|
| name | English Name | German Name |
| firstName | English First name | German Vorname |
| lastName | English Last name | German Nachname |
| English Email | German E-Mail | |
| workEmail | English Work email | German Geschäftliche E-Mail |
| company | English Company | German Firma |
| optional | English optional | German optional |
| topic | English Topic | German Thema |
| message | English Message | German Nachricht |
| messagePlaceholder | English What can we help with? | German Wobei können wir helfen? |
| consent | English I agree that my details are used to answer this request. | German Ich bin einverstanden, dass meine Angaben zur Beantwortung genutzt werden. |
| send | English Send message | German Nachricht senden |
| sending | English Sending | German Wird gesendet |
| required | English Please fill in this field. | German Bitte fülle dieses Feld aus. |
| invalidEmail | English Please enter a valid email address. | German Bitte gib eine gültige E-Mail-Adresse ein. |
| consentRequired | English Please agree so we can answer you. | German Bitte stimme zu, damit wir dir antworten können. |
| successTitle | English Thank you, your message is on its way | German Danke, deine Nachricht ist unterwegs |
| successText | English We reply within one working day. A copy is in your inbox. | German Wir antworten innerhalb eines Werktags. Eine Kopie liegt in deinem Postfach. |
| again | English Write another message | German Weitere Nachricht schreiben |
| open | English Open now | German Jetzt geöffnet |
| closed | English Closed now | German Jetzt geschlossen |
| closedDay | English Closed | German Geschlossen |
| today | English Today | German Heute |
| directions | English Get directions | German Route planen |
| call | English Call | German Anrufen |
| copy | English Copy | German Kopieren |
| copied | English Copied | German Kopiert |
| pickDay | English Pick a day | German Tag wählen |
| pickTime | English Pick a time | German Uhrzeit wählen |
| noSlots | English Fully booked | German Ausgebucht |
| book | English Book this time | German Diesen Termin buchen |
| booked | English You are booked | German Dein Termin steht |
| bookedText | English A calendar invitation for {when} is on its way to your inbox. | German Eine Kalendereinladung für {when} ist auf dem Weg in dein Postfach. |
| selected | English {day} at {time} | German {day} um {time} Uhr |
| choose | English Choose a day and a time | German Wähle einen Tag und eine Uhrzeit |
| duration | English {n} min | German {n} Min. |
| video | English Video call | German Videoanruf |
| search | English Search the help center | German Hilfe durchsuchen |
| searchPlaceholder | English Search for answers | German Nach Antworten suchen |
| popular | English Popular | German Beliebt |
| articles | English {n} articles | German {n} Artikel |
| status | English All systems running | German Alle Systeme laufen |
| teamSize | English Team size | German Teamgröße |
| talkToSales | English Talk to sales | German Mit dem Vertrieb sprechen |
| expect | English What to expect | German Was dich erwartet |
| weekdays | English Sun,Mon,Tue,Wed,Thu,Fri,Sat | German So,Mo,Di,Mi,Do,Fr,Sa |
| months | English Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec | German Jan.,Feb.,März,Apr.,Mai,Juni,Juli,Aug.,Sept.,Okt.,Nov.,Dez. |
Accessibility
Read from the source of the component.
- Sets aria-describedby, aria-invalid and aria-live, so screen readers announce purpose and state.
- Uses the roles search and status.
- Announces changes through a live region without moving focus.
- Every field has a label, visible or for screen readers.
- Adds text for screen readers where icons and graphics stand alone.
- Shows a visible focus ring when used with the keyboard.
- The server renders the starting state in full, JavaScript only adds the interaction.
Motion
- Rises in briefly the first time it comes into view (kit-rise, useInView).
- Brings animations of its own, calmly timed and without wobble.
- With reduced motion (prefers-reduced-motion) it stays still. 8 places in the code switch motion off then.
Frequent questions
How do I install Contact?
With aiw add @ai-website/contact. The command puts components/ui/contact.tsx into your project, the code is yours from then on. It brings along button, badge, icon, section and reveal. It needs no further npm packages.
Which variants does Contact have?
8 variants, Split with form, Channel cards, Location map, Booking, Minimal, Opening hours, Support center and Sales contact. You pick one with the variant prop, for example variant="channel-cards".
Can I translate the texts of Contact?
Yes. Contact carries 47 texts of its own in English and German, such as “Name”, “First name” and “Last name”. The language follows the KitProvider, single texts change through the labels prop.
Can an AI assistant build with Contact?
Yes. Through the MCP server of the aiw CLI, Claude, Cursor, GitHub Copilot, Windsurf, Codex and Gemini find Contact with aiw_components and install it with aiw_add @ai-website/contact. Name the variant in your prompt, for example variant="split-form", and the assistant writes your content straight into the props.
Can I adjust Contact without code?
Yes, in the Studio. All 8 variants are editable there, texts, lists and switches. The Studio writes the matching Contact code to copy.
Similar components, Often combined with
Similar components
More from Content, the same area of the kit.
Often combined with
Sections that usually sit next to Contact on a page.
Loading the source