Skip to content

Try Demo

The best way to understand how vanityURLs works is to look at a real, running deployment. v8s.link is the official reference implementation, maintained by the vanityURLs team and deployed at v8s.link.

Purposefully open

The v8s.link repository is public so you can compare it against your own setup when something isn’t working. Every file is annotated here with explanations.

Try a live redirect

These links at v8s.link are live now — click them to see redirects in action:

Short URLDestinationType
v8s.link/gitgithub.com/vanityURLs/v8s.linkstatic, 301
v8s.link/githubgithub.com/vanityURLs/static, 301
v8s.link/linkedinlinkedin.com/in/bhdicaire/static, 301
v8s.link/github/vanityURLsgithub.com/vanityURLs/vanityURLssplat, 302
v8s.link/blogvanityURLs.link/en/blogstatic, 301

The splat example is the most interesting — v8s.link/github/ANYTHING forwards to github.com/vanityURLs/ANYTHING. This pattern is defined once in dynamic.lnk.

The v8s.link deployment is evidence that the architecture works:

  1. Zero latency — Cloudflare edge nodes process redirects before any origin request is made
  2. Zero cost — runs entirely on the Cloudflare free tier
  3. Zero maintenance — no server to patch, no runtime to update, no dependencies to audit
  4. Full control — the complete redirect table is a plain text file in a public git repository
  5. Auditable — every change, every link, every decision has a git commit and timestamp

The entire “service” is a _redirects file and a domain. There is no application, no database, and no binary you cannot inspect.

What’s current and what’s outdated

The v8s.link repository is a working proof of concept, but not everything in it represents the ideal final state. This table helps you know what to adopt and what to improve:

File / featureStatusNotes
vanityURLs.conf✅ Good referenceAll variables documented; update REPO_DIR to your path
static.lnk — core links✅ Good reference/git, /github, /blog, /linkedin are clean patterns
static.lnk/ALM, /VVa, /HHU⚠️ OutdatedShort test entries, not meaningful for new users
dynamic.lnk — splat redirect✅ Great exampleThe /github/* pattern is the best use of dynamic.lnk
build/_headers✅ CorrectMinimal but correct security headers
Makefile✅ Good referenceShows make setup workflow clearly
scripts/lnk✅ CurrentSee Commands for full reference
scripts/validateURL⚠️ UndocumentedSee the validateURL reference
README.md⚠️ MinimalNeeds updating to reflect current docs
GitHub Actions (.github/)⚠️ Check workflowConfirm the build command matches your setup

What new users need to add

After cloning the template and running make setup, the initial static.lnk contains placeholder links pointing to bhdicaire.com. Here’s a checklist of what to update for your own deployment:

New user setup checklist
  • Edit vanityURLs.conf — set REPO_DIR, MY_DOMAIN, MY_PAGE, SHORTCODE_LENGTH
  • Replace static.lnk root redirect: / → https://YOUR-MAIN-SITE.com
  • Update social links: /linkedin, /github, /x to your profiles
  • Remove placeholder entries: /blog https://blog.example/, /mail, /slack
  • Clear dynamic.lnk splat (it points to bhdicaire): update to your GitHub org
  • Verify DNS: CNAME/ALIAS pointing to your YOUR-PROJECT.pages.dev
  • Confirm build/_headers uses your actual domain and Pages URL
  • Push and check Cloudflare Pages build succeeds
  • Run lnk validate --live to confirm all destinations are reachable