<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ulad Rybakou</title>
    <description>The latest articles on DEV Community by Ulad Rybakou (@uladzislaur).</description>
    <link>https://dev.to/uladzislaur</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4153031%2F4f61b6a0-92a9-42bd-b095-0c96bdcd54df.png</url>
      <title>DEV Community: Ulad Rybakou</title>
      <link>https://dev.to/uladzislaur</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/uladzislaur"/>
    <language>en</language>
    <item>
      <title>I built a free bike &amp; hike route planner because I got tired of Komoot paywalls and surprise headwinds</title>
      <dc:creator>Ulad Rybakou</dc:creator>
      <pubDate>Mon, 19 Oct 2026 18:14:53 +0000</pubDate>
      <link>https://dev.to/uladzislaur/i-built-a-free-bike-hike-route-planner-because-i-got-tired-of-komoot-paywalls-and-surprise-426e</link>
      <guid>https://dev.to/uladzislaur/i-built-a-free-bike-hike-route-planner-because-i-got-tired-of-komoot-paywalls-and-surprise-426e</guid>
      <description>&lt;p&gt;Last autumn I planned a 120 km Saturday gravel ride with friends. What should have been a 5-minute map check turned into the classic modern cycling headache:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I drew the loop in a popular route app, clicked &lt;strong&gt;Export GPX&lt;/strong&gt; to send it to my bike computer, and immediately hit a paywall: &lt;em&gt;"Unlock this region or subscribe to download your file."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Once we finally got on the road, the weather app had promised &lt;em&gt;"18°C and light breeze."&lt;/em&gt; What it didn't show was that the entire second half of our loop ran straight into a 35 km/h headwind across open fields. By kilometer 80, we were crawling at 12 km/h on flat ground with dead legs.&lt;/li&gt;
&lt;li&gt;And to top it off, my chain - which I had forgotten to measure all summer - started skipping across the cassette on every climb.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sitting at a gas station eating a cold pastry and waiting for a train home, I kept wondering: why are outdoor map apps bloated with social feeds and regional paywalls, yet still don't tell you whether you'll spend three hours fighting a headwind or riding through deep sand?&lt;/p&gt;

&lt;p&gt;Over the last few months, I built &lt;strong&gt;&lt;a href="https://scezka.com" rel="noopener noreferrer"&gt;Ściežka&lt;/a&gt;&lt;/strong&gt; (&lt;em&gt;pronounced &lt;code&gt;[ sez-ka ]&lt;/code&gt; - from the old European word for a hidden trail or footpath&lt;/em&gt;) to fix everything that annoyed me about planning rides and hikes.&lt;/p&gt;




&lt;h3&gt;
  
  
  What It Actually Does for Your Ride
&lt;/h3&gt;

&lt;p&gt;The goal was simple: open the map, plan a route anywhere in the world without hitting a paywall, and avoid unpleasant surprises out on the trail.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Free Global Maps, Surface Breakdown &amp;amp; 1-Click GPX Export
&lt;/h4&gt;

&lt;p&gt;When you draw a route in the &lt;a href="https://scezka.com/map" rel="noopener noreferrer"&gt;interactive planner&lt;/a&gt;, it immediately breaks down what is actually under your tires: how much of the ride is smooth asphalt, compacted gravel, forest track, cobblestone, or singletrack.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tailored for how you move:&lt;/strong&gt; Whether you are linking quiet dirt backroads in the &lt;a href="https://scezka.com/gravel-route-planner" rel="noopener noreferrer"&gt;Gravel Route Planner&lt;/a&gt;, scouting forest singletrack in the &lt;a href="https://scezka.com/mtb-route-planner" rel="noopener noreferrer"&gt;MTB Route Planner&lt;/a&gt;, or planning a ridge walk in the &lt;a href="https://scezka.com/hiking-route-planner" rel="noopener noreferrer"&gt;Hiking Route Planner&lt;/a&gt;, the routing adapts to your terrain preference instead of forcing you onto busy highways.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No locked regions:&lt;/strong&gt; You can plan a coffee ride around your hometown or a 5-day bikepacking trip abroad without buying "Regional Packs."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free GPX export:&lt;/strong&gt; Download a standard GPX file for Garmin, Wahoo, Hammerhead Karoo, or your phone in one click. If you have old routes trapped in other apps, we also put together a &lt;a href="https://scezka.com/komoot-alternative" rel="noopener noreferrer"&gt;Komoot alternative &amp;amp; GPX import guide&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  2. See the Headwind Before You Leave Home
&lt;/h4&gt;

&lt;p&gt;Standard weather apps tell you if it will rain in the morning. They don't tell you how the wind will hit you at kilometer 65 at 3:00 PM.&lt;/p&gt;

&lt;p&gt;In Ściežka, you set your departure time and usual riding pace. The map overlays wind arrows directly along your route for the exact hour you will pass each section:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Teal arrows:&lt;/strong&gt; Tailwinds pushing you forward.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Orange arrows:&lt;/strong&gt; Headwinds and crosswinds that will drain your legs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you see that the last 40 km of your Sunday loop is a brutal headwind on open roads, you click &lt;strong&gt;Reverse Route&lt;/strong&gt; once. Now you ride out with the wind in your face while your legs are fresh, and fly home with the wind at your back - or drag the track off exposed ridge roads into sheltered forest trails.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Standard loop:   Morning tailwind (fresh legs)  -&amp;gt; Afternoon headwind (empty legs, 13 km/h misery)
Reversed in 1s:  Morning headwind (in the trees) -&amp;gt; Afternoon tailwind (cruising home at 28 km/h)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  3. A Printable Paper Backup That Never Runs Out of Battery
&lt;/h4&gt;

&lt;p&gt;Smartphones overheat or die after 5 hours of navigation. Bike computers freeze in heavy rain. Paper never runs out of battery.&lt;/p&gt;

&lt;p&gt;If you ride long-distance audax brevets, multi-day bikepacking trips, or remote mountain hikes, the built-in &lt;a href="https://scezka.com/cue-sheet-generator" rel="noopener noreferrer"&gt;Cue Sheet &amp;amp; Roadbook Generator&lt;/a&gt; compiles your route into a clean, foldable A4 sheet. It lists every turn, distance, climb, water refill stop, and checkpoint time window - formatted so you can fold it into quarters and slip it into a waterproof handlebar pouch or jacket pocket.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. A Bike Garage That Saves Your Cassette
&lt;/h4&gt;

&lt;p&gt;A $25 bicycle chain stretched past 0.75% wear will quietly chew through a $150 cassette in a few hundred kilometers. Tubeless sealant dries up inside tires without you noticing until you get a puncture 40 km from town.&lt;/p&gt;

&lt;p&gt;In the &lt;a href="https://scezka.com/bike-garage" rel="noopener noreferrer"&gt;Virtual Bike Garage&lt;/a&gt;, you log your bikes and parts (chains, cassettes, brake pads, tires, suspension, sealant). As you log rides or sync with Strava, it tracks the mileage and hours on each component and warns you &lt;em&gt;before&lt;/em&gt; a worn part ruins your weekend trip - without requiring a paid Strava subscription.&lt;/p&gt;




&lt;h3&gt;
  
  
  Things That Surprised Me While Testing It Outdoors
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Why elevation numbers on most maps lie:&lt;/strong&gt; Have you ever ridden a dead-flat river path and had your app claim you climbed 350 meters? Satellite elevation grids have tiny 1-meter jitter every few dozen meters, and occasional data gaps that drop straight to sea level (&lt;code&gt;0m&lt;/code&gt;). Cleaning up those false spikes meant that a flat coastal ride finally shows up as flat, and a real climb shows you its true steepness.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why routes should be private by default:&lt;/strong&gt; Most cycling apps act like public social networks by default, which accidentally broadcasts where you live and when you leave home. On Ściežka, every route and garage profile is private by default. When you want to invite friends on a group ride, you generate a clean shareable snapshot link (&lt;a href="https://scezka.com/discover" rel="noopener noreferrer"&gt;or browse public community loops&lt;/a&gt;) with your home start/end points kept private.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Try It Before Your Next Weekend Ride
&lt;/h3&gt;

&lt;p&gt;Ściežka is live and completely free to use during public beta:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Plan a route:&lt;/strong&gt; &lt;a href="https://scezka.com/map" rel="noopener noreferrer"&gt;scezka.com/map&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Main site &amp;amp; overview:&lt;/strong&gt; &lt;a href="https://scezka.com" rel="noopener noreferrer"&gt;scezka.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explore shared routes:&lt;/strong&gt; &lt;a href="https://scezka.com/discover" rel="noopener noreferrer"&gt;scezka.com/discover&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Track your bike parts:&lt;/strong&gt; &lt;a href="https://scezka.com/bike-garage" rel="noopener noreferrer"&gt;scezka.com/bike-garage&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you cycle, bikepack, or hike on weekends: what do you currently use to plan your routes, and what annoys you the most about it?&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>webdev</category>
      <category>cycling</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I built a Telegram bot to split dinner bills because I hate Splitwise</title>
      <dc:creator>Ulad Rybakou</dc:creator>
      <pubDate>Wed, 30 Sep 2026 20:48:23 +0000</pubDate>
      <link>https://dev.to/uladzislaur/i-built-a-telegram-bot-to-split-dinner-bills-because-i-hate-splitwise-27km</link>
      <guid>https://dev.to/uladzislaur/i-built-a-telegram-bot-to-split-dinner-bills-because-i-hate-splitwise-27km</guid>
      <description>&lt;p&gt;A few weeks ago I was having dinner with 5 friends. The check came - crumpled thermal paper, foreign language, nobody has cash.&lt;/p&gt;

&lt;p&gt;Usually what happens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One person stares at the calculator app looking depressed.&lt;/li&gt;
&lt;li&gt;Someone says &lt;em&gt;"let's just split equally"&lt;/em&gt;, even though two people only had tea and one ordered a $30 steak.&lt;/li&gt;
&lt;li&gt;Someone suggests Splitwise. But two people don't have it, one forgot their password, the App Store wants an update, and nobody wants to spend 10 minutes setting up an account at midnight just to pay for noodles (which is why I started looking for a zero-signup &lt;a href="https://botsplit.com/compare/splitwise-alternative/" rel="noopener noreferrer"&gt;Splitwise alternative&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I was looking at that receipt thinking: phone cameras are crazy good now. Why are we still manually typing numbers into spreadsheets?&lt;/p&gt;

&lt;p&gt;So over the last few weeks I ended up building a Telegram bot to do this for us.&lt;/p&gt;

&lt;h3&gt;
  
  
  How it works
&lt;/h3&gt;

&lt;p&gt;The goal was zero friction - nobody wants to download another 150MB native app for a 20-second task:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You snap a photo of the receipt in Telegram.&lt;/li&gt;
&lt;li&gt;The bot reads the items, prices, tax, and tip automatically (and translates foreign dish names on the fly).&lt;/li&gt;
&lt;li&gt;It drops a shared Mini App card into your group chat. Everyone opens it right inside Telegram and taps what they ordered. No signups, no passwords.&lt;/li&gt;
&lt;li&gt;It calculates who owes what and collapses all debts into the fewest possible bank transfers.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj4y09iqyz7ededvv197r.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj4y09iqyz7ededvv197r.gif" alt="BotSplit demo: photo to settled trip in Telegram" width="500" height="1111"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why restaurant bill math is surprisingly messy
&lt;/h3&gt;

&lt;p&gt;Reading crumpled receipts was only half the problem. The real headaches were the everyday edge cases at the table:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Proportional tips:&lt;/strong&gt; When you &lt;a href="https://botsplit.com/guides/split-dinner-bill/" rel="noopener noreferrer"&gt;split a dinner bill&lt;/a&gt; where Bob gets a $5 beer and Alice orders a $50 bottle of wine, dividing a 15% service charge 50/50 is unfair. Tax and tips have to scale proportionally to what each person actually ordered. If you didn't drink, you don't pay tip on alcohol.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The missing cent:&lt;/strong&gt; When you split $100 three ways, you get $33.33 each - and one cent disappears. To keep the bill exact to the penny, the leftover cent automatically goes to whoever had the biggest tab. Nobody notices, and the total always matches the receipt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collapsing the debt web:&lt;/strong&gt; When 6 friends &lt;a href="https://botsplit.com/guides/split-travel-expenses/" rel="noopener noreferrer"&gt;split travel expenses&lt;/a&gt; across dinners, taxis, and groceries over a weekend, having everyone send 10 tiny Revolut or Venmo transfers to each other is awful. The app calculates each person's net balance and matches the biggest debtor directly with the biggest creditor.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Before: 6 friends sending 10 chaotic transfers back and forth
After:  Boris sends $20 to Anna, Charlie sends $15 to Anna. Done.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a group of 6 people, everyone is guaranteed to settle up in at most 5 direct transfers total.&lt;/p&gt;

&lt;h3&gt;
  
  
  Things that broke in the real world
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Thermal paper + camera flash:&lt;/strong&gt; If you take a receipt photo with the flash on glossy thermal paper, it turns into a white mirror and prices vanish. I added a quick tap-to-edit mode so you can fix a smudged price in two seconds if the photo was blurry.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile keyboard overlap:&lt;/strong&gt; On smaller phone screens, the keyboard kept covering the "Confirm" button when someone wanted to type a custom tip. Making the whole receipt card fit cleanly on one screen without awkward scrolling took a lot of real-world bar testing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The double-debt bug:&lt;/strong&gt; In my very first test with friends, I flipped a plus and minus sign when recording a repayment. Every time someone marked a debt as paid, their balance doubled instead of clearing to zero. Glad I caught that before a 4-day mountain trip.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Anyway, it's live and free to use on your next dinner or group trip:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Web: &lt;a href="https://botsplit.com" rel="noopener noreferrer"&gt;botsplit.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Telegram: &lt;a href="https://t.me/spbill_bot" rel="noopener noreferrer"&gt;@spbill_bot&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How do you and your friends usually split bills when traveling together?&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>telegram</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
