{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "OSSGolf",
  "home_page_url": "https://ossgolf.com",
  "feed_url": "https://ossgolf.com/feed.json",
  "description": "Open source golf hardware and software. DIY training aids and launch monitor SDKs you can build and own.",
  "language": "en",
  "icon": "https://ossgolf.com/icon.png",
  "favicon": "https://ossgolf.com/icon.png",
  "hubs": [
    {
      "type": "WebSub",
      "url": "https://pubsubhubbub.appspot.com"
    }
  ],
  "authors": [
    {
      "name": "OSSGolf"
    }
  ],
  "items": [
    {
      "id": "https://ossgolf.com/posts/osstempo/index.html",
      "url": "https://ossgolf.com/posts/osstempo/index.html",
      "title": "OSSTempo: a DIY LED tempo trainer for golf",
      "content_html": "<p>OSSTempo is an open source golf tempo trainer. A WS2812B LED strip animates a moving “comet” of light that sweeps along a channel, and you match your putter or club head to the dot to groove a consistent stroke. No audio, no phone screen to stare at mid stroke. Just a light that moves the way a good stroke moves.</p>\n<p>It is a TempoStik style trainer built entirely from open hardware and firmware. An ESP32 drives a 144 LED per meter strip over a single data pin. Control happens over Bluetooth Low Energy, so a web page or the companion iOS app can set the tempo, stroke length, and mode without reflashing anything.</p>\n<h2>Two modes</h2>\n<ul>\n<li><strong>Putting (2:1).</strong> The comet sweeps from center out to the top of the backswing, eases to a stop, then accelerates back through center at impact and out the far side on the follow through.</li>\n<li><strong>Full swing.</strong> The firmware models a full swing arc projected onto the one dimensional strip, so a one meter strip can represent a stroke that travels back and up behind you. Reference dots mark the ball, the top of the backswing, and an optional aim point.</li>\n</ul>\n<h2>Build it two ways</h2>\n<p>Same firmware, same app, two hardware paths:</p>\n<ul>\n<li><strong>Full DIY.</strong> A bare ESP32 dev board, a strip, one resistor, and one capacitor on a breadboard. Lowest cost.</li>\n<li><strong>QuinLED Dig2go.</strong> A pre assembled controller. Screw in three wires, flash, done.</li>\n</ul>\n<p>Both are documented end to end: bill of materials, wiring, flashing, and a pinned, ready to flash sketch.</p>\n<h2>What is here today</h2>\n<p>The firmware, the Web Bluetooth control page, and a native SwiftUI iOS controller are all open source and working on real hardware. The build guides cover both hardware paths.</p>\n<p>Photos and video of the trainer in action are coming soon. For now, the code and the full hardware spec are on GitHub.</p>\n<ul>\n<li><a href=\"https://github.com/OSSGolf/osstempo\">osstempo (firmware, web control, docs)</a></li>\n<li><a href=\"https://github.com/OSSGolf/osstempo-ios\">osstempo-ios (native iOS controller)</a></li>\n</ul>\n",
      "date_published": "2026-07-06T19:11:02.000Z",
      "tags": [
        "osstempo",
        "hardware",
        "esp32"
      ],
      "authors": [
        {
          "name": "OSSGolf"
        }
      ]
    },
    {
      "id": "https://ossgolf.com/posts/r10kit/index.html",
      "url": "https://ossgolf.com/posts/r10kit/index.html",
      "title": "R10Kit: an unofficial Swift SDK for the Garmin R10",
      "content_html": "<p>R10Kit is a native Swift SDK that connects directly to the Garmin Approach R10 launch monitor over Bluetooth Low Energy. No first party app, no PC tether. Your iPhone talks to the R10 and reads every shot it emits.</p>\n<blockquote>\n<p>This is an unofficial SDK. The protocol layer is reverse engineered from publicly available work (<a href=\"https://github.com/mholow/gsp-r10-adapter\">mholow/gsp-r10-adapter</a>).</p>\n</blockquote>\n<h2>The practice swing unlock</h2>\n<p>The interesting part is what the R10 gives you without a ball. On a full practice swing with no ball, the radar still reports club speed, club path, attack angle, and the full swing timing in milliseconds. R10Kit exposes all of it. That means you can build a tempo trainer around a launch monitor you already own, not just a ball flight tracer.</p>\n<p>Ball metrics (ball speed, launch angle and direction, spin rate, spin axis) populate only when the radar sees a ball leave. Everything else populates on every swing.</p>\n<h2>Screenshots</h2>\n<p>The repo ships a runnable demo app. It shows connection state, device info, and a live list of recent shots. Tap a shot to see every field the SDK exposes.</p>\n<p><img src=\"/images/r10-shot-list.png\" alt=\"R10Kit demo showing connection state, device model and firmware, battery level, and a list of recent shots labeled by club speed\"></p>\n<p><img src=\"/images/r10-shot-detail.png\" alt=\"Shot detail showing identity fields and club metrics: club speed, club path, and attack angle\"></p>\n<p><img src=\"/images/r10-tempo.png\" alt=\"Shot detail scrolled to swing timing and the derived metrics: backswing, downswing, follow through, total duration, and tempo ratio\"></p>\n<h2>What it parses</h2>\n<p>R10Kit does full proto parsing for every shot the device emits: club speed, ball speed, launch angle and direction, spin rate with axis and provenance, attack angle, club face and path, swing timing in milliseconds, shot type, and tilt at impact. The API is AsyncStream first, modern Swift Concurrency, no delegates.</p>\n<ul>\n<li>iOS 17+, watchOS 10+, macOS 14+. Pure Swift package.</li>\n<li>70 unit tests covering framing, COBS, CRC, proto parsing, time base conversion, and the swing rejection detector.</li>\n<li>Real byte regression fixtures captured from the device, so future changes cannot silently break protocol compatibility.</li>\n</ul>\n<p>Tested against an R10 on firmware 4.50 with an iPhone 16 Pro.</p>\n<h2>Get it</h2>\n<ul>\n<li><a href=\"https://github.com/OSSGolf/unofficial-r10-ios-sdk\">unofficial-r10-ios-sdk on GitHub</a></li>\n</ul>\n<p>Builds on <a href=\"https://github.com/mholow/gsp-r10-adapter\">mholow/gsp-r10-adapter</a>, under the same MIT license.</p>\n",
      "date_published": "2026-07-06T19:10:57.000Z",
      "tags": [
        "launch-monitor",
        "swift",
        "ble"
      ],
      "authors": [
        {
          "name": "OSSGolf"
        }
      ]
    }
  ]
}