VoIP & Telecom Case Study

Callmins: the calling and virtual number product we built and run

How Dev Entity built Callmins: browser and mobile calling over real phone networks, virtual numbers, and prepaid wallet billing, live in 20 weeks.

Callmins: the calling and virtual number product we built and run

Context: Callmins is Dev Entity's own product, not a client engagement. We designed it, built it, and operate it, and our own team uses it for business calls. Every decision on this page is one we still live with in production.

20 weeks

from first commit to public launch

178

Google Play countries and regions

190+

API routes behind web and mobile

The brief

People living abroad, remote workers, and small sales teams needed a second phone number and affordable international calls without a SIM, roaming, or a carrier contract. Calls had to reach real landlines and mobiles, not only other app users, and work from a browser as well as a phone.

Challenge

Calling products cannot hide the failures other apps can. Audio has to connect through mobile networks and NATs, phones have to ring when the app is closed, every call has to be billed correctly, and app stores want proof before they approve background microphone use.

Project stack

Next.jsReactTypeScriptReact NativeExpoTelnyx WebRTCCallKit & PushKitFirebase Cloud MessagingStripeMongoDBRedisCloudflare Workers

The build choices were kept practical so the product could ship cleanly and remain easy to extend.

The product, on web and mobile

Callmins website home page with the headline Call any phone. From your browser.
The marketing site, built on the same codebase as the product.
Callmins virtual phone number page with a UK and US number picker and monthly or yearly pricing
Product pages let visitors compare number prices before signing up.
Callmins mobile app Get a Number screen listing available US numbers from $2 a month
Search by country and area code, then buy a number in the app.
Callmins mobile app country and region picker for international calls
International calling over Wi-Fi or mobile data.
Callmins mobile app wallet with quick top-up amounts and auto top-up
A prepaid wallet with quick top-ups, auto top-up, and invoices.
Callmins website on a mobile browser
The website, responsive on a phone browser.

What we built

Browser dialer

WebRTC calling with nothing to install. Calls reach real landlines and mobiles, with per-minute rates to 200+ countries.

Virtual numbers and SMS

US, UK, and Canadian numbers on monthly or yearly billing. Texts and verification codes arrive in the dashboard.

Native mobile apps

React Native and Expo apps for iOS and Android, with the native call experience and inbound ringing when the app is closed.

Wallet and payments

Prepaid balance, auto top-up, invoices, and per-minute call rating, with cards, Apple Pay, and Google Pay through Stripe.

Recording and transcripts

Call recording with an optional spoken announcement, plus transcripts of calls available from the account.

Teams

One admin, one wallet, and a login for each caller, with an auto-dialer that suggests a local or cheaper caller ID.

How we shaped it

We ran web and mobile as one product. Web work started on 22 May 2026 and the mobile app on 1 June, and both reached public launch on 9 October, sharing one versioned API.

Money lives on the server. A wallet ledger is the source of truth for balance, and call rating, number renewals, and plan purchases all write to it, so the web and mobile apps can never disagree about what a customer has.

Scheduled jobs handle the work no user is waiting on: monthly number renewals, renewal reminders, auto top-ups, and syncing carrier usage into the admin area. New features ship behind flags, so we can finish one and turn it on when the business is ready.

The hard problems we solved

When the first calling architecture went silent

Our first design ran a self-hosted Janus gateway, bridging WebRTC to a SIP trunk. Calls never connected. A packet capture showed 11 INVITE retransmissions and zero replies, and the carrier logged no call records at all. The carrier's own web dialer connected over WebRTC with the same credentials, so we moved the client to that path and kept the gateway configuration for a future vendor-neutral setup.

Calls that died two seconds in

On cellular and NAT networks, outgoing calls dropped one or two seconds after the invite. Adding TURN relay servers to the WebRTC configuration fixed the drop, and abnormal call endings now show a readable reason instead of failing silently.

Ringing a phone when the app is closed

iOS uses PushKit and CallKit, and Android uses Firebase push with a self-managed call screen. Each platform needed its own fixes, from waking listeners out of a killed state to keeping Firebase pods out of the iOS build, where they clashed with WebRTC.

Billing that cannot double-credit

A top-up can be confirmed by either the Stripe webhook or the return page, and our release checklist requires exactly one ledger row either way. If fulfillment fails after a wallet debit, the debit is refunded. Production also refuses test-mode payment keys, so a misconfigured deploy cannot hand out free credit.

A second of latency on every API call

Running at the edge closest to the visitor meant each database connection crossed from Europe to India and back, costing about a second per API call. We pinned the Cloudflare Worker beside the database and left static assets on the nearest edge.

Getting a VoIP app through three app stores

Google Play needed a foreground microphone and VoIP declaration with a demonstration video. Huawei rejected one build over a wallet top-up failure, and we fixed and resubmitted it two days later. Apple's review led us to remove an unfinished sign-in option and enable Apple Pay before resubmitting.

Outcomes

  • Public web launch on 9 October 2026 with live payments
  • Android app live on Google Play in 178 countries and regions, and on Huawei AppGallery
  • iOS app submitted to Apple and awaiting App Store release as of November 2026
  • Per-seat Teams plan live, with recording, transcripts, and the auto-dialer
  • In daily use by Dev Entity's own team for business calls

FAQs

Questions about building a VoIP app

What founders and product teams usually ask before starting a calling product.

How long does it take to build a VoIP app?

Callmins took 20 weeks from first commit to public launch, covering a web app, Android and iOS apps, billing, and an admin area. A narrower first version, such as browser-only calling, can be scoped smaller. We estimate after reviewing your platforms, countries, and billing model.

Can you add calling to an existing app or SaaS product?

Yes. Calling, numbers, and SMS can be added as a module beside your existing accounts and billing. We would review your stack first, then plan the work around in-app calling, push-based ringing on mobile, and how calls get charged.

Which telephony provider should we use?

Callmins runs on Telnyx. The right choice for you depends on the countries you need, number availability, pricing, and compliance rules. We also test early, because our first SIP design looked correct on paper and only a packet capture showed why it failed.

Can users pay per minute instead of by subscription?

Yes. Callmins supports prepaid wallets with per-minute rating, monthly and yearly number rental, and a per-seat Teams plan, so you can mix usage and subscription pricing.

Will Apple and Google approve a VoIP app?

They will review it closely, especially background microphone use, payments, and account deletion. We have submitted Callmins to Google Play, Huawei AppGallery, and Apple, handled rejections, and can prepare your declarations, review accounts, and demonstration videos.

Do you handle recording consent and calling rules?

We build the controls, such as recording that is off by default and a spoken announcement. Rules vary by country and use case, so your legal counsel should confirm what applies to your product.

Tell us what you want to build

Share your idea, your target countries, and your timeline. We will reply with our first thoughts on scope and next steps.

Book a 30-minute call

We will review your message and reply as soon as possible.