Add garish pickleball button + static summary page
- Rainbow gradient animated button on homepage (Comic Sans, obviously) - Static pickleball daily summary at /pickleball.html - Enable unsafe HTML rendering for inline styles - Override RSS template to fix theme error
This commit is contained in:
parent
b7fa5c5d1f
commit
c21cc75b4f
@ -5,6 +5,32 @@ title = ''
|
||||
+++
|
||||

|
||||
|
||||
<div style="text-align: center; margin: 20px 0;">
|
||||
<a href="/pickleball.html" style="
|
||||
display: inline-block;
|
||||
background: linear-gradient(45deg, #ff6b6b, #feca57, #48dbfb, #ff9ff3, #ff6b6b);
|
||||
background-size: 300% 300%;
|
||||
animation: gradient-shift 3s ease infinite;
|
||||
color: #000;
|
||||
font-family: 'Comic Sans MS', cursive;
|
||||
font-size: 24px;
|
||||
font-weight: bold;
|
||||
padding: 15px 30px;
|
||||
border-radius: 50px;
|
||||
text-decoration: none;
|
||||
box-shadow: 0 4px 15px rgba(255,107,107,0.4);
|
||||
transform: rotate(-2deg);
|
||||
border: 3px dashed #000;
|
||||
">🏓 PICKLEBALL STATS 🏓</a>
|
||||
</div>
|
||||
<style>
|
||||
@keyframes gradient-shift {
|
||||
0% { background-position: 0% 50%; }
|
||||
50% { background-position: 100% 50%; }
|
||||
100% { background-position: 0% 50%; }
|
||||
}
|
||||
</style>
|
||||
|
||||
## Welcome!
|
||||
|
||||
I'm Dane Sabo, a Mechanical Engineering PhD student at the University of Pittsburgh with a focus on control systems. When I'm not researching, you can find me riding my Honda CRF dual sport around Pittsburgh.
|
||||
|
||||
@ -21,3 +21,11 @@ weight = 8
|
||||
url = "/cv.pdf"
|
||||
|
||||
|
||||
|
||||
[markup]
|
||||
[markup.goldmark]
|
||||
[markup.goldmark.renderer]
|
||||
unsafe = true
|
||||
|
||||
# Disable RSS to avoid theme error
|
||||
disableKinds = ["RSS"]
|
||||
|
||||
1
layouts/_default/rss.xml
Normal file
1
layouts/_default/rss.xml
Normal file
@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel></channel></rss>
|
||||
209
static/pickleball.html
Normal file
209
static/pickleball.html
Normal file
@ -0,0 +1,209 @@
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Pickleball Daily Summary - 2026-02-24</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif;
|
||||
background: linear-gradient(135deg, #003594 0%, #001a4d 100%);
|
||||
padding: 20px;
|
||||
margin: 0;
|
||||
min-height: 100vh;
|
||||
}
|
||||
.container {
|
||||
max-width: 900px;
|
||||
margin: 0 auto;
|
||||
background: white;
|
||||
padding: 30px;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 20px 60px rgba(0,0,0,0.3);
|
||||
}
|
||||
h1 { color: #003594; text-align: center; }
|
||||
h2 { color: #003594; border-bottom: 3px solid #FFB81C; padding-bottom: 10px; margin-top: 30px; }
|
||||
table { width: 100%; border-collapse: collapse; margin: 15px 0; }
|
||||
th, td { padding: 10px; text-align: left; border-bottom: 1px solid #eee; }
|
||||
th { background: #003594; color: white; }
|
||||
tr:hover { background: #f9f9f9; }
|
||||
.stats-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
|
||||
gap: 15px;
|
||||
margin: 20px 0;
|
||||
}
|
||||
.stat-card {
|
||||
background: #f0f5ff;
|
||||
padding: 20px;
|
||||
border-radius: 8px;
|
||||
text-align: center;
|
||||
}
|
||||
.stat-value { font-size: 28px; font-weight: bold; color: #003594; }
|
||||
.stat-label { font-size: 12px; color: #666; margin-top: 5px; }
|
||||
.leaderboards { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-top: 15px; }
|
||||
.leaderboard { background: #f9f9f9; padding: 15px; border-radius: 8px; }
|
||||
.leaderboard h3 { margin: 0 0 10px 0; color: #003594; font-size: 14px; }
|
||||
.date-nav { text-align: center; margin-bottom: 20px; }
|
||||
.date-nav a {
|
||||
display: inline-block; padding: 8px 16px; margin: 0 5px;
|
||||
background: #003594; color: white; text-decoration: none;
|
||||
border-radius: 6px; font-size: 14px;
|
||||
}
|
||||
.date-nav a:hover { background: #FFB81C; color: #003594; }
|
||||
.date-nav span { font-size: 18px; font-weight: bold; color: #003594; margin: 0 15px; }
|
||||
.footer { text-align: center; margin-top: 30px; color: #666; font-size: 12px; }
|
||||
@media (max-width: 600px) {
|
||||
.leaderboards { grid-template-columns: 1fr; }
|
||||
}
|
||||
</style>
|
||||
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<h1>🏓 Pickleball Daily Summary</h1>
|
||||
|
||||
<div class="date-nav">
|
||||
<a href="/daily/public?date=2026-02-23">← Prev</a>
|
||||
<span>2026-02-24</span>
|
||||
<a href="/daily/public?date=2026-02-25">Next →</a>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="stats-grid">
|
||||
<div class="stat-card">
|
||||
<div class="stat-value">8</div>
|
||||
<div class="stat-label">Matches</div>
|
||||
</div>
|
||||
<div class="stat-card">
|
||||
<div class="stat-value">5</div>
|
||||
<div class="stat-label">Players</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2>🎾 Match Results</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr><th>Time</th><th>Type</th><th>Team 1</th><th>Score</th><th>Team 2</th></tr>
|
||||
</thead>
|
||||
<tbody><tr>
|
||||
<td>07:24</td>
|
||||
<td><strong>DOUBLES</strong></td>
|
||||
<td style="color:#28a745;font-weight:bold;">Dane Sabo & David Pabst</td>
|
||||
<td style="text-align:center;">11 - 4</td>
|
||||
<td style="color:#666;">Eliana Crew & Krzysztof Radziszeski </td>
|
||||
</tr><tr>
|
||||
<td>07:36</td>
|
||||
<td><strong>DOUBLES</strong></td>
|
||||
<td style="color:#28a745;font-weight:bold;">Eliana Crew & Eliana Crew</td>
|
||||
<td style="text-align:center;">12 - 10</td>
|
||||
<td style="color:#666;">Dane Sabo & Krzysztof Radziszeski </td>
|
||||
</tr><tr>
|
||||
<td>07:50</td>
|
||||
<td><strong>DOUBLES</strong></td>
|
||||
<td style="color:#666;">Andrew Stricklin & Dane Sabo</td>
|
||||
<td style="text-align:center;">6 - 11</td>
|
||||
<td style="color:#28a745;font-weight:bold;">Eliana Crew & Krzysztof Radziszeski </td>
|
||||
</tr><tr>
|
||||
<td>08:01</td>
|
||||
<td><strong>DOUBLES</strong></td>
|
||||
<td style="color:#666;">Dane Sabo & Krzysztof Radziszeski </td>
|
||||
<td style="text-align:center;">7 - 11</td>
|
||||
<td style="color:#28a745;font-weight:bold;">Andrew Stricklin & David Pabst</td>
|
||||
</tr><tr>
|
||||
<td>08:04</td>
|
||||
<td><strong>DOUBLES</strong></td>
|
||||
<td style="color:#666;">Dane Sabo & David Pabst</td>
|
||||
<td style="text-align:center;">5 - 11</td>
|
||||
<td style="color:#28a745;font-weight:bold;">Andrew Stricklin & Krzysztof Radziszeski </td>
|
||||
</tr><tr>
|
||||
<td>08:23</td>
|
||||
<td><strong>DOUBLES</strong></td>
|
||||
<td style="color:#28a745;font-weight:bold;">Dane Sabo & David Pabst</td>
|
||||
<td style="text-align:center;">13 - 11</td>
|
||||
<td style="color:#666;">Andrew Stricklin & Krzysztof Radziszeski </td>
|
||||
</tr><tr>
|
||||
<td>08:38</td>
|
||||
<td><strong>DOUBLES</strong></td>
|
||||
<td style="color:#666;">Dane Sabo & David Pabst</td>
|
||||
<td style="text-align:center;">10 - 12</td>
|
||||
<td style="color:#28a745;font-weight:bold;">Andrew Stricklin & Krzysztof Radziszeski </td>
|
||||
</tr><tr>
|
||||
<td>08:47</td>
|
||||
<td><strong>DOUBLES</strong></td>
|
||||
<td style="color:#666;">Dane Sabo & David Pabst</td>
|
||||
<td style="text-align:center;">3 - 7</td>
|
||||
<td style="color:#28a745;font-weight:bold;">Andrew Stricklin & Krzysztof Radziszeski </td>
|
||||
</tr></tbody>
|
||||
</table>
|
||||
|
||||
<h2>📈 Player Performance</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr><th>Player</th><th>Singles Δ</th><th>Doubles Δ</th><th>Total</th></tr>
|
||||
</thead>
|
||||
<tbody><tr><td>Andrew Stricklin</td><td style='text-align:center;'>—</td><td style='text-align:center;'><span style='color:#28a745;'>+77</span></td><td style='text-align:center;'><span style='color:#28a745;font-weight:bold;'>+77</span></td></tr><tr><td>Eliana Crew</td><td style='text-align:center;'>—</td><td style='text-align:center;'><span style='color:#28a745;'>+67</span></td><td style='text-align:center;'><span style='color:#28a745;font-weight:bold;'>+67</span></td></tr><tr><td>Krzysztof Radziszeski </td><td style='text-align:center;'>—</td><td style='text-align:center;'><span style='color:#28a745;'>+3</span></td><td style='text-align:center;'><span style='color:#28a745;font-weight:bold;'>+3</span></td></tr><tr><td>David Pabst</td><td style='text-align:center;'>—</td><td style='text-align:center;'><span style='color:#28a745;'>+1</span></td><td style='text-align:center;'><span style='color:#28a745;font-weight:bold;'>+1</span></td></tr><tr><td>Dane Sabo</td><td style='text-align:center;'>—</td><td style='text-align:center;'><span style='color:#dc3545;'>-148</span></td><td style='text-align:center;'><span style='color:#dc3545;font-weight:bold;'>-148</span></td></tr></tbody>
|
||||
</table>
|
||||
|
||||
<h2>📈 ELO Journey</h2>
|
||||
<div style="background:#fafafa;padding:15px;border-radius:8px;margin-bottom:15px;">
|
||||
<canvas id="singlesChart" height="150"></canvas>
|
||||
</div>
|
||||
<div style="background:#fafafa;padding:15px;border-radius:8px;margin-bottom:20px;">
|
||||
<canvas id="doublesChart" height="150"></canvas>
|
||||
</div>
|
||||
<script>
|
||||
if ([].length > 0) {
|
||||
new Chart(document.getElementById('singlesChart'), {
|
||||
type: 'line',
|
||||
data: { labels: [], datasets: [] },
|
||||
options: {
|
||||
responsive: true,
|
||||
plugins: {
|
||||
title: { display: true, text: 'Singles Rating', font: { size: 14 } },
|
||||
legend: { position: 'bottom', labels: { boxWidth: 12, font: { size: 10 } } }
|
||||
},
|
||||
scales: { y: { title: { display: true, text: 'Rating' } } }
|
||||
}
|
||||
});
|
||||
}
|
||||
if (["07:24","07:36","07:50","08:01","08:04","08:23","08:38","08:47"].length > 0) {
|
||||
new Chart(document.getElementById('doublesChart'), {
|
||||
type: 'line',
|
||||
data: { labels: ["07:24","07:36","07:50","08:01","08:04","08:23","08:38","08:47"], datasets: [{"label":"Andrew Stricklin","data":[1500.0,1500.0,1508.7,1546.5,1548.0,1513.1,1548.0,1585.8],"borderColor":"#003594","backgroundColor":"#003594","tension":0.3,"fill":false},{"label":"Dane Sabo","data":[1421.5,1386.5,1265.8,1228.0,1305.1,1340.0,1305.1,1267.3],"borderColor":"#FFB81C","backgroundColor":"#FFB81C","tension":0.3,"fill":false},{"label":"David Pabst","data":[1702.2,1702.2,1702.2,1740.0,1699.3,1734.2,1699.3,1661.5],"borderColor":"#dc3545","backgroundColor":"#dc3545","tension":0.3,"fill":false},{"label":"Eliana Crew","data":[1422.9,1492.7,1532.0,1532.0,1532.0,1532.0,1532.0,1532.0],"borderColor":"#28a745","backgroundColor":"#28a745","tension":0.3,"fill":false},{"label":"Krzysztof Radziszeski ","data":[1452.0,1417.1,1497.1,1459.3,1457.8,1422.9,1457.8,1495.6],"borderColor":"#6f42c1","backgroundColor":"#6f42c1","tension":0.3,"fill":false},] },
|
||||
options: {
|
||||
responsive: true,
|
||||
plugins: {
|
||||
title: { display: true, text: 'Doubles Rating', font: { size: 14 } },
|
||||
legend: { position: 'bottom', labels: { boxWidth: 12, font: { size: 10 } } }
|
||||
},
|
||||
scales: { y: { title: { display: true, text: 'Rating' } } }
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<h2>📊 Current Leaderboard</h2>
|
||||
<div class="leaderboards">
|
||||
<div class="leaderboard">
|
||||
<h3>🎾 Singles</h3>
|
||||
<div>🥇1. Krzysztof Radziszeski - 1619</div><div>🥈2. Andrew Stricklin - 1583</div><div>🥉3. Jacklyn Wyszynski - 1500</div><div>4. Eliana Crew - 1465</div><div>5. David Pabst - 1462</div>
|
||||
</div>
|
||||
<div class="leaderboard">
|
||||
<h3>👥 Doubles</h3>
|
||||
<div>🥇1. David Pabst - 1661</div><div>🥈2. Andrew Stricklin - 1586</div><div>🥉3. Eliana Crew - 1532</div><div>4. Krzysztof Radziszeski - 1496</div><div>5. Jacklyn Wyszynski - 1494</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2>🤝 Partner Synergy</h2>
|
||||
<p style="color:#666;font-size:13px;margin-bottom:10px;">Win rate when partnered together (all-time doubles)</p>
|
||||
<div style='display:grid;grid-template-columns:120px repeat(6, 1fr);gap:2px;font-size:12px;'><div></div><div style='text-align:center;font-weight:bold;padding:5px;writing-mode:vertical-rl;transform:rotate(180deg);'>Andrew</div><div style='text-align:center;font-weight:bold;padding:5px;writing-mode:vertical-rl;transform:rotate(180deg);'>Dane</div><div style='text-align:center;font-weight:bold;padding:5px;writing-mode:vertical-rl;transform:rotate(180deg);'>David</div><div style='text-align:center;font-weight:bold;padding:5px;writing-mode:vertical-rl;transform:rotate(180deg);'>Eliana</div><div style='text-align:center;font-weight:bold;padding:5px;writing-mode:vertical-rl;transform:rotate(180deg);'>Jacklyn</div><div style='text-align:center;font-weight:bold;padding:5px;writing-mode:vertical-rl;transform:rotate(180deg);'>Krzysztof</div><div style='font-weight:bold;padding:5px;text-align:right;'>Andrew</div><div style='background:#333;'></div><div style='background:rgb(255,0,0);text-align:center;padding:8px;' title='Andrew Stricklin + Dane Sabo: 0%'>0%</div><div style='background:rgb(0,200,0);text-align:center;padding:8px;' title='Andrew Stricklin + David Pabst: 100%'>100%</div><div style='background:#eee;text-align:center;padding:8px;'>—</div><div style='background:#eee;text-align:center;padding:8px;'>—</div><div style='background:rgb(170,200,170);text-align:center;padding:8px;' title='Andrew Stricklin + Krzysztof Radziszeski : 67%'>67%</div><div style='font-weight:bold;padding:5px;text-align:right;'>Dane</div><div style='background:rgb(255,0,0);text-align:center;padding:8px;' title='Dane Sabo + Andrew Stricklin: 0%'>0%</div><div style='background:#333;'></div><div style='background:rgb(255,200,255);text-align:center;padding:8px;' title='Dane Sabo + David Pabst: 50%'>50%</div><div style='background:rgb(255,0,0);text-align:center;padding:8px;' title='Dane Sabo + Eliana Crew: 0%'>0%</div><div style='background:rgb(255,0,0);text-align:center;padding:8px;' title='Dane Sabo + Jacklyn Wyszynski: 0%'>0%</div><div style='background:rgb(255,0,0);text-align:center;padding:8px;' title='Dane Sabo + Krzysztof Radziszeski : 0%'>0%</div><div style='font-weight:bold;padding:5px;text-align:right;'>David</div><div style='background:rgb(0,200,0);text-align:center;padding:8px;' title='David Pabst + Andrew Stricklin: 100%'>100%</div><div style='background:rgb(255,200,255);text-align:center;padding:8px;' title='David Pabst + Dane Sabo: 50%'>50%</div><div style='background:#333;'></div><div style='background:#eee;text-align:center;padding:8px;'>—</div><div style='background:rgb(0,200,0);text-align:center;padding:8px;' title='David Pabst + Jacklyn Wyszynski: 100%'>100%</div><div style='background:#eee;text-align:center;padding:8px;'>—</div><div style='font-weight:bold;padding:5px;text-align:right;'>Eliana</div><div style='background:#eee;text-align:center;padding:8px;'>—</div><div style='background:rgb(255,0,0);text-align:center;padding:8px;' title='Eliana Crew + Dane Sabo: 0%'>0%</div><div style='background:#eee;text-align:center;padding:8px;'>—</div><div style='background:#333;'></div><div style='background:#eee;text-align:center;padding:8px;'>—</div><div style='background:rgb(255,200,255);text-align:center;padding:8px;' title='Eliana Crew + Krzysztof Radziszeski : 50%'>50%</div><div style='font-weight:bold;padding:5px;text-align:right;'>Jacklyn</div><div style='background:#eee;text-align:center;padding:8px;'>—</div><div style='background:rgb(255,0,0);text-align:center;padding:8px;' title='Jacklyn Wyszynski + Dane Sabo: 0%'>0%</div><div style='background:rgb(0,200,0);text-align:center;padding:8px;' title='Jacklyn Wyszynski + David Pabst: 100%'>100%</div><div style='background:#eee;text-align:center;padding:8px;'>—</div><div style='background:#333;'></div><div style='background:rgb(255,0,0);text-align:center;padding:8px;' title='Jacklyn Wyszynski + Krzysztof Radziszeski : 0%'>0%</div><div style='font-weight:bold;padding:5px;text-align:right;'>Krzysztof</div><div style='background:rgb(170,200,170);text-align:center;padding:8px;' title='Krzysztof Radziszeski + Andrew Stricklin: 67%'>67%</div><div style='background:rgb(255,0,0);text-align:center;padding:8px;' title='Krzysztof Radziszeski + Dane Sabo: 0%'>0%</div><div style='background:#eee;text-align:center;padding:8px;'>—</div><div style='background:rgb(255,200,255);text-align:center;padding:8px;' title='Krzysztof Radziszeski + Eliana Crew: 50%'>50%</div><div style='background:rgb(255,0,0);text-align:center;padding:8px;' title='Krzysztof Radziszeski + Jacklyn Wyszynski: 0%'>0%</div><div style='background:#333;'></div></div>
|
||||
|
||||
<div class="footer">
|
||||
Pickleball ELO Tracker · Glicko-2 Rating System · Hail to Pitt! 🐆
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user