๐ŸŽฏ Nexus teaches Next.js from foundations to professional systemsโ€ขโšก App Router, React 19, and Tailwind v4 in one learning pathโ€ข๐Ÿงฉ Inspect real components, layouts, and reusable patternsโ€ข๐Ÿ› ๏ธ Build production discipline, not just polished demosโ€ข๐Ÿ“š Tracks, references, and design studies in one placeโ€ข๐ŸŽฏ Nexus teaches Next.js from foundations to professional systemsโ€ขโšก App Router, React 19, and Tailwind v4 in one learning pathโ€ข๐Ÿงฉ Inspect real components, layouts, and reusable patternsโ€ข๐Ÿ› ๏ธ Build production discipline, not just polished demosโ€ข๐Ÿ“š Tracks, references, and design studies in one placeโ€ข๐ŸŽฏ Nexus teaches Next.js from foundations to professional systemsโ€ขโšก App Router, React 19, and Tailwind v4 in one learning pathโ€ข๐Ÿงฉ Inspect real components, layouts, and reusable patternsโ€ข๐Ÿ› ๏ธ Build production discipline, not just polished demosโ€ข๐Ÿ“š Tracks, references, and design studies in one placeโ€ข๐ŸŽฏ Nexus teaches Next.js from foundations to professional systemsโ€ขโšก App Router, React 19, and Tailwind v4 in one learning pathโ€ข๐Ÿงฉ Inspect real components, layouts, and reusable patternsโ€ข๐Ÿ› ๏ธ Build production discipline, not just polished demosโ€ข๐Ÿ“š Tracks, references, and design studies in one placeโ€ข
Sections

Contact Section

Contact form with info panel, simulated async submit, and success state

Quick Preview

Get in touch

Have a question or want to work together? We'd love to hear from you.

Contact information

Address

123 Main Street, San Francisco, CA 94105

Support hours

Monday โ€“ Friday, 9 AM โ€“ 6 PM (GMT+7)

We respond to all emails within 24 hours.

Installation

// Copy the component from
src/components/sections/ContactSection.tsx

Usage

import { ContactSection } from '@/components/sections/ContactSection'
<ContactSection
title="Get in touch"
info={{
email: 'hello@company.com',
phone: '+66 2 000 0000',
address: '123 Sukhumvit Rd, Bangkok 10110',
}}
/>

Connecting a real API

// Replace the setTimeout in ContactSection.tsx with:
async function handleSubmit(e: React.FormEvent) {
e.preventDefault()
setLoading(true)
try {
await fetch('/api/contact', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(form),
})
setSubmitted(true)
} finally {
setLoading(false)
}
}

Prompt Preview

Copy a prompt that recreates this UI

Paste this into your AI coding assistant to generate code that closely matches the reference, including color, size, shape, typography, spacing, and polish.

Copy-ready AI prompt

Starts from the current visual reference and project constraints.

Tweak only product-specific copy or data after the first generation pass.

Props

PropTypeDefaultDescription
titlestring"Get in touch"Section heading
subtitlestring-Section sub-heading
infoContactInfo-{ email?, phone?, address? }
classNamestring-Additional CSS classes

Features

  • โœ“Two-column layout (info + form)
  • โœ“Loading spinner and success state
  • โœ“Native form validation
  • โœ“Support hours callout
  • โœ“Client Component (form state)