copy-campfire / README.md
gr33r's picture
Submission: validator-format tags + demo links + in-Space demo embed tab (#3)
c500328
|
Raw
History Blame Contribute Delete
3.09 kB
---
title: Copy Campfire
emoji:
colorFrom: yellow
colorTo: red
sdk: gradio
sdk_version: "5.49.1"
app_file: app.py
pinned: false
license: apache-2.0
short_description: UX writing arena base model vs fine-tune. You judge.
tags:
- track:backyard
- sponsor:modal
- achievement:welltuned
- achievement:offbrand
- achievement:fieldnotes
---
# ⛺ Copy Campfire — the UX writing arena
Two UX writers by the fire — one went to training camp. Paste your UI copy, get two
blind rewrites (base **Qwen3.6-27B** vs the **ux-writing-1** QLoRA fine-tune), vote,
then see the reveal. Votes are stored privately as preference data that trains the next
version — the arena is the data flywheel.
## The idea
Every product ships copy debt — "Invalid", "OK", "An error occurred while processing
your request" — thousands of interface strings nobody owns. **ux-writing-1** is a small,
open model fine-tuned to review that copy the way a senior UX writer would: rewrite
what's weak, **keep what's already right**, and say why. It runs at codebase scale for
cents, on hardware you control — exactly the kind of bulk, structured LLM work that
shouldn't be metered at frontier prices.
## How it was built
- **Base:** [Qwen3.6-27B](https://huggingface.co/Qwen/Qwen3.6-27B) — Apache-2.0, 27.8B
params (under the 32B limit).
- **Training:** QLoRA on ~1,400 hand-built before/after pairs, each with a
`{rewrite, reason, risk}` contract and the code context the string lives in. Two runs,
≈$30 of GPU on **Modal**.
- **Serving:** Modal OpenAI-compatible endpoint; this Gradio arena calls it live.
- **Honest eval:** 83% blinded human preference vs the base model (90 held-out items) —
not automated heuristics, which saturated.
- **At codebase scale:** reviewed 10,000 of PostHog's UI strings in 77 min for **$3.22**
— changed 994, **kept 9,006** as-is. Restraint is trained, not hoped for.
## Tech
Qwen3.6-27B · QLoRA (PEFT / TRL) · Modal (training + serving) · Gradio (this arena) ·
llama.cpp / GGUF (zero-cost laptop inference) · Hugging Face Hub (model, adapter,
dataset, blinded vote store).
## Take it home
- **Model:** [`gr33r/ux-writing-1`](https://huggingface.co/gr33r/ux-writing-1) ·
[adapter](https://huggingface.co/gr33r/ux-writing-1-lora) ·
[GGUF](https://huggingface.co/gr33r/ux-writing-1-GGUF)
- **Code & eval tooling:** [`content-designer/ux-writing-1`](https://github.com/content-designer/ux-writing-1)
- **Interactive figures:** [the campfire gallery](https://copy-campfire-gallery.vercel.app)
## Submission
- 🎬 **Demo video:** [Watch the 2-minute demo](https://www.linkedin.com/posts/christopher-greer_buildsmall-opensource-ai-ugcPost-7472300204092764161-SnJ9/) — also embedded in the **🎬 Watch the demo** tab inside the Space.
- 📣 **Social post:** [On LinkedIn](https://www.linkedin.com/posts/christopher-greer_buildsmall-opensource-ai-ugcPost-7472300204092764161-SnJ9/)
---
**Space secrets required:** `BATTLE_URL`, `AUTH_TOKEN` (Modal backend), `HF_TOKEN`
(write access for vote storage); optional `VOTES_DATASET`.