Overview
SniperPulse is a precision sports stability trainer for Android, Wear OS, iOS, and Apple Watch. It uses your device's motion sensors to measure hold stability, detect shots, and track improvement over time.
By default, all training data stays on your device. Session recordings, shot events, and stability scores are stored locally and never transmitted unless you explicitly opt in.
SniperPulse does not require an account, a sign-in, or any personal information to use. It does not collect your name, email address, phone number, contacts, or precise location.
Two channels can transmit data off your device, both gated by your consent: anonymous app-usage telemetry through Bitdrift Capture (after you accept the in-app consent dialog), and user-initiated bug reports through XrayKit (only when you shake your device and choose to submit). Each is described in detail below.
Data Collection
By default — stays on your device
These items are read and stored on your device only. Nothing is transmitted unless you explicitly opt in.
- Motion sensor readings (accelerometer, gyroscope, magnetometer) — Measure hold stability, wobble, and shot detection during training sessions via SensorKit sensor fusion. Raw sensor streams never leave your device.
- Training session data — Shot events, stability scores (MOA), wobble traces, steadiness score, drift detection, and session duration — stored locally with your training history.
- Mounting profiles — User-created calibration profiles (orientation baseline, threshold settings) for different mounting positions. Local only.
Opt-in — uploaded only with your consent
These items are transmitted only if you enable the corresponding feature. Opting out prevents future uploads.
- Anonymous usage events — After you accept the in-app consent dialog, the app records named events for app-flow analysis: age-gate progression, consent-shown, screen navigation, and the first interaction with each motion-screen control. Event names and a structured tag (e.g. control name) are recorded; no free-text or sensor values are attached.
- Per-install device identifier (random UUID) — A random UUID generated on first install, used by Bitdrift to bucket usage events into installs. It is not derived from Android ID, IDFV, or any hardware identifier, and it resets when you uninstall the app. Used to count monthly active devices.
- Diagnostic context for usage events — Each anonymous event is tagged with app version, OS version (e.g. Android 14, iOS 17.5), network type bucket (wifi, cellular, none — never IP address or SSID), foreground/background state, and a session identifier. Used to scope events to install + session.
Bug reports only
These items are included only when you manually submit a bug report or feedback from within the app.
- User-typed bug-report description (optional) — When you shake the device to file a bug report, the form lets you type a description and pick a category. The text you type is uploaded with the report. We ask that you not include personal identifiers; the field is sent verbatim.
- Screenshot of the current screen (optional) — When you submit a bug report, a screenshot of the screen you were on is captured and uploaded with the report so we can reproduce the issue. SniperPulse screens do not display personal identifiers, but the screenshot captures whatever was visible.
- Recent app logs (optional) — When you submit a bug report, the most recent in-session log lines (Kermit log buffer) are attached so we can diagnose the issue. Logs are intentionally written without personal identifiers.
- Anonymous Firebase Authentication UID (bug reports only) — When a bug report is submitted, an anonymous Firebase Auth session is created and its UID is attached to the report record. The UID is generated by Firebase, contains no personal information, and is unique per report session.
Opt-In Features
The following features transmit data only if you explicitly enable them. They are off by default.
Anonymous app-usage telemetry (Bitdrift)
When enabled via the in-app consent dialog, SniperPulse records anonymous events (age-gate progression, consent-shown, screen navigation, first interaction with motion-screen controls) tagged with a random per-install UUID, app version, OS version, network type bucket, and foreground state. No sensor values, no free-text, no IP address, no precise location. You can disable this any time in Settings → Data Collection; toggling off stops all further uploads from your device.
Bug reports via XrayKit
Shake your device to open the bug-report form. If you choose to submit, the form sends what you typed, a screenshot of the current screen, recent in-session app logs, the report category you picked (crash, sensor accuracy, shot detection, performance, general feedback, or feature request), the app's build channel, and an anonymous Firebase Authentication UID. Reports go to LINC's Firebase project (linc-xraykit-prod) and are used solely to diagnose and fix issues.
Third-Party Services
SniperPulse interacts with the following third-party services. It uses no advertising SDKs, no analytics trackers, and no social media integrations.
- Bitdrift Capture — Data processor for anonymous app-usage telemetry. After you accept the consent dialog, named events (age-gate, screen views, first-interaction) and the per-install device UUID are buffered locally and may be uploaded to Bitdrift when triggered by a remote workflow. Bitdrift does not capture network requests, crash stack traces, or user content.
When used: Only if you opt in to the corresponding feature · Privacy policy - Firebase (Google) — project linc-xraykit-prod — Backend for user-initiated bug reports submitted through XrayKit. Reports (description, screenshot, recent logs) are uploaded to Firebase Storage and Firestore in this project, and a Slack notification is sent to LINC's internal #xray-reports channel.
When used: Only when you submit a bug report · Privacy policy
Data Retention
- Local data: Until you uninstall the app or clear storage. Uninstalling SniperPulse permanently deletes all local training data, sessions, and calibration profiles.
- Uploaded data: Anonymous usage events uploaded through Bitdrift are retained for 30 days in the LINC Bitdrift account, then permanently deleted (we have configured a 30-day account-level retention setting). Uninstalling the app resets your per-install device UUID, severing the link between any future events and prior ones.
- Bug reports: Bug-report attachments (screenshots, logs) stored in Firebase Storage are automatically deleted 90 days after upload. The structured report record in Firestore (description text, category, anonymous Firebase UID) is also automatically deleted 90 days after submission. To request earlier deletion of any report you submitted, contact us with the date and category of the report.
Children's Privacy
SniperPulse is not directed at children under 13. It is designed for adult precision sports training and is gated by an in-app age-confirmation step on first launch. We do not knowingly collect data from children under 13. If you believe a child has used the app, please contact us at hello@lincinnovations.com and we will investigate and delete any associated records.
Your Rights
Residents of California (CCPA), the European Union (GDPR), and similar jurisdictions have the right to access, correct, or delete personal data held about them, and to opt out of certain data uses. Because SniperPulse does not collect personal identifiers tied to individuals, some of these rights may not apply as usually framed. Contact us at hello@lincinnovations.com to exercise any rights under applicable law.
Changes to This Policy
We may update this policy as SniperPulse evolves. Changes will be reflected in the “Last updated” date at the top of this page. Material changes will be announced in-app when possible.