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 match view, previous/next fixtureh/lprevious/next roundenteropen selected season, competition, league, or matchescclose match view, back out of submenus, or toggle the selectortabswitch selector focuspgup/pgdn,ctrl+u/ctrl+dscroll match detailsrreloadqquit
- 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
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