tennisscores: new app - live tennis scores (Bangle.js 2) - #4316
Conversation
Shows live matches (score, serving player) for a configurable tour, and the next scheduled fixtures when nothing is live. Manual refresh plus optional 15-minute auto refresh. Fetches over Bangle.http, so it needs an internet-enabled Gadgetbridge, and a (free) Live Tennis API key set in settings. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
I suggest adding an app loader interface for adding the api-key. Makes it easier to enter the key - the keyboard I use on the watch doesn't even have all necessary characters! owmweather does it like this: https://github.com/espruino/BangleApps/blob/HEAD/apps/owmweather/interface.html Here's a tutorial on app loader interfaces: https://www.espruino.com/Bangle.js+Storage There's also this, that maybe I would not use for this case but anyway: https://www.espruino.com/Bangle.js+Custom |
Suggested by @thyttan - the watch keyboard may not even have all the characters an API key needs. interface.html (modeled on owmweather's) loads tennisscores.json, lets you paste the key and pick a tour from the browser, and writes it back. On-watch settings entry stays as a fallback. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Great point about the watch keyboard, thanks @thyttan — an API key on the on-watch keyboard is no fun (or, as you say, not even possible on some keyboards). Added in 07b0872: |
|
I use gadgetbridge nightly with internet helper app and have this problem: [image removed] |
|
Logcat messages from Android Studio: |
|
From terminal on my laptop the api returns alright: |
|
Started working for me now. Think there was something weird with my phone and maybe dns. Not sure. Looks good. I'll merge and if you fix the presentation of the errors please post another PR 👍 |
|
Thanks for the merge — and for going as far as live-testing it on your own watch and debugging a phone-side DNS gremlin along the way. That's review service well beyond the call. On the error presentation: agreed, the raw timeout text is unreadable at watch size. I'll put up a follow-up PR that formats error states properly for the screen (short human message, no stack-ish strings). One heads-up in return: the curl/logcat output you pasted while debugging includes your actual API key in the |
Follow-up to #4316: replace the raw error text (unreadable at watch size) with short human messages -- No connection, Request timed out, Check API key, Not connected, Needs Gadgetbridge, Rate limited, Bad response -- centered and wrapped in the large font, with a small 'tap to retry' hint at the bottom. Unrecognised errors keep a short one-line detail in the small font so they stay debuggable. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Here is web console output when trying to connect account and api-key: |
|
Ok, now I noticed the confirmation email in my spam folder and now when I visit the dashboard I see the api-key is connected to the account. |
|
Glad it sorted itself — and that's genuinely useful feedback: the confirmation email landing in spam is an onboarding papercut on our side, not yours. I've flagged it internally so we can look at deliverability for the confirmation sender. Thanks for pushing all the way through to a connected key, and for merging the error-presentation PR. |
Follow-up to #4316: replace the raw error text (unreadable at watch size) with short human messages -- No connection, Request timed out, Check API key, Not connected, Needs Gadgetbridge, Rate limited, Bad response -- centered and wrapped in the large font, with a small 'tap to retry' hint at the bottom. Unrecognised errors keep a short one-line detail in the small font so they stay debuggable. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>


Adds
apps/tennisscores— Tennis Scores for Bangle.js 2: live tennis scores on the watch.Bangle.http, so it needs an internet-enabled Gadgetbridge version (same requirement asowmweather) and a free API key entered via settings (text input library needed, again likeowmweather).Screenshots (taken in the headless emulator with a stubbed
Bangle.http):bin/sanitycheck.jspasses (0 errors, 0 warnings) andeslint apps/tennisscores --max-warnings 0is clean.Disclosure: I maintain the Live Tennis API the app talks to.
🤖 Generated with Claude Code