···3535- If `invite_code_required` is enabled, public signup is disabled until a valid invite code is supplied.
3636- `script/perlsky-admin create-invite` can mint invite codes locally on the server without needing an existing user session.
3737- The invite-only bootstrap flow is documented with copy-pasteable commands in `docs/DEPLOYMENT.md`.
3838+- Browser clients such as `bsky.app` can talk to `perlsky` directly because XRPC and DID-document responses include CORS headers and answer OPTIONS preflight requests.
38393940Relay / crawler discovery:
4041
+8
docs/DEPLOYMENT.md
···190190curl https://pds.example.com/xrpc/com.atproto.server.describeServer
191191```
192192193193+For browser-hosted clients such as `https://bsky.app`, `perlsky` also answers CORS preflight requests on XRPC routes. A quick manual probe looks like:
194194+195195+```sh
196196+curl -i -X OPTIONS https://pds.example.com/xrpc/com.atproto.server.describeServer \
197197+ -H 'Origin: https://bsky.app' \
198198+ -H 'Access-Control-Request-Method: GET'
199199+```
200200+193201You should see:
194202195203- a healthy `_health` response