A beautiful, customizable link portal template built with Next.js 16, React 19, and Tailwind CSS 4. Features smooth animations, responsive design, and an optional CRT terminal background effect.
- Single Configuration File - All content managed through
site.config.ts - Responsive Design - Looks great on mobile, tablet, and desktop
- Smooth Animations - Framer Motion and GSAP powered interactions
- CRT Terminal Effect - Optional WebGL background effect (toggleable)
- RSS Blog Integration - Pull recent posts from any RSS feed
- Dark Mode Ready - Full light/dark theme support
- Static Export - Deploy anywhere (GitHub Pages, Vercel, Netlify)
- Free Fonts - Uses Inter and JetBrains Mono from Google Fonts
See the full customization guide for detailed documentation on each section of the page, including example AI prompts for quick customization.
# Clone the repository
git clone https://github.com/yourusername/linktree-alternative.git
cd linktree-alternative
# Install dependencies
npm installEdit src/config/site.config.ts to customize:
- Metadata - Title, description, favicon
- Branding - Logo, tagline, email, website URL
- Navigation - Header menu items
- Social Links - Up to 5 social media links
- Resources - Featured projects/resources (up to 3)
- Tools - Tech stack showcase (up to 16 items)
- Blog - RSS feed integration
Replace placeholder files in /public:
/images/logo-placeholder.svg- Your logo/icons/tech/placeholder.svg- Your tool icons/images/placeholder-resource-*.svg- Your project images
npm run devVisit http://localhost:3000 to see your site.
# Build for production
npm run build
# Preview the build
npm run startexport const siteConfig = {
// Site metadata for SEO
metadata: {
title: "Your Name | Links",
description: "All my important links in one place",
favicon: "/favicon.png",
},
// Google Analytics (leave empty to disable)
analytics: {
googleAnalyticsId: "",
},
// Branding
branding: {
logo: "/images/logo-placeholder.svg", // or null to hide
logoAlt: "Your Brand",
websiteUrl: "https://example.com",
tagline: "Your tagline goes here.",
email: "hello@example.com",
copyrightYear: "2024",
},
// Feature toggles
features: {
crtEffect: true, // Toggle CRT background
crtTint: "#FFFAEE", // CRT effect tint color
crtBrightness: 0.08, // CRT effect brightness
subscribeModal: false, // Show modal before resources
},
// Theme colors
theme: {
accentColor: "#3b82f6", // Customize accent color
darkBg: "#191919",
lightBg: "#FFFAEE",
},
// Navigation items (shown in expandable header)
nav: [
{ id: "about", label: "About", href: "#" },
{ id: "projects", label: "Projects", href: "#" },
{ id: "contact", label: "Contact", href: "#" },
],
// Social links (max 5 recommended)
socialLinks: [
{
id: "github",
platform: "github",
title: "GitHub",
handle: "@yourusername",
url: "https://github.com/yourusername",
icon: "github",
},
// ... more links
],
// Featured resources/projects (max 3)
resources: [
{
id: "project-1",
title: "Your Project",
description: "Description here",
badge: "live", // "live" or "coming-soon"
link: "https://example.com",
buttonLabel: "View Project",
mediaDefault: "/images/placeholder-resource-01.svg",
mediaType: "image", // "image" or "video"
imageHover: "/images/placeholder-resource-02.svg",
},
// ... more resources
],
// Tech stack / tools (up to 16)
tools: [
{
id: "tool-1",
name: "Tool Name",
icon: "/icons/tech/placeholder.svg",
url: "https://example.com",
description: "What you use it for",
tags: [
{ label: "Category", bg: "#5326ab", text: "#fff" },
],
},
// ... more tools
],
// Blog section (RSS integration)
blog: {
enabled: true,
feedUrl: "https://example.substack.com/feed",
title: "Recent Posts",
subscribeUrl: "", // Leave empty to hide newsletter form
},
};github,twitter,linkedin,instagram,youtubetiktok,substack,medium,figma,dribbblecustom(generic link icon)
To change the accent color throughout the site:
- Update
theme.accentColorinsite.config.ts - Update the brand color scale in
src/app/theme.css:
/* Brand Scale - Customize for your brand */
--color-brand-25: #f5f8ff;
--color-brand-50: #eff6ff;
--color-brand-100: #dbeafe;
/* ... update all brand scale values */
--color-brand-500: #3b82f6; /* Main accent */
/* ... */The template uses Google Fonts (Inter + JetBrains Mono). To change fonts:
- Update the
@importinsrc/lib/brand-styles/brand.css - Update font-family references in
globals.cssandbrand.css
Toggle the retro CRT terminal background:
features: {
crtEffect: true, // Enable/disable
crtTint: "#FFFAEE", // Tint color
crtBrightness: 0.08, // Brightness (0-1)
}Looking for components, icons, or design inspiration? Here are some curated resources:
- Open Session Design Directory — Curated design resources, tools, and inspiration
- React Bits — Animated components and micro-interactions for React
- Untitled UI — Icons, design system foundations, and UI components
- Simple Icons — Free SVG icons for popular brands (great for tool icons)
- Realtime Colors — Visualize your color palette on a real site
- Coolors — Color palette generator
- Update
basePathinnext.config.ts:
basePath: "/your-repo-name",-
Update
getBasePath()insite.config.tsto match. -
Build and deploy:
npm run build
# Upload /out folder to GitHub Pages- Remove or set
basePathto empty string - Connect your GitHub repo to Vercel
- Deploy automatically on push
- Set build command:
npm run build - Set publish directory:
out - Deploy
- Framework: Next.js 16 (App Router)
- React: 19
- Styling: Tailwind CSS 4
- Animations: Framer Motion, GSAP
- WebGL: OGL (CRT effect)
- Fonts: Inter, JetBrains Mono (Google Fonts)
linktree-alternative/
├── public/
│ ├── images/ # Logos, resource images
│ ├── icons/tech/ # Tool icons
│ └── favicon.png
├── src/
│ ├── app/
│ │ ├── layout.tsx # Root layout
│ │ ├── page.tsx # Main page
│ │ ├── globals.css # Global styles
│ │ └── theme.css # Theme colors
│ ├── components/
│ │ ├── CardNav.tsx # Header navigation
│ │ ├── OurLinks.tsx # Social links section
│ │ ├── FreeResources.tsx # Resources section
│ │ ├── TechStack.tsx # Tools carousel
│ │ ├── RecentBlogs.tsx # Blog posts section
│ │ └── Footer.tsx # Footer
│ ├── config/
│ │ └── site.config.ts # All configuration
│ └── lib/
│ └── brand-styles/ # Brand CSS
└── package.json
npm run dev # Start dev server
npm run build # Production build
npm run lint # Run ESLint
npm start # Start production server- Check the path — Image paths must start with
/(e.g.,/images/logo.svg, notimages/logo.svg) - Verify the file exists — Make sure the file is in the
public/folder at the exact path you specified - Check file extension — Ensure the extension in your config matches the actual file (
.svgvs.png)
- RSS feed must be public — The feed URL needs to be accessible without authentication
- Check the URL — Visit your
feedUrldirectly in a browser to verify it returns XML - CORS issues — Some feeds block cross-origin requests; try a different RSS source or use a proxy
- basePath configuration — Update
basePathinnext.config.tsto match your repository name:basePath: "/your-repo-name",
- Update getBasePath() — Also update the helper function in
site.config.tsto return the same value - Clear cache — Try a hard refresh (Cmd+Shift+R on Mac, Ctrl+Shift+R on Windows)
- Use SVG when possible — SVG files scale perfectly at any size
- Increase resolution — For PNG/JPEG, use at least 2x the display size (e.g., 200x200px for a 100x100px display)
- Check compression — Some compression tools reduce quality too aggressively
- Update both locations — Change
theme.accentColorinsite.config.tsAND the brand color scale insrc/app/theme.css - Full color scale needed — The CSS uses multiple shades (brand-50 through brand-900); update them all for consistency
- Use a palette generator — Tools like Coolors or Realtime Colors can generate a full scale
- Port in use — Another app may be using port 3000. Try
npm run dev -- -p 3001 - Node version — Ensure you're using Node.js 18 or higher (
node --version) - Clear cache — Delete
.nextfolder andnode_modules, then runnpm installagain
- Check the section-specific documentation for detailed guides
- Each doc includes AI prompts you can copy-paste to get help with changes
Built with Next.js, Tailwind CSS, Framer Motion, and GSAP.