Neon Law
  • Fractional CTO
  • Litigation
  • Fractional GC
  • Legal Services
  • Sign in
← Operating Neon Law Navigator

Environment Matrix

Chapter 4 of 7 · Section 24 of 44

Sections

1. Intro

  • 1. Deploy your own
  • 2. Agenda

2. Prepare Google Cloud

  • 3. Bring your own project
  • 4. Dry-run first
  • 5. Private assets and domain restricted sharing
  • 6. The one project that is public on purpose
  • 7. The Navigator deployment matrix
  • 8. The `/app` mount and HTTP route ownership
  • 9. `neon` — the whole brand seam
  • 10. Live rollout checkpoint
  • 11. Set one site to one version

3. Provision the Infrastructure

  • 12. The APIs that light up
  • 13. Network and five buckets
  • 14. How a Project portal reaches a client
  • 15. One matter's document never backs another matter's
  • 16. A private image registry
  • 17. The cluster comes up

4. Environment Matrix

  • 18. Three operating modes, two deployment profiles
  • 19. Configuration precedence: the first source wins
  • 20. Local dev controls: inputs read by `navigator dev`
  • 21. Local runtime: what `.devx/env` generates
  • 22. The store: SurrealDB
  • 23. Where SurrealDB authorization lives
  • 24. Deployed runtime: core web and worker wiring
  • 25. Deployed runtime: identity and access
  • 26. Deployed runtime: email, signatures, and billing
  • 27. Deployed runtime: repositories, content, AI, and scheduled work
  • 28. Provision and ship: variables read by the operator CLI
  • 29. Ancillary operations and opt-in test controls
  • 30. When simulated data appears

5. Configure the Trust Boundaries

  • 31. Secrets: the invariants that gate the boot
  • 32. Sign-in: bring an OIDC provider; passwords live there, not here
  • 33. Role rings: who can do what
  • 34. Provider signup and parity across the deployments
  • 35. The external surface — every third party, in one place
  • 36. The two service deployments
  • 37. Security architecture

6. Ship the Instance

  • 38. Ship and verify
  • 39. Post the verified handoff in `#navigator`
  • 40. Point your domain at the instance (optional)
  • 41. Drive it from the CLI
  • 42. Make it yours — white-label under your own brand
  • 43. This is how we set up Neon Law Foundation

7. Wrap Up

  • 44. Canonical references

Deployed runtime: core web and worker wiring

ConcernEnvironment variables
Profile fenceNAVIGATOR_ENVIRONMENT, NAVIGATOR_CI_HARNESS, NAVIGATOR_CREDENTIAL_ENVIRONMENT
HTTP identityPORT, NAV_BASE_URL, CANONICAL_HOST, NAVIGATOR_RATE_LIMIT_PER_MIN
Branding and public assetsNAVIGATOR_CUSTOM_BRANDING, NAVIGATOR_ASSET_BASE_URL
StoreNAVIGATOR_SURREAL_ENDPOINT, NAVIGATOR_SURREAL_NAMESPACE, NAVIGATOR_SURREAL_DATABASE
Storage driverNAVIGATOR_STORAGE_BACKEND, NAVIGATOR_STORAGE_ENDPOINT, NAVIGATOR_STORAGE_REGION
Documents/exportsNAVIGATOR_DOCUMENTS_BUCKET, NAVIGATOR_STORAGE_BUCKET, NAVIGATOR_EXPORTS_BUCKET
Other bucketsNAVIGATOR_ASSETS_BUCKET, NAVIGATOR_LFS_BUCKET
Filesystem storageNAVIGATOR_STORAGE_FS_ROOT
Entity Workspace DrivePer-Workspace Drive coordinates listed below
Generic S3 keyNAVIGATOR_STORAGE_ACCESS_KEY, NAVIGATOR_STORAGE_SECRET_KEY
Temporary S3 tokenNAVIGATOR_STORAGE_SESSION_TOKEN
Assets S3 keyNAVIGATOR_ASSETS_ACCESS_KEY, NAVIGATOR_ASSETS_SECRET_KEY
LFS S3 keyNAVIGATOR_LFS_ACCESS_KEY, NAVIGATOR_LFS_SECRET_KEY
Exports S3 keyNAVIGATOR_EXPORTS_ACCESS_KEY, NAVIGATOR_EXPORTS_SECRET_KEY
SessionsSESSION_SECRET
Restate clientRESTATE_BROKER_URL, RESTATE_AUTH_TOKEN, RESTATE_SERVICE
Trigger ingressRESTATE_INGRESS_URL
Worker listenerWORKFLOWS_SERVICE_LISTEN
Telemetry and log filteringOTEL_EXPORTER_OTLP_ENDPOINT, OTEL_SERVICE_NAME, RUST_LOG
Image-baked release identityNAVIGATOR_RELEASE_TAG, NAVIGATOR_GIT_SHA, NAVIGATOR_BUILD_TIME

Presenter notes

These are the process-level coordinates shared by Kubernetes manifests and non-Kubernetes installs. Production requires GCS and rejects NAVIGATOR_STORAGE_ENDPOINT; the dev profile may use disposable storage, while every hosted deployment's GCS also rejects an emulator endpoint. SESSION_SECRET must contain at least 32 bytes. The worker reads the same database, document bucket, email backend, branding bundle, and deployment profile as web so a journaled step never crosses environments. Published images bake the release identity in; local source builds leave it unknown.

The Neon Law-controlled Workspace service account has domain-wide delegation. Keep its shared Drive coordinate and credential together: NAVIGATOR_DRIVE_NEON_LAW_PROJECTS_DRIVE_ID, NAVIGATOR_DRIVE_NEON_LAW_DELEGATED_USER, and NAVIGATOR_DRIVE_NEON_LAW_SERVICE_ACCOUNT_JSON.

The typed workspace map selects one root by deployment: neon-law-stg uses NAVIGATOR_DRIVE_NEON_LAW_STAGING_PROJECTS_ROOT_FOLDER_ID, neon-law-prod uses NAVIGATOR_DRIVE_NEON_LAW_PRODUCTION_PROJECTS_ROOT_FOLDER_ID, and neon-law-prod uses NAVIGATOR_DRIVE_NEON_LAW_NLF_PROJECTS_ROOT_FOLDER_ID. Each root is distinct; an unknown deployment fails closed rather than borrowing another root. NAVIGATOR_PROJECTS_DRIVE_MOUNT is an optional machine-local override, never a deployed credential. The regional GCP command enables the Drive and Admin SDK APIs, but a Workspace administrator must still grant domain-wide delegation and create the selected Drive root.

For each deployment, setup creates the identity named by NAVIGATOR_DRIVE_GCP_SERVICE_ACCOUNT_ID with no runtime GCP roles. Complete the global Workspace attachment once:

  1. Read that service account's OAuth client ID:

    
    gcloud iam service-accounts describe \
      "$NAVIGATOR_DRIVE_GCP_SERVICE_ACCOUNT_ID@$NAVIGATOR_GCP_PROJECT_ID.iam.gserviceaccount.com" \
      --project "$NAVIGATOR_GCP_PROJECT_ID" --format 'value(oauth2ClientId)'
    
  2. In the selected Workspace Admin console, authorize that client ID for https://www.googleapis.com/auth/drive. Do not grant a broader Admin SDK scope merely because the API is enabled.

  3. Create that deployment's otherwise-empty Projects shared drive and record its ID. Staging creates its own drive, separate from production's.

  4. Create one JSON key for the dedicated Drive account and place the complete JSON value directly into the selected deployment's secrets.enc.yaml under the *_SERVICE_ACCOUNT_JSON key (sops set — never an editor buffer for a key this size). Never paste it into Slack, a ticket, shell history, or this repository in plaintext; revoke the key immediately after its encrypted replacement is proven during rotation.

  5. Set the selected *_PROJECTS_DRIVE_ID and *_DELEGATED_USER coordinates in the same deployment's config.toml, run navigator ops secrets apply --deployment <name>, and verify the key names with its --dry-run plan — see docs/deployment-secrets.md.

View all slidesOpen display
← PreviousNext →
Neon Law
BlogContactFoundationNavigatorPresentationsWorkshops
Contact us — contact@neonlaw.com+1 510 800 2080
  • Nevada
    5150 Mae Anne AveSte 405-9002Reno, NV 89523
  • New York
    12 E 49th St18th FloorNew York, NY 10017
  • Washington
    720 Seneca StSte 107-715Seattle, WA 98101

© 2026 Shook Law PLLC and Neon Law Foundation

This is attorney advertisement. Nothing on this site is legal advice. Neon Law is the trade name of Shook Law PLLC, and an attorney-client relationship begins only with a signed retainer between you and Shook Law PLLC. Published flat fees cover the scope each one names and do not include third-party filing fees. Every legal matter is different, and past results do not guarantee a similar result.

Shook Law PLLC is a proud supporter of the Neon Law Foundation , a 501(c)(3) nonprofit.

Neon Law Foundation is a Nevada nonprofit corporation and a 501(c)(3) tax-exempt organization. It does not practice law and cannot represent you.

Nothing on this site is legal advice, and nothing here creates an attorney-client relationship.

5150 Mae Anne Ave Ste 405-9999, Reno, NV 89523
support@neonlaw.orgTransparency & public disclosures

Powered by Neon Law Navigator #26.8.20-hotfix.4

Open source — neon-law-foundation/navigator GitHub stars 2