Skip to content

[LFXV2-241] feat: redesign meeting card badges and improve component architecture#34

Merged
asithade merged 2 commits intomainfrom
feat/meeting-card
Aug 12, 2025
Merged

[LFXV2-241] feat: redesign meeting card badges and improve component architecture#34
asithade merged 2 commits intomainfrom
feat/meeting-card

Conversation

@asithade
Copy link
Contributor

@asithade asithade commented Aug 12, 2025

Summary

Jira Ticket: LFXV2-241

This PR redesigns the meeting card badges to match the exact Figma specifications and improves the component architecture for better maintainability and user experience.

Key Changes

🎨 Badge Redesign

  • Replaced PrimeNG badge components with custom HTML badges for exact design control
  • Implemented meeting type badges with proper icons and colors:
    • Board: red with user-check icon
    • Maintainers: blue with gear icon
    • Marketing: green with chart-line-up icon
    • Technical: purple with code icon
    • Legal: amber with scale-balanced icon
  • Added computed signal optimization for meeting type badges to reduce HTML repetition
  • Hide meeting type badge when type is "None" to clean up the UI
  • Added tooltips to action buttons for better accessibility

📊 Dynamic Attendance Bar

  • Implemented color-coded attendance progress bar based on percentage thresholds:
    • Under 25%: amber for poor attendance
    • 25-69%: blue for moderate attendance
    • 70%+: green for good attendance
  • Provides immediate visual feedback for meeting engagement levels
  • Maintains smooth transitions with existing CSS classes

🔧 Component Architecture Improvements

  • Moved container styling logic into meeting card component for better encapsulation
  • Added showBorder input to meeting card component (defaults to false) for flexible usage
  • Removed getMeetingTypeBorderClass method from meeting dashboard component
  • Conditionally apply padding based on showBorder flag
  • Self-contained component can now be used in different contexts

🎯 UX Improvements

  • Simplified participants button label by removing "Yes/No/Maybe" response breakdown
  • Ensured color consistency between meeting type badges and left border colors
  • Conditional share button display - only shows for public meetings
  • Cleaner interface with improved visual hierarchy

Technical Details

Files Modified

  • meeting-card.component.html - Updated template with custom badges and dynamic styling
  • meeting-card.component.ts - Added computed signals and container logic
  • meeting-dashboard.component.html - Simplified to use self-contained meeting cards
  • meeting-dashboard.component.ts - Removed border class method

New Features

  • showBorder input for flexible component usage
  • attendanceBarColor() computed signal for dynamic progress bar colors
  • meetingTypeBadge() computed signal for optimized badge rendering
  • containerClass() computed signal for self-contained styling

Test Plan

  • Verify all meeting type badges display with correct colors and icons
  • Confirm badge colors match their corresponding left border colors
  • Test meeting card with and without showBorder flag
  • Validate participants button shows simplified label
  • Check that "None" meeting type doesn't show a badge
  • Test attendance bar color changes at different percentage thresholds
  • Ensure share button only appears for public meetings
  • Verify all existing functionality still works as expected

Screenshots

The implementation now matches the provided Figma designs exactly, with proper icons, color-coded badges, and dynamic attendance indicators for enhanced user experience.

🤖 Generated with Claude Code

- Replace PrimeNG badge components with custom HTML badges for exact design control
- Implement meeting type badges with proper icons and colors matching Figma designs:
  * Board: red with user-check icon
  * Maintainers: blue with gear icon
  * Marketing: green with chart-line-up icon
  * Technical: purple with code icon
  * Legal: amber with scale-balanced icon
- Add computed signal optimization for meeting type badges to reduce HTML repetition
- Simplify participants button label by removing "Yes/No/Maybe" response breakdown
- Move container styling logic into meeting card component for better encapsulation
- Add showBorder input to meeting card component (defaults to false)
- Remove getMeetingTypeBorderClass method from meeting dashboard component
- Ensure color consistency between meeting type badges and left border colors
- Hide meeting type badge when type is "None" to clean up the UI
- Conditionally apply padding based on showBorder flag for flexible usage

Generated with [Claude Code](https://claude.ai/code)

Signed-off-by: Asitha de Silva <asithade@gmail.com>
- Implement color-coded attendance progress bar based on percentage thresholds:
  * Under 25%: amber (bg-amber-500) for poor attendance
  * 25-69%: blue (bg-blue-500) for moderate attendance
  * 70%+: green (bg-green-500) for good attendance
- Add computed signal attendanceBarColor() to calculate appropriate color
- Update HTML template to use dynamic color class instead of hardcoded blue
- Maintain smooth color transitions with existing transition classes
- Provide immediate visual feedback for meeting engagement levels

Generated with [Claude Code](https://claude.ai/code)

Signed-off-by: Asitha de Silva <asithade@gmail.com>
Copilot AI review requested due to automatic review settings August 12, 2025 00:13
@asithade asithade requested a review from jordane as a code owner August 12, 2025 00:13
@coderabbitai
Copy link

coderabbitai bot commented Aug 12, 2025

Walkthrough

Documentation color updates from yellow to amber in two places. Major refactor of meeting-card template and logic: new badges, resource/participant summaries, dynamic styling via showBorder, and a revised edit flow handling recurring meetings. Meeting dashboard now passes showBorder to cards. Committee modal badge color updated.

Changes

Cohort / File(s) Summary
Docs color tweak
apps/lfx-pcc/README.md
Updated example icon class from text-yellow-400 to text-amber-400.
Meeting Card UI + Logic
apps/lfx-pcc/src/app/modules/project/meetings/components/meeting-card/meeting-card.component.html, .../components/meeting-card/meeting-card.component.ts
HTML restructured to card-based layout with dynamic badges, resources/participants/details sections, and feature badges. Added signals (attendance, resources, features, type badge, container class), new public input showBorder, and public editMeeting() with recurring-edit options. Removed BadgeComponent import.
Committee Modal styling
apps/lfx-pcc/src/app/modules/project/meetings/components/meeting-committee-modal/meeting-committee-modal.component.html
Changed 'alternate' votingStatus badge classes from yellow to amber.
Dashboard integration
apps/lfx-pcc/src/app/modules/project/meetings/meeting-dashboard/meeting-dashboard.component.html
Simplified wrapper structure; now renders lfx-meeting-card directly and binds [showBorder]="true". Preserved other bindings/events.

Sequence Diagram(s)

sequenceDiagram
  actor User
  participant Card as MeetingCardComponent
  participant Dialog as RecurringMeetingEditOptionsComponent
  participant Form as MeetingForm

  User->>Card: Click Edit
  alt meeting has recurrence
    Card->>Dialog: Open options (this instance / series / future)
    Dialog-->>Card: Selected edit type
    Card->>Form: Open MeetingForm with selected type
  else no recurrence
    Card->>Form: Open MeetingForm with type 'single'
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/meeting-card

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

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

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
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 redesigns the meeting card UI to match Figma specifications with custom badges, improved component architecture for better maintainability, and enhanced user experience through dynamic visual feedback.

  • Replaces PrimeNG badges with custom HTML badges featuring proper icons and colors for meeting types
  • Adds dynamic attendance progress bar with color-coded thresholds for visual feedback
  • Implements self-contained meeting card component with showBorder input for flexible usage

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
meeting-dashboard.component.html Simplified template to use self-contained meeting cards with border styling
meeting-committee-modal.component.html Updated yellow color references to amber for consistency
meeting-card.component.ts Added computed signals for badges, attendance bar colors, and container styling logic
meeting-card.component.html Complete template redesign with custom badges, three-column info cards, and dynamic styling
README.md Updated color reference from yellow to amber in documentation example

@asithade asithade requested a review from dealako August 12, 2025 00:14
@github-actions
Copy link

✅ E2E Tests Passed

Browser: chromium
Status: passed

All E2E tests passed successfully.

Test Configuration

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (2)
apps/lfx-pcc/src/app/modules/project/meetings/components/meeting-card/meeting-card.component.ts (1)

66-66: Add data-testid attribute for the showBorder input.

According to the coding guidelines, new components should include data-testid attributes for reliable test targeting. The showBorder input affects the visual rendering significantly and should be testable.

Consider adding a data-testid attribute to the container element that reflects the showBorder state, or document how this input should be tested.

apps/lfx-pcc/src/app/modules/project/meetings/components/meeting-card/meeting-card.component.html (1)

218-230: Verify file name truncation logic for edge cases.

The filename truncation uses a hardcoded 15-character limit which may not account for different character widths or internationalization. Consider using CSS truncation with max-width instead for more reliable visual consistency.

-              <span class="truncate max-w-[120px]">{{
-                attachment.file_name.length > 15 ? attachment.file_name.substring(0, 15) + '...' : attachment.file_name
-              }}</span>
+              <span class="truncate max-w-[120px]" [title]="attachment.file_name">
+                {{ attachment.file_name }}
+              </span>
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ce2aa85 and 481af23.

📒 Files selected for processing (5)
  • apps/lfx-pcc/README.md (1 hunks)
  • apps/lfx-pcc/src/app/modules/project/meetings/components/meeting-card/meeting-card.component.html (1 hunks)
  • apps/lfx-pcc/src/app/modules/project/meetings/components/meeting-card/meeting-card.component.ts (5 hunks)
  • apps/lfx-pcc/src/app/modules/project/meetings/components/meeting-committee-modal/meeting-committee-modal.component.html (1 hunks)
  • apps/lfx-pcc/src/app/modules/project/meetings/meeting-dashboard/meeting-dashboard.component.html (1 hunks)
🧰 Additional context used
📓 Path-based instructions (4)
apps/**/src/**/*.html

📄 CodeRabbit Inference Engine (CLAUDE.md)

apps/**/src/**/*.html: Always add data-testid attributes when creating new components for reliable test targeting
Use data-testid naming convention - '[section]-[component]-[element]' for hierarchical structure

Files:

  • apps/lfx-pcc/src/app/modules/project/meetings/components/meeting-committee-modal/meeting-committee-modal.component.html
  • apps/lfx-pcc/src/app/modules/project/meetings/components/meeting-card/meeting-card.component.html
  • apps/lfx-pcc/src/app/modules/project/meetings/meeting-dashboard/meeting-dashboard.component.html
{apps,packages}/**/*.{ts,tsx,js,jsx,css,scss}

📄 CodeRabbit Inference Engine (CLAUDE.md)

License headers are required on all source files

Files:

  • apps/lfx-pcc/src/app/modules/project/meetings/components/meeting-card/meeting-card.component.ts
**/*.{ts,tsx}

📄 CodeRabbit Inference Engine (CLAUDE.md)

Use TypeScript interfaces instead of union types for better maintainability

Files:

  • apps/lfx-pcc/src/app/modules/project/meetings/components/meeting-card/meeting-card.component.ts
**/*.{ts,tsx,js,jsx}

📄 CodeRabbit Inference Engine (CLAUDE.md)

Do not nest ternary expressions

Files:

  • apps/lfx-pcc/src/app/modules/project/meetings/components/meeting-card/meeting-card.component.ts
🧬 Code Graph Analysis (1)
apps/lfx-pcc/src/app/modules/project/meetings/components/meeting-card/meeting-card.component.ts (1)
apps/lfx-pcc/src/app/modules/project/meetings/components/recurring-meeting-edit-options/recurring-meeting-edit-options.component.ts (1)
  • RecurringEditOption (12-15)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Code Quality Checks
🔇 Additional comments (15)
apps/lfx-pcc/README.md (1)

99-99: Color consistency update aligns with design system.

The change from text-yellow-400 to text-amber-400 is consistent with the broader design system updates seen throughout this PR, where yellow colors are being replaced with amber variants for better visual consistency.

apps/lfx-pcc/src/app/modules/project/meetings/components/meeting-committee-modal/meeting-committee-modal.component.html (1)

120-120: Color theme consistency maintained.

The update from yellow to amber theme for the 'alternate' voting status badge maintains consistency with the design system changes throughout the PR and aligns with the amber color scheme used elsewhere.

apps/lfx-pcc/src/app/modules/project/meetings/meeting-dashboard/meeting-dashboard.component.html (1)

75-84: Component architecture improved with new showBorder API.

The simplified structure removes the unnecessary wrapper div and leverages the meeting card's new showBorder input for cleaner component composition. The preserved event bindings and animation classes maintain existing functionality.

apps/lfx-pcc/src/app/modules/project/meetings/components/meeting-card/meeting-card.component.ts (6)

78-84: Well-designed computed signals for dynamic UI behavior.

The computed signals for attendance percentage, bar color, resource counts, and styling provide reactive updates based on meeting data. The separation of concerns is excellent, with each signal having a single responsibility.


143-171: Improved edit flow handles recurring meetings appropriately.

The public editMeeting() method now properly handles both recurring and single meetings with a clear user experience flow. The use of the RecurringMeetingEditOptionsComponent for recurring meetings provides users with edit scope options.


241-245: Simplified participant label improves UX clarity.

The removal of the Yes/No/Maybe breakdown from the button label makes it cleaner while the detailed breakdown is still available in the expanded view. This follows good UX principles by reducing cognitive load on the primary action.


431-451: Attendance calculation and color logic is well-implemented.

The attendance percentage calculation correctly handles edge cases (division by zero) and the color thresholds (amber <25%, blue 25-69%, green 70%+) provide clear visual feedback for meeting engagement levels.


468-490: Meeting type badge configuration matches requirements.

The badge implementation correctly maps meeting types to their specified colors and icons as outlined in the PR objectives: Board (red/user-check), Maintainers (blue/gear), Marketing (green/chart-line-up), Technical (purple/code), Legal (amber/scale-balanced). The null return for falsy meeting types prevents rendering empty badges.


492-527: Container class logic provides consistent styling architecture.

The dynamic container class computation correctly applies border styling only when showBorder is true and matches border colors with meeting type badges for visual consistency. The fallback to gray for 'other'/'none' types is appropriate.

apps/lfx-pcc/src/app/modules/project/meetings/components/meeting-card/meeting-card.component.html (6)

4-5: Dynamic container styling implementation is correct.

The container uses the computed containerClass() signal for dynamic styling and conditionally applies padding based on the showBorder input. This provides a clean separation between border/no-border layouts.


7-76: Well-structured header with improved badge system.

The header implementation correctly shows privacy badges only for private meetings, conditionally renders meeting type badges (hiding "None" types), and includes recurring indicators. The action buttons with tooltips improve accessibility and UX.


108-178: Excellent three-column info card design.

The redesigned info cards provide comprehensive meeting information at a glance:

  • Attendees card with progress bar and response breakdown
  • Resources card with file/link counts and aggregated totals
  • Details card with duration, features, and timestamps

The responsive grid layout and consistent styling enhance the user experience significantly.


180-208: Feature badges with tooltips improve information discovery.

The feature badges clearly indicate enabled meeting capabilities (Recording, YouTube Upload, Transcripts, AI Summary) with helpful tooltips. The color coding (blue, red, purple, green) provides visual differentiation while maintaining accessibility.


217-244: Resource section provides clear file and link access.

The resources section effectively displays both attachments and important links with:

  • Appropriate icons for different file types
  • Truncated filenames for layout consistency
  • Hover states for better interactivity
  • External link handling with proper security attributes

280-350: Participants section redesign enhances usability.

The tile-based participant display provides:

  • Clear visual status indicators for responses and attendance
  • Intuitive "Add Guests" tile with dashed border styling
  • Responsive grid layout for different screen sizes
  • Appropriate tooltips for status understanding

The differentiation between past and upcoming meeting views is well-implemented.

Comment on lines +121 to +123
<div class="w-full bg-gray-200 rounded-full h-1.5">
<div class="h-1.5 rounded-full transition-all duration-300" [class]="attendanceBarColor()" [style.width.%]="attendancePercentage()"></div>
</div>
Copy link

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Verify progress bar accessibility and color contrast.

The dynamic progress bar uses computed colors that should meet WCAG accessibility standards. The color combinations (amber, blue, green backgrounds) should be verified for sufficient contrast ratios.


🏁 Script executed:

#!/bin/bash
# Verify color contrast ratios for the progress bar colors
echo "Checking color contrast for progress bar colors used in meeting card"
echo "Colors to verify:"
echo "- bg-amber-500 (#f59e0b)"  
echo "- bg-blue-500 (#3b82f6)"
echo "- bg-green-500 (#10b981)"
echo ""
echo "These should be verified against WCAG AA standards for color contrast"
echo "Recommendation: Use tools like WebAIM Contrast Checker to verify accessibility"

Length of output: 693


Fix: Improve progress bar contrast for accessibility

The colored fill on the gray track (bg-gray-200) currently uses Tailwind’s 500-level shades, which fall below the 3:1 contrast ratio required for non-text UI components under WCAG 2.1 AA. Please update the fill colors or track background so that each progress-bar hue meets at least a 3:1 ratio:

• File:
apps/lfx-pcc/src/app/modules/project/meetings/components/meeting-card/meeting-card.component.html
Lines: 121–123

• Problem:
• bg-amber-500 (#f59e0b) on #e5e7eb → contrast ~1.3:1
• bg-blue-500 (#3b82f6) on #e5e7eb → contrast ~2.3:1
• bg-green-500 (#10b981) on #e5e7eb → contrast ~2.5:1

• Recommendation:
– Darken the fill: use 600- or 700-level classes (e.g. bg-amber-700, bg-blue-700, bg-green-700)
– Or lighten the track: switch to bg-gray-300/400 to boost the delta
– Re-test with a WCAG contrast checker (e.g. WebAIM) to confirm ≥3:1

Example diff:

- <div class="w-full bg-gray-200 rounded-full h-1.5">
-   <div class="h-1.5 rounded-full transition-all duration-300"
-        [class]="attendanceBarColor()" 
-        [style.width.%]="attendancePercentage()">
-   </div>
- </div>
+ <div class="w-full bg-gray-300 rounded-full h-1.5">
+   <div class="h-1.5 rounded-full transition-all duration-300"
+        [class]="attendanceBarColorDarker()" 
+        [style.width.%]="attendancePercentage()">
+   </div>
+ </div>

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In
apps/lfx-pcc/src/app/modules/project/meetings/components/meeting-card/meeting-card.component.html
around lines 121–123 the progress-bar fill colors (bg-*-500) don’t meet the 3:1
contrast requirement against the bg-gray-200 track; update the classes to
increase contrast by either switching the fill to darker 600/700 shades (e.g.
bg-amber-700, bg-blue-700, bg-green-700) or lightening the track to
bg-gray-300/400 (choose one approach consistently), then verify each resulting
color pair with a WCAG contrast checker to ensure ≥3:1 and adjust classes
accordingly.

Copy link
Contributor

@dealako dealako left a comment

Choose a reason for hiding this comment

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

Such beautiful AI-generated code.

@asithade asithade changed the title feat: redesign meeting card badges and improve component architecture LFXV2-241: feat: redesign meeting card badges and improve component architecture Aug 12, 2025
@asithade asithade changed the title LFXV2-241: feat: redesign meeting card badges and improve component architecture [LFXV2-241] feat: redesign meeting card badges and improve component architecture Aug 12, 2025
@asithade asithade merged commit 6049ed7 into main Aug 12, 2025
7 checks passed
@asithade asithade deleted the feat/meeting-card branch August 12, 2025 00:26
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