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
- 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
- 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
- .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.