A modern, lightning-fast URL shortener built with Next.js 15 and the latest web technologies. Shurtle makes it easy to create, manage, and track your shortened URLs with a beautiful, responsive interface.
- π URL Shortening - Transform long URLs into short, memorable links
- π― Custom Slugs - Create personalized short URLs with custom slugs (optional)
- ποΈ Dashboard - Manage all your shortened URLs in one place
- β‘ Rate Limiting - Smart rate limiting to prevent abuse and protect your credit card
- π Dark Mode - Beautiful dark/light theme support
- π Authentication - Secure user authentication with Clerk
- π Pagination - Pagination for large collections of shurtles
- ποΈ Management - Delete unwanted shurtles
- β‘ Partial Prerendering - Static shell with dynamic content streaming
- π Server Components - Optimal balance of performance and security
- π¦ Optimized Bundles - Minimal JavaScript for lightning-fast loads
- π― Smart Caching - Intelligent caching strategies for better UX
- π― Intuitive Interface - Clean, modern design that's easy to use, thanks to @shadcn
- β‘ Fast Interactions - Optimistic updates and smooth transitions
- π Theme Support - Beautiful dark and light modes
- π οΈ TypeScript - Type-safe code for better maintainability
- π¦ Drizzle ORM - Type-safe database interactions
- Next.js 15 - React framework with App Router and Partial Prerendering
- React 19 - Latest React with Server Components and Suspense
- Tailwind CSS v4 - Utility-first CSS framework
- shadcn/ui - Beautiful, accessible UI components
- Lucide React - Modern icon library
- Neon Postgres (via Vercel) - Serverless Postgres database for storing shurtles
- Upstash Redis (via Vercel) - Serverless Redis for caching and rate limiting
- Drizzle ORM - Type-safe database toolkit
- Clerk - Complete authentication solution
- TypeScript - Type-safe JavaScript
- Vercel - Deployment and hosting platform
Check out the live version of Shurtle: shurtle.app
This project is currently deployed using free tiers of various services:
- Vercel - Free hosting and deployment
- Neon Postgres - Free database tier (limited storage and requests)
- Upstash Redis - Free Redis tier (limited storage and requests)
- Clerk - Free authentication tier (limited monthly active users)
This means the live demo may have usage limitations or occasional downtime.
- Node.js 22.x (LTS)
- pnpm
- A Vercel account (for databases) or Neon and Upstash accounts
- A Clerk account (for authentication)
-
Clone the repository
git clone https://github.com/danihengeveld/shurtle-ts.git cd shurtle
-
Install dependencies
pnpm install
-
Set up environment variables
Create a
.env.local
file in the root directory:# Database (Neon Postgres) POSTGRES_URL="your-postgres-url" # Redis (Upstash) KV_REST_API_URL="your-upstash-redis-url" KV_REST_API_TOKEN="your-upstash-redis-token" # Authentication (Clerk) NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY="your-clerk-publishable-key" CLERK_SECRET_KEY="your-clerk-secret-key"
-
Set up the database
# Push the database schema pnpm exec drizzle-kit push
-
Run the development server
pnpm dev
-
Open your browser
Navigate to http://localhost:3000 to see Shurtle in action!
- Create a new Postgres database via your Vercel dashboard or on Neon.
- Copy the connection strings to your
.env.local
file. - Run
npx drizzle-kit push:pg
to set up the schema.
- Create a new Redis instance via your Vercel dashboard on Upstash.
- Copy the REST API URL and token to your
.env.local
file.
- Create a new application on Clerk.
- Copy your publishable and secret keys to your
.env.local
file.
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
This project is open source and available under the MIT License.
Built with β€οΈ using Next.js 15, React 19, and modern web technologies.