PackChat: Motorcycle intercom app I needed and built
Overview
My wife and I run Cardo Freecom 2Xs.
One friend has Sena.
Another guy has some random Amazon special.
And the next rider who shows up will probably bring something else entirely.
That is exactly why PackChat exists.
I did not build it to start a comms company. I built it because real ride groups are messy in the most normal way possible:
- mixed brands
- mixed budgets
- mixed generations of hardware
- zero chance everyone is throwing away perfectly good gear just to match one stack
That is the gap.
Cardo and Sena both make good hardware.
Discord works as a hack.
But none of those gave me what I actually wanted:
one simple ride channel, mixed gear, glove-friendly controls, and enough scale that headset tier stops deciding who gets to be in the conversation.
That is PackChat.
GitHub repo: https://github.com/Cr0wn-Gh0ul/PackChat
Screenshots






What PackChat is
PackChat is a motorcycle-first group voice app built around simple rider-created channels.
It is not trying to replace local headset intercom for every scenario.
It is not pretending the internet works everywhere.
It is not trying to become a giant social platform.
It is a practical answer to a practical problem:
how do I get the people I actually ride with into one shared channel using what they already own?
Core features
- rider-created channels for each ride or group
- up to 100 people per channel
- glove-accessible UI
- advanced audio settings
- ride leader moderation (mute + deafen)
- mixed-headset friendly
- listen-only mode for passive participants
- phone-based setup with the headset people already use
Main idea:
stop forcing the ride group to conform to hardware. Let software bend around the group.
That flexibility matters at the edge of a ride too.
Not everyone needs a full motorcycle comms unit just to stay in the loop.
Passenger, support vehicle, friend meeting later, or someone tracking the ride can still join in listen-only mode with earbuds.
That is not a replacement for a proper helmet setup.
It is just practical.
The channel is for the ride, not one hardware ecosystem.
Why current options still miss this
The issue is not that current products are bad. The issue is they solve different problems.
Cardo and Sena
Cardo and Sena are built around local comms first.
Bluetooth intercom, mesh intercom, proprietary features, hardware tiers that define how far and how many.
That works well for what it is designed to do.
But mixed, fluid ride groups hit limits fast.
Discord
Discord is what riders reach for when the rider-specific answer is missing.
That makes sense.
It already has voice, accounts, groups, and internet scale.
But it is still the wrong shape.
It is a community platform that happens to have voice.
Not a motorcycle-first comms tool built for helmets, gloves, wind, and moving groups.
PackChat
PackChat is the thing in the middle.
Not a headset ecosystem.
Not a gaming/community platform.
Just an internet-backed voice layer for the ride itself.
Why this gap exists at all
Real ride groups do not form around spec sheets. They form around:
- who already owns what
- what was on sale
- what someone bought two years ago
- what the local shop recommended
- what a friend already had mounted in their helmet
So this is not really a "voice chat" problem.
It is an interoperability problem.
The hardware ladder is real
A weird truth in this market:
capability is still heavily tied to what is clipped to the side of your helmet.
Cardo lineup
| Model | Price | Native mode | Rider cap | Range |
|---|---|---|---|---|
| Spirit HD | $179.95 | Bluetooth | 2 | 0.4 mi / 600 m |
| Freecom 2X | $203.95 | Bluetooth | 2 | 0.5 mi / 800 m |
| Freecom 4X | $314.95 | Bluetooth | 4 | 0.75 mi / 1.2 km |
| Packtalk Neo | $287.95 sale | DMC + Bluetooth | 15 | 1 mi / 1.6 km |
| Packtalk Edge | $439.95 | DMC + Bluetooth | 15 | 1 mi / 1.6 km unit-to-unit, up to 5 mi group |
Sena lineup
| Model | Price | Native mode | Rider cap | Range |
|---|---|---|---|---|
| SPIDER ST1 | $239.00 | Mesh | 24 Group Mesh / virtually limitless Open Mesh | up to 5 mi / 8 km mesh conditions |
| 50S | $379.00 | Bluetooth + Mesh + Wave | 4 Bluetooth / 24 Group Mesh / virtually limitless Open Mesh & Wave | up to 5 mi / 8 km mesh conditions |
| 60S | $439.00 | Bluetooth + Mesh + Wave | 4 Bluetooth / 24 Group Mesh / virtually limitless Open Mesh & Wave | Wave is coverage-based |
What single-unit pricing looks like
If I want more native capability, I usually climb a hardware ladder:
new tier, new topology, new ecosystem.
PackChat cuts across that.
If a headset can pair to a phone like a normal communication device, the whole group does not need to rebuy gear just to make one ride work.
Rider ceilings before internet-backed channels
That is the whole reason I built this.
If I only needed 2 to 4 people, Bluetooth intercom already existed.
If I only needed 15, Cardo already had an answer.
If I wanted 24 in private mesh, Sena already had an answer.
The point of PackChat is simple:
group size should stop being dictated by headset tier.
Internet comms are finally practical for this
No hand-waving here:
PackChat depends on cellular data.
If network dies, PackChat dies with it.
There is no local/offline fallback today.
That is a real tradeoff.
But the old reflex that "cell-based comms are too fragile to matter" is getting stale.
Coverage is better than the old mental model for most roads people actually ride most of the time.
Local mesh is still valuable.
Local Bluetooth is still valuable.
Internet-backed comms are just not niche anymore.
Once you accept that, the software gap becomes obvious.
PackChat vs Cardo vs Sena Wave vs Discord
| Thing | Built around | Best at | Where it breaks |
|---|---|---|---|
| Cardo | hardware tiers + local comms | small to mid-size local groups | mixed-brand groups still hit hardware ceilings |
| Sena Mesh / Wave | Sena ecosystem + local mesh + cellular | bigger groups inside Sena's world | still centered on Sena's stack |
| Discord | generic community voice | internet workaround that already exists | not rider-first, not glove-first, not helmet-first |
| PackChat | the actual ride group | mixed-brand channels over internet voice | depends on cellular coverage |
Blunt version
- Cardo is great at local comms, but ceiling still tracks hardware tier.
- Sena Wave is closest mainstream answer to what I wanted, but still shaped like Sena.
- Discord is the workaround because it already exists.
- PackChat is what I built when I wanted software that actually felt like riding, not server admin.
And yes, PackChat also handles people on the edge of the ride better.
Someone does not need a motorcycle comms unit just to follow along.
Even AirPods are fine for passive listen-only participation.
Why this is not just "Discord for motorcycles"
Discord gives you voice inside a giant generic platform:
servers, categories, roles, text channels, stage channels, platform furniture everywhere.
That is not what I wanted on a bike.
I wanted:
- a clean ride channel
- fast join flow
- controls that still make sense with gloves
- audio controls that matter in a helmet
- moderation that maps to how rides actually work
- passive listen-only support when that is enough
- something that feels like an intercom, not a social server
That is the difference.
The technical shape
I am not talking directly to Cardo DMC or Sena Mesh.
I am not trying to bridge proprietary headset protocols.
The headset is the audio endpoint.
The phone is the bridge.
Flow:
- helmet headset pairs to phone
- phone joins PackChat channel
- mic audio is published over WebRTC
- server forwards audio to other riders
- remote audio comes back through phone into headset
That architecture matters because PackChat is built around internet-backed channels, not helmet hardware topology.
Why WebRTC + SFU
For tiny calls, P2P is fine.
For real rider channels, P2P turns into the wrong topology quickly.
Too many direct media relationships, too much overhead, too much complexity as group size grows.
So PackChat uses WebRTC with an SFU model:
- each device publishes once
- media layer handles fan-out
- channel stays sane as participant count grows
That is how you get from demo-scale to up to 100 people per channel.
Why the phone is the key
The phone is the one device every rider already has. That makes it the obvious bridge:
- across brands
- across price tiers
- across hardware generations
- across real-world ride chaos
Android-first right now because native audio session, routing, and foreground-service work currently lives there.
And because it is phone-bridged, the channel can include passive participants too when that makes sense.
Audio path behavior in real life
Not all Bluetooth audio paths are equal.
PackChat is optimized for newer devices/OS routes when exposed.
When that path exists, audio behavior is cleaner and less dragged into legacy call-mode constraints.
When that path is not available, PackChat falls back to classic hands-free communication route.
That works, but with known tradeoffs riders already recognize:
background audio can get ducked, narrowed, or shoved into low-quality call behavior.
That is not unique to PackChat.
That is the reality of older Bluetooth communication paths.
Representative device matrix
| Device | Category | Practical note for PackChat |
|---|---|---|
| Cardo Freecom 2X | motorcycle headset | newer Cardo generation, still classic comms behavior when mic is hot |
| Cardo Freecom 4X | motorcycle headset | same general story as 2X with higher local group support |
| Cardo Packtalk Neo | motorcycle headset | newer mesh-tier hardware, still subject to classic fallback behavior |
| Cardo Packtalk Edge | motorcycle headset | flagship Cardo generation, not something I market as confirmed LE Audio |
| Sena SPIDER ST1 | motorcycle headset | newer generation, still behaves like traditional comms path in practice |
| Sena SPIDER RT1 | motorcycle headset | same general story as ST1 |
| Sena 50S | motorcycle headset | strong modern headset, still classic profile-style behavior in real path |
| Sena 60S | motorcycle headset | newer hardware, not marketed here as confirmed LE Audio route |
| AirPods Pro 2 | earbuds | strong listen-only/passive participant option |
| AirPods Max | headphones | useful for support vehicle or off-bike passive listening |
| Fodsports M1-S Pro | budget motorcycle headset | more likely to expose obvious classic Bluetooth fallback tradeoffs |
Current limitations
Clear limits make the app stronger, so here they are.
1) Bluetooth Classic still means call-grade behavior with active mic
When Bluetooth Classic mic is active, Android uses HFP/SCO path.
That means stereo background audio can downgrade into narrowband call-quality behavior.
There is no magic workaround for that on classic Bluetooth.
When mic path disengages, normal media quality returns.
2) LE Audio is not really available yet for the motorcycle gear that matters here
PackChat is structured with BLE/LE-aware detection in mind.
But current Cardo/Sena helmet firmware I have seen does not expose LE Audio profiles like BAP, PACS, or ASCS in a way this use case can rely on.
So today: optimize for better routes when exposed, otherwise classic fallback.
3) Android only right now
iOS support is planned.
Current native modules (ride-audio-session, ride-audio-route, ride-foreground-service) are Android implementations only.
4) Audio-only by design
No video.
Intentional.
Voice is the right bandwidth/battery/cost tradeoff for motorcycle comms over cellular.
5) No persistent chat/history/recording
Channels are ephemeral.
No persistent text, no message history, no call recording.
When everyone leaves, channel is gone.
By design.
6) No SMS/phone OTP auth yet
Current auth uses Cloudflare-native HMAC session handling.
SMS/OTP would require external providers outside the current Cloudflare-first architecture.
Not implemented yet.
The shortest version
Cardo and Sena make good hardware.
Discord is the workaround riders use when hardware limits get annoying.
PackChat is what I built when I got tired of both compromises.
And not everyone following a ride needs a motorcycle comms unit.
Sometimes listen-only is enough.
That is really it.