luccast removes Supabase/R2/auth and adds SQLite, local storage, and a Hermes LLM adapter
Five commits replace mike's cloud dependencies with local equivalents: better-sqlite3 for Postgres, disk storage for R2, a no-op auth middleware for Supabase auth, and a new Hermes adapter that reads `~/.hermes/config.yaml` to route LLM calls to any OpenAI-compatible local endpoint.
The foundation is 08ff30ff (+1635/-376). backend/src/lib/db.ts opens a WAL-mode SQLite database at backend/data/mike.sqlite on first run, creating the full schema. backend/src/lib/supabase.ts becomes a 390-line chainable shim that translates /.hermes/config.yaml` to find a local OpenAI-compatible base URL and model, then calls it via the OpenAI SDK..from().select().eq() calls into raw SQLite - enough surface to keep all existing application code working without edits. Storage routes to backend/data/storage/ on disk. Auth is a no-op: every request is pinned to local-user / local@localhost. The Hermes adapter in backend/src/lib/llm/hermes.ts reads `
Follow-up commits add a mike bash launcher (start/stop/restart/status/logs via a pidfile), wire local-llm as the default model everywhere when Hermes is detected, add GET /hermes-config so the frontend can show the active model name, and hide the API-key UI when running locally. The bugfix commit (915db44a) caught that the placeholder string "local-llm" was reaching the LLM endpoint as the literal model name - now resolved to the actual name from config, with a 60-second timeout added.
The mike launcher hard-codes MIKE_HOST=192.168.2.204; override with the env var before deploying on any other machine.
The Supabase shim covers only the query patterns currently used, so upstream changes that introduce new call patterns could silently break.
Spotted something wrong? Or know the PR text has fresher detail than the writeup above?