SOFTWARE ENGINEER — NAIROBI, KENYA
I build software that solves annoyingly specific problems for specific groups of people
CURRENTLY EXPLORING
developer tooling · community technology · local-first software · automation
SELECTED WORK
01 · DEVELOPER TOOLS
This is the part that doesn't ship to users — it ships to me. It's usually the fastest way to tell if I actually understand a workflow, because I have no one to blame if it's wrong.
PROBLEM
Updating my portfolio was surprisingly repetitive. Every new project meant editing markdown, swapping screenshots, committing, and deploying — the same five steps, every time, done by hand.
SOLUTION
A Python CLI that abstracts the whole workflow — content updates, branching, commits, optional pushes — into single, deterministic commands. Opinionated enough to stay consistent, extensible enough to grow.
RESULT
Updating my portfolio went from a fifteen-minute chore to a single command. Laid groundwork for CI/CD hooks and GitHub API integrations I haven't built yet.
LESSON
Developer experience is a product. If a tool only has one user, it still deserves the same care as one that has thousands.
Python · CLI tooling · Git automation
PROBLEM
I had too many side projects living on disk — some active, some abandoned, some I'd genuinely forgotten existed. No single place told me the truth about any of them.
SOLUTION
A Flutter desktop app that indexes local projects automatically, using signature-based detection to identify frameworks and project types straight from the file structure, backed by a Drift/SQLite metadata store tracking lifecycle and Git health over time.
RESULT
A daily-briefing interface, closer to an intelligence dashboard than a file browser, that surfaces what's dormant, what's active, and what's quietly decaying — plus auto-generated portfolio artifacts from real project data instead of manual writing.
LESSON
Your filesystem already contains valuable product intelligence. Most developers just never build the thing that reads it back to them.
Flutter · Drift · SQLite
02 · PRODUCTS
These start the same way the tools do — something annoyed me — but the person who has to live with the result isn't only me anymore.
PROBLEM
Sports bettors track prediction slips in notes apps and spreadsheets, then never actually learn from their own history. There was no structured way to see which reasoning patterns were working and which ones were just noise.
ARCHITECTURE
A local-first data model in IndexedDB via Dexie, storing slips, prediction types, rationale, and whitelist/blacklist teams alongside historical outcomes — fully stateful, persisted client-side for speed and reliability, no backend round-trip required.
OUTCOME
A performance analytics view that surfaces which prediction patterns actually perform per league, plus structured note-taking that forces reasoning to be written down before the outcome is known — and export tools for sharing slips in social-friendly formats.
LESSON
People don't lack data, they lack a forcing function to record their reasoning before they know if they were right. That's a harder product problem than it looks.
React · IndexedDB / Dexie.js
PROBLEM
Goals die quietly. Not from one bad decision, but from thousands of small moments where nobody reminded you what you were actually working toward.
SOLUTION
A goal and dream reminder app that sends motivational push notifications and deliberately well-written notes, designed to keep people accountable to the version of themselves they set the goal for in the first place.
V1:Next JS/PWA NO Backend· Push notifications
V2:Minimal Supabase Backend plus better user experience and working push notifications
PROBLEM
Traditional contact apps are fundamentally broken. They store people as static entries — just names and phone numbers — organized alphabetically with no sense of time, context, or meaning. Users forget why they saved someone, networking value evaporates, and contact lists become unusable digital graveyards.
SOLUTION
Dossier reimagines contact management as a relationship intelligence system built on Intent Before Storage. Instead of saving and forgetting, users must pause and define why each person matters through a guided micro-reflection flow. Contacts organize by intent-based groups (Networking, Work, Friends, Opportunities) and display as Relationship Cards showing context, last interaction, and next suggested action.
ARCHITECTURE
Next.js PWA with offline-first localStorage via Zustand. Contacts store with metadata (reason saved, intent, tags, notes), interaction logs (type, timestamp, description), and insight layer (last interaction, follow-up suggestion, relationship score).
OUTCOME
80%+ of contacts categorized with clear intent within the first week. Active relationship management through follow-up prompts, network intelligence through streaks and achievements (Clarity Builder, Network Architect, Intent Master), and a dashboard that transforms passive lists into active relationship intelligence.
React · Next.js · Zustand · IndexedDB · PWA
03 · COMMUNITY TECHNOLOGY
WHAT I BUILT
Turned a 175-response community survey into a ranked business-opportunity report with a 90-day validation plan, and a separate 102-respondent EXPO survey into a formatted strategic report — both used directly for decision-making, not filed away.
COMMUNITY PROFILER
Specified an internal tool to parse SaMaFa's 42-column Google Form dataset into structured community profiles — full PRD and parser spec, built to turn a messy form export into a reusable data pipeline.
Data analysis · Reporting · Documentation
04 · EXPERIMENTS
This section exists so the rest of the page doesn't look like a highlight reel. Some of these are unfinished on purpose.
TRANSIT ADVERTISING
Headrest advertising for matatu routes across Nairobi and Kiambu — pitch deck, a lightweight CRM built on Google Forms, and the routes page that made the inventory legible to advertisers for the first time.
FIRST STARTUP
My earliest real attempt at a startup — a banking-tech idea meant to change how people interact with ATMs. It didn't work. It's also the reason everything after it got built with more discipline.
CREATOR ECONOMY
A concept SaaS scoring creators on reach quality, audience fit, content credibility, and commercial track record, using Phyllo for data aggregation. Still in the idea's early, unglamorous stage.
05 · LANGUAGES
Not years of experience — what I actually reach for, and why.
Ship fast, iterate live. React, Next.js, Redux — the default when a product needs a browser and needs it now.
Automation, developer tooling, data processing. Reached for when the problem is "I keep doing this by hand."
Desktop and cross-platform tooling — DevBrief runs entirely on it. Good for software that has to feel local and immediate.
Data modeling. Where I think through what a system actually needs to remember before I write a line of application code.
Systems curiosity. Less a daily tool, more where I go when I want to understand what's happening underneath the abstraction.
IoT and hardware — the layer below the software I usually write, and the part of the stack I understand the least.
HOW I THINK
Simplicity beats feature overload.
The best interfaces remove mental friction instead of adding more controls.
Context matters more than information. Tools become powerful when they understand why something matters.
Software should feel calm — intentional, minimal, and emotionally clear.
I don't over-engineer. Tech is an effort multiplier when built right.
06 · EXPERIENCE
WORK
SaMaFa Prosperity Foundation
Currently working as a forward deployed enginner to built internal tools to solve real-world problems through data analysis and software engineering on the field and on the go.
Marsoney Labs
Built a web-based project management tool with React, Next.js, and Redux for state management. Implemented user authentication and authorization using JWT and OAuth. Translated Figma designs into functional, user-friendly interfaces
EDUCATION
PLP Academy — PLP Africa Scholarship
Jomo Kenyatta University of Agriculture and Technology
What's next?