

Self-Hosted Referral Links Without the /s/
I tried Slash for my referral links. The /s/ prefix gave them away. So I built plink: a single-binary shortener with clean slugs on your own domain.
Raw referral links are self-defeating. When someone sees a URL with ref= or a /s/ prefix, they know two things: it’s a shortener, and you earn something if they click. Some people skip these on principle. Others open them but strip the referral parameter before buying. Either way, you lose the commission.
The fix is to hide the destination. Give people yourdomain.com/shopee with no indication of where it goes.
I looked at Slash first#
Slash is a self-hosted link shortener with a few thousand GitHub stars, active development, Docker deployment, analytics, and multi-user workspace support. For team bookmarks and internal shortcuts, it works well.
The problem: Slash uses a /s/ prefix. Your link becomes yourdomain.com/s/shopee. For internal shortcuts shared with a team, that format is fine. For referral links meant to look natural, the /s/ announces what you’re doing.
Slash targets teams sharing internal shortcuts. The /s/ prefix keeps the namespace clean and predictable for that use case. Referral link hiding is a different problem.
What I built instead#
plink is a single Go binary. SQLite database, templates embedded directly in the binary via Go’s embed package. No Docker, no npm, no build step. Deploy it by copying a binary and an env file to your server. Clean slugs by default: yourdomain.com/shopee, destination invisible from the URL.
The admin panel sits behind a configurable path you set in your env file. The path doesn’t appear in the source code. Visitors browsing your public link list have no way to find the admin URL from the page source.
Click analytics are built in: total counts, a 30-day chart, and referrer breakdown. That last one tells you where your traffic comes from, which is more useful than the total number alone.
The code is on GitHub: github.com/srmdn/plink ↗
Slash vs plink#
| Slash | plink | |
|---|---|---|
| URL format | domain.com/s/link | domain.com/link |
| Deployment | Docker | Single binary |
| Users | Multi-user, teams | Single user |
| Frontend | React + TypeScript | Vanilla HTML, embedded |
| Database | SQLite or PostgreSQL | SQLite |
| Browser extension | Yes | No |
| License | AGPL-3.0 | MIT |
Is This Right for You?#
Use plink if you run referral links on your own domain and want the destination hidden from the URL. The single-binary deployment is a practical advantage on a VPS you’re already managing.
Use Slash if you want team collaboration, a browser extension, or you’d rather run a maintained Docker image. The community is larger and the feature set is broader.
The clean slug vs /s/ distinction sounds minor. For referral links, it changes whether visitors click or not.