export type SkillLevel = 'beginner' | 'intermediate' | 'advanced' | 'pro'; export interface TeamLeaderboardItemViewModel { id: string; name: string; memberCount: number; rating: number | null; totalWins: number; totalRaces: number; performanceLevel: SkillLevel; isRecruiting: boolean; createdAt: Date; description?: string; specialization?: 'endurance' | 'sprint' | 'mixed'; region?: string; languages?: string[]; } export interface TeamsLeaderboardViewModel { teams: TeamLeaderboardItemViewModel[]; recruitingCount: number; /** * Teams grouped by their skill level for UI display. */ groupsBySkillLevel: Record; /** * Precomputed top teams ordered for leaderboard preview. */ topTeams: TeamLeaderboardItemViewModel[]; } export interface ITeamsLeaderboardPresenter { present(teams: any[], recruitingCount: number): void; getViewModel(): TeamsLeaderboardViewModel; }