← All entries

Dev Log

Build notes from the Jefe ecosystem

Session 16: Adventure GUI, JefeCode Proxy, Maddy Mail, and a Model Upgrade

Mission Control 2026-04-01

Last session we declared Adventure GUI the flagship product. This session we built it. Also deployed a mail server, upgraded the inference stack, shipped a multi-user API proxy for JefeCode, fixed a Twitch bot, synchronized every repo in the ecosystem, and had a serious conversation about whether to fork Claude Code. The kind of session where "just one more thing" turns into nine more things.

Adventure GUI: Zero to Playable

The D&D campaign platform went from concept to functional prototype in one session. The backend ships twelve FastAPI endpoints with a multi-provider LLM abstraction layer that supports Ollama, Anthropic, OpenAI, and Gemini — swap providers with a config change, no code touched. The DM endpoint streams narrative over SSE with typewriter pacing on the frontend. Dice rolling is server-side with full roll history. The React 19 frontend leans into the dark fantasy aesthetic: three pages (campaign select, active session, character sheet), streaming text that appears character by character, a dice roller with animated results, and action buttons for the standard D&D verbs. It looks like what it is — a tool built by someone who actually plays the game.

Adventure GUI: Security Review

We ran both a code review and a full security review before calling it done. The security pass turned up twelve findings, eight of them critical or high severity. Path traversal in the campaign file loader, SSE chunks that could split mid-token and corrupt the stream, API keys that would have leaked to the browser in error responses, and missing input validation on several endpoints. All eight critical and high findings were fixed the same session. The remaining medium-severity items are tracked. This is the pattern we want: build fast, review hard, ship clean.

Maddy: Self-Hosted Mail on Titan

FreeChat and Enclave need transactional email, and the previous solution only runs on Windows — useless for containers on Titan. Deployed Maddy as a self-hosted SMTP server directly on the GPU box, generated DKIM keys for both domains, and created service accounts. The containers can now send mail without routing through the Windows host.

New Models: Qwen 3.5 and the JefeCode Pivot

Pulled Qwen3.5:27b (q8_0) and gemma3:27b to the inference server. Qwen 3.5 outperforms qwen3:32b on every benchmark while being five billion parameters smaller — but its thinking mode consumes the entire context at 3.6 tok/s, so interactive endpoints need think: false. Also identified Qwen3-Coder-30B-A3B as the next JefeCode model: mixture-of-experts with only 3B active parameters means roughly 10x faster inference with the same FIM token format.

JefeCode: Multi-User API Proxy

JefeCode has been live via Cloudflare tunnel for external testing, which surfaced the need for multi-user access control. Built an API key proxy (PR #2) with per-key rate limiting, usage logging, and scoped permissions. Each tester gets a key that routes through the proxy with usage tracked independently. Also wrote a tester onboarding doc and evaluated OpenCode as a local-model coding CLI alternative.

Git Hygiene: Every Repo Synchronized

Scanned all repositories for dirty trees, unpushed commits, and remote divergence. Found a near-miss in JefeAI: two Titan-only commits that existed on JefeGit but not GitHub — a naive force push would have destroyed them. Rebased carefully to preserve both histories, then configured dual-push for all fifteen repos so git push origin now pushes to GitHub and JefeGit simultaneously.

Jefebot: !first Day-Rollover Fix

The !first Twitch command had a subtle day-rollover bug. The original logic required twelve hours between claims, but if a stream started late one night and ran past midnight, the same viewer could claim it twice in what felt like the same stream. The fix requires both conditions: twelve hours elapsed AND a different calendar day. Also excluded the broadcaster from eligibility, because claiming your own "first in chat" award is the Twitch equivalent of liking your own post. Feature branch merged, old branch cleaned up.

jefe.works Updates

Added the FreeChat link and a GygaxBot product card. The Lambda-backed API endpoints had cold start issues causing silent first-load failures, so we added retry logic with exponential backoff. The product site needs to actually work when someone visits it for the first time.

Strategic: The Fork We Didn't Take

Evaluated an opportunity to fork a popular coding CLI after source became available through unofficial channels. The legal analysis was clear: leaked source, not released source, and building on DMCA-vulnerable foundations is a non-starter for an LLC. Rejected. Also elevated JefeHealth to co-featured product alongside Adventure GUI, reflecting its rapid maturation over the last three sessions.

What's Next

  • Adventure GUI: scene illustration pipeline (ComfyUI integration for AI-generated battle maps and character art)
  • Maddy: DNS record verification and deliverability testing for both domains
  • Container UID audit on Titan — shared jefedata group for consistent file permissions
  • JefeCode: deploy Qwen3-Coder-30B-A3B and benchmark against current model
  • JefeHealth session — continued feature development under direct supervision