Fixed time, variable scope, honest hill charts — Shape Up adapted for the developer who does everything alone.
Invite-only beta · GitHub sign-in after invite · No credit card
The cycle
Write the pitch. Name the pain, sketch a solution, surface the risks.
Pick pitches for the cycle. Write down what you're spending weeks on, and why.
Break pitches into scopes. Move dots on the hill chart. Ship.
Clean up, rest, and reflect. What shipped? What interrupted you? What would you do differently?
A senior developer that reviews your pitches, surfaces holes you missed, and proposes concrete rewrites you can apply in one click. It asks pointed questions — never decides for you.
That names the feature, not the pain. What breaks today?
Good point — rethinking…
Problem, T-shirt size, Solution, Rabbit Holes, No-Gos — structured fields that auto-save as you type. A readiness checklist won't let you commit to something half-pitched.
Track confidence, not progress. Each scope moves from “figuring it out” to “executing known work.” Scopes stale for 3+ days get flagged automatically.
Sign in with GitHub. Commits flow in and get classified by prefix — the hill chart reads them as a second opinion.
Fixed-time cycles with built-in cooldown. Log interruptions, see percentages, run retros.
Unfinished work doesn't carry forward. Re-shape it, re-pitch it, or let it go.
Your workflow already produces signals. Heliostat reads them — no status meetings, no ticket grooming.
Every scope gets a short tag — any word you want (auth, billing, pickles). Each incoming commit gets matched two ways — whichever hits first:
/<tag>, it links. auth matches
auth-fix,
feat/auth-login,
bug/auth. Longest tag wins.
feat(auth):,
fix(auth) …,
chore:auth … (shorthand) — all link.
Not just feat.
No match? The commit drops into unplanned work automatically — you still see it at cycle end.
fix(auth): redirect loop
bug/auth-hotfix
bug/auth-hotfix contains /auth — User Auth wins.Once linked to a scope, the message prefix classifies the work as figuring‑it‑out or executing. The hill chart uses it as a second opinion when you check in.
Also accepted:
FEAT: (case-insensitive),
feat!: / feat(auth)!: (breaking),
feat(test) msg (no colon),
feat:auth msg (colon shorthand),
and feat msg (bare).
Anything else — Merge pull request, Update README — is recorded but not classified.
Unmatched commits become unplanned work automatically — half an hour by default, titled from the commit message. Tap ⚡ to log one manually.
At cycle end you see interruption %. Above 15% signals a shorter next cycle.
Prefix a scope name with ~
to mark it nice‑to‑have — first to cut when time runs short. No ceremony.
The deadline is real. You cut scope to ship — never quality, never the date.
Decide how much time it's worth first. Pick a T-shirt size, then design to fit inside that box.
Think before you code. A pitch takes an hour. A wrong commitment costs weeks.
Invite-only beta. Drop your email and we'll be in touch.
Cookies
Heliostat uses a few essential and functional cookies (sign-in, timezone, this notice) and no analytics or ad trackers. Details in our Privacy Policy.