title: Brad Did Something
emoji: ๐
colorFrom: pink
colorTo: yellow
sdk: docker
app_port: 7860
pinned: false
license: mit
short_description: Argue your way to $1M before the quarter ends
tags:
- track:wood
- sponsor:modal
- achievement:offbrand
- achievement:llama
- achievement:fieldnotes
๐ Brad Did Something
Corporate bureaucracy is already a chaotic simulation โ I just replaced middle management with an LLM to see if the company could survive the quarter.
A 2D top-down office comedy game where every line your coworkers say, every unhinged decision, and every dollar of revenue is generated live by an LLM. You're the new Head of Sales at Veloura Technologies; your five underlings are enthusiastic, well-meaning, and completely off the rails. Survive 15 workplace crises and one fiscal quarter, and hit $1,000,000 โ by literally arguing your way there.
๐ฎ Play it now ยท โถ๏ธ Watch the trailer
Not just a chatbot in a trenchcoat
- ๐ง The AI is load-bearing. NPC dialogue isn't decoration โ through strict JSON-schema validation the model's output directly drives the game economy. Talk Brad into rescuing a deal and revenue jumps; offend him and the pipeline collapses. The server hides the morale & relationship scores, so the model moves them without ever seeing (or gaming) them.
- ๐จ Comics on the fly. Each crisis, the text model writes a scene and a second GPU renders a wordless FLUX.2 [klein] 4B comic panel that drops over the office โ the caption is drawn crisp by the UI (FLUX can't spell, so words stay out of the image).
- ๐น๏ธ A genuinely custom frontend. A hand-built HTML5-canvas + DOM pixel-art
game served through
gr.Serverโ zero default Gradio widgets, desktop and touch. - โ๏ธ Small models, tight plumbing. Qwen3.5-9B (llama.cpp) for text, FLUX.2- klein-4B for art, both on Modal GPUs, JSON-grammar-locked with a one-shot retry and a fast fallback so a slow call never kills the joke's timing.
๐ Read the full build story โ โ the sub-4B model bake-off, fighting the model's "helpful AI" reflex, and the comic pipeline.
Run it yourself
pip install -r requirements.txt
python app.py # โ http://localhost:7860 (mock mode: fully playable, no keys)
With no MODAL_URL set it uses a template-based offline generator. For the real
AI, deploy the two Modal GPU apps and point the game at them:
modal deploy modal_app/inference.py # Qwen3.5-9B text โ MODAL_URL / MODAL_TOKEN
modal deploy modal_app/image.py # FLUX.2-klein art โ FLUX_URL / FLUX_TOKEN
On the HF Space these four go in Settings โ Secrets; locally, .\run_modal.ps1
wires them up for you.
Deploy (HF Docker Space)
Built on gr.Server so the custom FastAPI frontend is the app โ HF's
sdk: gradio runner only launches a bare demo, so the Space runs sdk: docker
with a Dockerfile that does uvicorn app:app on port 7860. Dry-run locally:
docker build -t bds . && docker run -p 7860:7860 bds.
Controls
WASD/arrows move ยท SPACE talk / answer / advance comic ยท G gift ยท 1/2 choose ยท ENTER send a typed reply ยท ESC close ยท M mute. ๐ฑ Mobile: an on-screen joystick + ACT/GIFT buttons appear automatically, and tapping the floor walks you there.
Tests
pytest tests/ # unit: validator, economy, events, comic, idle
python tests/smoke_http.py # full-quarter API playthrough (mock)
python tests/smoke_browser.py # headless-browser UI smoke
Code MIT. Text model: Qwen3.5-9B (Apache-2.0). Image model: FLUX.2 [klein] 4B (non-commercial โ fine for this demo). Built for the Hugging Face Build Small Hackathon, "An Adventure in Thousand Token Wood."

