<?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>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>
