feat: persistent dashboard settings (branding, links, integrations)#99
Merged
pratyush618 merged 2 commits intomasterfrom May 1, 2026
Merged
feat: persistent dashboard settings (branding, links, integrations)#99pratyush618 merged 2 commits intomasterfrom
pratyush618 merged 2 commits intomasterfrom
Conversation
Add Storage::get_setting / set_setting / delete_setting / list_settings across SQLite, Postgres, and Redis backends, exposed via PyQueue, QueueSettingsMixin, and REST endpoints under /api/settings (list, get, put, delete). Storage values are opaque strings; the dashboard handler JSON-encodes non-string PUT bodies for ergonomic structured config. Includes per-backend SQLite tests, cross-backend contract test, and HTTP-level tests covering CRUD, validation, and persistence across Queue instances.
Add a /settings route that surfaces three sections backed by the new
/api/settings endpoints:
- Branding: dashboard title and accent color overrides
- External links: deployment-wide list of {label, url} sidebar shortcuts
- Integrations: Grafana / Sentry / OTel base URLs
Each section persists optimistically via TanStack Query mutations with
rollback on error. Sidebar (and mobile menu) gain a Configuration group
linking to the new page. API client extended with put/delete helpers.
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.
Summary
Add a deployment-wide key/value settings store with a Settings page in the dashboard.
Backend:
Storagetrait methods:get_setting,set_setting,delete_setting,list_settings— implemented for SQLite, Postgres, and Redis (Redis uses a single hash attaskito:settings).dashboard_settingstable added via inline migration on SQLite + Postgres.PyQueueand a newQueueSettingsMixinsoqueue.set_setting(...)/get_setting(...)work from Python./api/settings:GET /api/settings— full snapshotGET /api/settings/{key}— single value (404 if unset)PUT /api/settings/{key}body{"value": ...}— JSON-encodes non-string valuesDELETE /api/settings/{key}— returns{deleted: bool}do_PUT/do_DELETEwith bounded JSON body parsing (1 MiB cap, 413 on overflow, 400 on malformed JSON).Frontend:
/settingsroute with three sections — Branding, External Links, Integrations.put/deletehelpers.Test plan
cargo check --workspace(default, postgres, redis, native-async)cargo clippy --workspace --features rediscargo test --workspace— 49 SQLite tests (6 new for settings) + cross-backend contract testuv run python -m pytest tests/python/ -v— 485 passed (16 new for settings)uv run ruff check py_src/ tests/— cleanuv run mypy py_src/taskito/ --no-incremental— cleanpnpm exec biome check src— cleanpnpm exec tsc --noEmit— cleanpnpm exec vitest run— 34 passedpnpm build— wheel bundle rebuilt successfully