\

Show HN: Faceoff – A terminal UI for following NHL games

96 points - yesterday at 5:44 PM


Faceoff is a TUI app written in Python to follow live NHL games and browse standings and stats. I got the inspiration from Playball, a similar TUI app for MLB games that was featured on HN.

The app was mostly vibe-coded with Claude Code, but not one-shot. I added features and fixed bugs by using it, as I spent way too much time in the terminal over the last few months.

Try it out with `uvx faceoff` (requires uv).

Source
  • yuppiepuppie

    yesterday at 8:12 PM

    Nice! I was thinking about doing something like this but for cycling, however one of the biggest PIA about building products for sports is all the gating of data.

    Does the NHL really provide an API for all games? That's nice...

      • stackskipton

        yesterday at 10:18 PM

        Officially no, but there is undocumented API (if you are commercial, they provide documentation and support) that is public without authentication.

        • vcf

          yesterday at 8:24 PM

          I had the same thought, went ahead when I found an existing Python module to access the API.

      • divbzero

        yesterday at 6:15 PM

        Related:

        Playball – Watch MLB games from a terminal - https://news.ycombinator.com/item?id=45451577 - Oct 2025 (146 comments)

        Playball: Watch MLB games from the comfort of your own terminal - https://news.ycombinator.com/item?id=37591070 - Sept 2023 (1 comment)

        Playball: Watch MLB games from the comfort of your own terminal - https://news.ycombinator.com/item?id=21653981 - Nov 2019 (42 comments)

          • j45

            yesterday at 6:48 PM

            Different sport though, but neat visualizations.

        • ipaddr

          yesterday at 11:31 PM

          Do the endpoints still work?

          https://api-web.nhle.com/v1

          Keeping upto date endpoints for sport scores is the most difficult challenge.

            • vcf

              yesterday at 11:52 PM

              I took the lazy way out and use a dependency for that. I’ll look into it and see if I can either push a fix upstream or reimplement myself.

          • captn3m0

            yesterday at 9:00 PM

            Link to the API Client is incorrect at the bottom: https://github.com/nhl-stats-api-client instead of https://github.com/liahimratman/nhl-api-client

              • vcf

                yesterday at 10:47 PM

                Thanks, fixed!

            • mooktakim

              today at 12:22 AM

              It's like the reinvention of Teletext

              • jlongman

                yesterday at 9:28 PM

                nIce! Does it have player in-game stats like TOI and +/-?

                This reminds me of that f1 tui… https://github.com/JustAman62/undercut-f1 or https://github.com/IAmTomShaw/f1-race-replay. The one I’m thinking of syncs with kodi for delayed playback “live” stats.

                  • vcf

                    yesterday at 10:44 PM

                    Not player stats, only team stats. I'll have to see if player-level stats are available in the API.

                • freedomben

                  yesterday at 6:17 PM

                  Nice, I've now created dozens of little personal tools like this now :-)

                  This is IMHO the killer AI feature for personal use. So many utlities I never would have spent time on are now within reach. Even just non-trivial bashrc aliases and functions

                    • vcf

                      yesterday at 6:21 PM

                      Yeah, I completely agree. It's awesome to be able to build anything you want (as long as it's not too complex). I, too, have at least a dozen, and I usually don't share, but with the playoffs starting, I felt others could enjoy this one.

                        • zawakin

                          yesterday at 7:37 PM

                          Same — similar pile accumulating, and GitHub has fallen way behind. I keep going back and forth on whether a monorepo is the right answer or if it'd just make the sprawl more legible without actually helping. How are you organizing yours?

                            • vcf

                              yesterday at 11:01 PM

                              One repo per project. It makes it easier when I want to share or make public. I have 100+ repos in my account and I don’t find that cumbersome.

                              • nullsanity

                                yesterday at 8:56 PM

                                [dead]

                            • embedding-shape

                              yesterday at 6:56 PM

                              > It's awesome to be able to build anything you want (as long as it's not too complex).

                              That's the thing. It was always awesome, as long as it wasn't too complex. The only thing that changed for me what was "too complex".

                              • cr125rider

                                yesterday at 6:37 PM

                                Super fun! Nice job shipping!

                        • embedding-shape

                          yesterday at 6:55 PM

                          > Acknowledgments - This project was inspired by Playball, a similar terminal application for following MLB baseball games.

                          Should've gone for something generalized that could handle a bunch of different games, instead of just another sport, so someone caring about multiple sports don't need multiple TUIs :)

                            • prh8

                              yesterday at 10:46 PM

                              Having long ago built an app that does gamecasts for multiple sports, similar to what you get from ESPN, every sport is completely different. There's almost nothing that matches up, except for the very basic concept of a box score. Even play by play has enough differences to be vastly different

                                • embedding-shape

                                  yesterday at 11:33 PM

                                  I never once built an app for gamecasts, any sport, but even I do realize that sports are different... Not sure what made you(s) believe I'm suggesting the exact same UI for all the sports.

                              • bpev

                                yesterday at 8:21 PM

                                not terminal, but fwiw: https://plaintextsports.com

                                • vcf

                                  yesterday at 7:01 PM

                                  Different sports have different ways to present the data. But most importantly, the data availability differs a lot between leagues, so there’s a benefit to having separate tools. I, for one, would not want to maintain an app for all sports.

                              • rangersny1

                                yesterday at 6:52 PM

                                Nice! In practice, how far behind the TV broadcast does it end up being?

                                  • vcf

                                    yesterday at 6:58 PM

                                    Not too much, but it’s using a Rest API, so it also depends on the refresh rate (default 30 seconds, configurable with cli argument).

                                      • brewdad

                                        yesterday at 9:27 PM

                                        That’s not bad. One of my favorite times is college football season with a big game on say, ABC. You quickly learn who it watching OTA, who is watching on cable and who has YoutubeTV based on the different reaction times after a big play.

                                • james-clef

                                  yesterday at 6:53 PM

                                  Wicked. Who is your team?

                                    • vcf

                                      yesterday at 6:57 PM

                                      Go Habs Go!

                                        • bradley_taunt

                                          yesterday at 10:14 PM

                                          Booooo!

                                          (From a Senators fan…)

                                  • cyberax

                                    yesterday at 7:34 PM

                                    What next? Perhaps a small scripting language to run on the side of the terminal?

                                    You know, just to make some simple automations possible, nothing super-special.

                                    • _doctor_love

                                      yesterday at 7:52 PM

                                      settle down

                                      • itsnh98

                                        yesterday at 7:09 PM

                                        Go Habs!

                                        • j45

                                          yesterday at 6:48 PM

                                          The missing interface from sports.

                                          • zephyrwhimsy

                                            today at 1:24 AM

                                            [dead]

                                            • zephyrwhimsy

                                              today at 1:23 AM

                                              [dead]