oosioo
A map of Seoul with a full-day espresso ride course along the Han River bike paths and forty espresso bars, titled Seoul Espresso Ride Map
SeriesA Page for Today · Ep. 13

Ride Your Bike at Leisure

The line in my notebook read, "Ride your bike at leisure." Not long ago there was another death at a marathon. Somewhere along the way recreational sport tilted toward competing on times and gear, and fewer people are taking up cycling. After tracing that trend in numbers, I built courses for an "espresso ride": riding slowly from bar to bar, one espresso at each. I found 40 espresso bars in Seoul, explained how routing works with weights tuned for bikes, and put fourteen courses, from neighborhood loops to a full day, on a Seoul Espresso Ride Map. The thirteenth piece in A Page for Today.

· SYSOP · 4 views

A map of Seoul with a full-day espresso ride course drawn in green along the Han River bike paths from west to east. Forty brown dots mark espresso bars. The title "Seoul Espresso Ride Map" sits in the upper left

When I opened my idea notebook today, this line was written there.

Ride your bike at leisure.

I stayed on that line for a long time because of news from a few days ago. On the morning of October 11, at a half marathon in central Seoul, a woman in her twenties collapsed on Cheonggyecheon-ro, about 500 m short of the finish. She was given CPR at the scene and taken to hospital, but she died the next day (MBC). The cause has not been made public. Before that, on September 19, at a mountain-running event on Geombongsan in Chuncheon, a 46-year-old man was found on the trail in cardiac arrest and did not survive (MBC).

May they both rest in peace. I don't know what made them fall, and I won't guess. But after hearing the news my thoughts kept returning to one place. How did exercise we take up to look after our bodies turn so often into pushing those bodies to the limit?

When did recreational sport become a race?

Running events have exploded in just a few years. According to National Police Agency figures, marathon participants in Korea went from 320,000 in 2022 to more than one million in 2024. In 2024 alone there were 254 races. Of the 179 safety incidents at races between 2020 and September 2025, 63 happened in 2024 (Runtalk). More people means more accidents. That sounds obvious, but it is worth asking what all those new people are running toward: finisher certificates, pace, medals.

Cycling is no different. I used to ride quite a lot as a hobby. At some point, though, the groups I rode with seemed to drift somewhere strange. Everyone rode too dangerously, and keeping up with gear and times started to matter more than the fun of riding.

I went looking for numbers to see whether this was only my impression. First, cycling's place in recreational sport overall.

In the Ministry of Culture, Sports and Tourism's National Sports Participation Survey, the share naming cycling among their main activities (top three) was 10.3% in 2019, 5.0% in 2024 and 5.8% in 2025. Running rose from 4.8% in 2019 to 7.7% in 2025, overtaking cycling. 2020 to 2023 are left blank

In the ministry's National Sports Participation Survey, the share of people naming cycling as one of their main activities fell from 10.3% in 2019 to 5.8% in 2025. Over the same period running rose from 4.8% to 7.7% and overtook cycling (Ministry of Culture, Sports and Tourism). I couldn't confirm that the 2019 figure was measured the same way as today's, so rather than say it halved, I'll only say it is heading down.

Yet compared with the drop in riders, clubs are still strong. In the 2024 survey, among people who belong to a sports club, cycling came fourth (8.1%) after golf, football and badminton (Nocut News). One way to read it: casual riders left, and serious riders stayed on in groups.

Alton Sports' consolidated revenue rose from KRW 31.2 billion in 2019 to 44.9 billion in 2020, 50.0 billion in 2021 and 51.3 billion in 2022, then fell to 42.4 billion in 2023 and 28.2 billion in 2024, recovering to 32.2 billion in 2025. It fell 45% between 2022 and 2024

Bicycle makers' revenue tells the same story. Alton Sports' consolidated revenue rode the pandemic bike boom up to KRW 51.3 billion in 2022, then fell 45% to 28.2 billion in 2024 (Alton IR). Samchuly Bicycle's 2022 operating profit was down 89% from the year before (Etoday). I read it as a sign that fewer people are buying new bikes.

The people who remain go farther and faster. The Seorak Granfondo, a 208 km ride over Seoraksan in Gangwon Province, filled its 5,000 places in two minutes in 2025 (Kangwon Ilbo). On the Han River bike paths there were 471 crashes between 2019 and October 2023, and the Seoul city government said most of them involved speed, such as overtaking, crossing the center line and sudden swerves. The recommended limit is 20 km/h, and the city has asked the National Assembly to make it law (Hankook Ilbo). Nationwide, 85 people died in bicycle crashes in 2025: the number of crashes fell 6%, but deaths rose 13% (KoROAD TAAS).

To be honest, I couldn't find official statistics that show the race for gear and times directly. Nobody counts how much the average road bike price has risen, or how many crashes happen on club group rides. The numbers above only light the trend from the side. Still, they point one way. Fewer people are starting, and those who stay have got faster.

As fast as an espresso

So I'd like to suggest another way. I call it the "espresso ride." You string a few espresso bars together and ride slowly between them, having one cup at each stop. An espresso gives you caffeine without filling you up. Knocking one back standing at the bar takes a few minutes, so the breaks never drag. You don't time anything. Getting to the next bar is the whole goal.

It isn't a new idea. The traditional British "club run" worked this way. A look back at a 1990s Yorkshire club says "any club run invariably involved 2 or 3 cafe stops" and "cafes were as much the focus of the ride as the actually cycling itself." If someone was slow on the hills they always waited, and when a beginner came along they dropped the average speed to 11 mph (about 18 km/h) (Cycling Uphill). In English these are also called "no-drop rides": nobody gets left behind, however slow they are (Road Bike Rider). Since 2013, Cycling Espresso in Groningen, the Netherlands, has run no-drop rides that start from places with good coffee, with groups capped at 20 riders (Cycling Espresso).

Forty espresso bars in Seoul

First I needed places to stop. I gathered candidates from lists of Seoul espresso bars that magazines and newspapers published between 2022 and 2025 (Korea Times, Korea JoongAng Daily, The Edit, Vogue Korea and others), plus map searches district by district. Then I checked each one's status in a map app and its most recent visitor review. Shops disappear faster than you'd think. More than ten of the candidates had closed or couldn't be found on the map. Of the 42 left, I dropped a coffee stand and a sit-down café and used 40.

Leesar, which opened in Yaksu-dong in 2012, is more or less the original Seoul standing espresso bar. It now has branches in Jongno, Seongsu, Cheongdam and Jamsil too. Bars cluster most in Gangnam, Yongsan and around Seongsu, with several more in Jongno, Jung and Mapo. In five districts (Jungnang, Gangbuk, Dobong, Nowon and Geumcheon) I couldn't find anywhere I'd call an espresso bar. Sorry and Amarello are not Italian-style but Portuguese-style, serving egg tarts with the coffee.

Route finding means finding the "lightest" path

With the bars pinned, I needed paths to connect them. The way a map app finds a route is simpler than it looks. It turns the road network into points and lines. An intersection is a point, and a stretch of road between two intersections is a line. Each line gets a number, called its weight. Route finding then becomes the problem of choosing, among all the chains of lines from start to finish, the one whose numbers add up to the least.

The classic way to solve it is Dijkstra's algorithm. The Dutch computer scientist Edsger Dijkstra thought of it in 1956 and published it in 1959. Like a ripple spreading from the start, it settles "this is the cheapest way to get here" for the nearest points first, one after another. It takes the cheapest point not yet settled, settles it, and updates the neighbors along the lines leaving it. It repeats until the destination is settled. As long as no weight is negative, the path found this way is guaranteed to be the cheapest.

Because Dijkstra spreads evenly in every direction, it wastes effort searching away from the destination. A\* ("A-star"), published in 1968 by Hart, Nilsson and Raphael at the Stanford Research Institute, adds a guess: "there is at least this much road left." On a map, the straight-line distance between two points is a good guess, because no road can be shorter than a straight line. The ripple leans toward the destination and searches that much less.

Same start (Second Coffee in Jongno) and finish (Yeonhui Espresso Bar), same bike weights. On the left, Dijkstra settled 26,197 intersections in every direction, reaching downtown and even Gangnam. On the right, A* settled only 8,582 in a band between the two points. The route found is the same

On Seoul's road network I searched from Second Coffee in Jongno to Yeonhui Espresso Bar in Yeonhui-dong both ways. Dijkstra had settled 26,197 intersections before it arrived, searching all the way across the river into Gangnam. A\* looked at only 8,582 and found the same route. Real map services go one step further. They prepare the road network in advance (with methods such as contraction hierarchies) and answer in a few milliseconds even on a continent-sized network.

The lightest path for a bike

What matters more than the algorithm is the weight. The algorithm only finds, diligently, the path with the smallest total; whoever assigns the numbers decides what counts as light. If the weight is distance, you get the shortest route. If it is travel time, you get the fastest. Car navigation usually uses time, which is why going around by expressway beats a shortcut through the alleys.

A bike has different standards. Even if it's shorter, an eight-lane arterial road is worth a 2 km detour along the Han River bike path. So bike routing multiplies distance by how much of a burden that road is to a cyclist. Here is the table I used.

Road typeOpenStreetMap (OSM) tagFactor
Bike-only pathhighway=cycleway1.0
Shared bike/foot pathfootway·path + bicycle=designated1.4
Side streetresidential·service·living_street1.5
Minor roadtertiary2.2
Collector roadsecondary3.0
Arterial roadprimary4.5

A kilometer of bike-only path counts as a kilometer. A kilometer of arterial road counts as heavily as 4.5 km of riding. So the router will accept going 3.5 km farther on a bike path to avoid 1 km of arterial road. Even on a road, if a bike lane is marked I cut the factor by 30%, and places signed "dismount and walk your bike" count four times as heavy. Expressways and motor-vehicle-only roads are removed from the map altogether.

I chose these numbers myself. They are not right answers, and they differ from rider to rider. I searched the same start and finish with three tables: distance only, like a car; the table above; and an extra-cautious mode that avoids big roads much more strongly (arterial factor 12).

Results of searching the same start and finish with three weight tables. Distance only gives 6.73 km, 97% of it on roads (mostly arterials). With bike weights it grows to 7.96 km while roads drop to 11%, mostly through side streets. The extra-cautious search gives 9.54 km with 0% on roads and 35% on bike paths

By distance alone it's 6.73 km, and 97% of it is on big roads. With bike weights the route grew 1.2 km to 7.96 km, but the share on roads fell to 11%. In cautious mode it stretches to 9.54 km, but it never touches a road. The shorter path and the safer path usually pull in opposite directions. The weights are the knob that decides where you stand between them.

I didn't invent this structure. Open-source routing engines all use the same frame. OSRM keeps a small script called a "profile" for each mode of transport. The bike profile sets a speed and preference for each road type, while the car profile puts entirely different numbers on the same network. GraphHopper calls its version a "custom model" and lets users write the factors for road type, surface and slope themselves. Valhalla's bicycle costing has knobs for how much you tolerate big roads (use_roads) and hills (use_hills), each set between 0 and 1. Wheelchair routing would delete stairs entirely and add weight to curbs and slopes. Leave the road network alone, change only the numbers, and you have routing for a different mode of transport.

Which bars, in what order?

Once you can find the path between two points, what's left is which bars to visit and in what order. The ordering is the famous traveling salesman problem. With ten stops or fewer, a computer can get the exact answer. I found the lightest loop that starts at one bar, visits all of them and comes back, using a dynamic programming method that records an answer for every subset (the Held–Karp algorithm). Nine bars give more than 40,000 possible orders, but this method takes under a second.

Choosing which bars was rougher. For each course I first set which districts are allowed. I randomly pick a few bars inside them, build the lightest loop, and repeat that thousands of times. Among loops within the target distance, I keep the one with the smallest "total weight ÷ actual distance": the loop that carries the least burden per kilometer ridden. Neighborhood courses only choose within one district or one or two adjacent ones, and pass only if at least 85% of the route stays inside them.

I estimated time with a different speed for each road type: 17 km/h on bike-only paths, 12–13 km/h on shared paths and side streets to allow for signals and pedestrians, 14 km/h on roads. That's not race pace, just leisurely pedaling. I allowed 20 minutes at each bar.

For the road network I took the OpenStreetMap source data (as of October 14), kept only ways a bike can ride, and clipped it 800 m beyond the Seoul boundary. It has 133,988 intersections, 870 km of bike-only paths and 1,285 km of shared paths. Some limits, for the record. I ignored one-way streets. On roads, bikes must follow one-way rules, so on the side-street stretches you'll need to watch the signs. I didn't count hills either. Courses in Jongno and Jung that skirt Namsan and Bugaksan will be harder than the numbers say. Waiting at signals, and stairs or elevators at bridge access points, are only as complete as the map data.

Seoul Espresso Ride Map

I put the fourteen courses on one map. Tap a course in the list on the right (below, on a phone) and its route appears. The greener the line, the more bike path; the redder, the more road. The numbered cups show the order of bars. In the "Compare weights" tab you can switch between the three weight tables from above.

Seoul Espresso Ride Map. Nine neighborhood loops, four half-day rides and one full day. Tap a course to see its share of each road type and the order of bars. Line colors run in six steps from green (bike-only path) to red (arterial road). Times are riding time plus 20 minutes at each bar.
CourseDistanceTime (with stops)Bike path shareBars
Gangnam loop9.6 km1 h 39 min63%Daughters → Towners Yeoksam → Leesar Cheongdam
Yeongdeungpo loop10.1 km1 h 47 min37%Byronic East Yeouido → Simply → Chance
Gwanak & Guro loop11.2 km1 h 46 min51%Days Like This → Caldo Boramae → Amarello Guro
Jung loop11.9 km1 h 57 min8%Leesar Yaksu → Stand Up Please Euljiro → Draw
Gwangjin & Songpa loop12.6 km1 h 49 min85%Leesar Jangmi → Seonho Coffee Bar → Mots Coffee
Yongsan loop14.5 km2 h 4 min41%Mercury → Peer Coffee Bar → Orso
Seongdong & Dongdaemun loop14.6 km1 h 59 min66%Sorry Jegi → Stand Up Please Seongsu → Frolla
Jongno & Dongdaemun loop17.4 km2 h 41 min27%Sorry Gyeongbokgung → Second Coffee → Sorry Jegi → Leesar Jongno
Mapo & Gangseo loop29.3 km2 h 54 min73%Pfiff Yeonnam → Bosco → Caldo Magok
Yeouido to Seongsu39.2 km4 h 31 min80%6 bars
Jamsil to Yeouido48.0 km4 h 35 min91%5 bars
Seongsu, Gangdong and Yeongdeungpo river loop58.2 km5 h 38 min90%6 bars
Magok to Cheongdam58.7 km5 h 19 min86%5 bars
A full Seoul espresso day75.6 km7 h 25 min82%8 bars from Magok to Gangdong

One thing stands out in the numbers. Courses along the Han River reach 80–90% bike path, but downtown courses stay at 10–40% no matter how the weights are set. Jung is 8%. Seoul's bike paths were laid along rivers and streams, and there are almost none downtown, where the people and the shops are. The most weights can do there is choose side streets over roads.

The full-day course runs back and forth along the Han from Caldo in Magok to Alco in Gangdong, stopping at eight bars. Actual pedaling time is 4 hours 46 minutes; the rest is standing and drinking coffee. If eight espressos are too much, order decaf, or just have water at one or two stops. Check opening hours before you go. Many espresso bars close early, and any shop on the map may move or close at any time.

At leisure

The routing engine taught me one thing. The shortest path is usually the most dangerous one. Decide to go a little out of your way and the road quickly turns gentle. If the deal is 1.2 km more riding to cut roads from 97% to 11%, I'll take it any day.

Riding is the same. Ride to get there before everyone else and the road narrows. On a ride that only has to reach the next bar, nobody leaves if you arrive late. Park the bike outside, empty the small cup, and ride on to the next bar. That was probably all this morning's notebook was saying.

Once more, may the two people who died at those races rest in peace.

A Page for Today starts that way, from one line in a notebook, and arrives at one page of today's thoughts.

Read this series from the start: A Page for Today.