DEV Community

Narender singh
Narender singh

Posted on

I built a free URL shortener with built-in analytics — here's why

Every few months I find myself needing a short link. Maybe it's for a newsletter, a tweet, or a slide deck. So I go to one of the popular URL shorteners and... immediately regret it.

Bitly wants $35/month if you want to see where your clicks come from. TinyURL barely tells you anything. The free ones plaster ads everywhere. And half of them look like they were built in 2011.

I got tired of it. So I built my own.

Meet Briefly

Briefly is a URL shortener with built-in click analytics. No ads. No signup walls just to create a link. And you can actually see who's clicking your links without paying enterprise pricing.

Here's what it does:

  • Shorten any URL — clean, short links you can share anywhere
  • Click analytics — track clicks by country, device, browser, and referrer
  • Dashboard with charts — not just a number in a table, actual visual breakdowns
  • Custom slugs — pick your own short code if you want
  • QR codes — because apparently people still scan those (they do, I checked my own analytics)

The Dashboard

The main dashboard shows all your links in one place. You get total clicks, a sparkline for recent activity, and quick actions to copy or edit. Nothing fancy, just clean and functional.

Dashboard view showing links list with click counts and sparklines

The Analytics Page

This is the part I'm most proud of. Click on any link and you get a full breakdown:

  • Click timeline — see when people are clicking (turns out most of my traffic hits between 9-11am EST)
  • Geographic map — clicks by country, color-coded
  • Device split — desktop vs mobile vs tablet
  • Browser breakdown — Chrome dominates, obviously, but it's interesting to see the Firefox and Safari numbers
  • Top referrers — where the traffic is actually coming from

Analytics page with charts for clicks over time, geography, devices, and referrers

Pricing

I wanted to keep this accessible. Here's the deal:

Plan Price Links/month
Free $0 100 links
Pro $9/mo 1,000 links
Business $29/mo Unlimited

The free tier isn't some crippled demo. You get full analytics on every link. 100 links/month is plenty for most indie devs and small projects. Pro and Business just give you more volume and some extras like team access.

Tech Stack

For the nerds (hi, that's me too):

  • Next.js 15 — App Router, server components, the whole deal
  • Supabase — auth, database, real-time subscriptions for live click tracking
  • Vercel Edge — redirect handling runs at the edge so your short links resolve fast. Like, really fast. I'm seeing sub-50ms redirects in most regions.
  • Recharts — for the dashboard visualizations

I went with Supabase over a custom Postgres setup because honestly the auth and row-level security saved me probably two weeks of work. Sometimes the boring choice is the right choice.

Why not just use Bitly?

Look, Bitly is fine if you're a marketing team with budget. But I'm a solo dev who just wants to share links and know if anyone actually clicks them. I don't need campaign management or "branded domains" or whatever. I need a box where I paste a URL and get a short one back, with a chart that shows me what happened after.

That's it. That's the whole product.

Other tools I've built

Briefly is part of a small suite of dev tools I've been putting together. If you're into this kind of thing, check these out:

  • OGPix — generate Open Graph images via API. Drop in a URL and get a social preview image back. Super handy for dynamic OG tags.
  • PingBase — uptime monitoring for your sites. Get pinged when something goes down. I use it to monitor all my own projects, including Briefly.
  • QRGen — QR code generator. Clean, customizable QR codes. I actually use this inside Briefly for the QR code feature, which is kind of meta.

Try it out

Go to https://briefly-iota.vercel.app, paste a link, and shorten it. Takes about 3 seconds.

If you run into bugs or have feature ideas, I genuinely want to hear about it. Drop a comment here or open an issue. I'm building this stuff because I use it myself every day, so feedback from other devs is gold.

And if you've built something similar, I'd love to hear about your approach too. Always curious how other people solve this stuff.

Top comments (0)