React contact section components

A contact section has to take a message and still name a person. These blocks put the form, the inbox, and the phone number in the same band so the visitor is never left with a dead submit button.

Built with the stack you already ship

React
Next.js
TypeScript
Tailwind CSS
Framer Motion
Vite
Astro
React
Next.js
TypeScript
Tailwind CSS
Framer Motion
Vite
Astro

Contact form blocks you can copy

Each block is one file covering the intro, the form, and the human paths beside it. Preview it live, then copy the source into your project.

Surfaces that sit beside a contact form

FAQ and product proof from the same library, for the page that has already answered the objection and now has to take the message.

How to choose a contact section

A contact section is not a second footer. By the time someone reaches it they have already seen the product. The job is to take a named message and leave a path to a person if the form is the wrong tool. If the only action is Submit, and Submit goes nowhere, the block is a brochure.

Contact Section With Three Column Form is for a page that wants the form as the object, not a thin strip under the footer. The left column holds the ask. The middle is a white card with underline fields for name, email, industry, subject, and a longer message. Headphones sit beside We're listening. Submit is a black pill. Sales, the office, and a phone number sit against the card.

Wire the form to a real endpoint before you ship. The demo prevents the default submit so the preview does not POST. Your handler, your spam rules, your confirmation. An empty onSubmit that only toasts Success is worse than a mailto on the right.

Keep the three human paths honest. Talk to sales belongs here only if that inbox is staffed. The Howard Street address is demo copy. The (555) number is a placeholder. Replace every href. A tel link that rings a disconnected line is worse than no Call us block.

The next section should be the footer, or a map if the office is a place people actually visit. Contact Section With Map Preview is a 2D street mockup with a pin, not a live maps embed. Keep Google Maps out of the file. A second form titled still have questions usually means the first list of fields was not edited.

The shipped demo uses rune.codes mailboxes and a Howard Street office. Replace the heading, the placeholders, the address, and the emails before this goes to production. Keep the underlines. Boxed inputs turn the card into a generic form, which is not why this layout exists.

Frequently asked questions

Run the Wensity CLI with the block slug, for example npx wensity@latest add contact-section-with-three-column-form --type block. The CLI writes the component into your codebase and pulls in the packages it needs. You can also open any contact section on this page and copy the source from the Code tab. There is no provider to wire up.
Use the form when you need a written brief: name, industry, subject, and a message. Use a calendar when the next step is a call and you can keep the slots real. Contact Section With Three Column Form keeps both ideas in one band by putting mailto and tel links beside the card. Do not add a second booking widget under it.
Five is the upper bound that still reads as one card on a laptop: name, email, industry, subject, and message. Cut industry if you do not route by it. Add a file input only if someone on your side will open the attachment the same day.
Yes. The intro stacks above the form card, and the sales, office, and phone blocks follow. Test the message field at a 360 pixel width before you ship, and confirm the black Submit pill still reaches the full width of the card.
After the FAQ, or after pricing if the page has no question list. It should not be the first screen. By the time someone is writing a message they have already decided the product is in the set. One form, then the footer.

Where to go next