Skip to main content

Documentation Index

Fetch the complete documentation index at: https://86d.app/docs/llms.txt

Use this file to discover all available pages before exploring further.

86d is under active development and is not yet recommended for production use. Use these flows for staging, internal stores, and evaluation.
86d ships with a Dockerfile and docker-compose.yml, and supports one-click deploys to Railway and Vercel. Pick the path that matches your infrastructure preferences. All three run the same codebase.
Docker Compose is the simplest self-hosted path. A single command starts PostgreSQL 16, MinIO object storage, and the store app. Migrations and demo data seeding run automatically on first boot.Start the stack:
docker compose up
On first boot, the store:
  1. Waits for PostgreSQL to be healthy
  2. Runs all database migrations
  3. Seeds demo data and creates the admin user (admin@example.com / password123)
  4. Starts the Next.js server on port 3000
Services started:
ServiceDefault port
Store app3000
PostgreSQL5432
MinIO API9000
MinIO Console9001
Required environment variable for production:
BETTER_AUTH_SECRET="$(openssl rand -base64 32)"
Set this in a .env file alongside your docker-compose.yml before you run the stack. The default value baked into the Compose file is for development only.Storage: Docker Compose uses MinIO (an S3-compatible object store) by default. Uploads land in the 86d-uploads bucket and are served at same-origin /uploads/... URLs.To override default ports if they conflict with existing services:
POSTGRES_PUBLISH_PORT=5433 \
STORE_PUBLISH_PORT=3001 \
MINIO_API_PUBLISH_PORT=9002 \
MINIO_CONSOLE_PUBLISH_PORT=9003 \
docker compose up

Environment variables reference

The table below lists the variables you are most likely to configure. For the full list, see Environment variables or .env.example in the repository.
VariableRequiredDescription
DATABASE_URLYesPostgreSQL connection string
DATABASE_URL_UNPOOLEDYesSame connection string, used for migrations
BETTER_AUTH_SECRETYesAuth signing key. Generate with openssl rand -base64 32
STORE_IDRecommendedUUID identifying this store. Required for 86d API integration
STORAGE_PROVIDERNoStorage backend: local, vercel, or s3 (default: local)
86D_API_KEYNoEnables 86d platform API and admin SSO
APP_URLNoPublic URL of your store, for example https://mystore.com

Storage providers

Set STORAGE_PROVIDER to choose where uploaded files (product images, PDFs, and other assets) are stored.
ValueUse caseAdditional variables required
localLocal development or self-hosted DockerSTORAGE_LOCAL_DIR (default: ./uploads)
vercelVercel deploymentsBLOB_READ_WRITE_TOKEN, VERCEL_BLOB_STORAGE_HOSTNAME
s3MinIO, AWS S3, Cloudflare R2, Railway BucketS3_ENDPOINT, S3_BUCKET, S3_REGION, S3_ACCESS_KEY, S3_SECRET_KEY
The local storage provider writes files to the container’s filesystem. In Docker, data persists for as long as the container volume exists. Do not use local storage on Vercel or other stateless environments. Files are lost on every deploy.
See Storage configuration for full per-provider setup.

Post-deployment checklist

After your first deploy, complete these steps before you accept real orders:
  • Change the default admin password at /admin
  • Set BETTER_AUTH_SECRET to a cryptographically random value (not the default)
  • Configure a payment provider (Stripe, PayPal, Square, or Braintree) via environment variables (see Payment gateways)
  • Set APP_URL to your store’s public domain
  • Verify uploads work by adding a product image in the admin
  • Run 86d doctor to confirm every required check passes