Loading the page…
Loading the page…
Loading the page…
A complete contacts manager for React and shadcn/ui: folders and labels, highlighted search, filters, list, grid and table views, details, activity and notes, validated forms with photo crop, bulk actions with Undo, CSV and vCard import/export. Light and dark, phone to desktop.
by UpFork, built by Ramin ValadanComponentUpdated 16 Oct 2026
Before you buy
How this component gets from the preview into your project, and what buyers ask most.
How to use it
From the preview to your project
Try it in the preview
Switch between light and dark, and resize it to phone and tablet widths, before you decide.
Get it
Free products are yours with a free account. Paid ones settle in USDT on TRON, sent straight to the wallet on your order.
Install it
Components go into your project with one shadcn command, dependencies included. Everything else downloads with a checksum.
Make it yours
It's your code now: rename it, restyle it and wire in your real data.
Or hand it to your AI
Copy the prompt and let your coding assistant place it in your project, following your conventions.
Yes, a free one: it keeps your order, every payment you make for it and the files together. Free products need it too: without an account you can look and try the live preview, but not download, install or copy anything.
Send the price as a USDT transfer on TRON (TRC-20) to the wallet on your order, shown with its QR code, then paste the transaction ID on the order. It's checked on-chain, and the files unlock once it's confirmed. Paid less? You're asked for the rest.
Yes. The Standard License covers unlimited personal and commercial projects, client work included; just don't resell it on its own. Open-source licenses say so on the product.
Create a CLI token on your account page, put it in your project's .env.local, add UpFork to components.json once, and install with npx shadcn add: free and paid components alike.
Onto your order, in your account. Download links last ten minutes and can be made again.
Releases are scanned for malware and reviewed before anyone can download them, and every file shows its SHA-256 so you can check what you got.
Building with an AI assistant?
Copy a ready-made prompt with the code, its dependencies and a demo, and your assistant can put it in place for you.
Selling your own work?
Get approved once, then publish components, templates and mobile components, paid in USDT straight to your own wallet.
Components
48 files · 11 packages · 35 assets
The code comes with the Pro plan
The files above install into your project with one command, or download as a ZIP.
See the plansA complete contacts and light-CRM screen (the dashboard's /apps/contact) built on shadcn/ui with Base UI
primitives, Tailwind CSS 4, zustand, react-hook-form + zod, libphonenumber-js, react-easy-crop, motion
and sonner. shadcn's neutral palette only (plus six label dots), light and dark, phone to wide desktop.
npm install
npm run dev # http://localhost:5501
npm run build && npm run start # review build on http://localhost:5500
import { Contacts } from "@/components/contacts/contacts"
<Contacts /> // the demo address book (33 people)
<Contacts contacts={mine} labels={myLabels} links={{ email: (c) => `/apps/mail?compose=${c.email}` }} />
Mount one sonner <Toaster /> in your app (as app/layout.tsx does): every change shows a toast with Undo.
/, debounced, clear button) across name, e-mail, phone digits, city, company and notes with
the match highlighted; Sorted A-Z / Z-A plus Name, Recently added, City and Status; a Filter popover (status,
labels with any / all, city, date added, has phone, is favourite) with a count badge; List / Grid / Table; select
mode. Under it, a removable chip for every filter, Clear all and "12 of 25 contacts".tel:), Email, Message, Schedule (an .ics invite)
and More (Edit, Favourite, Spam, Block, Delete, Copy email, Copy phone, Export vCard, Share); previous / next
(J / K); Overview (phone "+1 (753) 456-7890" and e-mail with copy, city, added on with a relative time,
company, job title, note, labels), Activity (a timeline) and Notes (yours editable, a teammate's read-only).| Prop | |
|---|---|
contacts, labels | your data (Contact[], Label[] from components/contacts/types.ts); the demo book otherwise |
links | { call, email, message, schedule }, each (contact) => href: point Email, Message and Schedule into your Mail, Chat and Calendar apps. Defaults: tel:, mailto:, sms: and an .ics invite |
onContactsChange | (contacts, labels) => void after every change, to save them |
defaultContactId, defaultView | what opens first when the URL doesn't say |
syncUrl | false keeps the URL alone (live previews, several instances) |
| Path | |
|---|---|
components/contacts/contacts.tsx | Contacts: panes by its own width, URL state, sheets and dialogs |
components/contacts/logic.ts | pure helpers: filters, search, sort, groups, counts, phone and date formats, CSV, vCard, .ics |
components/contacts/store.ts | the zustand store and the pure edits of the book (ops) |
components/contacts/commands.ts | what buttons do: toasts with Undo, confirmations, the unsaved-changes guard |
components/contacts/data.ts | the demo book: labels, statuses, notes, activity, the sample CSV |
lib/people.ts | the people (name, e-mail, E.164 phone, city, company, photo), shared by the dashboard's apps |
components/ui/ | the shadcn/ui primitives (Base UI flavour) |
public/images/avatars/ | the 35 profile photos (npm run avatars, credits in CREDITS.md) |
Photos: free Unsplash photos chosen to fit each name; people who also appear in the Mail and Chat apps (John Doe, Emma Wilson, Rachel Green, Alex Thompson, Sarah Johnson) have the same photo there. Names, companies, numbers (555-01xx and the other ranges kept for fiction) and notes are invented.
| Command | |
|---|---|
npm run lint, npm run typecheck, npm run build | ESLint, TypeScript, the production build |
npm test | 15 unit tests of logic.ts and the demo data (Vitest) |
node scripts/e2e.mjs | 82 clicks through every feature in Chrome (against RAPPORT_URL, default :5500) |
node scripts/a11y.mjs | axe on 11 screens, light and dark |
npm run shots | screenshots: 12 views × light / dark × 1440, 1280, 1024, 768, 390 px into screenshots/ |
npm run registry, npm run zip | the listing copy in registry/ and rapport.zip for UpFork |
0 reviews · 0 bugs
Ship it0With fixes0Skip0· 0 reviews
0 bugs0 open0 fixed
Members who have it review it and report its bugs. Sign in
No reviews or bugs yet.
Ctrl/⌘+EnterEsc? lists them): / N ↑ ↓ Enter J K E F X Delete Esc, g a / g f / g s /
g b, 1 / 2 / 3. They pause while you type.?folder=spam&label=lead&status=active&q=…&view=grid&id=<contact>; view, sort, density and
columns are remembered in localStorage.