Skip to content
Merged
Show file tree
Hide file tree
Changes from 137 commits
Commits
Show all changes
155 commits
Select commit Hold shift + click to select a range
f65980d
chore: improve peek and trips
jimmykane Feb 8, 2026
a6125a6
chore: silent first month free
jimmykane Feb 8, 2026
ef18890
chore: styles and analytics
jimmykane Feb 8, 2026
8d77f0f
chore: improve peek
jimmykane Feb 8, 2026
3b39dd8
chore: update stuff
jimmykane Feb 9, 2026
b46996b
chore: update extensions config
jimmykane Feb 9, 2026
df43fd5
chore: mytracks work
jimmykane Feb 9, 2026
4b3d161
fix: tests
jimmykane Feb 9, 2026
d7b5d02
chore: styles
jimmykane Feb 9, 2026
94c571b
chore: improve promo code
jimmykane Feb 9, 2026
218701f
chore: add discount and refactor subscription
jimmykane Feb 9, 2026
fa5d1c5
chore: improve pricing and show that the first time is free
jimmykane Feb 9, 2026
4ec5def
chore: styles
jimmykane Feb 9, 2026
4f53bfc
chore: enable trial only for users who had to prev subscription
jimmykane Feb 9, 2026
9e26c23
chore: improve event details
jimmykane Feb 9, 2026
62577f2
chore: improve policies and oboarding
jimmykane Feb 9, 2026
bcb4b98
chore: fix login issues
jimmykane Feb 9, 2026
d2527c2
chore: improve rules
jimmykane Feb 9, 2026
2fbe697
chore: rules normilization
jimmykane Feb 9, 2026
000d6f6
chore: ui and jumps
jimmykane Feb 9, 2026
dc4954b
chore: more ui and maps
jimmykane Feb 9, 2026
6e17b09
refactor: use our own panel
jimmykane Feb 9, 2026
ddec934
chore: improve location service for labels
jimmykane Feb 9, 2026
86ad8ac
fix: location
jimmykane Feb 9, 2026
a85d82c
chore: use apache eCharts
jimmykane Feb 9, 2026
bc55d87
chore: add tests
jimmykane Feb 10, 2026
f6431e7
refactor: performance improvements
jimmykane Feb 10, 2026
5261e00
chore: improve zones
jimmykane Feb 10, 2026
662aca7
chore: styles
jimmykane Feb 10, 2026
eeb152b
chore: use barlow for events table
jimmykane Feb 10, 2026
695978f
chore: improve visuals for intensity zones
jimmykane Feb 10, 2026
7098c90
chore: redesign stats
jimmykane Feb 10, 2026
5c70995
chore: summary
jimmykane Feb 10, 2026
e5518ac
chore: mirror icon
jimmykane Feb 10, 2026
cb5c273
chore: better summaries
jimmykane Feb 10, 2026
5a549c6
chore: ui
jimmykane Feb 10, 2026
0d16804
chore: improve stats
jimmykane Feb 11, 2026
d26ed35
chore: styles
jimmykane Feb 11, 2026
2bfc7ca
refactor: use echarts
jimmykane Feb 11, 2026
3256c71
chore: fix view height
jimmykane Feb 11, 2026
32eb490
chore: more summary metrics
jimmykane Feb 11, 2026
50f0875
chore: improve visuals for mytracks on light styels
jimmykane Feb 11, 2026
bcbd593
chore: more logs
jimmykane Feb 11, 2026
734527c
chore: bump sl
jimmykane Feb 11, 2026
dfb3238
style: loading states improvements
jimmykane Feb 11, 2026
7953c58
chore: remove analytics
jimmykane Feb 11, 2026
83cbb19
chore: bump sl
jimmykane Feb 11, 2026
81d101b
styles: layout
jimmykane Feb 11, 2026
eac7973
chore: bump sl
jimmykane Feb 11, 2026
9ee8f37
chore: change icon
jimmykane Feb 11, 2026
5a29776
chore: bump sl
jimmykane Feb 11, 2026
7cff68a
chore: bump sl
jimmykane Feb 11, 2026
3d6c710
chore: more stats
jimmykane Feb 11, 2026
79d7861
chore: add pill tab
jimmykane Feb 12, 2026
88ad73e
chore: bump sl
jimmykane Feb 12, 2026
006416b
chore: pills thing
jimmykane Feb 12, 2026
2dba697
chore: change animations
jimmykane Feb 12, 2026
4f87fab
chore: improve grid
jimmykane Feb 12, 2026
a72808b
chore: fix login
jimmykane Feb 12, 2026
1474fcf
chore: fix actions of regeneration
jimmykane Feb 12, 2026
a280f11
chore: add more stats
jimmykane Feb 12, 2026
11a73c0
chore: bump sl
jimmykane Feb 12, 2026
c7d0c4c
chore: same size peek cards for mytracks
jimmykane Feb 12, 2026
dbc9259
chore: bump sl
jimmykane Feb 12, 2026
5cab15c
feature: power curve chart
jimmykane Feb 12, 2026
4ed59b8
chore: fix admin charts
jimmykane Feb 12, 2026
8708e2a
chore: helpers
jimmykane Feb 12, 2026
d07fbb3
chore: summary stats
jimmykane Feb 12, 2026
6f9c669
fix: canonnical
jimmykane Feb 12, 2026
2a77823
refactor: eventload + dashboard
jimmykane Feb 12, 2026
3d2755a
chore: bump sl
jimmykane Feb 12, 2026
282a447
chore: perf
jimmykane Feb 12, 2026
f2145e1
Revert "chore: perf"
jimmykane Feb 12, 2026
25590b1
chore: charts
jimmykane Feb 12, 2026
9051fa7
chore: fix for reactivity
jimmykane Feb 12, 2026
f53de7f
chore: bump sl
jimmykane Feb 12, 2026
113e9fb
chore: bump sl
jimmykane Feb 13, 2026
02c8cb1
chore: bump sl
jimmykane Feb 13, 2026
b715fb2
chore: bump sl
jimmykane Feb 13, 2026
818ce0d
chore: stats for flights etc
jimmykane Feb 13, 2026
abab70c
chore: improve grid
jimmykane Feb 13, 2026
7e2cc7f
chore: better stats
jimmykane Feb 13, 2026
4f80173
chore: bump sl
jimmykane Feb 13, 2026
832145b
chore: use cooperative
jimmykane Feb 13, 2026
a15fd0b
chore: ui for grid and missing stats
jimmykane Feb 13, 2026
37c3436
chore: bump sl
jimmykane Feb 13, 2026
96526ba
chore: improve stats
jimmykane Feb 13, 2026
be514cd
chore: mobile ui
jimmykane Feb 13, 2026
8c0cf66
chore: bump sl
jimmykane Feb 13, 2026
ba67d1e
chore: re-enable branded text
jimmykane Feb 14, 2026
a40c961
chore: edit activity
jimmykane Feb 14, 2026
5c3a89e
chore: fix bottom sheet height
jimmykane Feb 14, 2026
bf89e30
chore: benchmark
jimmykane Feb 14, 2026
5680307
chore: add edit name service and toggle button
jimmykane Feb 14, 2026
6d3a41a
chore: remove logging
jimmykane Feb 14, 2026
ac6ec41
chore: live updates for event
jimmykane Feb 14, 2026
5877765
chore: reduce error logging
jimmykane Feb 14, 2026
001c0a2
chore: styles
jimmykane Feb 14, 2026
3ab0eaf
fix: benchmark wobbling
jimmykane Feb 14, 2026
521273b
Revert "fix: benchmark wobbling"
jimmykane Feb 14, 2026
40de0c4
chore: better grid
jimmykane Feb 14, 2026
902e42f
Reapply "fix: benchmark wobbling"
jimmykane Feb 14, 2026
cec956a
chore: icons updates
jimmykane Feb 14, 2026
5d7f96a
chore: icons
jimmykane Feb 14, 2026
dff8bd4
chore: improve grids height
jimmykane Feb 14, 2026
c88e5e3
chore: event action stuff
jimmykane Feb 14, 2026
8595c8f
chore: stats
jimmykane Feb 14, 2026
c1a1377
chore: proper activity reimport
jimmykane Feb 14, 2026
8f9c44e
chore: improve activity toggles
jimmykane Feb 14, 2026
c64c3ed
chore: tests fix
jimmykane Feb 14, 2026
89f23db
chore: fixes
jimmykane Feb 14, 2026
8d6f067
chore: fix live sync
jimmykane Feb 14, 2026
29df043
chore: improve trips
jimmykane Feb 14, 2026
5367188
chore: improve charts
jimmykane Feb 14, 2026
3cfa94b
Revert "chore: fix live sync"
jimmykane Feb 14, 2026
94bb71f
Reapply "chore: fix live sync"
jimmykane Feb 14, 2026
455ba8d
fix: toggles
jimmykane Feb 14, 2026
6bd2eab
chore: fix for mobile
jimmykane Feb 15, 2026
f0647f4
chore: event service stuff
jimmykane Feb 15, 2026
373fa05
chore: remove logging
jimmykane Feb 15, 2026
400cfe0
chore: use apps breakpoints
jimmykane Feb 15, 2026
d412ad5
chore: remove loggin
jimmykane Feb 15, 2026
6b0f4fd
chore: fix regen
jimmykane Feb 15, 2026
31c27c5
refactor: styles and breakpoints
jimmykane Feb 15, 2026
39ebead
chore: fix for activit streams
jimmykane Feb 15, 2026
7a509be
chore: move sensors and show more under actions
jimmykane Feb 15, 2026
8230c4c
fix: charts
jimmykane Feb 15, 2026
cda49da
Merge branch 'main' into develop
jimmykane Feb 15, 2026
afad79a
chore: improvements
jimmykane Feb 15, 2026
578583c
chore: cleanup legacy code
jimmykane Feb 15, 2026
69f2001
Merge remote-tracking branch 'origin/develop' into develop
jimmykane Feb 15, 2026
a681af4
chore: styles
jimmykane Feb 15, 2026
1246825
chore: improve grid
jimmykane Feb 15, 2026
ef15590
chore: backdrop to menu
jimmykane Feb 15, 2026
32b70e1
chore: styles
jimmykane Feb 15, 2026
f506ef5
chore: remove logging
jimmykane Feb 15, 2026
d6b59a0
refactor: performance improvements
jimmykane Feb 15, 2026
905ff6b
chore: bump version
jimmykane Feb 15, 2026
c8d5c11
fix: activity creator
jimmykane Feb 15, 2026
249199c
chore: fixes on perf
jimmykane Feb 15, 2026
ebcc690
Revert "refactor: performance improvements"
jimmykane Feb 15, 2026
ec29aaa
Reapply "refactor: performance improvements"
jimmykane Feb 15, 2026
a02d748
chore: fix for branded text
jimmykane Feb 15, 2026
02b09c1
fix: indoor laps
jimmykane Feb 15, 2026
cc92868
fix: ui wobbling
jimmykane Feb 15, 2026
d3dfc3a
chore: event details performance
jimmykane Feb 15, 2026
196f9d9
chore: update sl
jimmykane Feb 15, 2026
6e4a0e1
chore: use new sport lib to reduce devices spam from tacx
jimmykane Feb 15, 2026
4683212
chore: patch also hydration service
jimmykane Feb 15, 2026
3b1b80f
chore: increase animation time
jimmykane Feb 15, 2026
8899da8
fix: build size
jimmykane Feb 15, 2026
cd730f7
chore: fixup for stat activities
jimmykane Feb 15, 2026
75bee0d
chore: better table for mobile
jimmykane Feb 15, 2026
cf7bd3e
chore: clear merge message
jimmykane Feb 15, 2026
18d653d
chore: styles
jimmykane Feb 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
221 changes: 30 additions & 191 deletions .agent/rules/angular-material-expert.md
Original file line number Diff line number Diff line change
@@ -1,195 +1,34 @@
---
trigger: model_decision
description: Use this rule when you are working with material design
description: Use for Angular Material component selection, theming, and Material-first UI reviews.
---

You are an expert in Angular Material, the official Material Design component library for Angular. You specialize in ensuring teams use Angular Material components correctly and avoid reinventing the wheel with custom implementations.

## Core Responsibilities

When reviewing code for Angular Material usage, you will:

### 1. Component Selection
- **Identify Custom Components**: Look for custom UI components that Angular Material already provides
- **Suggest Material Alternatives**: Recommend appropriate Angular Material components
- **Justify Custom**: Accept custom components only when Angular Material truly lacks the functionality
- **Component Variants**: Ensure proper component variants are used (raised, flat, stroked, icon buttons)

### 2. Common Angular Material Components to Prefer

**Layout & Structure**:
- `MatToolbar` for headers
- `MatSidenav` for side navigation
- `MatCard` for content containers
- `MatDivider` for visual separation
- `MatGridList` for grid layouts (though CSS Grid is often preferred)
- `MatExpansionPanel` for collapsible content

**Data Entry**:
- `MatFormField` wrapper for all inputs
- `MatInput` for text inputs
- `MatSelect` for dropdowns
- `MatCheckbox`, `MatRadio`, `MatSlideToggle` for selection controls
- `MatDatepicker` for date selection
- `MatSlider` for range selection
- `MatAutocomplete` for search/autocomplete
- `MatChips` for tagging/filtering

**Data Display**:
- `MatTable` for data tables (with sorting, filtering, pagination)
- `MatList` for list views
- `MatTree` for hierarchical data
- `MatBadge` for counts/status
- `MatIcon` for icons (Material Icons)
- `MatTooltip` for hover information

**Feedback**:
- `MatDialog` for modals/confirmations
- `MatSnackBar` for toast notifications
- `MatProgressBar` and `MatSpinner` for loading states
- `MatBottomSheet` for mobile-friendly actions

**Navigation**:
- `MatMenu` for dropdown menus
- `MatTabs` for tabbed interfaces
- `MatStepper` for multi-step processes
- `MatPaginator` for pagination

**Buttons**:
- `MatButton` (basic, raised, stroked, flat)
- `MatIconButton` for icon-only buttons
- `MatFab` and `MatMiniFab` for floating action buttons

### 3. Angular Material Patterns

**Form Handling**:
```typescript
// ✅ GOOD: Use MatFormField with MatInput and MatError
<mat-form-field appearance="outline">
<mat-label>Email</mat-label>
<input matInput [formControl]="emailControl" placeholder="pat@example.com">
@if (emailControl.hasError('email')) {
<mat-error>Please enter a valid email address</mat-error>
}
</mat-form-field>

// ❌ BAD: Custom form with manual styling
<div class="form-group">
<label>Email</label>
<input [formControl]="emailControl">
<span class="error" *ngIf="emailControl.invalid">Invalid email</span>
</div>
```

**Dialogs**:
```typescript
// ✅ GOOD: Use MatDialog service
this.dialog.open(DeleteConfirmationDialog, {
data: { item: this.item }
});

// ❌ BAD: Custom modal component in template
<app-custom-modal *ngIf="showModal" (close)="showModal = false">
...
</app-custom-modal>
```

**SnackBars**:
```typescript
// ✅ GOOD: Use MatSnackBar service
this.snackBar.open('Item saved', 'Close', { duration: 3000 });

// ❌ BAD: Custom toast component
<app-toast *ngIf="showToast">{{ message }}</app-toast>
```

### 4. Theming & Styling

- **Theming System**: Ensure proper use of Angular Material's theming system (palettes, typography)
- **SCSS Mixins**: Use `@use '@angular/material' as mat;` and theme mixins
- **Color Usage**: Use `mat.get-color-from-palette` or CSS variables derived from the theme
- **Density**: Utilize density subsystems for compact layouts
- **Custom Styles**: Override styles using specific classes, avoiding `::ng-deep` where possible (or using it carefully within encapsulated components)

### 5. Responsive Design

- **Breakpoints**: Use `@angular/cdk/layout` `BreakpointObserver` for responsive logic
- **Project Breakpoints**:
- **Mobile**: `max-width: 768px`
- **Container**: `max-width: 1200px` (use `.page-container` or similar)
- **Flex Layout**: While `flex-layout` is deprecated, use standard CSS Flexbox/Grid with Material components
- **Mobile Support**: Ensure components like `MatSidenav` and `MatDialog` behave correctly on mobile

### 6. Accessibility

- **Built-in A11y**: Leverage Angular Material's built-in accessibility features (ARIA, focus management)
- **CDK A11y**: Use `@angular/cdk/a11y` for focus trapping, live announcers, etc.
- **Keyboard Navigation**: Ensure tab order and keyboard interaction work as expected

### 7. Icons

- **MatIcon**: Use `<mat-icon>` with Material Icons font or SVG icons
- **Registry**: Use `MatIconRegistry` for custom SVG icons

### 8. Common Anti-Patterns to Catch

- ❌ Using native `<button>` instead of `<button mat-button>`
- ❌ Creating custom input wrappers instead of `mat-form-field`
- ❌ Manual ripple effects instead of `matRipple`
- ❌ Custom dropdowns instead of `mat-select` or `mat-menu`
- ❌ Hardcoded colors instead of using theme variables
- ❌ Ignoring accessibility attributes that Material provides
- ❌ Using `::ng-deep` excessively to fight Material styles instead of using density/typography APIs

### 9. When Custom Components Are Acceptable

Custom components are justified when:
- Angular Material genuinely doesn't provide the functionality (e.g., complex scheduler, kanban board)
- The design requirements deviate significantly from Material Design guidelines (though theming should be tried first)
- Performance requires a specialized implementation (e.g., virtual scrolling with complex custom rendering not supported by CDK)

## Review Format

Structure your review with:

1. **Component Audit**: List custom components found and their Material alternatives
2. **Quick Wins**: Easy replacements with immediate benefits
3. **Theming Issues**: Problems with theme/color usage
4. **Code Examples**: Show before/after comparisons

## Suggestions Format

For each custom component, provide:
- **Current Implementation**: Brief description
- **Material Alternative**: Specific component to use
- **Benefits**: Why Material component is better (consistency, a11y, maintenance)
- **Migration**: Code example showing how to migrate

## Context Awareness

- Check the project's Angular Material version
- Consider existing Material usage patterns in the codebase
- Respect project-specific theme configurations

## Balanced Approach

You will be practical and pragmatic:
- Don't force Material where custom is genuinely better
- Consider migration effort vs benefits
- Prioritize high-impact replacements first
- Focus on maintainability and consistency

## Context7 Usage

- **Documentation Lookup**: When you need to verify component APIs, theming mixins, or migration guides for Angular Material v20, **ALWAYS** use the `context7` MCP server.
- **Library ID**: Use `mcp0_resolve-library-id` with query "angular material" to get the correct library ID before fetching docs.
- **Theming**: Use `context7` to look up the latest Material Design 3 theming guidelines if you are unsure about a specific mixin or variable.

## MOST IMPORTANT

- We have a custom theme at src/custom-theme.scss if you are styling components there is where things should happen.
- Awlays poll https://v18.material.angular.dev/guide/theming for new guidelines and https://v18.material.angular.dev/guide/theming#theming-and-style-encapsulation

10. **Official First**:
* **ALWAYS** check official Angular Material documentation for built-in solutions before creating custom wrappers (e.g., `div` containers) or utility classes.
* If a documented pattern exists (e.g., for responsive tables or layouts), use it instead of ad-hoc HTML/CSS.
Use this rule when implementing or reviewing Angular Material UI.

## Apply This Rule
- Building or refactoring UI components with Angular Material
- Replacing custom UI structures with Material components
- Reviewing theme-token and Material API usage

## Do Not Apply This Rule
- Backend-only, security-only, or testing-only tasks
- Non-UI architecture decisions

## Core Guidance
- Prefer native Material components before creating custom UI wrappers.
- Use Material component structure (`mat-card-header`, `mat-card-title`, etc.) instead of ad-hoc div layouts.
- Keep styles token-based (`--mat-sys-*`) and avoid hardcoded colors.
- Use Material typography tokens for text styles.
- Use global dialog conventions; avoid per-dialog panel classes unless documented.

## Common Component Mapping
- Layout: `MatToolbar`, `MatSidenav`, `MatCard`, `MatDivider`
- Inputs: `MatFormField`, `MatInput`, `MatSelect`, `MatDatepicker`
- Data display: `MatTable`, `MatList`, `MatTree`, `MatIcon`
- Feedback: `MatDialog`, `MatSnackBar`, `MatProgressBar`, `MatSpinner`
- Navigation: `MatMenu`, `MatTabs`, `MatStepper`, `MatPaginator`

## Review Output
- List mismatches between custom UI and available Material components.
- Provide direct replacement suggestions.
- Flag theme-token violations and show compliant alternatives.
Loading
Loading