jthacker48 wires Mike into the Rule26 server room

Jeremy Thacker is plugging the Mike fork in as a sibling service on Rule26's AI infrastructure - pure plumbing, no product changes.

infrastructure

All five commits here are operational. Thacker has packaged Mike into containers, wired it into Rule26's deployment topology alongside their other in-house services, and pointed it at their secrets manager. There are no changes to how Mike behaves for end users - no new features, no tweaks to the legal-AI logic itself.

The interesting bit for anyone watching Mike's wider deployment story is what broke along the way. Several frontend dependencies haven't caught up to the newer React version Mike ships with, so Thacker had to wave them through with a compatibility flag. He also worked around a quirk where Mike's frontend config file needs a TypeScript compiler at runtime that a stripped-down production container won't have. Both are upstream-shaped problems that the next team to containerise Mike will hit too.

So what Mostly of interest to anyone else deploying Mike into their own infrastructure - the fork itself isn't going anywhere new yet, but the deployment gotchas are real.

View this fork on GitHub →

Spotted something wrong? Or know the PR text has fresher detail than the writeup above?

Commits in this thread

5 commits from jthacker48/mike, oldest first. Source extracted verbatim from the harvested git log.

SHA Subject Author Date
67e256d6 Add rule26 deployment conventions to mike fork Jeremy Thacker 2026-05-11 ↗ GitHub
commit body
Adds everything needed to run mike as a rule26 sibling service on
ai-server alongside folio-enrich and folio-mapper:

- backend/Dockerfile: Node 20 + LibreOffice multi-stage build
- frontend/Dockerfile: Node 20 multi-stage; bakes NEXT_PUBLIC_* at build time
- docker-compose.yml: two services on ports 8094 (frontend) / 8095 (backend)
- .env.defaults: committed non-secret config (PORT, FRONTEND_URL, R2_BUCKET_NAME)
- .env.example: template for Infisical-driven .env; documents all required secrets
- scripts/deploy.sh: Infisical → .env → docker compose up --build → health poll
- CLAUDE.md: full project guide for future Claude Code sessions
- docs/rule26-integration.md: REST surface doc for sibling services and future chatcya integration
- README.md: appended rule26 deployment section
- .gitignore: added .env.bak, .env.tmp, .claude/; whitelisted .env.defaults

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
f076fe13 Fix ai-server deploy path to ~/svc/rule26/mike Jeremy Thacker 2026-05-11 ↗ GitHub
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
dc542d9d Fix frontend npm ci peer dep conflict on React 19 Jeremy Thacker 2026-05-11 ↗ GitHub
Several deps (recharts, @uiw/react-md-editor, auth-helpers-nextjs) declare
React 18 peer deps; --legacy-peer-deps lets npm ci proceed without error.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
ee103f71 Add --legacy-peer-deps to npm prune in frontend Dockerfile Jeremy Thacker 2026-05-11 ↗ GitHub
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
d5013f0e Transpile next.config.ts to JS in builder; copy .js to runtime stage Jeremy Thacker 2026-05-11 ↗ GitHub
commit body
Avoids requiring TypeScript in the runtime image. next start parses the
config at startup; with devDeps pruned, tsc is unavailable at runtime.
The builder stage already has TypeScript installed so we transpile there.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

Capture this thread into my fork

Download a single Markdown prompt that tells Claude how to port every commit above into your working tree — adapting paths and structure to match your repo. Run it via claude -p < capture-thread-431.md from inside the repo you want the changes in.

⬇ Download capture-thread-431.md