Deployment
The docs site is a static Docusaurus app in apps/docs.
Local commands
pnpm --filter @dealmeld/docs run validate:openapi
pnpm --filter @dealmeld/docs run build
pnpm --filter @dealmeld/docs run dev
Hosting target
Deploy the docs app as a dedicated Coolify resource in the DealMeld production
project/environment and point docs.dealmeld.io at it.
Use this Coolify resource contract:
| Setting | Value |
|---|---|
| Resource name | deammeld-docs |
| Project | ks40wk8wwo4sogcw0ok8gs4c |
| Environment | sckswko8s4k0sw0osgkgs08c |
| Repository | DigitalMeld/dealmeld |
| Production branch | master |
| Build type | Dockerfile |
| Dockerfile | Dockerfile.docs |
| Exposed port | 80 |
| Custom domain | docs.dealmeld.io |
Keep the docs site separate from the main dealmeld.io app and API resources
so docs deployments can be promoted, rolled back, and invalidated independently.
Dockerfile.docs builds the Docusaurus site from source and serves the generated
static files with Nginx. Do not deploy ignored local apps/docs/build artifacts
directly.
DNS
Create the DNS record required by Coolify/Traefik for docs.dealmeld.io.
Keep HTTPS forced at the edge.
Cache behavior
- Cache hashed assets aggressively.
- Keep HTML cache TTL short enough to publish docs fixes quickly.
- Invalidate the site after OpenAPI reference changes.
Security headers
The API reference loads the exact Scalar standalone asset from jsDelivr with Subresource Integrity. Keep the pinned URL and sha384 value in src/pages/api-reference.tsx in sync when upgrading Scalar.
Deploy the docs site with the CSP emitted by docusaurus.config.ts and the
Nginx response headers in apps/docs/nginx.conf. static/_headers is
retained for compatibility with static-host platforms that use _headers
files, but the production Coolify deployment uses the Nginx config in the
docs container. Do not add broader script sources.
Build gates
The docs build validates static/openapi/dealmeld.openapi.yaml before generating the static site. Broken OpenAPI should fail the docs build.
After deployment, smoke the public edge:
curl -fsS https://docs.dealmeld.io/ >/dev/null
curl -fsS https://docs.dealmeld.io/api-reference >/dev/null
curl -fsS https://docs.dealmeld.io/openapi/dealmeld.openapi.yaml >/dev/null
curl -fsSI https://docs.dealmeld.io/ | grep -i '^content-security-policy:'