In this tutorial, we will create a registration form page using Next.js and shadcn/ui. First, you’ll need to set up your Next.js project with shadcn/ui. Let’s get started!
How to Install Shadcn UI in Next.js Project
Before creating the sign-up form, you need to install the shadcn/ui
input
, button
, and label
components.
npx shadcn-ui@latest add button
npx shadcn-ui@latest add label
npx shadcn-ui@latest add input
SignUp.tsx
import { Label } from "@/components/ui/label"
import { Input } from "@/components/ui/input"
import { Button } from "@/components/ui/button"
export default function SignUp() {
return (
<div className="mx-auto max-w-sm space-y-6">
<div className="space-y-2 text-center">
<h1 className="text-3xl font-bold">Sign Up</h1>
<p className="text-muted-foreground">Enter your information to create an account</p>
</div>
<div className="space-y-4">
<div className="grid grid-cols-2 gap-4">
<div className="space-y-2">
<Label htmlFor="first-name">First name</Label>
<Input id="first-name" placeholder="Lee" required />
</div>
<div className="space-y-2">
<Label htmlFor="last-name">Last name</Label>
<Input id="last-name" placeholder="Robinson" required />
</div>
</div>
<div className="space-y-2">
<Label htmlFor="email">Email</Label>
<Input id="email" type="email" placeholder="[email protected]" required />
</div>
<div className="space-y-2">
<Label htmlFor="password">Password</Label>
<Input id="password" type="password" required />
</div>
<Button type="submit" className="w-full">
Sign Up
</Button>
</div>
</div>
)
}
Building a sign-up form with a card
using the shadcn/ui
components: input
, button
, label
, and card
.
npx shadcn-ui@latest add card
SignUp.tsx
import { Card, CardHeader, CardTitle, CardDescription, CardContent } from "@/components/ui/card"
import { Label } from "@/components/ui/label"
import { Input } from "@/components/ui/input"
import { Button } from "@/components/ui/button"
export default function SignUp() {
return (
<Card className="mx-auto max-w-md space-y-6">
<CardHeader>
<CardTitle>Sign Up</CardTitle>
<CardDescription>Enter your information to create a new account.</CardDescription>
</CardHeader>
<CardContent>
<form className="space-y-4">
<div className="space-y-2">
<Label htmlFor="name">Name</Label>
<Input id="name" placeholder="John Doe" required />
</div>
<div className="space-y-2">
<Label htmlFor="email">Email</Label>
<Input id="email" type="email" placeholder="[email protected]" required />
</div>
<div className="space-y-2">
<Label htmlFor="password">Password</Label>
<Input id="password" type="password" required />
</div>
<Button type="submit" className="w-full">
Sign Up
</Button>
</form>
</CardContent>
</Card>
)
}
Create an account responsive sign up page.
SignUp.tsx
import { Card, CardHeader, CardTitle, CardDescription, CardContent } from "@/components/ui/card"
import { Label } from "@/components/ui/label"
import { Input } from "@/components/ui/input"
import { Button } from "@/components/ui/button"
export default function SignUp() {
return (
<Card className="w-full max-w-md mx-auto">
<CardHeader>
<CardTitle>Create an Account</CardTitle>
<CardDescription>Enter your details below to sign up for our service.</CardDescription>
</CardHeader>
<CardContent>
<form className="space-y-4">
<div className="grid grid-cols-2 gap-4">
<div className="space-y-2">
<Label htmlFor="name">Name</Label>
<Input id="name" placeholder="John Doe" required />
</div>
<div className="space-y-2">
<Label htmlFor="email">Email</Label>
<Input id="email" type="email" placeholder="[email protected]" required />
</div>
</div>
<div className="space-y-2">
<Label htmlFor="password">Password</Label>
<Input id="password" type="password" required />
</div>
<Button type="submit" className="w-full">
Sign Up
</Button>
</form>
</CardContent>
</Card>
)
}