<?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: Sapm Pub</title>
    <description>The latest articles on DEV Community by Sapm Pub (@sapm_pub_c09e112ef2437a95).</description>
    <link>https://dev.to/sapm_pub_c09e112ef2437a95</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%2F3640884%2F8276f561-0d0f-4444-a912-2fe359cab579.png</url>
      <title>DEV Community: Sapm Pub</title>
      <link>https://dev.to/sapm_pub_c09e112ef2437a95</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sapm_pub_c09e112ef2437a95"/>
    <language>en</language>
    <item>
      <title>How I built Radar-Marée, a tide website for the French coast in two weeks</title>
      <dc:creator>Sapm Pub</dc:creator>
      <pubDate>Tue, 02 Dec 2025 10:03:31 +0000</pubDate>
      <link>https://dev.to/sapm_pub_c09e112ef2437a95/how-i-built-radar-maree-a-tide-website-for-the-french-coast-in-two-weeks-3346</link>
      <guid>https://dev.to/sapm_pub_c09e112ef2437a95/how-i-built-radar-maree-a-tide-website-for-the-french-coast-in-two-weeks-3346</guid>
      <description>&lt;p&gt;I wanted a simple website to answer a very basic question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“What are the tide times today near where I am?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most tide websites do the job, but they are usually centered on a few &lt;strong&gt;main harbors&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
When you search for “tide + city name”, you often land on a generic page that doesn’t really match what people actually type or where they actually go.&lt;/p&gt;

&lt;p&gt;In two weeks, I built &lt;strong&gt;Radar-Marée&lt;/strong&gt;, a website that shows &lt;strong&gt;tide times and coefficients&lt;/strong&gt; for the &lt;strong&gt;French coast&lt;/strong&gt;, by &lt;strong&gt;ZIP code&lt;/strong&gt; and &lt;strong&gt;city&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;👉 Live site: &lt;a href="https://radar-maree.fr" rel="noopener noreferrer"&gt;https://radar-maree.fr&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The idea
&lt;/h2&gt;

&lt;p&gt;The goal wasn’t to build &lt;em&gt;just another tide website&lt;/em&gt;, but to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;start from &lt;strong&gt;ZIP codes and cities&lt;/strong&gt; (what users actually type in search engines),&lt;/li&gt;
&lt;li&gt;link them to existing &lt;strong&gt;tide reference data&lt;/strong&gt; with a small custom algorithm,&lt;/li&gt;
&lt;li&gt;generate a &lt;strong&gt;static website&lt;/strong&gt;, fast and SEO-friendly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This first version focuses on a clean grid of &lt;strong&gt;coastal cities / ZIP codes&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
The algorithm is already there to attach each area to relevant reference points.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Python pipeline that generates everything
&lt;/h2&gt;

&lt;p&gt;Instead of building a big backend, I went for a very simple approach:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;pre-compute everything in Python&lt;/strong&gt;, then deploy static HTML.&lt;/p&gt;

&lt;p&gt;The pipeline looks like this:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Coastal cities and ZIP codes inventory
&lt;/h3&gt;

&lt;p&gt;I maintain a CSV file with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;cities and ZIP codes on or near the French coast,&lt;/li&gt;
&lt;li&gt;which coastline they belong to (Channel, Atlantic, Mediterranean),&lt;/li&gt;
&lt;li&gt;their coordinates (lat/lon).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This CSV is the backbone of the project.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Attaching each city/ZIP to tide reference data
&lt;/h3&gt;

&lt;p&gt;A Python script links each city/ZIP code to existing tide data via a small &lt;strong&gt;home-made algorithm&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For a given ZIP code, the script decides which reference points are relevant, then fetches the corresponding &lt;strong&gt;high tide / low tide times&lt;/strong&gt; and &lt;strong&gt;coefficients&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. SEO enrichment
&lt;/h3&gt;

&lt;p&gt;Another script enriches the inventory with SEO fields:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; for each page,&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;meta&lt;/code&gt; description,&lt;/li&gt;
&lt;li&gt;a clean URL slug,&lt;/li&gt;
&lt;li&gt;a canonical URL.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The idea is simple: each page should clearly answer a query like&lt;br&gt;&lt;br&gt;
&lt;code&gt;"marée + nom de ville"&lt;/code&gt; (tide + city name).&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Static HTML generation
&lt;/h3&gt;

&lt;p&gt;Finally, a generator script takes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the enriched CSV,&lt;/li&gt;
&lt;li&gt;an HTML template,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and produces &lt;strong&gt;all the static pages&lt;/strong&gt; (city pages, ZIP code pages, etc.).&lt;/p&gt;

&lt;p&gt;Deployment is then just a matter of uploading static files behind a CDN.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why static instead of a big dynamic app?
&lt;/h2&gt;

&lt;p&gt;A project like Radar-Marée doesn’t need to compute things on every request.&lt;/p&gt;

&lt;p&gt;By precomputing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I keep the infrastructure very simple,&lt;/li&gt;
&lt;li&gt;I don’t need a production database,&lt;/li&gt;
&lt;li&gt;I get fast responses thanks to static hosting + CDN,&lt;/li&gt;
&lt;li&gt;I can focus on the algorithm and the quality of the pages.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When I want to update something, I just:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;run the Python scripts,&lt;/li&gt;
&lt;li&gt;regenerate the site,&lt;/li&gt;
&lt;li&gt;redeploy.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That’s it.&lt;/p&gt;




&lt;h2&gt;
  
  
  What’s next
&lt;/h2&gt;

&lt;p&gt;Right now, Radar-Marée covers &lt;strong&gt;coastal cities and ZIP codes&lt;/strong&gt; on the French shoreline.&lt;/p&gt;

&lt;p&gt;Next steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;refine the attachment algorithm,&lt;/li&gt;
&lt;li&gt;improve descriptions by region / coastline,&lt;/li&gt;
&lt;li&gt;gradually extend to &lt;strong&gt;ports / beaches / local spots&lt;/strong&gt; where it really makes sense.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The idea is to start from a &lt;strong&gt;solid, already useful base&lt;/strong&gt;, and add the “ultra local” layer step by step, without overpromising.&lt;/p&gt;




&lt;p&gt;If you want to see the result or follow the evolution of the project:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://radar-maree.fr" rel="noopener noreferrer"&gt;https://radar-maree.fr&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’m also happy to talk with people working on similar topics&lt;br&gt;&lt;br&gt;
(data, geography, static site generation, SEO, or indie projects in general).&lt;/p&gt;

</description>
      <category>python</category>
      <category>webdev</category>
      <category>seo</category>
      <category>indiehackers</category>
    </item>
  </channel>
</rss>
