Add Live Tennis app - #3248
Conversation
Next StepsHello! Thank you so much for your change 🤜 🤛 . There are a few things you need to do:
Manual Review RequiredHang tight! A Tidbyt engineer will be by shortly to review your change. Here is what they will be looking for:
|
|
CLA Assistant Lite bot All contributors have signed the CLA ✍️ ✅ |
|
Here's the animated render, as the checklist asks for — A note on why it's linked rather than attached: this repo gitignores Frames, in order: a live ATP match at deuce with the serving dot, the same match after a point, a WTA tiebreak, and the no-live-matches state. |
7d8ca62 to
c078ac7
Compare
|
I have read the CLA Document and I hereby sign the CLA |
|
recheck |
|
Checking in after three weeks — everything on the submission checklist is done from my side: CI green, CLA signed, and the animated render posted above. The automated reply mentioned a Tidbyt engineer would come by, so this is just a polite bump to keep it from drifting toward the stale-bot window. Happy to make any changes review turns up. |

Live Tennis
Adds
apps/livetennisscores— live, point-by-point tennis scores for the ATP, WTA,Challenger and ITF tours, one match per page.
Animated 640x320 render (
pixlet render --gif --magnify 10) attached in a comment below.What it shows
0 / 15 / 30 / 40 / AD) — updated live, in yellow.TB.6-3 4-6), width-budgeted so an extendedfinal set can't overflow.
magenta = WTA, brown = Challenger, grey = ITF.
Settings
schema.Textschema.Dropdownschema.Dropdownschema.ToggleHow it differs from the existing ATP Tennis / WTA Tennis apps
Those apps are ESPN-backed and show per-set game scores for a tournament you pick
from a dropdown, plus completed and upcoming matches — and they do that well. This app
is deliberately narrower and deeper: it shows the in-game state (current point and
live tiebreak score) that ESPN's
linescoresdoesn't carry, across all four tours inone app with no tournament to choose. They're complementary; I'd expect people to run
both.
Request rate
One
http.getper render withttl_seconds = 120, using Pixlet's built-in HTTP cache(no
cache.star). That's a ceiling of86400 / 120 = 720upstream requests/day perkey+tour combination, inside the free tier's 1,000/day.
Error and empty states
Every path renders something readable rather than failing: no key configured
(
NEED A KEY), HTTP 401 (BAD KEY), HTTP 429 (OVER QUOTA), any other non-200(
API ERROR+ the status code), an unexpected body (BAD DATA), no live matches(
NO MATCHES+ the selected tour), an unfilled draw slot (TBD) and a match thathasn't started scoring yet (
About to start).Verification
pixlet check apps/livetennisscores— passes (pixlet v0.34.0, matchingPIXLET_VERSION).pixlet formatandpixlet lint— clean.are deliberately static rather than scrolling; an earlier marquee version measured
0.6–0.8 s, uncomfortably close to the cap on a cold CI runner.
live tiebreak, null player name, null score, rankings toggle, empty result, HTTP 401,
malformed body) was rendered against recorded fixtures served from localhost and
the resulting frames were inspected individually. The screenshot above comes from
those fixtures, not from live data.
Disclosures
(livetennisapi.com), the data source this app uses. I'm submitting it as a community
app, not as an ad — it's free-tier only, there's no paid upsell in the app, the user
brings their own key, and I've tried to be even-handed above about what the existing
ATP/WTA Tennis apps already do better. Happy to adjust the wording, the name, or drop
it entirely if a vendor-authored app isn't something you want in the repo.
pixlet encrypt/secret.decrypt, because a single shared key would blow through the1,000/day free tier the moment more than a handful of devices installed the app. If
you'd prefer the app to work out of the box, I can provision a high-quota key for
Tidbyt and add it that way — just say the word.
every line, and everything claimed above was verified by actually running
pixlet check/pixlet format/pixlet lintand by rendering and viewing eachstate, not by assuming. I couldn't find any policy on AI-assisted contributions in
CONTRIBUTING.md, the CLA, or tidbyt.dev, so I'm disclosing it unprompted; tell me ifthat's a problem.
main()reads an un-documented config keydev_api_base, which is not in the schema and is accepted only if it points athttp://127.0.0.1:orhttp://localhost:. It exists sopixlet rendercan be pointedat a local fixture server to test the render paths without a live match or a real key.
It can't redirect a real installation's traffic anywhere. Happy to remove it if you'd
rather it wasn't there.
I have read the CLA Document and I hereby sign the CLA