# Earth Roulette

Random destination discovery with 5,000 places, filters and travel guides, a native iOS app, and Wanderer airport-based trip ideas.


## Why it exists

Travel sites are very good at selling you a hotel after you already know where you are going. They are less useful when the entire problem is: where the hell should I go?

Earth Roulette starts there. Push the button and it gives you a place you might never have searched for yourself. The random result is why the product exists.

## Filters and travel data

Pure randomness can send a broke beach person to an expensive ski resort, which is funny once. So I added filters for continents, countries, budgets and activities. You can ask for somewhere warm, cheap, good for hiking, kid-friendly, romantic, accessible, or just far away from whatever weather you are currently complaining about.

There are more than 5,000 destinations in the database. Each one has enough context to decide whether the surprise is actually interesting: sights, food, weather, history, practical travel information and the best time to go.

Save the good results to a bucket list, share them with somebody who needs convincing or check what travelling there would involve. The same destination data also underlies [Travel Bot](/projects/travelbot/).

## Wanderer adds the constraints

In August 2026 I added a more directed path beside the spin: enter a departure airport, budget, travel window and trip length. Wanderer returns a short set of round-trip ideas with outbound and return dates.

The fares come from cached provider data, not live seats, and the page tells you to recheck the price before booking. Wanderer checks that the return date works, the trip length fits and every month in your travel window gets searched.

The paid membership has checkout, activation, saved preferences and a recurring digest. It's too early for subscriber or retention numbers.

My first homepage version let Wanderer push the Spin button off the page. Less than two hours later I put it back. [The build story](/posts/adding-paid-without-losing-random/) has the details.

## The iOS app is native now

The iOS app was a WKWebView pointed at the website. In September 2026 I replaced it with a SwiftUI app that calls the same APIs directly, in the ten languages the site speaks. Place and country names come from the same database rows the website reads, so a Japanese reader gets ハルシュタット rather than Hallstatt.

<figure class="appshots">
  <div class="appshots-grid">
    <div class="appshots-panel">
      {{< responsive-image src="/images/posts/the-app-rewrite-discover.webp" alt="The spin screen showing Hallstatt, Austria with temperature and cost, and a Spin again button" sizes="(max-width: 680px) calc(100vw - 3.6rem), 300px" fallbackWidth="480" >}}
      <span class="appshots-label">Spin</span>
    </div>
    <div class="appshots-panel">
      {{< responsive-image src="/images/posts/the-app-rewrite-destination.webp" alt="A destination page for Banff with temperature, rating, places to stay and things to do" sizes="(max-width: 680px) calc(100vw - 3.6rem), 300px" fallbackWidth="480" >}}
      <span class="appshots-label">Destination</span>
    </div>
    <div class="appshots-panel">
      {{< responsive-image src="/images/posts/the-app-rewrite-planning.webp" alt="The flights screen listing fares from Milan to several destinations" sizes="(max-width: 680px) calc(100vw - 3.6rem), 300px" fallbackWidth="480" >}}
      <span class="appshots-label">Flights</span>
    </div>
  </div>
  <figcaption>Spin, destination and flights in the SwiftUI app.</figcaption>
</figure>

Rebuilding every screen against those APIs surfaced faults the web front end had been absorbing quietly: destination pages asking for fares by place slug and reporting "no fares" when the request was rejected, a home airport that reported success while writing nothing, hotel cards quoting rates scraped in 2024 under a "live prices" heading, and 506 airport codes pointing at same-named places on other continents. [The build record](/posts/the-app-rewrite-was-a-backend-audit/) goes through them.

## What it became

It began as one random button because I thought choosing a destination should be more fun. Then came the filters, destination database, travel guides, flight search, accounts, saved places, multiple languages and mobile apps.

I built the whole thing from scratch and still use the basic interaction. Spin, land somewhere unfamiliar and see whether the idea survives ten minutes of research.

[Spin Earth Roulette](https://earthroulette.com) · [Download on iOS](https://apps.apple.com/us/app/earth-roulette-trip-explorer/id6449232498) · [Download on Android](https://play.google.com/store/apps/details?id=xyz.appmaker.casznm)



---

[Canonical HTML](https://www.varyvoda.com/projects/earth-roulette/) · [Sitemap](https://www.varyvoda.com/sitemap.xml)
