fartOLa Öppna demo →
● Phase 2.0 · 4-klubbs MVP · MeOS-bridge · PR #20 i landning

Tidtagning för orientering, byggd för klubben och skogen.

Full fart från start till mål — eller slipp skit i resultatlistan.

fartOLa är ett tävlingssystem som funkar i webbläsaren på Linux, Mac, Windows och Android. Varje SI-stämpling sparas som en händelse i en lokal logg*, så resultaten kan räknas fram (och räknas om) när som helst. Phase 2 lägger till MeOS-bryggan (MIP/MOP) så klubbar kan köra fartOLa parallellt med en befintlig MeOS-installation, plus Eventor-cache för 252 000+ löpare med FTS5-sökning, statusmodell i linje med IOF/Eventor (OK · MP · DNF · DNS · DQ · MAX) och tävlingsfas-grind (Förtävling → Tävling pågår) så ingen registrerar löpare när målet redan är öppet.

*Tekniskt: append-only event log med idempotenta händelser — samma stämpling kan skickas in tio gånger utan att räknas dubbelt.

Demon kör helt i webbläsaren · ingen hårdvara behövs · P skriver ut kvitto
Så funkar det

Så kör du en tävling med fartOLa.

Sju steg från banfil till liveresultat. Samma flöde finns klickbart i demon.

Importera banorna

Exportera från Condes som IOF XML 3.0 och dra in filen. Funkar lika bra för Purple Pen, OCAD eller OE — alla banprogram som kan spara IOF XML. Klasserna skapas automatiskt.

Lägg upp deltagarna

Startlista i förväg från Eventor eller IOF XML — eller walk-up på plats.

Koppla in SI-läsaren

BSM7 eller BSM8 i USB-porten. Edge-bridgen hittar den.

Stämpla i mål

Varje pinne läses, resultaten räknas fram live från händelseloggen.

Skriv ut kvitto

Sex mallar att välja på, inklusive ”Skogis” för barnen.

Visa liveresultat

Per klass, i helskärm för publiken eller på en skärm i målfållan.

Exportera

IOF XML 3.0 till Eventor när tävlingsdagen är slut.

Varför

Tidtagning som inte ramlar ihop när 4G:n gör det.

fartOLa bygger på en lokal append-only-logg där varje SI-stämpling är en händelse. Resultaten räknas fram från loggen i stället för att skrivas in i en delad databas. Det gör att flera sekretariat kan jobba samtidigt, att klienter funkar offline, och att en nätdipp inte slutar i att någon måste återskapa läget under press.

!
Var det står: Phase 2.0 (4-klubbs MVP) testas mot en riktig träning hos Stora Tuna OK onsdag 2026-05-20. Bryggan mot MeOS (MIP/MOP), Eventor-cachen (cachedcompetitors + startlista-import), Hyrbricka-flödet, FTS5-smartsök, race-phase-grind, utökad statusmodell och Inställningar-UI är klara — Gemini-review #20 igenom, bench-smoke kör grönt. Kommer det inte i mål till onsdag kör vi MeOS — kvalitet före datum.
Sex tekniska val

Hur fartOLa är designat.

Varje punkt är ett konkret val, inte en säljpitch.

01 · PLATTFORM

Kör där man helst öppnar Chrome

Linux-laptop, Mac, Windows, Android-platta. Inga drivrutiner låsta till en plattform, ingen flotta att underhålla.

02 · ARKITEKTUR

Autonoma edge-noder

Varje nod äger sin egen händelselogg. När en nod tappar nätet hänger den inte upp resten — sekretariatet jobbar vidare lokalt och synkar när nätet kommer tillbaka.

03 · SAMARBETE

Parallellt med befintliga system

Phase 2 talar MeOS Input Protocol (MIP) och MeOS Online Protocol (MOP) över LAN. En klubb kan låta MeOS-sekretariatet vara kvar och köra fartOLa på sidan — bricka i fartOLa, mål i MeOS, och bryggan håller dem synkroniserade.

04 · DATA

Buggar är reparerbara

Stämplingarna ligger som händelser, inte som muterad state. Ändra reducern, räkna om — inget korrupt resultatregister att laga på plats.

05 · BARN

Målgång för 9-åringar

Animerad målskärm, ljud, namnuppläsning och ett samlingsbart "Skogis"-kvitto. Rekryteringsverktyg från Phase 3 — inte något vi skjuter på till "sen".

06 · STANDARDER

Pratar med det som redan finns

IOF XML 3.0, Eventor REST (cachedcompetitors), MeOS MIP v3.0 + MOP v2.0 över LAN, ROC och SIRAP planerade. En klubb kan köra ett befintligt system primärt och fartOLa parallellt under en eventuell övergång.

Klickbar demo

Hela operatörsflödet i webbläsaren.

Demon är en designprototyp av hela Phase 1-flödet, helt på klientsidan — ingen backend, ingen hårdvara. Tryck på Simulera avläsning i sidopanelen för att låta deltagare komma i mål. Prototypen var designen som Phase 1 byggdes efter; eventuell drift mellan demo och shipped app är feedback i sig.

Öppna demo Lämna feedback
  • 3-klicks tävlingsguide · importera IOF XML (Condes, Purple Pen, OCAD)
  • Live-avläsning · simulera SI-kort · auto-print-toggle
  • Walk-up med FTS5 smart-sök över Eventor-cache · diakritik-tolerant
  • Hyrbricka-flöde · kontaktuppgifter · återlämnings-toast · 30d PII-scrub
  • Registreringsdisk · kö av bricka-pipningar · auto-advance
  • Race-phase-grind · Förtävling → Tävling pågår · ingen registrering efter start
  • Utökad statusmodell · OK · MP · DNF · DNS · DQ · CANCEL · MAX (IOF/Eventor-konvention)
  • Workspace-switcher · sticky aktiv tävling · flera arrangemang på samma laptop
  • Mobil-vänlig · flera volontärer registrerar parallellt från telefonen
  • MeOS-brygga · MIP/MOP-statusremsa · parallell drift · transactional snapshots
  • Inställningar-UI · maskerade API-nycklar · 512 B-tak · env > config-precedens
  • Sex kvittomallar · Klassisk · Skogis för barn
  • Liveresultat per klass · helskärmsläge · per-position grön/röd punch-grid
  • IOF XML 3.0 export · XSD-validerad · PKZIP-säkrad import (path-traversal-skydd)
  • Sv/En · täthet · accentfärg · hög kontrast
Roadmap

Sex faser. En riktig användare per fas.

Vi går inte vidare förrän nuvarande fas använts av en riktig orienterare på ett riktigt arrangemang. Träning räknas.

Phase 0

Hårdvarubevis

Node-skript som läser SI-kort via BSM7/BSM8 på Linux och loggar JSON. CRC16-CCITT-validering, SI5/8/9/10/SIAC.

BSM7/8 @ /dev/ttyUSB0 38400 baud handskakning 5 korttyper v0.0.1-handshake
✓ Klar · 2026-05-13
Phase 1

Single-laptop training MVP

Kör en klubbträning från start till mål på en Linux-laptop. Inget internet behövs. Purple Pen-import, walk-up, DNF/MP-detektering, ESC/POS-kvitto, IOF XML 3.0 export.

SvelteKit PWA Fastify + SQLite WebSocket live-feed 18 av 18 planer i mål
✓ Klar · 2026-05-15
Phase 1.5

Publik demo + landningssida

Det här. GitHub Pages med klickbar demo och en feedback-knapp innan Phase 2 börjar. Hela flödet i webbläsaren — ingen hårdvara, ingen backend.

jhagberg.github.io/fartOLa Pre-fylld GitHub-issue actions/deploy-pages
✓ Klar · 2026-05-16
Phase 2.0

4-klubbs MVP — parallell med MeOS

Klubben kör befintlig MeOS-installation och fartOLa parallellt över LAN. MIP (fartOLa → MeOS) skickar walk-ups + bricka-bindningar; MOP (MeOS → fartOLa) tar emot mål-event och resultat. Eventor-cachen ger 252 000+ deltagare offline med FTS5-smartsök (diakritik-tolerant, klubb-scope). Eventor startlista-import (REST) lägger upp anmälda i förväg. Hyrbricka-flödet håller koll på 200+ uthyrda SI-kort med kontaktinfo + retur + 30 d PII-scrub. Registreringsdisken pipar in barn i en kö och advancerar automatiskt. Race-phase-grind (Förtävling → Tävling pågår) hindrar registrering efter start. Statusmodellen är utökad till OK · MP · DNF · DNS · DQ · CANCEL · MAX i linje med IOF/Eventor.

MeOS MIP v3.0 + MOP v2.0 Eventor cachedcompetitors + startlista-import FTS5 smart-sök · diakritik-tolerant Hyrbricka + 30d retention scrub Race-phase-grind · pre-race/race-started Statusmodell · OK/MP/DNF/DNS/DQ/CANCEL/MAX Registreringsdisk-kö · auto-advance Workspace-switcher · sticky tävling Course-only fallback (Condes) Mobil registrering · flera telefoner parallellt Inställningar UI · 512 B-tak · env > config Bridge: aldrig-ge-upp-reconnect 10 planer i mål + Gemini PR #20 ✓
▶ Onsdag 2026-05-20
Phase 2.1

Sanktionerad tävling — flera operatörer

100–200 startande på en sanktionerad tävling. Eventor results push, tre+ samtidiga sekretariat med Yjs-CRDT samredigering, åskådar-resultatsida på arena-WiFi, bridge överlever process-kill, race-reset + tävlingsinfo-modal + course-compare. Bygger på MIP/MOP-substratet, Eventor entries och Inställningar-UI:n från 2.0.

Eventor results push (REST) Race-reset · tävlingsinfo · course-compare Yjs CRDT samredigering 3+ klienter Spectator-sida arena-WiFi Bridge: process-kill recovery
↗ Påbörjad
Phase 3

Barnmål + publik

Det synliga UX-språnget. Animerad målskärm med TTS, SMS till föräldrar, inbäddningsbar live-widget för klubbens hemsida, speaker-dashboard.

HDMI big-screen 46elks / Twilio Klubbteman
Planerad
Phase 4

Multi-arena + radio-kontroller

ROC-protokollmottagning, SIRAP TCP-gateway, peer-to-peer sync mellan edge-noder under simulerad partition, Yjs CRDT för samtidig redigering över flera noder.

ROC / Pi+4G SIRAP SI-Master clock sync Yjs CRDT-sync Relä-stöd
Planerad
Phase 5

O-Ringen-skala

Mål-kapacitet för femdagars med 25 000+ startande. Partitionerad Postgres per etapp, CDN-tier för 30 000 samtidiga tittare, 4G/5G + Starlink-uplink-playbook.

Partitionerad Postgres Cloudflare CDN Livelox API IOF-feed-compliance
Vision
Principer

Vad som styr designen.

Ingen av punkterna nedan är en preferens. De kommer från användarna och federationen.

Funkar i skogen

Tjänster som behöver internet finns inte ute på stigen. Edge-noden ska klara en hel tävlingsdag offline och synka när den kommer hem.

Svenska först

Användarna är 40–70 år, tekniskt kunniga men inte utvecklare. Alla strängar börjar på svenska. Engelska kommer sen.

SI5 överges aldrig

Klubbar äger SI5-kort. Legacy-stöd är inte förhandlingsbart. Samma gäller IOF XML 2.0.3 för äldre banverktyg.

Stora träffytor

Operatörer jobbar i stress, i solljus, på 13"-laptop. Inga 12px-grå-på-vita texter. 44px minsta träffyta, högkontrast-läge.

Dataminimering

Federationen (Eventor) äger deltagar-PII — vi cachar bara person-id + namn för matchning. Hyrbricka-kontakter (REQ-PRIV-002) scrubbas efter 30 dagar. GDPR art. 20/17 i Phase 4.

Öppen källkod

Appen är AGPL-3.0. packages/sportident är MIT — samma licens som uppströmsbiblioteket vi portar från.

Teknik & standarder

Beprövad stack, öppna format.

Edge-bridge

  • Node.js24 LTS
  • FastifyREST + WS
  • better-sqlite3+ Drizzle
  • serialportv13
  • node-thermal-printerESC/POS

Webbklient

  • SvelteKitadapter-static
  • Svelte 5runes
  • i18nextsv → en
  • Vitest + Playwrighttests + e2e
  • YjsPhase 4

Standarder

  • IOF XML 3.0im/export
  • MeOS MIP v3.0✓ Phase 2
  • MeOS MOP v2.0✓ Phase 2
  • Eventor REST✓ cachedcompetitors
  • Purple Pen / Condesbanimport
  • ROC / SIRAPPhase 4
  • SportIdentBSM7/8, SI5/8/9/10/SIAC

Hårdvara

  • BSM7/8-USBläsare
  • SRR-dongelPhase 4
  • BSF8/9punch-mode
  • Star TSP143kvittoskrivare
  • Epson TM-T20kvittoskrivare
  • Brother PJ-7mobil kvittoskrivare
Vem bygger
Jonas Hagberg

Det här är ett fritidsprojekt.

Jonas Hagberg, senior systemutvecklare och certifierad IT-arkitekt på @NBISweden till vardags. Springer för Stora Tuna OK och började faktiskt orientera först på Ösa-träffen 2023, så jag är nybörjare i skogen.

Det som driver mig är tekniskt: göra något modernt och busenkelt att sätta igång, som funkar på Linux, Mac och Android — inte bara Windows, och som kan rulla en hel tävlingsdag på batteri med billig och stabil hårdvara.

fartOLa byggs på lediga kvällar och helger, tillsammans med Claude, Codex och Gemini. Och SI-protokollet visade sig vara mer spännande att gräva i än jag trodde.

Projektet är pengafritt, AGPL-3.0-licensierat och utan exit-mål. Säg hej via GitHub, öppna en issue eller maila fartola@lindan.se. Feedback från riktiga sekretariat och löpare är det enda som styr roadmapen.

Hjälp oss

Vad funkar? Vad saknas? Vad är fel?

fartOLa byggs av och för svenska orienteringsklubbar. Är du operatör, deltagare eller bara nyfiken — prova demon och säg vad du tänker. Det är enklare nu än när Phase 2 är byggd.

Öppna demo Skicka feedback ↗ GitHub-repo ↗
Tips i demon: simulera avläsning i sidopanelen · slå på Tweaks i verktygsfältet för att byta sv/en, täthet, accentfärg