# User Profile 1 - Basic Profile Card

> A centered profile card with avatar, name, role, bio, and action buttons for messaging and following.

A shadcn/ui block from the [@shadcnblocks](https://shadcnblocks.com) registry, listed on [shadcn.exchange](https://shadcn.exchange/r/shadcnblocks/user-profile1).

- Page, with a live preview: https://shadcn.exchange/r/shadcnblocks/user-profile1
- Screenshot: https://abzjhwgwpdpz7ua5.public.blob.vercel-storage.com/shots/shadcnblocks/user-profile1-light-62fb08ba0418d6c4.png
- Registry item: https://shadcnblocks.com/r/user-profile1.json
- Listed: 2026-10-13, source last changed 2026-10-13

## Install

```bash
npx shadcn@latest add https://shadcnblocks.com/r/user-profile1.json
```

Run it in a project that has shadcn/ui set up. It adds the files below and installs what they depend on.

## Dependencies

- npm packages: `cn`, `lucide-react`
- Registry items: `avatar`, `badge`, `button`, `card`

## Files

### `block/user-profile1/user-profile1.tsx`

```tsx
import { Mail, MapPin } from "lucide-react";
import { cn } from "cn";

import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";

import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import {
  Card,
  CardContent,
  CardFooter,
  CardHeader,
} from "@/components/ui/card";

const person8 = {
  name: "Kim Jihoon",
  firstName: "Kim",
  lastName: "Jihoon",
  initials: "KJ",
  email: "kim.jihoon@example.com",
  username: "kimjihoon",
  role: "Software Engineer",
  company: "Saehan Electronics",
  location: "Seoul, South Korea",
  avatar: "https://cdn.shadcnblocks.com/shadcnblocks/image-set/modern/avatars/avatar8.webp",
};
interface User {
  name: string;
  avatar?: string;
  role?: string;
  bio?: string;
  location?: string;
  email?: string;
  verified?: boolean;
}

interface UserProfile1Props {
  user?: User;
  className?: string;
}

const UserProfile1 = ({
  user = {
    name: person8.name,
    avatar: person8.avatar,
    role: "Senior Product Designer",
    bio: "Crafting intuitive digital experiences with a focus on accessibility and user delight. Previously at Figma and Stripe.",
    location: "San Francisco, CA",
    email: person8.email,
    verified: true,
  },
  className,
}: UserProfile1Props) => {
  return (
    <section className={cn("py-32", className)}>
      <div className="container flex justify-center">
        <Card className="w-full max-w-sm text-center">
          <CardHeader className="pb-0">
            <div className="flex flex-col items-center gap-4">
              <Avatar className="size-24">
                <AvatarImage
                  src={user.avatar}
                  alt={user.name}
                  className="object-cover"
                />
                <AvatarFallback className="text-2xl font-semibold">
                  {user.name
                    .split(" ")
                    .map((n) => n[0])
                    .join("")
                    .toUpperCase()}
                </AvatarFallback>
              </Avatar>
              <div className="space-y-1">
                <div className="flex items-center justify-center gap-2">
                  <h3 className="text-xl font-semibold">{user.name}</h3>
                  {user.verified && (
                    <Badge variant="secondary" className="text-xs">
                      Verified
                    </Badge>
                  )}
                </div>
                {user.role && (
                  <p className="text-sm text-muted-foreground">{user.role}</p>
                )}
              </div>
            </div>
          </CardHeader>
          <CardContent className="space-y-4 pt-6">
            {user.bio && (
              <p className="text-sm text-muted-foreground">{user.bio}</p>
            )}
            <div className="flex flex-col items-center gap-2 text-sm text-muted-foreground">
              {user.location && (
                <div className="flex items-center gap-1.5">
                  <MapPin className="size-3.5" />
                  <span>{user.location}</span>
                </div>
              )}
              {user.email && (
                <div className="flex items-center gap-1.5">
                  <Mail className="size-3.5" />
                  <span>{user.email}</span>
                </div>
              )}
            </div>
          </CardContent>
          <CardFooter className="flex gap-2">
            <Button className="flex-1">Message</Button>
            <Button variant="outline" className="flex-1">
              Follow
            </Button>
          </CardFooter>
        </Card>
      </div>
    </section>
  );
};

export { UserProfile1 };
```
