Skip to content

Instantly share code, notes, and snippets.

@hemna
Last active July 23, 2026 16:40
Show Gist options
  • Select an option

  • Save hemna/e333e42dd713f23e61106d03cf531656 to your computer and use it in GitHub Desktop.

Select an option

Save hemna/e333e42dd713f23e61106d03cf531656 to your computer and use it in GitHub Desktop.
APRS OTA Integration Proposal for APRS Chat

APRS OTA Integration Proposal for APRS Chat

Author: Walt Boring IV, WB4BOR
Date: July 2025
To: Jared, K0TFU
Re: APRS OTA + APRS Chat mobile app integration


About APRS Chat


Overview

APRS Chat is a mobile APRS messaging app (Android + iOS) focused on making APRS messaging a first-class experience. It's available on Google Play and the App Store. This proposal describes how we could integrate APRS OTA directly into the app to provide the best possible user experience for hosting and chasing ops.

The OTA protocol is entirely APRS messaging + position beacons — exactly what APRS Chat already handles. Rather than requiring operators to manually type Q-codes on a numeric keypad, the app can provide a guided UI that sends the correct messages to the OTA bot behind the scenes.


What APRS Chat Already Has

  • Full APRS-IS messaging (send/receive)
  • Position beaconing (GPS-based, SmartBeaconing)
  • Station map with APRS symbol rendering
  • Message deduplication and multi-path display
  • APRSThursday integration (contest banner, leaderboard, event detection)
  • Quick Reply presets (QRV, QSL, 73, CQ, etc.)
  • Premium subscription tier ($0.99/mo)

Proposed Integration

1. OTA Discovery — "Who's On The Air?"

What the user sees:
A dedicated "OTA" tab or section showing all active ops. Each op displays:

  • Host callsign + APRS symbol
  • Grid square / distance from user
  • Op description (from the QRV message)
  • Time on air / countdown timer
  • Number of chasers / QSOs completed

What happens behind the scenes:
The app sends CQ to the OTA bot and parses the response. Additionally, the app could query an OTA API endpoint (if one exists) for richer data (op descriptions, scores, chaser counts).

Map integration:
Active ops are plotted on the station map as a distinct layer with a unique pin/marker. Tapping an op marker opens the op detail view.


2. Hosting an Op — "Go On The Air"

What the user sees:
A "Host an Op" button that opens a guided flow:

  1. Describe your op — Text field for the QRV description (e.g., "portable from mountain campsite")
  2. Confirm location — Shows current GPS position on map, user confirms
  3. Go Live — One tap sends QRV + triggers a position beacon

The app handles:

  • Sending QRV <description> to OTA
  • Automatically transmitting a position beacon (the app already does this)
  • Displaying confirmation when OTA responds with "You are on the air"

During the op, the host sees:

  • A persistent banner/card showing "You are ON THE AIR"
  • Countdown timer (synced with OTA's 60min/15min/120min rules)
  • Incoming chaser notifications with their grid + message
  • QSL quick-action button for each chaser (sends @CALLSIGN QSL <msg> to OTA)
  • Chaser count and QSO count live
  • "End Op" button (sends QRT to OTA)

3. Chasing an Op — "Make a Contact"

What the user sees:
From the active ops list or map, tap an op to open it. Then:

  1. Compose message — Write a short greeting or use a quick-reply preset
  2. Chase — One tap sends @CALLSIGN <message> to OTA + auto-beacons position

The app handles:

  • Sending the directed message to OTA
  • Automatically transmitting position beacon (required within 5 mins)
  • Displaying the exchange as it happens (OTA confirms you're chasing, relays host's QSL back)
  • Showing "QSO COMPLETE" when the host's QSL arrives

Chase status indicators:

  • ⏳ Initiated (message sent, awaiting position confirmation)
  • 📡 Chasing (position confirmed, awaiting host QSL)
  • ✅ QSO Complete (host sent QSL)

4. Live Map Layer

Active ops on the map:

  • Distinct markers for active ops (different from regular APRS stations)
  • Tap marker → op summary card (host, grid, description, chasers)
  • Lines drawn between host and chasers who have completed QSOs (optional, toggle-able)
  • Host's movement shown if they beacon multiple times during the op

Integration with existing station map:

  • OTA ops are a toggleable overlay layer
  • Filter: "Show OTA ops only" mode
  • Distance circles from user's position to active ops

5. OTA Profile & Stats

Per-callsign stats page (data from aprsota.org or local tracking):

  • Total QSOs (hosted + chased)
  • Ops hosted count
  • Grid squares activated
  • Badges earned
  • Recent activity log

This mirrors the APRSThursday leaderboard pattern — fetch from API when online, show cached data when offline.


6. Notifications

  • "New op on the air!" — Push notification when a new op starts (configurable: all ops, ops within X km, ops from favorited callsigns)
  • "Chaser calling!" — When hosting, notify for each incoming chaser relay from OTA
  • "QSL received!" — When chasing, notify when host confirms
  • Quick-reply directly from the notification (Android: inline reply, iOS: notification actions)

7. aprslive.com Integration

The APRS Chat backend (aprslive.com) already ingests the full APRS-IS firehose into TimescaleDB. We can:

  • Passively index all OTA bot traffic (messages to/from OTA callsign)
  • Provide a web dashboard showing active ops, historical ops, leaderboards
  • Serve as an API source for the app's OTA data (op listings, stats, scores)
  • Show OTA ops on the aprslive.com map alongside regular APRS traffic

This gives APRS OTA a secondary web presence and provides the app with a rich API backend without depending solely on APRS messaging for data retrieval.


Technical Considerations

Message Parsing

The app needs to recognize OTA bot messages and render them with structured UI rather than raw text. Pattern matching on:

  • Messages FROM OTA (bot responses)
  • Messages TO OTA in the sent queue
  • QSO state machine tracking (initiated → chasing → complete)

Position Beacon Timing

The OTA protocol requires a position beacon within 5 minutes of QRV or chase initiation. The app should:

  • Auto-beacon when the user initiates a host/chase action
  • Show a countdown if auto-beacon fails (GPS not ready, etc.)
  • Warn if beacon hasn't been sent within the window

RF Requirement for Hosting

The OTA bot rejects hosts who send via APRS-IS only. The app should:

  • Detect whether the user is connected via RF (TNC/radio) or APRS-IS only
  • Show a warning if attempting to host without RF capability
  • Chasing has no RF requirement (APRS-IS is fine)

Bot Callsign

The OTA bot's callsign needs to be configurable in case it changes or there are regional instances. Default: OTA.


Collaboration Opportunities

  1. API access — If aprsota.org provides an API, APRS Chat can show richer data than what fits in a single APRS message response (op history, full leaderboards, badge details).

  2. Deep links — aprsota.org/CALLSIGN links could open directly in APRS Chat (mobile deep linking).

  3. Testing — APRS Chat's user base (~85 MAU) could be early adopters/testers for the OTA bot during development.

  4. Service Registry — OTA will be listed in the APRS Service Registry (services.aprslive.com) with full command documentation for discoverability.

  5. aprslive.com dashboard — We can provide the web-based live map and leaderboard views that complement aprsota.org, or feed data back to it.


Timeline Considerations

Since APRS OTA is not yet built, this integration could develop in phases:

Phase 1 — Bot goes live:
APRS Chat adds OTA message parsing and basic guided UI. Works with just the bot's APRS messages. No API dependency.

Phase 2 — API integration:
When aprsota.org has an API, the app pulls richer data (full op details, leaderboards, badges, historical stats).

Phase 3 — Full experience:
Map overlays, push notifications, deep links, premium stats dashboard.


Questions for Jared

  1. Will there be an HTTP API alongside the APRS message bot? (For richer data retrieval)
  2. What's the planned bot callsign? Fixed OTA or configurable per region?
  3. Is there a message format spec for the bot responses? (So we can reliably parse them)
  4. Interest in APRS Chat being a reference client during development/testing?
  5. Would you want aprsota.org to link to APRS Chat as a recommended mobile client?
  6. Any interest in aprslive.com providing a backup/mirror of the ops data?

73 de WB4BOR

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment