Interaktiivinen web-sovellus, joka näyttää SNJ:n (Suomen Noutajakoirajärjestö) koirakokeet ja järjestää ne etäisyyden mukaan valitsemastasi sijainnista.
Live: trotor.github.io/koetutka
- Dynaaminen sijainti - Valitse paikkakuntasi tekstihaulla tai käytä GPS-paikannusta
- Etäisyysjärjestys - Kokeet järjestetään automaattisesti etäisyyden mukaan
- Suodatus - Suodata kokeen tyypin (NOME-B, NOU, NOWT) tai tason (ALO, AVO, VOI) mukaan
- Kalenteriin vienti - Lataa .ics-tiedosto yhdellä klikkauksella
- Mobiilioptimoidut - Toimii hyvin myös puhelimella
- Automaattinen päivitys - Data päivittyy päivittäin GitHub Actionsilla
- Avaa trotor.github.io/koetutka
- Valitse sijaintisi (tekstihaku tai GPS)
- Selaa kokeita - ne ovat järjestetty etäisyyden mukaan
- Klikkaa ℹ️ nähdäksesi lisätiedot
- Klikkaa 📅 lisätäksesi kalenteriin
python3 -m venv venv
source venv/bin/activate
pip install requests geopy# Hae tietyn vuoden data
python snj_kokeet.py --year 2026
# Testaa lokaalisti
python3 -m http.server 8080
# Avaa: http://localhost:8080/koetutka/
├── index.html # Pääsivu (JavaScript + CSS inline)
├── snj_kokeet.py # Datan hakija (Python)
├── .github/workflows/
│ └── deploy.yml # GitHub Actions: päivittää datan ja deployaa
└── coordinates_cache.json # Geokoodauksen cache (generoituu)
Backend (Python):
- Hakee tapahtumat SNJ:n API:sta
- Geokoodaa sijainnit Nominatim-palvelulla (tulokset cachetaan)
Frontend (JavaScript):
- Laskee etäisyydet Haversine-kaavalla selaimessa
- Sijainnin haku: paikallinen kaupunkilista + Nominatim API
- Kalenteritiedoston generointi (.ics)
CI/CD:
- GitHub Actions ajaa päivittäin klo 8:00 (Suomen aikaa)
- Hakee uusimman datan ja deployaa GitHub Pagesiin
Data haetaan SNJ:n virallisesta koekalenterista. Etäisyydet lasketaan linnuntietä (Haversine).
MIT
- iOS-sovellus Androidin rinnalle: sama React Native -koodi, täysi
ominaisuuspariteetti (lista, kartta, suosikit, sijainti/GPS, etäisyydet,
suodattimet, kalenteri, ICS-jako, ilmoitukset). Julkaisija Inetor Oy.
- Natiivikorjaukset RN 0.77:lle:
RCTAppDependencyProvider(Fabric-komponentit), fmt-consteval-patch, react-native-share-headerpolku, sijaintilupakäsittelijä
- Natiivikorjaukset RN 0.77:lle:
- Uusi suodatin "Vain ilmoittautuminen auki" myös mobiilissa
- Uusi suodatin: "Vain ilmoittautuminen auki" (web + mobiili) — näyttää vain
kokeet joiden ilmoittautumisaika on parhaillaan käynnissä. Oletuksena pois.
Jaettu logiikka (
isRegistrationOpen)shared/-paketissa, testattu.
- Uusi Android-sovellus koetutka rinnalla: natiivi React Native -mobiili
- Tab-pohjainen UI: Selaa, Suosikit, Asetukset
- Karttanäkymä (OpenStreetMap + Leaflet) eri värisymboleilla per koetyyppi
- Lokaalit muistutukset suosikkikokeista N päivää ennen
- Suora "Lisää kalenteriin" -intent (avaa kalenterisovelluksen täytetyllä lomakkeella)
- Suosikkien hallinta (tähti) + persistointi
- Menneet kokeet näkyvät harmaalla "Mennyt"-merkinnällä
- Aikavyöhykekorjaus (web): SNJ:n päivämäärät muunnetaan Helsingin aikavyöhykkeeseen ennen muotoilua. Aiemmin esim. 6.6. saattoi näyttäytyä 5.6. UTC-muunnoksen takia.
- Hakukenttä kattaa nyt myös koeluokat (vastaa mobiilin hakua)
- Refaktoroitu jaettu logiikka shared/ TypeScript-moduuliksi (haversine, ICS-generointi, suodattimet, hintaformatterit)
- Pohjustaa tulevan mobiilisovelluksen koodinjaolle (pnpm workspace)
- Haku kattaa nyt myös järjestäjän nimen
- Ei muita käyttäjälle näkyviä muutoksia
- Lisätty max etäisyys -suodatin: vapaa tekstikenttä ja valmiit 100/200 km pikavalinnat
- Lisätty suodatin menneille kokeille: menneet kokeet piilotetaan oletuksena
- Pill-tyylinen toggle järjestysvalintojen vieressä
- Lisätty Noutajalista.fi-mainospalkki bannerin alle
- Korjattu maksutietojen näyttö: tuki uudelle API-muodolle jossa hinta voi olla objekti
- Lisätty valinnaiset lisämaksut näkyviin info-modaaliin (esim. ruokailu)
- Lisätty jakamistoiminto kortteihin ja info-popuppiin (share-painike)
- Mobiililla: avaa natiivi jako (WhatsApp, Messenger, SMS jne.)
- Desktopilla: kopioi linkki leikepöydälle + toast-ilmoitus
- Hash-pohjainen routing: jaetun linkin kautta pääsee suoraan tiettyyn kokeeseen
- Linkin avaus scrollaa kortille ja avaa info-modaalin
- Modernisoitu info-modal: korttipohjainen layout, ikonit, animaatiot
- Mobiililla bottom sheet -tyylinen modal
- Lisätty favicon ja apple-touch-icon
- Korjattu ilmoittautumismuistutuksen päivämäärä: käyttää nyt ensimmäistä ilmoittautumispäivää kokeen päivän sijaan
- Muutettu tekstit "Ilmoittautuminen päättyy" -> "Ilmoittautumisaika"
- Erotettu kalenteritapahtumat: kokeen tapahtuma vs. ilmoittautumismuistutus
- Parannettu korttien erottuvuutta: lisätty varjo, pyöristetyt kulmat ja isompi väli korttien välillä
- Parannettu hover-efekti korteille
- Mobiiliystävällinen korttipohjainennäkymä
- Parannettu käyttökokemus pienillä näytöillä
- Lisätty linkki SNJ:n koekalenteriin tapahtuman infoikkunaan
- Lisätty banneri-kuva headeriin
- Lisätty yhteystiedot footeriin
- Siivottu projektirakenne
- Ensimmäinen julkaisu
- Sijaintipohjainen kokeiden haku
- Pill-suodattimet lajeille ja tasoille
- Kalenteriin vienti (.ics)
- Automaattinen datapäivitys GitHub Actionsilla
Tero Rönkkö
- Email: tero@savonnuuskut.com
- GitHub: @trotor