Create aDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/discordplace/discord.place/llms.txt
Use this file to discover all available pages before exploring further.
.env file in the server/ directory. Use server/.example.env as your starting template.
Required secrets
You should use 256-bit secret keys for
BOT_API_KEY_ENCRYPT_SECRET, USER_TOKEN_ENCRYPT_SECRET, and PAYMENTS_CUSTOM_DATA_ENCRYPT_SECRET_KEY. You can generate a 256-bit key in hexadecimal format using a tool like this one.Secret key used to sign and encrypt session cookies. Use a long, random string.
256-bit secret key used to encrypt bot API keys stored in the database.
256-bit secret key used to encrypt Discord user access tokens at rest.
256-bit secret key used to encrypt custom metadata attached to payment records.
Secret key used to sign and verify JSON Web Tokens issued by the server.
Shared secret used to authenticate requests from the Next.js client’s server-side rendering.
Discord credentials
The bot token for your Discord application. Found in the Discord Developer Portal under Bot > Token.
The OAuth2 client secret for your Discord application. Found in the Developer Portal under OAuth2 > Client Secret.
The application (client) ID for your Discord application. Found in the Developer Portal under General Information.
A Discord webhook URL used to post notifications to an internal portal channel (e.g. new bot approved, new emoji published). This webhook must be created by the bot itself so that interactive components (link buttons) are included in the messages.Must follow the format
https://discord.com/api/webhooks/XXX/XXX. Safe to leave empty.Database
MongoDB connection string. Accepts both local instances (
mongodb://localhost:27017/discordplace) and cloud-hosted services like MongoDB Atlas.S3 storage
AllS3_* variables (excluding the database backup set) are required. discord.place uses S3-compatible object storage to serve emoji images and sound files. Cloudflare R2 is recommended but any S3-compatible provider works.
Name of the S3 bucket used for storing emoji and sound assets.
Access key ID for authenticating with the S3 provider.
Secret access key for authenticating with the S3 provider.
Region where the bucket is hosted (e.g.
us-east-1, auto for Cloudflare R2).Custom endpoint URL for S3-compatible providers. For Cloudflare R2 this looks like
https://<account-id>.r2.cloudflarestorage.com.Public base URL of the CDN from which assets are served. Must be a valid URL with no trailing slash, e.g.
https://cdn.yourdomain.com. This value should match NEXT_PUBLIC_CDN_URL on the client.S3 database backups (optional)
These variables configure a separate S3 bucket for daily database backups. If left empty the server will still start but will print warnings and skip backups entirely.Name of the S3 bucket used for database backup archives.
Access key ID for the backup bucket.
Secret access key for the backup bucket.
Region for the backup bucket.
Endpoint URL for the backup bucket’s S3-compatible provider.
Bot protection
Your Cloudflare Turnstile secret key, used server-side to verify Turnstile tokens submitted by users. Obtain this from the Cloudflare Turnstile dashboard.
Payments — Lemon Squeezy (optional)
Webhook signing secret used to verify that incoming events are from Lemon Squeezy. See the Lemon Squeezy webhook docs for setup instructions.
API key for making authenticated requests to the Lemon Squeezy API. See the Lemon Squeezy Developer Guide to create one.
Uptime monitoring (optional)
Heartbeat ID from Better Stack Uptime. A ping is sent to this heartbeat after each successful daily database backup.
Heartbeat ID for monitoring S3 bucket availability. A ping is sent after each successful S3 health check.
Bot guild count API (optional)
Base URL of a private API used to look up the approximate guild count for a bot. If omitted, bots will not be able to update
server_count via the public API.Secret key for authenticating requests to the guild count API above.
Webhook proxy (optional)
If you route outgoing webhook requests through a proxy server, set these variables. Leave all of them empty to send webhooks directly.Protocol for the proxy server, e.g.
http or https.Hostname or IP address of the proxy server.
Port number the proxy server listens on.
Username for proxy authentication. Leave empty if not required.
Password for proxy authentication. Leave empty if not required.
Error tracking — Sentry (optional)
Sentry Data Source Name (DSN) for error and performance monitoring. Obtain this from your Sentry project settings. Leave empty to disable Sentry.
GitHub translator sync (optional)
Secret key used to authenticate the GitHub webhook that triggers automatic syncing of translator roles in the base guild. When configured, a push to the
main branch will sync role assignments based on the client/locales/translators.json file.
