Sync: 2026-03-29 00:00
This commit is contained in:
parent
c21cc75b4f
commit
8bd59ec46d
@ -3,24 +3,27 @@ date = '2025-03-19T08:44:50-04:00'
|
||||
draft = false
|
||||
title = ''
|
||||
+++
|
||||

|
||||
<div style="text-align: center; margin-bottom: 20px;">
|
||||
<img src="images/journey_home.png" alt="The Journey Home by Matthew Wong" style="max-width: 100%;">
|
||||
<p style="font-size: 14px; color: #666; margin-top: 8px; font-style: italic;">"The Journey Home" — Matthew Wong, 2017</p>
|
||||
</div>
|
||||
|
||||
<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: linear-gradient(45deg, #8b4a4a, #8c7a3d, #3d7a8c, #7a5278, #8b4a4a);
|
||||
background-size: 300% 300%;
|
||||
animation: gradient-shift 3s ease infinite;
|
||||
color: #000;
|
||||
color: #f0e6d3;
|
||||
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);
|
||||
box-shadow: 0 4px 15px rgba(100,60,60,0.5);
|
||||
transform: rotate(-2deg);
|
||||
border: 3px dashed #000;
|
||||
border: 3px dashed #5a4a4a;
|
||||
">🏓 PICKLEBALL STATS 🏓</a>
|
||||
</div>
|
||||
<style>
|
||||
|
||||
182
content/blog/pickleball-elo-system.md
Normal file
182
content/blog/pickleball-elo-system.md
Normal file
@ -0,0 +1,182 @@
|
||||
---
|
||||
title: "I Built a Rating System for My Pickleball League (And Definitely Didn't Cook the Books)"
|
||||
date: 2026-02-26
|
||||
draft: true
|
||||
tags: ["pickleball", "rating systems", "ELO", "statistics"]
|
||||
categories: ["Projects", "Recreation"]
|
||||
---
|
||||
|
||||
After running my pickleball league with Glicko-2 for over a month, I realized the system had problems. So I did what any reasonable person would do: I threw it out and rebuilt it from scratch with an ELO system.
|
||||
|
||||
And yes, I happen to be the biggest beneficiary of the change. Coincidence? Probably. Let me explain the math, and you can be the judge.
|
||||
|
||||
## The Problem: Glicko-2 Was Overkill
|
||||
|
||||
Glicko-2 is a sophisticated rating system designed for competitive chess. It tracks three values per player:
|
||||
|
||||
- **Rating** — Your skill estimate (default: 1500)
|
||||
- **Rating Deviation** — How *uncertain* the system is about your skill
|
||||
- **Volatility** — How *consistent* you are
|
||||
|
||||
The math involves converting to different scales, computing probabilities with hyperbolic functions, and solving iteratively for new volatility. It's clever, but for a casual league of six players, it's like bringing a sports car to a parking lot.
|
||||
|
||||
But the real problem was this: I added a *margin bonus* to account for wins by different margins (winning 11-9 vs 11-2). The formula?
|
||||
|
||||
```
|
||||
weighted_score = base_score + tanh(margin/11 × 0.3) × (base_score - 0.5)
|
||||
```
|
||||
|
||||
**Translation:** I took the hyperbolic tangent of a fraction, multiplied by an arbitrary constant (why 0.3? No particular reason), and called it science.
|
||||
|
||||
This is what's known as "making stuff up." It had no theoretical basis and was impossible to explain to players.
|
||||
|
||||
## The Doubles Problem
|
||||
|
||||
The old system calculated team ratings by averaging both partners' ratings. Sounds reasonable, right?
|
||||
|
||||
Until you think about it: If you (1400) play with a strong partner (1700) against two 1550s, the system thinks it's an even match. But *you* were carried by a stronger player! Winning that match shouldn't boost your rating as much as winning with a weaker partner.
|
||||
|
||||
The system didn't account for partner strength, making it unfair for everyone.
|
||||
|
||||
## Enter: Pure ELO
|
||||
|
||||
ELO is elegantly simple. Every player has *one number* representing their skill. When two players compete:
|
||||
|
||||
1. Calculate the probability that one player beats the other based on rating difference
|
||||
2. Compare expected performance to actual performance
|
||||
3. Adjust ratings based on the difference
|
||||
|
||||
The key formula is:
|
||||
|
||||
```
|
||||
Expected Win Probability = 1 / (1 + 10^((opponent_rating - your_rating) / 400))
|
||||
```
|
||||
|
||||
If you're 1500 and your opponent is 1500, you should win 50% of the time. If you're 1600 and they're 1500, you should win about 64% of the time. Simple.
|
||||
|
||||
After a match:
|
||||
|
||||
```
|
||||
Rating Change = K × (Actual Performance - Expected Performance)
|
||||
```
|
||||
|
||||
Where `K = 32` (how much weight each match carries) and `Actual Performance` is your *per-point performance*:
|
||||
|
||||
```
|
||||
Actual Performance = Points Scored / Total Points Played
|
||||
```
|
||||
|
||||
Win 11-9? That's 0.55 (55% of points). Win 11-2? That's 0.846 (84.6%). This captures match quality far better than binary win/loss.
|
||||
|
||||
## The Secret Sauce: The Effective Opponent Formula
|
||||
|
||||
In doubles, we use:
|
||||
|
||||
```
|
||||
Effective Opponent Rating = Opponent1 + Opponent2 - Your Teammate
|
||||
```
|
||||
|
||||
**Why this works:**
|
||||
|
||||
If your teammate is strong, the effective opponent rating drops—because your teammate made the match easier. If your teammate is weak, the effective opponent rating rises—because you were undermanned.
|
||||
|
||||
Beating 1500-rated opponents with a 1600-rated partner? Effective opponent: 1400. You gain less because your partner carried you.
|
||||
|
||||
Beating 1500-rated opponents with a 1400-rated partner? Effective opponent: 1600. You gain more because you did heavy lifting.
|
||||
|
||||
This is *fair*.
|
||||
|
||||
## The Migration: Before and After
|
||||
|
||||
Here's where things get spicy. I replayed all 29 historical matches through the new ELO system:
|
||||
|
||||
<table style="width: 100%; border-collapse: collapse; margin: 20px 0;">
|
||||
<tr style="background-color: #f0f0f0;">
|
||||
<th style="border: 1px solid #ddd; padding: 10px; text-align: left;">Player</th>
|
||||
<th style="border: 1px solid #ddd; padding: 10px; text-align: right;">Old Glicko-2</th>
|
||||
<th style="border: 1px solid #ddd; padding: 10px; text-align: right;">New ELO</th>
|
||||
<th style="border: 1px solid #ddd; padding: 10px; text-align: right;">Change</th>
|
||||
<th style="border: 1px solid #ddd; padding: 10px; text-align: right;">Matches</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="border: 1px solid #ddd; padding: 10px;">Andrew Stricklin</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1651</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1538</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;"><span style="color: #c80000;">−113</span></td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">19</td>
|
||||
</tr>
|
||||
<tr style="background-color: #fafafa;">
|
||||
<td style="border: 1px solid #ddd; padding: 10px;">David Pabst</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1562</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1522</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;"><span style="color: #c80000;">−40</span></td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">11</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="border: 1px solid #ddd; padding: 10px;">Jacklyn Wyszynski</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1557</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1514</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;"><span style="color: #c80000;">−43</span></td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">9</td>
|
||||
</tr>
|
||||
<tr style="background-color: #fafafa;">
|
||||
<td style="border: 1px solid #ddd; padding: 10px;">Eliana Crew</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1485</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1497</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;"><span style="color: #00640a;">+11</span></td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">13</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="border: 1px solid #ddd; padding: 10px;">Krzysztof Radziszeski</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1473</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1476</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;"><span style="color: #00640a;">+3</span></td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">25</td>
|
||||
</tr>
|
||||
<tr style="background-color: #fafafa;">
|
||||
<td style="border: 1px solid #ddd; padding: 10px;"><strong>Dane Sabo</strong></td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1290</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1449</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;"><strong><span style="color: #00640a;">+159</span></strong></td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">25</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### Observations
|
||||
|
||||
**The Rating Spread Compressed**
|
||||
|
||||
The old system spread players across 361 rating points. The new system compresses them into 89 points. This makes sense—we're a recreational group, not chess grandmasters. The new system rates us fairly within a tighter band.
|
||||
|
||||
**The Winners**
|
||||
|
||||
- **Dane Sabo**: +159 points. The old system penalized him for losses with weaker partners. The effective opponent formula gives credit for "carrying." (Purely coincidental that I benefit from my own math.)
|
||||
- **Eliana Crew**: +11 points
|
||||
- **Krzysztof Radziszeski**: +3 points
|
||||
|
||||
**The Losers**
|
||||
|
||||
- **Andrew Stricklin**: −113 points. Still ranked #1, but the old system over-credited wins with strong partners.
|
||||
- **Jacklyn Wyszynski**: −43 points
|
||||
- **David Pabst**: −40 points
|
||||
|
||||
## A Note on Conflicts of Interest
|
||||
|
||||
You may notice that the system designer (me) is also the biggest beneficiary of the new ratings, gaining a convenient 159 points.
|
||||
|
||||
I want to assure you this is *purely coincidental* and the result of *rigorous mathematical analysis*, not at all influenced by the fact that I was tired of being ranked last.
|
||||
|
||||
The new formulas are based on *sound theoretical principles* that just *happen* to conclude I was being unfairly penalized all along.
|
||||
|
||||
*Trust the math.* 😉
|
||||
|
||||
## Why This System Works
|
||||
|
||||
**For a small league:**
|
||||
- Simple to understand (one rating per player)
|
||||
- Fair to individual skill (per-point scoring)
|
||||
- Respects partnership (effective opponent formula)
|
||||
- Transparent (you can calculate rating changes yourself)
|
||||
- Fast convergence (5-10 matches to stabilize a rating)
|
||||
|
||||
**The bottom line:** Your rating now reflects your true skill more accurately than before. Even if it means Dane finally looks respectable.
|
||||
393
content/cv.md
Normal file
393
content/cv.md
Normal file
@ -0,0 +1,393 @@
|
||||
+++
|
||||
date = '2026-03-24'
|
||||
draft = false
|
||||
title = 'CV'
|
||||
+++
|
||||
|
||||
<style>
|
||||
.cv-container {
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
font-family: 'Source Sans Pro', -apple-system, BlinkMacSystemFont, sans-serif;
|
||||
}
|
||||
|
||||
.cv-header {
|
||||
text-align: center;
|
||||
margin-bottom: 2em;
|
||||
padding-bottom: 1.5em;
|
||||
border-bottom: 2px solid rgba(100, 150, 255, 0.3);
|
||||
}
|
||||
|
||||
.cv-header h1 {
|
||||
font-size: 2.4em;
|
||||
margin-bottom: 0.3em;
|
||||
letter-spacing: 0.02em;
|
||||
}
|
||||
|
||||
.cv-contact {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
gap: 0.5em 1.5em;
|
||||
font-size: 0.95em;
|
||||
}
|
||||
|
||||
.cv-contact a {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.cv-section {
|
||||
margin-bottom: 1.8em;
|
||||
}
|
||||
|
||||
.cv-section h2 {
|
||||
font-size: 1.4em;
|
||||
border-bottom: 1.5px solid rgba(100, 150, 255, 0.3);
|
||||
padding-bottom: 0.3em;
|
||||
margin-bottom: 0.8em;
|
||||
}
|
||||
|
||||
.cv-section h3 {
|
||||
font-size: 1.1em;
|
||||
margin-bottom: 0.5em;
|
||||
margin-top: 0.8em;
|
||||
}
|
||||
|
||||
.cv-entry {
|
||||
margin-bottom: 1.2em;
|
||||
padding-left: 0.2em;
|
||||
}
|
||||
|
||||
.cv-entry-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.5em;
|
||||
}
|
||||
|
||||
.cv-entry-title {
|
||||
font-weight: 700;
|
||||
font-size: 1.05em;
|
||||
}
|
||||
|
||||
.cv-entry-date {
|
||||
font-size: 0.9em;
|
||||
opacity: 0.7;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.cv-entry-subtitle {
|
||||
font-size: 0.95em;
|
||||
margin-top: 0.15em;
|
||||
opacity: 0.85;
|
||||
}
|
||||
|
||||
.cv-entry ul {
|
||||
margin-top: 0.4em;
|
||||
margin-bottom: 0;
|
||||
padding-left: 1.4em;
|
||||
}
|
||||
|
||||
.cv-entry li {
|
||||
margin-bottom: 0.25em;
|
||||
font-size: 0.92em;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.cv-skills {
|
||||
display: grid;
|
||||
grid-template-columns: auto 1fr;
|
||||
gap: 0.4em 1em;
|
||||
font-size: 0.95em;
|
||||
}
|
||||
|
||||
.cv-skill-label {
|
||||
font-weight: 700;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.cv-award-note {
|
||||
font-style: italic;
|
||||
font-size: 0.9em;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.cv-pub-venue {
|
||||
font-size: 0.9em;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.cv-download {
|
||||
text-align: center;
|
||||
margin: 1.5em 0 0.5em;
|
||||
font-size: 0.9em;
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
.cv-updated {
|
||||
text-align: right;
|
||||
font-size: 0.8em;
|
||||
opacity: 0.5;
|
||||
font-style: italic;
|
||||
margin-top: 2em;
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
.cv-entry-header {
|
||||
flex-direction: column;
|
||||
gap: 0.1em;
|
||||
}
|
||||
.cv-contact {
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: 0.3em;
|
||||
}
|
||||
.cv-skills {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="cv-container">
|
||||
|
||||
<div class="cv-header">
|
||||
<h1>Dane Sabo</h1>
|
||||
<div class="cv-contact">
|
||||
<span>📍 Greater Pittsburgh Area</span>
|
||||
<span>✉️ <a href="mailto:yourstruly@danesabo.com">yourstruly@danesabo.com</a></span>
|
||||
<span>🔗 <a href="https://danesabo.com">danesabo.com</a></span>
|
||||
<span><a href="https://linkedin.com/in/dane-sabo-819b211b6/">LinkedIn</a></span>
|
||||
<span><a href="https://github.com/namelessfaceless">GitHub</a></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="cv-download">
|
||||
<a href="/cv.pdf">⬇ Download PDF version</a>
|
||||
</div>
|
||||
|
||||
<div class="cv-section">
|
||||
<h2>Education</h2>
|
||||
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">Ph.D. — Mechanical Engineering</span>
|
||||
<span class="cv-entry-date">Aug 2023 – Present</span>
|
||||
</div>
|
||||
<div class="cv-entry-subtitle"><strong>NRC Fellow, University of Pittsburgh</strong></div>
|
||||
<ul>
|
||||
<li>GPA: 3.896/4.0 (<a href="/transcript.pdf">Unofficial Transcript</a>)</li>
|
||||
<li><strong>Coursework:</strong> High-Assurance Cyber-Physical Systems, Linear and Digital Control Systems, Nonlinear Dynamical Systems, Advanced Dynamics</li>
|
||||
<li><strong>Nuclear Engineering Certificate:</strong> Fundamentals of Nuclear Engineering, Integration of Nuclear Plant Systems, Nuclear Core Dynamics, Radiation Detection & Measurement, Management Principles for Nuclear Power</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">B.S. — Mechanical Engineering</span>
|
||||
<span class="cv-entry-date">Aug 2019 – Aug 2023</span>
|
||||
</div>
|
||||
<div class="cv-entry-subtitle"><strong>University of Pittsburgh</strong></div>
|
||||
<ul>
|
||||
<li>GPA: 3.433, Dean's Honor List throughout</li>
|
||||
<li><strong>Coursework:</strong> Linear Algebra for Machine Learning (Graduate), Mechatronics</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="cv-section">
|
||||
<h2>Awards & Honors</h2>
|
||||
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">Best Student Paper Award</span>
|
||||
<span class="cv-entry-date">2025</span>
|
||||
</div>
|
||||
<div class="cv-entry-subtitle">NPIC&HMIT 2025</div>
|
||||
<ul>
|
||||
<li>Awarded for "Employing a Hardware-in-the-Loop Approach to Realize a Fully Homomorphic Encrypted Controller for a Small Modular Advanced High Temperature Reactor"</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">Student Representative, MEMS Department Chair Search Committee</span>
|
||||
<span class="cv-entry-date">2025</span>
|
||||
</div>
|
||||
<ul>
|
||||
<li>Selected as student representative on the search committee for the next Department Chair of Mechanical Engineering and Materials Science at the University of Pittsburgh</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">NRC Graduate Fellowship</span>
|
||||
<span class="cv-entry-date">2023 – Present</span>
|
||||
</div>
|
||||
<div class="cv-entry-subtitle">U.S. Nuclear Regulatory Commission</div>
|
||||
<ul>
|
||||
<li>Competitive fellowship supporting graduate research in nuclear engineering and related fields</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="cv-section">
|
||||
<h2>Publications & Presentations</h2>
|
||||
|
||||
<h3>First Author</h3>
|
||||
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">Analysis of Vortex Generating Fences on a Formula Student Multi-Element Rear Wing</span>
|
||||
<span class="cv-entry-date">2023</span>
|
||||
</div>
|
||||
<div class="cv-pub-venue">Published in <em>Ingenium – Undergraduate Research at the Swanson School of Engineering</em>, Pages 106–111</div>
|
||||
</div>
|
||||
|
||||
<h3>Major Contributor</h3>
|
||||
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">Employing a Hardware-in-the-Loop Approach to Realize a Fully Homomorphic Encrypted Controller for a Small Modular Advanced High Temperature Reactor</span>
|
||||
<span class="cv-entry-date">2025</span>
|
||||
</div>
|
||||
<div class="cv-pub-venue">NPIC&HMIT 2025, Conference Paper (Second Author)</div>
|
||||
<div class="cv-award-note">🏆 Best Student Paper Award</div>
|
||||
</div>
|
||||
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">Demonstration of Advanced Encryption for an Instrumentation and Control System using ARCADE</span>
|
||||
<span class="cv-entry-date">2024</span>
|
||||
</div>
|
||||
<div class="cv-pub-venue">TRTR 2024 Annual Meeting, Presentation</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="cv-section">
|
||||
<h2>Skills</h2>
|
||||
<div class="cv-skills">
|
||||
<span class="cv-skill-label">Programming</span>
|
||||
<span>C/C++ (embedded), LaTeX, MATLAB, Python (Pandas, NumPy, SciPy, SymPy), Rust</span>
|
||||
<span class="cv-skill-label">Engineering</span>
|
||||
<span>ANSYS Simulation Suite, FDM printing, Fusion 360, Soldering, SolidWorks</span>
|
||||
<span class="cv-skill-label">Business</span>
|
||||
<span>Customer discovery, Team management, Office Suite</span>
|
||||
<span class="cv-skill-label">Other</span>
|
||||
<span>Adobe Illustrator, Adobe Photoshop, Blender</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="cv-section">
|
||||
<h2>Professional Experience</h2>
|
||||
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">Graduate Student Researcher</span>
|
||||
<span class="cv-entry-date">Aug 2023 – Present</span>
|
||||
</div>
|
||||
<div class="cv-entry-subtitle">Instrumentation and Controls Laboratory, University of Pittsburgh — Advisor: Dr. Daniel G. Cole</div>
|
||||
<ul>
|
||||
<li>Developing formal verification methods for autonomous hybrid control systems with application to nuclear reactor startup sequences and safety-critical cyber-physical systems</li>
|
||||
<li>Collaborating with Idaho National Laboratory and Sandia National Laboratory on hardware-in-the-loop control system validation and encrypted controller implementations for advanced reactor designs</li>
|
||||
<li>Conducting research on virtualized networks to simulate control systems with genuine network traffic for nuanced analysis of system dynamics</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">Independent Contractor (Mechanical Engineer)</span>
|
||||
<span class="cv-entry-date">Dec 2022 – Jun 2023</span>
|
||||
</div>
|
||||
<div class="cv-entry-subtitle">Human Motion Technologies LLC — Remote / Pittsburgh, PA</div>
|
||||
<ul>
|
||||
<li><strong>Hip Exoskeleton EXO-004:</strong> Provided expertise in composites and manufacturing for carbon fiber-reinforced polymer (CFRP) parts, adopting resin infusion as a standard practice.</li>
|
||||
<li><strong>Prosthetics Foot Testing TES-001A02:</strong> Developed a testing fixture for prosthetic feet, evaluating products for fatigue and ultimate strength failure per ISO-10328 standards, designed for up to 5700 N and two million cycles.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">Summer Undergraduate Research Intern</span>
|
||||
<span class="cv-entry-date">Jun 2022 – Aug 2022</span>
|
||||
</div>
|
||||
<div class="cv-entry-subtitle">University of Pittsburgh</div>
|
||||
<ul>
|
||||
<li>Analyzed the effects of corotating and counterrotating pairs of vortex-generating fences, focusing on separation prevention at various yaw angles and speeds.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">Mechanical Engineering Co-op</span>
|
||||
<span class="cv-entry-date">Jan 2021 – Apr 2021, Aug – Dec 2021</span>
|
||||
</div>
|
||||
<div class="cv-entry-subtitle">BMW Manufacturing — Spartanburg, SC</div>
|
||||
<ul>
|
||||
<li><strong>Pruefcubing:</strong> Evaluated buildability and geometric validity of supplier parts for BMW XM performance SUV, supporting metrology processes.</li>
|
||||
<li><strong>Quality Steering:</strong> Monitored development series buildability on manufacturing lines and audited prototype vehicles (X3, X4, X5, X6, X7, XM). Developed data management tools to enhance workflows and database accessibility.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="cv-section">
|
||||
<h2>Teaching Experience</h2>
|
||||
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">Technical Director / Aerodynamics Lead</span>
|
||||
<span class="cv-entry-date">2020 – 2022</span>
|
||||
</div>
|
||||
<div class="cv-entry-subtitle">Panther Racing (Formula SAE) — University of Pittsburgh</div>
|
||||
<ul>
|
||||
<li>Led a team of 30+ engineers and managed a six-figure budget for researching and producing an open-wheel-style racecar.</li>
|
||||
<li>Rehabilitated team culture and mentored younger members to develop engineering and communication skills.</li>
|
||||
<li>Engineered and designed the aerodynamic package and demonstrated expertise in carbon fiber composites manufacturing, including vacuum-bagging, wet lay-up, and mold preparation.</li>
|
||||
<li>Delivered a final car that completed all events at FSAE Michigan without failures, improving team performance from 37th/40 (45.4 pts) to 32nd/99 (462.6 pts).</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">Content Developer & Teaching Assistant</span>
|
||||
<span class="cv-entry-date">Aug 2022 – Dec 2022</span>
|
||||
</div>
|
||||
<div class="cv-entry-subtitle">MEMS 0071 "Intro to Fluid Mechanics" — University of Pittsburgh</div>
|
||||
<ul>
|
||||
<li>Developed curriculum incorporating fundamental CFD concepts, with a focus on postprocessing, simulation, and meshing for hydrostatic and hydrodynamic problems.</li>
|
||||
<li>Conducted weekly office hours to assist students in understanding course material.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="cv-section">
|
||||
<h2>Projects</h2>
|
||||
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">King's Eunuch — Poker Engine (Rust)</span>
|
||||
<span class="cv-entry-date">2025 – Present</span>
|
||||
</div>
|
||||
<ul>
|
||||
<li>Developing a type-safe poker library in Rust with near-zero dependencies as a language learning project.</li>
|
||||
<li>Implemented custom types for cards and hands with ordering traits, and complete hand detection and evaluation logic.</li>
|
||||
<li>Building toward game state simulation and eventual use as a poker training aid.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">1986 Nissan 300ZX — LS V8 Engine Swap</span>
|
||||
<span class="cv-entry-date">2021 – Present</span>
|
||||
</div>
|
||||
<ul>
|
||||
<li>Performing a 5.3L LS swap using a junkyard-sourced 2008 Avalanche engine, pulled and disassembled personally.</li>
|
||||
<li>Completed engine teardown, cleaning, rear main seal, flywheel torque, and timing chain assembly.</li>
|
||||
<li>Sourced transmission, ECU, sensors, and engine mounts. Stripped factory engine bay to prepare for installation.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="cv-updated">Last updated March 2026</div>
|
||||
|
||||
</div>
|
||||
@ -18,7 +18,7 @@ email = 'yourstruly@danesabo.com'
|
||||
[[menu.main]]
|
||||
name = 'CV'
|
||||
weight = 8
|
||||
url = "/cv.pdf"
|
||||
url = "/cv/"
|
||||
|
||||
|
||||
|
||||
|
||||
22
layouts/partials/head.html
Normal file
22
layouts/partials/head.html
Normal file
@ -0,0 +1,22 @@
|
||||
<head>
|
||||
<title>{{ .Site.Title }} {{ with .Title }}- {{ . }} {{ end }}</title>
|
||||
<link rel="stylesheet" type="text/css" href="{{ "css/fonts.css" | relURL }}">
|
||||
<link rel="stylesheet" type="text/css" href="{{ "css/fontawesome.css" | relURL }}">
|
||||
{{ $options := dict "transpiler" "libsass" "targetPath" "css/styles.css" }}
|
||||
{{ $style := resources.Get "styles.scss" | toCSS $options | minify | fingerprint }}
|
||||
<link rel="stylesheet" type="text/css" href="{{ $style.RelPermalink }}">
|
||||
{{ with resources.Get "css/userstyles.css" }}
|
||||
<link rel="stylesheet" type="text/css" href="{{ .Permalink }}">
|
||||
{{ end }}
|
||||
<!-- Dark Night Sky Theme -->
|
||||
<link rel="stylesheet" type="text/css" href="{{ "css/dark-theme.css" | relURL }}">
|
||||
{{ with .Site.Params.favicon }}
|
||||
<link rel="icon" href="{{ . | relURL }}">
|
||||
{{ end }}
|
||||
<meta charset="UTF-8">
|
||||
<meta name="author" content="{{ .Site.Params.Author }}">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
{{ range .AlternativeOutputFormats -}}
|
||||
{{ printf `<link rel="%s" type="%s" href="%s" title="%s" />` .Rel .MediaType.Type .Permalink $.Site.Title | safeHTML }}
|
||||
{{ end -}}
|
||||
</head>
|
||||
353
mockup.html
Normal file
353
mockup.html
Normal file
@ -0,0 +1,353 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Dane Sabo - Mockup</title>
|
||||
|
||||
<!-- Fonts -->
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600&family=IBM+Plex+Serif:wght@500;600&display=swap" rel="stylesheet">
|
||||
|
||||
<style>
|
||||
:root {
|
||||
--accent: #2563eb;
|
||||
--accent-light: #3b82f6;
|
||||
--text: #1f2937;
|
||||
--text-muted: #6b7280;
|
||||
--bg: #fafafa;
|
||||
--card-bg: #ffffff;
|
||||
}
|
||||
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
html {
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'IBM Plex Sans', -apple-system, sans-serif;
|
||||
font-size: 17px;
|
||||
line-height: 1.7;
|
||||
color: var(--text);
|
||||
background: var(--bg);
|
||||
}
|
||||
|
||||
/* Fade in animation */
|
||||
@keyframes fadeInUp {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateY(20px);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
.animate {
|
||||
animation: fadeInUp 0.6s ease-out forwards;
|
||||
}
|
||||
|
||||
.delay-1 { animation-delay: 0.1s; opacity: 0; }
|
||||
.delay-2 { animation-delay: 0.2s; opacity: 0; }
|
||||
.delay-3 { animation-delay: 0.3s; opacity: 0; }
|
||||
.delay-4 { animation-delay: 0.4s; opacity: 0; }
|
||||
|
||||
/* Layout */
|
||||
.container {
|
||||
max-width: 720px;
|
||||
margin: 0 auto;
|
||||
padding: 0 24px;
|
||||
}
|
||||
|
||||
/* Nav */
|
||||
nav {
|
||||
padding: 24px 0;
|
||||
border-bottom: 1px solid #e5e7eb;
|
||||
background: var(--card-bg);
|
||||
}
|
||||
|
||||
nav .container {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
nav .logo {
|
||||
font-family: 'IBM Plex Serif', serif;
|
||||
font-size: 1.25rem;
|
||||
font-weight: 600;
|
||||
color: var(--text);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
nav ul {
|
||||
display: flex;
|
||||
gap: 32px;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
nav a {
|
||||
color: var(--text-muted);
|
||||
text-decoration: none;
|
||||
font-size: 0.95rem;
|
||||
font-weight: 500;
|
||||
position: relative;
|
||||
transition: color 0.2s ease;
|
||||
}
|
||||
|
||||
nav a:hover {
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
nav a::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
bottom: -4px;
|
||||
left: 0;
|
||||
width: 0;
|
||||
height: 2px;
|
||||
background: var(--accent);
|
||||
transition: width 0.2s ease;
|
||||
}
|
||||
|
||||
nav a:hover::after {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* Hero */
|
||||
.hero {
|
||||
padding: 80px 0 60px;
|
||||
}
|
||||
|
||||
.hero h1 {
|
||||
font-family: 'IBM Plex Serif', serif;
|
||||
font-size: 3rem;
|
||||
font-weight: 600;
|
||||
margin-bottom: 16px;
|
||||
letter-spacing: -0.02em;
|
||||
}
|
||||
|
||||
.hero .tagline {
|
||||
font-size: 1.15rem;
|
||||
color: var(--text-muted);
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.hero .tagline span {
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
.hero .intro {
|
||||
font-size: 1.1rem;
|
||||
max-width: 600px;
|
||||
}
|
||||
|
||||
/* Section */
|
||||
section {
|
||||
padding: 48px 0;
|
||||
}
|
||||
|
||||
section h2 {
|
||||
font-family: 'IBM Plex Serif', serif;
|
||||
font-size: 1.75rem;
|
||||
font-weight: 600;
|
||||
margin-bottom: 24px;
|
||||
letter-spacing: -0.01em;
|
||||
}
|
||||
|
||||
/* Links */
|
||||
a {
|
||||
color: var(--accent);
|
||||
text-decoration: none;
|
||||
transition: color 0.2s ease;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: var(--accent-light);
|
||||
}
|
||||
|
||||
/* Cards */
|
||||
.card-grid {
|
||||
display: grid;
|
||||
gap: 20px;
|
||||
}
|
||||
|
||||
.card {
|
||||
background: var(--card-bg);
|
||||
border: 1px solid #e5e7eb;
|
||||
border-radius: 12px;
|
||||
padding: 24px;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
.card:hover {
|
||||
border-color: var(--accent);
|
||||
box-shadow: 0 4px 12px rgba(37, 99, 235, 0.1);
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
|
||||
.card h3 {
|
||||
font-family: 'IBM Plex Serif', serif;
|
||||
font-size: 1.25rem;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.card p {
|
||||
color: var(--text-muted);
|
||||
font-size: 0.95rem;
|
||||
}
|
||||
|
||||
.card .tag {
|
||||
display: inline-block;
|
||||
margin-top: 12px;
|
||||
font-size: 0.8rem;
|
||||
padding: 4px 10px;
|
||||
background: #eff6ff;
|
||||
color: var(--accent);
|
||||
border-radius: 4px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
/* Quick links */
|
||||
.quick-links {
|
||||
display: flex;
|
||||
gap: 16px;
|
||||
margin-top: 32px;
|
||||
}
|
||||
|
||||
.quick-links a {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
padding: 12px 20px;
|
||||
border: 1px solid #e5e7eb;
|
||||
border-radius: 8px;
|
||||
color: var(--text);
|
||||
font-weight: 500;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
.quick-links a:hover {
|
||||
border-color: var(--accent);
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
.quick-links a.primary {
|
||||
background: var(--accent);
|
||||
border-color: var(--accent);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.quick-links a.primary:hover {
|
||||
background: var(--accent-light);
|
||||
}
|
||||
|
||||
/* Footer */
|
||||
footer {
|
||||
padding: 48px 0;
|
||||
margin-top: 48px;
|
||||
border-top: 1px solid #e5e7eb;
|
||||
color: var(--text-muted);
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
/* Comparison toggle */
|
||||
.toggle-bar {
|
||||
position: fixed;
|
||||
bottom: 24px;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
background: var(--text);
|
||||
color: white;
|
||||
padding: 12px 24px;
|
||||
border-radius: 100px;
|
||||
font-size: 0.9rem;
|
||||
z-index: 100;
|
||||
box-shadow: 0 4px 20px rgba(0,0,0,0.2);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<nav class="animate">
|
||||
<div class="container">
|
||||
<a href="/" class="logo">Dane Sabo</a>
|
||||
<ul>
|
||||
<li><a href="#projects">Projects</a></li>
|
||||
<li><a href="#about">About</a></li>
|
||||
<li><a href="/cv.pdf">CV</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main>
|
||||
<section class="hero">
|
||||
<div class="container">
|
||||
<h1 class="animate delay-1">Hey, I'm Dane</h1>
|
||||
<p class="tagline animate delay-2">
|
||||
PhD Candidate · <span>Control Systems</span> · NRC Fellow
|
||||
</p>
|
||||
<p class="intro animate delay-3">
|
||||
I'm a Mechanical Engineering PhD student at Pitt researching high-assurance autonomous hybrid control systems. When I'm not in the lab, you'll find me wrenching on my Honda CRF or working on an LS swap.
|
||||
</p>
|
||||
<div class="quick-links animate delay-4">
|
||||
<a href="/cv.pdf" class="primary">View CV →</a>
|
||||
<a href="mailto:yourstruly@danesabo.com">Get in touch</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="projects">
|
||||
<div class="container">
|
||||
<h2 class="animate">Projects</h2>
|
||||
<div class="card-grid">
|
||||
<a href="#" class="card animate delay-1">
|
||||
<h3>Hybrid Systems Verification</h3>
|
||||
<p>Developing formal guarantees for autonomous systems operating in complex, dynamic environments.</p>
|
||||
<span class="tag">Research</span>
|
||||
</a>
|
||||
<a href="#" class="card animate delay-2">
|
||||
<h3>300ZX LS Swap</h3>
|
||||
<p>Dropping a 5.3L LS into an '86 300ZX. Custom mounts, wiring, and fabrication.</p>
|
||||
<span class="tag">Build</span>
|
||||
</a>
|
||||
<a href="#" class="card animate delay-3">
|
||||
<h3>Custom 3D Printer</h3>
|
||||
<p>Building a CoreXY printer from scratch with Klipper firmware.</p>
|
||||
<span class="tag">Build</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="about">
|
||||
<div class="container">
|
||||
<h2 class="animate">About</h2>
|
||||
<p class="animate delay-1">
|
||||
I spent three years with Pitt's Formula SAE team, progressing from Marketing Director to Technical Director, leading 30+ engineers and managing a six-figure budget. My undergrad research on aerodynamic vortex-generating fences was published in <em>Ingenium</em>.
|
||||
</p>
|
||||
<br>
|
||||
<p class="animate delay-2">
|
||||
Currently serving on the MEMS Department Chair Search Committee and co-founded the RPM Club to help students learn hands-on automotive skills.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<div class="container">
|
||||
<p>© 2026 Dane Sabo · Built with Hugo</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<div class="toggle-bar">
|
||||
✨ Mockup v1 — Typography + Hero + Cards
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,6 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<html><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<title>Dane Sabo - 404 Page not found </title>
|
||||
<link rel="stylesheet" type="text/css" href="/css/fonts.css">
|
||||
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
|
||||
@ -9,6 +8,8 @@
|
||||
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta name="author" content="Dane Sabo">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
@ -21,7 +22,7 @@
|
||||
<nav>
|
||||
<ul class="navbar">
|
||||
<li class="">
|
||||
<a href="/cv.pdf">
|
||||
<a href="/cv/">
|
||||
<span>CV</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<html><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<title>Dane Sabo - Blog </title>
|
||||
<link rel="stylesheet" type="text/css" href="/css/fonts.css">
|
||||
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
|
||||
@ -9,6 +8,8 @@
|
||||
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta name="author" content="Dane Sabo">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
@ -22,7 +23,7 @@
|
||||
<nav>
|
||||
<ul class="navbar">
|
||||
<li class="">
|
||||
<a href="/cv.pdf">
|
||||
<a href="/cv/">
|
||||
<span>CV</span>
|
||||
</a>
|
||||
</li>
|
||||
@ -72,6 +73,22 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1,50 +1 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>Dane Sabo</title>
|
||||
<link>http://localhost:1313/blog/</link>
|
||||
<description>Latest blog posts from Dane Sabo</description>
|
||||
|
||||
|
||||
<language>en-us</language>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<lastBuildDate>Wed, 19 Mar 2025 08:55:12 -0400</lastBuildDate>
|
||||
|
||||
|
||||
|
||||
<atom:link href="http://localhost:1313/blog/index.xml" rel="self" type="application/rss+xml" />
|
||||
|
||||
|
||||
|
||||
|
||||
<item>
|
||||
<title>Formula Student</title>
|
||||
<link>http://localhost:1313/projects/formula_student/</link>
|
||||
<pubDate>Thu, 20 Mar 2025 16:51:04 -0400</pubDate>
|
||||
|
||||
<guid>http://localhost:1313/projects/formula_student/</guid>
|
||||
<description><!-- raw HTML omitted -->
|
||||
</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>This Is a Secret</title>
|
||||
<link>http://localhost:1313/blog/this-is-a-secret/</link>
|
||||
<pubDate>Sun, 16 Mar 2025 21:11:16 -0400</pubDate>
|
||||
|
||||
<guid>http://localhost:1313/blog/this-is-a-secret/</guid>
|
||||
<description><!-- raw HTML omitted -->
|
||||
</description>
|
||||
</item>
|
||||
|
||||
|
||||
</channel>
|
||||
</rss>
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel></channel></rss>
|
||||
|
||||
209
public/blog/pickleball-elo-system/index.html
Normal file
209
public/blog/pickleball-elo-system/index.html
Normal file
@ -0,0 +1,209 @@
|
||||
<!DOCTYPE html>
|
||||
<html><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<title>Dane Sabo - I Built a Rating System for My Pickleball League (And Definitely Didn't Cook the Books) </title>
|
||||
<link rel="stylesheet" type="text/css" href="/css/fonts.css">
|
||||
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta name="author" content="Dane Sabo">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
</head>
|
||||
<body>
|
||||
<header class="page-header">
|
||||
<div class="myname">
|
||||
<h2><a href="http://localhost:1313/">Dane Sabo</a></h2>
|
||||
</div>
|
||||
<nav>
|
||||
<ul class="navbar">
|
||||
<li class="">
|
||||
<a href="/cv/">
|
||||
<span>CV</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a href="/projects/">
|
||||
<span>Projects</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a href="/blog/">
|
||||
<span>Blog</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a href="/contact/">
|
||||
<span>About Me</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<div id="content">
|
||||
<main>
|
||||
<article>
|
||||
|
||||
<h1 class="page-title blog">I Built a Rating System for My Pickleball League (And Definitely Didn't Cook the Books)</h1>
|
||||
|
||||
<p class="blog-post-info">Posted: <time>2026-02-26</time>
|
||||
|
||||
<span class="blog-taxonomy-info"> | Categories:
|
||||
|
||||
|
||||
|
||||
<a class="blog-taxonomy-info" href="/categories/projects">Projects</a>, <a class="blog-taxonomy-info" href="/categories/recreation">Recreation</a>
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
<span class="blog-taxonomy-info"> | Tags:
|
||||
|
||||
|
||||
|
||||
<a class="blog-taxonomy-info" href="/tags/elo">ELO</a>, <a class="blog-taxonomy-info" href="/tags/pickleball">pickleball</a>, <a class="blog-taxonomy-info" href="/tags/rating-systems">rating systems</a>, <a class="blog-taxonomy-info" href="/tags/statistics">statistics</a>
|
||||
</span>
|
||||
|
||||
</p>
|
||||
|
||||
<div class="blog-post-content">
|
||||
<p>After running my pickleball league with Glicko-2 for over a month, I realized the system had problems. So I did what any reasonable person would do: I threw it out and rebuilt it from scratch with an ELO system.</p>
|
||||
<p>And yes, I happen to be the biggest beneficiary of the change. Coincidence? Probably. Let me explain the math, and you can be the judge.</p>
|
||||
<h2 id="the-problem-glicko-2-was-overkill">The Problem: Glicko-2 Was Overkill</h2>
|
||||
<p>Glicko-2 is a sophisticated rating system designed for competitive chess. It tracks three values per player:</p>
|
||||
<ul>
|
||||
<li><strong>Rating</strong> — Your skill estimate (default: 1500)</li>
|
||||
<li><strong>Rating Deviation</strong> — How <em>uncertain</em> the system is about your skill</li>
|
||||
<li><strong>Volatility</strong> — How <em>consistent</em> you are</li>
|
||||
</ul>
|
||||
<p>The math involves converting to different scales, computing probabilities with hyperbolic functions, and solving iteratively for new volatility. It’s clever, but for a casual league of six players, it’s like bringing a sports car to a parking lot.</p>
|
||||
<p>But the real problem was this: I added a <em>margin bonus</em> to account for wins by different margins (winning 11-9 vs 11-2). The formula?</p>
|
||||
<pre tabindex="0"><code>weighted_score = base_score + tanh(margin/11 × 0.3) × (base_score - 0.5)
|
||||
</code></pre><p><strong>Translation:</strong> I took the hyperbolic tangent of a fraction, multiplied by an arbitrary constant (why 0.3? No particular reason), and called it science.</p>
|
||||
<p>This is what’s known as “making stuff up.” It had no theoretical basis and was impossible to explain to players.</p>
|
||||
<h2 id="the-doubles-problem">The Doubles Problem</h2>
|
||||
<p>The old system calculated team ratings by averaging both partners’ ratings. Sounds reasonable, right?</p>
|
||||
<p>Until you think about it: If you (1400) play with a strong partner (1700) against two 1550s, the system thinks it’s an even match. But <em>you</em> were carried by a stronger player! Winning that match shouldn’t boost your rating as much as winning with a weaker partner.</p>
|
||||
<p>The system didn’t account for partner strength, making it unfair for everyone.</p>
|
||||
<h2 id="enter-pure-elo">Enter: Pure ELO</h2>
|
||||
<p>ELO is elegantly simple. Every player has <em>one number</em> representing their skill. When two players compete:</p>
|
||||
<ol>
|
||||
<li>Calculate the probability that one player beats the other based on rating difference</li>
|
||||
<li>Compare expected performance to actual performance</li>
|
||||
<li>Adjust ratings based on the difference</li>
|
||||
</ol>
|
||||
<p>The key formula is:</p>
|
||||
<pre tabindex="0"><code>Expected Win Probability = 1 / (1 + 10^((opponent_rating - your_rating) / 400))
|
||||
</code></pre><p>If you’re 1500 and your opponent is 1500, you should win 50% of the time. If you’re 1600 and they’re 1500, you should win about 64% of the time. Simple.</p>
|
||||
<p>After a match:</p>
|
||||
<pre tabindex="0"><code>Rating Change = K × (Actual Performance - Expected Performance)
|
||||
</code></pre><p>Where <code>K = 32</code> (how much weight each match carries) and <code>Actual Performance</code> is your <em>per-point performance</em>:</p>
|
||||
<pre tabindex="0"><code>Actual Performance = Points Scored / Total Points Played
|
||||
</code></pre><p>Win 11-9? That’s 0.55 (55% of points). Win 11-2? That’s 0.846 (84.6%). This captures match quality far better than binary win/loss.</p>
|
||||
<h2 id="the-secret-sauce-the-effective-opponent-formula">The Secret Sauce: The Effective Opponent Formula</h2>
|
||||
<p>In doubles, we use:</p>
|
||||
<pre tabindex="0"><code>Effective Opponent Rating = Opponent1 + Opponent2 - Your Teammate
|
||||
</code></pre><p><strong>Why this works:</strong></p>
|
||||
<p>If your teammate is strong, the effective opponent rating drops—because your teammate made the match easier. If your teammate is weak, the effective opponent rating rises—because you were undermanned.</p>
|
||||
<p>Beating 1500-rated opponents with a 1600-rated partner? Effective opponent: 1400. You gain less because your partner carried you.</p>
|
||||
<p>Beating 1500-rated opponents with a 1400-rated partner? Effective opponent: 1600. You gain more because you did heavy lifting.</p>
|
||||
<p>This is <em>fair</em>.</p>
|
||||
<h2 id="the-migration-before-and-after">The Migration: Before and After</h2>
|
||||
<p>Here’s where things get spicy. I replayed all 29 historical matches through the new ELO system:</p>
|
||||
<table style="width: 100%; border-collapse: collapse; margin: 20px 0;">
|
||||
<tr style="background-color: #f0f0f0;">
|
||||
<th style="border: 1px solid #ddd; padding: 10px; text-align: left;">Player</th>
|
||||
<th style="border: 1px solid #ddd; padding: 10px; text-align: right;">Old Glicko-2</th>
|
||||
<th style="border: 1px solid #ddd; padding: 10px; text-align: right;">New ELO</th>
|
||||
<th style="border: 1px solid #ddd; padding: 10px; text-align: right;">Change</th>
|
||||
<th style="border: 1px solid #ddd; padding: 10px; text-align: right;">Matches</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="border: 1px solid #ddd; padding: 10px;">Andrew Stricklin</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1651</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1538</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;"><span style="color: #c80000;">−113</span></td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">19</td>
|
||||
</tr>
|
||||
<tr style="background-color: #fafafa;">
|
||||
<td style="border: 1px solid #ddd; padding: 10px;">David Pabst</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1562</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1522</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;"><span style="color: #c80000;">−40</span></td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">11</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="border: 1px solid #ddd; padding: 10px;">Jacklyn Wyszynski</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1557</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1514</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;"><span style="color: #c80000;">−43</span></td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">9</td>
|
||||
</tr>
|
||||
<tr style="background-color: #fafafa;">
|
||||
<td style="border: 1px solid #ddd; padding: 10px;">Eliana Crew</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1485</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1497</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;"><span style="color: #00640a;">+11</span></td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">13</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="border: 1px solid #ddd; padding: 10px;">Krzysztof Radziszeski</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1473</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1476</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;"><span style="color: #00640a;">+3</span></td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">25</td>
|
||||
</tr>
|
||||
<tr style="background-color: #fafafa;">
|
||||
<td style="border: 1px solid #ddd; padding: 10px;"><strong>Dane Sabo</strong></td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1290</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1449</td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;"><strong><span style="color: #00640a;">+159</span></strong></td>
|
||||
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">25</td>
|
||||
</tr>
|
||||
</table>
|
||||
<h3 id="observations">Observations</h3>
|
||||
<p><strong>The Rating Spread Compressed</strong></p>
|
||||
<p>The old system spread players across 361 rating points. The new system compresses them into 89 points. This makes sense—we’re a recreational group, not chess grandmasters. The new system rates us fairly within a tighter band.</p>
|
||||
<p><strong>The Winners</strong></p>
|
||||
<ul>
|
||||
<li><strong>Dane Sabo</strong>: +159 points. The old system penalized him for losses with weaker partners. The effective opponent formula gives credit for “carrying.” (Purely coincidental that I benefit from my own math.)</li>
|
||||
<li><strong>Eliana Crew</strong>: +11 points</li>
|
||||
<li><strong>Krzysztof Radziszeski</strong>: +3 points</li>
|
||||
</ul>
|
||||
<p><strong>The Losers</strong></p>
|
||||
<ul>
|
||||
<li><strong>Andrew Stricklin</strong>: −113 points. Still ranked #1, but the old system over-credited wins with strong partners.</li>
|
||||
<li><strong>Jacklyn Wyszynski</strong>: −43 points</li>
|
||||
<li><strong>David Pabst</strong>: −40 points</li>
|
||||
</ul>
|
||||
<h2 id="a-note-on-conflicts-of-interest">A Note on Conflicts of Interest</h2>
|
||||
<p>You may notice that the system designer (me) is also the biggest beneficiary of the new ratings, gaining a convenient 159 points.</p>
|
||||
<p>I want to assure you this is <em>purely coincidental</em> and the result of <em>rigorous mathematical analysis</em>, not at all influenced by the fact that I was tired of being ranked last.</p>
|
||||
<p>The new formulas are based on <em>sound theoretical principles</em> that just <em>happen</em> to conclude I was being unfairly penalized all along.</p>
|
||||
<p><em>Trust the math.</em> 😉</p>
|
||||
<h2 id="why-this-system-works">Why This System Works</h2>
|
||||
<p><strong>For a small league:</strong></p>
|
||||
<ul>
|
||||
<li>Simple to understand (one rating per player)</li>
|
||||
<li>Fair to individual skill (per-point scoring)</li>
|
||||
<li>Respects partnership (effective opponent formula)</li>
|
||||
<li>Transparent (you can calculate rating changes yourself)</li>
|
||||
<li>Fast convergence (5-10 matches to stabilize a rating)</li>
|
||||
</ul>
|
||||
<p><strong>The bottom line:</strong> Your rating now reflects your true skill more accurately than before. Even if it means Dane finally looks respectable.</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</article>
|
||||
</main>
|
||||
|
||||
</div><footer>
|
||||
<span>This website was built using Hugo and the 'notrack' theme.</span>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,6 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<html><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<title>Dane Sabo - This Is a Secret </title>
|
||||
<link rel="stylesheet" type="text/css" href="/css/fonts.css">
|
||||
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
|
||||
@ -9,6 +8,8 @@
|
||||
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta name="author" content="Dane Sabo">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
@ -21,7 +22,7 @@
|
||||
<nav>
|
||||
<ul class="navbar">
|
||||
<li class="">
|
||||
<a href="/cv.pdf">
|
||||
<a href="/cv/">
|
||||
<span>CV</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<html><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<title>Dane Sabo - Extra Curricular </title>
|
||||
<link rel="stylesheet" type="text/css" href="/css/fonts.css">
|
||||
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
|
||||
@ -9,6 +8,8 @@
|
||||
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta name="author" content="Dane Sabo">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
@ -22,7 +23,7 @@
|
||||
<nav>
|
||||
<ul class="navbar">
|
||||
<li class="">
|
||||
<a href="/cv.pdf">
|
||||
<a href="/cv/">
|
||||
<span>CV</span>
|
||||
</a>
|
||||
</li>
|
||||
@ -72,6 +73,22 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1,50 +1 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>Dane Sabo</title>
|
||||
<link>http://localhost:1313/categories/extra-curricular/</link>
|
||||
<description>Latest blog posts from Dane Sabo</description>
|
||||
|
||||
|
||||
<language>en-us</language>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<lastBuildDate>Thu, 20 Mar 2025 16:51:04 -0400</lastBuildDate>
|
||||
|
||||
|
||||
|
||||
<atom:link href="http://localhost:1313/categories/extra-curricular/index.xml" rel="self" type="application/rss+xml" />
|
||||
|
||||
|
||||
|
||||
|
||||
<item>
|
||||
<title>Formula Student</title>
|
||||
<link>http://localhost:1313/projects/formula_student/</link>
|
||||
<pubDate>Thu, 20 Mar 2025 16:51:04 -0400</pubDate>
|
||||
|
||||
<guid>http://localhost:1313/projects/formula_student/</guid>
|
||||
<description><!-- raw HTML omitted -->
|
||||
</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>This Is a Secret</title>
|
||||
<link>http://localhost:1313/blog/this-is-a-secret/</link>
|
||||
<pubDate>Sun, 16 Mar 2025 21:11:16 -0400</pubDate>
|
||||
|
||||
<guid>http://localhost:1313/blog/this-is-a-secret/</guid>
|
||||
<description><!-- raw HTML omitted -->
|
||||
</description>
|
||||
</item>
|
||||
|
||||
|
||||
</channel>
|
||||
</rss>
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel></channel></rss>
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<html><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<title>Dane Sabo - Categories </title>
|
||||
<link rel="stylesheet" type="text/css" href="/css/fonts.css">
|
||||
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
|
||||
@ -9,6 +8,8 @@
|
||||
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta name="author" content="Dane Sabo">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
@ -22,7 +23,7 @@
|
||||
<nav>
|
||||
<ul class="navbar">
|
||||
<li class="">
|
||||
<a href="/cv.pdf">
|
||||
<a href="/cv/">
|
||||
<span>CV</span>
|
||||
</a>
|
||||
</li>
|
||||
@ -52,6 +53,10 @@
|
||||
|
||||
<li><a href="http://localhost:1313/categories/extra-curricular/">Extra Curricular</a> (1)</li>
|
||||
|
||||
<li><a href="http://localhost:1313/categories/projects/">Projects</a> (1)</li>
|
||||
|
||||
<li><a href="http://localhost:1313/categories/recreation/">Recreation</a> (1)</li>
|
||||
|
||||
</ul>
|
||||
</main>
|
||||
|
||||
|
||||
@ -1,50 +1 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>Dane Sabo</title>
|
||||
<link>http://localhost:1313/categories/</link>
|
||||
<description>Latest blog posts from Dane Sabo</description>
|
||||
|
||||
|
||||
<language>en-us</language>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<lastBuildDate>Thu, 20 Mar 2025 16:51:04 -0400</lastBuildDate>
|
||||
|
||||
|
||||
|
||||
<atom:link href="http://localhost:1313/categories/index.xml" rel="self" type="application/rss+xml" />
|
||||
|
||||
|
||||
|
||||
|
||||
<item>
|
||||
<title>Formula Student</title>
|
||||
<link>http://localhost:1313/projects/formula_student/</link>
|
||||
<pubDate>Thu, 20 Mar 2025 16:51:04 -0400</pubDate>
|
||||
|
||||
<guid>http://localhost:1313/projects/formula_student/</guid>
|
||||
<description><!-- raw HTML omitted -->
|
||||
</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>This Is a Secret</title>
|
||||
<link>http://localhost:1313/blog/this-is-a-secret/</link>
|
||||
<pubDate>Sun, 16 Mar 2025 21:11:16 -0400</pubDate>
|
||||
|
||||
<guid>http://localhost:1313/blog/this-is-a-secret/</guid>
|
||||
<description><!-- raw HTML omitted -->
|
||||
</description>
|
||||
</item>
|
||||
|
||||
|
||||
</channel>
|
||||
</rss>
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel></channel></rss>
|
||||
|
||||
116
public/categories/projects/index.html
Normal file
116
public/categories/projects/index.html
Normal file
@ -0,0 +1,116 @@
|
||||
<!DOCTYPE html>
|
||||
<html><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<title>Dane Sabo - Projects </title>
|
||||
<link rel="stylesheet" type="text/css" href="/css/fonts.css">
|
||||
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta name="author" content="Dane Sabo">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/categories/projects/index.xml" title="Dane Sabo" />
|
||||
</head>
|
||||
<body>
|
||||
<header class="page-header">
|
||||
<div class="myname">
|
||||
<h2><a href="http://localhost:1313/">Dane Sabo</a></h2>
|
||||
</div>
|
||||
<nav>
|
||||
<ul class="navbar">
|
||||
<li class="">
|
||||
<a href="/cv/">
|
||||
<span>CV</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="activetab">
|
||||
<a href="/projects/">
|
||||
<span>Projects</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a href="/blog/">
|
||||
<span>Blog</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a href="/contact/">
|
||||
<span>About Me</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<div id="content">
|
||||
<main>
|
||||
|
||||
<h1 class="page-title">Projects</h1>
|
||||
|
||||
|
||||
<div class="taxonomy-links">
|
||||
<ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li><a href="/categories">categories</a></li>
|
||||
|
||||
|
||||
|
||||
<li><a href="/tags">tags</a></li>
|
||||
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
</main>
|
||||
|
||||
</div><footer>
|
||||
<span>This website was built using Hugo and the 'notrack' theme.</span>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
1
public/categories/projects/index.xml
Normal file
1
public/categories/projects/index.xml
Normal file
@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel></channel></rss>
|
||||
9
public/categories/projects/page/1/index.html
Normal file
9
public/categories/projects/page/1/index.html
Normal file
@ -0,0 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-us">
|
||||
<head>
|
||||
<title>http://localhost:1313/categories/projects/</title>
|
||||
<link rel="canonical" href="http://localhost:1313/categories/projects/">
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="refresh" content="0; url=http://localhost:1313/categories/projects/">
|
||||
</head>
|
||||
</html>
|
||||
116
public/categories/recreation/index.html
Normal file
116
public/categories/recreation/index.html
Normal file
@ -0,0 +1,116 @@
|
||||
<!DOCTYPE html>
|
||||
<html><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<title>Dane Sabo - Recreation </title>
|
||||
<link rel="stylesheet" type="text/css" href="/css/fonts.css">
|
||||
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta name="author" content="Dane Sabo">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/categories/recreation/index.xml" title="Dane Sabo" />
|
||||
</head>
|
||||
<body>
|
||||
<header class="page-header">
|
||||
<div class="myname">
|
||||
<h2><a href="http://localhost:1313/">Dane Sabo</a></h2>
|
||||
</div>
|
||||
<nav>
|
||||
<ul class="navbar">
|
||||
<li class="">
|
||||
<a href="/cv/">
|
||||
<span>CV</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a href="/projects/">
|
||||
<span>Projects</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a href="/blog/">
|
||||
<span>Blog</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a href="/contact/">
|
||||
<span>About Me</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<div id="content">
|
||||
<main>
|
||||
|
||||
<h1 class="page-title">Recreation</h1>
|
||||
|
||||
|
||||
<div class="taxonomy-links">
|
||||
<ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li><a href="/categories">categories</a></li>
|
||||
|
||||
|
||||
|
||||
<li><a href="/tags">tags</a></li>
|
||||
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
</main>
|
||||
|
||||
</div><footer>
|
||||
<span>This website was built using Hugo and the 'notrack' theme.</span>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
1
public/categories/recreation/index.xml
Normal file
1
public/categories/recreation/index.xml
Normal file
@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel></channel></rss>
|
||||
9
public/categories/recreation/page/1/index.html
Normal file
9
public/categories/recreation/page/1/index.html
Normal file
@ -0,0 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-us">
|
||||
<head>
|
||||
<title>http://localhost:1313/categories/recreation/</title>
|
||||
<link rel="canonical" href="http://localhost:1313/categories/recreation/">
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="refresh" content="0; url=http://localhost:1313/categories/recreation/">
|
||||
</head>
|
||||
</html>
|
||||
@ -1,6 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<html><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<title>Dane Sabo - About Me </title>
|
||||
<link rel="stylesheet" type="text/css" href="/css/fonts.css">
|
||||
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
|
||||
@ -9,6 +8,8 @@
|
||||
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta name="author" content="Dane Sabo">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
@ -21,7 +22,7 @@
|
||||
<nav>
|
||||
<ul class="navbar">
|
||||
<li class="">
|
||||
<a href="/cv.pdf">
|
||||
<a href="/cv/">
|
||||
<span>CV</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
174
public/css/dark-theme.css
Normal file
174
public/css/dark-theme.css
Normal file
@ -0,0 +1,174 @@
|
||||
/* Night Sky Dark Theme for danesabo.com */
|
||||
|
||||
/* Base dark background with subtle gradient */
|
||||
html, body {
|
||||
background: linear-gradient(180deg, #0a0a1a 0%, #1a1a2e 50%, #0f0f23 100%);
|
||||
background-attachment: fixed;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
/* Main content area */
|
||||
main {
|
||||
background-color: rgba(15, 15, 35, 0.95) !important;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 0 40px rgba(100, 150, 255, 0.1);
|
||||
border: 1px solid rgba(100, 150, 255, 0.2);
|
||||
}
|
||||
|
||||
/* Text colors - twilight palette */
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
color: #e8c87a !important; /* twilight gold */
|
||||
}
|
||||
|
||||
p, li, td, th {
|
||||
color: #9aafc8 !important;
|
||||
}
|
||||
|
||||
strong, b {
|
||||
color: #d4b86a !important; /* muted gold */
|
||||
}
|
||||
|
||||
/* Links - twilight gold */
|
||||
a {
|
||||
color: #d4a85a !important;
|
||||
transition: color 0.3s ease, text-shadow 0.3s ease;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #f0c878 !important;
|
||||
text-shadow: 0 0 8px rgba(240, 200, 120, 0.4);
|
||||
}
|
||||
|
||||
/* Header */
|
||||
.page-header {
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.2) !important;
|
||||
background: rgba(10, 10, 30, 0.8);
|
||||
margin: 0 !important;
|
||||
padding: 1em;
|
||||
}
|
||||
|
||||
.myname a {
|
||||
color: #ffffff !important;
|
||||
text-shadow: 0 0 10px rgba(255, 255, 255, 0.3);
|
||||
}
|
||||
|
||||
/* Navigation */
|
||||
nav a {
|
||||
color: #c8c8e0 !important;
|
||||
}
|
||||
|
||||
nav li:hover {
|
||||
border-color: #7eb8ff !important;
|
||||
}
|
||||
|
||||
.activetab, li.activetab {
|
||||
background-color: rgba(126, 184, 255, 0.2) !important;
|
||||
}
|
||||
|
||||
.activetab > a, a.activetab {
|
||||
color: #ffffff !important;
|
||||
}
|
||||
|
||||
/* Code blocks */
|
||||
code, kbd {
|
||||
background-color: #1a1a2e !important;
|
||||
color: #a8d4ff !important;
|
||||
border: 1px solid rgba(100, 150, 255, 0.3);
|
||||
}
|
||||
|
||||
pre {
|
||||
background-color: #0f0f23 !important;
|
||||
border: 1px solid rgba(100, 150, 255, 0.2);
|
||||
}
|
||||
|
||||
pre code {
|
||||
border: none;
|
||||
}
|
||||
|
||||
/* Footer */
|
||||
footer {
|
||||
background-color: rgba(10, 10, 26, 0.95) !important;
|
||||
color: #8888a0 !important;
|
||||
border-top: 1px solid rgba(100, 150, 255, 0.2);
|
||||
}
|
||||
|
||||
/* Contact boxes and cards */
|
||||
.contactbox ul {
|
||||
background-color: rgba(20, 20, 40, 0.9) !important;
|
||||
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
.contactbox a {
|
||||
color: #c8c8e0 !important;
|
||||
}
|
||||
|
||||
/* Blog post titles */
|
||||
.blog-post-title a {
|
||||
color: #e8e8ff !important;
|
||||
}
|
||||
|
||||
.blog-post-info {
|
||||
color: #8888a0 !important;
|
||||
}
|
||||
|
||||
/* Tables */
|
||||
th {
|
||||
background-color: rgba(126, 184, 255, 0.2) !important;
|
||||
color: #e8e8ff !important;
|
||||
}
|
||||
|
||||
tr:hover {
|
||||
background-color: rgba(126, 184, 255, 0.1) !important;
|
||||
}
|
||||
|
||||
/* Taxonomy/category links */
|
||||
.taxonomy-links ul li a {
|
||||
background-color: rgba(30, 30, 50, 0.9) !important;
|
||||
color: #c8c8e0 !important;
|
||||
}
|
||||
|
||||
.taxonomy-links ul {
|
||||
border-bottom-color: rgba(255, 255, 255, 0.2) !important;
|
||||
}
|
||||
|
||||
/* Figures and images */
|
||||
figure.frame {
|
||||
background-color: rgba(20, 20, 40, 0.8) !important;
|
||||
border-color: rgba(100, 150, 255, 0.3) !important;
|
||||
}
|
||||
|
||||
figcaption {
|
||||
border-bottom-color: rgba(255, 255, 255, 0.2) !important;
|
||||
}
|
||||
|
||||
figcaption p, figcaption h4 {
|
||||
color: #8888a0 !important;
|
||||
}
|
||||
|
||||
/* Blockquotes */
|
||||
blockquote {
|
||||
color: #a8a8c0 !important;
|
||||
border-left: 3px solid rgba(126, 184, 255, 0.5);
|
||||
padding-left: 1em;
|
||||
}
|
||||
|
||||
/* Pagination */
|
||||
.page-item {
|
||||
color: #c8c8e0 !important;
|
||||
}
|
||||
|
||||
.page-item a {
|
||||
color: #c8c8e0 !important;
|
||||
}
|
||||
|
||||
.page-item.active {
|
||||
background-color: rgba(126, 184, 255, 0.3) !important;
|
||||
}
|
||||
|
||||
/* Stars - wishlist for later (CSS pseudo-elements tricky with this theme) */
|
||||
/* TODO: Add canvas-based or JS star animation */
|
||||
|
||||
/* Smooth transitions */
|
||||
* {
|
||||
transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease;
|
||||
}
|
||||
@ -1,14 +1,15 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<html><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<title>Dane Sabo - CV </title>
|
||||
<link rel="stylesheet" type="text/css" href="/css/fonts.css">
|
||||
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/styles.min.72d59454d0bbb10bc521b3b84f3d990767cb00ddf9f2555ea74ac9fcde5adcf3.css">
|
||||
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta name="author" content="Dane Sabo">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
@ -21,7 +22,7 @@
|
||||
<nav>
|
||||
<ul class="navbar">
|
||||
<li class="activetab">
|
||||
<a href="CV.pdf">
|
||||
<a href="/cv/">
|
||||
<span>CV</span>
|
||||
</a>
|
||||
</li>
|
||||
@ -49,6 +50,363 @@
|
||||
|
||||
<h1 class="page-title">CV</h1>
|
||||
|
||||
<style>
|
||||
.cv-container {
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
font-family: 'Source Sans Pro', -apple-system, BlinkMacSystemFont, sans-serif;
|
||||
}
|
||||
|
||||
.cv-header {
|
||||
text-align: center;
|
||||
margin-bottom: 2em;
|
||||
padding-bottom: 1.5em;
|
||||
border-bottom: 2px solid rgba(100, 150, 255, 0.3);
|
||||
}
|
||||
|
||||
.cv-header h1 {
|
||||
font-size: 2.4em;
|
||||
margin-bottom: 0.3em;
|
||||
letter-spacing: 0.02em;
|
||||
}
|
||||
|
||||
.cv-contact {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
gap: 0.5em 1.5em;
|
||||
font-size: 0.95em;
|
||||
}
|
||||
|
||||
.cv-contact a {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.cv-section {
|
||||
margin-bottom: 1.8em;
|
||||
}
|
||||
|
||||
.cv-section h2 {
|
||||
font-size: 1.4em;
|
||||
border-bottom: 1.5px solid rgba(100, 150, 255, 0.3);
|
||||
padding-bottom: 0.3em;
|
||||
margin-bottom: 0.8em;
|
||||
}
|
||||
|
||||
.cv-section h3 {
|
||||
font-size: 1.1em;
|
||||
margin-bottom: 0.5em;
|
||||
margin-top: 0.8em;
|
||||
}
|
||||
|
||||
.cv-entry {
|
||||
margin-bottom: 1.2em;
|
||||
padding-left: 0.2em;
|
||||
}
|
||||
|
||||
.cv-entry-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.5em;
|
||||
}
|
||||
|
||||
.cv-entry-title {
|
||||
font-weight: 700;
|
||||
font-size: 1.05em;
|
||||
}
|
||||
|
||||
.cv-entry-date {
|
||||
font-size: 0.9em;
|
||||
opacity: 0.7;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.cv-entry-subtitle {
|
||||
font-size: 0.95em;
|
||||
margin-top: 0.15em;
|
||||
opacity: 0.85;
|
||||
}
|
||||
|
||||
.cv-entry ul {
|
||||
margin-top: 0.4em;
|
||||
margin-bottom: 0;
|
||||
padding-left: 1.4em;
|
||||
}
|
||||
|
||||
.cv-entry li {
|
||||
margin-bottom: 0.25em;
|
||||
font-size: 0.92em;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.cv-skills {
|
||||
display: grid;
|
||||
grid-template-columns: auto 1fr;
|
||||
gap: 0.4em 1em;
|
||||
font-size: 0.95em;
|
||||
}
|
||||
|
||||
.cv-skill-label {
|
||||
font-weight: 700;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.cv-award-note {
|
||||
font-style: italic;
|
||||
font-size: 0.9em;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.cv-pub-venue {
|
||||
font-size: 0.9em;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.cv-download {
|
||||
text-align: center;
|
||||
margin: 1.5em 0 0.5em;
|
||||
font-size: 0.9em;
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
.cv-updated {
|
||||
text-align: right;
|
||||
font-size: 0.8em;
|
||||
opacity: 0.5;
|
||||
font-style: italic;
|
||||
margin-top: 2em;
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
.cv-entry-header {
|
||||
flex-direction: column;
|
||||
gap: 0.1em;
|
||||
}
|
||||
.cv-contact {
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: 0.3em;
|
||||
}
|
||||
.cv-skills {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<div class="cv-container">
|
||||
<div class="cv-header">
|
||||
<h1>Dane Sabo</h1>
|
||||
<div class="cv-contact">
|
||||
<span>📍 Greater Pittsburgh Area</span>
|
||||
<span>✉️ <a href="mailto:yourstruly@danesabo.com">yourstruly@danesabo.com</a></span>
|
||||
<span>🔗 <a href="https://danesabo.com">danesabo.com</a></span>
|
||||
<span><a href="https://linkedin.com/in/dane-sabo-819b211b6/">LinkedIn</a></span>
|
||||
<span><a href="https://github.com/namelessfaceless">GitHub</a></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cv-download">
|
||||
<a href="/cv.pdf">⬇ Download PDF version</a>
|
||||
</div>
|
||||
<div class="cv-section">
|
||||
<h2>Education</h2>
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">Ph.D. — Mechanical Engineering</span>
|
||||
<span class="cv-entry-date">Aug 2023 – Present</span>
|
||||
</div>
|
||||
<div class="cv-entry-subtitle"><strong>NRC Fellow, University of Pittsburgh</strong></div>
|
||||
<ul>
|
||||
<li>GPA: 3.896/4.0 (<a href="/transcript.pdf">Unofficial Transcript</a>)</li>
|
||||
<li><strong>Coursework:</strong> High-Assurance Cyber-Physical Systems, Linear and Digital Control Systems, Nonlinear Dynamical Systems, Advanced Dynamics</li>
|
||||
<li><strong>Nuclear Engineering Certificate:</strong> Fundamentals of Nuclear Engineering, Integration of Nuclear Plant Systems, Nuclear Core Dynamics, Radiation Detection & Measurement, Management Principles for Nuclear Power</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">B.S. — Mechanical Engineering</span>
|
||||
<span class="cv-entry-date">Aug 2019 – Aug 2023</span>
|
||||
</div>
|
||||
<div class="cv-entry-subtitle"><strong>University of Pittsburgh</strong></div>
|
||||
<ul>
|
||||
<li>GPA: 3.433, Dean's Honor List throughout</li>
|
||||
<li><strong>Coursework:</strong> Linear Algebra for Machine Learning (Graduate), Mechatronics</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cv-section">
|
||||
<h2>Awards & Honors</h2>
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">Best Student Paper Award</span>
|
||||
<span class="cv-entry-date">2025</span>
|
||||
</div>
|
||||
<div class="cv-entry-subtitle">NPIC&HMIT 2025</div>
|
||||
<ul>
|
||||
<li>Awarded for "Employing a Hardware-in-the-Loop Approach to Realize a Fully Homomorphic Encrypted Controller for a Small Modular Advanced High Temperature Reactor"</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">Student Representative, MEMS Department Chair Search Committee</span>
|
||||
<span class="cv-entry-date">2025</span>
|
||||
</div>
|
||||
<ul>
|
||||
<li>Selected as student representative on the search committee for the next Department Chair of Mechanical Engineering and Materials Science at the University of Pittsburgh</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">NRC Graduate Fellowship</span>
|
||||
<span class="cv-entry-date">2023 – Present</span>
|
||||
</div>
|
||||
<div class="cv-entry-subtitle">U.S. Nuclear Regulatory Commission</div>
|
||||
<ul>
|
||||
<li>Competitive fellowship supporting graduate research in nuclear engineering and related fields</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cv-section">
|
||||
<h2>Publications & Presentations</h2>
|
||||
<h3>First Author</h3>
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">Analysis of Vortex Generating Fences on a Formula Student Multi-Element Rear Wing</span>
|
||||
<span class="cv-entry-date">2023</span>
|
||||
</div>
|
||||
<div class="cv-pub-venue">Published in <em>Ingenium – Undergraduate Research at the Swanson School of Engineering</em>, Pages 106–111</div>
|
||||
</div>
|
||||
<h3>Major Contributor</h3>
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">Employing a Hardware-in-the-Loop Approach to Realize a Fully Homomorphic Encrypted Controller for a Small Modular Advanced High Temperature Reactor</span>
|
||||
<span class="cv-entry-date">2025</span>
|
||||
</div>
|
||||
<div class="cv-pub-venue">NPIC&HMIT 2025, Conference Paper (Second Author)</div>
|
||||
<div class="cv-award-note">🏆 Best Student Paper Award</div>
|
||||
</div>
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">Demonstration of Advanced Encryption for an Instrumentation and Control System using ARCADE</span>
|
||||
<span class="cv-entry-date">2024</span>
|
||||
</div>
|
||||
<div class="cv-pub-venue">TRTR 2024 Annual Meeting, Presentation</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cv-section">
|
||||
<h2>Skills</h2>
|
||||
<div class="cv-skills">
|
||||
<span class="cv-skill-label">Programming</span>
|
||||
<span>C/C++ (embedded), LaTeX, MATLAB, Python (Pandas, NumPy, SciPy, SymPy), Rust</span>
|
||||
<span class="cv-skill-label">Engineering</span>
|
||||
<span>ANSYS Simulation Suite, FDM printing, Fusion 360, Soldering, SolidWorks</span>
|
||||
<span class="cv-skill-label">Business</span>
|
||||
<span>Customer discovery, Team management, Office Suite</span>
|
||||
<span class="cv-skill-label">Other</span>
|
||||
<span>Adobe Illustrator, Adobe Photoshop, Blender</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cv-section">
|
||||
<h2>Professional Experience</h2>
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">Graduate Student Researcher</span>
|
||||
<span class="cv-entry-date">Aug 2023 – Present</span>
|
||||
</div>
|
||||
<div class="cv-entry-subtitle">Instrumentation and Controls Laboratory, University of Pittsburgh — Advisor: Dr. Daniel G. Cole</div>
|
||||
<ul>
|
||||
<li>Developing formal verification methods for autonomous hybrid control systems with application to nuclear reactor startup sequences and safety-critical cyber-physical systems</li>
|
||||
<li>Collaborating with Idaho National Laboratory and Sandia National Laboratory on hardware-in-the-loop control system validation and encrypted controller implementations for advanced reactor designs</li>
|
||||
<li>Conducting research on virtualized networks to simulate control systems with genuine network traffic for nuanced analysis of system dynamics</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">Independent Contractor (Mechanical Engineer)</span>
|
||||
<span class="cv-entry-date">Dec 2022 – Jun 2023</span>
|
||||
</div>
|
||||
<div class="cv-entry-subtitle">Human Motion Technologies LLC — Remote / Pittsburgh, PA</div>
|
||||
<ul>
|
||||
<li><strong>Hip Exoskeleton EXO-004:</strong> Provided expertise in composites and manufacturing for carbon fiber-reinforced polymer (CFRP) parts, adopting resin infusion as a standard practice.</li>
|
||||
<li><strong>Prosthetics Foot Testing TES-001A02:</strong> Developed a testing fixture for prosthetic feet, evaluating products for fatigue and ultimate strength failure per ISO-10328 standards, designed for up to 5700 N and two million cycles.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">Summer Undergraduate Research Intern</span>
|
||||
<span class="cv-entry-date">Jun 2022 – Aug 2022</span>
|
||||
</div>
|
||||
<div class="cv-entry-subtitle">University of Pittsburgh</div>
|
||||
<ul>
|
||||
<li>Analyzed the effects of corotating and counterrotating pairs of vortex-generating fences, focusing on separation prevention at various yaw angles and speeds.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">Mechanical Engineering Co-op</span>
|
||||
<span class="cv-entry-date">Jan 2021 – Apr 2021, Aug – Dec 2021</span>
|
||||
</div>
|
||||
<div class="cv-entry-subtitle">BMW Manufacturing — Spartanburg, SC</div>
|
||||
<ul>
|
||||
<li><strong>Pruefcubing:</strong> Evaluated buildability and geometric validity of supplier parts for BMW XM performance SUV, supporting metrology processes.</li>
|
||||
<li><strong>Quality Steering:</strong> Monitored development series buildability on manufacturing lines and audited prototype vehicles (X3, X4, X5, X6, X7, XM). Developed data management tools to enhance workflows and database accessibility.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cv-section">
|
||||
<h2>Teaching Experience</h2>
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">Technical Director / Aerodynamics Lead</span>
|
||||
<span class="cv-entry-date">2020 – 2022</span>
|
||||
</div>
|
||||
<div class="cv-entry-subtitle">Panther Racing (Formula SAE) — University of Pittsburgh</div>
|
||||
<ul>
|
||||
<li>Led a team of 30+ engineers and managed a six-figure budget for researching and producing an open-wheel-style racecar.</li>
|
||||
<li>Rehabilitated team culture and mentored younger members to develop engineering and communication skills.</li>
|
||||
<li>Engineered and designed the aerodynamic package and demonstrated expertise in carbon fiber composites manufacturing, including vacuum-bagging, wet lay-up, and mold preparation.</li>
|
||||
<li>Delivered a final car that completed all events at FSAE Michigan without failures, improving team performance from 37th/40 (45.4 pts) to 32nd/99 (462.6 pts).</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">Content Developer & Teaching Assistant</span>
|
||||
<span class="cv-entry-date">Aug 2022 – Dec 2022</span>
|
||||
</div>
|
||||
<div class="cv-entry-subtitle">MEMS 0071 "Intro to Fluid Mechanics" — University of Pittsburgh</div>
|
||||
<ul>
|
||||
<li>Developed curriculum incorporating fundamental CFD concepts, with a focus on postprocessing, simulation, and meshing for hydrostatic and hydrodynamic problems.</li>
|
||||
<li>Conducted weekly office hours to assist students in understanding course material.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cv-section">
|
||||
<h2>Projects</h2>
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">King's Eunuch — Poker Engine (Rust)</span>
|
||||
<span class="cv-entry-date">2025 – Present</span>
|
||||
</div>
|
||||
<ul>
|
||||
<li>Developing a type-safe poker library in Rust with near-zero dependencies as a language learning project.</li>
|
||||
<li>Implemented custom types for cards and hands with ordering traits, and complete hand detection and evaluation logic.</li>
|
||||
<li>Building toward game state simulation and eventual use as a poker training aid.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="cv-entry">
|
||||
<div class="cv-entry-header">
|
||||
<span class="cv-entry-title">1986 Nissan 300ZX — LS V8 Engine Swap</span>
|
||||
<span class="cv-entry-date">2021 – Present</span>
|
||||
</div>
|
||||
<ul>
|
||||
<li>Performing a 5.3L LS swap using a junkyard-sourced 2008 Avalanche engine, pulled and disassembled personally.</li>
|
||||
<li>Completed engine teardown, cleaning, rear main seal, flywheel torque, and timing chain assembly.</li>
|
||||
<li>Sourced transmission, ECU, sensors, and engine mounts. Stripped factory engine bay to prepare for installation.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cv-updated">Last updated March 2026</div>
|
||||
</div>
|
||||
|
||||
|
||||
</article>
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="Hugo 0.152.2"><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<html><head>
|
||||
<meta name="generator" content="Hugo 0.156.0"><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<title>Dane Sabo </title>
|
||||
<link rel="stylesheet" type="text/css" href="/css/fonts.css">
|
||||
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
|
||||
@ -10,6 +9,8 @@
|
||||
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta name="author" content="Dane Sabo">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
@ -23,7 +24,7 @@
|
||||
<nav>
|
||||
<ul class="navbar">
|
||||
<li class="">
|
||||
<a href="/cv.pdf">
|
||||
<a href="/cv/">
|
||||
<span>CV</span>
|
||||
</a>
|
||||
</li>
|
||||
@ -54,7 +55,35 @@
|
||||
|
||||
|
||||
|
||||
<p><img src="images/journey_home.png" alt=""></p>
|
||||
<div style="text-align: center; margin-bottom: 20px;">
|
||||
<img src="images/journey_home.png" alt="The Journey Home by Matthew Wong" style="max-width: 100%;">
|
||||
<p style="font-size: 14px; color: #666; margin-top: 8px; font-style: italic;">"The Journey Home" — Matthew Wong, 2017</p>
|
||||
</div>
|
||||
<div style="text-align: center; margin: 20px 0;">
|
||||
<a href="/pickleball.html" style="
|
||||
display: inline-block;
|
||||
background: linear-gradient(45deg, #8b4a4a, #8c7a3d, #3d7a8c, #7a5278, #8b4a4a);
|
||||
background-size: 300% 300%;
|
||||
animation: gradient-shift 3s ease infinite;
|
||||
color: #f0e6d3;
|
||||
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(100,60,60,0.5);
|
||||
transform: rotate(-2deg);
|
||||
border: 3px dashed #5a4a4a;
|
||||
">🏓 PICKLEBALL STATS 🏓</a>
|
||||
</div>
|
||||
<style>
|
||||
@keyframes gradient-shift {
|
||||
0% { background-position: 0% 50%; }
|
||||
50% { background-position: 100% 50%; }
|
||||
100% { background-position: 0% 50%; }
|
||||
}
|
||||
</style>
|
||||
<h2 id="welcome">Welcome!</h2>
|
||||
<p>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.</p>
|
||||
<p>Here’s what you’ll find on this site:</p>
|
||||
|
||||
@ -1,50 +1 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>Dane Sabo</title>
|
||||
<link>http://localhost:1313/</link>
|
||||
<description>Latest blog posts from Dane Sabo</description>
|
||||
|
||||
|
||||
<language>en-us</language>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<lastBuildDate>Wed, 19 Mar 2025 08:44:50 -0400</lastBuildDate>
|
||||
|
||||
|
||||
|
||||
<atom:link href="http://localhost:1313/index.xml" rel="self" type="application/rss+xml" />
|
||||
|
||||
|
||||
|
||||
|
||||
<item>
|
||||
<title>Formula Student</title>
|
||||
<link>http://localhost:1313/projects/formula_student/</link>
|
||||
<pubDate>Thu, 20 Mar 2025 16:51:04 -0400</pubDate>
|
||||
|
||||
<guid>http://localhost:1313/projects/formula_student/</guid>
|
||||
<description><!-- raw HTML omitted -->
|
||||
</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>This Is a Secret</title>
|
||||
<link>http://localhost:1313/blog/this-is-a-secret/</link>
|
||||
<pubDate>Sun, 16 Mar 2025 21:11:16 -0400</pubDate>
|
||||
|
||||
<guid>http://localhost:1313/blog/this-is-a-secret/</guid>
|
||||
<description><!-- raw HTML omitted -->
|
||||
</description>
|
||||
</item>
|
||||
|
||||
|
||||
</channel>
|
||||
</rss>
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel></channel></rss>
|
||||
|
||||
287
public/pickleball.html
Normal file
287
public/pickleball.html
Normal file
File diff suppressed because one or more lines are too long
@ -1,6 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<html><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<title>Dane Sabo - Formula Student </title>
|
||||
<link rel="stylesheet" type="text/css" href="/css/fonts.css">
|
||||
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
|
||||
@ -9,6 +8,8 @@
|
||||
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta name="author" content="Dane Sabo">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
@ -21,7 +22,7 @@
|
||||
<nav>
|
||||
<ul class="navbar">
|
||||
<li class="">
|
||||
<a href="/cv.pdf">
|
||||
<a href="/cv/">
|
||||
<span>CV</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<html><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<title>Dane Sabo - Projects </title>
|
||||
<link rel="stylesheet" type="text/css" href="/css/fonts.css">
|
||||
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
|
||||
@ -9,6 +8,8 @@
|
||||
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta name="author" content="Dane Sabo">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
@ -22,7 +23,7 @@
|
||||
<nav>
|
||||
<ul class="navbar">
|
||||
<li class="">
|
||||
<a href="/cv.pdf">
|
||||
<a href="/cv/">
|
||||
<span>CV</span>
|
||||
</a>
|
||||
</li>
|
||||
@ -72,6 +73,22 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1,50 +1 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>Dane Sabo</title>
|
||||
<link>http://localhost:1313/projects/</link>
|
||||
<description>Latest blog posts from Dane Sabo</description>
|
||||
|
||||
|
||||
<language>en-us</language>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<lastBuildDate>Wed, 19 Mar 2025 10:24:03 -0400</lastBuildDate>
|
||||
|
||||
|
||||
|
||||
<atom:link href="http://localhost:1313/projects/index.xml" rel="self" type="application/rss+xml" />
|
||||
|
||||
|
||||
|
||||
|
||||
<item>
|
||||
<title>Formula Student</title>
|
||||
<link>http://localhost:1313/projects/formula_student/</link>
|
||||
<pubDate>Thu, 20 Mar 2025 16:51:04 -0400</pubDate>
|
||||
|
||||
<guid>http://localhost:1313/projects/formula_student/</guid>
|
||||
<description><!-- raw HTML omitted -->
|
||||
</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>This Is a Secret</title>
|
||||
<link>http://localhost:1313/blog/this-is-a-secret/</link>
|
||||
<pubDate>Sun, 16 Mar 2025 21:11:16 -0400</pubDate>
|
||||
|
||||
<guid>http://localhost:1313/blog/this-is-a-secret/</guid>
|
||||
<description><!-- raw HTML omitted -->
|
||||
</description>
|
||||
</item>
|
||||
|
||||
|
||||
</channel>
|
||||
</rss>
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel></channel></rss>
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<html><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<title>Dane Sabo - Z </title>
|
||||
<link rel="stylesheet" type="text/css" href="/css/fonts.css">
|
||||
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
|
||||
@ -9,6 +8,8 @@
|
||||
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta name="author" content="Dane Sabo">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
@ -22,7 +23,7 @@
|
||||
<nav>
|
||||
<ul class="navbar">
|
||||
<li class="">
|
||||
<a href="/cv.pdf">
|
||||
<a href="/cv/">
|
||||
<span>CV</span>
|
||||
</a>
|
||||
</li>
|
||||
@ -72,6 +73,22 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1,50 +1 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>Dane Sabo</title>
|
||||
<link>http://localhost:1313/projects/z/</link>
|
||||
<description>Latest blog posts from Dane Sabo</description>
|
||||
|
||||
|
||||
<language>en-us</language>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<lastBuildDate>Thu, 20 Mar 2025 16:50:35 -0400</lastBuildDate>
|
||||
|
||||
|
||||
|
||||
<atom:link href="http://localhost:1313/projects/z/index.xml" rel="self" type="application/rss+xml" />
|
||||
|
||||
|
||||
|
||||
|
||||
<item>
|
||||
<title>Formula Student</title>
|
||||
<link>http://localhost:1313/projects/formula_student/</link>
|
||||
<pubDate>Thu, 20 Mar 2025 16:51:04 -0400</pubDate>
|
||||
|
||||
<guid>http://localhost:1313/projects/formula_student/</guid>
|
||||
<description><!-- raw HTML omitted -->
|
||||
</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>This Is a Secret</title>
|
||||
<link>http://localhost:1313/blog/this-is-a-secret/</link>
|
||||
<pubDate>Sun, 16 Mar 2025 21:11:16 -0400</pubDate>
|
||||
|
||||
<guid>http://localhost:1313/blog/this-is-a-secret/</guid>
|
||||
<description><!-- raw HTML omitted -->
|
||||
</description>
|
||||
</item>
|
||||
|
||||
|
||||
</channel>
|
||||
</rss>
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel></channel></rss>
|
||||
|
||||
@ -2,8 +2,35 @@
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
|
||||
xmlns:xhtml="http://www.w3.org/1999/xhtml">
|
||||
<url>
|
||||
<loc>http://localhost:1313/cv/</loc>
|
||||
<lastmod>2026-03-24T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/categories/</loc>
|
||||
<lastmod>2025-03-20T16:51:04-04:00</lastmod>
|
||||
<lastmod>2026-02-26T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/tags/elo/</loc>
|
||||
<lastmod>2026-02-26T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/blog/pickleball-elo-system/</loc>
|
||||
<lastmod>2026-02-26T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/tags/pickleball/</loc>
|
||||
<lastmod>2026-02-26T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/categories/projects/</loc>
|
||||
<lastmod>2026-02-26T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/tags/rating-systems/</loc>
|
||||
<lastmod>2026-02-26T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/categories/recreation/</loc>
|
||||
<lastmod>2026-02-26T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/tags/statistics/</loc>
|
||||
<lastmod>2026-02-26T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/tags/</loc>
|
||||
<lastmod>2026-02-26T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/categories/extra-curricular/</loc>
|
||||
<lastmod>2025-03-20T16:51:04-04:00</lastmod>
|
||||
@ -28,7 +55,5 @@
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/blog/this-is-a-secret/</loc>
|
||||
<lastmod>2025-03-16T21:11:16-04:00</lastmod>
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/tags/</loc>
|
||||
</url>
|
||||
</urlset>
|
||||
|
||||
116
public/tags/elo/index.html
Normal file
116
public/tags/elo/index.html
Normal file
@ -0,0 +1,116 @@
|
||||
<!DOCTYPE html>
|
||||
<html><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<title>Dane Sabo - ELO </title>
|
||||
<link rel="stylesheet" type="text/css" href="/css/fonts.css">
|
||||
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta name="author" content="Dane Sabo">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/elo/index.xml" title="Dane Sabo" />
|
||||
</head>
|
||||
<body>
|
||||
<header class="page-header">
|
||||
<div class="myname">
|
||||
<h2><a href="http://localhost:1313/">Dane Sabo</a></h2>
|
||||
</div>
|
||||
<nav>
|
||||
<ul class="navbar">
|
||||
<li class="">
|
||||
<a href="/cv/">
|
||||
<span>CV</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a href="/projects/">
|
||||
<span>Projects</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a href="/blog/">
|
||||
<span>Blog</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a href="/contact/">
|
||||
<span>About Me</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<div id="content">
|
||||
<main>
|
||||
|
||||
<h1 class="page-title">ELO</h1>
|
||||
|
||||
|
||||
<div class="taxonomy-links">
|
||||
<ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li><a href="/categories">categories</a></li>
|
||||
|
||||
|
||||
|
||||
<li><a href="/tags">tags</a></li>
|
||||
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
</main>
|
||||
|
||||
</div><footer>
|
||||
<span>This website was built using Hugo and the 'notrack' theme.</span>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
1
public/tags/elo/index.xml
Normal file
1
public/tags/elo/index.xml
Normal file
@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel></channel></rss>
|
||||
9
public/tags/elo/page/1/index.html
Normal file
9
public/tags/elo/page/1/index.html
Normal file
@ -0,0 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-us">
|
||||
<head>
|
||||
<title>http://localhost:1313/tags/elo/</title>
|
||||
<link rel="canonical" href="http://localhost:1313/tags/elo/">
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="refresh" content="0; url=http://localhost:1313/tags/elo/">
|
||||
</head>
|
||||
</html>
|
||||
@ -1,6 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<html><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<title>Dane Sabo - Tags </title>
|
||||
<link rel="stylesheet" type="text/css" href="/css/fonts.css">
|
||||
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
|
||||
@ -9,6 +8,8 @@
|
||||
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta name="author" content="Dane Sabo">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
@ -22,7 +23,7 @@
|
||||
<nav>
|
||||
<ul class="navbar">
|
||||
<li class="">
|
||||
<a href="/cv.pdf">
|
||||
<a href="/cv/">
|
||||
<span>CV</span>
|
||||
</a>
|
||||
</li>
|
||||
@ -50,6 +51,14 @@
|
||||
|
||||
<ul>
|
||||
|
||||
<li><a href="http://localhost:1313/tags/elo/">ELO</a> (1)</li>
|
||||
|
||||
<li><a href="http://localhost:1313/tags/pickleball/">Pickleball</a> (1)</li>
|
||||
|
||||
<li><a href="http://localhost:1313/tags/rating-systems/">Rating Systems</a> (1)</li>
|
||||
|
||||
<li><a href="http://localhost:1313/tags/statistics/">Statistics</a> (1)</li>
|
||||
|
||||
</ul>
|
||||
</main>
|
||||
|
||||
|
||||
@ -1,48 +1 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>Dane Sabo</title>
|
||||
<link>http://localhost:1313/tags/</link>
|
||||
<description>Latest blog posts from Dane Sabo</description>
|
||||
|
||||
|
||||
<language>en-us</language>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<atom:link href="http://localhost:1313/tags/index.xml" rel="self" type="application/rss+xml" />
|
||||
|
||||
|
||||
|
||||
|
||||
<item>
|
||||
<title>Formula Student</title>
|
||||
<link>http://localhost:1313/projects/formula_student/</link>
|
||||
<pubDate>Thu, 20 Mar 2025 16:51:04 -0400</pubDate>
|
||||
|
||||
<guid>http://localhost:1313/projects/formula_student/</guid>
|
||||
<description><!-- raw HTML omitted -->
|
||||
</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>This Is a Secret</title>
|
||||
<link>http://localhost:1313/blog/this-is-a-secret/</link>
|
||||
<pubDate>Sun, 16 Mar 2025 21:11:16 -0400</pubDate>
|
||||
|
||||
<guid>http://localhost:1313/blog/this-is-a-secret/</guid>
|
||||
<description><!-- raw HTML omitted -->
|
||||
</description>
|
||||
</item>
|
||||
|
||||
|
||||
</channel>
|
||||
</rss>
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel></channel></rss>
|
||||
|
||||
116
public/tags/pickleball/index.html
Normal file
116
public/tags/pickleball/index.html
Normal file
@ -0,0 +1,116 @@
|
||||
<!DOCTYPE html>
|
||||
<html><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<title>Dane Sabo - Pickleball </title>
|
||||
<link rel="stylesheet" type="text/css" href="/css/fonts.css">
|
||||
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta name="author" content="Dane Sabo">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/pickleball/index.xml" title="Dane Sabo" />
|
||||
</head>
|
||||
<body>
|
||||
<header class="page-header">
|
||||
<div class="myname">
|
||||
<h2><a href="http://localhost:1313/">Dane Sabo</a></h2>
|
||||
</div>
|
||||
<nav>
|
||||
<ul class="navbar">
|
||||
<li class="">
|
||||
<a href="/cv/">
|
||||
<span>CV</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a href="/projects/">
|
||||
<span>Projects</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a href="/blog/">
|
||||
<span>Blog</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a href="/contact/">
|
||||
<span>About Me</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<div id="content">
|
||||
<main>
|
||||
|
||||
<h1 class="page-title">Pickleball</h1>
|
||||
|
||||
|
||||
<div class="taxonomy-links">
|
||||
<ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li><a href="/categories">categories</a></li>
|
||||
|
||||
|
||||
|
||||
<li><a href="/tags">tags</a></li>
|
||||
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
</main>
|
||||
|
||||
</div><footer>
|
||||
<span>This website was built using Hugo and the 'notrack' theme.</span>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
1
public/tags/pickleball/index.xml
Normal file
1
public/tags/pickleball/index.xml
Normal file
@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel></channel></rss>
|
||||
9
public/tags/pickleball/page/1/index.html
Normal file
9
public/tags/pickleball/page/1/index.html
Normal file
@ -0,0 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-us">
|
||||
<head>
|
||||
<title>http://localhost:1313/tags/pickleball/</title>
|
||||
<link rel="canonical" href="http://localhost:1313/tags/pickleball/">
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="refresh" content="0; url=http://localhost:1313/tags/pickleball/">
|
||||
</head>
|
||||
</html>
|
||||
116
public/tags/rating-systems/index.html
Normal file
116
public/tags/rating-systems/index.html
Normal file
@ -0,0 +1,116 @@
|
||||
<!DOCTYPE html>
|
||||
<html><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<title>Dane Sabo - Rating Systems </title>
|
||||
<link rel="stylesheet" type="text/css" href="/css/fonts.css">
|
||||
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta name="author" content="Dane Sabo">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/rating-systems/index.xml" title="Dane Sabo" />
|
||||
</head>
|
||||
<body>
|
||||
<header class="page-header">
|
||||
<div class="myname">
|
||||
<h2><a href="http://localhost:1313/">Dane Sabo</a></h2>
|
||||
</div>
|
||||
<nav>
|
||||
<ul class="navbar">
|
||||
<li class="">
|
||||
<a href="/cv/">
|
||||
<span>CV</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a href="/projects/">
|
||||
<span>Projects</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a href="/blog/">
|
||||
<span>Blog</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a href="/contact/">
|
||||
<span>About Me</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<div id="content">
|
||||
<main>
|
||||
|
||||
<h1 class="page-title">Rating Systems</h1>
|
||||
|
||||
|
||||
<div class="taxonomy-links">
|
||||
<ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li><a href="/categories">categories</a></li>
|
||||
|
||||
|
||||
|
||||
<li><a href="/tags">tags</a></li>
|
||||
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
</main>
|
||||
|
||||
</div><footer>
|
||||
<span>This website was built using Hugo and the 'notrack' theme.</span>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
1
public/tags/rating-systems/index.xml
Normal file
1
public/tags/rating-systems/index.xml
Normal file
@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel></channel></rss>
|
||||
9
public/tags/rating-systems/page/1/index.html
Normal file
9
public/tags/rating-systems/page/1/index.html
Normal file
@ -0,0 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-us">
|
||||
<head>
|
||||
<title>http://localhost:1313/tags/rating-systems/</title>
|
||||
<link rel="canonical" href="http://localhost:1313/tags/rating-systems/">
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="refresh" content="0; url=http://localhost:1313/tags/rating-systems/">
|
||||
</head>
|
||||
</html>
|
||||
116
public/tags/statistics/index.html
Normal file
116
public/tags/statistics/index.html
Normal file
@ -0,0 +1,116 @@
|
||||
<!DOCTYPE html>
|
||||
<html><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<title>Dane Sabo - Statistics </title>
|
||||
<link rel="stylesheet" type="text/css" href="/css/fonts.css">
|
||||
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta name="author" content="Dane Sabo">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/statistics/index.xml" title="Dane Sabo" />
|
||||
</head>
|
||||
<body>
|
||||
<header class="page-header">
|
||||
<div class="myname">
|
||||
<h2><a href="http://localhost:1313/">Dane Sabo</a></h2>
|
||||
</div>
|
||||
<nav>
|
||||
<ul class="navbar">
|
||||
<li class="">
|
||||
<a href="/cv/">
|
||||
<span>CV</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a href="/projects/">
|
||||
<span>Projects</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a href="/blog/">
|
||||
<span>Blog</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a href="/contact/">
|
||||
<span>About Me</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<div id="content">
|
||||
<main>
|
||||
|
||||
<h1 class="page-title">Statistics</h1>
|
||||
|
||||
|
||||
<div class="taxonomy-links">
|
||||
<ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li><a href="/categories">categories</a></li>
|
||||
|
||||
|
||||
|
||||
<li><a href="/tags">tags</a></li>
|
||||
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
</main>
|
||||
|
||||
</div><footer>
|
||||
<span>This website was built using Hugo and the 'notrack' theme.</span>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
1
public/tags/statistics/index.xml
Normal file
1
public/tags/statistics/index.xml
Normal file
@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel></channel></rss>
|
||||
9
public/tags/statistics/page/1/index.html
Normal file
9
public/tags/statistics/page/1/index.html
Normal file
@ -0,0 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-us">
|
||||
<head>
|
||||
<title>http://localhost:1313/tags/statistics/</title>
|
||||
<link rel="canonical" href="http://localhost:1313/tags/statistics/">
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="refresh" content="0; url=http://localhost:1313/tags/statistics/">
|
||||
</head>
|
||||
</html>
|
||||
174
static/css/dark-theme.css
Normal file
174
static/css/dark-theme.css
Normal file
@ -0,0 +1,174 @@
|
||||
/* Night Sky Dark Theme for danesabo.com */
|
||||
|
||||
/* Base dark background with subtle gradient */
|
||||
html, body {
|
||||
background: linear-gradient(180deg, #0a0a1a 0%, #1a1a2e 50%, #0f0f23 100%);
|
||||
background-attachment: fixed;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
/* Main content area */
|
||||
main {
|
||||
background-color: rgba(15, 15, 35, 0.95) !important;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 0 40px rgba(100, 150, 255, 0.1);
|
||||
border: 1px solid rgba(100, 150, 255, 0.2);
|
||||
}
|
||||
|
||||
/* Text colors - twilight palette */
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
color: #e8c87a !important; /* twilight gold */
|
||||
}
|
||||
|
||||
p, li, td, th {
|
||||
color: #9aafc8 !important;
|
||||
}
|
||||
|
||||
strong, b {
|
||||
color: #d4b86a !important; /* muted gold */
|
||||
}
|
||||
|
||||
/* Links - twilight gold */
|
||||
a {
|
||||
color: #d4a85a !important;
|
||||
transition: color 0.3s ease, text-shadow 0.3s ease;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #f0c878 !important;
|
||||
text-shadow: 0 0 8px rgba(240, 200, 120, 0.4);
|
||||
}
|
||||
|
||||
/* Header */
|
||||
.page-header {
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.2) !important;
|
||||
background: rgba(10, 10, 30, 0.8);
|
||||
margin: 0 !important;
|
||||
padding: 1em;
|
||||
}
|
||||
|
||||
.myname a {
|
||||
color: #ffffff !important;
|
||||
text-shadow: 0 0 10px rgba(255, 255, 255, 0.3);
|
||||
}
|
||||
|
||||
/* Navigation */
|
||||
nav a {
|
||||
color: #c8c8e0 !important;
|
||||
}
|
||||
|
||||
nav li:hover {
|
||||
border-color: #7eb8ff !important;
|
||||
}
|
||||
|
||||
.activetab, li.activetab {
|
||||
background-color: rgba(126, 184, 255, 0.2) !important;
|
||||
}
|
||||
|
||||
.activetab > a, a.activetab {
|
||||
color: #ffffff !important;
|
||||
}
|
||||
|
||||
/* Code blocks */
|
||||
code, kbd {
|
||||
background-color: #1a1a2e !important;
|
||||
color: #a8d4ff !important;
|
||||
border: 1px solid rgba(100, 150, 255, 0.3);
|
||||
}
|
||||
|
||||
pre {
|
||||
background-color: #0f0f23 !important;
|
||||
border: 1px solid rgba(100, 150, 255, 0.2);
|
||||
}
|
||||
|
||||
pre code {
|
||||
border: none;
|
||||
}
|
||||
|
||||
/* Footer */
|
||||
footer {
|
||||
background-color: rgba(10, 10, 26, 0.95) !important;
|
||||
color: #8888a0 !important;
|
||||
border-top: 1px solid rgba(100, 150, 255, 0.2);
|
||||
}
|
||||
|
||||
/* Contact boxes and cards */
|
||||
.contactbox ul {
|
||||
background-color: rgba(20, 20, 40, 0.9) !important;
|
||||
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
.contactbox a {
|
||||
color: #c8c8e0 !important;
|
||||
}
|
||||
|
||||
/* Blog post titles */
|
||||
.blog-post-title a {
|
||||
color: #e8e8ff !important;
|
||||
}
|
||||
|
||||
.blog-post-info {
|
||||
color: #8888a0 !important;
|
||||
}
|
||||
|
||||
/* Tables */
|
||||
th {
|
||||
background-color: rgba(126, 184, 255, 0.2) !important;
|
||||
color: #e8e8ff !important;
|
||||
}
|
||||
|
||||
tr:hover {
|
||||
background-color: rgba(126, 184, 255, 0.1) !important;
|
||||
}
|
||||
|
||||
/* Taxonomy/category links */
|
||||
.taxonomy-links ul li a {
|
||||
background-color: rgba(30, 30, 50, 0.9) !important;
|
||||
color: #c8c8e0 !important;
|
||||
}
|
||||
|
||||
.taxonomy-links ul {
|
||||
border-bottom-color: rgba(255, 255, 255, 0.2) !important;
|
||||
}
|
||||
|
||||
/* Figures and images */
|
||||
figure.frame {
|
||||
background-color: rgba(20, 20, 40, 0.8) !important;
|
||||
border-color: rgba(100, 150, 255, 0.3) !important;
|
||||
}
|
||||
|
||||
figcaption {
|
||||
border-bottom-color: rgba(255, 255, 255, 0.2) !important;
|
||||
}
|
||||
|
||||
figcaption p, figcaption h4 {
|
||||
color: #8888a0 !important;
|
||||
}
|
||||
|
||||
/* Blockquotes */
|
||||
blockquote {
|
||||
color: #a8a8c0 !important;
|
||||
border-left: 3px solid rgba(126, 184, 255, 0.5);
|
||||
padding-left: 1em;
|
||||
}
|
||||
|
||||
/* Pagination */
|
||||
.page-item {
|
||||
color: #c8c8e0 !important;
|
||||
}
|
||||
|
||||
.page-item a {
|
||||
color: #c8c8e0 !important;
|
||||
}
|
||||
|
||||
.page-item.active {
|
||||
background-color: rgba(126, 184, 255, 0.3) !important;
|
||||
}
|
||||
|
||||
/* Stars - wishlist for later (CSS pseudo-elements tricky with this theme) */
|
||||
/* TODO: Add canvas-based or JS star animation */
|
||||
|
||||
/* Smooth transitions */
|
||||
* {
|
||||
transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease;
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user