Neon Law
  • Services
  • Book Consultation opens in a new tab
  • Sign in

← Operating Neon Law Navigator

Ship the Instance

Chapter 7 of 8 · Section 48 of 51

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 Navigator deployment matrix
  • 7. The `/app` mount and HTTP route ownership
  • 8. `neon` — the whole brand seam
  • 9. Live rollout checkpoint
  • 10. Set one site to one version

3. Provision the Infrastructure

  • 11. The APIs that light up
  • 12. Network and storage buckets
  • 13. How a Project portal reaches a client
  • 14. A document's bytes and authorization are separate
  • 15. A private image registry
  • 16. The cluster comes up
  • 17. What setup owns — and what follows it

4. Operate Forgejo beside Navigator

  • 18. Deploy the forge before switching repositories
  • 19. Separate people, Git transport, and machine access
  • 20. Require the gate and protected-main policy
  • 21. Bind the workflow to one Project and one commit
  • 22. Notify failures even when the manifest is broken
  • 23. Restore the repository before cutting over

5. Environment Matrix

  • 24. Three operating modes, two deployment profiles
  • 25. The deployment that says its matters are sample
  • 26. Configuration precedence: the first source wins
  • 27. Local dev controls: inputs read by `navigator dev`
  • 28. Local runtime: what `.devx/env` generates
  • 29. The store: SurrealDB
  • 30. Where SurrealDB authorization lives
  • 31. Deployed runtime: core web and worker wiring
  • 32. Deployed runtime: identity and access
  • 33. Deployed runtime: email, signatures, and billing
  • 34. Deployed runtime: repositories, content, AI, and scheduled work
  • 35. Provision and ship: variables read by the operator CLI
  • 36. Ancillary operations and opt-in test controls
  • 37. When sample data appears

6. Configure the Trust Boundaries

  • 38. Secrets: the invariants that gate the boot
  • 39. Sign-in: bring an OIDC provider; passwords live there, not here
  • 40. Role rings: who can do what
  • 41. Provider signup and parity across the deployments
  • 42. The external surface — every third party, in one place
  • 43. The two service deployments
  • 44. Security architecture

7. Ship the Instance

  • 45. Ship and verify
  • 46. Post the verified handoff in `#navigator`
  • 47. Point your domain at the instance (optional)
  • 48. Drive it from the CLI
  • 49. Make it yours — white-label under your own brand
  • 50. This is how we set up our production deployment

8. Wrap Up

  • 51. Canonical references

Drive it from the CLI

Once your instance answers /readyz, the navigator CLI runs the firm's whole matter flow against it from your terminal. It authenticates like gcloud auth login and lands a short-lived (~8h) token at ~/.navigator.json:


cargo install --path cli          # installs `navigator` on your PATH
# …or skip installing — run it straight from the source tree:
cargo run -p cli -- login --host www.your-domain.example   # `cargo run -p cli -- <args>` == `navigator <args>`

Presenter notes

The login is a browser-loopback OAuth that reuses your instance's existing OIDC session and stores the token 0600 at ~/.navigator.json (a single gcloud-style dotfile; set NAVIGATOR_CONFIG_DIR to use the legacy <dir>/credentials.json location instead). The host is your deployment's — www.your-domain.example, a staging host, or http://localhost:8080 for the KIND loop — so the same CLI drives whichever instance you point it at, each keyed separately in the credential file. That is the whole reason --host is a flag and nothing about a domain is baked in: this CLI is for your install, not ours. The crate is cli; the binary it builds is navigator.

Create a matter in the lawyer UI first, using the service/product picker, then log in and drive its notation workflow from the CLI using the matter code:


navigator site login --host www.your-domain.example    # opens the browser → ~8h token, stored 0600 (~/.navigator.json)
navigator site whoami                                  # "you@example.com (admin) — expires in 7h52m"
navigator site notation create onboarding__letter \
  --project estate-of-doe --client-email jane@example.com
navigator site notation approve <notation-id>          # renders + parks the retainer PDF (no envelope yet)
navigator site notation status <notation-id>           # state + signature request id + document_ready
navigator site logout

Use that same sequence to verify a fresh install end to end — it is the smallest real exercise of the durable pipeline after the lawyer UI has opened the matter. Point the client email at an inbox you control (never a third party — the notation workflow transmits a binding engagement letter), and walk the three assertions: notation approve should leave the notation parked at generate_pdf__retainer_pdf; notation status should flip to document_ready:true once the worker has rendered and persisted document.pdf (cross-check that the rendered object actually landed in your private documents bucket):


gcloud storage ls gs://your-project-id-documents/notations/<notation-id>/

Signature dispatch is handled by the site's notation workflow after the document is ready. When you sign or decline, the inbound webhook should log a HMAC-verified esignature webhook: signature event in the navigator-web pod. Decline or void the test envelope afterward so no live engagement lingers against a real inbox.

After a single login, --host is optional — the one stored host is used — so the later commands stay short. Every command is a thin client over a route web already serves, sent with Authorization: Bearer <token>: your instance resolves that token back into your session and runs the same handler the browser does, so the lawyer_review gate, the role check, and the authored_by provenance all hold unchanged. The send is a durable two-step: notation approve renders + parks the PDF on the worker, and the notation workflow dispatches the envelope only after confirming the PDF landed (document_ready:true). Sending a retainer for signature stays a deliberate authenticated human action — it is never exposed as an agent-routable tool. The full per-subcommand reference is the cli crate's README.md in the source tree.

View all slidesOpen display
← PreviousNext →
Neon Law
  • X opens in a new tab
  • LinkedIn opens in a new tab
  • YouTube opens in a new tab
  • API
  • Blog
  • Contact
  • Glossary
  • Navigator
  • Notations
  • Presentations
  • Privacy
  • Team
  • Terms
  • Testimonials
  • contact@neonlaw.com
  • +1 510 800 2090
  • California
    1515 20th StreetBakersfield, CA 93301
  • Nevada
    5150 Mae Anne AveSte 405-9002Reno, NV 89523
  • New York
    12 E 49th St18th FloorNew York, NY 10017
  • Justice Technology AssociationMission-Aligned Partner opens in a new tab

Attorney advertisement. Nothing here is legal advice without a signed retainer for an active project. Past results do not guarantee future outcomes.

© 2026 Shook Law PC

NEON LAW® is a registered trademark of Shook Law PC, U.S. Reg. No. 6,325,650 opens in a new tab

Powered by Neon Law Navigator 26.10.18

neon-law/navigator opens in a new tab

Everyone deserves access to justice. Made with ❤️ in 🗽.