diff --git a/logs/pickleball.log b/logs/pickleball.log index 499137c..8eb350e 100644 --- a/logs/pickleball.log +++ b/logs/pickleball.log @@ -1029,3 +1029,16 @@ Starting Pickleball ELO Tracker Server on port 3000... โž• Add Player: http://localhost:3000/players/new ๐ŸŽพ Record Match: http://localhost:3000/matches/new +๐Ÿ“ Pickleball ELO Tracker v3.0 +============================== + +Starting Pickleball ELO Tracker Server on port 3000... + +โœ… Server running at http://localhost:3000 +๐Ÿ“Š Leaderboard: http://localhost:3000/leaderboard +๐Ÿ“œ Match History: http://localhost:3000/matches +๐Ÿ‘ฅ Players: http://localhost:3000/players +โš–๏ธ Team Balancer: http://localhost:3000/balance +โž• Add Player: http://localhost:3000/players/new +๐ŸŽพ Record Match: http://localhost:3000/matches/new + diff --git a/pickleball-elo b/pickleball-elo index cc9194f..fc67e3a 100755 Binary files a/pickleball-elo and b/pickleball-elo differ diff --git a/src/main.rs b/src/main.rs index 1425bf8..06fa970 100644 --- a/src/main.rs +++ b/src/main.rs @@ -285,9 +285,9 @@ async fn index_handler(State(state): State) -> Html { -
+

๐Ÿ“ Pickleball ELO Tracker

-

Glicko-2 Rating System v3.0

+

Pure ELO Rating System v3.0

@@ -305,6 +305,30 @@ async fn index_handler(State(state): State) -> Html {
{} + +
+

๐Ÿ“Š How Ratings Work

+ +

One unified rating โ€” Singles and doubles matches both contribute to a single ELO rating. Everyone starts at 1500.

+ +

Per-point scoring โ€” Your rating change depends on your actual point performance (points won รท total points), not just whether you won or lost. Winning 11-2 earns more than winning 11-9.

+ +

Smart doubles scoring โ€” In doubles, we calculate your "effective opponent" using:
+ Effective Opponent = Opp1 + Opp2 - Teammate

+ +

This means:

+
    +
  • Strong teammate โ†’ lower effective opponent โ†’ less credit for winning
  • +
  • Weak teammate โ†’ higher effective opponent โ†’ more credit for winning
  • +
+ +

The formula:
+ + Rating Change = 32 ร— (Actual Performance - Expected Performance) +

+ +

Fair, transparent, and no mysterious "volatility" numbers. Just skill vs. expectations.

+
@@ -983,7 +1007,7 @@ async fn new_player_form() -> Html { /// /// **Endpoint:** `POST /players/new` /// -/// **Description:** Processes form submission to add a new player. Initializes with default Glicko-2 ratings (1500) and RD (350). +/// **Description:** Processes form submission to add a new player. Initializes with default ELO ratings (1500) and RD (350). /// /// **Form Fields:** /// - `name` (required): Player name @@ -1065,17 +1089,12 @@ async fn edit_player_form( style="width: 100%; padding: 12px; border: 2px solid #ddd; border-radius: 8px; box-sizing: border-box;">
-
-
- - -
-
- - -
+
+ + + +

Unified rating for all match types

@@ -1254,7 +1273,7 @@ async fn new_match_form(State(state): State) -> Html { Html(html) } -/// Records a new match result and updates all participants' ratings using Glicko-2 +/// Records a new match result and updates all participants' ratings using ELO /// /// **Endpoint:** `POST /matches/new` /// @@ -1976,15 +1995,9 @@ async fn session_preview_handler(

๐ŸŽพ Match Results

{} -
-
-

๐Ÿ“Š Top Singles

- {} -
-
-

๐Ÿ“Š Top Doubles

- {} -
+
+

๐Ÿ“Š Top Players (Unified ELO)

+ {}
@@ -1996,7 +2009,7 @@ async fn session_preview_handler( "#, id, COMMON_CSS, id, nav_html(), already_sent, match_count, recipients.len(), recipients_list, matches_html, &start_time[..16], end_time.as_deref().unwrap_or("In Progress"), - matches_html, singles_list, doubles_list, send_button); + matches_html, singles_list, send_button); Ok(Html(html)) } @@ -2124,19 +2137,16 @@ async fn send_session_email(

๐ŸŽพ Match Results

{} -

๐Ÿ“Š Top Singles

- {}
- -

๐Ÿ“Š Top Doubles

+

๐Ÿ“Š Top Players (Unified ELO)

{}

- Pickleball ELO Tracker - Glicko-2 Rating System + Pickleball ELO Tracker - Pure ELO Rating System

- "#, matches_email_html, singles_html, doubles_html); + "#, matches_email_html, singles_html); // Send emails using lettre (already in dependencies) use lettre::{Message, SmtpTransport, Transport}; @@ -2616,11 +2626,7 @@ async fn daily_summary_handler(
-

๐Ÿ“Š Top Singles

- {} -
-
-

๐Ÿ“Š Top Doubles

+

๐Ÿ“Š Top Players (Unified ELO)

{}
@@ -2631,7 +2637,7 @@ async fn daily_summary_handler( "#, COMMON_CSS, nav_html(), target_date, matches.len(), recipients.len(), - matches_html, players_html, singles_labels, singles_datasets, doubles_labels, doubles_datasets, heatmap_html, recipients_html, target_date, matches_html, singles_list, doubles_list, send_button); + matches_html, players_html, singles_labels, singles_datasets, doubles_labels, doubles_datasets, heatmap_html, recipients_html, target_date, matches_html, singles_list, send_button); Html(html) } @@ -3475,7 +3481,7 @@ async fn daily_public_handler( {}