GridTicker - source release
===========================

Commit 71f23e2ec3ae9d7a068a006b381f3e9555e8148f, of 2026-09-23.

This is the complete source of the GridTicker software that runs on your
devices: the LED panel's software (on its SD card and in every update), the
web app, the Android app and the iPhone widget script. It is free software:
you can redistribute it and/or modify it under the terms of the GNU General
Public License, version 3, in LICENSE. It comes with NO WARRANTY. Which
licence covers what is in LICENSING.md.

What is NOT in here, and why:

- .claude/ (2 files): editor tooling.
- .github/ (4 files): CI for our own infrastructure.
- CLAUDE.md: internal engineering notes, largely about the proprietary service.
- PLAN.md: internal roadmap.
- docs/BACKLOG.md: the open-work list: commercial gates, what we pay a lawyer to answer, and what is not built yet.
- docs/PROD_STANDUP.md: how to stand up the proprietary service: ports, the tunnel, which secrets to generate, and the operator's own admin account by name.
- docs/notes/ (13 files): CLAUDE.md's evidence, split out of it - the same internal engineering notes, largely about the proprietary service.
- docs/plans/ (1 file): internal plans.
- infra/ (6 files): deploys and operates the service; nothing here reaches a customer.
- led_circuit_tracks.py: derived from ESPN's circuit maps; race mode draws no track without them.
- led_group_marks.py: league and conference emblems - pixel redrawings of their owners' marks; a standings table is captioned by name without them.
- led_league_marks.py: league marks - their owners' trademarks; the panel draws the league's name without them.
- led_news_marks.py: publisher logos - their owners' trademarks; the panel draws headlines without them.
- led_team_marks.py: team crests - their owners' trademarks; the panel draws abbreviations without them.
- server/ (227 files): the GridTicker service - proprietary and never distributed (server/LICENSE).
- tools/dev_server.py: runs the proprietary server locally; nothing without server/.
- tools/hand_marks/ (917 files): hand-drawn copies of team crests - still their owners' marks.
- tools/probe_* (15 files): research scripts for the service's upstream data sources.

Without the logo tables the panel runs exactly as before, drawing team
abbreviations, league names and headlines where the pictures were.

Two things on an LED panel are not in this tarball because they are not ours:

- rpi-rgb-led-matrix, the LED driver, is GPL-2.0-or-later by Henner Zeller.
  Each SD card is built from one pinned commit of it, named in
  pi/build-image.sh as MATRIX_COMMIT, and carries that source at
  /usr/src/rpi-rgb-led-matrix. Also at
  https://github.com/hzeller/rpi-rgb-led-matrix
- Raspberry Pi OS. The card lists every package on it, with its source
  package and version, at /usr/share/doc/gridticker/packages.tsv; each
  package's licence is in /usr/share/doc/<package>/copyright. Our written
  offer for that source is on the Open-source notices page,
  https://gridticker.com/licenses/

Building each part:

- LED panel: led_ticker.py runs as it is, on a Pi with the driver installed
  or on a laptop with `pip install RGBMatrixEmulator pillow`. The SD card is
  pi/build-image.sh (see pi/build-image-docker.sh to run it in Docker).
- Web app: `cd dashboard && npm ci && npm run build`.
- Android app: `cd android && ./gradlew assembleDebug`.

A few of the checks in tools/ also read the proprietary server's source, so
they will not run from this tarball. Nothing needed to build or run the
software above depends on them.

Trademarks: GridTicker and the G mark are trademarks of GridTicker LLC. The
GPL covers the code, not the name.
