> ## Content Index
> Fetch the complete content index at: https://darkwebinformer.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# OneURL: An open-source alternative to Linktree. Create a profile page to share all your important links in one place
- URL: https://darkwebinformer.com/oneurl-an-open-source-alternative-to-linktree-create-a-profile-page-to-share-all-your-important-links-in-one-place/
- Published: 2026-01-08T19:13:20.000Z
- Updated: 2026-01-08T19:13:20.000Z
- Author: Dark Web Informer
- Tags: Tools

---

GitHub: <https://github.com/KartikLabhshetwar/oneurl>

---

# OneURL

[](https://github.com/KartikLabhshetwar/oneurl#oneurl)

**One URL for all your links** \- An open-source alternative to Linktree. Create a beautiful profile page to share all your important links in one place.

## Features

[](https://github.com/KartikLabhshetwar/oneurl#features)

- **Google OAuth Authentication** \- Secure and seamless sign-in with your existing Google account
- **Custom Profile Pages** \- Create personalized profile pages with your unique username
- **Link Management** \- Add, edit, and reorganize your links effortlessly
- **Deep Analytics** \- Track clicks and view detailed insights about your audience engagement
- **Avatar Upload** \- Upload and customize your profile picture with drag-and-drop support
- **Responsive Design** \- Your profile looks perfect on every device
- **Fast & Modern** \- Built with Next.js 16 and React 19 for instant page loads

## Tech Stack

[](https://github.com/KartikLabhshetwar/oneurl#tech-stack)

- **Framework:** Next.js 16 (App Router)
- **Backend:** Express.js (separate service for link previews)
- **Language:** TypeScript
- **Database:** PostgreSQL with Prisma ORM
- **Authentication:** Better Auth
- **File Upload:** UploadThing + React Dropzone
- **State Management:** TanStack Query (React Query)
- **Styling:** Tailwind CSS
- **UI Components:** Base UI React
- **Charts:** Recharts

## Prerequisites

[](https://github.com/KartikLabhshetwar/oneurl#prerequisites)

Before you begin, ensure you have:

- Node.js 20+ or Bun installed
- PostgreSQL database (local or cloud like Neon)
- Google OAuth credentials
- UploadThing account (free tier available)

## Getting Started

[](https://github.com/KartikLabhshetwar/oneurl#getting-started)

### 1\. Clone the Repository

[](https://github.com/KartikLabhshetwar/oneurl#1-clone-the-repository)git clone https://github.com/KartikLabhshetwar/oneurl.git  
cd oneurl

### 2\. Install Dependencies

[](https://github.com/KartikLabhshetwar/oneurl#2-install-dependencies)bun install  
\# or  
npm install

### 3\. Set Up Environment Variables

[](https://github.com/KartikLabhshetwar/oneurl#3-set-up-environment-variables)

Create a `.env` file in the root directory:

\# Database  
DATABASE\_URL="postgresql://user:password@localhost:5432/oneurl"  
  
\# Better Auth  
BETTER\_AUTH\_SECRET="your-secret-key-here"  
BETTER\_AUTH\_URL="http://localhost:3000"  
  
\# Google OAuth  
GOOGLE\_CLIENT\_ID="your-google-client-id"  
GOOGLE\_CLIENT\_SECRET="your-google-client-secret"  
  
\# UploadThing - for file uploads  
UPLOADTHING\_TOKEN="your-uploadthing-token"  
  
\# Backend Service  
\# Development: http://localhost:3001  
\# Production: https://api.oneurl.live  
BACKEND\_URL="http://localhost:3001"

> **Note:** UploadThing is optional. If not configured, you can still use the app but avatar uploads won't work. Sign up at [uploadthing.com](https://uploadthing.com/) to get your credentials.

### 4\. Set Up Database

[](https://github.com/KartikLabhshetwar/oneurl#4-set-up-database)\# Generate Prisma Client  
bun prisma generate  
  
\# Run migrations  
bun prisma migrate dev

### 5\. Set Up Backend Service

[](https://github.com/KartikLabhshetwar/oneurl#5-set-up-backend-service)

The backend service handles link preview metadata fetching. Create a `.env` file in the `backend` directory:

PORT=3001  
FRONTEND\_URL=http://localhost:3000  
NODE\_ENV=development

Install backend dependencies:

cd backend  
bun install  
cd ..

### 6\. Run the Development Servers

[](https://github.com/KartikLabhshetwar/oneurl#6-run-the-development-servers)

**Option 1: Run both services together**

bun run dev:all

**Option 2: Run separately**

\# Terminal 1 - Frontend  
bun run dev  
  
\# Terminal 2 - Backend  
bun run dev:backend

Open [http://localhost:3000](http://localhost:3000/) in your browser. The backend service runs on [http://localhost:3001](http://localhost:3001/).

## Project Structure

[](https://github.com/KartikLabhshetwar/oneurl#project-structure)

```
oneurl/
├── app/                    # Next.js app directory
│   ├── (auth)/            # Authentication routes (login, signup)
│   ├── (dashboard)/       # Dashboard routes (protected)
│   ├── (onboarding)/      # Onboarding flow
│   ├── [username]/        # Public profile pages
│   └── api/               # API routes
├── backend/               # Express backend service
│   ├── src/
│   │   ├── routes/        # API routes
│   │   ├── middleware/    # Rate limiting, validation, error handling
│   │   └── utils/         # Metadata fetching utilities
│   └── package.json       # Backend dependencies
├── components/            # React components
│   ├── landing/           # Landing page components
│   └── ui/                # UI component library
├── hooks/                 # Custom React hooks
├── lib/                   # Utility functions and services
│   ├── generated/         # Generated Prisma client
│   ├── hooks/             # Custom hooks
│   ├── services/          # Business logic services
│   └── validations/       # Zod schemas
├── prisma/                # Prisma schema and migrations
└── public/                # Static assets
```