← appaday

Four beers and two bus rides

Flight prices are a terrible way to choose a trip, and everyone knows it. The €19 fare lands at an airport two hours from your house at a time no train runs, and the city you land in costs €14 a beer. What you actually want to compare is the whole weekend, and nobody sells you that number. So I asked for it:

if I wanted to go ANYwhere capitol-ish in october, what would be the cheapest option? especially take into consideration cost of drinks and food since those are usually largest…

Four days later there is a planner that prices sixty October weekends the same way and sorts them. The answer, for the record, was Tirana: €272 for four days, flights, bed, food and drink included, at 22°C.

A page headed Every weekend we found, cheapest first, explaining that 60 possible trips from Stuttgart, Baden Airpark, Memmingen, Basel and Zürich are priced all in, with the weather for each. Three summary cards: €272 Tirana 9-11 Oct, €296 Tirana 16-18 Oct, €314 Pristina 9-11 Oct. Below, a sortable table with columns for all-in price, destination, weekend, departure airport, out and back times, travel, bed, food and drink, other, daytime maximum for Friday, Saturday and Sunday, and a watch-out column noting things like lands after the last train home
Every option priced the same way. The right-hand column is the one that matters: lands after the last train home: night near the airport (+€60).

One price, built the same way every time

Every option — mine or a deal site's — becomes the same record, so the numbers can actually be compared:

transport
the return fare; a one-way deal price gets doubled
to the airport
from my station and back: €5 to the nearest one, €30 to the far cheap-flight pair, €33 to Basel, €55 to Zürich
bed
the cheapest bed alone; the cheapest private room halved when there are two
a day there
two cheap meals, a coffee, four beers and two local rides
transfer
airport to centre, both ways

That day rate is the part that reorders everything. It is why a €19 flight to a Scandinavian capital loses to a €90 flight to the Balkans, and why the planner keeps the "all in for one" and "each as two" columns side by side — a private room halves, a flight does not.

Packages get the same treatment in reverse: if the price includes meals, the food line is reduced rather than deleted — a quarter off for breakfast, less than half for half-board, nearly all of it for all-inclusive. And anything it could not find is listed as a gap instead of being guessed, which is the rule I care about most.

Then the weather got a vote

A cheap weekend in the rain is not a cheap weekend, so the next thing I added was a floor:

ok adding another factor: weather: making sure the weekend has > 20 deg celsius during daytime…

Each trip carries the daytime maximum for its Friday, Saturday and Sunday — the real forecast when the weekend is within a fortnight, otherwise the 2021–25 average for that month — plus how often it rains. Of the sixty trips on the table, the page reports twenty-eight that stay above 20°. Tirana was simply the cheapest one that did.

Two lanes, because the everything-view was useless

The first version showed every bargain it could find, which is how you end up with a list of resorts you will never visit. The complaint was mine:

can we make the interface centered on the actual trips instead of categories? the deals are nice but like … when? this year? are the deals still running? losing a bit of overview…

A page headed Where to next, explaining two ways in: the places on your list whatever they cost, and wildcards, any bigger city under €250 all in for one. A list of place cards with photos: Dresden €276 by bus or train, Berlin €260 tagged friends and family, Munich €248 on the D-Ticket, Rome €316 short flight, Madrid €501, each with dates, daytime temperature, rain frequency and a link to all options
The list: one row per place, cheapest known option in front, the rest behind it.

Now there are exactly two lanes. The list is the places I actually want to go — Dresden, Berlin, Munich, Rome, Madrid, Belgrade, Algiers, Dubai, Tokyo, Bogotá — at whatever they cost, with the best option tracked per place. Wildcards are anything else, but only a real city, and only under €250 all in. Beach resorts, islands and cruises are disqualified by rule. Everything else is marked hidden and never shown.

A calendar page headed What's on, and what could be, with counters: 21 days to Amsterdam Dance Event, 136 list trips and wildcards, €109 cheapest trip for one. Below, October 2026 laid out by weekend, each with cards for a Stuttgart day trip at €83, a Munich weekend on the D-Ticket at €248 marked on your list, and a Tangier weekend at €249 marked wildcard, each with photo, dates, price for one and as two, daytime temperature and when it was last checked
The hub became a calendar: what is already on each weekend, and what else that weekend could be.

Where the numbers come from

A job runs every morning at half past seven. It asks Ryanair for the cheapest return to every destination across the next eight weekends from the three airports worth driving to, checks the overnight buses to Berlin, Dresden and Munich, and scrapes two German deal sites. Once a week a real browser goes through the long-haul list on Google Flights, because that one does not answer scripts. Beds come from reference prices for one fixed weekend, so cities can be compared; the cost of a day comes from Numbeo; the climate from an open weather archive; the photos from Wikimedia.

places
69, each with coordinates, costs, climate and a photo
options
401, all priced the same way
prices
1,491, each stamped with the day it was seen
deals
117 live, scored by airport, destination and price
jobs
daily at 07:30, plus a weekly flight sweep

Every price is stored with the date it was seen, because a fare is worth about three days and a bed about a week. The planner's own note says it plainly: re-check before booking.

It is honest about what it does not know

Numbeo blocked the scraper repeatedly, so fifteen cities borrow a neighbour's cost of living — Kraków uses Warsaw, Split uses Zagreb, Copenhagen uses Stockholm — and every one of them is flagged in the data as a stand-in rather than quietly averaged in. One deal site's feed is disallowed by its own robots file, so that path is simply not touched.

The best part is what happens when it checks a deal's own arithmetic. A headline "€122 per person" for Albania turns out to assume two people sharing a car and a studio; alone, five nights comes to about €389 all in. A €219 one-way teaser to Phuket sits next to the actual return fares it found that day: €518, €592, €634. Neither deal is a lie. They are just not the number you need.

It is also completely private

The pages hold booking codes, dates and a standing list of where I will be, and the domain has my surname on it. So the whole site ships encrypted: every page is AES-256-GCM with a key derived from a passphrase, asked for once and then kept on the device, which makes it an offline app on a phone. No search engines, no analytics, and the fonts are self-hosted so the page makes no outside requests at all. There is nothing to link to here — you would get a passphrase box — which is rather the point.

Still rough

Fares go stale faster than any scrape can keep up with, so the table is a shortlist and not a quote. The weather averages are averages. The list is mine, and the wildcard rule has opinions. And the cheapest warm weekend in October is still, at the time of writing, Tirana.