Projects
Selected systems, research prototypes, and open-source engineering work.
Flowbench
2026An open-source, local-first API and flow testing toolkit. Author a multi-step flow once in YAML or Python, then apply integration, system, load/stress, or soak profiles to the same canonical model. The Go engine is built around goroutine-per-VU concurrency and is documented for 10,000 concurrent virtual users on a single node.
Every step, protocol phase, extraction, assertion, and retry emits a span, so one result model powers the dashboard, flame graph, and waterfall view. Rate limiting stays honest with throttled as its own outcome class, while an optional target agent records CPU and memory alongside the run to separate generator pressure from target saturation.
SpeakUp
2026A session-shaped platform for live classroom engagement. A lecturer opens a room; students join with a short code (no account needed) to ask questions anonymously, upvote so the best rise, answer single/multi-select polls with hidden solutions and a peer-instruction re-vote, run think-pair-share, and give presentation feedback. The whole feature set reduces to four primitives: rooms, contribution boards, polls with a reveal state machine, and activity sequencing.
Each room runs as an in-memory actor on a single asyncio event loop, backed by SQLite (aiosqlite) and rebuilt lazily on restart, no message broker, no threads. FastAPI with native Starlette WebSockets on the backend; React 19 + Vite + TypeScript as an installable PWA with Clerk auth on the front. A deliberate privacy stance separates presence from authorship: the teacher sees who is present, but posts stay anonymous and peers never see who said what.
Lumen
2026A self-hostable research-paper management platform with AI-powered reading assistance, full-text and semantic search, and automatic relationship discovery through citations. Ingests papers directly from arXiv, ACM, IEEE, OpenReview, PMLR, NeurIPS, and friends, or via raw PDF upload, then organises them into hierarchical groups, custom tags, and reading states.
AI reading is wired to Google Gemini for chat-with-paper sessions (threaded so follow-ups stay scoped), auto-generated summaries, key-findings extraction, and smart highlights. The backend is FastAPI + SQLAlchemy 2 async on PostgreSQL 16 with pgvector for 768-dim semantic search; Celery on Redis handles background ingestion and AI tasks. Frontend is React 19 + Vite + TanStack Query + a TipTap editor, with an integrated PDF.js reader and per-user data isolation behind Google OAuth and JWT.
AI playing Oware
2026A custom Oware (Abapa ruleset) engine paired with three RL agents (DQN, PPO, and an AlphaZero-lite trained via MCTS self-play) pitted against a depth-limited Minimax baseline. The post is as much about what failed as what worked: a curriculum that forgets, league self-play that turns inward, and an AlphaZero that never finished its warm-up.
A round-robin Elo tournament with 100 games per pair settles the order. Minimax-d6 anchors the top, DQN comes second, PPO third, and AlphaZero-lite lands below Random, exactly what an under-trained policy on a 300-ply game with terminal-only reward should look like.
Real-Time Traffic Density Estimation
2026A two-stage pipeline for traffic monitoring. The first stage pairs an object detector with a spatial logic layer that filters detections against a precomputed road mask, so only on-road vehicles contribute to density measurements.
The second stage consumes the cleaned telemetry and forecasts short-horizon density with an LSTM, GRU, or TCN. Benchmarked across multiple YOLO variants and RT-DETR on hardware ranging from embedded boards to GPU servers.
AWS IoT Greengrass for Predictive Maintenance
2026A hybrid cloud-edge architecture for industrial predictive maintenance, integrating local ML inference with selective cloud synchronization through AWS IoT Core and Greengrass v2.
Empirically validated against a cloud-only baseline on real AWS infrastructure. The proposed configuration cuts cloud-bound bandwidth by 86.8% and decision latency by 256× (from 23.1 ms cloud round-trip to 0.09 ms local inference), while maintaining an anomaly-class F1 of 0.84 with 91% recall at the edge, even with the cloud disconnected.
Odumsor: Live Power-Outage Map for Ghana
2026A community-built platform that turns Ghana's power instability (locally called dumsor) into something legible. Anyone can log Dum (power out) or Sor (power on) for their zone, location-gated so users can only report on areas they're physically inside. Confirmed outages turn red on the map, restored zones turn green, untouched areas stay grey until enough reports come in.
Status is crowd-verified: the platform aggregates reports from the last six hours and requires multiple agreeing voices before flipping a zone, so single false alarms get filtered out. Restoration ETAs are computed per-zone from each area's own outage history, and official ECG load-management schedules sit alongside live reports so you can tell what's planned from what isn't.
Dynamic Network Traffic Shaping Agent
2026Replaced static Token Bucket Filter (TBF) shapers with a PPO agent that observes shifting network conditions and adjusts rate limits in real time. A Python Gymnasium environment talks to an ns-3 C++ simulator over stdin/stdout pipes, normalizing raw telemetry (queue occupancy, throughput, drop count) into a stable 4D state vector governing continuous action spaces in the 40–90 Mbps range.
Training is accelerated by swapping heavy ns-3 compilation for a mock simulator driven by an Ornstein-Uhlenbeck process that mimics bursty internet traffic. A/B tested against fixed baselines on real-world Cloudflare Radar data, showing near-zero queue drops and latency spikes even at 200% out-of-distribution intensity.
Adaptive Traffic Signal Control Grid
2025Formulated traffic signal control as an MDP and trained a PPO agent that outperforms traditional fixed-time controllers, reducing wait times by 96.1% on the heavy-traffic evaluation run. Curriculum learning steps through three scenarios (single intersection → arterial road → 2×2 grid) with W&B model versioning and artifact tracking.
Custom simulator grounded in the Intelligent Driver Model (IDM) accounts for non-linear vehicle dynamics, braking inertia, and shockwave propagation. The continuous reward function balances throughput efficiency, squared-queue congestion penalties, and fairness (delay-tracking) to eliminate “starvation” of low-density lanes. Scaling from a single node to a 2×2 grid produced emergent “Green Wave” synchronization and perimeter gating under saturation (>1200 veh/hr).
DQN Agent for Territory Capture (Flood-It)
2025Trained a DQN with an MLP policy via Stable Baselines3 to master a 6-color, 6^56 state-space grid game, achieving a 46-game win streak against random opponents. Custom Gymnasium environment with H×W×C one-hot encoded tensors so the network processes spatial relationships categorically.
Deployed the model into an interactive web app (React + FastAPI + WebSockets) that surfaces raw inference Q-values in real time. Overcame a player-perspective training mismatch by applying dynamic horizontal/vertical tensor flips on the backend prior to inference, with no model retraining needed.
Humanoid Balancing Policy with MjLab
2025A stabilizing control policy for the 29-DOF Unitree G1 humanoid trained with PPO and a small Actor-Critic network (512 → 256 → 128). Built on the mjlab framework with MuJoCo Warp to simulate 4,096 parallel environments directly on the GPU, bypassing CPU bottlenecks.
Modified pre-existing walking task algorithms by constraining velocity commands to zero and tightening reference-pose standard deviations to shape a “minimum energy basin” reward. Domain randomization across friction, mass, and actuator gains, plus NaN guards on qpos/qvel to catch numerical instabilities without crashing training.
PolyglotRAG
2025A high-performance, locally-run RAG engine in Rust that unifies and makes searchable a wide array of personal knowledge sources (websites, YouTube transcripts, PDFs, and audio) through a single semantically searchable vector database.
Modular, pipeline-based architecture centered on an event scheduler, so new data sources (“pipes”) and processing logic drop in without touching the core. Multi-threaded ingestion writes through shared memory to a chunker/embedder, vectors land in PGVector, and a REST query API exposes low-latency cosine-similarity retrieval.
Predictive Maintenance for Mud Pumps
2025A failure-forecasting pipeline for two industrial mud pumps. The first cut produced suspiciously perfect 98% accuracy, a red flag that surfaced two forms of data leakage: trivial prediction (the model just spotted pumps already stopped via Speed = 0) and random-split evaluation that let the model train on future data to “predict” the past.
Fixing both required a stricter framing of the question (“is the pump showing signs it is *about* to fail?”) and a chronological, time-aware validation split that simulates real deployment. After a deep-learning detour with LSTMs, the final approach leans on rolling-window features (mean, std over 24h) and tree-based models (Random Forest, XGBoost) for a more honest baseline.
Autonomous Navigation with SLAM
2024An autonomous navigation stack for a precision-agriculture robot built on ROS/ROS2, with A* and Dynamic Window Approach (DWA) running on custom navigation controllers. Cut navigation errors significantly during in-field trials.
Authored a differential-drive controller, a keyboard teleop controller, and a custom model-based Farmland environment for navigation. Built high-fidelity agricultural simulation environments in Gazebo with custom crop models, achieving high correlation with real-world robot behaviour for the vision-based detection systems.
Armbot: ROS Transforms on a Custom Arm
2024A custom arm robot dropped into a ROS1 workspace to make transform mechanics concrete. The TF tree is the star: each joint publishes its own frame, the chain composes into the end-effector pose, and the same arithmetic that looks abstract in slides becomes a visualizable graph in rviz.
Done alongside the SLAM coursework, so the same TF intuition (frames, parents, time-stamped lookups) carries straight over to localization and mapping work.
Patio
2024A lightweight, configurable reverse-proxy gateway in Go. Sits between clients and one or more origin servers or microservices, providing rate limiting and request/response modification.
Built around concurrent request handling, token-bucket rate limiting, and a customizable middleware chain. Implements the circuit-breaker pattern, response caching, and fair rate limiting.
Octopush
2024A pluggable concurrent HTTP file server in Go with faster file retrieval. Built with the Gin router and GORM for persistence, using goroutines and channels for parallel uploads and downloads.
Implements chunked transfer encoding and a custom memory pool tuned for large-file handling, so neither the kernel nor the heap becomes the bottleneck.
Open source
84 public repositories, sorted by recency.
Scripting-first API & flow testing toolkit: one flow, four execution profiles (integration/system/load/soak)
godfile for all personal skills of mine and others
Differential-drive robot with 2D lidar that builds a map with SLAM in simulation. ROS 2 Jazzy + Gazebo Harmonic (gz-sim) + slam_toolbox. Ported from ROS 1.
4-DOF robotic arm simulated with ros2_control in Gazebo. ROS 2 Jazzy + Gazebo Harmonic (gz-sim) + gz_ros2_control. Ported from ROS 1.
Minimal ROS 2 (rclpy) talker/listener pub-sub demo. Ported from ROS 1 first_pkg.
A libadwaita desktop app for browsing and introspecting ROS 2 (and ROS 1) packages, nodes, topics, services, actions, interfaces, lifecycle nodes, and parameters
System-tray indicator for Cloudflare WARP — shows status and toggles the VPN on click.
Play Oware (Abapa rules) against a ladder of AI agents, up to an AlphaZero-lite MCTS self-play agent.
Vision pipeline that tracks vehicles and forecasts traffic density from video.
RL agent (PPO) that dynamically tunes network traffic shaping in the ns-3 simulator.
Simulated IoT nodes publishing telemetry to AWS IoT Core over MQTT.
Browser tool to frame screenshots in device mockups and export them.
A modern research paper management platform with AI-powered reading assistance, full-text search, and semantic discovery.
Maze navigation in ROS/Gazebo comparing classical A* planning with PPO reinforcement learning.
Adaptive traffic-signal control system using PPO reinforcement learning.
Flood-It game where you play against a Deep Q-Network (DQN) agent.
MuJoCo (mjlab) RL experiments training a Unitree G1 humanoid with PPO.
ML pipeline predicting mud-pump failures from sensor data (XGBoost / Random Forest).
Web dashboard visualizing Ghana Stock Exchange market data.
competitive programming
Go client and gRPC/HTTP service wrapping Hugging Face Text Embeddings Inference (TEI).
Local Retrieval-Augmented Generation engine in Rust, unifying websites, videos, and PDFs into a searchable vector store.
Go client for Cloudflare AutoRAG, with RAG integration examples.
Interactive 3D Earth globe with geolocation, built with React.
A simple wrapper against gemini genai golang package to simplify usage for applications.
Personal researcher portfolio site (MAURC), built with React + Vite.
Web frontend for the Scripter tool — turns YouTube channel transcripts into generated stories.
Discord bot serving NeetCode 150 coding problems and games, powered by Gemini AI.
Starter template for a FastAPI backend with auth, users, database, and Docker.
Generates stories from YouTube transcripts using OpenAI, with YouTube and Firebase integration (FastAPI).
Scrapes and summarizes transcripts across a YouTube channel's videos.
Website for the MAURC research center — publications, about, and contact — built with Next.js.
Personal tribute site — a filterable gallery of memories (photos and video).
Multiclass disease-diagnosis classifier trained on conditions-and-symptoms data.
ROS 1 Gazebo package providing a textured, bumpy farmland terrain for simulation.
A Network Analytics application over interfaces.
A pluggable concurrent file server over http with faster file retrieval.
An IP Geolocator and basic Firewall.
A distributed replication system on sqlite.
Differential Drive controller in ROS for Robot Odometry.
A lightweight, configurable reverse proxy gateway built using Golang. Designed to act as an intermediary between clients and one or more origin servers or microservices, providing essential features such as rate limiting and request/response modification.
A custom ROS TwistMsg Publisher Node for teleop operations using the cmd_vel topic.
Admin dashboard to manage research-center portfolios: publications, profiles, and partners.
ROS 1 workspace demonstrating coordinate transforms with a custom robot arm.
ROS 1 differential-drive robot with Gazebo simulation and gmapping SLAM.
Fusion 360 to URDF exporter for ROS, patched for Python 3.12+.
Hands-on machine-learning notebooks and from-scratch implementations (regression, SVMs, trees, neural nets).
TROY is a web-based virtual teaching assistant that facilitates interactive learning for students in specific courses. It leverages natural language processing to provide personalized responses to student queries, enhance learning experiences, and support academic interactions.
ROS 1 learning workspace with a differential-drive robot and beginner tutorials.
Lab work for a Secure Network Systems course.
A simple API to replicate how the Achieve Investment App works.
Adolf is a CLI application that bootstraps a backend application in go.
Go language learning exercises and small programs.
Experiment serializing/deserializing Python objects for Redis.
Small experiment: shuffle items using a queue and random indexing.
Computer graphics coursework (final-year course).
Generate WAV audio files from scratch in C.
Scraper for housing listings from Jiji.
Packaged Rust reimplementation of Python's collections.Counter.
Python's collections.Counter reimplemented in Rust.
Digital take on Ampe, the Ghanaian playground game.
Rust language learning exercises (atomics, collections, enums, and more).
Repository for everything Relational Databases Course - Database and Information Retrieval COE 356 (Dr. Keelson)
Repository for everything VHDL Course - Digital Systems Design II (Prof K. O. Boateng)
Demo project for learning Git/GitHub
Object-oriented programming coursework in C++ (KNUST COE 351).
A FastAPI Rock, Paper, Scissors Game Simulator service with Management Routes.
个人资料库
Algorithms learnt in c++
Tired of the conventional way our watches and armageddon devices tell time? Use this instead!
Algorithms in C
A backend service template for managing Events & Hosts using SQLAlchemy and generic api methods.
A backend service template for measuring workplace activity using check-in sessions and generic api methods.
This repo serves as a presentation demo for my end of semester Data Structures & Algorithms class Project. All future commits will only contain the relevant additions to scale this to a working GUI application
Personal website and portfolio, built with Astro.
An image classifier for CT scans for possible diagnosis of Alzheimer's Disease.
A simple autocorrect system that suggests fixes for misspelled words.
NASA 2021 Space Apps Challenge project — AI/ML for detecting plastic marine debris.
Standing on the Shoulders of Giants
Increased population estimating using Zipf's Law
Plotting statistical distributions with matplotlib and NumPy.
Google Search in terminal Consoles
Python SpeechRecogn using Google Speech Recognition