@desplega.ai/agent-swarm 1.49.0 → 1.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/openapi.json +2070 -728
- package/package.json +10 -1
- package/src/agentmail/handlers.ts +65 -10
- package/src/agentmail/templates.ts +111 -0
- package/src/be/db.ts +1233 -7
- package/src/be/migrations/014_prompt_templates.sql +33 -0
- package/src/be/migrations/015_workflow_workspace.sql +3 -0
- package/src/be/migrations/016_active_session_runner_session.sql +4 -0
- package/src/be/migrations/017_channel_activity_cursors.sql +6 -0
- package/src/be/migrations/018_fix_seed_double_version.sql +30 -0
- package/src/be/migrations/019_skills.sql +65 -0
- package/src/be/migrations/020_approval_requests.sql +41 -0
- package/src/be/seed.ts +62 -0
- package/src/be/skill-parser.ts +70 -0
- package/src/be/skill-sync.ts +106 -0
- package/src/commands/runner.ts +320 -132
- package/src/commands/templates.ts +172 -0
- package/src/github/handlers.ts +292 -77
- package/src/github/mentions-aliases.test.ts +73 -0
- package/src/github/mentions.test.ts +3 -3
- package/src/github/mentions.ts +32 -6
- package/src/github/templates.ts +398 -0
- package/src/gitlab/handlers.ts +63 -22
- package/src/gitlab/templates.ts +140 -0
- package/src/heartbeat/heartbeat.ts +19 -10
- package/src/heartbeat/templates.ts +30 -0
- package/src/http/active-sessions.ts +27 -0
- package/src/http/approval-requests.ts +247 -0
- package/src/http/config.ts +3 -3
- package/src/http/index.ts +9 -2
- package/src/http/poll.ts +135 -14
- package/src/http/prompt-templates.ts +412 -0
- package/src/http/schedules.ts +35 -0
- package/src/http/skills.ts +479 -0
- package/src/http/workflows.ts +8 -0
- package/src/linear/sync.ts +28 -4
- package/src/linear/templates.ts +47 -0
- package/src/prompts/base-prompt.ts +41 -490
- package/src/prompts/registry.ts +57 -0
- package/src/prompts/resolver.ts +296 -0
- package/src/prompts/session-templates.ts +604 -0
- package/src/providers/claude-adapter.ts +15 -2
- package/src/providers/pi-mono-extension.ts +5 -1
- package/src/scheduler/scheduler.ts +125 -91
- package/src/server.ts +44 -0
- package/src/slack/assistant.ts +7 -4
- package/src/slack/channel-activity.ts +177 -0
- package/src/slack/handlers.ts +21 -6
- package/src/slack/templates.ts +55 -0
- package/src/tests/approval-requests.test.ts +735 -0
- package/src/tests/artifact-sdk.test.ts +12 -12
- package/src/tests/base-prompt.test.ts +49 -49
- package/src/tests/channel-activity.test.ts +363 -0
- package/src/tests/heartbeat.test.ts +1 -0
- package/src/tests/linear-webhook.test.ts +7 -3
- package/src/tests/pool-session-logs.test.ts +199 -0
- package/src/tests/prompt-template-github.test.ts +682 -0
- package/src/tests/prompt-template-remaining.test.ts +504 -0
- package/src/tests/prompt-template-resolver.test.ts +621 -0
- package/src/tests/prompt-template-session.test.ts +363 -0
- package/src/tests/prompt-templates-db.test.ts +616 -0
- package/src/tests/self-improvement.test.ts +8 -7
- package/src/tests/skill-parser.test.ts +178 -0
- package/src/tests/skill-sync.test.ts +171 -0
- package/src/tests/slack-metadata-inheritance.test.ts +1 -1
- package/src/tests/slack-thread-followups.test.ts +1 -1
- package/src/tests/structured-output.test.ts +0 -4
- package/src/tests/tool-annotations.test.ts +2 -1
- package/src/tests/update-profile-agentid.test.ts +248 -0
- package/src/tests/update-profile-auth.test.ts +195 -0
- package/src/tests/workflow-async-v2.test.ts +126 -4
- package/src/tests/workflow-definition-validation.test.ts +76 -0
- package/src/tests/workflow-executors.test.ts +4 -2
- package/src/tests/workflow-retry-v2.test.ts +1 -1
- package/src/tests/workflow-schedule-trigger.test.ts +104 -0
- package/src/tests/workflow-workspace.test.ts +272 -0
- package/src/tools/prompt-templates/delete.ts +86 -0
- package/src/tools/prompt-templates/get.ts +89 -0
- package/src/tools/prompt-templates/index.ts +5 -0
- package/src/tools/prompt-templates/list.ts +95 -0
- package/src/tools/prompt-templates/preview.ts +84 -0
- package/src/tools/prompt-templates/set.ts +117 -0
- package/src/tools/request-human-input.ts +106 -0
- package/src/tools/skills/index.ts +11 -0
- package/src/tools/skills/skill-create.ts +105 -0
- package/src/tools/skills/skill-delete.ts +67 -0
- package/src/tools/skills/skill-get.ts +75 -0
- package/src/tools/skills/skill-install-remote.ts +152 -0
- package/src/tools/skills/skill-install.ts +101 -0
- package/src/tools/skills/skill-list.ts +77 -0
- package/src/tools/skills/skill-publish.ts +123 -0
- package/src/tools/skills/skill-search.ts +43 -0
- package/src/tools/skills/skill-sync-remote.ts +128 -0
- package/src/tools/skills/skill-uninstall.ts +60 -0
- package/src/tools/skills/skill-update.ts +128 -0
- package/src/tools/store-progress.ts +22 -4
- package/src/tools/task-action.ts +20 -0
- package/src/tools/templates.ts +53 -0
- package/src/tools/tool-config.ts +23 -0
- package/src/tools/update-profile.ts +106 -34
- package/src/tools/workflows/create-workflow.ts +19 -1
- package/src/tools/workflows/update-workflow.ts +16 -1
- package/src/types.ts +109 -2
- package/src/workflows/definition.ts +30 -12
- package/src/workflows/engine.ts +40 -14
- package/src/workflows/executors/agent-task.ts +14 -3
- package/src/workflows/executors/human-in-the-loop.ts +160 -0
- package/src/workflows/executors/registry.ts +2 -0
- package/src/workflows/index.ts +1 -1
- package/src/workflows/recovery.ts +72 -0
- package/src/workflows/resume.ts +162 -12
- package/src/workflows/triggers.ts +31 -2
- package/src/workflows/version.ts +2 -0
- package/.claude/settings.json +0 -84
- package/.claude/settings.local.json +0 -117
- package/.dockerignore +0 -61
- package/.editorconfig +0 -15
- package/.entire/settings.json +0 -4
- package/.env.docker.example +0 -56
- package/.env.example +0 -78
- package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -78
- package/.github/ISSUE_TEMPLATE/community-template.yml +0 -77
- package/.github/ISSUE_TEMPLATE/config.yml +0 -8
- package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -60
- package/.github/PULL_REQUEST_TEMPLATE/community-template.md +0 -29
- package/.github/workflows/ci.yml +0 -52
- package/.github/workflows/docker-and-deploy.yml +0 -132
- package/.github/workflows/merge-gate.yml +0 -233
- package/.opencode/plugins/entire.ts +0 -133
- package/.superset/config.json +0 -6
- package/.wts-config.json +0 -4
- package/.wts-setup.ts +0 -171
- package/CHANGELOG.md +0 -447
- package/CLAUDE.md +0 -521
- package/CONTRIBUTING.md +0 -315
- package/DEPLOYMENT.md +0 -622
- package/Dockerfile +0 -65
- package/Dockerfile.worker +0 -189
- package/MCP.md +0 -841
- package/UI.md +0 -40
- package/api-entrypoint.sh +0 -56
- package/assets/agent-swarm-logo-orange.png +0 -0
- package/assets/agent-swarm-logo.png +0 -0
- package/assets/agent-swarm.mp4 +0 -0
- package/assets/agent-swarm.png +0 -0
- package/biome.json +0 -39
- package/deploy/DEPLOY.md +0 -60
- package/deploy/agent-swarm.service +0 -17
- package/deploy/docker-push.ts +0 -30
- package/deploy/install.ts +0 -85
- package/deploy/prod-db.ts +0 -42
- package/deploy/uninstall.ts +0 -12
- package/deploy/update.ts +0 -21
- package/depot.json +0 -1
- package/docker-compose.example.yml +0 -350
- package/docker-compose.local.yml +0 -119
- package/docker-entrypoint.sh +0 -632
- package/docs-site/app/api/search/route.ts +0 -4
- package/docs-site/app/docs/[[...slug]]/page.tsx +0 -87
- package/docs-site/app/docs/layout.tsx +0 -12
- package/docs-site/app/globals.css +0 -24
- package/docs-site/app/layout.config.tsx +0 -34
- package/docs-site/app/layout.tsx +0 -119
- package/docs-site/app/llms-full.txt/route.ts +0 -11
- package/docs-site/app/llms.mdx/docs/[[...slug]]/route.ts +0 -24
- package/docs-site/app/llms.txt/route.ts +0 -8
- package/docs-site/app/page.tsx +0 -5
- package/docs-site/app/robots.ts +0 -13
- package/docs-site/app/sitemap.ts +0 -37
- package/docs-site/components/api-page.client.tsx +0 -4
- package/docs-site/components/api-page.tsx +0 -7
- package/docs-site/components/mdx/mermaid.tsx +0 -55
- package/docs-site/content/docs/(documentation)/architecture/agents.mdx +0 -117
- package/docs-site/content/docs/(documentation)/architecture/hooks.mdx +0 -77
- package/docs-site/content/docs/(documentation)/architecture/memory.mdx +0 -96
- package/docs-site/content/docs/(documentation)/architecture/meta.json +0 -4
- package/docs-site/content/docs/(documentation)/architecture/overview.mdx +0 -172
- package/docs-site/content/docs/(documentation)/concepts/epics.mdx +0 -98
- package/docs-site/content/docs/(documentation)/concepts/meta.json +0 -4
- package/docs-site/content/docs/(documentation)/concepts/scheduling.mdx +0 -136
- package/docs-site/content/docs/(documentation)/concepts/services.mdx +0 -104
- package/docs-site/content/docs/(documentation)/concepts/task-lifecycle.mdx +0 -148
- package/docs-site/content/docs/(documentation)/concepts/workflows.mdx +0 -209
- package/docs-site/content/docs/(documentation)/contributing.mdx +0 -158
- package/docs-site/content/docs/(documentation)/getting-started.mdx +0 -157
- package/docs-site/content/docs/(documentation)/guides/agentmail-integration.mdx +0 -79
- package/docs-site/content/docs/(documentation)/guides/deployment.mdx +0 -171
- package/docs-site/content/docs/(documentation)/guides/github-integration.mdx +0 -81
- package/docs-site/content/docs/(documentation)/guides/gitlab-integration.mdx +0 -93
- package/docs-site/content/docs/(documentation)/guides/linear-integration.mdx +0 -98
- package/docs-site/content/docs/(documentation)/guides/meta.json +0 -13
- package/docs-site/content/docs/(documentation)/guides/sentry-integration.mdx +0 -52
- package/docs-site/content/docs/(documentation)/guides/slack-integration.mdx +0 -179
- package/docs-site/content/docs/(documentation)/guides/x402-payments.mdx +0 -154
- package/docs-site/content/docs/(documentation)/index.mdx +0 -65
- package/docs-site/content/docs/(documentation)/meta.json +0 -19
- package/docs-site/content/docs/(documentation)/reference/cli.mdx +0 -241
- package/docs-site/content/docs/(documentation)/reference/environment-variables.mdx +0 -205
- package/docs-site/content/docs/(documentation)/reference/mcp-tools.mdx +0 -449
- package/docs-site/content/docs/(documentation)/reference/meta.json +0 -4
- package/docs-site/content/docs/api-reference/active-sessions.mdx +0 -9
- package/docs-site/content/docs/api-reference/agents.mdx +0 -9
- package/docs-site/content/docs/api-reference/channels.mdx +0 -9
- package/docs-site/content/docs/api-reference/config.mdx +0 -9
- package/docs-site/content/docs/api-reference/debug.mdx +0 -9
- package/docs-site/content/docs/api-reference/ecosystem.mdx +0 -9
- package/docs-site/content/docs/api-reference/epics.mdx +0 -9
- package/docs-site/content/docs/api-reference/index.mdx +0 -32
- package/docs-site/content/docs/api-reference/memory.mdx +0 -9
- package/docs-site/content/docs/api-reference/meta.json +0 -25
- package/docs-site/content/docs/api-reference/poll.mdx +0 -9
- package/docs-site/content/docs/api-reference/repos.mdx +0 -9
- package/docs-site/content/docs/api-reference/schedules.mdx +0 -9
- package/docs-site/content/docs/api-reference/session-data.mdx +0 -9
- package/docs-site/content/docs/api-reference/stats.mdx +0 -9
- package/docs-site/content/docs/api-reference/tasks.mdx +0 -9
- package/docs-site/content/docs/api-reference/trackers.mdx +0 -9
- package/docs-site/content/docs/api-reference/webhooks.mdx +0 -9
- package/docs-site/content/docs/api-reference/workflows.mdx +0 -9
- package/docs-site/content/docs/meta.json +0 -3
- package/docs-site/lib/get-llm-text.ts +0 -10
- package/docs-site/lib/openapi.ts +0 -23
- package/docs-site/lib/source.ts +0 -8
- package/docs-site/mdx-components.tsx +0 -13
- package/docs-site/next.config.mjs +0 -29
- package/docs-site/package.json +0 -35
- package/docs-site/pnpm-lock.yaml +0 -5407
- package/docs-site/postcss.config.mjs +0 -8
- package/docs-site/public/logo.png +0 -0
- package/docs-site/scripts/generate-docs.ts +0 -171
- package/docs-site/source.config.ts +0 -17
- package/docs-site/tsconfig.json +0 -46
- package/ecosystem.config.cjs +0 -66
- package/landing/next.config.ts +0 -14
- package/landing/package.json +0 -31
- package/landing/pnpm-lock.yaml +0 -1091
- package/landing/postcss.config.mjs +0 -8
- package/landing/public/apple-touch-icon.png +0 -0
- package/landing/public/favicon.ico +0 -0
- package/landing/public/logo.png +0 -0
- package/landing/public/og-image.png +0 -0
- package/landing/public/omghost-desplega.svg +0 -30
- package/landing/public/omghost-openfort.svg +0 -9
- package/landing/src/app/actions/waitlist.ts +0 -25
- package/landing/src/app/blog/openfort-hackathon/page.tsx +0 -863
- package/landing/src/app/blog/page.tsx +0 -162
- package/landing/src/app/blog/swarm-metrics/page.tsx +0 -685
- package/landing/src/app/examples/page.tsx +0 -174
- package/landing/src/app/examples/x402/page.tsx +0 -456
- package/landing/src/app/globals.css +0 -122
- package/landing/src/app/layout.tsx +0 -134
- package/landing/src/app/page.tsx +0 -27
- package/landing/src/app/robots.ts +0 -13
- package/landing/src/app/sitemap.ts +0 -44
- package/landing/src/components/architecture.tsx +0 -163
- package/landing/src/components/cta.tsx +0 -52
- package/landing/src/components/features.tsx +0 -160
- package/landing/src/components/footer.tsx +0 -100
- package/landing/src/components/hero.tsx +0 -217
- package/landing/src/components/how-it-works.tsx +0 -165
- package/landing/src/components/navbar.tsx +0 -147
- package/landing/src/components/waitlist.tsx +0 -110
- package/landing/src/components/why-choose.tsx +0 -149
- package/landing/src/components/workshops.tsx +0 -328
- package/landing/src/lib/utils.ts +0 -6
- package/landing/tsconfig.json +0 -41
- package/misc/transcripts/2026-03-09-pi-mono-e2e-verification.md +0 -154
- package/new-ui/CLAUDE.md +0 -92
- package/new-ui/README.md +0 -73
- package/new-ui/biome.json +0 -42
- package/new-ui/components.json +0 -21
- package/new-ui/index.html +0 -25
- package/new-ui/package.json +0 -49
- package/new-ui/pnpm-lock.yaml +0 -4845
- package/new-ui/public/logo.png +0 -0
- package/new-ui/src/api/client.ts +0 -814
- package/new-ui/src/api/hooks/index.ts +0 -64
- package/new-ui/src/api/hooks/use-agents.ts +0 -58
- package/new-ui/src/api/hooks/use-channels.ts +0 -115
- package/new-ui/src/api/hooks/use-config-api.ts +0 -46
- package/new-ui/src/api/hooks/use-costs.ts +0 -122
- package/new-ui/src/api/hooks/use-db-query.ts +0 -29
- package/new-ui/src/api/hooks/use-epics.ts +0 -75
- package/new-ui/src/api/hooks/use-repos.ts +0 -61
- package/new-ui/src/api/hooks/use-schedules.ts +0 -81
- package/new-ui/src/api/hooks/use-services.ts +0 -16
- package/new-ui/src/api/hooks/use-stats.ts +0 -27
- package/new-ui/src/api/hooks/use-tasks.ts +0 -89
- package/new-ui/src/api/hooks/use-workflows.ts +0 -109
- package/new-ui/src/api/types.ts +0 -549
- package/new-ui/src/app/App.tsx +0 -13
- package/new-ui/src/app/providers.tsx +0 -32
- package/new-ui/src/app/router.tsx +0 -52
- package/new-ui/src/components/layout/app-header.tsx +0 -47
- package/new-ui/src/components/layout/app-sidebar.tsx +0 -128
- package/new-ui/src/components/layout/breadcrumbs.tsx +0 -57
- package/new-ui/src/components/layout/config-guard.tsx +0 -22
- package/new-ui/src/components/layout/root-layout.tsx +0 -40
- package/new-ui/src/components/layout/swarm-switcher.tsx +0 -85
- package/new-ui/src/components/shared/command-menu.tsx +0 -131
- package/new-ui/src/components/shared/data-grid.tsx +0 -141
- package/new-ui/src/components/shared/empty-state.tsx +0 -24
- package/new-ui/src/components/shared/error-boundary.tsx +0 -72
- package/new-ui/src/components/shared/json-viewer.tsx +0 -47
- package/new-ui/src/components/shared/name-connection-modal.tsx +0 -99
- package/new-ui/src/components/shared/page-skeleton.tsx +0 -16
- package/new-ui/src/components/shared/session-log-viewer.tsx +0 -364
- package/new-ui/src/components/shared/stats-bar.tsx +0 -132
- package/new-ui/src/components/shared/status-badge.tsx +0 -131
- package/new-ui/src/components/shared/usage-summary.tsx +0 -179
- package/new-ui/src/components/ui/alert-dialog.tsx +0 -176
- package/new-ui/src/components/ui/alert.tsx +0 -60
- package/new-ui/src/components/ui/avatar.tsx +0 -96
- package/new-ui/src/components/ui/badge.tsx +0 -46
- package/new-ui/src/components/ui/button.tsx +0 -62
- package/new-ui/src/components/ui/card.tsx +0 -75
- package/new-ui/src/components/ui/command.tsx +0 -160
- package/new-ui/src/components/ui/dialog.tsx +0 -143
- package/new-ui/src/components/ui/dropdown-menu.tsx +0 -226
- package/new-ui/src/components/ui/input.tsx +0 -21
- package/new-ui/src/components/ui/label.tsx +0 -19
- package/new-ui/src/components/ui/progress.tsx +0 -26
- package/new-ui/src/components/ui/scroll-area.tsx +0 -54
- package/new-ui/src/components/ui/select.tsx +0 -175
- package/new-ui/src/components/ui/separator.tsx +0 -28
- package/new-ui/src/components/ui/sheet.tsx +0 -132
- package/new-ui/src/components/ui/sidebar.tsx +0 -691
- package/new-ui/src/components/ui/skeleton.tsx +0 -13
- package/new-ui/src/components/ui/sonner.tsx +0 -35
- package/new-ui/src/components/ui/switch.tsx +0 -33
- package/new-ui/src/components/ui/table.tsx +0 -92
- package/new-ui/src/components/ui/tabs.tsx +0 -79
- package/new-ui/src/components/ui/textarea.tsx +0 -18
- package/new-ui/src/components/ui/tooltip.tsx +0 -51
- package/new-ui/src/components/workflows/action-node.tsx +0 -53
- package/new-ui/src/components/workflows/condition-node.tsx +0 -50
- package/new-ui/src/components/workflows/graph-utils.ts +0 -124
- package/new-ui/src/components/workflows/json-tree.tsx +0 -189
- package/new-ui/src/components/workflows/node-styles.ts +0 -10
- package/new-ui/src/components/workflows/step-detail-sheet.tsx +0 -87
- package/new-ui/src/components/workflows/trigger-node.tsx +0 -41
- package/new-ui/src/components/workflows/workflow-graph.tsx +0 -65
- package/new-ui/src/hooks/use-auto-scroll.ts +0 -82
- package/new-ui/src/hooks/use-config.ts +0 -203
- package/new-ui/src/hooks/use-keyboard-shortcuts.ts +0 -41
- package/new-ui/src/hooks/use-mobile.ts +0 -19
- package/new-ui/src/hooks/use-theme.ts +0 -60
- package/new-ui/src/lib/config.ts +0 -188
- package/new-ui/src/lib/slugs.ts +0 -71
- package/new-ui/src/lib/utils.ts +0 -120
- package/new-ui/src/main.tsx +0 -11
- package/new-ui/src/pages/agents/[id]/page.tsx +0 -492
- package/new-ui/src/pages/agents/page.tsx +0 -134
- package/new-ui/src/pages/chat/page.tsx +0 -674
- package/new-ui/src/pages/config/page.tsx +0 -1109
- package/new-ui/src/pages/dashboard/page.tsx +0 -454
- package/new-ui/src/pages/debug/page.tsx +0 -275
- package/new-ui/src/pages/epics/[id]/page.tsx +0 -809
- package/new-ui/src/pages/epics/page.tsx +0 -321
- package/new-ui/src/pages/not-found/page.tsx +0 -18
- package/new-ui/src/pages/repos/page.tsx +0 -369
- package/new-ui/src/pages/schedules/[id]/page.tsx +0 -664
- package/new-ui/src/pages/schedules/page.tsx +0 -477
- package/new-ui/src/pages/services/page.tsx +0 -128
- package/new-ui/src/pages/tasks/[id]/page.tsx +0 -670
- package/new-ui/src/pages/tasks/page.tsx +0 -592
- package/new-ui/src/pages/usage/page.tsx +0 -195
- package/new-ui/src/pages/workflow-runs/[id]/page.tsx +0 -363
- package/new-ui/src/pages/workflows/[id]/page.tsx +0 -417
- package/new-ui/src/pages/workflows/page.tsx +0 -266
- package/new-ui/src/styles/ag-grid.css +0 -36
- package/new-ui/src/styles/globals.css +0 -213
- package/new-ui/test-results/.last-run.json +0 -4
- package/new-ui/tsconfig.app.json +0 -34
- package/new-ui/tsconfig.json +0 -4
- package/new-ui/tsconfig.node.json +0 -26
- package/new-ui/vercel.json +0 -4
- package/new-ui/vite.config.ts +0 -28
- package/plugin/README.md +0 -1
- package/plugin/build-pi-skills.ts +0 -233
- package/plugin/hooks/hooks.json +0 -71
- package/prek.toml +0 -75
- package/pyproject.toml +0 -9
- package/scripts/check-db-boundary.sh +0 -60
- package/scripts/e2e-docker-provider.ts +0 -820
- package/scripts/e2e-io-schemas-test.ts +0 -807
- package/scripts/e2e-provider-test.ts +0 -220
- package/scripts/e2e-workflow-redesign.sh +0 -229
- package/scripts/e2e-workflow-test.sh +0 -285
- package/scripts/e2e-workflow-test.ts +0 -857
- package/scripts/generate-mcp-docs.ts +0 -415
- package/scripts/generate-openapi.ts +0 -26
- package/scripts/measure-tool-tokens.ts +0 -118
- package/scripts/x402-e2e-test.ts +0 -195
- package/scripts/x402-test-server.ts +0 -236
- package/scripts/x402-testnet-e2e.ts +0 -668
- package/slack-manifest.json +0 -88
- package/templates-ui/README.md +0 -46
- package/templates-ui/components.json +0 -17
- package/templates-ui/eslint.config.mjs +0 -18
- package/templates-ui/next.config.ts +0 -7
- package/templates-ui/package.json +0 -35
- package/templates-ui/pnpm-lock.yaml +0 -4571
- package/templates-ui/postcss.config.mjs +0 -7
- package/templates-ui/public/file.svg +0 -1
- package/templates-ui/public/globe.svg +0 -1
- package/templates-ui/public/logo.png +0 -0
- package/templates-ui/public/next.svg +0 -1
- package/templates-ui/public/vercel.svg +0 -1
- package/templates-ui/public/window.svg +0 -1
- package/templates-ui/src/app/[category]/[name]/page.tsx +0 -89
- package/templates-ui/src/app/api/templates/[...slug]/route.ts +0 -52
- package/templates-ui/src/app/api/templates/route.ts +0 -18
- package/templates-ui/src/app/builder/page.tsx +0 -37
- package/templates-ui/src/app/globals.css +0 -94
- package/templates-ui/src/app/layout.tsx +0 -79
- package/templates-ui/src/app/page.tsx +0 -38
- package/templates-ui/src/app/robots.ts +0 -11
- package/templates-ui/src/app/sitemap.ts +0 -31
- package/templates-ui/src/components/compose-builder.tsx +0 -442
- package/templates-ui/src/components/compose-preview.tsx +0 -117
- package/templates-ui/src/components/file-preview.tsx +0 -77
- package/templates-ui/src/components/footer.tsx +0 -40
- package/templates-ui/src/components/header.tsx +0 -41
- package/templates-ui/src/components/template-card.tsx +0 -87
- package/templates-ui/src/components/template-detail.tsx +0 -125
- package/templates-ui/src/components/template-gallery.tsx +0 -263
- package/templates-ui/src/components/ui/badge.tsx +0 -36
- package/templates-ui/src/components/ui/button.tsx +0 -57
- package/templates-ui/src/components/ui/card.tsx +0 -76
- package/templates-ui/src/components/ui/separator.tsx +0 -31
- package/templates-ui/src/components/ui/tooltip.tsx +0 -32
- package/templates-ui/src/lib/compose-generator.ts +0 -241
- package/templates-ui/src/lib/templates.ts +0 -137
- package/templates-ui/src/lib/utils.ts +0 -6
- package/templates-ui/tsconfig.json +0 -34
- package/thoughts/research/2026-02-28-openfort-viem-x402-research.md +0 -679
- package/thoughts/research/2026-02-28-x402-payments-research.md +0 -686
- package/thoughts/researcher/plans/2026-02-20-agent-self-improvement-plan.md +0 -282
- package/thoughts/researcher/research/2026-02-20-agent-self-improvement.md +0 -492
- package/thoughts/shared/plans/.gitkeep +0 -0
- package/thoughts/shared/plans/2025-12-18-slack-integration.md +0 -1195
- package/thoughts/shared/plans/2025-12-19-agent-log-streaming.md +0 -732
- package/thoughts/shared/plans/2025-12-19-role-based-swarm-plugin.md +0 -361
- package/thoughts/shared/plans/2025-12-20-mobile-responsive-ui.md +0 -501
- package/thoughts/shared/plans/2025-12-20-startup-team-swarm.md +0 -560
- package/thoughts/shared/plans/2025-12-23-runner-level-polling.md +0 -934
- package/thoughts/shared/plans/2025-12-23-runner-session-logs.md +0 -1000
- package/thoughts/shared/plans/2025-12-23-worker-lead-spawn-triggers.md +0 -568
- package/thoughts/shared/plans/2026-01-09-inverse-teleport.md +0 -1516
- package/thoughts/shared/plans/2026-01-12-agent-rename-pm2-control.md +0 -1133
- package/thoughts/shared/plans/2026-01-12-github-app-integration.md +0 -380
- package/thoughts/shared/plans/2026-01-12-lead-inbox-model.md +0 -876
- package/thoughts/shared/plans/2026-01-12-ralph-wiggum-integration.md +0 -463
- package/thoughts/shared/plans/2026-01-13-agent-concurrency.md +0 -691
- package/thoughts/shared/plans/2026-01-13-github-assignment-handling.md +0 -690
- package/thoughts/shared/plans/2026-01-13-prevent-duplicate-trigger-processing.md +0 -1071
- package/thoughts/shared/plans/2026-01-14-fix-slack-thread-context.md +0 -507
- package/thoughts/shared/plans/2026-01-15-scheduled-tasks-implementation.md +0 -565
- package/thoughts/shared/plans/2026-01-15-usage-cost-tracking-ui.md +0 -1479
- package/thoughts/shared/plans/2026-01-16-epics-feature-implementation.md +0 -1230
- package/thoughts/shared/plans/2026-02-26-mcp-tool-context-reduction.md +0 -282
- package/thoughts/shared/plans/2026-03-02-claude-context-mode-integration.md +0 -328
- package/thoughts/shared/plans/2026-03-02-code-level-heartbeat.md +0 -224
- package/thoughts/shared/research/.gitkeep +0 -0
- package/thoughts/shared/research/2025-01-09-inverse-teleport-plan-review.md +0 -420
- package/thoughts/shared/research/2025-12-18-slack-integration.md +0 -442
- package/thoughts/shared/research/2025-12-19-agent-log-streaming.md +0 -339
- package/thoughts/shared/research/2025-12-19-agent-secrets-cli-research.md +0 -390
- package/thoughts/shared/research/2025-12-21-gemini-cli-integration.md +0 -376
- package/thoughts/shared/research/2025-12-22-runner-loop-architecture.md +0 -582
- package/thoughts/shared/research/2025-12-22-setup-experience-improvements.md +0 -264
- package/thoughts/shared/research/2026-01-13-lead-duplicate-trigger-processing.md +0 -223
- package/thoughts/shared/research/2026-01-14-lead-slack-thread-context.md +0 -277
- package/thoughts/shared/research/2026-01-15-ai-tracker-agent-swarm-integration.md +0 -376
- package/thoughts/shared/research/2026-01-15-auto-starting-processes-in-worker-containers.md +0 -787
- package/thoughts/shared/research/2026-01-15-scheduled-tasks.md +0 -390
- package/thoughts/shared/research/2026-01-16-epics-feature-research.md +0 -437
- package/thoughts/shared/research/2026-02-26-cliffy-mcp-tools.md +0 -159
- package/thoughts/shared/research/2026-03-03-database-migration-system-refactor.md +0 -337
- package/thoughts/swarm-researcher/plans/2026-02-23-openclaw-improvements-plan.md +0 -778
- package/thoughts/swarm-researcher/plans/2026-02-26-artifacts-localtunnel-plan.md +0 -1269
- package/thoughts/swarm-researcher/research/2026-02-23-openclaw-vs-agent-swarm-comparison.md +0 -411
- package/thoughts/swarm-researcher/research/2026-02-26-artifacts-localtunnel.md +0 -724
- package/thoughts/taras/brainstorms/2026-03-20-prompt-template-registry.md +0 -443
- package/thoughts/taras/brainstorms/2026-03-20-setup-cli-onboarding.md +0 -307
- package/thoughts/taras/plans/2026-01-22-agent-swarm-schemas.md +0 -98
- package/thoughts/taras/plans/2026-01-28-per-worker-claude-md.md +0 -617
- package/thoughts/taras/plans/2026-01-28-sentry-cli-integration.md +0 -214
- package/thoughts/taras/plans/2026-02-20-auto-improvement.md +0 -803
- package/thoughts/taras/plans/2026-02-20-env-management.md +0 -538
- package/thoughts/taras/plans/2026-02-20-memory-system.md +0 -882
- package/thoughts/taras/plans/2026-02-20-repos-knowledge.md +0 -806
- package/thoughts/taras/plans/2026-02-20-session-attach.md +0 -647
- package/thoughts/taras/plans/2026-02-20-worker-identity.md +0 -820
- package/thoughts/taras/plans/2026-02-25-feat-new-ui-visual-redesign-plan.md +0 -768
- package/thoughts/taras/plans/2026-03-04-fix-buildSystemPrompt-missing-fields.md +0 -77
- package/thoughts/taras/plans/2026-03-04-new-ui-missing-actions.md +0 -543
- package/thoughts/taras/plans/2026-03-06-one-time-scheduled-tasks.md +0 -373
- package/thoughts/taras/plans/2026-03-08-memory-self-improvement-enhancements.md +0 -512
- package/thoughts/taras/plans/2026-03-08-pi-mono-provider-implementation.md +0 -919
- package/thoughts/taras/plans/2026-03-09-templates-registry.md +0 -723
- package/thoughts/taras/plans/2026-03-10-task-working-directory.md +0 -371
- package/thoughts/taras/plans/2026-03-11-archil-per-agent-write-strategy.md +0 -621
- package/thoughts/taras/plans/2026-03-12-eliminate-inbox-route-to-tasks.md +0 -61
- package/thoughts/taras/plans/2026-03-12-slack-thread-followup-additive.md +0 -488
- package/thoughts/taras/plans/2026-03-13-slack-ai-improvements.md +0 -644
- package/thoughts/taras/plans/2026-03-16-route-wrapper-openapi.md +0 -636
- package/thoughts/taras/plans/2026-03-17-multi-api-config.md +0 -444
- package/thoughts/taras/plans/2026-03-18-agent-fs-integration.md +0 -591
- package/thoughts/taras/plans/2026-03-18-debug-db-explorer.md +0 -446
- package/thoughts/taras/plans/2026-03-18-workflow-redesign.md +0 -987
- package/thoughts/taras/plans/2026-03-19-compound-learnings.md +0 -403
- package/thoughts/taras/plans/2026-03-19-ticket-tracker-linear-integration.md +0 -860
- package/thoughts/taras/plans/2026-03-19-workflow-io-schemas-and-bugs.md +0 -899
- package/thoughts/taras/plans/2026-03-20-setup-cli-onboarding.md +0 -874
- package/thoughts/taras/plans/2026-03-20-workflow-structured-output-validation-workspace.md +0 -723
- package/thoughts/taras/research/2026-01-22-vercel-cli-integration.md +0 -287
- package/thoughts/taras/research/2026-01-27-excessive-polling-issue.md +0 -311
- package/thoughts/taras/research/2026-01-28-per-worker-claude-md.md +0 -383
- package/thoughts/taras/research/2026-01-28-sentry-cli-integration.md +0 -240
- package/thoughts/taras/research/2026-02-19-agent-native-swarm-architecture.md +0 -390
- package/thoughts/taras/research/2026-02-19-swarm-gaps-implementation.md +0 -594
- package/thoughts/taras/research/2026-02-25-dashboard-ui-design-best-practices.md +0 -825
- package/thoughts/taras/research/2026-02-26-task-detail-page-redesign.md +0 -393
- package/thoughts/taras/research/2026-03-03-new-ui-missing-actions.md +0 -168
- package/thoughts/taras/research/2026-03-05-pi-mono-provider-research.md +0 -230
- package/thoughts/taras/research/2026-03-06-workflow-engine-design.md +0 -445
- package/thoughts/taras/research/2026-03-08-drive-loop-concept.md +0 -375
- package/thoughts/taras/research/2026-03-08-pi-mono-deep-dive.md +0 -869
- package/thoughts/taras/research/2026-03-09-templates-registry.md +0 -373
- package/thoughts/taras/research/2026-03-10-agent-working-directory.md +0 -223
- package/thoughts/taras/research/2026-03-10-configurable-event-prompts.md +0 -339
- package/thoughts/taras/research/2026-03-11-archil-production-setup.md +0 -181
- package/thoughts/taras/research/2026-03-11-archil-shared-disk-write-strategies.md +0 -437
- package/thoughts/taras/research/2026-03-13-slack-ai-features.md +0 -258
- package/thoughts/taras/research/2026-03-16-openapi-docs-generation.md +0 -335
- package/thoughts/taras/research/2026-03-16-route-wrapper-openapi.md +0 -670
- package/thoughts/taras/research/2026-03-16-slack-thread-followups-e2e.md +0 -54
- package/thoughts/taras/research/2026-03-18-agent-fs-integration.md +0 -558
- package/thoughts/taras/research/2026-03-18-linear-integration-finalization.md +0 -526
- package/thoughts/taras/research/2026-03-18-workflow-redesign.md +0 -797
- package/thoughts/taras/research/2026-03-19-workflow-node-io-schemas-and-bugs.md +0 -563
- package/thoughts/taras/research/2026-03-19-workflow-structured-output-validation-workspace.md +0 -486
- package/thoughts/taras/research/2026-03-20-prompt-template-registry.md +0 -469
- package/tsconfig.json +0 -37
|
@@ -1,825 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
date: 2026-02-25T12:00:00Z
|
|
3
|
-
topic: "Modern Dashboard UI Design Best Practices (2025-2026)"
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Modern Dashboard UI Design Best Practices (2025-2026)
|
|
7
|
-
|
|
8
|
-
Research date: 2026-02-25
|
|
9
|
-
Context: Agent Swarm monitoring dashboard redesign, moving from MUI Joy + amber/beehive theme to a modern, polished design system.
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
## Table of Contents
|
|
14
|
-
|
|
15
|
-
1. [Color Palette Design for Dark-Mode-First Dashboards](#1-color-palette-design)
|
|
16
|
-
2. [Visual Hierarchy, Spacing, and Typography](#2-visual-hierarchy-spacing-typography)
|
|
17
|
-
3. [shadcn/ui + Tailwind CSS v4 Dashboard Patterns](#3-shadcn-tailwind-v4)
|
|
18
|
-
4. [AG Grid Theming Best Practices](#4-ag-grid-theming)
|
|
19
|
-
5. [Sidebar Navigation Design Patterns](#5-sidebar-navigation)
|
|
20
|
-
6. [Status Indicators and Badge Design](#6-status-indicators)
|
|
21
|
-
7. [Card vs Table Layouts for Monitoring](#7-card-vs-table-layouts)
|
|
22
|
-
8. [Micro-Animations and Transitions](#8-micro-animations)
|
|
23
|
-
9. [Reference Dashboards and Design Systems](#9-reference-dashboards)
|
|
24
|
-
10. [Concrete Recommendations for Agent Swarm](#10-agent-swarm-recommendations)
|
|
25
|
-
|
|
26
|
-
---
|
|
27
|
-
|
|
28
|
-
## 1. Color Palette Design
|
|
29
|
-
|
|
30
|
-
### Moving Beyond Amber/Gold
|
|
31
|
-
|
|
32
|
-
The current Agent Swarm UI uses a warm amber/honey/gold palette (#F5A623 primary, #D4A574 gold, #0d0906 body). While thematic ("beehive"), this approach has several issues:
|
|
33
|
-
|
|
34
|
-
- Amber/warm tones on dark backgrounds produce a "dated" or "retro terminal" aesthetic
|
|
35
|
-
- Limited semantic range: amber already means "warning" in most color systems, so using it as a primary creates confusion
|
|
36
|
-
- The warm brown surfaces (#1a130e, #251c15) reduce contrast compared to neutral darks
|
|
37
|
-
|
|
38
|
-
### Modern Dark Mode Color Theory
|
|
39
|
-
|
|
40
|
-
**Source: Material Design, Linear, Vercel Geist, shadcn/ui defaults**
|
|
41
|
-
|
|
42
|
-
The industry consensus in 2025-2026:
|
|
43
|
-
|
|
44
|
-
1. **Use near-black neutrals, not pure black or tinted blacks**
|
|
45
|
-
- Pure #000000 is too harsh and eliminates elevation perception
|
|
46
|
-
- Tinted blacks (like the current #0d0906 warm brown) bias the entire palette
|
|
47
|
-
- Best practice: neutral grays with very slight cool or warm tint
|
|
48
|
-
|
|
49
|
-
2. **OKLCH color space** is the new standard for generating perceptually uniform palettes
|
|
50
|
-
- Linear migrated to LCH for theme generation
|
|
51
|
-
- shadcn/ui now uses OKLCH as default format
|
|
52
|
-
- Key advantage: changing lightness doesn't cause hue/saturation drift
|
|
53
|
-
|
|
54
|
-
3. **Layered darkness for elevation** (Material Design principle)
|
|
55
|
-
- Base: #09111A to #121212 range
|
|
56
|
-
- Surface +1: 5% lighter (cards, panels)
|
|
57
|
-
- Surface +2: 8-10% lighter (popovers, dropdowns)
|
|
58
|
-
- Surface +3: 12-15% lighter (elevated modals)
|
|
59
|
-
|
|
60
|
-
### Recommended Dark Palette: Cool Neutral
|
|
61
|
-
|
|
62
|
-
A cool neutral palette that doesn't commit to a strong brand hue, keeping the focus on content:
|
|
63
|
-
|
|
64
|
-
```css
|
|
65
|
-
/* === BACKGROUNDS (layered darkness) === */
|
|
66
|
-
--background: oklch(0.145 0 0); /* ~#0a0a0a - page base */
|
|
67
|
-
--surface-1: oklch(0.175 0.005 270); /* ~#111318 - cards, panels */
|
|
68
|
-
--surface-2: oklch(0.21 0.006 270); /* ~#181b22 - elevated cards */
|
|
69
|
-
--surface-3: oklch(0.25 0.007 270); /* ~#1f2330 - popovers, modals */
|
|
70
|
-
|
|
71
|
-
/* === BORDERS === */
|
|
72
|
-
--border: oklch(1 0 0 / 8%); /* subtle white overlay */
|
|
73
|
-
--border-strong: oklch(1 0 0 / 14%); /* active/focused borders */
|
|
74
|
-
|
|
75
|
-
/* === TEXT === */
|
|
76
|
-
--text-primary: oklch(0.985 0 0); /* ~#fafafa - headings, primary */
|
|
77
|
-
--text-secondary: oklch(0.71 0.01 270); /* ~#a1a1aa - descriptions */
|
|
78
|
-
--text-tertiary: oklch(0.55 0.01 270); /* ~#71717a - timestamps, hints */
|
|
79
|
-
--text-muted: oklch(0.45 0.01 270); /* ~#52525b - disabled text */
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### Accent Color: Moving to Blue-Indigo
|
|
83
|
-
|
|
84
|
-
Instead of amber as the primary accent, use a blue-indigo which:
|
|
85
|
-
- Is universally understood as "interactive/clickable"
|
|
86
|
-
- Provides clear contrast against warm semantic colors (success green, warning amber, error red)
|
|
87
|
-
- Works well for selection highlights, links, and focus rings
|
|
88
|
-
|
|
89
|
-
```css
|
|
90
|
-
/* === ACCENT (Blue-Indigo) === */
|
|
91
|
-
--accent: oklch(0.62 0.19 264); /* ~#6366f1 - indigo-500 */
|
|
92
|
-
--accent-hover: oklch(0.56 0.21 264); /* ~#4f46e5 - indigo-600 */
|
|
93
|
-
--accent-muted: oklch(0.62 0.19 264 / 15%); /* selection backgrounds */
|
|
94
|
-
--accent-foreground: oklch(0.985 0 0); /* white text on accent */
|
|
95
|
-
|
|
96
|
-
/* === SEMANTIC COLORS === */
|
|
97
|
-
/* Success - Emerald */
|
|
98
|
-
--success: oklch(0.70 0.17 162); /* ~#10b981 - emerald-500 */
|
|
99
|
-
--success-muted: oklch(0.70 0.17 162 / 15%);
|
|
100
|
-
|
|
101
|
-
/* Warning - Amber (now properly semantic, not primary) */
|
|
102
|
-
--warning: oklch(0.75 0.18 80); /* ~#f59e0b - amber-500 */
|
|
103
|
-
--warning-muted: oklch(0.75 0.18 80 / 15%);
|
|
104
|
-
|
|
105
|
-
/* Error/Destructive - Red */
|
|
106
|
-
--error: oklch(0.63 0.21 25); /* ~#ef4444 - red-500 */
|
|
107
|
-
--error-muted: oklch(0.63 0.21 25 / 15%);
|
|
108
|
-
|
|
109
|
-
/* Info - Sky Blue */
|
|
110
|
-
--info: oklch(0.68 0.14 230); /* ~#38bdf8 - sky-400 */
|
|
111
|
-
--info-muted: oklch(0.68 0.14 230 / 15%);
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
### Alternative Accent: Teal-Cyan
|
|
115
|
-
|
|
116
|
-
If indigo feels too "generic", teal-cyan is a distinctive alternative that's popular in monitoring/DevOps tools (Datadog, Grafana):
|
|
117
|
-
|
|
118
|
-
```css
|
|
119
|
-
--accent: oklch(0.72 0.15 190); /* ~#14b8a6 - teal-500 */
|
|
120
|
-
--accent-hover: oklch(0.66 0.16 190); /* ~#0d9488 - teal-600 */
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
### Chart Colors (5-color data visualization palette)
|
|
124
|
-
|
|
125
|
-
```css
|
|
126
|
-
--chart-1: oklch(0.62 0.19 264); /* indigo - primary series */
|
|
127
|
-
--chart-2: oklch(0.70 0.17 162); /* emerald - secondary */
|
|
128
|
-
--chart-3: oklch(0.68 0.14 230); /* sky blue */
|
|
129
|
-
--chart-4: oklch(0.72 0.16 310); /* purple/violet */
|
|
130
|
-
--chart-5: oklch(0.75 0.18 80); /* amber */
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
---
|
|
134
|
-
|
|
135
|
-
## 2. Visual Hierarchy, Spacing, and Typography
|
|
136
|
-
|
|
137
|
-
### Typography
|
|
138
|
-
|
|
139
|
-
**Source: Linear redesign, font pairing research, data-dense UI studies**
|
|
140
|
-
|
|
141
|
-
**Recommendation: Inter + JetBrains Mono (or Geist Sans + Geist Mono)**
|
|
142
|
-
|
|
143
|
-
| Use Case | Font | Weight | Size |
|
|
144
|
-
|---|---|---|---|
|
|
145
|
-
| Page titles | Inter Display (or Inter) | 600 | 20-24px |
|
|
146
|
-
| Section headings | Inter | 600 | 16-18px |
|
|
147
|
-
| Card titles | Inter | 500 | 14-15px |
|
|
148
|
-
| Body text | Inter | 400 | 13-14px |
|
|
149
|
-
| Table data | Inter (tabular nums) | 400 | 13px |
|
|
150
|
-
| Code/IDs/timestamps | JetBrains Mono | 400 | 12-13px |
|
|
151
|
-
| Badges/labels | Inter | 600 | 11-12px (UPPERCASE, 0.05em tracking) |
|
|
152
|
-
|
|
153
|
-
Key insight from research: **Use tabular numerals in proportional fonts for numeric data** rather than monospace. Monospace is overkill for numbers. Inter supports `font-variant-numeric: tabular-nums` which gives aligned columns with better readability.
|
|
154
|
-
|
|
155
|
-
Current UI uses Space Grotesk + Space Mono. These are fine fonts but:
|
|
156
|
-
- Space Grotesk has a more "playful" personality than a monitoring dashboard warrants
|
|
157
|
-
- Inter is the industry standard for data-dense UIs (Linear, Vercel, shadcn, Raycast all use it)
|
|
158
|
-
|
|
159
|
-
### Spacing Scale
|
|
160
|
-
|
|
161
|
-
Follow the Tailwind 4px grid (each unit = 0.25rem = 4px):
|
|
162
|
-
|
|
163
|
-
```
|
|
164
|
-
Micro: 4px (gap between icon and label)
|
|
165
|
-
Small: 8px (gap between related items, padding in small components)
|
|
166
|
-
Medium: 12px (card internal padding, gap between list items)
|
|
167
|
-
Regular: 16px (standard content padding)
|
|
168
|
-
Large: 24px (section gaps, card padding)
|
|
169
|
-
XLarge: 32px (page-level section spacing)
|
|
170
|
-
XXLarge: 48px (major layout divisions)
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
**Dashboard-specific spacing rules:**
|
|
174
|
-
- Card padding: 16px (p-4) for standard, 20px (p-5) for featured cards
|
|
175
|
-
- Gap between cards in a grid: 16px (gap-4)
|
|
176
|
-
- Sidebar width: 240px expanded, 48px collapsed (icon-only)
|
|
177
|
-
- Tab bar height: 40px
|
|
178
|
-
- Table row height: 40-44px for data density without feeling cramped
|
|
179
|
-
- Header height: 48-56px
|
|
180
|
-
|
|
181
|
-
### Visual Hierarchy Principles
|
|
182
|
-
|
|
183
|
-
1. **Size contrast for emphasis**: Titles 20-24px, body 13-14px (1.5-1.8x ratio)
|
|
184
|
-
2. **Color contrast for importance**: Primary text (#fafafa) vs secondary (#a1a1aa) - clear 2-level system
|
|
185
|
-
3. **Weight contrast for scanability**: 600 weight for headings/labels, 400 for body
|
|
186
|
-
4. **Spatial grouping**: Related content is 8-12px apart; unrelated content 24-32px apart
|
|
187
|
-
5. **Border-free elevation**: Use background color differences instead of visible borders where possible (Linear's approach)
|
|
188
|
-
|
|
189
|
-
---
|
|
190
|
-
|
|
191
|
-
## 3. shadcn/ui + Tailwind CSS v4 Dashboard Patterns
|
|
192
|
-
|
|
193
|
-
### Tailwind v4 Architecture
|
|
194
|
-
|
|
195
|
-
Tailwind v4 fundamentally changes how you configure themes:
|
|
196
|
-
|
|
197
|
-
```css
|
|
198
|
-
/* No more tailwind.config.js - everything in CSS */
|
|
199
|
-
@import "tailwindcss";
|
|
200
|
-
|
|
201
|
-
@theme {
|
|
202
|
-
/* Design tokens become CSS variables that auto-generate utilities */
|
|
203
|
-
--color-background: oklch(0.145 0 0);
|
|
204
|
-
--color-surface: oklch(0.175 0.005 270);
|
|
205
|
-
--color-accent: oklch(0.62 0.19 264);
|
|
206
|
-
|
|
207
|
-
--spacing-xs: 0.25rem;
|
|
208
|
-
--spacing-sm: 0.5rem;
|
|
209
|
-
--spacing-md: 0.75rem;
|
|
210
|
-
--spacing-lg: 1rem;
|
|
211
|
-
|
|
212
|
-
--font-sans: "Inter", system-ui, sans-serif;
|
|
213
|
-
--font-mono: "JetBrains Mono", monospace;
|
|
214
|
-
|
|
215
|
-
--radius-sm: 0.375rem;
|
|
216
|
-
--radius-md: 0.5rem;
|
|
217
|
-
--radius-lg: 0.75rem;
|
|
218
|
-
}
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
### Three-Layer Token Hierarchy (Best Practice)
|
|
222
|
-
|
|
223
|
-
```css
|
|
224
|
-
/* Layer 1: Base (raw palette) */
|
|
225
|
-
--color-gray-50: oklch(0.985 0 0);
|
|
226
|
-
--color-gray-100: oklch(0.95 0.003 270);
|
|
227
|
-
--color-gray-900: oklch(0.21 0.006 270);
|
|
228
|
-
--color-gray-950: oklch(0.145 0 0);
|
|
229
|
-
|
|
230
|
-
/* Layer 2: Semantic (maps to purpose) */
|
|
231
|
-
--color-background: var(--color-gray-950);
|
|
232
|
-
--color-foreground: var(--color-gray-50);
|
|
233
|
-
--color-muted: var(--color-gray-900);
|
|
234
|
-
--color-muted-foreground: var(--color-gray-400);
|
|
235
|
-
|
|
236
|
-
/* Layer 3: Component (variant-specific) */
|
|
237
|
-
--sidebar-background: var(--color-gray-900);
|
|
238
|
-
--sidebar-foreground: var(--color-gray-50);
|
|
239
|
-
--card-background: var(--color-surface);
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
Never skip the semantic layer -- it's what makes refactors safe.
|
|
243
|
-
|
|
244
|
-
### shadcn/ui Default Dark Theme (Reference)
|
|
245
|
-
|
|
246
|
-
As of 2025-2026, shadcn/ui uses OKLCH by default:
|
|
247
|
-
|
|
248
|
-
```css
|
|
249
|
-
.dark {
|
|
250
|
-
--background: oklch(0.145 0 0);
|
|
251
|
-
--foreground: oklch(0.985 0 0);
|
|
252
|
-
--card: oklch(0.205 0 0);
|
|
253
|
-
--card-foreground: oklch(0.985 0 0);
|
|
254
|
-
--popover: oklch(0.205 0 0);
|
|
255
|
-
--popover-foreground: oklch(0.985 0 0);
|
|
256
|
-
--primary: oklch(0.92 0.004 286.32);
|
|
257
|
-
--primary-foreground: oklch(0.21 0.006 285.885);
|
|
258
|
-
--secondary: oklch(0.274 0.006 286.033);
|
|
259
|
-
--secondary-foreground: oklch(0.985 0 0);
|
|
260
|
-
--muted: oklch(0.274 0.006 286.033);
|
|
261
|
-
--muted-foreground: oklch(0.705 0.015 286.067);
|
|
262
|
-
--accent: oklch(0.274 0.006 286.033);
|
|
263
|
-
--accent-foreground: oklch(0.985 0 0);
|
|
264
|
-
--destructive: oklch(0.704 0.191 22.216);
|
|
265
|
-
--border: oklch(1 0 0 / 10%);
|
|
266
|
-
--input: oklch(1 0 0 / 15%);
|
|
267
|
-
--ring: oklch(0.552 0.016 285.938);
|
|
268
|
-
--sidebar: oklch(0.21 0.006 285.885);
|
|
269
|
-
--sidebar-foreground: oklch(0.985 0 0);
|
|
270
|
-
--sidebar-primary: oklch(0.488 0.243 264.376);
|
|
271
|
-
--sidebar-primary-foreground: oklch(0.985 0 0);
|
|
272
|
-
--sidebar-accent: oklch(0.274 0.006 286.033);
|
|
273
|
-
--sidebar-accent-foreground: oklch(0.985 0 0);
|
|
274
|
-
--sidebar-border: oklch(1 0 0 / 10%);
|
|
275
|
-
}
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
### Essential shadcn Components for Dashboards
|
|
279
|
-
|
|
280
|
-
- **Card** -- metric containers, KPI displays
|
|
281
|
-
- **DataTable** -- powered by TanStack Table, sorting/filtering/pagination built in
|
|
282
|
-
- **Sidebar** -- collapsible navigation with icon-only mode
|
|
283
|
-
- **Tabs** -- content section switching
|
|
284
|
-
- **Badge** -- status indicators
|
|
285
|
-
- **Sheet** -- mobile-responsive slide-in panels
|
|
286
|
-
- **Command** -- command palette (Cmd+K)
|
|
287
|
-
- **Chart** -- built on Recharts, inherits theme colors
|
|
288
|
-
|
|
289
|
-
---
|
|
290
|
-
|
|
291
|
-
## 4. AG Grid Theming Best Practices
|
|
292
|
-
|
|
293
|
-
### Modern AG Grid Theming API
|
|
294
|
-
|
|
295
|
-
AG Grid's Theming API (v31+) uses `themeQuartz` with `withParams`:
|
|
296
|
-
|
|
297
|
-
```typescript
|
|
298
|
-
import { themeQuartz, colorSchemeDark } from "ag-grid-community";
|
|
299
|
-
|
|
300
|
-
const customDarkTheme = themeQuartz
|
|
301
|
-
.withPart(colorSchemeDark)
|
|
302
|
-
.withParams({
|
|
303
|
-
// Match your dashboard background
|
|
304
|
-
backgroundColor: "#111318",
|
|
305
|
-
|
|
306
|
-
// Match your text colors
|
|
307
|
-
foregroundColor: "#fafafa",
|
|
308
|
-
|
|
309
|
-
// Match your accent color
|
|
310
|
-
accentColor: "#6366f1",
|
|
311
|
-
|
|
312
|
-
// Borders -- subtle
|
|
313
|
-
borderColor: "rgba(255, 255, 255, 0.08)",
|
|
314
|
-
|
|
315
|
-
// Row alternation
|
|
316
|
-
oddRowBackgroundColor: "rgba(255, 255, 255, 0.02)",
|
|
317
|
-
|
|
318
|
-
// Header styling
|
|
319
|
-
headerBackgroundColor: "#0f1116",
|
|
320
|
-
headerTextColor: "#a1a1aa",
|
|
321
|
-
headerFontWeight: 600,
|
|
322
|
-
headerFontSize: 12,
|
|
323
|
-
|
|
324
|
-
// Cell text
|
|
325
|
-
cellTextColor: "#e4e4e7",
|
|
326
|
-
fontSize: 13,
|
|
327
|
-
|
|
328
|
-
// Selection
|
|
329
|
-
selectedRowBackgroundColor: "rgba(99, 102, 241, 0.12)",
|
|
330
|
-
rangeSelectionBorderColor: "#6366f1",
|
|
331
|
-
|
|
332
|
-
// Chrome (panels, toolbars)
|
|
333
|
-
chromeBackgroundColor: "#0f1116",
|
|
334
|
-
|
|
335
|
-
// Spacing
|
|
336
|
-
cellHorizontalPadding: 12,
|
|
337
|
-
rowHeight: 40,
|
|
338
|
-
headerHeight: 40,
|
|
339
|
-
|
|
340
|
-
// Borders
|
|
341
|
-
rowBorderColor: "rgba(255, 255, 255, 0.04)",
|
|
342
|
-
columnBorderColor: "transparent",
|
|
343
|
-
|
|
344
|
-
// Font
|
|
345
|
-
fontFamily: "'Inter', system-ui, sans-serif",
|
|
346
|
-
});
|
|
347
|
-
```
|
|
348
|
-
|
|
349
|
-
### Key AG Grid Dark Mode Principles
|
|
350
|
-
|
|
351
|
-
1. **Match the grid background to your card/surface color** -- the grid should feel embedded, not floating
|
|
352
|
-
2. **Reduce border prominence** -- use very subtle borders (4-8% white opacity) or eliminate column borders entirely
|
|
353
|
-
3. **Dim the header** -- header should be slightly darker than data rows, with muted text color
|
|
354
|
-
4. **Use subtle row alternation** -- 2-3% white overlay for odd rows, not a visible color difference
|
|
355
|
-
5. **Accent color for selection only** -- don't overuse the accent; let data be neutral
|
|
356
|
-
6. **Match font to your dashboard** -- set fontFamily to match your UI typography
|
|
357
|
-
7. **Consistent row height** -- 40px is the sweet spot for data density with touch-friendliness
|
|
358
|
-
|
|
359
|
-
### Custom CSS Overrides for Polish
|
|
360
|
-
|
|
361
|
-
```css
|
|
362
|
-
/* Remove the outer grid border for seamless card integration */
|
|
363
|
-
.ag-root-wrapper {
|
|
364
|
-
border: none !important;
|
|
365
|
-
border-radius: 0 !important;
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
/* Soften header separator */
|
|
369
|
-
.ag-header {
|
|
370
|
-
border-bottom: 1px solid rgba(255, 255, 255, 0.06) !important;
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
/* Status cell with colored dot */
|
|
374
|
-
.ag-cell.status-cell {
|
|
375
|
-
display: flex;
|
|
376
|
-
align-items: center;
|
|
377
|
-
gap: 8px;
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
/* Smooth hover transition */
|
|
381
|
-
.ag-row:hover {
|
|
382
|
-
transition: background-color 150ms ease;
|
|
383
|
-
}
|
|
384
|
-
```
|
|
385
|
-
|
|
386
|
-
---
|
|
387
|
-
|
|
388
|
-
## 5. Sidebar Navigation Design Patterns
|
|
389
|
-
|
|
390
|
-
### shadcn/ui Sidebar Architecture
|
|
391
|
-
|
|
392
|
-
The shadcn sidebar component provides a battle-tested pattern:
|
|
393
|
-
|
|
394
|
-
```
|
|
395
|
-
SidebarProvider (manages state)
|
|
396
|
-
Sidebar (collapsible="icon" | "offcanvas" | "none")
|
|
397
|
-
SidebarHeader
|
|
398
|
-
Logo / App name (hidden when collapsed)
|
|
399
|
-
SidebarContent
|
|
400
|
-
SidebarGroup (label: "Navigation")
|
|
401
|
-
SidebarMenu
|
|
402
|
-
SidebarMenuItem -> SidebarMenuButton
|
|
403
|
-
SidebarGroup (label: "Management")
|
|
404
|
-
Collapsible
|
|
405
|
-
SidebarGroupLabel -> CollapsibleTrigger
|
|
406
|
-
CollapsibleContent
|
|
407
|
-
SidebarMenu -> items
|
|
408
|
-
SidebarFooter
|
|
409
|
-
User avatar / settings
|
|
410
|
-
SidebarRail (thin resize/toggle rail)
|
|
411
|
-
```
|
|
412
|
-
|
|
413
|
-
### Design Token Setup
|
|
414
|
-
|
|
415
|
-
```css
|
|
416
|
-
--sidebar-width: 16rem; /* 256px expanded */
|
|
417
|
-
--sidebar-width-mobile: 18rem; /* 288px on mobile sheet */
|
|
418
|
-
--sidebar-width-icon: 3rem; /* 48px collapsed */
|
|
419
|
-
```
|
|
420
|
-
|
|
421
|
-
### Navigation Grouping for Agent Swarm
|
|
422
|
-
|
|
423
|
-
Recommended sidebar structure:
|
|
424
|
-
|
|
425
|
-
```
|
|
426
|
-
[Icon] Agent Swarm <- Logo/app name
|
|
427
|
-
|
|
428
|
-
--- Core ---
|
|
429
|
-
Agents (Users icon)
|
|
430
|
-
Tasks (ListTodo icon)
|
|
431
|
-
Epics (Target icon)
|
|
432
|
-
Chat (MessageSquare icon)
|
|
433
|
-
|
|
434
|
-
--- System ---
|
|
435
|
-
Services (Server icon)
|
|
436
|
-
Schedules (Clock icon)
|
|
437
|
-
Repos (GitBranch icon)
|
|
438
|
-
|
|
439
|
-
--- Analytics ---
|
|
440
|
-
Usage (BarChart3 icon)
|
|
441
|
-
|
|
442
|
-
--- Bottom (footer) ---
|
|
443
|
-
Config (Settings icon)
|
|
444
|
-
Theme toggle (Sun/Moon icon)
|
|
445
|
-
```
|
|
446
|
-
|
|
447
|
-
### Collapse Behavior
|
|
448
|
-
|
|
449
|
-
1. **Desktop**: Default expanded, user can collapse to icon-only mode
|
|
450
|
-
2. **Collapsed mode**: Show only icons (24px), tooltip on hover for label
|
|
451
|
-
3. **Mobile**: Off-canvas sheet that slides in from left
|
|
452
|
-
4. **Active state**: Highlighted with accent-muted background + accent left border or indicator dot
|
|
453
|
-
5. **Persist state**: Store collapse preference in localStorage
|
|
454
|
-
|
|
455
|
-
### Active Item Styling
|
|
456
|
-
|
|
457
|
-
```css
|
|
458
|
-
/* Active nav item */
|
|
459
|
-
.nav-item-active {
|
|
460
|
-
background: oklch(0.62 0.19 264 / 12%); /* accent at 12% opacity */
|
|
461
|
-
color: oklch(0.75 0.15 264); /* lighter accent for text */
|
|
462
|
-
border-left: 2px solid oklch(0.62 0.19 264);
|
|
463
|
-
font-weight: 500;
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
/* Hover state */
|
|
467
|
-
.nav-item:hover {
|
|
468
|
-
background: oklch(1 0 0 / 5%);
|
|
469
|
-
}
|
|
470
|
-
```
|
|
471
|
-
|
|
472
|
-
---
|
|
473
|
-
|
|
474
|
-
## 6. Status Indicators and Badge Design
|
|
475
|
-
|
|
476
|
-
### Semantic Status Colors
|
|
477
|
-
|
|
478
|
-
**Source: Carbon Design System, Material Design, AIA Qi Design System, industry consensus**
|
|
479
|
-
|
|
480
|
-
For a monitoring dashboard, define status by semantic meaning, not arbitrary colors:
|
|
481
|
-
|
|
482
|
-
| Status | Color | Hex (Dark Mode) | OKLCH | Use Case |
|
|
483
|
-
|---|---|---|---|---|
|
|
484
|
-
| Success/Online/Completed | Emerald | #10b981 | oklch(0.70 0.17 162) | Healthy, done, active |
|
|
485
|
-
| Warning/Busy/In Progress | Amber | #f59e0b | oklch(0.75 0.18 80) | Attention needed |
|
|
486
|
-
| Error/Failed | Red | #ef4444 | oklch(0.63 0.21 25) | Critical, broken |
|
|
487
|
-
| Info/Reviewing | Blue | #3b82f6 | oklch(0.62 0.16 255) | Informational |
|
|
488
|
-
| Neutral/Offline/Cancelled | Gray | #71717a | oklch(0.55 0.01 270) | Inactive, disabled |
|
|
489
|
-
| Special/Offered | Violet | #8b5cf6 | oklch(0.58 0.22 293) | Queued, pending action |
|
|
490
|
-
|
|
491
|
-
### Badge Design Pattern
|
|
492
|
-
|
|
493
|
-
```tsx
|
|
494
|
-
// Minimal badge - colored dot + uppercase label
|
|
495
|
-
<span className="inline-flex items-center gap-1.5 px-2 py-0.5
|
|
496
|
-
rounded-full text-[11px] font-semibold tracking-wider uppercase
|
|
497
|
-
bg-emerald-500/15 text-emerald-400 border border-emerald-500/20">
|
|
498
|
-
<span className="size-1.5 rounded-full bg-emerald-500" />
|
|
499
|
-
Online
|
|
500
|
-
</span>
|
|
501
|
-
```
|
|
502
|
-
|
|
503
|
-
### Design Rules for Status Badges
|
|
504
|
-
|
|
505
|
-
1. **Use a colored dot + text** -- never rely on color alone (accessibility)
|
|
506
|
-
2. **Background at 10-15% opacity** of the status color -- just enough to create a "pill"
|
|
507
|
-
3. **Border at 15-20% opacity** -- adds definition without heaviness
|
|
508
|
-
4. **Text in a lighter shade** of the status color (400 weight in Tailwind scale)
|
|
509
|
-
5. **Uppercase, small, tracked** -- 11-12px, font-weight 600, letter-spacing 0.05em
|
|
510
|
-
6. **Monospace or tabular font** not needed for badges -- use the UI font
|
|
511
|
-
7. **Animated pulse only for truly active states** -- "in_progress" and "busy" only, not everything
|
|
512
|
-
|
|
513
|
-
### Dot Indicator Patterns
|
|
514
|
-
|
|
515
|
-
For compact spaces (table cells, sidebar), use dot-only indicators:
|
|
516
|
-
|
|
517
|
-
```css
|
|
518
|
-
/* Pulsing dot for active */
|
|
519
|
-
.status-dot-active {
|
|
520
|
-
width: 8px;
|
|
521
|
-
height: 8px;
|
|
522
|
-
border-radius: 50%;
|
|
523
|
-
background: #10b981;
|
|
524
|
-
box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.4);
|
|
525
|
-
animation: pulse-ring 2s ease-out infinite;
|
|
526
|
-
}
|
|
527
|
-
|
|
528
|
-
@keyframes pulse-ring {
|
|
529
|
-
0% { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.4); }
|
|
530
|
-
70% { box-shadow: 0 0 0 6px rgba(16, 185, 129, 0); }
|
|
531
|
-
100% { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0); }
|
|
532
|
-
}
|
|
533
|
-
|
|
534
|
-
/* Static dot for stable states */
|
|
535
|
-
.status-dot-static {
|
|
536
|
-
width: 8px;
|
|
537
|
-
height: 8px;
|
|
538
|
-
border-radius: 50%;
|
|
539
|
-
}
|
|
540
|
-
```
|
|
541
|
-
|
|
542
|
-
---
|
|
543
|
-
|
|
544
|
-
## 7. Card vs Table Layouts for Monitoring
|
|
545
|
-
|
|
546
|
-
### When to Use Each
|
|
547
|
-
|
|
548
|
-
| Layout | Best For | Agent Swarm Context |
|
|
549
|
-
|---|---|---|
|
|
550
|
-
| **Card grid** | Aggregate stats, KPIs, individual entity detail | Stats bar (top), agent overview cards, epic cards |
|
|
551
|
-
| **Data table** | Large lists, sortable/filterable data, homogeneous items | Tasks list, agent list (when many), services registry |
|
|
552
|
-
| **Hybrid** | Master-detail patterns | Agent list (table) + detail panel (cards) |
|
|
553
|
-
|
|
554
|
-
### Card Layout Best Practices
|
|
555
|
-
|
|
556
|
-
- **Maximum 5-6 cards** in initial viewport -- don't overwhelm
|
|
557
|
-
- **Consistent card dimensions** within a row
|
|
558
|
-
- **KPI cards**: Large number (24-32px), label below (12-13px muted), optional sparkline
|
|
559
|
-
- **Entity cards**: Title, 2-3 key properties, status badge, timestamp
|
|
560
|
-
- **Card padding**: 16-20px, border-radius 8-12px
|
|
561
|
-
- **Card hover**: Subtle border glow or slight background lighten (not scale transform)
|
|
562
|
-
|
|
563
|
-
### KPI Card Example
|
|
564
|
-
|
|
565
|
-
```tsx
|
|
566
|
-
<div className="rounded-xl bg-surface-1 border border-white/[0.08] p-5">
|
|
567
|
-
<div className="flex items-center justify-between mb-3">
|
|
568
|
-
<span className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">
|
|
569
|
-
Active Agents
|
|
570
|
-
</span>
|
|
571
|
-
<Users className="size-4 text-muted-foreground" />
|
|
572
|
-
</div>
|
|
573
|
-
<div className="text-3xl font-semibold tabular-nums">12</div>
|
|
574
|
-
<div className="mt-1 text-xs text-muted-foreground">
|
|
575
|
-
<span className="text-emerald-400">+3</span> from last hour
|
|
576
|
-
</div>
|
|
577
|
-
</div>
|
|
578
|
-
```
|
|
579
|
-
|
|
580
|
-
### Table Layout Best Practices
|
|
581
|
-
|
|
582
|
-
- **Row height**: 40-44px -- compact but not cramped
|
|
583
|
-
- **Horizontal padding**: 12-16px per cell
|
|
584
|
-
- **No visible column dividers** -- use spacing and alignment instead
|
|
585
|
-
- **Subtle row hover**: 3-5% white overlay on hover
|
|
586
|
-
- **Row alternation**: Optional, very subtle (2% white overlay)
|
|
587
|
-
- **Sticky header**: Always visible when scrolling
|
|
588
|
-
- **Truncation**: Ellipsis with tooltip for long text, never wrap table text
|
|
589
|
-
|
|
590
|
-
---
|
|
591
|
-
|
|
592
|
-
## 8. Micro-Animations and Transitions
|
|
593
|
-
|
|
594
|
-
### Timing Constants
|
|
595
|
-
|
|
596
|
-
```css
|
|
597
|
-
:root {
|
|
598
|
-
--duration-fast: 100ms; /* instant feedback (button press) */
|
|
599
|
-
--duration-normal: 200ms; /* standard transitions */
|
|
600
|
-
--duration-slow: 300ms; /* panel open/close */
|
|
601
|
-
--duration-enter: 200ms; /* elements appearing */
|
|
602
|
-
--duration-exit: 150ms; /* elements disappearing (faster = snappier) */
|
|
603
|
-
|
|
604
|
-
--ease-default: cubic-bezier(0.4, 0, 0.2, 1); /* general purpose */
|
|
605
|
-
--ease-in: cubic-bezier(0.4, 0, 1, 1); /* accelerate */
|
|
606
|
-
--ease-out: cubic-bezier(0, 0, 0.2, 1); /* decelerate */
|
|
607
|
-
--ease-spring: cubic-bezier(0.175, 0.885, 0.32, 1.275); /* bouncy */
|
|
608
|
-
}
|
|
609
|
-
```
|
|
610
|
-
|
|
611
|
-
### Where to Animate (and Where NOT to)
|
|
612
|
-
|
|
613
|
-
**Do animate:**
|
|
614
|
-
- Sidebar collapse/expand (width transition, 200ms)
|
|
615
|
-
- Panel slide-in (transform translateX, 200ms ease-out)
|
|
616
|
-
- Tab content switch (opacity fade, 150ms)
|
|
617
|
-
- Hover states (background-color, 150ms)
|
|
618
|
-
- Status dot pulse (only for active states, 2s infinite)
|
|
619
|
-
- Toast/notification entrance (slide up + fade, 200ms)
|
|
620
|
-
- Skeleton loading pulse (1.5s infinite)
|
|
621
|
-
- Row hover highlight (background-color, 100ms)
|
|
622
|
-
|
|
623
|
-
**Do NOT animate:**
|
|
624
|
-
- Table data updates (just swap, no fade)
|
|
625
|
-
- Badge color changes (instant)
|
|
626
|
-
- Large layout shifts
|
|
627
|
-
- Anything during initial page load (except skeleton)
|
|
628
|
-
- Multiple animations simultaneously
|
|
629
|
-
- Anything that fires more than once per second
|
|
630
|
-
|
|
631
|
-
### Key Animation Patterns
|
|
632
|
-
|
|
633
|
-
**Fade in on mount:**
|
|
634
|
-
```css
|
|
635
|
-
@keyframes fade-in {
|
|
636
|
-
from { opacity: 0; transform: translateY(4px); }
|
|
637
|
-
to { opacity: 1; transform: translateY(0); }
|
|
638
|
-
}
|
|
639
|
-
.animate-in {
|
|
640
|
-
animation: fade-in 200ms ease-out;
|
|
641
|
-
}
|
|
642
|
-
```
|
|
643
|
-
|
|
644
|
-
**Skeleton loading:**
|
|
645
|
-
```css
|
|
646
|
-
@keyframes shimmer {
|
|
647
|
-
0% { background-position: -200% 0; }
|
|
648
|
-
100% { background-position: 200% 0; }
|
|
649
|
-
}
|
|
650
|
-
.skeleton {
|
|
651
|
-
background: linear-gradient(90deg,
|
|
652
|
-
oklch(0.21 0 0) 25%,
|
|
653
|
-
oklch(0.26 0 0) 50%,
|
|
654
|
-
oklch(0.21 0 0) 75%
|
|
655
|
-
);
|
|
656
|
-
background-size: 200% 100%;
|
|
657
|
-
animation: shimmer 1.5s ease-in-out infinite;
|
|
658
|
-
border-radius: 4px;
|
|
659
|
-
}
|
|
660
|
-
```
|
|
661
|
-
|
|
662
|
-
**Sidebar collapse:**
|
|
663
|
-
```css
|
|
664
|
-
.sidebar {
|
|
665
|
-
width: var(--sidebar-width);
|
|
666
|
-
transition: width var(--duration-slow) var(--ease-default);
|
|
667
|
-
overflow: hidden;
|
|
668
|
-
}
|
|
669
|
-
.sidebar[data-collapsed="true"] {
|
|
670
|
-
width: var(--sidebar-width-icon);
|
|
671
|
-
}
|
|
672
|
-
```
|
|
673
|
-
|
|
674
|
-
### Accessibility: Respect prefers-reduced-motion
|
|
675
|
-
|
|
676
|
-
```css
|
|
677
|
-
@media (prefers-reduced-motion: reduce) {
|
|
678
|
-
*, *::before, *::after {
|
|
679
|
-
animation-duration: 0.01ms !important;
|
|
680
|
-
animation-iteration-count: 1 !important;
|
|
681
|
-
transition-duration: 0.01ms !important;
|
|
682
|
-
scroll-behavior: auto !important;
|
|
683
|
-
}
|
|
684
|
-
}
|
|
685
|
-
```
|
|
686
|
-
|
|
687
|
-
---
|
|
688
|
-
|
|
689
|
-
## 9. Reference Dashboards and Design Systems
|
|
690
|
-
|
|
691
|
-
### Linear
|
|
692
|
-
|
|
693
|
-
- **Color approach**: Near-monochrome (neutral blacks/whites) with very few bold accent colors. Migrated to LCH color space. Significantly reduced color usage compared to earlier versions.
|
|
694
|
-
- **Typography**: Inter Display for headings, regular Inter for body.
|
|
695
|
-
- **Sidebar**: Inverted L-shape. Tight alignment of labels, icons, buttons. Density-focused with reduced visual noise.
|
|
696
|
-
- **Layout**: Structured layouts with headers for filters, side panels for meta properties, multiple display types (list, board, timeline, split, fullscreen).
|
|
697
|
-
- **Design philosophy**: "Neutral and timeless appearance." Make text and icons darker in light mode, lighter in dark mode for improved contrast.
|
|
698
|
-
|
|
699
|
-
### Vercel (Geist Design System)
|
|
700
|
-
|
|
701
|
-
- **Color system**: 10 color scales using OKLCH/P3 with numeric steps (100-1000). Two background colors (Background-1 for page, Background-2 for differentiation).
|
|
702
|
-
- **Component colors**: Color-1 (default), Color-2 (hover), Color-3 (active).
|
|
703
|
-
- **Typography**: Geist Sans + Geist Mono.
|
|
704
|
-
- **Key principle**: Minimal color, maximum clarity. Black/white are the primary colors, with accent used very sparingly.
|
|
705
|
-
- **URL**: https://vercel.com/geist
|
|
706
|
-
|
|
707
|
-
### Cal.com
|
|
708
|
-
|
|
709
|
-
- **Design tokens** in CSS variables:
|
|
710
|
-
- Dark mode: `--cal-bg: #101010`, `--cal-bg-emphasis: #2b2b2b`, `--cal-bg-subtle: #1c1c1c`, `--cal-bg-muted: #141414`
|
|
711
|
-
- Light mode: `--cal-bg: white`, `--cal-bg-emphasis: #e5e7eb`, `--cal-bg-subtle: #f3f4f6`, `--cal-bg-muted: #f9fafb`
|
|
712
|
-
- **Approach**: Clean, functional, minimal decoration
|
|
713
|
-
|
|
714
|
-
### Raycast
|
|
715
|
-
|
|
716
|
-
- **Known for**: Extreme polish, smooth animations, keyboard-first UX
|
|
717
|
-
- **Color**: Muted backgrounds, vibrant icons, high contrast text
|
|
718
|
-
- **Design system**: Connected to Supernova.io for token management
|
|
719
|
-
|
|
720
|
-
### PatternFly (Red Hat)
|
|
721
|
-
|
|
722
|
-
- **Dashboard patterns**: Comprehensive documentation on card-based dashboard layouts
|
|
723
|
-
- **Status indicators**: Well-documented severity levels and aggregate status patterns
|
|
724
|
-
- **Layout**: Dashboard with cards for KPIs, lists for detail, consistent spacing
|
|
725
|
-
|
|
726
|
-
---
|
|
727
|
-
|
|
728
|
-
## 10. Concrete Recommendations for Agent Swarm
|
|
729
|
-
|
|
730
|
-
### Migration Path
|
|
731
|
-
|
|
732
|
-
The current UI uses MUI Joy + custom amber CSS variables. A migration to shadcn/ui + Tailwind v4 would be a significant rewrite. Here is what I recommend for either approach:
|
|
733
|
-
|
|
734
|
-
### If Staying with MUI Joy (Evolution)
|
|
735
|
-
|
|
736
|
-
1. **Replace the amber palette** with the cool neutral + indigo/teal accent proposed above
|
|
737
|
-
2. **Drop the honeycomb background pattern** -- decorative patterns fight against data-dense UIs
|
|
738
|
-
3. **Drop the glow effects** -- they scream "template", not "production tool"
|
|
739
|
-
4. **Switch to Inter** from Space Grotesk
|
|
740
|
-
5. **Simplify the StatusBadge** -- remove the "pulse-amber" animation from non-active states
|
|
741
|
-
6. **Add a proper sidebar** instead of tab-based navigation
|
|
742
|
-
|
|
743
|
-
### If Migrating to shadcn/ui + Tailwind v4 (Recommended)
|
|
744
|
-
|
|
745
|
-
1. **Use shadcn/ui default dark theme as the base** with OKLCH colors (listed in section 3)
|
|
746
|
-
2. **Customize the accent** to indigo or teal
|
|
747
|
-
3. **Use the shadcn Sidebar component** for navigation
|
|
748
|
-
4. **Use shadcn DataTable** (TanStack Table) instead of AG Grid for most tables, or theme AG Grid to match (section 4)
|
|
749
|
-
5. **Adopt the three-layer token hierarchy** for maintainability
|
|
750
|
-
6. **Inter + JetBrains Mono** font pairing
|
|
751
|
-
7. **Follow the animation timing** in section 8
|
|
752
|
-
8. **Use shadcn Badge** for status indicators with the semantic colors in section 6
|
|
753
|
-
|
|
754
|
-
### Top Priority Visual Changes
|
|
755
|
-
|
|
756
|
-
Regardless of framework choice:
|
|
757
|
-
|
|
758
|
-
1. **Kill the amber/honey/gold theme** -- replace with neutral darks + semantic accents
|
|
759
|
-
2. **Remove honeycomb SVG background** -- clean, flat surfaces
|
|
760
|
-
3. **Remove glow effects** on text and boxes
|
|
761
|
-
4. **Move from horizontal tabs to sidebar navigation** -- tabs don't scale with 9+ sections
|
|
762
|
-
5. **Adopt Inter** -- the dashboard standard for a reason
|
|
763
|
-
6. **Standardize status colors** to emerald/amber/red/gray/violet (not all amber variations)
|
|
764
|
-
7. **Reduce border opacity** -- current #3a2d1f borders are too visible; use 6-10% white overlay instead
|
|
765
|
-
|
|
766
|
-
### CSS Variables Migration
|
|
767
|
-
|
|
768
|
-
From current:
|
|
769
|
-
```css
|
|
770
|
-
:root {
|
|
771
|
-
--hive-amber: #f5a623;
|
|
772
|
-
--hive-honey: #ffb84d;
|
|
773
|
-
--hive-gold: #d4a574;
|
|
774
|
-
--hive-body: #0d0906;
|
|
775
|
-
--hive-surface: #1a130e;
|
|
776
|
-
--hive-border: #3a2d1f;
|
|
777
|
-
}
|
|
778
|
-
```
|
|
779
|
-
|
|
780
|
-
To proposed:
|
|
781
|
-
```css
|
|
782
|
-
.dark {
|
|
783
|
-
--background: oklch(0.13 0.005 270);
|
|
784
|
-
--foreground: oklch(0.985 0 0);
|
|
785
|
-
--surface: oklch(0.175 0.005 270);
|
|
786
|
-
--surface-elevated: oklch(0.21 0.006 270);
|
|
787
|
-
--border: oklch(1 0 0 / 8%);
|
|
788
|
-
--accent: oklch(0.62 0.19 264);
|
|
789
|
-
--accent-muted: oklch(0.62 0.19 264 / 15%);
|
|
790
|
-
--muted-foreground: oklch(0.55 0.01 270);
|
|
791
|
-
}
|
|
792
|
-
```
|
|
793
|
-
|
|
794
|
-
---
|
|
795
|
-
|
|
796
|
-
## Sources
|
|
797
|
-
|
|
798
|
-
### Design Systems and Official Documentation
|
|
799
|
-
- [shadcn/ui Theming](https://ui.shadcn.com/docs/theming) - OKLCH variables, dark theme defaults
|
|
800
|
-
- [shadcn/ui Sidebar](https://ui.shadcn.com/docs/components/radix/sidebar) - Sidebar component architecture
|
|
801
|
-
- [Vercel Geist Design System](https://vercel.com/geist) - Color system, typography
|
|
802
|
-
- [Vercel Geist Colors](https://vercel.com/geist/colors) - 10 color scales
|
|
803
|
-
- [AG Grid Theming Colors](https://www.ag-grid.com/javascript-data-grid/theming-colors/) - Dark mode theming API
|
|
804
|
-
- [AG Grid Built-in Themes](https://www.ag-grid.com/javascript-data-grid/themes/) - Theme builder
|
|
805
|
-
- [Material Design Dark Theme](https://m2.material.io/design/color/dark-theme.html) - Elevation overlay system
|
|
806
|
-
- [Material Design 3 Color Roles](https://m3.material.io/styles/color/roles) - Semantic color system
|
|
807
|
-
- [Carbon Design System Status Indicators](https://carbondesignsystem.com/patterns/status-indicator-pattern/) - Status patterns
|
|
808
|
-
- [Tailwind CSS Colors](https://tailwindcss.com/docs/colors) - Color palette reference
|
|
809
|
-
- [Tailwind CSS Dark Mode](https://tailwindcss.com/docs/dark-mode) - v4 dark mode approach
|
|
810
|
-
- [Cal.com Instance Theming](https://cal.com/docs/enterprise-features/instance-wide-theming) - CSS variable tokens
|
|
811
|
-
|
|
812
|
-
### Design Articles and Guides
|
|
813
|
-
- [Linear UI Redesign](https://linear.app/now/how-we-redesigned-the-linear-ui) - LCH migration, design philosophy
|
|
814
|
-
- [Design Tokens That Scale with Tailwind v4](https://www.maviklabs.com/blog/design-tokens-tailwind-v4-2026) - Three-layer token hierarchy
|
|
815
|
-
- [Scalable Accessible Dark Mode](https://www.fourzerothree.in/p/scalable-accessible-dark-mode) - Dark theme implementation
|
|
816
|
-
- [Dark Mode Design Best Practices 2026](https://www.tech-rz.com/blog/dark-mode-design-best-practices-in-2026/) - Layered darkness
|
|
817
|
-
- [Dashboard Design Principles 2025](https://www.uxpin.com/studio/blog/dashboard-design-principles/) - UX patterns
|
|
818
|
-
- [CSS/JS Animation Trends 2026](https://webpeak.org/blog/css-js-animation-trends/) - Micro-interactions
|
|
819
|
-
- [Best Fonts for Dense Dashboards](https://fontalternatives.com/blog/best-fonts-dense-dashboards/) - Typography
|
|
820
|
-
- [Sidebar Navigation Examples 2025](https://www.navbar.gallery/blog/best-side-bar-navigation-menu-design-examples) - Sidebar patterns
|
|
821
|
-
|
|
822
|
-
### Tools
|
|
823
|
-
- [OKLCH Color Picker](https://oklch.fyi/) - OKLCH converter and generator
|
|
824
|
-
- [OKLCH Palette Generator](https://oklch-palette.vercel.app/) - Palette generation
|
|
825
|
-
- [Data Viz Color Picker](https://www.learnui.design/tools/data-color-picker.html) - Chart palette generator
|