Configure · Product guide

Operate and verify safely

Use readiness checks, migrations, a sanitized operation ledger, and production verification without exposing sensitive data.

9 min readSource on GitHub ↗

Configure fail-closed

Copy .env.example for local work and set the database, JWT, encryption, storage, and only the integrations required for the workflow under test. Never print populated environment values or reuse hosted secrets in a community installation.

Self-hosted production uses BLOGFACTORY_SELF_HOSTED=true and rejects missing or placeholder database, encryption, cron, administrator, origin, and storage configuration before it serves requests.

Migrate deliberately

Run npm run db:migrate against the target database before code that requires a new schema. Migrations are additive, locked, checksummed, and recorded in schema_migrations.

Never run PostgreSQL integration tests against shared production infrastructure. Use a disposable database for integration coverage.

Repository verification
npm run typecheck
npm run lint --workspace=web
npm run test --workspace=web
npm run test:server
npm run build
git diff --check

Read the operation ledger

Authenticated tool calls create sanitized lifecycle records. The ledger can keep safe client metadata, action, object reference, status, duration, stable error code, and small allowlisted metadata. It is a diagnostic surface—not an archive of prompts or content.

Records expire after 30 days and the existing bounded scheduler clears them. Web GET requests do not create operation records.

Stored
Safe client identity, action, status, duration, stable error code
Never stored
Article bodies, prompts, source values, provider responses, tokens, keys, credentials

Verify a release

A green build is not production acceptance. Confirm the intended instance origin, API health, unauthenticated MCP challenge, OAuth metadata, and the deployment commit before declaring a release complete.

Instance boundary checks
curl -i https://content.example.com/api/health
curl -i https://content.example.com/mcp
curl -i https://content.example.com/.well-known/oauth-protected-resource