Skip to content

Feat/tactical telemetry redesign - #61

Merged
nazarli-shabnam merged 15 commits into
mainfrom
feat/tactical-telemetry-redesign
Jul 12, 2026
Merged

Feat/tactical telemetry redesign#61
nazarli-shabnam merged 15 commits into
mainfrom
feat/tactical-telemetry-redesign

Conversation

@nazarli-shabnam

@nazarli-shabnam nazarli-shabnam commented Jun 15, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

  • New Features
    • Refreshed the visual system: updated typography, motion/easing tokens, square-corner styling, and added background noise overlay.
    • Updated telemetry-style page headers and stat/label typography, plus staggered list entrance animations.
  • Bug Fixes
    • Improved reduced-motion behavior (suppresses animations/overlays) and refined key UI transitions.
    • Standardized iconography and status indicators (loading, warnings/errors, empty states), along with updated rounding across common UI components.
  • Tests
    • Updated PageHeader assertions to match the new header structure and text layout.

@nazarli-shabnam nazarli-shabnam self-assigned this Jun 15, 2026
@nazarli-shabnam nazarli-shabnam added enhancement New feature or request UX/UI labels Jun 15, 2026
@nazarli-shabnam nazarli-shabnam added this to the Project Cors Deadline milestone Jun 15, 2026
@nazarli-shabnam

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 6, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai

coderabbitai Bot commented Jul 6, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: c28682f1-67e1-4b77-a517-6cd2720c7c6e

📥 Commits

Reviewing files that changed from the base of the PR and between d2c042a and 15c8cdc.

📒 Files selected for processing (3)
  • apps/ui/app/login/page.tsx
  • apps/ui/app/settings/page.tsx
  • apps/ui/package.json
💤 Files with no reviewable changes (3)
  • apps/ui/package.json
  • apps/ui/app/login/page.tsx
  • apps/ui/app/settings/page.tsx

📝 Walkthrough

Walkthrough

The app migrates icon usage to @phosphor-icons/react, adds an IconProvider, and updates global tokens, shared UI primitives, shared components, and page screens for the new square-corner visual system.

Changes

Icon migration and visual redesign

Layer / File(s) Summary
Design tokens and global CSS foundation
apps/ui/app/globals.css, apps/ui/app/layout.tsx, apps/ui/components/icon-provider.tsx, apps/ui/package.json, apps/ui/next.config.mjs
Updates global color, radius, font, and easing tokens; adds reduced-motion rules and utility classes; swaps root fonts and provider wiring; and configures phosphor icon imports.
Shared UI primitive restyling
apps/ui/components/ui/badge.tsx, .../button.tsx, .../card.tsx, .../input.tsx, .../sheet.tsx, .../sidebar.tsx, .../skeleton.tsx, .../tooltip.tsx
Switches corner radii to rounded-none, updates transition/easing tokens, and replaces lucide icons with phosphor equivalents in sheet and sidebar controls.
Shared feature component updates
apps/ui/components/page-header.tsx, stat-card.tsx, check-card.tsx, empty-state.tsx, activity-list.tsx, app-sidebar.tsx, apps/ui/tests/components/page-header.test.tsx
Reworks PageHeader into a telemetry-style layout, updates StatCard and CheckCard, adds font-mono to empty-state text, adds stagger animation to activity-list, swaps sidebar icons/rounding, and updates the header test expectations.
Page-level icon replacements
apps/ui/app/automation/..., collaborators/..., login/..., page.tsx, repos/[repo]/cache/..., security/..., settings/..., setup/...
Removes unused icon props and replaces lucide-react loader, warning, key, trash, and arrow icons with phosphor equivalents across page components.

Estimated code review effort: 3 (Moderate) | ~25 minutes

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 75.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title matches the main change: a UI redesign with telemetry-inspired styling and component updates.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/tactical-telemetry-redesign

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🧹 Nitpick comments (3)
apps/ui/components/check-card.tsx (1)

61-68: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Success state uses hardcoded green instead of a design token.

The fail branch correctly uses the new destructive semantic token (border-destructive/25, text-destructive), but the pass branch still hardcodes green-500/green-400. This breaks the token-driven theming this redesign otherwise establishes and won't automatically adapt if the palette/dark-mode tokens change.

♻️ Use a semantic success/accent token instead of hardcoded green
       className={`bg-card border p-3.5 flex items-start gap-3 transition-colors duration-200 ease-(--ease-out) ${
-        pass ? "border-green-500/20 hover:border-green-500/35" : "border-destructive/25 hover:border-destructive/45"
+        pass ? "border-accent/20 hover:border-accent/35" : "border-destructive/25 hover:border-destructive/45"
       }`}
     >
       {pass ? (
-        <CheckCircle className="size-4 shrink-0 mt-0.5 text-green-400" />
+        <CheckCircle className="size-4 shrink-0 mt-0.5 text-accent" />
       ) : (
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/ui/components/check-card.tsx` around lines 61 - 68, The success state in
CheckCard still hardcodes green values instead of using the new semantic token
approach. Update the pass branch in check-card.tsx (the className and
CheckCircle usage inside CheckCard) to use the appropriate semantic
success/accent token classes rather than green-500/green-400 so it matches the
token-driven styling used by the destructive branch.
apps/ui/package.json (1)

15-18: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win

Consider enabling optimizePackageImports for @phosphor-icons/react.

The package's own docs recommend adding it to experimental.optimizePackageImports in next.config.js so Next.js only compiles the icon modules actually used, rather than the whole package. next.config.js isn't part of this diff/cohort, so flagging as a forward-looking note rather than a required change here.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/ui/package.json` around lines 15 - 18, The package entry for
`@phosphor-icons/react` should be reflected in Next.js import optimization
settings; when you update next.config.js, add `@phosphor-icons/react` to
experimental.optimizePackageImports so Next.js compiles only the icon modules
actually used. Use the existing next.config.js configuration to locate the
optimizePackageImports array and include this package there.
apps/ui/app/globals.css (1)

342-359: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

.section-title duplicates .section-label verbatim.

Both rules now have identical declarations. Since the comment states it's kept only as a transitional alias, consider merging the selectors to avoid drift if one gets edited later.

♻️ Suggested consolidation
-  .section-label {
-    font-size: 0.6875rem;
-    font-weight: 500;
-    text-transform: uppercase;
-    letter-spacing: 0.1em;
-    color: var(--muted-foreground);
-    font-family: var(--font-mono);
-  }
-
-  /* Keep old name as alias during the transition */
-  .section-title {
-    font-size: 0.6875rem;
-    font-weight: 500;
-    text-transform: uppercase;
-    letter-spacing: 0.1em;
-    color: var(--muted-foreground);
-    font-family: var(--font-mono);
-  }
+  /* Keep old name as alias during the transition */
+  .section-label,
+  .section-title {
+    font-size: 0.6875rem;
+    font-weight: 500;
+    text-transform: uppercase;
+    letter-spacing: 0.1em;
+    color: var(--muted-foreground);
+    font-family: var(--font-mono);
+  }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/ui/app/globals.css` around lines 342 - 359, The .section-title rule is a
verbatim duplicate of .section-label and should be consolidated to avoid future
drift. Update the styling in globals.css so .section-title acts as a
transitional alias by sharing the same declarations as .section-label,
preferably through a combined selector or shared rule, and keep the unique
symbols .section-label and .section-title easy to locate for the transition
period.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/ui/app/globals.css`:
- Around line 477-488: The .noise-overlay layer is currently above interactive
overlay components, so lower its stacking order in globals.css by adjusting the
.noise-overlay rule to sit beneath Sheet/Tooltip overlays used by the app.
Update the .noise-overlay z-index to a value below the overlay layers while
keeping the fixed, pointer-events-none grain effect in place.

In `@apps/ui/components/page-header.tsx`:
- Around line 16-23: The decorative /// marker in PageHeader should be hidden
from assistive technology so it is not announced before the page title. Update
the span that renders the marker in PageHeader to include aria-hidden="true"
while leaving the title heading unchanged.

In `@apps/ui/components/ui/button.tsx`:
- Around line 9-10: The Button class string in button.tsx uses an unsupported
Tailwind variant for the popup exclusion, so the active scale rule is not
applying correctly. Update the class definition in the button styling to use an
arbitrary selector-based :not() check for aria-haspopup instead of
not-aria-[haspopup], keeping the rule attached to the same button variant logic
in the Button component.

In `@apps/ui/components/ui/sidebar.tsx`:
- Line 682: The sidebar item icon color is always using the accent foreground,
which no longer matches the label’s inactive state. Update the class list in the
sidebar button styling so the `[&>svg]` color follows the same state modifiers
as the text (`hover:`, `active:`, and `data-active:`) in the relevant sidebar
component. Keep the icon styling aligned with the existing button state classes
in `sidebar.tsx` so both label and icon switch colors together.

---

Nitpick comments:
In `@apps/ui/app/globals.css`:
- Around line 342-359: The .section-title rule is a verbatim duplicate of
.section-label and should be consolidated to avoid future drift. Update the
styling in globals.css so .section-title acts as a transitional alias by sharing
the same declarations as .section-label, preferably through a combined selector
or shared rule, and keep the unique symbols .section-label and .section-title
easy to locate for the transition period.

In `@apps/ui/components/check-card.tsx`:
- Around line 61-68: The success state in CheckCard still hardcodes green values
instead of using the new semantic token approach. Update the pass branch in
check-card.tsx (the className and CheckCircle usage inside CheckCard) to use the
appropriate semantic success/accent token classes rather than
green-500/green-400 so it matches the token-driven styling used by the
destructive branch.

In `@apps/ui/package.json`:
- Around line 15-18: The package entry for `@phosphor-icons/react` should be
reflected in Next.js import optimization settings; when you update
next.config.js, add `@phosphor-icons/react` to experimental.optimizePackageImports
so Next.js compiles only the icon modules actually used. Use the existing
next.config.js configuration to locate the optimizePackageImports array and
include this package there.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: e0347eb5-23eb-434c-9cc7-701c692350f2

📥 Commits

Reviewing files that changed from the base of the PR and between 6ea0309 and 32400bc.

⛔ Files ignored due to path filters (1)
  • apps/ui/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (26)
  • apps/ui/app/automation/page.tsx
  • apps/ui/app/collaborators/page.tsx
  • apps/ui/app/globals.css
  • apps/ui/app/layout.tsx
  • apps/ui/app/login/page.tsx
  • apps/ui/app/page.tsx
  • apps/ui/app/repos/[repo]/cache/page.tsx
  • apps/ui/app/security/page.tsx
  • apps/ui/app/settings/page.tsx
  • apps/ui/app/setup/page.tsx
  • apps/ui/components/activity-list.tsx
  • apps/ui/components/app-sidebar.tsx
  • apps/ui/components/check-card.tsx
  • apps/ui/components/empty-state.tsx
  • apps/ui/components/icon-provider.tsx
  • apps/ui/components/page-header.tsx
  • apps/ui/components/stat-card.tsx
  • apps/ui/components/ui/badge.tsx
  • apps/ui/components/ui/button.tsx
  • apps/ui/components/ui/card.tsx
  • apps/ui/components/ui/input.tsx
  • apps/ui/components/ui/sheet.tsx
  • apps/ui/components/ui/sidebar.tsx
  • apps/ui/components/ui/skeleton.tsx
  • apps/ui/components/ui/tooltip.tsx
  • apps/ui/package.json
💤 Files with no reviewable changes (2)
  • apps/ui/app/collaborators/page.tsx
  • apps/ui/app/automation/page.tsx

Comment thread apps/ui/app/globals.css
Comment thread apps/ui/components/page-header.tsx
Comment thread apps/ui/components/ui/button.tsx Outdated
Comment thread apps/ui/components/ui/sidebar.tsx Outdated
Update stale page-header test assertion (title is the h1, not description),
fix noise-overlay z-index over Sheet/Tooltip, add aria-hidden to the decorative
marker, fix unsupported not-aria-[haspopup] variant, align sidebar icon color
with label state, use accent token instead of hardcoded green, dedupe
section-label/section-title, and enable optimizePackageImports for phosphor icons.
@strix-security

strix-security Bot commented Jul 6, 2026

Copy link
Copy Markdown

Strix Security Review

No security issues found.

Updated for 15c8cdc.


Reviewed by Strix
Re-run review · Configure security review settings

@nazarli-shabnam
nazarli-shabnam marked this pull request as draft July 10, 2026 16:48
package.json swapped lucide-react for @phosphor-icons/react but bun.lock
was never updated, causing CI and Docker builds to fail at
`bun install --frozen-lockfile`.

Co-authored-by: Cursor <cursoragent@cursor.com>
@Tarekchehahde

Copy link
Copy Markdown
Contributor

CI on this branch is failing because apps/ui/bun.lock is out of sync with package.json after the Phosphor icon migration (lockfile still references lucide-react).

Opened #110 to regenerate the lockfile. Local verification:

  • bun install --frozen-lockfile
  • typecheck, lint, test (28/28) ✅

Once #110 is merged into this branch, UI + Docker CI should unblock.

The register page came from main with a lucide-react import, but PR #61
removed that dependency. Use CircleNotch to match login/setup.

Co-authored-by: Cursor <cursoragent@cursor.com>
@Tarekchehahde

Copy link
Copy Markdown
Contributor

Update: #110 now passes all CI checks (UI typecheck/lint/test/build, Docker, Python).

Second fix was needed — app/register/page.tsx from main still imported lucide-react after the icon migration. Swapped to CircleNotch from Phosphor to match login/setup.

@Tarekchehahde

Copy link
Copy Markdown
Contributor

@nazarli-shabnam — CI on this branch should be unblocked now.

What was broken

  • apps/ui/bun.lock was out of sync after the Phosphor migration (still listed lucide-react), so bun install --frozen-lockfile failed in UI + Docker CI.
  • After the Jul 9 merge from main, app/register/page.tsx still imported lucide-react.

Fix PR: #110 → targets feat/tactical-telemetry-redesign

  • Regenerates bun.lock
  • Migrates the register-page spinner to CircleNotch (Phosphor)

Verified on #110: UI typecheck/lint/test/build ✅ · Docker ✅ · Python ✅

If this looks good, merging #110 into this branch should turn CI green here and let you mark #61 ready for review. Happy to adjust anything if you prefer a different approach.

…ry-redesign

# Conflicts:
#	apps/ui/app/login/page.tsx
#	apps/ui/bun.lock
@nazarli-shabnam
nazarli-shabnam marked this pull request as ready for review July 12, 2026 14:01

@nazarli-shabnam nazarli-shabnam left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Merge conflict resolved

Fix a stale e2e assertion (login heading moved from description to
title in the tactical-telemetry redesign of PageHeader), migrate two
lucide-react icon usages that landed from main's org-invite/members
pages to phosphor-icons, and add unit tests plus small refactors
(hoisting inline JSX ternaries to statements) so the new/changed UI
lines introduced by the merge clear CI's diff-coverage gate.
Exercises the remaining diff-coverage gaps: profile save spinner/saved
confirmation, and the per-field instance-config saving spinner.

@nazarli-shabnam nazarli-shabnam left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Synced the stale local branch with a remote fix

@nazarli-shabnam
nazarli-shabnam merged commit 88572bf into main Jul 12, 2026
14 checks passed
@nazarli-shabnam
nazarli-shabnam deleted the feat/tactical-telemetry-redesign branch July 17, 2026 06:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request UX/UI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants