Arc
ComponentsBlocksDocsPricingTry the demo
Get Pro
Introduction
Installation
Theming
Motion
AI and MCP
Changelog
Metrics dashboardPro
KPI drilldownPro
Metric explorerPro
Revenue explorerPro
MRR waterfallPro
Cohort retentionPro
Usage forecastPro
Journey flowPro
Uptime statusNewPro
Choropleth explorerPro
Connected scatterPro
Horizon chartPro
Market terminalPro
Budget variancePro
Small multiplesPro
Line replayPro
AI chatPro
AI composerPro
AI answerPro
Model pickerPro
Model arenaPro
Prompt studioPro
Document extractionPro
Agent memoryPro
AI side panelPro
Research runNewPro
Agent runPro
Agent tasksPro
Agent approvalsPro
Agent routinesPro
Agent orchestratorPro
MCP serversPro
Knowledge basePro
Eval suitePro
SidebarPro4
Page header
Command palette
Notification center
Selection toolbarPro
Empty states
Search resultsPro
Login and sign up5, free and Pro variants
Onboarding illustrationPro
OTP input
Multi-step formPro
Settings pagePro
Settings commandPro
Security settingsPro
Billing overviewPro
Usage billingPro
Cancel flowPro
Team membersPro
Invite peoplePro
Team directoryPro
Roles and permissionsPro
Profile pageNewPro
API keysPro
WebhooksPro
IntegrationsPro
Environment variablesPro
Plan comparison
Pricing calculatorPro
Usage pricingPro
Cart drawerPro
Checkout summaryPro
Live checkoutPro
Invoice studioPro
Wallet cardPro
Delivery trackerPro
Product listingPro
Product detailPro
Inbox triagePro
Support conversationPro
Support widgetPro
Help centerPro
File upload
Media playerPro
Week calendarPro
Availability pickerPro
Project boardPro
Release readinessPro
Kanban boardPro
Hero section
Hero signupPro
Scroll storyPro
Spotlight gridPro
Feature bentoPro
Comparison table
Logo marquee
Studio perspectivesPro
Stats band
Changelog feed
FAQ section
Contact section
Team showcasePro
Blog grid
Site header
Site footer
CTA section
Newsletter signup
Activity terrainPro
Revenue globePro
Customer galaxyPro
Semantic zoomPro
Layout morphPro
Exploded viewPro
What’s new8 new
BlocksProfile page

Profile page

Pro

A user profile with cover, bio, stats, activity and project tabs, and an edit sheet that writes back into the page.

Live block · sample data

When to use

  • A person's own profile with an edit flow
  • Public creator or member pages inside an app
  • Team member pages that show recent work

When not to use

  • Account security or billing settings, use settings-page
  • A directory of many people, use team-directory
  • A marketing team section, use team-showcase

Installation

Pro source and install commands unlock with a Pro plan.

Usage

Use this for member or creator profiles. Load the profile, stats, activity, and projects from your API, save edits through onSave, and persist stars through onStarChange; saving in the preview is simulated.

example.tsx
1import { ProfilePage } from "@/components/arc/blocks/profile-page/profile-page";2 3export function Profile({ user, activity, projects }) {4  return (5    <ProfilePage6      profile={user}7      activity={activity}8      projects={projects}9      onSave={async next => {10        const res = await fetch("/api/me", { method: "PATCH", body: JSON.stringify(next) });11        if (!res.ok) throw new Error("Could not save your profile.");12      }}13    />14  );15}
Built fromTabsAvatarDrawerInputTextareaButton

API reference

ProfilePage

A full profile screen: cover photo, overlapping avatar, name and headline, an about column with bio, links, and stats, and Activity and Projects tabs. Edit profile slides a sheet in from the right edge; saving writes the changes back into the page and briefly highlights every field that changed.

PropTypeDefaultDescription
profileProfileDetailssample profileName, handle, headline, location, website, bio, avatar and cover image paths, and the joined label.
statsProfileStat[]sample statsUp to three counts shown under the bio, each with an id, label, and value.
activityProfileActivity[]sample activityActivity items with a kind (shipped, commented, created, reviewed, starred), action text, target, optional detail, time, and a group heading such as This week.
projectsProfileProject[]sample projectsProject cards with a cover image, description, visibility, collaborators, updated label, and star count.
tab"activity" | "projects"–Controlled tab. Pair with onTabChange.
defaultTab"activity" | "projects""activity"Tab shown on mount when uncontrolled.
onTabChange(tab: ProfileTab) => void–Called when the tab changes.
onSave(profile: ProfileDetails) => void | Promise<void>–Persists edited details. Throw an Error to keep the sheet open and show its message. Without it the preview simulates a save.
onStarChange(projectId: string, starred: boolean) => void–Called when a project star is toggled.
profileUrlstring"https://northwind.app/@<handle>"Public link copied by Share.
editablebooleantrueShows Edit profile. Set false when someone views another person's profile.
classNamestring–Extra class on the root.

Keyboard interactions

Tab
Moves through Share, Edit profile, links, tabs, and project stars.
Arrow leftorArrow right
Switch between the Activity and Projects tabs.
Escape
Closes the edit sheet without saving and returns focus to Edit profile.
Enter
Saves the edit sheet from any single line field.

Accessibility

  • Tabs use tablist, tab, and tabpanel roles with roving tab index and aria-controls.
  • The edit sheet is a modal dialog with a labelled title; focus moves to the first field, stays inside while open, and returns to Edit profile on close.
  • Validation errors are tied to their inputs with aria-describedby and aria-invalid; save errors use role alert.
  • Star buttons expose aria-pressed and name the project and count. Share keeps its width while its label changes to Copied or Failed.

Motion

  • The tab underline travels between tabs on the morph spring; tab content fades up 6px.
  • The edit sheet slides from the right edge on the smooth spring over a fading scrim, and leaves the same way faster.
  • Saved fields glow once with the accent tint, and a new star pops with a small spring.
  • Reduced motion swaps the slide for a fade, keeps the highlight, and removes travel.

Responsive behavior

  • Below 760px the about column stacks above the tabs; below 560px project cards go to one column.
  • The cover shortens and the avatar shrinks on narrow screens; the edit sheet becomes full width.
  • The screen height is min(760px, 100dvh) and the page scrolls inside it.

Performance

  • Only transform and opacity animate; images are lazy except the cover.
  • The edit sheet mounts only while open.
  • Activity and projects render as plain lists; paginate beyond a few hundred items.

Notes for AI

Give your coding assistant the Markdown reference instead of screenshots.

  • Choose this for a member, creator, or teammate profile inside a product. It is a full screen: the page scrolls inside the block so the sheet always covers the visible area.
  • Load all data from your API and pass it in; the block owns only the edit draft and local star state.
  • Set editable={false} for other people's profiles and replace the actions with Follow or Message in your own fork.
  • Covers and avatars render with next/image; pass paths your image config allows.
/components/blocks/profile-page/markdown

The full library index for assistants is at /llms.txt.

Related

Settings pageProBlockAccount settings with a gliding section nav and a save bar that morphs in as you edit.Team directoryProBlockSearchable people, team filters, and a focused profile panel.Team membersProBlockA members list where typed emails turn into chips and fly into pending invites as seats roll.
PreviousProduct detailNextHelp center
Arc · 106 block pagesllms.txt

On this page

  • Preview
  • When to use
  • When not to use
  • Installation
  • Usage
  • API reference
  • Keyboard
  • Accessibility
  • Motion
  • Responsive behavior
  • Performance
  • Notes for AI
  • Related
View as Markdown
Jasmine Brooks

Jasmine Brooks

@jasmine·Design lead at Northwind

I lead the design system team and care about calm interfaces, clear writing, and tools that stay out of the way. Previously at Linear and Figma.

  • Lisbon, Portugal
  • jasminebrooks.design
  • Joined March 2021
Followers
2,418
Following
186
Shipped
37

This week

  1. Jasmine shipped Tokens v4

    Semantic color roles, dark mode surfaces, and new spacing steps.

    2h
  2. Jasmine commented on Checkout empty states

    Let us keep the illustration out and lead with the action.

    Yesterday
  3. Jasmine approved Table density toggle

    Tue
  4. Jasmine created Onboarding audit

    A shared board for the first run review with research notes.

    Mon

Earlier

  1. Jasmine starred Motion guidelines

    Sep 12
  2. Jasmine shipped Icon set 2.0

    412 icons redrawn on a 1.75px stroke.

    Sep 8
  3. Jasmine commented on Billing settings

    Sep 3