Weekly Update

Date: 2026-06-15 To: Isaac Botkin

Summary

We can now bring existing photos and media — badges, drill images, and member photos — over from the old app; we’ll be testing this with real data over the next few days, and expect to see changes in the old app reflected in the new apps. The system now sends real password-reset and verification emails, confirmed landing in the inbox. The apps can now be configured to connect to different Range Day servers — in our case, our staging and production environments — and will only ever connect to our own verified servers, so they can’t be tricked into talking to a fake one. We added monitoring that alerts the team the moment something goes wrong, improved the apps so a startup problem shows a clear message and recovers instead of going blank, and built a proof-of-concept demo that lets you speak scores aloud and have them entered automatically.

Environments

Staging

Production

Beta Program & Discovery

  • The beta pipeline grew from three training organizations to five this week — two new: XMTG Firearms Training Academy (the owner reached out to us) and Jesse Nelson at Patriot Academy (a referral that opens a door to roughly four more instructors there). All under NDA, each from researched, personalized outreach.
  • Conversations moved from “sent, awaiting” to real engagement: three detailed discovery replies landed (Cry Havoc, Code Red, XMTG) and GOAT became a live, enthusiastic text thread — keen to see the app and admin dashboard.
  • Signal this week:
    • Marketing / getting students is now the near-universal pain — Neil (Cry Havoc), Ann (Code Red), and now James Ferguson (XMTG) each named it independently; for James it’s “the business of the business” that gets in the way of the teaching he loves, and GOAT’s notes point the same way. Three of three responding instructors agree, sharpening last week’s open scope question: is acquisition/marketing something RDP should touch, or deliberately out of bounds?
    • Admin burden is the other big one — for Neil the teaching is the easy part; the headache is scheduling, paperwork, payment, and USCCA instructor reporting.
    • How they track progress today is manual and photo/video-based — Ann saves a video per student and has students photograph their targets (kept in their phone’s Photos), comparing them by hand at benchmark drills. This directly validates the score-history + target-photo direction and ties to the media work this week.
    • Not everyone tracks at all — Neil deliberately doesn’t track between sessions (pass/fail class standards only), a reminder the measurable-progress hook lands harder with some instructors than others.
  • Status by org:
    • Code Red Solutions (Ann Marie Suter — also an A Girl & A Gun chapter lead) — replied 6/13 with a detailed workflow; follow-up drafted
    • Cry Havoc Training (Neil Meyers) — replied 6/11, admin-pain focused; follow-up drafted
    • Go Outside And Train (GOAT) (Jeremiah) — live, engaged text thread; he’s messaged again and is keen to see the app; our follow-up next
    • XMTG Firearms Training Academy (James Ferguson, CEO/Director of Training — former PD Range Master) — replied 6/11 with his answers; traveling for a week, may be slow to respond
    • Patriot Academy (Jesse Nelson) — referral 6/15; welcome drafted; potential for ~4 testers
  • Full write-up: 2026-06-15 Beta testers - discovery findings vs feature set — discovery signal mapped against what’s built, what’s out of scope, and the sharpened marketing-scope question

Last Week

  • Built the photo and media migration pass — achievement badges, drill images, and member-uploaded photos can carry over from the old app, linked to the right people and drills, with the old badge images preserved ahead of shutting down the old Supabase storage (built and wired; testing against Supabase in staging planned within the next few days)
  • Brought transactional email fully online — password-reset and account-verification messages now send through Postmark and were verified working end to end on staging
  • Built out how the apps connect to different Range Day servers — configuration that lets us point them at our staging and production environments, with the server validating each connection
  • Stood up monitoring and alerting — the team is now emailed when something goes wrong, after several rounds of tuning so alerts fire accurately
  • Hardened app startup — a failure now renders a clear, recoverable message instead of a blank screen, across both the web app and the dashboard
  • Strengthened the build and release pipeline with safety guards, structural cleanup, and deployment-isolation fixes
  • Built an AI playground demo for voice-driven score entry, plus a small on-device model-size selector added to it
  • The system is now backed by 831 automated tests, all passing — up from roughly 650 the week prior

This Week

  • Run the migration end to end against a real exported dataset in staging — now including the new photo and media pass — and close any gaps it surfaces
  • Forward ongoing media changes through sync so new photos and badges in the old app keep mirroring over
  • Exercise the existing app’s features and confirm each change reflects correctly in our staging environment
  • Continue wiring the deployment pipeline for beta iOS and Android builds
  • Style and polish the Dashboard and PWA ahead of opening them to beta users
  • Resolve the open Analytics & Crash Reporting decision

Changelog

New since the 2026-06-08 update.

Data Migration — Media (photos & badges)

  • Built the pass that carries existing media over from the old app — achievement badges, drill images, and member photos — stored content-addressed and linked to the right user and drill (testing against Supabase in staging planned within the next few days)
  • Schema and wire-format groundwork for entity-linked media (additive, non-breaking)
  • Media transfer pass that moves files from the old system into the new one, wired through the CLI
  • Preserved 49 legacy badge images ahead of decommissioning the old Supabase storage
  • Earlier migration corrections: shared record IDs so the same item never imports twice (ETL + sync)

Transactional Email — now live on staging

  • Password-reset and account-verification emails now send through Postmark
  • Fail-fast configuration so the system surfaces a misconfiguration loudly instead of silently dropping email
  • Email secrets plumbed through the deployment pipeline; staging go-live verified end to end

White-Label Instance Licensing & Capability Enforcement

  • Server now enforces per-instance capabilities — proprietary content (e.g. T.REX’s drill catalog) is only available to white-label instances configured for it
  • License delivery automated through the deployment pipeline, with an onboarding runbook
  • CLI tooling to issue, verify, and inspect a license, with verification gates in CI
  • Full written spec prepared for the next phase of drill-catalog enforcement (for review)

Observability — Monitoring & Alerts

  • White-label instance-license expiry metrics with Grafana alerts
  • Alert email delivery via Postmark, tagged per environment so it’s clear where an alert came from
  • Several rounds of tuning so alerts fire accurately — not silently dead, not false alarms

Reliability & Infrastructure

  • Apps show a clear, recoverable message instead of a blank screen if they fail to start (web app + dashboard), including graceful handling of offline-storage failures
  • Internal storage restructured into its own component for cleaner separation
  • Release-pipeline safety guards: releases can’t be cut from an unclean branch; build checks catch configuration drift; per-app deploy isolation so one app’s release can’t clobber another
  • Metrics endpoint moved off the public tunnel; secrets-only changes now reach running servers; CI runtimes updated ahead of an upstream deadline

Playground — Voice Score Entry demo

  • Speak scores and have them parsed automatically, with an evaluation harness comparing three approaches
  • Small addition: on-device model-size selector for the local model tier