Add the sign-up page and the first-run checklist #20
Reference in New Issue
Block a user
Delete Branch "onboarding-ui"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #7, and with it the last sub-issue of #1. The API could create accounts from invite links after #19; this is the part somebody can actually use.
The sign-up page
/signupis the one route that works without a session. It asks the server what it may offer before showing anything:The login card only offers "create one" when sign-up is open — no point advertising a door nobody can walk through. Signing up signs you in and lands on the queue, because the alternative is a form saying "now go and log in" about the credential just chosen.
The checklist
Four things have to be true before an alert reaches a phone — a notification topic, somebody on the rota, an alert source, and an alert that has actually arrived. On a fresh install none of them are, and until now nothing said so.
It's computed from the data, not from stored progress. A topic is set or it isn't; an integration exists or it doesn't. So it can't claim a step is done when it isn't, and it comes back by itself if somebody deletes their integration a month later. The only stored state is the dismissal, which is per user, not per browser — finishing on a laptop shouldn't leave the phone nagging.
The test push
The topic step is the only one the checklist can finish by itself, and the only proof that counts is a phone buzzing.
POST /api/me/notify/testpublishes directly rather than through the outbox, which requires an incident this deliberately doesn't have.Its failure is the useful part. A wrong topic, a token ntfy rejects, and an ntfy that's down all look identical from the phone — which is silence — so the error comes back to the browser instead.
Verified
make fmt lint test helm-lintgreen with-race, every UI import resolves, and the whole path driven against a live server with a real ntfy stand-in:400with no topic,204with one, and the ntfy log showsPAGED terdut-owner | terdut testNot in here
No screenshots — I can't drive a browser here, so the layout is the one thing unverified. Worth a click-through before merging:
make test-db, run the server, and open/signup?invite=…with a link you minted.The in-app Alertmanager instructions that #7 also listed are already in the Team tab from #18 — the integration create flow shows the URL and a ready-to-paste receiver snippet. The checklist links there rather than growing a second copy.
https://claude.ai/code/session_01RHPj4ggeFdEjKKfm4SHbD7