6.3 KiB
6.3 KiB
Plan: League Pages Enhancement
1. Analysis of Current State
Leagues Discovery Page (/leagues)
- Current: Basic grid of league cards with search and category filters.
- Gaps:
- No "Featured" or "Promoted" leagues section.
- Limited metadata in cards (missing next race info, active season status).
- No "Quick Join" or "Follow" actions directly from the list.
- Categories are hardcoded in the client.
League Detail Page (/leagues/[id])
- Current: Tabbed layout (Overview, Schedule, Standings, Roster, Rulebook).
- Gaps:
- Overview: Very static. Missing "Next Race" countdown, "Recent Results" snippet, and "Active Season" progress.
- Schedule: Simple list. Missing "Register" buttons for upcoming races, "View Results" for past races.
- Standings: Basic table. Missing "Trend" indicators (up/down positions), "Last Race" points.
- Roster: Simple list. Missing driver stats (rating, safety, performance).
- Functionality: No "Join League" flow visible in the current barebones implementation (though components exist).
2. Proposed Enhancements
A. Leagues Discovery Page
- Featured Section: Add a top section for high-utilization or promoted infrastructure.
- Enhanced Cards: Include "Next Race" date and "Active Drivers" count.
- Dynamic Categories: Move category definitions to the API or a shared config.
B. League Overview (The "Command Center")
- Next Race Widget: High-visibility countdown to the next scheduled event with a "Register" button.
- Season Progress: Visual bar showing how far along the current season is (e.g., "Race 4 of 12").
- Recent Results Snippet: Top 3 from the last completed race.
- Activity Feed: Integration of
LeagueActivityFeedcomponent to show recent joins, results, and announcements. - Wallet & Sponsorship Preview: For admins, show a summary of league funds and active sponsorship slots using
LeagueSponsorshipsSection. - Stewarding Quick-View: Show pending protests count and a link to the stewarding queue.
C. League Schedule
- Interactive Timeline: Group races by month or season.
- Actionable Items: "Register" for upcoming, "View Results" for completed.
- Race Detail Modals: Use
RaceDetailTemplateor a modal to show track details, weather, and car classes. - Admin Controls: Inline "Edit" or "Reschedule" buttons for authorized users.
D. League Standings
- Trend Indicators: Show position changes since the last race.
- Championship Stats: Integrate
LeagueChampionshipStatsfor wins, podiums, and average finish. - Team Standings: Ensure team-based championships are togglable.
- Drop Weeks Visualization: Clearly mark which races are currently being dropped from a driver's total.
E. League Roster
- Driver Cards: Use a more detailed card format showing GridPilot Rating and recent form.
- Admin Actions: Quick access to "Promote", "Remove", or "Message" for authorized users.
- Join Requests: Integrated
JoinRequestsPanelfor admins to manage pending applications.
F. Rulebook & Governance
- Structured Rules: Use
LeagueRulesPanelto display code of conduct and sporting regulations. - Governance Transparency: Show the stewarding decision mode (Committee vs Single Steward) using
LeagueStewardingSection.
3. UI/UX & Design Streamlining
- Telemetry Aesthetic: Align all league pages with the "Modern Precision" theme (Deep Graphite, Primary Blue, Performance Green).
- Consistent Primitives: Ensure all components use the established UI primitives (
Surface,Stack,Text,Icon). - Responsive Density: Maintain high data density on desktop while ensuring readability on mobile.
4. Data & API Requirements
Core/API Additions
- Next Race Info: API should return the single next upcoming race for a league in the summary/detail DTO.
- Season Progress: Add
totalRacesandcompletedRacesto theLeagueSeasonSummaryDTO. - Standings Trends: Add
positionChange(number) andlastRacePoints(number) toLeagueStandingDTO. - Activity Feed: Ensure the
/leagues/[id]/activityendpoint is fully functional.
View Model Updates
- LeagueSummaryViewModel: Add
nextRaceAt,activeDriversCount. - LeagueDetailViewData: Add
nextRace,seasonProgress,recentResults.
5. Proposed DTO Changes (Technical)
LeagueSeasonSummaryDTO
export class LeagueSeasonSummaryDTO {
// ... existing fields
@ApiProperty()
totalRaces!: number;
@ApiProperty()
completedRaces!: number;
@ApiProperty({ required: false })
nextRaceAt?: Date;
}
LeagueStandingDTO
export class LeagueStandingDTO {
// ... existing fields
@ApiProperty({ description: 'Position change since last race' })
positionChange!: number;
@ApiProperty({ description: 'Points earned in the last race' })
lastRacePoints!: number;
@ApiProperty({ type: [String], description: 'IDs of races that were dropped' })
droppedRaceIds!: string[];
}
LeagueSummaryDTO (or LeagueWithCapacityAndScoringDTO)
export class LeagueWithCapacityAndScoringDTO {
// ... existing fields
@ApiProperty({ required: false })
pendingJoinRequestsCount?: number;
@ApiProperty({ required: false })
pendingProtestsCount?: number;
@ApiProperty({ required: false })
walletBalance?: number;
}
6. Implementation Steps (Todo List)
-
Phase 1: Data Foundation
- Update
LeagueDetailDataandLeagueDetailViewDatainterfaces. - Enhance
LeagueDetailViewDataBuilderto compute next race and season progress. - (Optional) Add mock data to
LeagueServicefor new fields if API isn't ready.
- Update
-
Phase 2: Overview Page Overhaul
- Implement "Next Race" countdown widget.
- Add "Season Progress" component.
- Integrate
LeagueActivityFeed.
-
Phase 3: Schedule & Standings Polish
- Update
LeagueScheduleTemplatewith registration actions. - Enhance
LeagueStandingsTemplatewith trend indicators and stats.
- Update
-
Phase 4: Discovery Page Refinement
- Update
LeaguesTemplatewith a "Featured" section. - Enhance
LeagueCardwith more metadata.
- Update
-
Phase 5: Final Streamlining
- Audit all league pages for theme consistency.
- Ensure mobile responsiveness across all new widgets.