Inspiration
The idea for ESMS came from a moment I don't want to repeat. I was in a national park, I got lost, my phone was down to 10% battery, and I'd twisted my ankle. I needed to tell a friend to come get me — but I couldn't explain where I was, and there was almost no signal. My messages just wouldn't send, and I had no idea if any of them were leaving my phone. That helpless feeling — knowing the message that could get you help is stuck in your pocket — is what ESMS was built to fix. No one should lose a message that matters simply because signal dropped for a while.
What it does
ESMS holds your SMS when you have no signal and sends it automatically the moment your phone reconnects to the network — even if coverage returns for only a few seconds. Instead of a message that silently fails, ESMS queues it and keeps trying in the background. You can attach your last known location as a map link, so someone can find you even if you can't describe where you are. SOS mode retries more aggressively. On dual-SIM phones, it automatically picks the SIM that actually has signal. It works fully offline — no servers, no account — and nothing leaves your device.
How we built it
ESMS is a native Android app written in Kotlin with Jetpack Compose. At its core is a local message queue: when a message can't be sent, it's stored on-device, and a background foreground-service watches for network availability and sends automatically once signal returns. State is kept in a local database, so nothing is lost if the app is closed or the phone restarts. It's built as two product flavors from one codebase — one for Google Play (with Google Play Billing for optional support) and one for the Solana dApp Store (with a Solana wallet address for support) — and it's localized to follow the phone's system language (English, Polish, Swedish etc...).
Challenges we ran into
The toughest problem was messages silently failing to send. On a dual-SIM phone, the system was trying to send through a SIM slot with no signal, and the message just died with no clear error. Tracking it down took a lot of log digging — the fix was to detect which SIM is actually registered to the network and send specifically through that one. Beyond that: making background sending reliable under Android's battery and background-execution limits, keeping the queue alive across reboots, handling the sensitive SMS permission correctly, and shipping two store variants with different support mechanisms from a single codebase without duplicating logic.
Accomplishments that we're proud of
We're proud that ESMS solves a real, overlooked problem — a message that quietly fails exactly when it matters most. The dual-SIM signal-detection fix turns a silent failure into reliable delivery. We're proud that the app is fully offline and privacy-respecting, that it attaches location so someone can actually be found, and that it ships to two very different ecosystems from one clean codebase in three languages.
What we learned
We learned how Android really handles SMS, SIM subscriptions, and network state beneath the surface — details that only appear once you push past the happy path. We learned how demanding app-store publishing is: sensitive-permission declarations, target-API requirements, billing versions, signing, and listing policies each need care. And we learned that the gap between "works on my phone" and "works reliably for everyone" is where most of the real engineering lives.
What's next for Esms
Next: deeper reliability for background sending, clearer status so users always know whether a message has left the phone, and more languages. On Solana, we're exploring Mobile Wallet Adapter integration so support can be signed directly in-app. Longer term, optional features for teams working in low-coverage environments — while keeping the core app free, offline, and private for individuals.
Log in or sign up for Devpost to join the conversation.