<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Paul Jennings</title>
    <description>The latest articles on DEV Community by Paul Jennings (@eyup_io).</description>
    <link>https://dev.to/eyup_io</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3898519%2Fb4e74706-b059-479e-adfb-a1abc5028d9a.jpg</url>
      <title>DEV Community: Paul Jennings</title>
      <link>https://dev.to/eyup_io</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/eyup_io"/>
    <language>en</language>
    <item>
      <title>Introducing SUB12.io: A Free Precision Shooting Platform for Sub-12 Air Rifle Shooters</title>
      <dc:creator>Paul Jennings</dc:creator>
      <pubDate>Sun, 26 Apr 2026 09:56:15 +0000</pubDate>
      <link>https://dev.to/eyup_io/introducing-sub12io-a-free-precision-shooting-platform-for-sub-12-air-rifle-shooters-3hkn</link>
      <guid>https://dev.to/eyup_io/introducing-sub12io-a-free-precision-shooting-platform-for-sub-12-air-rifle-shooters-3hkn</guid>
      <description>&lt;h2&gt;
  
  
  SUB12: a free precision-shooting platform I built for a niche sport I love
&lt;/h2&gt;

&lt;p&gt;I shoot sub-12 ft·lbf air rifle benchrest from Yorkshire. Twenty-five-shot cards at known distances, where the difference between a good day and a great one is often a different pellet batch, half a click of windage, or a rest that didn't quite settle.&lt;/p&gt;

&lt;p&gt;It is, more than most sports I've tried, a sport of small details — and almost none of those details get recorded properly. They end up scattered across paper cards in a kit bag, photos on a phone, half-finished spreadsheets, and WhatsApp messages with club mates. I had a perfectly good record of my last great session somewhere; I just couldn't find it. And I couldn't answer questions that should have been easy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which rifle and pellet combination is actually working best for me?&lt;/li&gt;
&lt;li&gt;Am I improving over time, or did I just have one good Saturday?&lt;/li&gt;
&lt;li&gt;Which pellet batch produced the smallest groups?&lt;/li&gt;
&lt;li&gt;How are the rest of the club doing this league round?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I built &lt;strong&gt;&lt;a href="https://sub12.io" rel="noopener noreferrer"&gt;SUB12&lt;/a&gt;&lt;/strong&gt; — a free web app for tracking score cards, managing rifles and pellets, testing pellet performance, joining clubs, and running leagues. It's live now, and I'm looking for early users and contributors.&lt;/p&gt;

&lt;h2&gt;
  
  
  What SUB12 does
&lt;/h2&gt;

&lt;p&gt;At its core, SUB12 lets you log a 25-shot score card and link it to the rifle, pellet, score, X count, target photo, league, and club it belongs to. Once that's in the system, every card becomes part of a longer story.&lt;/p&gt;

&lt;p&gt;You can track:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;25-shot score cards with shot grids&lt;/li&gt;
&lt;li&gt;Personal bests and recent form&lt;/li&gt;
&lt;li&gt;X-ring counts&lt;/li&gt;
&lt;li&gt;Per-rifle performance&lt;/li&gt;
&lt;li&gt;Pellet and rifle combinations&lt;/li&gt;
&lt;li&gt;Group sizes from pellet tests&lt;/li&gt;
&lt;li&gt;Club standings and league rounds&lt;/li&gt;
&lt;li&gt;Verification, amendments, and audit trails&lt;/li&gt;
&lt;li&gt;Activity feed posts and comments&lt;/li&gt;
&lt;li&gt;Achievements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The aim isn't to digitise a paper score card. It's to make every session useful &lt;strong&gt;later&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F84wz7dat203be8njbahx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F84wz7dat203be8njbahx.png" alt="SUB12 dashboard showing best score, recent form, top rifle/pellet combo, rifle performance, leagues and clubs" width="800" height="596"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Score cards with context
&lt;/h2&gt;

&lt;p&gt;A score on its own tells you the result. A score with context tells you why.&lt;/p&gt;

&lt;p&gt;Every card in SUB12 carries the rifle, the pellet, the individual shots, the X count, the target photo, and — if the card belongs to a league — the verification status and audit trail. So when you look back at a personal best, you know exactly what produced it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi1jh8y66t380ydsevwun.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi1jh8y66t380ydsevwun.png" alt="A logged score card with shot grid, equipment, league verification, and target photo" width="800" height="596"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That trust layer matters for leagues, where club organisers need to know a card is real. It also matters for the shooter who wants to understand whether a result came from form, equipment, or a particular setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gear management
&lt;/h2&gt;

&lt;p&gt;Most benchrest shooters I know own more than one rifle and test more than one pellet. SUB12 tracks both, with profiles for each rifle and a pellet library you can attach to cards and tests.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fobltpb3p39xocmowwhkl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fobltpb3p39xocmowwhkl.png" alt="Gear page with rifle profiles showing calibre, power, cards logged, and best score" width="800" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The point is to make the rifle/pellet question answerable from your own data, not from gut feel after a single windy afternoon.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pellet testing — the part I'm most proud of
&lt;/h2&gt;

&lt;p&gt;Pellet choice in airgun shooting tends to be heavily anecdotal. People swear by a tin, then a bad batch lands and the swearing changes character.&lt;/p&gt;

&lt;p&gt;SUB12 has a dedicated pellet testing area that records group sizes per session, ranks rifle/pellet combinations over time, and shows performance trends across batches and lots.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm1lgbcocizrqrwncqts6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm1lgbcocizrqrwncqts6.png" alt="Pellet testing dashboard with group size trends and ranked rifle/pellet combinations" width="800" height="802"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The long-term goal is to make pellet selection more empirical without making it joyless. You still shoot the groups. SUB12 just remembers them properly so that the next time you stand in front of a wall of tins, you have data to point at.&lt;/p&gt;

&lt;h2&gt;
  
  
  Clubs and leagues
&lt;/h2&gt;

&lt;p&gt;Clubs in SUB12 bring members together with leaderboards, linked leagues, a shared activity feed, and member admin. Leagues support seasons, rounds, standings, score verification, amendments, and a full audit history.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgezrgxv4y50mypn90ftm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgezrgxv4y50mypn90ftm.png" alt="Club page showing top performers, members, linked leagues, and club feed" width="800" height="824"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk278lrvl9wimpreeb51i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk278lrvl9wimpreeb51i.png" alt="League Page" width="800" height="853"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There's a social layer too — follows, posts, comments, achievements — because a club is more than a fixture list, and a lot of what keeps people in the sport happens between sessions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a PWA
&lt;/h2&gt;

&lt;p&gt;Shooters capture data away from a desk, often with a poor signal, almost always on a phone. SUB12 is a progressive web app: it installs on iOS, Android, and desktop without an app store, works on capture-friendly screens at a range, and updates instantly without a release cycle.&lt;/p&gt;

&lt;p&gt;For a small niche sport, the PWA route was an easy call. I wanted to ship to every device my users actually carry, without running three codebases and waiting on store reviews.&lt;/p&gt;

&lt;h2&gt;
  
  
  The stack
&lt;/h2&gt;

&lt;p&gt;For anyone here for the build details rather than the rifles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: React, TypeScript, Vite, Tailwind CSS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Routing &amp;amp; data&lt;/strong&gt;: TanStack Router, TanStack Query&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State&lt;/strong&gt;: Zustand&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Charts&lt;/strong&gt;: Recharts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: Go with Chi&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage&lt;/strong&gt;: PostgreSQL, Redis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile&lt;/strong&gt;: Capacitor / PWA&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's a deliberately boring stack, and I'm grateful for that every time I touch it. TanStack Query took most of the data-loading mental load off the table; Go and Chi keep the backend small and well-behaved; PostgreSQL does all the heavy lifting for league scoring and audit history.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm looking for
&lt;/h2&gt;

&lt;p&gt;SUB12 works, but it has the lopsided edges any v1 has — and the people best placed to help me sand them down are the people who'll actually use it.&lt;/p&gt;

&lt;p&gt;I'd particularly value feedback from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Air rifle benchrest shooters&lt;/strong&gt; — does the score card flow match how you actually log a card?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sub-12 ft·lbf rifle owners&lt;/strong&gt; — what's missing from the gear and pellet testing setup?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Club organisers&lt;/strong&gt; — do the club tools fit how your club actually runs?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;League organisers&lt;/strong&gt; — does the verification and audit flow give you what you need?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anyone using spreadsheets or paper logs today&lt;/strong&gt; — what would make you switch?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developers interested in niche sports software&lt;/strong&gt; — issues, PRs, and "have you considered" emails are all welcome.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The kinds of feedback that'll help most: bugs, friction points, things that almost-but-don't fit your workflow, and features you'd reach for next.&lt;/p&gt;

&lt;h2&gt;
  
  
  Free, and staying free
&lt;/h2&gt;

&lt;p&gt;SUB12 is free now, and the plan is to keep it free. No subscription, no premium tier, no paywall on core features. It's a niche-sport tool built by someone in the niche, and that's how I'd like it to stay.&lt;/p&gt;

&lt;p&gt;If any of the above resonates, take it for a spin:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;→ &lt;a href="https://sub12.io" rel="noopener noreferrer"&gt;https://sub12.io&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And if you find anything rough, please let me know. That's the whole reason I'm posting this.&lt;/p&gt;

</description>
      <category>sub12</category>
      <category>airrifle</category>
      <category>benchrest</category>
      <category>socialmedia</category>
    </item>
  </channel>
</rss>
