Small Go TUI for browsing 90minut.pl.
It is read-only. It fetches public HTML, decodes it, parses it into typed models, and renders a terminal view for seasons, competitions, fixtures, tables, and match details.
go run ./cmd/90minutuij/kmove selection; in season selector, updates competitions for that seasonh/lprevious/next round; in selector, switch season/competition paneenteropen selected season, competition, league, or matchescclose match view, back out of submenus, or toggle the selectortabopen selector, or switch selector focus when already openpgup/pgdn,ctrl+u/ctrl+dscroll match detailsrfresh reload current page or match from the networkqquit
- Season and competition selection from
archsezon.php - League tables and round fixtures
- Competition submenus for III liga, regional leagues/cups, women, and futsal
- Linkless fixtures that have scores but no match page
- Match score, timeline, metadata, lineups, substitutions, and cards
- CLI/query API for scripts and non-interactive use: see CLI Data Export
cmd/90minutui: program entrypointinternal/site: fetch, charset decode, parse, classify, normalizeinternal/ui: Bubble Tea state and presentation fromsitemodels
Pipeline: fetch/decode -> parse/classify -> render/present.
Keep source-shape logic in internal/site. UI code may derive display state from
typed models, but should not parse raw HTML.
- 90minut may use
iso-8859-2; decode before parsing. - Prefer semantic selectors and stable URLs/IDs over table offsets.
- Parser tests use saved HTML fixtures under
internal/site/testdata. - Add or refresh fixtures when upstream HTML changes.
go run ./cmd/fetchfixtures
go test ./...go test ./...
go vet ./...Optional local hooks:
prek install
prek run -a