377-line operations and architecture README for the Olava deployment
Replaces three lines with a full handoff document covering the production topology, all env vars, vLLM specifics, and operational gotchas. If you're evaluating what nwhitehouse actually built and how it runs, this is the single best artifact in the fork.
The document covers the full stack: Next.js 16 / React 19 on Vercel, Express 4 on Railway (with LibreOffice via Nixpacks for DOC/DOCX conversion), Supabase for Postgres + Auth + Storage, Resend for transactional email, and vLLM on RunPod serving the Qwen/Qwen3.6-35B-A3B base with the olava-extract LoRA via --enable-auto-tool-choice --tool-call-parser hermes. The architecture ASCII diagram shows the full request path from browser through Vercel → Railway → Supabase/Storage/vLLM.
The vLLM section is operationally specific: reasoning fields (delta.reasoning vs delta.reasoning_content vs inline <think> blocks), the custom <tool_call><function=name><parameter=key> markup format the LoRA emits, and the client-side fallback parser the fork ships because vLLM streaming drops the tool-call payload. The auth section explains the email-domain whitelist trigger in 001_email_domain_whitelist.sql and how RLS keeps multi-tenant data separate without per-route auth code.
The gotchas section has genuine operational lore: Mimecast strips Supabase magic-link confirmation emails (swap to email/password with confirmation toggled off for corporate clients), Vercel auto-deploys require verified commits so preview-branch URLs don't work until the branch is pushed to the verified remote, Nixpacks defaults to Node 18 rather than Node 22 unless backend/nixpacks.toml pins it, and CORS has to be explicitly widened for tryolava.ai alongside api.tryolava.ai. These are the kind of integration details you only encounter by running the system.
The repo history note is useful context for reading the codebase: the project was willchen96/mike → Finch → Olava, and internal type aliases like MikeMessage and MikeChat still reflect the original name. The README flags deferred cleanup items for whoever picks this up next.
Spotted something wrong? Or know the PR text has fresher detail than the writeup above?