Author: Walt Boring IV, WB4BOR
Date: July 2025
To: Jared, K0TFU
Re: APRS OTA + APRS Chat mobile app integration
- Platforms: Android (Google Play) + iOS (App Store)
- Google Play: https://play.google.com/store/apps/details?id=org.hemna.aprschat
- Website: https://aprschat.online
- Backend: aprslive.com (APRS-IS firehose → TimescaleDB, ~7M packets/24h)
- Developer: Walt Boring IV, WB4BOR (wb4bor@hemna.com)
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.
- 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)
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.
What the user sees:
A "Host an Op" button that opens a guided flow:
- Describe your op — Text field for the QRV description (e.g., "portable from mountain campsite")
- Confirm location — Shows current GPS position on map, user confirms
- 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
QRTto OTA)
What the user sees:
From the active ops list or map, tap an op to open it. Then:
- Compose message — Write a short greeting or use a quick-reply preset
- 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)
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
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.
- "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)
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
OTAcallsign) - 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.
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
OTAin the sent queue - QSO state machine tracking (initiated → chasing → complete)
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
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)
The OTA bot's callsign needs to be configurable in case it changes or there are regional instances. Default: OTA.
-
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).
-
Deep links — aprsota.org/CALLSIGN links could open directly in APRS Chat (mobile deep linking).
-
Testing — APRS Chat's user base (~85 MAU) could be early adopters/testers for the OTA bot during development.
-
Service Registry — OTA will be listed in the APRS Service Registry (services.aprslive.com) with full command documentation for discoverability.
-
aprslive.com dashboard — We can provide the web-based live map and leaderboard views that complement aprsota.org, or feed data back to it.
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.
- Will there be an HTTP API alongside the APRS message bot? (For richer data retrieval)
- What's the planned bot callsign? Fixed
OTAor configurable per region? - Is there a message format spec for the bot responses? (So we can reliably parse them)
- Interest in APRS Chat being a reference client during development/testing?
- Would you want aprsota.org to link to APRS Chat as a recommended mobile client?
- Any interest in aprslive.com providing a backup/mirror of the ops data?
73 de WB4BOR