Technology
104 articles in this topic.
Daraja API in Production: STK Push, C2B and B2C With Callbacks That Actually Work
A build-order guide to Safaricom's Daraja API with real payloads: OAuth token caching, STK Push, C2B v2 registration, B2C v3 with RSA security credentials, and the callback URL rules nobody documents.
Your App Keeps Dying: A systemd Unit File That Actually Keeps It Running
Restart=always is not high availability, it is a bandaid over a bug. Here is the systemd unit file, restart policy, resource cap and sandbox config that keeps a real app alive on a real VPS.
The Security Checklist Every Kenyan SME Running Its Own Server Should Finish This Week
You do not have a security budget problem, you have a completeness problem. Ten free controls with real commands, a cost table, and the weekly rhythm that keeps a self-hosted Kenyan SME system out of trouble.
Git for Two: The Branching Model a Small Team Actually Needs
Git Flow is costume jewellery for a two-person team. Here is the smallest workflow that stops you clobbering each other: short-lived branches, protected main, rerere, squash merges, and revert-forward.
The State of AI in Africa 2026: A Practical Map
Africa's AI economy in 2026 is real, funded and still small enough to shape. A grounded map of the hubs, the money, the obstacles nobody should sugarcoat, and where builders actually win.
Build vs Buy: How African Businesses Should Decide on AI
Build vs buy is not one decision but four options along a spectrum. A practical framework for African SMEs to decide where to spend scarce budget, skills and control - and why most should buy first.
How to Price Software in East Africa Without Racing to the Bottom
Underpricing does not kill your software business loudly, it kills it slowly. A worked pricing floor in Kenyan shillings, three markets you can sell into, and the terms that matter more than the headline number.
Your M-Pesa Callback Will Fire Twice: Idempotency, Retries and the 1037 Problem
Daraja callbacks are unreliable notifications, not a source of truth. Seven production failure modes, with the database constraints, pollers and parsers that make double charges structurally impossible.
Nginx Reverse Proxy, TLS and Rate Limiting: The Config You Should Actually Be Running
A one-line proxy_pass is not a reverse proxy. Real timeouts, correct forwarded headers, a Mozilla-grade TLS block and limit_req zones that stop credential stuffing without breaking your own app.
The Compute Divide: Why Africa Risks Being Locked Out of AI
GPUs, data centres and cheap power are the real bottleneck for African AI, and most of it sits offshore, billed in dollars. Real capital is arriving - but who owns the build is the question that decides sovereignty.
AI That Speaks Our Languages: The Fight for African NLP
AI reshaping the global economy barely speaks the languages of a billion Africans. Inside Masakhane, Lelapa AI's InkubaLM and Lesan - and why African-language NLP is an economic bet, not charity.
Kenya's Data Protection Act Is an Engineering Spec: What Sections 25, 31, 41 and 43 Demand From Your Code
The DPA 2019 is not a lawyer problem, it is a schema, retention and logging problem. Registration thresholds, the 72-hour breach clock, the encryption safe harbour, and the eight things to build this quarter.
The True Cost of AI for Business (Beyond the Subscription)
The monthly subscription is often just 20-30% of what AI truly costs. A clear breakdown of the hidden costs - data prep, integration, change management, compute, talent and maintenance - with an African lens.
Docker, Finally: A Practical On-Ramp for Developers Who Kept Putting It Off
You are not scared of containers, you are tired of the vocabulary. The mental model in four sentences, four commands, a real multi-stage Dockerfile, a Compose v2 file, and the five things that will confuse you.
The 12 Clauses Every Software Contract Needs: A Checklist for Kenyan Developers
A contract is not for the courtroom, it is for the awkward conversation in month three. Twelve clauses in plain English, Kenyan IP and tax realities to raise with your advocate, and what to trade when clients push back.
M-Pesa Reconciliation That Scales: From Paybill Statement to Trial Balance
Stop reconciling in spreadsheets. A three-way match between the Safaricom statement, your callback events and a double-entry ledger, with named break categories and a daily close job in Python and SQL.
Where Africa Can Win with AI: Agriculture, Health and Fintech
Africa will not win at AI with a better chatbot. It wins where pain is largest and a phone reaches people no institution can - agriculture, health and finance, with real deployments already measured.
Killed by the Kernel: What Really Happens When Your Server Runs Out of RAM
The OOM killer is not random and your server did not just crash. Learn to read the dmesg kill record, tell a cgroup OOM from a global one, and cap the guilty process so MariaDB stops taking the bullet.
The Pilot Trap: Why AI Proofs-of-Concept Never Reach Production
Demos are designed to impress, not to survive reality. Here is why AI pilots get stuck in POC purgatory, why the demo lies, and how to design a pilot that is built to ship from day one.
How Kenyan Small Businesses Actually Get Hacked (Nobody Is Burning a Zero-Day on Your Duka)
Five real attack chains account for almost every SME breach: infostealers, credential stuffing, exposed admin panels, unpatched plugins and invoice fraud. With the log commands to check each one today.
The New Attack Surface: AI Security Risks Every Business Should Know
AI opens a new attack surface that behaves nothing like traditional software. From prompt injection and data leakage to shadow AI, here is the OWASP LLM risk landscape and practical defences for African businesses.
Ship to Your Own VPS: GitHub Actions CI/CD Without the Cloud Bill
A complete pipeline for a 10-dollar server: test, build to GHCR, deploy over SSH, health check, roll back. Real workflow YAML with current action versions, plus the details that quietly break deploys.
Closing the AI Skills Gap in Africa
Africa supplies 3% of global AI talent for 20% of the world's people - but the standard skills-gap story is wrong. The real issue is absorption, not appetite. A practical path for developers.
Why Your Software Estimates Are Always Wrong (And the Boring Fix That Works)
You cannot fix estimation by thinking harder, because the error is in your sample size, not your reasoning. Build a personal multiplier from your own ledger, then see it applied to a real project quote.
Build a Payments Port, Not a Daraja Wrapper: Provider-Agnostic Money Movement in Africa
The right payments abstraction is a normalised state machine plus a normalised event, not a charge() function. Ports, adapters, webhook signature handling, minor-unit traps and config-driven routing.
Restore First: How to Build Backups You Have Actually Tested
Write the restore script before the backup script. A practical restore-first methodology with restic, verified database dumps, timed recovery drills and the failure modes that turn a backup into an expensive nothing.
The Hidden Environmental Cost of AI: Energy, Water and Africa
Every AI answer draws real electricity and water from a real place - increasingly Africa. Here are the IEA and UN numbers on AI energy, water and emissions, and what they mean for strained African grids and data-centre siting.
Stop Committing Keys: A Secrets Workflow for Two-Person Teams Using SOPS and age
You do not need Vault. You need encrypted secrets in git, one age key per human, and a pre-commit hook that refuses the mistake. Full setup, offboarding in two commands, and when to actually upgrade.
Data Sovereignty: Who Owns Africa's AI Future?
Africa holds 20% of humanity and 1% of data-centre capacity. Where its data lives, who profits and who can say no is the defining AI fight of the decade. Data colonialism, local AI factories and policy.
Six API Design Mistakes That Will Cost You Six Months
API mistakes are expensive because they are public. Status codes in the body, offset pagination, contradictory booleans, leaked schemas, no versioning plan, and float money - with the fixes that are free today.
Why Fixed-Price ERP Implementations Fail, and What to Sell Instead
A fixed price is a bet that requirements are knowable before you touch the client's data. Six mechanisms that break ERP budgets, the incentive inversion nobody talks about, and five contract models that survive real projects.
KRA eTIMS Survival Guide: OSCU, cmcKey and the Rules the Spec Leaves Out
eTIMS is a fiscal device protocol, not an invoicing API. Real OSCU endpoints, the device handshake, a full saveTrnsSalesOsdc payload, the tax type codes, and six gotchas that will get invoices rejected.
Lock Down a Fresh VPS in 20 Minutes: SSH Hardening That Survives Real Attacks
A timed, copy-paste SSH hardening run for Ubuntu 24.04 - ed25519 keys, drop-in config that actually wins, UFW, fail2ban - plus the socket activation and drop-in ordering traps that lock people out.
Surviving a Bot Flood on a $20 VPS: nginx limit_req, fail2ban and Cloudflare Free in the Right Order
Diagnose before you block. A cost-ordered defence for small servers: Cloudflare's single free rate limit rule, nginx limit_req zones that do not break real browsers, fail2ban jails, and stale-while-updating caching.
Your Migration Will Run Twice: Write It That Way
Retried deploys, scaled replicas and tired humans all re-run migrations. Advisory locks, idempotent DDL, resumable batched backfills, the CREATE INDEX CONCURRENTLY trap, and a CI check that runs it three times.
KES, TZS and UGX: Multi-Currency Ledgers and the FX Gap Eating Your Margin
There is no single exchange rate in East Africa. Minor-unit traps, largest-remainder allocation, quote expiry, realised versus unrealised FX, and a schema that records the rate you actually transacted at.
The 3am Outage Playbook: Reading Linux Logs Like a Detective
Build the timeline before you build a theory. A working method for journalctl, grep and awk during a real outage - boot IDs, priority filters, the first anomaly rule, and the three culprits behind most 3am pages.
How to Read a Codebase You Did Not Write, Without Panicking
Never try to understand a codebase. Answer one question about it and let understanding be a side effect. Run it first, find the edges, trace one request, read the schema, and mine Git history for the answers.
Cron vs systemd Timers vs the Frappe Scheduler: Pick by Failure Mode, Not by Habit
Three schedulers, three completely different failure modes. A decision rule plus working configs for cron with flock, systemd timers with catch-up, and Frappe scheduler_events - and why running all three breaks things.
Stop Sending Blind SMS: Introducing UPEOSMS for Smart Bulk Messaging in Frappe
Most businesses send SMS. Very few do it intelligently. They blast the same generic message to hundreds-or thousands-of customers and hope for results. But customers don’t respond to generic…
A Better Way to Manage Properties - Inside ISHI (Full System Demo)
Property management shouldn’t feel this complicated. Yet for many property managers, landlords, and real estate teams, daily operations are still held together by a mix of spreadsheets, phone calls,…
How to Fix “sign_and_send_pubkey: signing failed… agent refused operation” (GitHub SSH Error)
If you’re working with Git and suddenly hit this error: sign_and_send_pubkey: signing failed for ED25519 "/home/user/.ssh/id_ed25519" from agent: agent refused operation git@github.com: Permission…
Server Hardening & Production Security for ERPNext (Complete Linux Guide)
ERPNext is powerful - but in production, your biggest risk is rarely ERPNext itself. The biggest risk is a Linux server with: weak SSH settings open ports no brute-force protection wrong file…
Understanding Files, Folders & Ownership in Linux (Why ERPNext Servers Break)
Most ERPNext servers do not fail because of bugs. They fail because of Linux ownership and permissions. If you have ever experienced: Permission denied403 ForbiddenUploads not workingPDFs not…
You Can Now Start Your Own ERPNext SaaS Business - In Minutes
For years, ERPNext has powered businesses quietly in the background. But something has changed. You no longer need a data center.You no longer need weeks of provisioning scripts.You no longer need to…
Most Car Yards Are Busy - But Financially Blind
A car yard can sell ten vehicles in a month and still be losing money. Not because the cars didn’t sell.But because the business doesn’t know the true landed cost per vehicle. And that’s the…
How to Import Huge Datasets into ERPNext the Right Way (Without Pain)
One of the most misunderstood parts of ERPNext implementations is data import. Many people assume that once you have ERPNext installed, importing data is just a matter of uploading a CSV file and…
Why Every Service Business Needs a Client Portal (And How UpeoLens Delivers)
If you run a service business - whether it’s a software agency, a consultancy, or a training firm - you’ve probably faced this pain: Endless calls and emails asking “Where are we now?” Clients…
UpeoTelephony: ERPNext Call Center Integration Powered by FreePBX
Every business knows the pain of missed calls, poor follow-ups, and scattered communication. In competitive markets, even one unanswered call can mean a lost customer. That’s why we built…
The Ultimate Shopify & ERPNext Integration - A Complete Solution for Modern eCommerce Businesses
When you run a Shopify store, your business doesn’t stop at checkout. You still need to manage: Inventory across multiple locations Customer records for marketing and support Order fulfillment and…
Africa Is Ready. But Is the Infrastructure?
Introduction: The Digital Economy’s Invisible Backbone In today’s global digital economy, infrastructure is the silent power that determines who thrives and who lags behind. High-speed networks,…
Transform the Way You Sell: Welcome to UpeoCRM - Where Leads Come Alive and Customers Stay Loyal
In today’s fast-paced business world, relationships - not just products - drive revenue. Yet many businesses continue to treat leads as data points, sales as isolated events, and customers as…
Why Land Selling Businesses Are Collapsing - and How Ardhipro Is Changing the Game
In recent years, Kenya has witnessed a surge in companies entering the land sales business. Land remains one of the most attractive investments - stable, tangible, and often appreciating. But behind…
Smart Waste, Clean Future: How Technology is Powering Climate Action from the Ground Up
When most people think of climate change, they picture billowing smokestacks, oil pipelines, and melting glaciers. Rarely do they think of trash bins. But the truth is: how we manage waste may be one…
ERP Implementation: The Top 8 Reasons Why Mindset Matters More Than Budget
When organizations embark on an ERP journey, the first question they often ask is, "How much will it cost?"While budget is undeniably important, there’s a more powerful factor that determines the…
Introducing UpeoRetail Web - The POS That Moves with You!
Running your business just got more flexible and powerful! 🚀 UpeoRetail, the ultimate mobile POS system, is now available on WEB - allowing you to manage sales, stock, and payments from any device.…
Introducing Our Frappe-Powered Loan Management App: Simplifying Lending & Repayments
Managing loans effectively is critical for financial institutions, SACCOs, and lending businesses. Traditional loan management can be tedious, error-prone, and inefficient. That's why we built a Loan…
Revolutionizing Land Sales: A Smart ERP Solution for Land Selling Companies
The land selling business in Kenya has experienced tremendous growth over the past few years. With increased urbanization, infrastructure expansion, and rising demand for real estate investments,…
Transforming Fleet Management with Frappe & ERPNext: A Complete ERP Solution
Introduction Managing a fleet of vehicles efficiently is crucial for businesses in logistics, transport, and supply chain management. Traditional fleet management systems often focus solely on…
How to Transfer Files from a Remote Ubuntu Server to Local Using SCP (Password Authentication)
Introduction Transferring files between a remote server and your local machine is a common task for developers, system administrators, and database managers. One of the most secure and efficient ways…
Become a Pro Frappe & ERPNext Developer: Master Customization, Development & Deployment
Are you an aspiring Frappe and ERPNext developer looking to take your skills to the next level? Whether you’re a beginner looking to break into the Frappe ecosystem or an experienced developer aiming…
UpeoRetail Mobile POS: The Smartest Way to Sell & Manage Your Business on the Go
Running a small business can be challenging - especially when it comes to tracking sales, managing stock, and handling customer payments efficiently. But what if you could do all this from your phone…
Why I Rebranded to Karani Online: Broadening the Horizon of Impact
In life and business, growth often comes with the need for change. When I first started CodeWithKarani, my mission was clear: to teach programming and help others build solutions people couldn’t live…
Transforming Waste Management: Upeosoft’s Comprehensive Waste Management Software
Introduction In today's world, effective waste management is more crucial than ever. As we strive towards sustainable living and a cleaner environment, innovative solutions are required to address…
How to Install ERPNext Version 15 in Ubuntu 24.04 - A step by Step Guide
Welcome to our comprehensive guide on installing ERPNext Version 15 on Ubuntu 24.04. ERPNext is a powerful, open-source ERP system that streamlines business processes from inventory management to…
Interactive Frappe And WhatsApp Integration: WhatsApp and Frappe Framework for Real-Time Data Management
In the digital age, businesses and developers are constantly seeking innovative ways to streamline operations and enhance customer interactions. Today, we’re excited to share an impressive…
Understanding Zero-Rated and Tax-Exempt Customers in ERPNext: A Kenyan Case Study
In Kenya, grasping the intricacies of Value-Added Tax (VAT) is essential for businesses aiming to remain compliant and optimize their financial operations. A common area of confusion is the…
Why ERP Implementations Fail: Avoiding the Top Implementation Mistakes
Implementing an Enterprise Resource Planning (ERP) system can revolutionize a business's efficiency and streamline operations. However, many organizations struggle with ERP implementation failures…
ERROR! [DEPRECATED]: ansible.builtin.include has been removed
ERROR! [DEPRECATED]: ansible.builtin.include has been removed. Use include_tasks or import_tasks instead. This feature was removed from ansible-core in a release after 2023-05-16. Please update your…
Optimizing ERPNext Performance: Tips for Faster and Smoother Operations
ERPNext is a powerful and flexible ERP solution, but like any complex system, its performance can be affected by various factors. Ensuring that your ERPNext instance runs efficiently is crucial for…
Best Strategies to Implement an ERP: Phased vs. Big Bang Approaches - Case Study of ERPNext
Implementing ERPNext, a robust and comprehensive ERP system, is a critical decision for any organization. The approach to implementation can significantly impact the success of the project and the…
Installing A Custom App On Your Running ERPNext Instance Installed via Docker
Installing a custom app on your running ERPNext instance that's installed via Docker involves a few steps. Here's a simplified guide on how to do it: Note: Before installing any custom app, it's…
Beginner's Guide to Installing Docker on Ubuntu 22.04: A Step-by-Step Guide
Installing Docker on Ubuntu 22.04 is a straightforward process that can significantly enhance your development environment by enabling containerization. This guide will take you through the steps to…
ERPNext and Frappe Expense Management Module
In today's fast-paced business environment, managing expenses efficiently is crucial for maintaining financial health and driving growth. However, many organizations still rely on outdated, manual…
Embrace the Future: Why Software Engineers Shouldn't Fear Devin AI Taking Over
In the dynamic world of technology, advancements like AI are constantly reshaping the landscape. Take Devin AI, for example - a marvel of artificial intelligence capable of writing code, building…
Resolving Frappe Application Startup Issue: No Module Named 'redis.commands'
Have you encountered the frustrating roadblock where your Frappe applications fail to start, presenting the error message "No module named 'redis.commands'"? If so, you're not alone. This common…
How to Upgrade ERPNext from Version 14 to Version 15
Introduction Ensuring your ERPNext system stays current is crucial for tapping into the latest features, improvements, and security enhancements. In this guide, we'll steer you through the upgrade…
How to setup HTTP Timeout in Frappe
Update Bench Config bench config http_timeout <value> bench setup supervisor bench setup nginx Restart Services Kindly note that this needs to be done as root. If you are not the root user, add sudo…
Simplifying Financial Management: Automating Bank Reconciliation in ERPNext
Introduction In today's fast-paced business environment, efficient financial management is crucial for the success of any organization. Bank reconciliation, a vital component of financial…
How to Set-up Promotional Schemes (Free Items) in ERPNext
In this video I will demonstrate how you can setup promotional schemes in ERPNext. This setup will allow you to offer free items to your customers when they hit a pre-determined threshold when buying…
ERPNext Installation Issue - ERROR: There was a problem while creating karani
When installing ERPNext, you may run into an issue that displays the message: ERROR: There was a problem while creating karani This error message is then followed by the following message: Do you…
Using Frappe / ERPNext with any DBaaS
Hosting your database files to a different server from the one hosting your software files is most of the time the best approach to ensuring safety and security of your data. This is because you can…
Unknown log format "main" - Nginx
This error can occur during installation of ERPNext as nginx: [emerg] unknown log format "main" in /etc/nginx/conf.d/frappe-bench.conf:101. This error can also occur when setting up nginx outside…
What Modules Are Available in ERPNext? | What are the capabilities of ERPNext?
ERPNext is a cloud based, free and opensource Enterprise Resource Planning (ERP) software. This article introduces a walk-through video for ERPNext, looking at the modules and capabilities within the…
DocType POS Offer Detail not found
When you get the an error message that DocType POS Offer Detail not found, you are most likely missing POS Awesome app in your instance. All you need to do is get it installed.…
How to install POS Awesome on ERPNext or Frappe
POS Awesome is an open-source Point of Sale for ERPNext using Vue.js and Vuetify. This video demonstrates how to install POS Awesome on ERPNext or Frappe instance.
How To Remotely Host ERPNext Database
Good software design will emphasize the importance of separating the database from the software application. The server where the database is hosted needs an extra layer of protection as it contains…
Frappe / ERPNext Assets not Loading Properly
When you install ERPNext for the first time, it sometimes gets frustrating when the fields are not properly arranged as you would expect. I will share some of the commands I have found useful in this…
How to avoid Burnout as a Software Developer
When I graduated from college and landed a Software Developer job at Futuristic, I was all in. I was so enthusiastic about code that finding time to have my lunch was becoming difficult by the day. I…
Setup ERPNext for Production
When ERPNext is installed in development mode, you will have to restart the instance with the bench start command every time you want to access it. You can however start your instance when the server…
Switch From Developer to Official Release Branch for Frappe and ERPNext
When you install ERPNext for the first time, you may realize that you are running the developer version of both Frappe and ERPNext. You cannot proceed with the developer branch, as things keep…
Installing SSL Certificate on your ERPNext Instance
You will need to have SSL certificate installed on your instance to keep users of your system safe online. In Frappe Framework or ERPNext, this is a simple process. Prerequisites You need to have a…
Fixtures and Custom Fields in Frappe and ERPNext
Fixtures in ERPNext and the Frappe Framework is a tool to help export Data and Settings. When you need to have data migrated to your custom apps, fixtures will come in handy to help you achieve this.…
Setting up Multi-tenancy in ERPNext
In Software, multi-tenancy is an architecture in which a single instance of a software application serves multiple customers, who are called tenants. The application can be offered as a service or as…
Why ERPNext is the best option for your Business
ERPNext is one of the fastest-growing ERP systems in the marketplace. It has listed in top ERP systems for 3 years in a row (2017, 2018, 2019) according to Gartner. What is ERPNext? ERPNext is an…
How to Authenticate and Login to ERPNext With an API
The Login Service API provides endpoints to manage the User Session in Conversational Cloud, such as User Login, Application Login, Logout and Refresh. API authentication is the processes of…
How To Install ERPNext in Ubuntu 20.04 - A Step by Step Guide
ERPNext installation can be a pain in the neck, especially if you are getting started. In this article, I will take a step-by-step approach to configure our newly installed ubuntu 20.04 OS to set up…
Sending Data From Other Applications To ERPNext with Webhooks
In this video we will Implement a webhook inside a custom Python file and use it to send data to an ERPNext application. Webhooks are one of a few ways web applications can communicate with each…
Sending Data From ERPNext To Other Applications With Webhooks
Webhooks are one of a few ways web applications can communicate with each other. It allows you to send real-time data from one application to another whenever a given event occurs. This is how PayPal…
Setting Cron Jobs in Linux | Task Scheduling in Linux
Cron is a classic utility found on Linux and UNIX systems for running tasks at pre-determined times or intervals. These tasks are referred to as Cron tasks or Cron jobs. In this video, I will show…
Automating Actions with Hooks & Controller Methods in ERPNext/Frappe
In this ERPNext / Frappe Framework tutorial, I will show you how you can automate actions with Hooks by executing controller methods. Here, we will use hooks to trigger changes in other DocTypes when…
Making API Calls in ERPNext
Let me first remind you that ERPNext rides on top of the Frappe framework. Making API calls from any part of ERPNext or the frappe framework is not any different from how you would do it say in…
How To Install MariaDB 10.5 on Ubuntu 20.X
How can I install MariaDB 10.5 on Ubuntu 20.04 (Focal Fossa) server?. MariaDB is a popular drop-in replacement of MySQL database server with more features, new storage engines, and better…
Ubuntu 16.04 Killed My Upstart Job: Converting an init Script to systemd
Ubuntu 16.04 is the first LTS with systemd as PID 1, so initctl and your /etc/init job stopped working. Here is the unit file that replaces it, and how to read the failure.