A customizable Linktree clone built with Next.js, TypeScript & Tailwind CSS
A personal landing page to showcase all your social links, embedded content, and online presence in one place — with support for Twitter embeds, Instagram posts, YouTube videos, and more.
- Data-driven cards — add links by editing a single file (
src/data.ts), no component changes needed - Social media embeds — native embeds for Twitter/X posts, Instagram cards, and YouTube videos
- Responsive layout — sidebar + masonry card grid that adapts from mobile to desktop
- Dark mode — built-in dark mode support via Tailwind CSS
- Animated transitions — smooth card animations powered by Framer Motion
- Customizable profile — avatar, bio, social links, all configurable from constants files
| Layer | Technology |
|---|---|
| Framework | Next.js 12 (Pages Router) |
| Language | TypeScript |
| Styling | Tailwind CSS + Radix UI Themes |
| State | Zustand |
| Animations | Framer Motion |
| Embeds | react-social-media-embed / react-twitter-embed |
- Node.js >= 16
- npm
git clone https://github.com/mrLuisFer/linktry.git
cd linktry
npm installnpm run devOpen http://localhost:3000 to view it in the browser.
npm run build
npm startsrc/
├── pages/ # Next.js pages (single route: index)
├── components/
│ ├── core/
│ │ ├── Cards/ # Base card components and skeleton loaders
│ │ └── Embeds/ # Twitter, Instagram, YouTube embed components
│ └── home/
│ ├── CardsLayout/ # Masonry grid + card type selector
│ └── Sidebar/ # Profile sidebar (header, avatar, footer)
├── constants/
│ ├── userConfig.ts # Personal info (name, avatar, bio)
│ └── socialLinks.ts # Social platform links for sidebar
├── data.ts # Card data array — main content source
├── store/ # Zustand stores
├── hooks/ # Custom React hooks
└── types/ # TypeScript type definitions
Edit src/constants/userConfig.ts with your personal information:
export const userConfig = {
avatar: '/assets/avatar.jpg',
firstName: 'Your Name',
username: 'yourUsername'
// ...
}Edit src/constants/socialLinks.ts to add or modify sidebar links.
Add entries to src/data.ts. Each card needs at minimum:
{
id: generateId(),
type: 'github', // card type
url: 'https://...', // destination URL
title: 'My GitHub', // card title
}Available card types: any string for base cards (rendered with BaseCardWithProps), or use tweet, instagramCard, youtube for embedded content.
- Create a component in
src/components/core/Embeds/ - Add a case in
src/components/home/CardsLayout/CardsSelect.tsx
| Command | Description |
|---|---|
npm run dev |
Start development server |
npm run build |
Create production build |
npm start |
Start production server |
npm run lint |
Run ESLint |
npm run format |
Format code with Prettier |
- Fork the repository
- Create a feature branch (
git checkout -b feature/my-feature) - Commit your changes with a descriptive message
- Push to your branch (
git push origin feature/my-feature) - Open a Pull Request
This project is licensed under the MIT License — see the LICENSE file for details.