[pull] main from Open-Legal-Products:main

✅ merged · #19 · admariner/mike ← Open-Legal-Products/mike · opened 1mo ago by pull[bot] · merged 1mo ago by pull[bot] · +946-17 across 24 files · ↗ on GitHub

From the PR description

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

Our analysis

Merge Open Legal Products updates — read the full analysis →

Think the analysis missed something the PR description covers?

Commits in this PR (8)

SHA Subject Author Date
fe942475 Add self-hosted Docker stack with local Supabase, storage, email, and Ollama Thijs de Zoete 2026-06-29 ↗ GitHub
commit body
Bring the whole app up with a single `docker compose up` and no external
accounts.

Self-contained stack:
- Embedded Supabase (Postgres + GoTrue auth + PostgREST + an nginx gateway),
  with the schema auto-loaded on first boot and auth emails auto-confirmable.
- RustFS for S3-compatible object storage, replacing Cloudflare R2.
- Mailpit catches auth emails (signup/confirmation) in a local inbox.
- Production-style image builds for the frontend and backend.

Local models via Ollama:
- New provider speaking Ollama's OpenAI-compatible chat API, including the
  agentic tool-call loop and a graceful fallback for models that don't
  support tools.
- Models are detected dynamically (GET /models/ollama) and appear in every
  model picker (chat, title, tabular review) under a "Local" group, with no
  API key required. Any `ollama/<tag>` id is valid by prefix.
- Manual "Refresh" button on the API Keys page re-detects installed models
  and re-checks key status, pushing updates live to the pickers.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
b33b47af docs: add design spec for legal workflows (C&D, contract triage, MSA review) Thijs de Zoete 2026-06-29 ↗ GitHub
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
11bd520c fix(compose): make env files optional so hosted deploys work Thijs de Zoete 2026-07-20 ↗ GitHub
commit body
env_file: ./backend/.env was a hard failure when the file is absent, which
is always the case on Dokploy and similar platforms that inject env vars
rather than committing a .env.

Both backend/.env and the compose-root .env are now optional sources, root
last so hosted values win. Secrets deliberately stay out of environment:,
which overrides env_file - a bare name unset on the host silently blanks
out the value the file supplied.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
969233d8 fix(compose): make published ports configurable, bind infra to loopback Thijs de Zoete 2026-07-20 ↗ GitHub
commit body
Fixed host ports assume a dev machine. On Dokploy, 3000 is the dashboard's,
so the frontend fails with 'port is already allocated'. Each published port
now takes an env override with the current value as default, so local dev is
unchanged.

Infra ports (postgres, mailpit, storage) now bind 127.0.0.1 instead of
0.0.0.0. They were reachable from the internet on a public host while still
carrying default credentials, and the mailpit inbox exposes password-reset
links. Compose service-to-service networking is unaffected.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
d26fe041 fix(compose): make auth URLs and signup policy configurable Thijs de Zoete 2026-07-20 ↗ GitHub
commit body
GoTrue's API_EXTERNAL_URL and SITE_URL were hardcoded to localhost, so
confirmation links pointed at the user's own machine and signup could never
be completed on a hosted deploy. Both now derive from the public URLs.

MAILER_AUTOCONFIRM and DISABLE_SIGNUP are configurable too: a host with no
real SMTP needs autoconfirm on to register at all, and open registration
should be closable once the operator has an account. Defaults unchanged, so
local dev still exercises the real email flow via Mailpit.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
168b6977 feat(llm): optional bearer auth for the local/OpenAI-compatible provider Thijs de Zoete 2026-07-21 ↗ GitHub
commit body
Bare Ollama needs no auth, but OpenAI-compatible servers behind a gateway
(vLLM --api-key, Open WebUI, LiteLLM) require a bearer token. OLLAMA_API_KEY,
when set, is sent on both model discovery and chat completions; absent, the
provider behaves exactly as before.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ea7cb9ab fix(e2e): move roles.sql out of supabase/ so the CLI stops seeding it Amalanand Muthukumaran 2026-07-31 ↗ GitHub
commit body
The Supabase CLI auto-seeds supabase/roles.sql as globals during
'supabase start'. On the current supabase/postgres 17.x images that
seed connection is not a superuser, and supabase_auth_admin is a
reserved role, so ALTER ROLE fails with SQLSTATE 42501 and kills the
e2e job before Playwright runs.

The file only exists for the docker-compose stack, where it runs as
the init superuser via /docker-entrypoint-initdb.d. Move it to
docker/db-init/ and update the compose mount; CI's 'supabase start'
no longer sees it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
fc691192 Merge pull request #282 from amal66/olp-pr/self-hosted-stack Will Chen 2026-08-04 ↗ GitHub
Self-hosted Docker stack (embedded Supabase + storage + email) and local Ollama models (supersedes #196)

Capture this PR into my fork

Download a Markdown prompt that tells Claude how to port every commit in this PR into your working tree. Run it via claude -p < capture-pull-19.md from inside the repo you want the changes in.

⬇ Download capture-pull-19.md