A training log for USPSA · IDPA · Steel Challenge

Log the reps.
See where you're actually getting faster.

A private training and match log for competitors who train hard and want the numbers to prove it — dry-fire trends, classifier average, stage breakdowns, round count, cost, and malfunctions.

  • Free while it is being built
  • No account
  • Runs in your browser
  • Data stays on your device

Nothing to install. Add it to your home screen and it behaves like an app. It is still being built — you can use it today, and App Store and Play Store versions are planned. Get one email when they land.

Sample log included — load in one tap, clear in one tap.

Before you click anything

The reasonable questions, answered.

Straight answers, before you tap anything. This section exists because you're right to be careful.

Where does my data go?

It stays on your device. There is no account and no cloud. The maker cannot read it. Today the app collects nothing at all.

What does it cost?

Nothing right now — I'm building it in the open and it's free while I do. It won't always be free: when I set a price it'll be a one-time purchase, not a subscription, and you'll see it here first. Dry-fire logging is free forever and never counts toward anything. So is logging matches, and so is looking at and exporting everything you've already put in.

Do I have to sign up?

No. Open the web app and start. If you want to be told when the native apps launch, one email — that's the whole ask.

Will you sell what I log?

No. Nothing is sent today. Two things are planned, and they work in opposite directions: anonymous usage and crash reports — which screens get used, what breaks — arrive switched on, with one switch to turn them off, except in the EU and EEA, where the app asks first; benchmarks stay off everywhere unless you switch them on. Either way, what leaves is aggregate numbers worked out on your own device — never the log, never anything identifying, never sold.

How do I move it between devices?

You save a file from one and load it on the other, through your own iCloud or Files. No middleman.

Do I have to retype match results?

No. A PractiScore export brings a match in stage by stage; a USPSA export brings your classifier scores in. Neither one gets retyped.

Michael Minik, founder of FirearmLog, with his dog Chelsea.

Why this exists

“I could hit a static target with unlimited time. Then a class added a timer, movement, and pressure — and it fell apart. I stopped guessing and started measuring. That became FirearmLog.”

I came to the sport late knowing nothing. I'm early in my first season, training every week and working toward my first USPSA classification. The full story — how the log was built, what it fixed — lives at My story.

— Michael Minik, founder

What the log answers

Real entries in. Real numbers back.

Every screen below is a real surface in the app, populated from the ready-made sample log. Log a session; the trend does the rest.

“Is my draw faster than it was in March?”

Every timed drill, logged and trending.

Log the drill, the time, the score — dry-fire and live. The log turns attempts into a trend, so improvement stops being a feeling and starts being a line.

  • Drills with time, distance, and score — dry-fire and live
  • Times trending across attempts, drill by drill
  • Target photos, right in the day's report
App screen: a day's session report with drill times, distances, and scores, and target photos attached
“What score moves me up a class?”

Classifier average, per division — and the next class.

Your current average in every division you run, sitting next to exactly how far your average is from the next class. The math is done.

  • Your classifier average in every division you compete in
  • The threshold the next class starts at — and how far your average sits from it
  • Season totals — matches, average match percent, entry fees
App screen: classifier average with the next class's threshold and the gap to it, season totals with entry fees, and recent match results across USPSA, IDPA, and Steel Challenge
“Was that stage speed, or was it accuracy?”

Match results, stage by stage.

Import a PractiScore export and look at the match the way you replay it in your head — stage by stage, points and time side by side. Classifier scores come in from a USPSA export. Nothing retyped.

  • PractiScore matches and USPSA classifier scores import — no retyping
  • Per-stage hit factor, points, and time
  • The pattern across the day, not just the finishing place
App screen: a match's stage breakdown — points, time, hit factor, and stage percent for each stage
“Which magazine keeps giving me trouble?”

Malfunctions, round count, and maintenance that flags itself.

Log a malfunction with a cause and, if it matters, which magazine was behind it. Round count per gun keeps itself. Set the manufacturer's schedule or your own — the log flags work due before a match does.

  • Cause detail, down to the magazine
  • Round count per gun that keeps itself
  • Manufacturer or custom service intervals
App screen: logged malfunctions listed with cause, and the magazine tied to each
“Did I actually put in the work this month?”

The training grid — every day, on the board.

A calendar grid of the days you trained — darker means more rounds — with your drill times and match accuracy trending above it. Tap a day and its session report opens.

  • Each square is a day — tap one for that session's report
  • Drill times trending, attempt by attempt
  • Points kept across your matches, on a line
App screen: a calendar grid of training days shaded by round count, with drill-time and match-accuracy trend lines above it

Also in the log: season cost — range fees, match fees, and consumables, tracked once — down to per-round and per-item spend. And your goals, with one North Star pinned to the dashboard.

Come back tomorrow and it's looking back at you.

A week from now, the chart is the point. A season from now, the answer to “am I improving?” is a line, not a feeling.

First three minutes

Set up what you run. Log one session. Come back tomorrow.

That's it. The rest — round count, maintenance, cost, trends — runs itself once entries start landing.

  1. Set up what you run

    Division and starting round count. Takes a minute.

  2. Log one session

    Built for thumbs at the range. A minute or two.

  3. Come back tomorrow

    The log is looking back at you — and the trends start filling in.

Local-first, on purpose

Your log stays with you.

There is no account and no cloud in the loop. You control every copy of your data, and moving it between devices is a file you save and load.

  • No account, no sign-up. Open the web app and start.
  • Data lives on your devices. The maker cannot read it.
  • Move it yourself. Save a file, load it on the other device — through your own iCloud or Files.
  • Collects nothing today. Usage and crash reports will arrive switched on and switch off in one tap — in the EU and EEA the app asks first. Benchmarks stay off everywhere unless you switch them on. Only aggregates ever leave.
  • Local-first, by default. No account, no cloud. Your log lives on your devices.
  • Free while it is being built. When it isn't free, you'll buy it once and it's yours — no subscription, ever. Every fix and small update stays free, and your log lives on your device either way.
  • Built for thumbs at the range. Log a session in a minute or two.

One tap from here

Stop guessing. Start measuring.

Open the log in your browser. No account, no download, nothing to cancel. One gun, one session, and the trend line starts.

Runs in your browser. Add to Home Screen and it behaves like an app. Still being built — what you open today is an early version.