Oman tuloskehityksen seuranta

Kisa­kalenteri

Vuosien juoksudata — kisat, ennätykset ja tulokset yhdellä sivulla.

Kimmo AkkanenKlaukkala · · kisoja vuodesta 2013

Ennätykset

personal bests

Nopeimmat ajat

Pisimmät suoritukset

Matkakertymä

kisoja & kilometrejä

Konepellin alla

arkkitehtuuri & putki

Tämä sivu on täysin staattinen HTML-tiedosto, joka generoidaan öisin tietokannasta — käsin ylläpidettävää sisältöä ei ole.

Datakerros. Sivun data elää Neon Postgres -kannassa, joka on osa laajempaa henkilökohtaista datajärjestelmääni: samaan kantaan synkataan öisin koko Strava-historiani (activities-taulu) sekä Garminin hyvinvointidataa, ja sinne on viety myös labramittauksia — kehonkoostumustulokset (InBody) ja juoksumaton kuntotestit vuodesta 2016 alkaen. Tämä sivu käyttää kannasta kahta taulua: races (kategoria, virallinen chip-aika sekunneiksi johdettuna, koordinaatit, Strava-id) ja activities, josta kisariveille liitetään tarkat päivämäärät ja nousumetrit strava_id-liitoksella. Viralliset ajat ovat aina järjestäjän chip-aikoja, eivät GPS-kellon dataa.

Kirjaus. Uudet tulokset, tulevat kisat ja labramittaukset kirjataan kantaan Clauden ja Neon MCP -integraation kautta — luonnollisella kielellä, ilman SQL-käsityötä. Kun kisa on juostu, sanon tuloksen, ja INSERT tapahtuu oikeaan tauluun oikeilla johdannaisilla.

Build. GitHub Actions -workflow (cron 03:30 UTC + manuaalinen dispatch) ajaa Python-generaattorin, joka hakee rivit psycopg 3:lla, laskee ennätykset, PB-merkinnät ★, matkakertymät, paikkakoosteen ja kehityssarjat — sama kisa vähintään kolmesti juostuna muodostaa trendin, ja maantiematkoille lasketaan lisäksi ikävakioidut ajat (likimääräiset WMA-kertoimet, ikä kisapäivänä) — ja injektoi tuloksen JSON:ina HTML-templaattiin. Yksi ajo, yksi tiedosto.

Julkaisu. Valmis index.html työnnetään julkisen repon gh-pages-haaraan, jota GitHub Pages tarjoilee tässä osoitteessa (custom domain A-tietueilla, TLS Let's Encryptillä). Palvelinta tai tietokantayhteyttä ei sivulla ole — pelkkä nopea staattinen tiedosto.

Varmuuskopiot. Kanta dumpataan öisin (pg_dump, versiotunnistus palvelimelta) validoituna privaattiin repoon rotaatiolla: 7 päivittäistä, kuukausittainen ja vuosittainen. Kerran kuussa erillinen workflow palauttaa tuoreimman dumpin puhtaaseen Postgres-konttiin ja verifioi rivimäärät sekä sisällön — varmuuskopio jota ei koskaan palauteta on toivomus, ei vakuutus.

Frontend. Yksi HTML-tiedosto ilman frameworkkia. Maapallo on D3.js:n ortografinen projektio (world-atlas TopoJSON), joka pyörii animaatioloopissa ja tukee drag-rotaatiota sekä rulla-/nipistyszoomia. Kehityskäyrät ovat puhdasta käsin generoitua SVG:tä ilman kirjastoriippuvuuksia — absoluuttinen aika yhtenäisenä viivana, ikävakioitu katkoviivana samassa kuvaajassa. Laskuri seuraavaan kisaan ja ikä lasketaan selaimessa, joten ne pysyvät ajan tasalla buildien välilläkin.

Koodi on rakennettu tekoälyavusteisesti (Claude & ChatGPT) — arkkitehtuurista SQL:ään ja D3-koodiin.

Kun kisa on juostu, tulos kirjataan kantaan — aamulla sivu on ajan tasalla.