A modern link-in-bio platform where users sign in with wallet, email, or social accounts and get their own personalized page at domain.com/[username].
- 🔐 Multi-Auth Support - WalletConnect, Email, Google, GitHub, Apple, X, Discord
- 👤 Dynamic user profiles at
/[username] - 🔗 Customizable links with icons (Simple Icons integration)
- 📝 Bio editing
- 🖼️ Profile picture upload with client-side compression
- 🎨 Modern, responsive UI
- 🌙 Dark mode support
- 💾 Database-backed storage - All images stored in PostgreSQL
-
Install dependencies:
npm install
-
Set up environment variables: Create a
.envfile in the root directory:DATABASE_URL="postgresql://user:password@localhost:5432/neetmetree" NEXT_PUBLIC_REOWN_PROJECT_ID="your_reown_project_id" NEXT_PUBLIC_APP_URL="http://localhost:1337" NEXTAUTH_URL="http://localhost:1337" NEXTAUTH_SECRET="your-secret-key-change-this-in-production"
Important: You need a PostgreSQL database running locally. You can:
- Install PostgreSQL locally
- Use Docker:
docker run --name postgres -e POSTGRES_PASSWORD=password -p 5432:5432 -d postgres - Use a cloud PostgreSQL service (like Railway, Supabase, or Neon)
-
Get Reown Project ID:
- Sign up at Reown Dashboard
- Create a new project
- Copy your Project ID
-
Set up the database:
npm run db:generate npm run db:push
-
Run the development server:
npm run dev
-
Open http://localhost:1337 in your browser.
See RAILWAY_DEPLOYMENT.md for complete deployment instructions.
Quick Railway Setup:
- Push code to GitHub
- Create Railway project from GitHub repo
- Add PostgreSQL database
- Set environment variables (see
.env.example) - Run
railway run npm run railwayto migrate database - Deploy!
- Next.js 14 - React framework
- Reown (WalletConnect) - Authentication (600+ wallets, social, email)
- Prisma - Database ORM
- PostgreSQL - Database (required for all environments)
- Tailwind CSS - Styling
- TypeScript - Type safety
- Simple Icons - Social media icons
├── pages/
│ ├── [username].tsx # Dynamic user profile page
│ ├── dashboard.tsx # User dashboard for editing
│ ├── index.tsx # Landing page
│ ├── setup/ # Username setup flow
│ └── api/
│ ├── auth/ # Authentication routes
│ ├── links/ # Link management API
│ ├── profile.ts # Profile update API
│ ├── upload/ # Image upload API
│ └── images/ # Image serving API
├── lib/
│ ├── appkit.ts # Reown AppKit configuration
│ ├── authContext.tsx # Auth context provider
│ ├── auth.ts # Auth middleware
│ ├── prisma.ts # Prisma client
│ ├── socialIcons.ts # Simple Icons integration
│ └── utils.ts # Utility functions
├── prisma/
│ └── schema.prisma # Database schema (PostgreSQL)
└── styles/
└── globals.css # Global styles
See .env.example for all required environment variables.
Required:
DATABASE_URL- PostgreSQL connection stringNEXT_PUBLIC_REOWN_PROJECT_ID- Reown project IDNEXT_PUBLIC_APP_URL- Application URLNEXTAUTH_URL- NextAuth URL (same as APP_URL)NEXTAUTH_SECRET- Secret key for sessions
PostgreSQL is required for all environments (development and production).
All user-uploaded content (avatars, custom icons) is stored as base64 in PostgreSQL.
Option 1: Local PostgreSQL Installation
- Install PostgreSQL on your machine
- Create a database:
createdb neetmetree - Update
DATABASE_URLin.env
Option 2: Docker
docker run --name postgres-neetmetree \
-e POSTGRES_PASSWORD=password \
-e POSTGRES_DB=neetmetree \
-p 5432:5432 \
-d postgresOption 3: Cloud PostgreSQL (Recommended)
- Use Railway, Supabase, or Neon for a free PostgreSQL database
- Copy the connection string to your
.envfile
MIT