Files changed (1) hide show
  1. app.py +26 -48
app.py CHANGED
@@ -1194,59 +1194,37 @@ def inbox_page():
1194
  def leaderboard_page():
1195
  st.header("๐Ÿ† Leaderboard")
1196
 
1197
- rows = unified_get("leaderboard") or []
1198
- if not rows:
1199
- st.info("No scores yet. Play some games first!")
1200
- return
1201
 
1202
- # Convert to DataFrame
1203
- df = pd.DataFrame(rows)
 
1204
 
1205
- # Ensure columns exist
1206
- for col in ["name", "score", "game_id", "avatar", "timestamp"]:
1207
- if col not in df.columns:
1208
- df[col] = ""
1209
 
1210
- # ---------------- Weekly Leaderboard ----------------
1211
- st.subheader("This Week โ€” Top 10")
1212
- now = datetime.utcnow()
1213
- start_of_week = now - timedelta(days=now.weekday())
1214
- df['ts'] = pd.to_datetime(df['timestamp'], errors='coerce')
1215
- weekly_df = df[df['ts'] >= start_of_week].copy()
 
1216
 
1217
- if weekly_df.empty:
1218
- st.info("No scores recorded this week.")
 
 
 
1219
  else:
1220
- weekly_df = weekly_df.sort_values(by='score', ascending=False).head(10)
1221
- for i, row in weekly_df.iterrows():
1222
- user_marker = "๐Ÿ‘ˆ You" if row['name'] == st.session_state.get('username') else ""
1223
- st.write(f"{i+1}. {row.get('avatar','๐ŸŽฎ')} **{row['name']}** (Game {row['game_id']}) โ€” {row['score']} pts {user_marker}")
1224
-
1225
- st.markdown("---")
1226
-
1227
- # ---------------- All-time Leaderboard ----------------
1228
- st.subheader("All-Time Top 10")
1229
- alltime_df = df.sort_values(by='score', ascending=False).head(10)
1230
- for i, row in alltime_df.iterrows():
1231
- user_marker = "๐Ÿ‘ˆ You" if row['name'] == st.session_state.get('username') else ""
1232
- st.write(f"{i+1}. {row.get('avatar','๐ŸŽฎ')} **{row['name']}** (Game {row['game_id']}) โ€” {row['score']} pts {user_marker}")
1233
-
1234
- st.markdown("---")
1235
-
1236
- # Optional: allow search by username
1237
- search_user = st.text_input("Search leaderboard by username")
1238
- if search_user:
1239
- search_df = df[df['name'].str.lower() == search_user.lower()]
1240
- if search_df.empty:
1241
- st.info(f"No scores found for {search_user}.")
1242
- else:
1243
- st.subheader(f"Scores for {search_user}")
1244
- for i, row in search_df.iterrows():
1245
- st.write(f"Game {row['game_id']} โ€” {row['score']} pts โ€” {row.get('avatar','๐ŸŽฎ')} โ€” {row['timestamp']}")
1246
-
1247
-
1248
-
1249
-
1250
  def get_weekly_leaderboard(limit=10):
1251
  rows = unified_get("/leaderboard") or []
1252
  one_week_ago = datetime.utcnow() - timedelta(days=7)
 
1194
  def leaderboard_page():
1195
  st.header("๐Ÿ† Leaderboard")
1196
 
1197
+ # Get leaderboard data
1198
+ leaderboard = unified_get("leaderboard") or []
 
 
1199
 
1200
+ if not leaderboard:
1201
+ st.info("No scores yet.")
1202
+ return
1203
 
1204
+ # Sort by score descending
1205
+ leaderboard = sorted(leaderboard, key=lambda x: x.get("score", 0), reverse=True)
 
 
1206
 
1207
+ # Display top 10
1208
+ st.subheader("Top Players")
1209
+ for i, row in enumerate(leaderboard[:10], 1):
1210
+ st.write(
1211
+ f"{i}. {row.get('avatar','๐ŸŽฎ')} **{row.get('name','Guest')}** "
1212
+ f"(Game {row.get('game_id','')}) โ€” {row.get('score',0)} pts โ€” {row.get('percentage',0)}%"
1213
+ )
1214
 
1215
+ # Weekly leaderboard (optional)
1216
+ st.subheader("Weekly Leaderboard (Top 10)")
1217
+ week_leaderboard = [r for r in leaderboard if datetime.fromisoformat(r.get("timestamp", now_iso())).isocalendar()[1] == datetime.now().isocalendar()[1]]
1218
+ if not week_leaderboard:
1219
+ st.info("No scores yet this week.")
1220
  else:
1221
+ week_leaderboard = sorted(week_leaderboard, key=lambda x: x.get("score",0), reverse=True)
1222
+ for i, r in enumerate(week_leaderboard[:10], 1):
1223
+ st.write(
1224
+ f"{i}. {r.get('avatar','๐ŸŽฎ')} **{r.get('name','Guest')}** "
1225
+ f"(Game {r.get('game_id','')}) โ€” {r.get('score',0)} pts"
1226
+ )
1227
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1228
  def get_weekly_leaderboard(limit=10):
1229
  rows = unified_get("/leaderboard") or []
1230
  one_week_ago = datetime.utcnow() - timedelta(days=7)