# 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 fare data comes from cached provider observations. It is not live inventory, and the page says to recheck the price before booking. The implementation checks usable return dates, trip length and every calendar month covered by the requested window.

The membership work includes checkout, activation, stored preferences and digest delivery. Those are implementation facts. This page does not claim a subscriber count, retention result or proven demand for the paid offer.

One homepage revision made Wanderer too dominant. I restored the original random heading, Spin button and Filters beside the trip form. [The build story](/posts/adding-paid-without-losing-random/) explains that choice.

## 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)
