Feb 27
PhoneSalad
by Ryan Welch · 2 Min Read
I built PhoneSalad ↗ with my friend Jake as a web app for cheap international calling. Part of the motivation was personal. I have run into this problem a few times while travelling and needing to call back home to the UK to book a taxi, talk to a bank, or sort something out over the phone. The same thing comes up in the other direction as well, like needing to call a hotel abroad to amend a booking. What started out sounding fairly simple turned into one of those projects where every layer had more edge cases than expected. On the surface it is just a dialer in the browser with prepaid credit, but under that there is a lot going on around telephony providers, payments, routing, and pricing.

It is also quite a competitive space. After Skype shut down this kind of product did not disappear, and there are now several apps trying to fill that gap. Part of the appeal for us was seeing whether we could make a better UI and overall experience, and also just getting the experience of building an app in this space ourselves. The live product is available at phonesalad.com ↗.
We split the work across the stack. I focused mostly on the UI, with some backend and infrastructure work as well, while Jake handled backend work and parts of the UI. Along the way we built the customer-facing dialer, payments and account credit, call logs, pricing pages, and an admin dashboard to manage the service behind the scenes.
The technical side was much more involved than a normal web app. We implemented multiple providers including Telnyx and Twilio, which meant dealing with slightly different capabilities, APIs, and pricing models. Routing a call cheaply is not just a matter of looking up a country code either. A lot of providers price calls based on origin prefixes, destination prefixes, number type, and the route they can offer at that moment. To make that work properly you need to match the destination accurately, keep track of available origin numbers, and maintain a pool of numbers that can be used for different routes.
That part of the project taught us a lot. We ended up learning a surprising amount about call infrastructure, carrier pricing, and the messy practical details behind something that most users expect to feel instant and obvious. A lot of the work was in turning that complexity into something that looked straightforward from the UI.
More recently I have expanded the project with an agent API under the OpenClaw name. That takes the same calling infrastructure and exposes it to AI agents, so they can place outbound calls and hold two-way conversations over the phone network. It is a nice extension of the original product because the consumer dialer and the agent API are really solving the same problem from two different ends.
Last edited Apr 12