<?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: Pritt Patrick</title>
    <description>The latest articles on DEV Community by Pritt Patrick (@pat-rick-ross).</description>
    <link>https://dev.to/pat-rick-ross</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%2F4012234%2Fd789117b-bbf9-48d0-a867-09cea6ca961b.jpg</url>
      <title>DEV Community: Pritt Patrick</title>
      <link>https://dev.to/pat-rick-ross</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pat-rick-ross"/>
    <language>en</language>
    <item>
      <title>Why Kenyans Still Type 20-Digit Tokens in 2026: The Split Metering Reality and the Auto-Load Bottleneck</title>
      <dc:creator>Pritt Patrick</dc:creator>
      <pubDate>Wed, 30 Sep 2026 12:58:29 +0000</pubDate>
      <link>https://dev.to/pat-rick-ross/why-kenyans-still-type-20-digit-tokens-in-2026-the-split-metering-reality-and-the-auto-load-4ofe</link>
      <guid>https://dev.to/pat-rick-ross/why-kenyans-still-type-20-digit-tokens-in-2026-the-split-metering-reality-and-the-auto-load-4ofe</guid>
      <description>&lt;p&gt;Every Kenyan with a prepaid meter knows the ritual. You buy tokens on M-Pesa (Paybill 888880), receive the SMS with a 20-digit code, grab the Customer Interface Unit (CIU), plug it into a wall socket, and carefully key in the numbers. One wrong digit and you get “Reject.” Batteries low? “Conn Fail.” Power out in the house? Hope the alkaline batteries are fresh and you’re on the right socket.&lt;/p&gt;

&lt;p&gt;This is not a bug. It is the deliberate architecture of Kenya’s &lt;strong&gt;split metering system&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  How Split Metering Actually Works
&lt;/h3&gt;

&lt;p&gt;Kenya Power’s prepaid system separates the hardware into two devices:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The main meter (MCU – Measurement/Control Unit)&lt;/strong&gt;: Usually installed outside on a pole, in a locked box, or in a shared meter room. It measures consumption, stores the credit, and physically disconnects supply when units run out. It is deliberately hard to reach to reduce tampering.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Customer Interface Unit (CIU)&lt;/strong&gt;: The small keypad + display you keep inside the house. This is the only way most customers interact with the meter.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Communication between the two happens almost exclusively through &lt;strong&gt;Power Line Communication (PLC)&lt;/strong&gt;. The CIU injects signals into the house wiring. The meter listens on the same electrical network. That is why the CIU must be plugged into a wall socket on the same circuit (and why extension cables often break the connection). Batteries only power the CIU’s screen and keypad; they do not replace the need for a live power-line path to the meter.&lt;/p&gt;

&lt;p&gt;The tokens themselves follow the &lt;strong&gt;Standard Transfer Specification (STS)&lt;/strong&gt; — a South African-origin standard designed in the 1990s for environments with little or no reliable communication infrastructure. Each 20-digit token is encrypted specifically for one meter using a unique decoder key stored inside that meter. There is no network address, no SIM card, and no back-channel from the meter to Kenya Power.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Core Bottlenecks That Prevent Automatic Loading
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Physical and logical isolation by design&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The meter has no cellular, GPRS, NB-IoT, or IP connection. It was engineered to work in remote areas where mobile signal is unreliable or nonexistent. Once installed, the only trusted path for credit is a human typing a cryptographically signed token into the CIU. Kenya Power’s central systems generate the token after payment; they have no way to push it into the meter.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;One-way communication&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
PLC in the current deployment is effectively one-directional for token loading (CIU → meter). There is no reliable reverse channel that would allow the utility to confirm delivery or push credit remotely without additional hardware.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Security and anti-tamper priorities&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Keeping the meter offline and requiring physical entry of a meter-specific token reduces certain classes of remote attacks and makes large-scale credit fraud harder. The split design itself exists largely to keep the measurement unit out of easy reach of customers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Legacy STS constraints and the 2024 TID update&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
STS tokens use a finite Token Identifier space. The global TID rollover forced a massive “Update Token Meter Yako” campaign in 2024, during which customers still had to manually enter reset and update codes. Even after the upgrade to STS Edition 2, the fundamental delivery method remained manual key entry.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Practical failure modes that compound the problem&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Low or dead CIU batteries
&lt;/li&gt;
&lt;li&gt;Wrong socket / extension cable / phase mismatch
&lt;/li&gt;
&lt;li&gt;PLC errors and “Conn Fail”
&lt;/li&gt;
&lt;li&gt;Token entry lockouts after repeated wrong attempts
&lt;/li&gt;
&lt;li&gt;Power already off in the house (forcing battery-dependent entry)
&lt;/li&gt;
&lt;li&gt;20-digit human entry error rate (estimated around 6% in some analyses)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These issues hit hardest in rural areas, multi-tenant buildings, and among elderly or less tech-comfortable users. The result is delayed restoration of power, high call volumes to 97771, and a persistent feeling that the system is stuck in the past while the rest of Kenya’s digital economy has moved on.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why “Just Make It Automatic” Is Not Trivial
&lt;/h3&gt;

&lt;p&gt;Suggestions often surface: add GSM modules to CIUs, roll out full Advanced Metering Infrastructure (AMI) smart meters with two-way communication, or build apps that somehow push tokens. Each has real barriers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Retrofitting millions of existing meters is expensive and logistically heavy.&lt;/li&gt;
&lt;li&gt;True AMI (with GPRS/4G/NB-IoT) changes the security model and requires new communication modules, backend systems, and regulatory alignment.&lt;/li&gt;
&lt;li&gt;Any solution that touches the meter’s credit path must remain STS-compliant and tamper-resistant.&lt;/li&gt;
&lt;li&gt;Battery-powered or non-invasive approaches still need a reliable way to deliver the token bits to the meter without violating the isolation model.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Research papers have explored GSM-enabled CIUs that receive the SMS and automatically key the token. Other work looks at automated token-filling systems that dramatically cut load time and error rates. Hardware projects (including non-invasive approaches that sit between the CIU and the power line) are also being explored by independent makers precisely because the official path remains manual.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Real Cost of the Status Quo
&lt;/h3&gt;

&lt;p&gt;Manual 20-digit entry is more than an inconvenience. It creates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unnecessary downtime after purchase
&lt;/li&gt;
&lt;li&gt;Support burden on Kenya Power
&lt;/li&gt;
&lt;li&gt;Exclusion for users who struggle with the keypad process
&lt;/li&gt;
&lt;li&gt;A perception gap between Kenya’s advanced mobile-money ecosystem and its electricity last-mile experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In 2026 we can pay for almost everything with a few taps. Buying electricity credit is nearly as seamless. Delivering that credit into the meter still requires a 1990s-era ritual.&lt;/p&gt;

&lt;p&gt;The split metering + STS architecture solved important problems of revenue protection and operation in low-connectivity environments. Those problems have not disappeared. But the gap between “token purchased” and “power restored” is now one of the most visible friction points in Kenya’s energy system. Closing it without compromising the security and reliability that made prepaid metering successful is the real engineering challenge ahead.&lt;/p&gt;

&lt;p&gt;Until then, keep spare alkaline batteries, use the same wall socket, and double-check those 20 digits.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>hardware</category>
      <category>iot</category>
      <category>systems</category>
    </item>
    <item>
      <title>Building KIVU — Lake Intelligence for Fish-Cage Farmers on Lake Victoria</title>
      <dc:creator>Pritt Patrick</dc:creator>
      <pubDate>Wed, 23 Sep 2026 10:52:49 +0000</pubDate>
      <link>https://dev.to/pat-rick-ross/building-kivu-lake-intelligence-for-fish-cage-farmers-on-lake-victoria-2olk</link>
      <guid>https://dev.to/pat-rick-ross/building-kivu-lake-intelligence-for-fish-cage-farmers-on-lake-victoria-2olk</guid>
      <description>&lt;p&gt;Fish cages on Lake Victoria can lose an entire stock overnight when dissolved oxygen crashes. Most farmers still rely on experience, visual checks, and late phone calls. We wanted something better.&lt;/p&gt;

&lt;p&gt;KIVU is a lake-wide aquaculture and environmental intelligence platform we built as a team of five. It sits between the farmer’s phone and the lake: real-time telemetry, an explainable AI risk engine, geospatial zone intelligence, and expansion suitability signals — all backed by PostGIS and served from a single Go binary.&lt;/p&gt;

&lt;p&gt;This is the story of what we built, how we structured it, and what we learned.&lt;/p&gt;

&lt;p&gt;The problem&lt;br&gt;
Cage aquaculture is expanding rapidly around Lake Victoria (Kenya, Uganda, Tanzania). The opportunity is huge, but so are the risks:&lt;/p&gt;

&lt;p&gt;Dissolved oxygen can drop critically (&amp;lt; 3 mg/L) with little warning&lt;br&gt;
Temperature spikes and algal events stress fish&lt;br&gt;
Farmers lack accessible historical trends or early-warning systems&lt;br&gt;
Satellite data (e.g. Copernicus) exists but rarely reaches the people who need it&lt;br&gt;
Deciding where to place the next cage is still largely guesswork&lt;br&gt;
We set out to build a practical decision-support layer — not another dashboard that only works in a lab.&lt;/p&gt;

&lt;p&gt;What KIVU does&lt;br&gt;
We organized the product into four clear levels:&lt;/p&gt;

&lt;p&gt;Level   Focus   What the farmer gets&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cage Water quality telemetry Submit/receive DO, temp, pH, turbidity. AI Risk Engine runs automatically.&lt;/li&gt;
&lt;li&gt;Farm Multi-cage overview Dashboard of cage status, aggregated metrics, and active alerts.&lt;/li&gt;
&lt;li&gt;Lake Regional intelligence   PostGIS zones (Homa Bay, Mbita, Rusinga…) with environmental metrics.&lt;/li&gt;
&lt;li&gt;Expansion    Site suitability    Spatial scoring for new cage placement + rationale.
Cross-cutting features:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Tech stack&lt;/p&gt;

&lt;p&gt;Layer   Choice  Why&lt;br&gt;
Backend Go 1.22 + Gin + sqlx    Fast, simple, great for APIs&lt;br&gt;
Database    PostgreSQL 15 + PostGIS 3.3 Real geospatial types &amp;amp; indexes&lt;br&gt;
Auth    JWT (access + refresh) + bcrypt Stateless, farmer-friendly (phone)&lt;br&gt;
Frontend    Vanilla HTML/CSS/JS Zero build step, served by Gin&lt;br&gt;
Geospatial  GEOGRAPHY(Point/Polygon, 4326)  Accurate distance &amp;amp; containment&lt;br&gt;
External    Copernicus + SMS client Satellite context + real alerts&lt;br&gt;
Packaging   Docker Compose  One-command demo&lt;br&gt;
Everything lives in one repo. docker compose up --build brings up PostGIS (with migrations + seed data) and the backend on port 8080. The same Go process serves both the API (/api/v1/...) and the frontend.&lt;/p&gt;

&lt;p&gt;The AI Risk Engine (the interesting part)&lt;br&gt;
We deliberately kept the risk engine rule-based and explainable. Farmers need to understand why an alert fired.&lt;/p&gt;

&lt;p&gt;When a new reading is posted for a cage, the engine:&lt;/p&gt;

&lt;p&gt;Pulls the latest ~10 readings&lt;br&gt;
Scores against clear thresholds:&lt;br&gt;
Dissolved oxygen &amp;lt; 3.0 mg/L → critical hypoxia (+50)&lt;br&gt;
DO &amp;lt; 5.0 mg/L → moderate hypoxia (+25)&lt;br&gt;
Three consecutive declining DO readings → deteriorating trend (+20)&lt;br&gt;
Temperature anomalies / high turbidity contribute further&lt;br&gt;
Produces:&lt;br&gt;
Risk score&lt;br&gt;
Risk level (low / medium / high / critical)&lt;br&gt;
List of triggered factors&lt;br&gt;
Human-readable recommendation&lt;br&gt;
Confidence score&lt;br&gt;
Can automatically create an alert (and optionally trigger SMS)&lt;br&gt;
This design made demos reliable and the logic easy to discuss with domain experts. We can always layer ML models later; for a first version, transparency won.&lt;/p&gt;

&lt;p&gt;Geospatial with PostGIS&lt;br&gt;
Cages are stored as points:&lt;/p&gt;

&lt;p&gt;location GEOGRAPHY(Point, 4326)&lt;br&gt;
Lake zones are polygons. We use GiST indexes and queries such as:&lt;/p&gt;

&lt;p&gt;ORDER BY ST_Distance(boundary, ST_SetSRID(ST_MakePoint($1, $2), 4326)::geography)&lt;br&gt;
to find the nearest zone for expansion suitability. Seed data covers real-ish sectors around Homa Bay, Mbita Channel, and Rusinga.&lt;/p&gt;

&lt;p&gt;Having proper geography types from day one saved us from the classic “just store lat/lon and hope” trap.&lt;/p&gt;

&lt;p&gt;Backend structure (Go)&lt;br&gt;
We followed a clean layout:&lt;/p&gt;

&lt;p&gt;backend/&lt;br&gt;
├── cmd/server/main.go&lt;br&gt;
├── config/&lt;br&gt;
├── database/          # migrations + seed&lt;br&gt;
├── integrations/      # Copernicus, SMS&lt;br&gt;
├── internal/&lt;br&gt;
│   ├── handlers/&lt;br&gt;
│   ├── middleware/    # CORS, logging, JWT&lt;br&gt;
│   ├── models/&lt;br&gt;
│   └── services/      # Auth, AI Risk, Alerts, Expansion, Copernicus sync&lt;br&gt;
└── routes/&lt;br&gt;
Key services:&lt;/p&gt;

&lt;p&gt;AuthService — register/login, token issuance &amp;amp; rotation&lt;br&gt;
AIRiskEngine — the scoring logic above&lt;br&gt;
AlertsService — persistence + SMS hook&lt;br&gt;
ExpansionService — zone suitability&lt;br&gt;
CopernicusSyncService — background loop&lt;br&gt;
The router also serves the static frontend, so a single binary (or container) is enough for a full demo.&lt;/p&gt;

&lt;p&gt;Lessons we learned&lt;br&gt;
Explainable beats black-box for domain users who have to trust the system with livestock.&lt;br&gt;
PostGIS is worth the learning curve if your problem is inherently spatial.&lt;br&gt;
Pairing on backend (two of us) kept the API and schema consistent under time pressure.&lt;br&gt;
Serving static files from Gin removed an entire deployment concern for a hackathon/demo.&lt;br&gt;
Seed data with realistic coordinates and deteriorating DO trends made the risk engine and maps come alive in demos.&lt;br&gt;
Clear product levels (Cage → Farm → Lake → Expansion) helped both the team and anyone we pitched to.&lt;/p&gt;

&lt;p&gt;What’s next&lt;br&gt;
Possible directions:&lt;/p&gt;

&lt;p&gt;Real sensor integrations (IoT)&lt;br&gt;
Stronger ML models on top of the current rule engine&lt;br&gt;
Multi-language SMS / USSD for last-mile reach&lt;br&gt;
Deeper Copernicus / climate data layers&lt;br&gt;
Mobile-first progressive web app&lt;br&gt;
Final thoughts&lt;br&gt;
KIVU started as a hackathon-style project, but the problem is real. Turning water-quality readings and open satellite data into timely, understandable signals for cage farmers is valuable work.&lt;/p&gt;

&lt;p&gt;If you’re building in aquaculture, climate tech, geospatial systems, or just like clean Go + PostGIS architectures, we’d love to hear from you.&lt;/p&gt;

&lt;p&gt;KIVU — smarter cages, healthier lakes.&lt;/p&gt;

</description>
      <category>agriculture</category>
      <category>database</category>
      <category>go</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>XRadius: Building a Modern ISP &amp; Wi-Fi Hotspot Billing Platform with Go, MikroTik, M-Pesa and WebSockets</title>
      <dc:creator>Pritt Patrick</dc:creator>
      <pubDate>Wed, 12 Aug 2026 06:40:52 +0000</pubDate>
      <link>https://dev.to/pat-rick-ross/xradius-building-a-modern-isp-wi-fi-hotspot-billing-platform-with-go-mikrotik-m-pesa-and-a3h</link>
      <guid>https://dev.to/pat-rick-ross/xradius-building-a-modern-isp-wi-fi-hotspot-billing-platform-with-go-mikrotik-m-pesa-and-a3h</guid>
      <description>&lt;p&gt;Running an ISP or public Wi-Fi hotspot in Kenya is more than putting up a router and connecting customers.&lt;/p&gt;

&lt;p&gt;You need to manage customers, internet packages, payments, network access, routers, sessions, revenue, staff, and support — often across several systems.&lt;/p&gt;

&lt;p&gt;That is the problem I wanted to solve with &lt;strong&gt;XRadius&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;XRadius is an ISP and Wi-Fi hotspot billing platform designed for internet service providers and hotspot operators. The goal is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Make it easier to sell internet, collect payments, manage networks, and give customers a seamless connection experience.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Imagine a customer arrives at a Wi-Fi hotspot and wants:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10 Mbps — 1 hour — KES 20&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The traditional workflow might look something like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Customer selects a package.&lt;/li&gt;
&lt;li&gt;They enter their phone number.&lt;/li&gt;
&lt;li&gt;They initiate an M-Pesa payment.&lt;/li&gt;
&lt;li&gt;They wait.&lt;/li&gt;
&lt;li&gt;The operator checks whether payment arrived.&lt;/li&gt;
&lt;li&gt;Someone activates the customer's internet access.&lt;/li&gt;
&lt;li&gt;The customer refreshes the page and hopes it worked.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That experience can be frustrating for both the customer and the operator.&lt;/p&gt;

&lt;p&gt;I wanted XRadius to make this process automatic.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is XRadius?
&lt;/h2&gt;

&lt;p&gt;XRadius is being built as a multi-tenant platform for ISP and Wi-Fi hotspot businesses.&lt;/p&gt;

&lt;p&gt;At a high level:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    ┌─────────────────────┐
                    │      XRadius        │
                    │   ISP Platform      │
                    └──────────┬──────────┘
                               │
          ┌────────────────────┼────────────────────┐
          │                    │                    │
          ▼                    ▼                    ▼
     Customers             Payments             Network
          │                    │                    │
          ▼                    ▼                    ▼
    Captive Portal          M-Pesa             MikroTik
                              │                    │
                              ▼                    ▼
                         Transactions          Internet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The platform brings these pieces together instead of requiring the operator to manage them independently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Go?
&lt;/h2&gt;

&lt;p&gt;The backend is being built with &lt;strong&gt;Go&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Go is particularly attractive for this kind of system because XRadius needs to handle several concurrent activities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API requests&lt;/li&gt;
&lt;li&gt;Payment callbacks&lt;/li&gt;
&lt;li&gt;Customer sessions&lt;/li&gt;
&lt;li&gt;Router communication&lt;/li&gt;
&lt;li&gt;Background jobs&lt;/li&gt;
&lt;li&gt;Notifications&lt;/li&gt;
&lt;li&gt;WebSocket connections&lt;/li&gt;
&lt;li&gt;Dashboard updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Go's lightweight concurrency model makes it a good fit for an application that needs to manage many simultaneous connections and background operations.&lt;/p&gt;

&lt;p&gt;The backend follows a modular architecture with components for authentication, customers, billing, payments, networking, dashboards, and notifications.&lt;/p&gt;

&lt;h2&gt;
  
  
  The technology stack
&lt;/h2&gt;

&lt;p&gt;The current architecture includes technologies such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Go&lt;/strong&gt; — backend/API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PostgreSQL&lt;/strong&gt; — primary database&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Redis&lt;/strong&gt; — caching, queues and real-time state&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MikroTik RouterOS API&lt;/strong&gt; — network provisioning and control&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;M-Pesa Daraja API&lt;/strong&gt; — payments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JWT&lt;/strong&gt; — authentication&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebSockets&lt;/strong&gt; — real-time communication&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker&lt;/strong&gt; — deployment and service orchestration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The system is designed so that additional payment providers and networking integrations can be added later.&lt;/p&gt;

&lt;h2&gt;
  
  
  The captive portal
&lt;/h2&gt;

&lt;p&gt;One of the most important parts of XRadius is the customer-facing captive portal.&lt;/p&gt;

&lt;p&gt;A customer should not need to understand anything about RADIUS, MikroTik, APIs, or payment callbacks.&lt;/p&gt;

&lt;p&gt;They should simply see something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EXTREME SOLUTIONS

Plug In. Connect Up. Go Extreme.

Choose your package

10 Mbps
1 Hour
KES 20

[ Buy Now ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After selecting the package, the customer enters their phone number and initiates payment.&lt;/p&gt;

&lt;p&gt;The complicated infrastructure should happen behind the scenes.&lt;/p&gt;

&lt;h2&gt;
  
  
  M-Pesa + WebSockets
&lt;/h2&gt;

&lt;p&gt;One of the features I'm particularly interested in is combining M-Pesa payment processing with WebSockets.&lt;/p&gt;

&lt;p&gt;The flow looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Customer
   │
   │ Select package
   ▼
Captive Portal
   │
   │ HTTP request
   ▼
XRadius API
   │
   │ Initiate payment
   ▼
M-Pesa
   │
   │ Payment callback
   ▼
XRadius Backend
   │
   ├── Verify transaction
   ├── Update PostgreSQL
   ├── Update Redis
   └── Provision internet
            │
            ▼
        MikroTik
            │
            ▼
       Internet Access
            │
            ▼
        WebSocket
            │
            ▼
         Customer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of making the customer repeatedly refresh the page, the frontend can maintain a WebSocket connection.&lt;/p&gt;

&lt;p&gt;When the payment is confirmed, XRadius can immediately notify the customer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Payment successful! Connecting you to the internet...&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then the customer can be redirected into their active internet session.&lt;/p&gt;

&lt;p&gt;This makes the payment-to-connect experience feel much more like a modern application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-time admin dashboard
&lt;/h2&gt;

&lt;p&gt;WebSockets are not only useful for customers.&lt;/p&gt;

&lt;p&gt;They can also make the administrator dashboard much more dynamic.&lt;/p&gt;

&lt;p&gt;For example, an operator could see:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ONLINE USERS       127
ACTIVE PACKAGES     84
TODAY'S REVENUE     KES 18,450
ACTIVE ROUTERS       6
PAYMENTS TODAY      312
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of refreshing the dashboard every few seconds, important changes can be pushed to the browser in real time.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;M-Pesa Payment Received
        ↓
Transaction Created
        ↓
Database Updated
        ↓
WebSocket Event
        ↓
Admin Dashboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The revenue counter can update immediately.&lt;/p&gt;

&lt;p&gt;The online-user count can change immediately.&lt;/p&gt;

&lt;p&gt;A router going offline can trigger an alert immediately.&lt;/p&gt;

&lt;h2&gt;
  
  
  MikroTik integration
&lt;/h2&gt;

&lt;p&gt;The network layer is where XRadius becomes more than a normal billing application.&lt;/p&gt;

&lt;p&gt;The platform is designed to communicate with MikroTik routers through the RouterOS API.&lt;/p&gt;

&lt;p&gt;This allows the billing system to interact with the actual network infrastructure.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Customer purchases package
          ↓
Payment confirmed
          ↓
XRadius determines package
          ↓
Bandwidth rules applied
          ↓
MikroTik receives configuration
          ↓
Customer gets internet access
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This also opens the door to features such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiple router management&lt;/li&gt;
&lt;li&gt;Online user monitoring&lt;/li&gt;
&lt;li&gt;Bandwidth control&lt;/li&gt;
&lt;li&gt;Session management&lt;/li&gt;
&lt;li&gt;Hotspot provisioning&lt;/li&gt;
&lt;li&gt;Router health monitoring&lt;/li&gt;
&lt;li&gt;Automatic user disconnection after expiry&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is to move from manually managing routers to managing the network from one platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bandwidth control
&lt;/h2&gt;

&lt;p&gt;An internet package is not simply a price and duration.&lt;/p&gt;

&lt;p&gt;It can also define network behavior.&lt;/p&gt;

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

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Package&lt;/th&gt;
&lt;th&gt;Speed&lt;/th&gt;
&lt;th&gt;Duration&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Starter&lt;/td&gt;
&lt;td&gt;5 Mbps&lt;/td&gt;
&lt;td&gt;1 hour&lt;/td&gt;
&lt;td&gt;KES 10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;td&gt;10 Mbps&lt;/td&gt;
&lt;td&gt;3 hours&lt;/td&gt;
&lt;td&gt;KES 25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Premium&lt;/td&gt;
&lt;td&gt;20 Mbps&lt;/td&gt;
&lt;td&gt;24 hours&lt;/td&gt;
&lt;td&gt;KES 50&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;XRadius can use the package configuration to determine the appropriate bandwidth policy when provisioning a customer.&lt;/p&gt;

&lt;p&gt;This creates a direct relationship between:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Payment → Package → Network Policy → Internet Access&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Redis
&lt;/h2&gt;

&lt;p&gt;Redis plays an important supporting role in the architecture.&lt;/p&gt;

&lt;p&gt;Some information does not need to be repeatedly retrieved from PostgreSQL.&lt;/p&gt;

&lt;p&gt;Redis can help with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Caching&lt;/li&gt;
&lt;li&gt;Session state&lt;/li&gt;
&lt;li&gt;Temporary payment state&lt;/li&gt;
&lt;li&gt;WebSocket-related state&lt;/li&gt;
&lt;li&gt;Background job queues&lt;/li&gt;
&lt;li&gt;Rate limiting&lt;/li&gt;
&lt;li&gt;Short-lived data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, payment processing can involve several asynchronous steps.&lt;/p&gt;

&lt;p&gt;Redis can help coordinate temporary state while PostgreSQL remains the source of truth for persistent financial records.&lt;/p&gt;

&lt;h2&gt;
  
  
  PostgreSQL
&lt;/h2&gt;

&lt;p&gt;PostgreSQL acts as the primary persistent data store.&lt;/p&gt;

&lt;p&gt;The domain model includes concepts such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Customers&lt;/li&gt;
&lt;li&gt;Internet packages&lt;/li&gt;
&lt;li&gt;Invoices&lt;/li&gt;
&lt;li&gt;Payments&lt;/li&gt;
&lt;li&gt;Routers&lt;/li&gt;
&lt;li&gt;Hotspots&lt;/li&gt;
&lt;li&gt;Transactions&lt;/li&gt;
&lt;li&gt;Users&lt;/li&gt;
&lt;li&gt;Businesses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This provides the foundation for reporting, billing history, customer management and auditing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi-tenant architecture
&lt;/h2&gt;

&lt;p&gt;One of the important goals of XRadius is to support multiple ISP and hotspot businesses from the same platform.&lt;/p&gt;

&lt;p&gt;The basic concept is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    XRadius
                       │
        ┌──────────────┼──────────────┐
        │              │              │
        ▼              ▼              ▼
    Business A     Business B     Business C
        │              │              │
     Routers         Routers         Routers
     Customers       Customers       Customers
     Payments        Payments        Payments
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each business should be able to manage its own:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Customers&lt;/li&gt;
&lt;li&gt;Packages&lt;/li&gt;
&lt;li&gt;Routers&lt;/li&gt;
&lt;li&gt;Payment accounts&lt;/li&gt;
&lt;li&gt;Revenue&lt;/li&gt;
&lt;li&gt;Staff&lt;/li&gt;
&lt;li&gt;Network infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates the possibility of XRadius becoming a platform rather than simply software installed on one router.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security matters
&lt;/h2&gt;

&lt;p&gt;Because XRadius handles payments, customer information and network infrastructure, security cannot be an afterthought.&lt;/p&gt;

&lt;p&gt;The architecture therefore needs to consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Secure password storage&lt;/li&gt;
&lt;li&gt;JWT security&lt;/li&gt;
&lt;li&gt;Role-based access control&lt;/li&gt;
&lt;li&gt;API authentication&lt;/li&gt;
&lt;li&gt;Rate limiting&lt;/li&gt;
&lt;li&gt;Input validation&lt;/li&gt;
&lt;li&gt;Payment verification&lt;/li&gt;
&lt;li&gt;Secure secrets management&lt;/li&gt;
&lt;li&gt;Audit logging&lt;/li&gt;
&lt;li&gt;Database security&lt;/li&gt;
&lt;li&gt;Router credential protection&lt;/li&gt;
&lt;li&gt;WebSocket authentication&lt;/li&gt;
&lt;li&gt;Secure Docker configuration&lt;/li&gt;
&lt;li&gt;HTTPS/TLS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A compromised billing system could potentially become a compromised network.&lt;/p&gt;

&lt;p&gt;That makes security one of the most important parts of the project.&lt;/p&gt;

&lt;h2&gt;
  
  
  The business model
&lt;/h2&gt;

&lt;p&gt;The platform is being designed around a SaaS model for Kenyan ISP and hotspot operators.&lt;/p&gt;

&lt;p&gt;An operator could sign up, configure their business, connect their payment account, configure internet packages and connect their MikroTik routers.&lt;/p&gt;

&lt;p&gt;From there, they can manage their operation from the XRadius dashboard.&lt;/p&gt;

&lt;p&gt;The broader vision is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;One platform for running an ISP or Wi-Fi hotspot business.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What makes the project interesting?
&lt;/h2&gt;

&lt;p&gt;For me, the interesting part of XRadius is that it sits at the intersection of several technologies.&lt;/p&gt;

&lt;p&gt;It combines:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fintech&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;M-Pesa and payment processing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Networking&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MikroTik, bandwidth management, hotspots and sessions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backend engineering&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Go, PostgreSQL, Redis and APIs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-time systems&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;WebSockets and live dashboards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SaaS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Multi-business architecture and subscription management.&lt;/p&gt;

&lt;p&gt;These aren't isolated components.&lt;/p&gt;

&lt;p&gt;They have to work together.&lt;/p&gt;

&lt;p&gt;A payment needs to eventually become network access.&lt;/p&gt;

&lt;p&gt;A network session needs to become billing information.&lt;/p&gt;

&lt;p&gt;A customer action needs to trigger backend events.&lt;/p&gt;

&lt;p&gt;A router problem needs to become an administrator notification.&lt;/p&gt;

&lt;p&gt;That integration is where the real engineering challenge lies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where XRadius is heading
&lt;/h2&gt;

&lt;p&gt;There are several areas I want to continue exploring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time M-Pesa payment status&lt;/li&gt;
&lt;li&gt;Real-time admin dashboards&lt;/li&gt;
&lt;li&gt;Multi-router management&lt;/li&gt;
&lt;li&gt;Better bandwidth management&lt;/li&gt;
&lt;li&gt;Automated router provisioning&lt;/li&gt;
&lt;li&gt;Advanced revenue analytics&lt;/li&gt;
&lt;li&gt;Customer notifications&lt;/li&gt;
&lt;li&gt;Network health monitoring&lt;/li&gt;
&lt;li&gt;Mobile applications&lt;/li&gt;
&lt;li&gt;More payment providers&lt;/li&gt;
&lt;li&gt;AI-assisted ISP analytics&lt;/li&gt;
&lt;li&gt;Automated anomaly detection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The long-term goal isn't just to build another billing dashboard.&lt;/p&gt;

&lt;p&gt;It's to build infrastructure that helps small and growing internet businesses operate more efficiently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;Building XRadius has been an interesting journey because it forces software engineering and networking to meet in the real world.&lt;/p&gt;

&lt;p&gt;A customer doesn't care that a payment callback went through an API.&lt;/p&gt;

&lt;p&gt;They care that they paid and got internet.&lt;/p&gt;

&lt;p&gt;An ISP operator doesn't care that a WebSocket event was emitted.&lt;/p&gt;

&lt;p&gt;They care that their dashboard accurately shows who is online and how much they have earned.&lt;/p&gt;

&lt;p&gt;That's the standard I'm aiming for with XRadius:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hide the complexity. Automate the workflow. Make internet businesses easier to run.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And ultimately:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;XRadius — Connect. Bill. Manage. Grow.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you're interested in ISP infrastructure, MikroTik, RADIUS, M-Pesa integrations, Go, real-time systems, or building technology for African connectivity businesses, this is a project I'll be documenting as it evolves.&lt;/p&gt;

</description>
      <category>backend</category>
      <category>go</category>
      <category>saas</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Building JONAM: Using Copernicus Earth Observation Data to Help Restore Lake Victoria's Fisheries</title>
      <dc:creator>Pritt Patrick</dc:creator>
      <pubDate>Wed, 12 Aug 2026 06:22:47 +0000</pubDate>
      <link>https://dev.to/pat-rick-ross/building-jonam-using-copernicus-earth-observation-data-to-help-restore-lake-victorias-fisheries-h8j</link>
      <guid>https://dev.to/pat-rick-ross/building-jonam-using-copernicus-earth-observation-data-to-help-restore-lake-victorias-fisheries-h8j</guid>
      <description>&lt;p&gt;&lt;em&gt;"What if satellite data could help protect the livelihoods of millions who depend on Africa's largest lake?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Last weekend, our team &lt;strong&gt;JONAM&lt;/strong&gt; had the privilege of participating in the &lt;strong&gt;Kijani Space Hackathon&lt;/strong&gt;, where we proudly secured &lt;strong&gt;3rd place&lt;/strong&gt; while tackling &lt;strong&gt;Challenge 2: Sustainable Fisheries &amp;amp; Blue Economy&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Rather than building another dashboard, we wanted to solve a real problem affecting millions of people around &lt;strong&gt;Lake Victoria&lt;/strong&gt;: &lt;strong&gt;declining fish stocks caused by worsening water quality&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Lake Victoria supports millions of people through fishing, transportation, agriculture, and tourism. However, over the years the lake has experienced:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Increasing water pollution&lt;/li&gt;
&lt;li&gt;Poor water quality&lt;/li&gt;
&lt;li&gt;Frequent algal blooms&lt;/li&gt;
&lt;li&gt;Reduced fish breeding habitats&lt;/li&gt;
&lt;li&gt;Declining fish populations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For fishing communities, these are not just environmental issues—they directly affect livelihoods, food security, and local economies.&lt;/p&gt;

&lt;p&gt;Our question became:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Can Earth observation data help communities understand where water conditions are becoming unsuitable for fish before the problem becomes critical?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Our Solution: JONAM
&lt;/h2&gt;

&lt;p&gt;JONAM is an AI-powered web application that combines satellite-derived environmental data with machine learning to monitor water quality and provide insights into conditions that may contribute to declining fish stocks.&lt;/p&gt;

&lt;p&gt;Instead of relying solely on manual sampling—which is expensive and only covers small areas—our platform continuously analyses satellite observations covering the entire lake.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Copernicus?
&lt;/h2&gt;

&lt;p&gt;To build JONAM, we integrated the &lt;strong&gt;KijaniBox API&lt;/strong&gt;, which provides access to environmental datasets from the &lt;strong&gt;Copernicus Programme&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Copernicus is the European Union's Earth observation programme. It uses a constellation of Sentinel satellites together with in-situ observations to monitor Earth's atmosphere, land, and oceans.&lt;/p&gt;

&lt;p&gt;For our project, we focused specifically on &lt;strong&gt;live water telemetry variables&lt;/strong&gt; available through the KijaniBox platform.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Water Temperature
&lt;/h3&gt;

&lt;p&gt;Satellites measure the thermal radiation emitted from the water surface to estimate temperature.&lt;/p&gt;

&lt;p&gt;Temperature influences:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fish metabolism&lt;/li&gt;
&lt;li&gt;Oxygen availability&lt;/li&gt;
&lt;li&gt;Fish breeding conditions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Abnormally warm water can reduce dissolved oxygen and stress aquatic ecosystems.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Turbidity
&lt;/h3&gt;

&lt;p&gt;Turbidity measures how cloudy the water is.&lt;/p&gt;

&lt;p&gt;Using reflected sunlight captured by optical sensors, satellites estimate suspended sediments and particles within the water.&lt;/p&gt;

&lt;p&gt;High turbidity often indicates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Soil erosion&lt;/li&gt;
&lt;li&gt;Runoff after rainfall&lt;/li&gt;
&lt;li&gt;Pollution entering rivers and lakes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Excessive turbidity limits sunlight penetration and disrupts aquatic life.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Chlorophyll-a
&lt;/h3&gt;

&lt;p&gt;Chlorophyll-a is estimated from the colour of the water observed by satellite sensors.&lt;/p&gt;

&lt;p&gt;It acts as an indicator of phytoplankton concentration.&lt;/p&gt;

&lt;p&gt;Moderate levels indicate healthy productivity.&lt;/p&gt;

&lt;p&gt;Very high concentrations may indicate harmful algal blooms, which:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reduce oxygen&lt;/li&gt;
&lt;li&gt;Produce toxins&lt;/li&gt;
&lt;li&gt;Kill fish&lt;/li&gt;
&lt;li&gt;Signal nutrient pollution&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Precipitation
&lt;/h3&gt;

&lt;p&gt;Rainfall estimates are generated by combining satellite observations with weather models.&lt;/p&gt;

&lt;p&gt;Heavy rainfall often transports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agricultural fertilisers&lt;/li&gt;
&lt;li&gt;Industrial waste&lt;/li&gt;
&lt;li&gt;Urban runoff&lt;/li&gt;
&lt;li&gt;Sediments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;into Lake Victoria, increasing pollution and nutrient loading.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Wind Speed
&lt;/h3&gt;

&lt;p&gt;Wind speed is estimated using atmospheric observations and numerical weather prediction models.&lt;/p&gt;

&lt;p&gt;Wind affects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Water mixing&lt;/li&gt;
&lt;li&gt;Oxygen distribution&lt;/li&gt;
&lt;li&gt;Surface circulation&lt;/li&gt;
&lt;li&gt;Dispersion of pollutants&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Strong winds can either improve oxygenation or spread polluted water to previously unaffected areas.&lt;/p&gt;

&lt;h2&gt;
  
  
  From Data to Action
&lt;/h2&gt;

&lt;p&gt;JONAM analyses these environmental variables together instead of looking at each independently.&lt;/p&gt;

&lt;p&gt;By learning relationships between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Temperature&lt;/li&gt;
&lt;li&gt;Turbidity&lt;/li&gt;
&lt;li&gt;Chlorophyll-a&lt;/li&gt;
&lt;li&gt;Precipitation&lt;/li&gt;
&lt;li&gt;Wind speed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;our AI model identifies environmental conditions associated with deteriorating water quality and declining fish habitats.&lt;/p&gt;

&lt;p&gt;The platform presents these insights through an intuitive dashboard, enabling users to monitor changing conditions across Lake Victoria.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Traditional water quality monitoring often depends on field teams collecting samples from a handful of locations.&lt;/p&gt;

&lt;p&gt;Satellite observations provide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Consistent coverage&lt;/li&gt;
&lt;li&gt;Frequent updates&lt;/li&gt;
&lt;li&gt;Large-scale monitoring&lt;/li&gt;
&lt;li&gt;Lower operational costs&lt;/li&gt;
&lt;li&gt;Historical trends for comparison&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes environmental intelligence more accessible to researchers, governments, conservation organisations, and eventually fishing communities themselves.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hackathon Experience
&lt;/h2&gt;

&lt;p&gt;The Kijani Space Hackathon challenged us to think beyond technology and focus on measurable environmental impact.&lt;/p&gt;

&lt;p&gt;Throughout the event, we transformed Earth observation data into practical insights that could contribute toward healthier aquatic ecosystems and more sustainable fisheries.&lt;/p&gt;

&lt;p&gt;We're incredibly proud that JONAM earned &lt;strong&gt;3rd place&lt;/strong&gt; in Challenge 2, but the experience reinforced something even more valuable:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Satellite data becomes truly powerful when transformed into decisions that improve people's lives.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;Our vision for JONAM extends beyond the hackathon.&lt;/p&gt;

&lt;p&gt;Future improvements include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time water quality alerts&lt;/li&gt;
&lt;li&gt;Fish habitat suitability predictions&lt;/li&gt;
&lt;li&gt;Pollution hotspot identification&lt;/li&gt;
&lt;li&gt;Decision support for fisheries management&lt;/li&gt;
&lt;li&gt;Mobile access for lakeside communities&lt;/li&gt;
&lt;li&gt;Integration with IoT sensors for ground validation&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Hackathons often end when prizes are awarded.&lt;/p&gt;

&lt;p&gt;For us, this is just the beginning.&lt;/p&gt;

&lt;p&gt;Lake Victoria's challenges require continuous innovation, and by combining Earth observation, AI, and accessible environmental data through the KijaniBox API, we hope JONAM can become one small step toward more sustainable fisheries and cleaner waters.&lt;/p&gt;

&lt;p&gt;If you're interested in Earth observation, environmental AI, or geospatial technologies, we'd love to connect and continue building solutions that make a real-world impact.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The future of conservation isn't just in collecting more data—it's in turning that data into timely, actionable intelligence.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>data</category>
      <category>datascience</category>
      <category>science</category>
    </item>
    <item>
      <title>Intro.</title>
      <dc:creator>Pritt Patrick</dc:creator>
      <pubDate>Thu, 02 Jul 2026 11:59:56 +0000</pubDate>
      <link>https://dev.to/pat-rick-ross/intro-135n</link>
      <guid>https://dev.to/pat-rick-ross/intro-135n</guid>
      <description>&lt;p&gt;Hello guys, I am a cloud DevOps apprentice at zone01 Kisumu. I am an automation enthusiast and I am ready to learn more about DevOps and Go.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
