<?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: Serac</title>
    <description>The latest articles on DEV Community by Serac (@serac).</description>
    <link>https://dev.to/serac</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3730586%2Fdcf6b4ac-e920-46ff-b359-2b39c69759d0.jpg</url>
      <title>DEV Community: Serac</title>
      <link>https://dev.to/serac</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/serac"/>
    <language>en</language>
    <item>
      <title>I Built CityDistance.io: A Free Tool to Find Cities from Distance</title>
      <dc:creator>Serac</dc:creator>
      <pubDate>Tue, 21 Apr 2026 13:48:47 +0000</pubDate>
      <link>https://dev.to/serac/i-built-citydistanceio-a-free-tool-to-find-cities-from-distance-23c2</link>
      <guid>https://dev.to/serac/i-built-citydistanceio-a-free-tool-to-find-cities-from-distance-23c2</guid>
      <description>&lt;p&gt;I recently launched &lt;a href="https://citydistance.io/" rel="noopener noreferrer"&gt;CityDistance.io&lt;/a&gt;, a free geography tool built around one simple question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If a city is 500 km from Paris and 800 km from Berlin, which city could it be?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most map tools are great at answering “how far is A from B?”&lt;br&gt;&lt;br&gt;
CityDistance is designed for the reverse problem: finding possible cities from distance clues.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Built It
&lt;/h2&gt;

&lt;p&gt;I enjoy geography games like Satle, SatZoom, UnZoomed, Citydle, Worldle, and GeoGuessr-style challenges.&lt;/p&gt;

&lt;p&gt;A common pattern in these games is that after each guess, you receive a distance hint. That hint is useful, but one distance alone still leaves a huge circle of possible answers.&lt;/p&gt;

&lt;p&gt;With two or three hints, though, you can triangulate the likely location.&lt;/p&gt;

&lt;p&gt;That is the main idea behind CityDistance.io.&lt;/p&gt;

&lt;h2&gt;
  
  
  What CityDistance Does
&lt;/h2&gt;

&lt;p&gt;The core tool lets you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select 2 or 3 known cities&lt;/li&gt;
&lt;li&gt;Enter distance hints in kilometers, miles, or nautical miles&lt;/li&gt;
&lt;li&gt;Draw distance rings on an interactive map&lt;/li&gt;
&lt;li&gt;Find matching cities near the intersection area&lt;/li&gt;
&lt;li&gt;Share the result with others&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is useful for geography games, but also for teaching, spatial reasoning, and exploring how cities relate to each other around the world.&lt;/p&gt;

&lt;p&gt;The current database includes 30,000+ cities worldwide, with search support for major cities and alternate names.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the Calculation Works
&lt;/h2&gt;

&lt;p&gt;CityDistance uses great-circle distance rather than flat map distance.&lt;/p&gt;

&lt;p&gt;That means the distance follows the curvature of the Earth, which is much more accurate for global city-to-city comparison.&lt;/p&gt;

&lt;p&gt;The calculation is based on the Haversine formula, then the app compares candidate cities against the distance constraints entered by the user.&lt;/p&gt;

&lt;p&gt;In practice:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Each reference city creates a distance circle.&lt;/li&gt;
&lt;li&gt;Two circles usually create two possible regions.&lt;/li&gt;
&lt;li&gt;A third reference city helps narrow the answer.&lt;/li&gt;
&lt;li&gt;Matching cities are ranked and shown on the map.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is especially helpful because game hints are often rounded, so the tool allows some tolerance instead of expecting perfect mathematical input.&lt;/p&gt;

&lt;h2&gt;
  
  
  More Than a Calculator
&lt;/h2&gt;

&lt;p&gt;CityDistance has grown beyond the original triangulation tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  Radius Map Tool
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://citydistance.io/radius/" rel="noopener noreferrer"&gt;City radius tool&lt;/a&gt; lets you pick a city and find other cities within a chosen distance.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cities within 500 km of London&lt;/li&gt;
&lt;li&gt;Cities within 1,000 miles of New York&lt;/li&gt;
&lt;li&gt;Cities within 2,000 km of Shanghai&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It visualizes the radius on the map and lists nearby cities.&lt;/p&gt;

&lt;h3&gt;
  
  
  City Distance Directory
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://citydistance.io/cities/" rel="noopener noreferrer"&gt;cities section&lt;/a&gt; is a growing directory of city pages and city-pair distance content.&lt;/p&gt;

&lt;p&gt;It is designed for people searching things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Distance from New York to Paris&lt;/li&gt;
&lt;li&gt;Cities near Tokyo&lt;/li&gt;
&lt;li&gt;Major cities within a certain range&lt;/li&gt;
&lt;li&gt;Great-circle distance between world cities&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Geography Distance Quizzes
&lt;/h3&gt;

&lt;p&gt;I also added a &lt;a href="https://citydistance.io/quiz/" rel="noopener noreferrer"&gt;quiz hub&lt;/a&gt; with several modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Daily distance challenge&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://citydistance.io/quiz/distance-guess/" rel="noopener noreferrer"&gt;Distance guessing game&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;City distance quiz&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is to help users build real geographic intuition, not just look up numbers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;p&gt;The site is built with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Astro&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;li&gt;MapLibre GL&lt;/li&gt;
&lt;li&gt;Turf.js&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Astro works well here because many pages are content-heavy and benefit from fast static rendering, while the calculator and map tools still provide interactive client-side behavior where needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Design Direction
&lt;/h2&gt;

&lt;p&gt;The visual style is intentionally practical and map-focused:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Blue for water / Earth / primary actions&lt;/li&gt;
&lt;li&gt;Green for land / geography context&lt;/li&gt;
&lt;li&gt;Orange for calls to action&lt;/li&gt;
&lt;li&gt;Clean cards and panels&lt;/li&gt;
&lt;li&gt;Interactive map as the main working surface&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted the product to feel less like a landing page and more like a tool you can immediately use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;You can try the project here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://citydistance.io/" rel="noopener noreferrer"&gt;https://citydistance.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you like geography games, try entering two distance hints from recent guesses and see how quickly the map narrows the answer.&lt;/p&gt;

&lt;p&gt;I would love feedback from developers, geography game players, teachers, and anyone who enjoys map-based tools.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>gis</category>
      <category>map</category>
      <category>game</category>
    </item>
    <item>
      <title>I Built a Free, Privacy-First Coordinate Converter That Runs Entirely in Your Browser</title>
      <dc:creator>Serac</dc:creator>
      <pubDate>Tue, 24 Mar 2026 12:47:55 +0000</pubDate>
      <link>https://dev.to/serac/i-built-a-free-privacy-first-coordinate-converter-that-runs-entirely-in-your-browser-3k1g</link>
      <guid>https://dev.to/serac/i-built-a-free-privacy-first-coordinate-converter-that-runs-entirely-in-your-browser-3k1g</guid>
      <description>&lt;p&gt;If you've ever worked with GPS data, GIS pipelines, or geospatial APIs, &lt;br&gt;
you know the pain: your data is in UTM, your map expects Decimal Degrees, &lt;br&gt;
your colleague sends you MGRS, and your database stores Geohash.&lt;/p&gt;

&lt;p&gt;Switching between coordinate formats is a small but constant friction &lt;br&gt;
point for developers, surveyors, drone operators, and anyone doing field &lt;br&gt;
work. Most online tools require sign-ups, ship your data to a server, &lt;br&gt;
or support only 2–3 formats.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;&lt;a href="https://coordconv.com" rel="noopener noreferrer"&gt;CoordConv&lt;/a&gt;&lt;/strong&gt; — a fast, &lt;br&gt;
browser-based coordinate converter that handles 7 formats in one place.&lt;/p&gt;




&lt;h2&gt;
  
  
  What It Supports
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Format&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;th&gt;Common Use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;DD&lt;/strong&gt; Decimal Degrees&lt;/td&gt;
&lt;td&gt;&lt;code&gt;40.7128, -74.0060&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Google Maps, GPS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;DMS&lt;/strong&gt; Degrees Minutes Seconds&lt;/td&gt;
&lt;td&gt;&lt;code&gt;40°42'46"N 74°00'21"W&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Aviation, nautical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;DDM&lt;/strong&gt; Degrees Decimal Minutes&lt;/td&gt;
&lt;td&gt;&lt;code&gt;40°42.767'N&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Marine, geocaching&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;UTM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;18T 583960 4507523&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Surveying, topo maps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MGRS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;18TWL8395907523&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Military, SAR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Plus Code&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;87G7PX7V+4H&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Delivery, field ops&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Geohash&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dr5regw3pg&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Spatial indexing, dev tools&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;⚡ &lt;strong&gt;Instant conversion&lt;/strong&gt; — paste any format, get all 7 outputs at once&lt;/li&gt;
&lt;li&gt;🗺️ &lt;strong&gt;Interactive map preview&lt;/strong&gt; — verify your location visually before copying&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;One-click copy&lt;/strong&gt; for every output format&lt;/li&gt;
&lt;li&gt;📦 &lt;strong&gt;Batch Converter&lt;/strong&gt; — handles CSV files or pasted tables with hundreds of rows&lt;/li&gt;
&lt;li&gt;🔄 &lt;strong&gt;Lat/Lon and Lon/Lat&lt;/strong&gt; order toggle (because GeoJSON vs GPS is a real gotcha)&lt;/li&gt;
&lt;li&gt;🎯 &lt;strong&gt;6 decimal place precision&lt;/strong&gt; (~±0.11 meters accuracy)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;👉 &lt;a href="https://coordconv.com" rel="noopener noreferrer"&gt;coordconv.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Specific tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordconv.com/utm-to-lat-long/" rel="noopener noreferrer"&gt;UTM ↔ Lat/Long&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordconv.com/dms-to-decimal-degrees/" rel="noopener noreferrer"&gt;DMS ↔ Decimal Degrees&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordconv.com/batch-coordinate-converter/" rel="noopener noreferrer"&gt;Batch Converter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Happy to answer questions about how the projection math works under the &lt;br&gt;
hood, or how to handle the WGS84 vs NAD83 vs GCJ-02 datum differences &lt;br&gt;
in your own projects. Drop them in the comments! 🗺️&lt;/p&gt;

</description>
      <category>gis</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>map</category>
    </item>
    <item>
      <title>I built a satellite city guessing game using Next.js &amp; MapLibre</title>
      <dc:creator>Serac</dc:creator>
      <pubDate>Sat, 24 Jan 2026 18:53:09 +0000</pubDate>
      <link>https://dev.to/serac/i-built-a-satellite-city-guessing-game-using-nextjs-maplibre-116j</link>
      <guid>https://dev.to/serac/i-built-a-satellite-city-guessing-game-using-nextjs-maplibre-116j</guid>
      <description>&lt;p&gt;Hey developers! 👋&lt;/p&gt;

&lt;p&gt;I've always been a fan of geography games, but I wanted to build something different: a game that tests your &lt;strong&gt;"vertical" intuition&lt;/strong&gt;—recognizing cities from high-resolution satellite imagery rather than the typical street view.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;&lt;a href="https://satpixel.com" rel="noopener noreferrer"&gt;SatPixel&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fakzf4t8o3e2ez40u4cki.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fakzf4t8o3e2ez40u4cki.jpg" alt=" " width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F436cq1b6vvwkz0q3a2ru.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F436cq1b6vvwkz0q3a2ru.jpg" alt=" " width="800" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Tech Stack 🛠️
&lt;/h3&gt;

&lt;p&gt;Since this is a side project, I wanted a stack that was fast, free to host, and easy to scale:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Framework:&lt;/strong&gt; &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt; (App Router)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment:&lt;/strong&gt; Vercel&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maps Engine:&lt;/strong&gt; &lt;a href="https://maplibre.org/" rel="noopener noreferrer"&gt;MapLibre GL JS&lt;/a&gt; (Open source alternative to Mapbox)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Imagery:&lt;/strong&gt; Primarily &lt;strong&gt;ESRI World Imagery&lt;/strong&gt; for high-res clarity.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Try it out
&lt;/h3&gt;

&lt;p&gt;I'd love to get some feedback from the dev community on the UI and game difficulty.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Play it here:&lt;/strong&gt; &lt;a href="https://satpixel.com" rel="noopener noreferrer"&gt;https://satpixel.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let me know what you think!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>gamedev</category>
      <category>nextjs</category>
      <category>map</category>
    </item>
  </channel>
</rss>
