FuelBoard Copy Editor
A tiny, self-contained web editor for FuelBoard's Localizable.strings,
running on the Mac Mini. Edit copy from the iPhone (Safari), save it straight
into the FuelBoard repo, or save and kick off an immediate Release build +
IPA.
Why
All FuelBoard copy lives in FuelBoard/en.lproj/Localizable.strings (the
Localizable.strings refactor). This editor lets you tweak wording from the
phone without touching git, the Mac, or the build pipeline by hand — while the
Mac Mini repo stays the canonical source of truth and Gitea stays a backup.
Run
./scripts/run.sh # port 8790 (or EDITOR_PORT)
Then on the phone (same Wi-Fi, or anywhere via Tailscale):
http://192.168.1.131:8790/
http://100.120.217.98:8790/
Enter the token once (kept in the browser's localStorage afterwards):
cat /Users/apt/workspace/fuelboard-editor/.token
Set TOKEN=... in the environment to pin your own.
Endpoints
| Route | What it does |
|---|---|
GET / |
The editor page (no auth) |
GET /file |
Current strings file + git dirty/clean banner + section list |
POST /save |
Write the file, then plutil -lint it |
POST /save-build |
Write the file and start a background build job |
GET /job/<id> |
Job progress (polled by the page, 2 s) |
Auth: X-Key: <token> on every route except the HTML page.
What a "Save & Build" does
- writes
FuelBoard/en.lproj/Localizable.strings plutil -lint— aborts if the file is invalidxcodebuildRelease, unsigned (same command as the manual pipeline)- packages a fresh IPA to
/tmp/ipa-serve/FuelBoard.ipa - serves it at
http://192.168.1.131:8765/FuelBoard.ipa
The page polls the job and shows the build log live.
Safety
- Only ever writes the one strings file — no arbitrary paths.
- It never commits or pushes: Gitea stays a backup, and commits happen afterwards via the normal workflow once the copy is approved.
- One build at a time; the page shows the git dirty/clean state so you never save over in-flight work.
- Token required for every write/build call.
Layout
editor.py single-file server (stdlib only: http.server, subprocess)
index.html the editor page (mobile-first, dark)
scripts/run.sh launcher
.token auto-generated shared token (gitignored)