Back to projects
12Full-stack · Link Analytics2026Live

Wasel

A modern link shortener (“Wasel” — connected) with a real analytics dashboard: custom slugs, downloadable QR codes, and per-link click analytics broken down by time, referrer, country, and device — with redirects that fire instantly and log in the background.

Screenshots
Details

Role: Solo developer

Status: Live

Next.jsTypeScriptPrismaNeon PostgresTailwind CSSRechartsiron-sessionqrcodeDocker
Problem

A link shortener is easy to build badly. The redirect has to feel instant — a visitor should never wait on the app while it records analytics — yet you still want rich data on every click: when it happened, where it came from, which country, and what device. Doing both means the click path can't block on logging, and the analytics have to be derived from raw request signals (referrer headers, geo, and user-agent parsing) rather than a heavy third-party tracker.

Approach

Wasel is a full-stack link shortener with analytics built in. Links: create short links with auto-generated or custom slugs, and download a PNG QR code for any link. Instant, non-blocking redirects: the redirect fires immediately and the click is logged afterward, so the visitor never waits on analytics work. Analytics dashboard: each link has a 30-day click timeline, a referrer breakdown, a country map with flags, and a device split (mobile/desktop/tablet) — derived from request headers and user-agent parsing, charted with Recharts. Admin: a session-based (iron-session JWT cookie) admin behind protected routes manages links and views stats. Built on Next.js 15 (App Router) + TypeScript, Prisma against Neon Postgres, Tailwind, and the qrcode library, deployed via Docker/Coolify with a DB health check.

Outcome

A clean, complete product that nails the detail that matters — instant redirects with full click analytics behind them — rather than just mapping a slug to a URL.