Skip to content

Fixes#335

Merged
BillChirico merged 1 commit intomainfrom
claude/redesign-dashboard-ui-E8zzE
Mar 20, 2026
Merged

Fixes#335
BillChirico merged 1 commit intomainfrom
claude/redesign-dashboard-ui-E8zzE

Conversation

@BillChirico
Copy link
Copy Markdown
Collaborator

This pull request introduces several improvements and updates across the codebase, focusing on enhanced test coverage, dependency updates, and workflow refinements. The most significant changes include new and expanded test cases for core modules and commands, updates to key dependencies (notably turbo, next, and tailwindcss), and an improved GitHub Actions workflow for code review automation.

Testing improvements:

  • Added comprehensive tests for the registerComponentHandlers logic in interactionCreate to ensure handlers are called and errors are logged as expected (tests/modules/events/interactionCreate.test.js).
  • Expanded tests for the warn command to verify default severity behavior, and for the welcome command to cover posting onboarding panels when channels are valid (tests/commands/warn.test.js, tests/commands/welcome.test.js) [1] [2].
  • Added a test to ensure welcome handling is skipped when the feature is disabled in the configuration (tests/modules/events.test.js).
  • Introduced tests for prompt template loading and error handling in the prompts module (tests/prompts/index.test.js).

Dependency and toolchain updates:

  • Upgraded turbo from version 2.8.19 to 2.8.20 in package.json and all corresponding lockfile entries (pnpm-lock.yaml) [1] [2] [3] [4] [5] [6].
  • Updated next from 16.1.7 to 16.2.0 and tailwindcss (and @tailwindcss/postcss) from 4.2.1 to 4.2.2 in the web app lockfile (web/pnpm-lock.yaml) [1] [2] [3].
  • Updated the Biome schema version in biome.json from 2.4.7 to 2.4.8.

Workflow and documentation:

  • Refined the GitHub Actions workflow in .github/workflows/claude-review.yml to trigger on pull request review comments and reviews mentioning @claude, and to ignore bot users, improving automation and reducing noise.
  • Removed the migrations/README.md file, as it is no longer needed or relevant.

These changes collectively improve the project's reliability, maintainability, and developer experience.

@chatgpt-codex-connector
Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@railway-app railway-app Bot temporarily deployed to volvox-bot / volvox-bot-pr-335 March 20, 2026 02:37 Destroyed
@railway-app
Copy link
Copy Markdown

railway-app Bot commented Mar 20, 2026

🚅 Deployed to the volvox-bot-pr-335 environment in volvox-bot

Service Status Web Updated (UTC)
bot 🕗 Deploying (View Logs) Web Mar 20, 2026 at 2:42 am
web ✅ Success (View Logs) Mar 20, 2026 at 2:42 am
docs ✅ Success (View Logs) Web Mar 20, 2026 at 2:42 am

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Mar 20, 2026

Warning

Rate limit exceeded

@BillChirico has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 15 minutes and 15 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 1139f701-bf30-4430-993b-e437975c35bc

📥 Commits

Reviewing files that changed from the base of the PR and between 79acfb4 and d038feb.

📒 Files selected for processing (5)
  • tests/commands/warn.test.js
  • tests/commands/welcome.test.js
  • tests/modules/events.test.js
  • tests/modules/events/interactionCreate.test.js
  • tests/prompts/index.test.js
📝 Walkthrough

Walkthrough

This PR encompasses comprehensive updates across configuration, testing, and web dashboard UI. Changes include enabling Claude AI review in workflows, adding test cases for commands and event handlers, refactoring dashboard layout components, introducing CSS styling enhancements with new utility classes and animations, reorganizing UI component exports, and removing migration documentation.

Changes

Cohort / File(s) Summary
Configuration & Tooling
.github/workflows/claude-review.yml, .gitignore, biome.json, package.json, migrations/README.md
Updated Claude review workflow to trigger on PR review comments/reviews with @claude mention filtering; added macOS .DS_Store to gitignore; bumped Biome schema version and Turbo dependency; removed migration command documentation.
Test Suite - Commands & Events
tests/commands/warn.test.js, tests/commands/welcome.test.js, tests/modules/events.test.js, tests/modules/events/interactionCreate.test.js
Added test cases for warn command with missing severity option defaulting to 'low'; extended welcome command tests with mock discord cache and panel post verification; added event handler tests for welcome disabled config and interaction dispatch short-circuiting with error logging.
Test Suite - Prompts & Config
tests/prompts/index.test.js, web/tests/next.config.test.ts, web/tests/stores/members-store.test.ts
Added prompt loading tests with template interpolation and error handling; updated Next.js config test to import from .mjs and added SecurityHeader type for header validation; refactored promise rejection handling in members store test.
Dashboard Layout & Structure
web/src/app/dashboard/conversations/conversations-client.tsx, web/src/app/dashboard/members/members-client.tsx, web/src/app/dashboard/moderation/moderation-client.tsx, web/src/components/layout/dashboard-shell.tsx, web/src/components/layout/sidebar.tsx
Restructured PageHeader and EmptyState positioning as proper siblings; moved refresh actions from empty states to top-level PageHeader; adjusted sidebar width, padding, and styling with scrollbar-thin; updated nav item active indicators and "Command Deck" header with icon/gradient styling.
Dashboard Header & Page Components
web/src/components/dashboard/page-header.tsx, web/src/components/dashboard/analytics-dashboard.tsx, web/src/components/dashboard/health-cards.tsx
Reduced accent bar width and added shimmer background; enhanced icon container styling; updated KPI cards with kpi-card class and staggered fade-in animations; added gradient progress bars for memory/CPU metrics with color-coded ping status badges.
Dashboard Config & Workspace
web/src/components/dashboard/config-categories/config-landing.tsx, web/src/components/dashboard/config-layout-shell.tsx, web/src/components/dashboard/config-sections/CommunitySettingsSection.tsx, web/src/components/dashboard/config-workspace/category-navigation.tsx, web/src/components/dashboard/config-workspace/settings-feature-card.tsx
Added per-category gradient styling constants and "Configure" affordance; refactored card layouts replacing Card components with settings-card utility; enhanced category navigation with active icon tints and sidebar-item-active class; added "Active" badge rendering with data-enabled attribute logic; updated rotation interval computation logic.
Dashboard Data & Utilities
web/src/components/dashboard/config-workspace/config-categories.ts, web/src/components/dashboard/types.ts
Reformatted community-tools sectionKeys array to single-line; refactored validateBotHealth CPU field type-check with parentheses for clarity.
Global Styling & CSS
web/src/app/globals.css
Introduced neon palette variables (--neon-green, --neon-purple, --neon-cyan, --neon-orange), new utility classes (glow-card, kpi-card, status-dot-live, sidebar-item-active, text-gradient-primary, border-gradient-animated), backdrop-filter/blur support across components, staggered animations, and reduced-motion media query rules.
UI Component Library - Base Components
web/src/components/ui/avatar.tsx, web/src/components/ui/card.tsx, web/src/components/ui/command.tsx, web/src/components/ui/form.tsx, web/src/components/ui/popover.tsx, web/src/components/ui/sheet.tsx, web/src/components/ui/table.tsx
Reordered named exports for alphabetical or logical grouping; no functional changes to component implementations.
UI Component Library - Dropdowns & Menus
web/src/components/ui/channel-selector.tsx, web/src/components/ui/dropdown-menu.tsx, web/src/components/ui/error-boundary.tsx
Reordered export statements; moved logger import to earlier position in error-boundary.
Hooks
web/src/hooks/use-glow-card.ts
Added new useGlowCard hook that installs global pointermove listener, throttles updates via requestAnimationFrame, and updates CSS custom properties for glow card mouse position tracking.
Landing & Web Pages
web/src/components/landing/FeatureGrid.tsx, web/src/components/landing/Footer.tsx, web/src/app/page.tsx
Reformatted JSX declarations to single-line elements; updated string quoting from single to double quotes in className props.
Next.js Configuration
web/next-env.d.ts, web/src/app/api/guilds/[guildId]/members/[userId]/xp/route.ts
Updated Next.js route types reference from dev-specific to general build output directory; simplified XP validation response formatting to single-line NextResponse.json() call.
Miscellaneous Dashboard
web/src/components/layout/header.tsx, web/src/components/dashboard/log-viewer.tsx, web/src/components/dashboard/performance-dashboard.tsx
Replaced CircleDot icon with status-dot-live span; adjusted header border/backdrop styling and logo shadow; multi-lined expand indicator span; reordered toast import.

Possibly related PRs

🚥 Pre-merge checks | ✅ 1 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 38.24% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The title 'Fixes' is vague and generic, using a non-descriptive term that doesn't convey meaningful information about the specific changes in this large, multi-faceted changeset. Consider a more descriptive title that captures the primary change, such as 'Add test coverage, update dependencies, and refine review workflow' or similar.
✅ Passed checks (1 passed)
Check name Status Explanation
Description check ✅ Passed The description is well-detailed and directly relates to the changeset, covering testing improvements, dependency updates, and workflow refinements across multiple files.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/redesign-dashboard-ui-E8zzE
  • 🛠️ Publish Changes: Commit on current branch
  • 🛠️ Publish Changes: Create PR
📝 Coding Plan
  • Generate coding plan for human review comments

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@BillChirico BillChirico force-pushed the claude/redesign-dashboard-ui-E8zzE branch from 79acfb4 to e680453 Compare March 20, 2026 02:40
@railway-app railway-app Bot temporarily deployed to volvox-bot / volvox-bot-pr-335 March 20, 2026 02:40 Destroyed
@BillChirico BillChirico force-pushed the claude/redesign-dashboard-ui-E8zzE branch from e680453 to d038feb Compare March 20, 2026 02:41
@railway-app railway-app Bot temporarily deployed to volvox-bot / volvox-bot-pr-335 March 20, 2026 02:41 Destroyed
@sonarqubecloud
Copy link
Copy Markdown

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates both the bot and web dashboard with expanded test coverage, UI refinements (new card/gradient styling and layout tweaks), dependency bumps (notably Turbo/Next/Tailwind/Biome), and a refined Claude review workflow trigger.

Changes:

  • Add/extend Vitest coverage for prompts, event dispatching, and key commands (warn/welcome).
  • Refresh dashboard UI styling (new glow/KPI card patterns, navigation polish) and minor config editor UX tweaks.
  • Update tooling/dependencies and automation (Turbo/Next/Tailwind lockfiles, Biome schema, Claude review workflow triggers).

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
web/tests/stores/members-store.test.ts Fixes stale-request error test plumbing by capturing the reject callback directly.
web/tests/next.config.test.ts Updates Next config import path and adds a typed header shape in the test.
web/src/hooks/use-glow-card.ts Adds a client hook to drive CSS glow effects via pointer position.
web/src/components/ui/table.tsx Reorders exports (no functional change).
web/src/components/ui/sheet.tsx Reorders exports (no functional change).
web/src/components/ui/popover.tsx Reorders exports (no functional change).
web/src/components/ui/form.tsx Reorders exports (no functional change).
web/src/components/ui/error-boundary.tsx Adjusts import ordering (no functional change).
web/src/components/ui/dropdown-menu.tsx Reorders exports (no functional change).
web/src/components/ui/command.tsx Reorders exports (no functional change).
web/src/components/ui/channel-selector.tsx Adjusts export ordering (no functional change).
web/src/components/ui/card.tsx Reorders exports (no functional change).
web/src/components/ui/avatar.tsx Reorders exports (no functional change).
web/src/components/layout/sidebar.tsx Sidebar UI refresh: active state, indicators, and call-to-action styling.
web/src/components/layout/server-selector.tsx Minor formatting/markup tightening for dropdown label.
web/src/components/layout/header.tsx Header UI refresh (logo mark, status indicator, user menu styling).
web/src/components/layout/dashboard-shell.tsx Adjusts sidebar width and adds thin scrollbar styling.
web/src/components/landing/Footer.tsx Normalizes JSX attribute quoting.
web/src/components/landing/FeatureGrid.tsx Collapses simple JSX blocks (formatting-only change).
web/src/components/dashboard/types.ts Formats multi-condition validation for readability.
web/src/components/dashboard/performance-dashboard.tsx Import ordering adjustment for toast.
web/src/components/dashboard/page-header.tsx Enhances header visuals (accent bar, shimmer, action container styling).
web/src/components/dashboard/log-viewer.tsx Splits a long line for readability (no functional change).
web/src/components/dashboard/health-cards.tsx KPI card styling enhancements and ping badge background helper.
web/src/components/dashboard/config-workspace/settings-feature-card.tsx Reworks feature card markup/styling; adds enabled-state affordances.
web/src/components/dashboard/config-workspace/config-categories.ts Condenses sectionKeys array formatting.
web/src/components/dashboard/config-workspace/category-navigation.tsx Adds per-category icon tint styling + nav UI polish.
web/src/components/dashboard/config-sections/CommunitySettingsSection.tsx Simplifies bot status rotation defaulting logic and formatting.
web/src/components/dashboard/config-layout-shell.tsx Config editor top bar and status banner UX updates + styling tweaks.
web/src/components/dashboard/config-categories/config-landing.tsx Redesigns category landing cards with gradients and “Configure” affordance.
web/src/components/dashboard/analytics-dashboard.tsx Applies KPI/glow card styling and wires useGlowCard() for hover glow behavior.
web/src/app/page.tsx Normalizes JSX attribute quoting in the landing page SVG.
web/src/app/globals.css Adds new design tokens/utilities (glow/KPI/status/sidebar/settings cards, gradients, scrollbars).
web/src/app/dashboard/moderation/moderation-client.tsx Refactors header/empty-state rendering and improves section layout styling.
web/src/app/dashboard/members/members-client.tsx Refactors header/empty-state rendering; reorganizes error placement and layout.
web/src/app/dashboard/conversations/conversations-client.tsx Refactors header/empty-state rendering; reorganizes filters/table/error blocks.
web/src/app/api/guilds/[guildId]/members/[userId]/xp/route.ts Collapses a JSON error response to a single line (no behavior change).
web/pnpm-lock.yaml Bumps web lockfile deps (Next 16.2.0, Tailwind 4.2.2, etc.).
web/next-env.d.ts Updates the generated routes types import path under .next/.
tests/prompts/index.test.js Adds prompt loading/path tests (with cache reset).
tests/modules/events/interactionCreate.test.js Adds tests for interaction handler dispatch short-circuiting and error logging.
tests/modules/events.test.js Adds regression test to skip welcome handling when welcome feature is disabled.
tests/commands/welcome.test.js Adds onboarding panel posting coverage when configured channels are valid.
tests/commands/warn.test.js Adds coverage ensuring default severity is low when omitted.
pnpm-lock.yaml Bumps workspace lockfile Turbo entries to 2.8.20.
package.json Bumps Turbo to ^2.8.20.
migrations/README.md Removes migrations documentation file.
biome.json Updates Biome schema version to 2.4.8.
.gitignore Ignores .DS_Store.
.github/workflows/claude-review.yml Enables workflow triggers on review/review-comment mentions of @claude, with bot-user filtering.

expect(disk.length).toBeGreaterThan(0);
});
});
;
Copy link

Copilot AI Mar 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is an extra standalone semicolon at the end of the file. This is a no-op but commonly triggers “no extra semicolons”/formatting rules and adds noise in diffs; removing it keeps the test file clean.

Suggested change
;

Copilot uses AI. Check for mistakes.
@BillChirico BillChirico merged commit 4f00fc6 into main Mar 20, 2026
15 of 19 checks passed
@BillChirico BillChirico deleted the claude/redesign-dashboard-ui-E8zzE branch March 20, 2026 02:42
@github-project-automation github-project-automation Bot moved this from Backlog to Done in Volvox.Bot Mar 20, 2026
@github-actions
Copy link
Copy Markdown
Contributor

🧹 Preview Environment Cleaned Up

The Railway preview environment for this PR has been removed.

Environment: pr-335

@greptile-apps
Copy link
Copy Markdown

greptile-apps Bot commented Mar 20, 2026

Greptile Summary

This PR adds test coverage across four previously under-tested areas of the codebase — the warn default-severity path, the welcome setup happy path, the registerGuildMemberAddHandler feature-gate, and the registerComponentHandlers dispatch loop — all of which have corresponding real production logic that these tests correctly exercise.

Key observations:

  • tests/modules/events/interactionCreate.test.js correctly uses vi.hoisted + vi.mock to intercept the module-level handlers array before it is initialized, which is the right pattern for testing modules that capture imports at load time.
  • tests/prompts/index.test.js is integration-style (reads real .md files from disk). All three interpolation variables tested (communityRules, conversationText, botUserId) are confirmed present in triage-classify.md, so the assertions are valid.
  • tests/modules/events.test.js — the new welcome.enabled: false gate test correctly mirrors the if (!guildConfig.welcome?.enabled) return guard in src/modules/events/guildMemberAdd.js.
  • A stray semicolon at the end of tests/prompts/index.test.js should be removed.
  • The safeSend assertions in tests/commands/welcome.test.js assert against the exact mock-returned shapes; switching to expect.objectContaining(...) would make them more resilient to mock refactors.
  • The early-exit test in tests/modules/events/interactionCreate.test.js could assert all remaining downstream handlers are skipped for a more complete dispatch-chain contract.

Confidence Score: 4/5

  • This PR is safe to merge — it adds only test files with no changes to production logic.
  • All five files are test-only additions. The mock wiring is technically sound, the assertions match the real source behavior, and no production code is modified. Minor style improvements (stray semicolon, objectContaining) prevent a perfect 5.
  • tests/prompts/index.test.js (stray trailing semicolon) and tests/commands/welcome.test.js (brittle exact-shape assertions on safeSend calls).

Important Files Changed

Filename Overview
tests/commands/warn.test.js Adds a single test verifying that the severity option defaults to 'low' when omitted. The test correctly overrides getString to return null for 'severity', mirrors the real command logic, and asserts against createWarning's call arguments.
tests/commands/welcome.test.js Adds a new test covering the full happy path of the /welcome setup command (both panels posted). Mock wiring is correct; minor issue: safeSend assertions use exact mock shapes instead of objectContaining, making them fragile if mock defaults change.
tests/modules/events.test.js Adds one test to verify that welcome handling is skipped when welcome.enabled is false. Aligns correctly with the gate in guildMemberAdd.js (line 21: if (!guildConfig.welcome?.enabled) return).
tests/modules/events/interactionCreate.test.js New test file for registerComponentHandlers dispatch loop. Correctly uses vi.hoisted + vi.mock to intercept module-level handler references. Two tests cover the early-exit-on-handled and abort-on-error paths; the early-exit test could assert all downstream handlers are skipped for a more complete contract.
tests/prompts/index.test.js New test file for the prompt loader. Integration-style tests read actual .md files from disk; all three placeholder variables (communityRules, conversationText, botUserId) are confirmed present in triage-classify.md. One minor issue: a stray trailing semicolon on the final line of the file.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[InteractionCreate event fires] --> B[Iterate handlers array]
    B --> C{Call handler_n\ninteraction}
    C -->|throws| D[logError with handler name\ncustomId, error message]
    D --> E[return — abort dispatch]
    C -->|returns true\nhandled| F[return — stop chain]
    C -->|returns false\nnot handled| G{More handlers?}
    G -->|yes| C
    G -->|no| H[All handlers exhausted\nno-op]

    subgraph handlers_array [handlers array — module scope]
        direction LR
        H1[handlePollButton]
        H2[handleChallengeButton]
        H3[handleReviewButton]
        H4[handleShowcaseButton]
        H5[handleShowcaseModal]
        H6[handleTicketOpenButton]
        H7[handleTicketModal]
        H8[handleTicketCloseButton]
        H9[handleReminderButton]
        H10[handleWelcomeOnboarding]
    end
Loading
Prompt To Fix All With AI
This is a comment left during a code review.
Path: tests/prompts/index.test.js
Line: 38

Comment:
**Stray trailing semicolon**

There is a lone `;` after the closing `});` of the `describe` block. This is a no-op statement and is almost certainly a copy-paste typo. It should be removed to keep the file clean and avoid Biome linting warnings.

```suggestion
});
```

How can I resolve this? If you propose a fix, please make it concise.

---

This is a comment left during a code review.
Path: tests/commands/welcome.test.js
Line: 128-129

Comment:
**Assertions test mock contract, not real message shape**

Both assertions check that `safeSend` is called with exactly `{ content: 'rules' }` and `{ content: 'roles' }`. These shapes come from the mocks of `buildRulesAgreementMessage` / `buildRoleMenuMessage`, not from the real implementations. The real functions return richer objects containing `components: [row]` as well.

If the intent is to verify that the correct channel and message object get forwarded (i.e. that the result of the builder is passed through unchanged), using `expect.objectContaining({ content: 'rules' })` would make the test resilient to changes in the mock contract while still capturing the intent:

```suggestion
    expect(safeSend).toHaveBeenNthCalledWith(1, rulesChannel, expect.objectContaining({ content: 'rules' }));
    expect(safeSend).toHaveBeenNthCalledWith(2, welcomeChannel, expect.objectContaining({ content: 'roles' }));
```

How can I resolve this? If you propose a fix, please make it concise.

---

This is a comment left during a code review.
Path: tests/modules/events/interactionCreate.test.js
Line: 62-80

Comment:
**Test verifies early-exit but doesn't assert all skipped handlers**

The test confirms that `handleReviewButton` (the third handler) is not called once `handleChallengeButton` returns `true`, but it doesn't assert that the remaining handlers (`handleShowcaseButton`, `handleShowcaseModal`, `handleTicketOpenButton`, etc.) are also skipped. If the dispatch loop ever gains a `continue` instead of `return`, downstream handlers would still fire unexpectedly.

Consider adding assertions for the remaining handlers to make the contract explicit:
```js
expect(handleShowcaseButton).not.toHaveBeenCalled();
expect(handleTicketOpenButton).not.toHaveBeenCalled();
expect(handleReminderButton).not.toHaveBeenCalled();
```

How can I resolve this? If you propose a fix, please make it concise.

Last reviewed commit: "test: raise coverage..."

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants