Personal web pages

Each user can publish their own static web content under your BBS
domain. Sysop can also publish folders directly at the top level.

Enabling

PERSONAL_PAGES_ENABLED=true

in .env, or toggle from Admin → Settings, then restart
anetbbs-web.

Sysop pages

Drop a folder under data/personal_pages/:

mkdir -p data/personal_pages/photography
echo '<h1>Photos</h1>' > data/personal_pages/photography/index.html

Visit https://yourbbs.example.com/photography/ and you'll see it.

Per-user pages

Users go to Tools → My Web Pages (/_pages/) — built-in file
manager for upload / list / delete. Their files are served at
https://yourbbs.example.com/~username/.

Index file resolution

When the URL ends with /, the server tries (in order):

index.html  index.htm  default.html  default.htm  home.html  home.htm

First one found wins. If none exist, you get a 404.

Reserved names

Real BBS routes (admin, auth, profile, boards, pm, files, mrc, irc,
shoutbox, etc.) can never be shadowed by a personal-pages folder.
The blueprint catches via the 404 handler so it only kicks in for
URLs that didn't match anything else.

Path traversal

The serve code rejects any path that resolves outside its intended
base directory. Safe to expose to the internet.