How to set up a custom landing page for your AT Protocol Personal Data Server (PDS) with live feed functionality.
SSH into your PDS server and create the web directory:
mkdir -p /pds/www
Create /pds/www/index.html with your custom content. You can use my complete template or create your own.
Key features of the implementation:
Edit /pds/compose.yaml to mount the www directory in your Caddy service:
services:
caddy:
# ... existing config ...
volumes:
# ... existing volumes ...
- type: bind
source: /pds/www
target: /pds/www
Update /pds/caddy/etc/caddy/Caddyfile to serve static files:
your-domain.com {
# Handle well-known routes (PDS requirements)
handle /.well-known/* {
reverse_proxy localhost:3000
}
# Handle XRPC API routes
handle /xrpc/* {
reverse_proxy localhost:3000
}
# Serve static files (favicon, images, etc.)
handle /favicon.ico {
file_server {
root /pds/www
}
}
handle /*.png {
file_server {
root /pds/www
}
}
# Add more static file handlers as needed
# Serve custom landing page for root
handle / {
file_server {
root /pds/www
index index.html
}
}
# Fallback: everything else goes to PDS
handle {
reverse_proxy localhost:3000
}
}
Restart your containers to apply changes:
cd /pds
docker compose down
docker compose up -d
/pds/www/<head> section/pds/www/To display posts from your PDS accounts:
ACCOUNTS array with your DIDsHANDLE_MAP with your handlesThe template includes:
/pds/www/index.html existsdocker restart caddy/pds/www/This setup provides a professional-looking landing page that showcases your PDS while maintaining all AT Protocol functionality. Enjoy <3!