PRIVATE LOCAL PREVIEW

This is a development preview for sample documents on one computer. It is not a
production deployment. The HTTP port binds only to 127.0.0.1:3008. PostgreSQL and
Redis have no published ports. Do not expose it through a tunnel or public proxy.

Start (from the source directory, after local credentials are initialized):
  docker compose -f compose.local-preview.yml up -d
Stop, preserving the saved preview:
  docker compose -f compose.local-preview.yml stop
Inspect startup:
  docker compose -f compose.local-preview.yml logs --tail 50 app

The local .env file at deploy/.env.local-preview contains a generated session key,
operator UUID, operator email and password. It is excluded from Git and image
builds. Keep it with the local data; do not publish it. Changing the password in
this file does not reset an existing user's password. Use the app's normal account
settings instead. The bootstrap refuses to repurpose a mismatched existing user.

For a fresh machine, build the test/development image using Dockerfile.hosted-test
and create that private env file with SECRET_KEY_BASE, HOSTED_OPERATOR_UUIDS,
PREVIEW_OPERATOR_EMAIL and PREVIEW_OPERATOR_PASSWORD. Use fresh random values.
Copy the matching source archive to public/hosted-source.zip before starting.

Open http://localhost:3008/sign_in and log in as the operator.
Create a customer in a separate private browser window using
http://localhost:3008/service/signup/new. In the operator window, use Customers
to activate that workspace. The customer can then upload a sample PDF and send a
request. Use the captured local email inbox at /letter_opener to follow signing
links. No real email is delivered. This inbox is shared across this local preview;
it is a development aid and must never be exposed as a customer service.

PostgreSQL records, documents, Redis jobs and captured emails use separate Docker
volumes. Ordinary stop/start preserves them. These are not backups. Do not run
tests against this database or use 'down -v' unless deliberately discarding it.
The development environment uses upstream development encryption keys; do not
store sensitive/real customer documents here. This preview cannot serve as a
production backup or be promoted directly to production.

The startup prepares migrations, creates the operator only if absent, builds the
browser assets, and starts Puma with the upstream embedded background worker.
Source/runtime configuration changes may require rebuilding the image; the local
application and signing libraries are mounted from this checkout.

No billing, real email delivery, external hosting or domain purchase is enabled.
