DEV Community

Cover image for I built an open-source, self-hosted URL shortener with .NET 10 and React 19
Pritesh
Pritesh

Posted on

I built an open-source, self-hosted URL shortener with .NET 10 and React 19

When building modern web applications, URL shorteners are often treated as simple toy projects. But once you consider sub-5ms redirection speeds, high-concurrency traffic surges, dynamic geo/device routing, and strict GDPR privacy, link orchestration becomes a serious engineering challenge.

I wanted to solve this by building LinkLift — an enterprise-grade, self-hosted URL shortener and link orchestration platform built on ASP.NET Core (.NET 10), React 19, and Docker.

⭐ GitHub Repository: github.com/vpritesh/LinkLift (MIT Licensed)


🚀 What LinkLift Does

  1. Sub-5ms Redirection Engine: Hybrid L1 in-memory + Redis L2 distributed caching for instant resolution under heavy load.
  2. Dynamic Conditional Routing: Conditional rules that direct visitors based on:
    • Country (Geo-IP): US visitors to your US store, EU visitors to your EU site.
    • Device & OS: Automatically route mobile users to app stores and desktop users to web portals.
  3. Real-Time Click Telemetry: Live click streaming via SignalR WebSockets and Redis Pub/Sub — no page refreshes needed.
  4. GDPR & Privacy First: Built-in BotShield crawler filtering, daily-salted SHA-256 IP anonymization, and automated 90-day retention purge workers.
  5. Modern Executive Dashboard: Clean Charcoal-Blue theme, collapsible sidebar, global command palette (Ctrl+K), and SVG/PNG QR code generator.
  6. Multi-Server Fleet Switcher: Switch and manage multiple remote LinkLift instances right from the browser.

🏛 Architecture & Tech Stack

LinkLift follows Clean Architecture with strict separation of concerns:

  • Backend: ASP.NET Core 10 Minimal APIs, C# 13, EF Core 10
  • Frontend: React 19, TypeScript, Tailwind CSS, Vite
  • High-Throughput Channels: Bounded System.Threading.Channels queue to asynchronously batch click events to SQLite, Postgres, or SQL Server without blocking HTTP request threads.
  • Cache & Pub/Sub: Redis L2 cache and Redis SignalR bridge.

🐳 Quick Start with Docker

You can test the entire cluster locally in under 60 seconds:

git clone https://github.com/vpritesh/LinkLift.git
cd LinkLift
docker compose up -d --build
Enter fullscreen mode Exit fullscreen mode
  • Dashboard: http://localhost:3000
  • API & Swagger: http://localhost:5000/swagger
  • Default Master API Key: ll_live_master

💬 Feedback Welcome!

The project is completely free and open-source under the MIT license.

I would love to hear your feedback on the architecture, Docker setup, and features. If you find it interesting, please consider starring the repository on GitHub!

Top comments (0)