Skip to content

01

Work

Problem, constraints, architecture, and what I'd do differently — written the way I'd explain it to a teammate.

VersaRent — system map

High-level architecture. Click a node for its role in the stack.

Component

Select a node

Click any node in the diagram to see how it fits the stack.

01

VersaRent

In progress· In active development.
  • React Native
  • Expo
  • TypeScript
  • Supabase

Problem

Small landlords coordinate units, tenants, recurring charges, and maintenance across notebooks, messages, and ad-hoc mobile-money transfers. Nothing gives them a single view of what is owed, overdue, or in progress.

Constraints

Mobile-first users; Kenyan payment and identity expectations; one codebase serving both owner and tenant roles; built and maintained largely solo.

Architecture

React Native (Expo) with TypeScript on the client. Supabase for auth, Postgres, and realtime updates. Owner and tenant flows share one codebase with separate navigation trees. Sensitive logic stays server-side.

Retrospective

I would formalise server-side invariants before expanding UI surface area. Payment and compliance work in this market rewards upfront abstraction more than I initially allowed for.

02

Smart Traffic Control System

Shipped· Completed as a final-year engineering project at Moi University.
  • Arduino
  • ESP8266
  • Python
  • MongoDB

Problem

Intersections without adaptive signal control waste green time when one approach has no traffic. The project asked whether low-cost sensors could inform timing decisions without full SCADA infrastructure.

Constraints

University lab budget; off-the-shelf microcontroller hardware; need for remote monitoring over Wi-Fi; separate server for storage and visualisation.

Architecture

Microcontroller-based sensing on the roadside, Wi-Fi module for telemetry, and a lightweight web backend with a charting dashboard for occupancy analysis. Hardware and software were developed as one integrated system.

Retrospective

I would add edge buffering before the wireless hop. The project bridged my hardware coursework and self-directed software practice.

03

FileSendNX

Shipped· Personal utility — local-network use only; traffic is unencrypted HTTP.
  • .NET 8
  • Kotlin
  • Jetpack Compose
  • HTTP

Problem

Moving files between a desktop and a phone on the same network usually means cables, cloud uploads, or third-party apps with accounts. I wanted a direct device-to-device path on trusted home Wi-Fi.

Constraints

No cloud dependency; both devices must discover each other on a LAN; Windows HTTP listener requires explicit port permission; Android and desktop built as separate native clients sharing one API contract.

Architecture

Each device runs a small HTTP server on a fixed port. REST endpoints handle device info, file listing, upload, and download. Windows client in .NET 8 (WPF); Android client in Kotlin with Jetpack Compose.

Retrospective

I would add optional TLS or a pairing code for shared networks. For a personal tool the plain HTTP contract was sufficient.