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.
Short links are different
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.