Jeff Gicharu
--:-- EAT

Software engineer

I build software that holds up in any domain.

I have built software for a telecom, for merchants taking payments and for the recycling industry, including ERP and CRM systems. I design the system, build it end to end, and run the server it ships to.

Experience withSafaricom PLCAkizaM-takaBlue Consulting Kenya

  • 2,000+production deploys through pipelines I run
  • 10+production applications shipping through pipelines I set up
  • 5domains worked in, from telecom and payments to recycling, CRM and ERP

01Selected work

Built to be broken into.

Each project here is designed, built, tested and deployed end to end, with a live demo you can try instead of taking my word for it.

Websites

Live
The Sebule home page on a laptop, with the headline "Furniture for the way Kenya lives" beside a sand-coloured sofa in a sunlit room.The Sebule home page on a phone, with the headline and two buttons above the photo of the sofa.

01Online store

Sebule

Sebule is an online furniture store for Kenya, built around a brand I invented. A customer finds a piece, pays with M-Pesa and follows the order to their door. Staff run orders, stock and the catalogue from one back office.

  • Quick on a slow phone. Pages arrive from the server as finished HTML with about 5 KB of script, so browsing, filters and checkout still work when scripts fail.
  • The shop moves without hiding anything. A product's photo glides from its card into its page with the browser's own page transitions, and flies into the cart when it is added. A visitor whose phone asks for less motion gets every page standing still, and without script every page still works.
  • Orders and stock stay right. A double tap or a retry on a bad connection never places a second order, and stock is held for 15 minutes while the customer pays.
  • M-Pesa replies are checked. Each payment prompt has its own signed address for the reply, a repeated reply is recorded once, and the store asks Safaricom itself when no reply comes.
  • A broken release is stopped. Every release opens its own pages against the live database before the site switches to it.
  • 1.91 sto the main content of the home page on a throttled phone in a lab test, and 1.4 to 1.5 s on other pages
  • 0layout movement while those pages load
  • 10 sfrom M-Pesa prompt to a paid order on Safaricom's test system

Laravel 13 · PHP 8.4 · Blade · Tailwind CSS 4 · Filament 5 · PostgreSQL 16 · Redis · M-Pesa Daraja · Resend · GitHub Actions

The store resets every night. Paying sends a real M-Pesa prompt for KSh 1 on Safaricom's test system, and a visitor without a Safaricom line can use a test payment instead.

Live
The Ukingo home page on a laptop, with the headline "Where the forest ends and the mountain begins" over a drawing of Mount Kenya at dawn, and a form for choosing dates.The Ukingo home page on a phone, with the headline above a form for arrival and leaving dates, adults and children.

02Booking platform

Ukingo

Ukingo is a booking site for a twelve-room lodge near Mount Kenya, a lodge I invented for this project. A guest picks dates, sees the price of every night, then books and pays a deposit without opening an account. Staff run the front desk, the room calendar and the prices from one back office.

  • Two guests never get one room. A stay is stored as a range of dates, and the database itself refuses two stays that overlap in one room.
  • A booking keeps what was agreed. The price of each night, the deposit and the cancellation terms are copied into the booking, so a later change to prices or rules never alters it.
  • Staff see a change before it is saved. A new price or a booking dragged to other dates first comes back in plain sentences, with what it costs and whether the guest is told.
  • Each role does only its part. Owner, reservations manager and front desk each see and do their own work, and the server refuses anything else.
  • 1.66 sto the main content of the home page on a throttled phone in a lab test, and 1.5 to 2.3 s on other pages
  • 1 of 12bookings accepted when 12 arrive at once for the same room and night
  • 0failures in an automated accessibility check of 36 guest pages and staff screens

Next.js 16 · React 19 · TypeScript · Node 24 · PostgreSQL 16 · Drizzle · pg-boss · Tailwind CSS 4 · M-Pesa Daraja · Resend · GitHub Actions

The lodge resets every night. The staff links open training accounts, which can work bookings but cannot change prices, rules or settings. The payment step asks for KSh 1 through Safaricom's test system, and a visitor can complete a booking with a test payment instead.

Live
The Roomwave big screen during a town hall, asking "How did this quarter go for your team?" with 59% choosing "About as planned", and the join code across the top.A phone in the audience after answering "About as planned", showing how the room has voted so far.

03Live audience platform

Roomwave

Roomwave is a live polling service for conferences, lecture halls and town halls, built around a company I invented. A presenter puts a poll, word cloud, quiz or question wall on the big screen, and everyone in the room answers on their own phone with no app and no account. The results move on the screen as the answers arrive.

  • The screen shows what was saved. Answers are counted from the database at most every 120 ms, so a burst of taps becomes a handful of updates and the screen never shows a number the database does not hold.
  • One phone, one vote. A phone that reloads or moves from Wi-Fi to mobile data is still the same person. Limits apply to each person, not each address, because a whole hall often shares one.
  • A release does not drop the room. Each release must count a live vote from two test phones on the server before visitors reach it, and during the switch both releases share the audience.
  • The quiz clock is on the server. A slow phone is never cheated of time, because answers already on their way get a short grace period after the buzzer.
  • 500phones joined one room in a load test, and all 2,500 of their answers reached the big screen
  • 0.4 sor less for half of those answers to reach the big screen over the internet
  • 105 MBof memory at most for the live server with those 500 phones connected, under half its limit

Node 24 · TypeScript · Fastify 5 · Socket.IO 4 · Svelte 5 · SvelteKit · Astro · PostgreSQL 16 · Kysely · Redis · BullMQ · Resend · GitHub Actions

Trying it opens a private workspace with a sample presentation for 24 hours. Press Present, then join from a phone with the code on the screen. The staff link opens a training account that sees and changes only the sample business, which resets every night.

Live
The Oriel home page on a laptop, with the headline "Homes designed around the light" beside the apartment tower drawn in 3D among trees.The Oriel home page on a phone, with the tower in 3D above the headline.

04Property sales platform

Oriel

Oriel is the sales website and sales desk for a tower of 86 apartments in Riverside, Nairobi, a development I invented for this project. Its homes are sold before the tower is built. A buyer turns the tower in 3D, watches how the sun reaches each home and prices it on each payment plan, then books a viewing and reserves it. The sales team runs the homes, prices, leads, viewings and reservations from a desk that updates live.

  • The desk and the website move together. A home held on the website changes at once on the manager's floor-by-floor plan. When the manager confirms the reservation, the buyer's page changes too, with the letter of offer ready to download.
  • Every drawing comes from one building. Floors, homes and sizes are described once, and the 3D model, the floor plans, the sun drawings, the prices and the PDFs are all drawn from that description, so they cannot disagree.
  • Each visitor gets a private copy. A visitor's first change gives them their own copy of the database, so anyone can reserve homes or reprice the building without spoiling the site for the next person.
  • 3D only where it runs well. Before loading the 3D code, the site checks how the device draws graphics. One that would struggle, or one saving data, gets drawn plans instead and never downloads the 3D code.
  • A release walks every journey first. Each release books a viewing, reserves a home and issues a letter of offer in a throwaway copy beside the live site before visitors reach it. Four releases were stopped this way.
  • 2.3 sor less to the main content of the home page, the 3D explorer and a home's page on a throttled phone in a lab test
  • 182 KBof 3D code, loaded after the page appears and only on devices that can draw it
  • 10 MBof memory for the live server, against a limit of 256 MB

Go 1.27 · templ · htmx · TypeScript · three.js · GSAP · SQLite · esbuild · GitHub Actions

The development, its buyers and its sales are sample data. A visitor's first change, and each opening of the sales desk, starts a private copy that nobody else sees and that is deleted after a day without use. No money is taken, because the sales team records each deposit itself, as in a real sale of this kind.

02Experience

Where I've done it for real.

I have worked in telecom, retail payments, recycling, CRM and ERP, with four teams that had very different problems.

Aug 2026 to present

Salesforce Developer

Blue Consulting Kenya

I build Salesforce solutions for client projects, and the mobile apps that go with them. On the Salesforce side that means data models, Apex, Flows, approval processes and permissions. On mobile it means React Native apps that work offline and sync to Salesforce. Much of the work is ERP-type operations such as inventory, procurement and asset control. I own the design decisions, testing and release pipelines for the work I lead.

I set up the release pipelines for both the app and the Salesforce code, so every change is tested before it ships.

Nov 2025 to present

Software Engineer

Akiza

Akiza is a point-of-sale and business management system that shops, restaurants, bars and agrovets in Kenya use every day. I am its lead developer and own the technical side end to end. I build the Django API and its three React frontends, which are the till, an admin dashboard and an agent portal. I also build the M-Pesa and WhatsApp integrations, and I run the servers and pipelines that it all depends on. Payments are recorded exactly once even when M-Pesa reports them twice, and the till keeps selling when the internet drops.

I have four apps in production and have shipped more than 550 production deploys.

Jul 2025 to present

Full Stack Engineer

M-taka

M-taka builds digital infrastructure for the circular economy in Kenya. Its software serves recovery facilities, buy-back centres, waste pickers and the partners that fund and regulate them. I am part of the development team and build across the platform, writing Django APIs with React and Svelte interfaces. My work covers ERP and CRM workflows, analytics dashboards and reports for partners, identification systems and access control. I also look after deployment and release for the products.

I set up and run the release pipelines and hosting for more than ten production applications.

Jun 2024 to Nov 2024

Frontend Developer and OSS Engineer

Safaricom PLC

I built React features for an internal platform that network teams use to manage site setup across Kenya. That meant forms, tables and layouts that work on a phone for engineers in the field. I took each feature from ticket through code review to release.

Graduated Dec 2025

BSc Computer Technology

Jomo Kenyatta University of Agriculture and Technology

I graduated with Second Class Honours, Upper Division.

03How I work

Done means tested, secured and running.

I keep four habits on every project, whoever it is for.

01

Own it end to end.

I design it, build it, secure it, deploy it and watch it run. The work is not finished when the code is merged.

02

Match the testing to the risk.

I write unit tests where the logic is dense and integration tests where data crosses a boundary. Not every project needs every layer, and I try to be honest about which ones do.

03

Security is part of done.

Code scanning, dependency checks and live scans run in the pipeline. Login, rate limits and cross-user isolation get their own tests, not only a code review.

04

Deployment is part of the product.

A small server forces tight memory settings, sensible caching and graceful fallbacks. Things stay up because the deployment is solid.

Test layers, and what each one is for

LayerWhat it catchesTools
UnitWrong logic where the rules are denseJUnit 5 · Pytest · Vitest
IntegrationFailures that only appear on a real database or message brokerTestcontainers
ContractTwo services quietly drifting apartPact
End to endBroken user journeys, locally and on the live sitePlaywright · Cypress
MutationTests that pass without checking anythingPIT · Stryker
LoadSlowdowns under real concurrencyk6 · Locust
SecurityAuth bypass, unsafe code paths, vulnerable dependenciesOWASP ZAP · CodeQL · Trivy · SpotBugs

Toolbox

Languages
TypeScript, JavaScript, Python, Java, Kotlin, Go, C#, PHP, C, C++, Rust, Ruby, Swift, Dart, SQL, Bash
Backend
Spring Boot, Node.js, NestJS, Express, Django REST Framework, Celery, FastAPI
Frontend
React, Next.js, SvelteKit, Vite, Tailwind CSS
Mobile
React Native, Flutter, Kotlin, Java, Dart, Salesforce Mobile SDK, Firebase
Data
PostgreSQL, MySQL, MongoDB, Redis, Kafka, Prisma, Flyway
Delivery
GitHub Actions, Docker, Kubernetes, Linux, nginx, Cloudflare, AWS
Salesforce
Apex, Flows, approval processes, SOQL, Salesforce CLI
Integrations
M-Pesa Daraja, WhatsApp Business, Africa's Talking

04About

Hello, I'm Jeff.

I am a software engineer, and the work I enjoy most is building systems that people depend on every day.

Most of what I have built is used by people in the middle of a working day. A shopkeeper takes a payment on it, a recycling facility runs its daily operations on it, and a network engineer opens it on a phone at a site. When software like that goes wrong, somebody's work stops, so I take real care to get it right before it reaches them.

I studied Computer Technology at JKUAT and started out at Safaricom, where I built features for a platform that network teams use across Kenya. Since then I have built a point-of-sale system that small businesses use to take M-Pesa payments, and I have worked in a team that builds ERP and analytics systems for the recycling industry. Today I also build business systems on Salesforce, together with the mobile apps that go with them.

I work across the whole stack, from the database and the API to the web and mobile screens and the servers they run on. Each of these fields had its own rules, and I had to learn them quickly. The way I work stayed the same throughout. I take the time to understand the problem, I build the solution properly, and I stay with it until it runs well for the people who use it.

Based in
Nairobi, Kenya (UTC+3)
Works across
Backend, frontend, mobile, testing and deployment
Domains so far
Telecom, payments, recycling, CRM, ERP
Education
BSc Computer Technology, JKUAT

05Contact

Let's talk.

If you are building something where getting it right matters, I'd like to hear about it.