<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Weather on Mini Fish</title>
    <link>https://blog.minifish.org/tags/weather/</link>
    <description>Recent content in Weather on Mini Fish</description>
    <image>
      <title>Mini Fish</title>
      <url>https://blog.minifish.org/android-chrome-512x512.png</url>
      <link>https://blog.minifish.org/android-chrome-512x512.png</link>
    </image>
    <generator>Hugo -- 0.161.1</generator>
    <language>en-US</language>
    <copyright>Mini Fish 2014-present. Licensed under CC-BY-NC</copyright>
    <lastBuildDate>Fri, 05 Jun 2026 09:00:00 +0800</lastBuildDate>
    <atom:link href="https://blog.minifish.org/tags/weather/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>good-fishing-day: A Fishing Weather Dashboard</title>
      <link>https://blog.minifish.org/posts/good-fishing-day-dashboard/</link>
      <pubDate>Fri, 05 Jun 2026 09:00:00 +0800</pubDate>
      <guid>https://blog.minifish.org/posts/good-fishing-day-dashboard/</guid>
      <description>A project note on good-fishing-day, a Cloudflare Workers and Astro dashboard that combines tide, weather, caching, and a simple fishing suitability score.</description>
      <content:encoded><![CDATA[<p><code>good-fishing-day</code> is a personal fishing-weather dashboard. It combines tide data and weather forecasts to answer a practical question: is today, or the next few days, good for fishing?</p>
<p>It is a small application, but it has the shape of a real product: backend data fetching, caching, scoring, frontend display, and deployment.</p>
<h2 id="why-build-it">Why build it</h2>
<p>Fishing decisions depend on several signals:</p>
<ul>
<li>tide timing</li>
<li>weather</li>
<li>wind</li>
<li>rain</li>
<li>forecast window</li>
<li>saved locations</li>
</ul>
<p>Generic weather apps show the raw pieces, but they do not answer the combined question I care about. A personal dashboard can make that tradeoff directly.</p>
<h2 id="architecture">Architecture</h2>
<p>The backend is a Cloudflare Worker. It fetches marine/tide data and weather forecasts, computes a score, and caches results in Workers KV.</p>
<p>The frontend is an Astro and React app deployed to Cloudflare Pages. Shared TypeScript code keeps constants and data shapes aligned.</p>
<p>This is a good fit for Cloudflare because the workload is small, read-heavy, and cacheable.</p>
<h2 id="privacy-and-scope">Privacy and scope</h2>
<p>The app is intentionally personal and ad-free. It does not need accounts, social features, or public rankings. It needs to answer a small question reliably.</p>
<p>The main external dependency risk is data quality and API availability. That makes caching and clear failure states important.</p>
<h2 id="what-i-learned">What I learned</h2>
<p>Personal dashboards are worth building when they compress repeated decision-making. The value is not that the app is complicated. The value is that it turns several tabs and mental calculations into one screen.</p>
<p>The scoring model should also stay humble. A “good fishing day” score is a decision aid, not a guarantee. The app should make the inputs visible enough that I can override the score with judgment.</p>
<h2 id="current-status">Current status</h2>
<p><code>good-fishing-day</code> is private because it is tied to personal usage and deployment details. The architecture pattern is reusable: small Worker backend, cached external data, static frontend, and a domain-specific score.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
