Drift
Write a message, seal it in a bottle, put it in real water. It drifts on live currents, gets pushed off course by real storms, and takes real months to get anywhere — then one day a stranger picks it up.
Problem & Scope
The Challenge
A bottle that moves on a timer is a database row and a countdown. Drift's premise is that it isn't one. A bottle released off Nova Scotia reaches Ireland because the North Atlantic actually carried it there — or it spends a winter going nowhere, because that is what the weather did. Holding that promise means live forecast and current data, a simulation that runs for months rather than seconds, inland water joined to the open sea so a bottle can leave a pier on Lake Superior and work its way down the St Marys River, and a location model that can draw a route across an ocean without ever holding anyone's real position. This one is still being built, and this page describes what it is rather than what it did.
What It's Made Of
- Rails API backend serving native iOS and Android clients
- Drift simulation on live weather and current data — ocean gyres at sea, wind and flow inland
- Three hundred navigable lakes and the rivers between them, joined to the open ocean
- Long-horizon background simulation — bottles move for months, not request cycles
- Two-stage location blurring, on the device and again before display
- Shareable bottle passports that open for people who don't have the app
- Message screening with reporting, human review, block and mute
- Consumable purchases across App Store and Play billing
On the Phone
What Makes It Work
The Water Is Real
Bottles move on live forecasts and real current data — ocean gyres at sea, wind and flow on a lake. When a passport says a storm pushed a bottle off course, that storm happened. It is the one claim the whole product rests on, so it is the one part that could not be faked with an animation and a random seed.
A Passport, Not a Feed
There is no feed, no followers, no profiles and no chat. You follow bottles, not people. What a bottle carries instead is a passport — every storm, every current, every border, every pair of hands, in the order it happened. Removing the social graph took out an entire surface of moderation and abuse along with it.
No Exact Location, Ever
Positions are blurred to about a kilometre before they leave the phone, and blurred again before anyone else sees them. No exact location is stored or shown at any point, and names are invented rather than claimed. That is privacy by construction — the server never holds the precise truth, so it cannot leak or be compelled to produce it.
Inland Water Counts
Most of the people who want to send a bottle are nowhere near an ocean. Drift knows three hundred navigable lakes and the rivers between them, so a bottle can leave a pier on Lake Superior and be picked up in another country. If there is no water near you, it says so honestly instead of pretending.
How It's Being Built
Simulate, Don't Animate
The easy version interpolates a pretty line between two points and calls it a journey. That decision would have been invisible on day one and fatal by month three, because the entire emotional payload of the product is that the ocean did this, not a designer. So the drift model runs on real data and is allowed to produce boring outcomes — a bottle that circles for a winter and gets nowhere is a correct result.
One API, Two Clients
A Rails API backend serves both the iOS and the Android app. The simulation, the hydrography and the privacy rules live in one place and are enforced once, rather than being re-implemented twice and drifting apart. The clients render the shore, the chart and the passport; they are not trusted with the model.
Blur at the Edge
The blurring happens on the device, before the position is transmitted, and again on the way out to anyone else. Doing it at the client boundary rather than in a policy document means the precise coordinate never exists server-side at all. It is a harder place to put the control and the only place where the guarantee is actually worth something.
Make the Slowness the Product
There is no streak, no notification schedule engineered to pull people back, no daily loop. Most days nothing washes up, which is the design rather than a bug. Building against retention metrics would have produced a different app — the constraint here was to make something worth forgetting about until March.
We Can Build Something Like This For You.
Designed, built and shipped end to end — the storefront, the integration and the documentation. If your business needs the same, that is the work we do.