feat(dashboard): onboarding checklist and a settings page (#958) - #1096
Merged
Conversation
Add an Onboarding section to the Overview and a settings page at /settings. Each onboarding step derives its done-state from a real fact (a registered project, a non-empty queue, a ticket on disk, a granted browser permission, credentials the daemon holds), so a step cannot be ticked by clicking it and one completed outside the dashboard shows up completed. Routing gains its first non-project view: `settings` is reserved as a first segment, which is safe because a generated project id is always `<name>-<hash>`. Backend support: - onDashboard's per-project rollup carries `hasTickets`, backed by a readdir-only `hasTickets()` rather than parsing every ticket on each poll - a new `onOnboarding` read offers the server's cwd as a one-click first project, gated on the same wiring as sendAddProject so a public host discloses nothing - `onboardingDismissed` joins the preferences (interface + BOOLEAN_PREFERENCES, or the sanitizer would drop it on save) The Discord step is instructional: it explains the bot and reports whether the daemon holds a token, but does not take one. Configuring the credentials from the dashboard is #1095, which needs a secret-storage decision of its own.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #958.
Adds the
## Onboardingsection to the Overview and the settings page it points at.Onboarding checklist
Six steps, each with an explainer and an action:
{cwd}as project, or the existing add-directory dialogTODO_AGENTS.mdhas open itemstickets/import-ticketspreset)DISCORD_BOT_TOKENDISCORD_WEBHOOKEvery done-state is derived from a real fact, never from having clicked the row. So a step cannot be faked, and one completed outside the dashboard shows up completed. Dismissing hides it on the Overview only.
Settings page
New
/settings, reachable from a header gear, collecting what was spread across the header menus: appearance + editor, agent / model / run-on, run options, eco, notifications, automation. The checklist lives here too and is not dismissible, which is what dismissing it on the Overview promises. Everything writes the global tier (the route has no project), so it sets defaults rather than one repo's override; per-project overrides stay in the launcher's gear.The four gaps this had to build
{projectId, runId}with the first segment always a project id.settingsis now reserved, which is safe because a generated project id is always<name>-<hash>and so can never be the bare word. Both directions are tested, including that/settings-a1b2still routes to a project.onTicketsis per-project only.onDashboard's rollup now carrieshasTickets, backed by a readdir-onlyhasTickets()rather than parsing every ticket, since it is asked for every project on every poll.onOnboardingread returns the server's working directory and whether it is already registered. Gated on the sameaddProjectwiring assendAddProject, so a public host (the relay) discloses nothing about where it runs.onboardingDismissedjoins the preferences (interface andBOOLEAN_PREFERENCES, or the sanitizer drops it on save; the repo's own test caught this).Discord is deliberately instructional
The dialog explains the bot and reports whether the daemon holds a token, but does not take one. Taking a token means the dashboard storing a secret, which needs its own decision. Filed as #1095.
Verification
pnpm build12/12,pnpm typecheck22/22/settings, a toggle surviving a reload, the Discord dialog, dismiss-then-reload-then-still-on-settings, Back/Forward across the reserved segment, and dark mode.Two things that live drive caught, both fixed here: a native
<input type="checkbox">on the settings page (the repo'sCheckboxexists precisely because native ones draw a light box on the dark canvas), and an em-dash in the dismiss label where the issue uses a comma.Latest
mainis merged in.