shebang!

Public ids and urls

How p., f., and sl. addresses are built, and why they never change.

Public ids and urls

Every published page and every uploaded file gets a direct, permanent URL built from a random public id — 12 characters from a 32-symbol alphabet, matching ^[a-z2-7]{12}$:

  • A page: p.shebang.pro/<id>
  • An uploaded file: f.shebang.pro/<id>

The id is assigned once, at creation, and never changes — renaming the page's title or its dashboard label doesn't touch the URL. Older accounts may still see a @handle/slug shape in the dashboard; those URLs now answer a 301 redirect (preserving any sub-path and query string) to the id-based one, for one release, rather than serving directly.

sl.shebang.pro/<code> (or a custom alias set via link_set_alias) is a separate, optional wrapper created automatically alongside every publish/upload. It already resolves by the underlying resource's id, not by handle or slug, so it's unaffected by the change above — a short link never needed a 301.

link_delete deletes both the short link and the page or file it wraps, permanently. There's no "unwrap but keep the file" operation.

Slugs are labels now, not addresses

A page or object's slug is still there — it's what shows up in the dashboard and in a short link's preview card — but it plays no part in the public URL anymore. Renaming it is purely cosmetic.

Next

Access modes — who's allowed to actually load one of these urls.