Emmanuel Bett, engineer
Home

Work

14 systems, from a national platform to a package other people install

Grouped by where they were built rather than by when. 12 of them have a live link or source you can read, because a project nobody can open is a claim rather than evidence. The rest are internal to an employer and are marked as such.

Computech Limited

AI Engineer, Graduate Management Trainee · 2026 to now

BidBuddy

2026

Internal bid management platform

An end-to-end platform for running the bid pipeline, from the moment an opportunity appears on a portal to the moment senior management signs off on chasing it. It captures opportunities across six procurement sources: tenders.go.ke, eGP Kenya, KRA, KPLC, KenyaRe and TenderSure, so nobody is refreshing six sites by hand and nobody misses a deadline because they were only watching five.

  • Aggregates six procurement portals into one pipeline with a single view of what is open and what is closing
  • Weighted qualification scorecard, so bid or no-bid is argued from consistent criteria rather than from whoever is loudest in the room
  • Sequential CRO to CGO approval chain feeding senior management decisions, with each stage recorded so an approved bid carries the reasoning that got it there
  • Microsoft Entra ID single sign-on, because an internal tool nobody has a separate password for is an internal tool people actually use
Next.js 16FastAPIPostgreSQLSupabaseMicrosoft Entra IDDocker

Internal system, no public link.

Leave Management System

2026

Multi-country HRMS, built on Horilla

A leave management system built on the Horilla open source HRMS, serving employees across five countries from one deployment. The interesting problem is not the request form, it is that five countries means five sets of statutory entitlements, five public holiday calendars and five ideas of who signs off on what, none of which can be hardcoded if the sixth country is ever going to be cheap to add.

  • Country-specific leave policies: statutory entitlements, accrual schedules, carry-forward and expiry rules, and separate public holiday calendars per jurisdiction
  • Configurable approval hierarchies, so each country routes requests through the chain it actually uses rather than a shared approximation of one
  • Employee self-service for balances, requests and history, with manager and HR dashboards for approvals, team coverage and reporting
  • Full audit trail behind every state change, because leave records are the kind that get disputed months after the fact
HorillaDjangoPythonPostgreSQLDocker

Internal system, no public link.

iLab Africa

Junior Full Stack Engineer, Nairobi · 2024 to 2026

National government tender platform

The platform Kenyan government tenders are published and managed through, serving suppliers and procurement officers across the country. Search, filtering and reporting over procurement data that has to be correct and available when a tender deadline lands.

  • REST API architecture over procurement data, built for read-heavy access under deadline-driven traffic spikes
  • 99.9% uptime on operations that cannot be paused for a deploy
  • Horizontal pod autoscaling on Kubernetes to absorb bursts rather than provision for the peak permanently
LaravelVue.jsMySQLRedisKubernetesCypress

Open source and products

Independent · 2022 to now

Published npm package

A Vue 3 component that formats numbers with thousands separators as the user types. The hard part is not the formatting, it is holding the cursor in the right place after the string under it has changed length, which is why most implementations of this feel broken.

  • Maintains cursor position correctly while the formatted value grows and shrinks
  • Decimal support and integration with Vuetify's validation rules
  • Published and installable: @emmanuelbett/vue-number-input
Vue 3TypeScriptVuetifynpm

Focus timer, Flutter

A Pomodoro timer built for deep work, with session history and analytics so the tracking is worth something after the first week. Offline first, because a focus app that needs a connection has misunderstood the problem.

  • Configurable sessions from 15 to 60 minutes
  • Full session history with visualised productivity trends
  • Offline first with local persistence
FlutterDartRevenueCatLocal storage

Kenyan tax tool

Estimates monthly net salary for Kenyan employees, applying the PAYE bands along with NSSF and NHIF deductions. Built because the alternative was a spreadsheet everybody had a slightly wrong copy of.

  • Calculates as you type, no submit step
  • Follows the Kenyan PAYE bracket structure
  • Applies statutory NSSF and NHIF rates
Vue.jsViteJavaScript

Personal finance

Income and expense tracking with running balances, persisted locally so it works with no account and no backend.

  • Live balance, income and expense totals
  • Works fully offline
  • Straightforward transaction entry and removal
Vue.jsJavaScriptLocal storage

Flutter mobile

Current conditions based on device location, with dynamic iconography reflecting the actual weather state.

  • Location-based current conditions
  • Dynamic icons per weather state
  • Cross-platform build
FlutterOpenWeatherMap APIGeolocator

Data analysis

Independent · 2023 to 2025

Time series forecasting in R

An analysis of my own M-Pesa transaction history: categorising spend, finding the patterns in it, and fitting an ARIMA model to forecast the following weeks with published confidence intervals rather than a single reassuring number.

  • Weekly spend forecast with confidence intervals shown, not hidden
  • Category-level breakdown of where the money actually goes
  • Interactive published dashboard
RARIMAD3.jsTime series analysis

Exploratory data analysis

Data wrangling and EDA over an HR dataset to identify which factors actually correlate with employees leaving, as opposed to which ones are assumed to.

  • Identification of the factors with real signal
  • Pattern and trend analysis across employee segments
  • Retention recommendations tied to the findings
PythonPandasMatplotlibSeaborn

End-to-end data pipeline

A full pipeline from raw spreadsheet through SQL Server cleaning and transformation to a Power BI dashboard, built to practise the unglamorous middle of analytics work rather than just the chart at the end.

  • Cleaning and transformation done in SQL Server, not in the visualisation layer
  • Interactive Power BI dashboard over the result
  • Documented pipeline from source file to output
ExcelSQLMSSQLPower BI

Python analysis, 183,412 trips

A two-part exploration of the Ford GoBike system dataset, moving from univariate distributions through to multivariate relationships across user type, age and gender.

  • 183,412 trips analysed
  • Behavioural differences between subscriber and casual users
  • Age and gender segmentation of trip patterns
PythonNumPyPandasMatplotlibSeaborn

Dashboards

Tableau Public · 2023 to 2024

Tableau visualisation

Twenty-two years of German poultry, pork and beef production charted together, so the substitution between them is visible rather than described.

  • 2000 to 2022 trend analysis
  • Direct comparison across the three categories
Tableau

Geographic analysis

Iceberg sightings across the North Atlantic from 2016 to 2021, mapped geographically and over time to surface the seasonal pattern.

  • Geographic distribution mapping
  • Five-year temporal comparison
Tableau

The interesting part is usually not on the screenshot

If any of these are worth a longer conversation, the decisions behind them are the part I would rather talk about than the feature list.