Skip to content

feat: responsive security view IN-1072#1852

Open
gaspergrom wants to merge 2 commits intomainfrom
feat/IN-1072-mobile-responsive-security-vulns
Open

feat: responsive security view IN-1072#1852
gaspergrom wants to merge 2 commits intomainfrom
feat/IN-1072-mobile-responsive-security-vulns

Conversation

@gaspergrom
Copy link
Copy Markdown
Collaborator

@gaspergrom gaspergrom commented Apr 21, 2026

Summary

  • Mobile-responsive layout for the Security & Best Practices view (IN-1072)
  • Controls assessment rows stack vertically on mobile (gauge + title + description on top, "Repository breakdown" button below)
  • Vulnerabilities stats grid becomes 2×2 on mobile with reduced font sizes; long values stack vertically
  • Severity/ecosystem charts stack on mobile; card paddings and font sizes scale down
  • Recent vulnerabilities list switches to a card layout on mobile (title on top, severity chip + CVE + ecosystem + status inline); Published and Affected paths columns hidden
  • Recent vulnerabilities drawer adopts a single "Filters" dropdown on mobile matching the project-page time-filter pattern (all options grouped/separated, Reset + Apply buttons at the bottom)
  • Hairline divider below the filter row; 20px spacing between description ↔ filter button ↔ divider

Changes

  • app/components/modules/project/views/security.vue
  • app/components/modules/project/components/security/evaluation-section-row.vue
  • app/components/modules/project/components/vulnerabilities/vulnerabilities-section.vue
  • app/components/modules/project/components/vulnerabilities/vulnerability-summary.vue
  • app/components/modules/project/components/vulnerabilities/vulnerability-severity.vue
  • app/components/modules/project/components/vulnerabilities/vulnerability-ecosystem.vue
  • app/components/modules/project/components/vulnerabilities/vulnerability-drawer.vue
  • app/components/modules/project/components/vulnerabilities/vulnerability-filters.vue
  • app/components/modules/project/components/vulnerabilities/vulnerability-table-header.vue
  • app/components/modules/project/components/vulnerabilities/vulnerability-row.vue
  • app/components/modules/project/components/vulnerabilities/vulnerability-row-loading.vue

Test plan

  • 390px viewport (iPhone): stats 2×2 grid, charts stack, cards show no Published / Affected paths
  • Drawer at 390px: Filters dropdown groups options with separators, Apply/Reset buttons work, count reflects applied filters
  • Spacing around filters: 20px above and below
  • 640px viewport (Figma "max-sm" variant): labels stay on one line
  • Desktop (≥768px): original three-filter row + full table unchanged
  • Controls assessment: gauge + title + description + "Repository breakdown" button stacked correctly on mobile, horizontal on desktop

Signed-off-by: Gašper Grom <gasper.grom@gmail.com>
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

Implements a mobile-responsive layout for the Project “Security & Best Practices” view, including responsive vulnerability stats, charts, recent vulnerabilities list, and a mobile-friendly filtering experience in the vulnerabilities drawer (IN-1072).

Changes:

  • Updated Security controls assessment layout to stack appropriately on mobile.
  • Refactored vulnerabilities UI for mobile (2×2 stats grid, stacked charts, card-style rows, hidden desktop table header).
  • Added a mobile “Filters” popover in the vulnerabilities drawer with grouped options plus Reset/Apply actions and updated spacing/dividers.

Reviewed changes

Copilot reviewed 11 out of 11 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
frontend/app/components/modules/project/views/security.vue Tweaks responsive spacing for the security assessment split layout.
frontend/app/components/modules/project/components/security/evaluation-section-row.vue Makes control assessment rows stack vertically on mobile; aligns the button under the text.
frontend/app/components/modules/project/components/vulnerabilities/vulnerabilities-section.vue Adjusts vulnerabilities section card padding/typography and stacks charts on mobile.
frontend/app/components/modules/project/components/vulnerabilities/vulnerability-summary.vue Converts summary stats to a responsive 2×2 grid on mobile with scaled typography.
frontend/app/components/modules/project/components/vulnerabilities/vulnerability-severity.vue Responsive padding/typography tweaks for severity chart card.
frontend/app/components/modules/project/components/vulnerabilities/vulnerability-ecosystem.vue Responsive padding/typography tweaks for ecosystem chart card.
frontend/app/components/modules/project/components/vulnerabilities/vulnerability-drawer.vue Updates drawer paddings to support the new mobile filter layout and spacing.
frontend/app/components/modules/project/components/vulnerabilities/vulnerability-filters.vue Adds mobile popover-based grouped filters (Severity/Ecosystem/Status) with Reset/Apply; refines spacing and sort trigger sizing.
frontend/app/components/modules/project/components/vulnerabilities/vulnerability-table-header.vue Hides table header on mobile (desktop-only header).
frontend/app/components/modules/project/components/vulnerabilities/vulnerability-row.vue Introduces mobile card layout while preserving the existing desktop table row layout.
frontend/app/components/modules/project/components/vulnerabilities/vulnerability-row-loading.vue Adds mobile skeleton card layout alongside the existing desktop skeleton row.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +172 to +178
<div
v-for="option in severityOptions"
:key="`sev-${option.value}`"
class="c-dropdown__item"
:class="{ 'is-selected': severityCache === option.value }"
@click="severityCache = option.value"
>
Copy link

Copilot AI Apr 21, 2026

Choose a reason for hiding this comment

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

In the mobile filters popover, each selectable option is rendered as a plain <div> with an @click handler. This isn’t keyboard-accessible (no focus target / Enter/Space handling) and can trip a11y expectations. Use semantic interactive elements (e.g., button/input type="radio") or add appropriate role, tabindex="0", and key handlers so the options can be operated via keyboard/screen readers.

Copilot uses AI. Check for mistakes.
<div class="flex flex-col h-full">
<!-- Header -->
<div class="px-6 py-5">
<div class="px-4 md:px-6 pt-5 pb-0 pr-14">
Copy link

Copilot AI Apr 21, 2026

Choose a reason for hiding this comment

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

The header padding mixes px-* with an additional unscoped pr-14, which overrides the right padding from px-* and makes the intended spacing harder to reason about. Consider switching to explicit pl-* + pr-* (and, if needed, responsive md:pr-*) to avoid conflicting Tailwind utilities and keep the header alignment intentional.

Suggested change
<div class="px-4 md:px-6 pt-5 pb-0 pr-14">
<div class="pl-4 pr-14 md:pl-6 md:pr-14 pt-5 pb-0">

Copilot uses AI. Check for mistakes.
Copy link
Copy Markdown
Collaborator

@joanagmaia joanagmaia left a comment

Choose a reason for hiding this comment

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

  • Font-sizes and colors do not seem to be matching the design.
  • Font-weight and even font-family look off.
  • Please also confirm spacings

Main KPIs

  • Font-sizes are not ok
  • Font color is not ok
  • Spacing, placement of items does not look ok

Implementation

Image #### Design Image

Vulnerabilities by severity

  • Font-sizes are not ok
  • Font color is not ok

Implementation

Image #### Design Image

Vulnerabilities by ecosystem

  • Font-sizes are not ok
  • Chart x axis looks broken

Implementation

Image #### Design Image

Recent vulnerabilities

  • Font-sizes are not ok
  • Font-weights also don't look good

Implementation

Image #### Design Image

Signed-off-by: Gašper Grom <gasper.grom@gmail.com>
@gaspergrom gaspergrom requested a review from joanagmaia April 23, 2026 09:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants