Projects

85 projects across computer vision, applied ML, full-stack products, developer tooling and research.

Page 7 of 8

NotebookLM Automation

Python tooling that bulk-uploads course folders into NotebookLM notebooks through a Playwright client, skipping files already present. A companion script crawls same-prefix websites and lists their HTML pages.

PythonPlaywrightnotebooklm-pyBeautifulSouprequestsasyncio

Status: Completed (2026)

Role: Developer Tool (Automation)

Key Features:

  • Drives NotebookLM through notebooklm-py with a Playwright Chromium session instead of the web UI.
  • Creates or reuses one notebook per folder name, then skips files already in that notebook by title.
  • Per-file retries with a 300 s timeout, a five-consecutive-failure circuit breaker, and rate-limit backoff.

Axionvera SDK (Stellar / Soroban)

TypeScript SDK for Axionvera's Soroban vault contracts on Stellar, plus the Next.js dashboard that consumes it. Contributions added Zod validation of RPC responses, the package export map, and the dashboard's vault balance display.

TypeScriptStellarSorobanZodNext.jsReactJest

Status: In Progress

Role: Open Source Contribution

Key Features:

  • Zod schemas validating Soroban RPC responses inside getHealth, simulateTransaction and getTransaction.
  • Package exports map with deep-import blocking, backed by RPC validation tests.
  • Dashboard vault balance rendering and withdraw-button loading state.

dsh-btw-plugin (DSH /btw Command)

Plugin for DeepSeek Harness that adds a /btw command for asking a side question about the current session. The handler runs on the command plane, so neither the question nor the answer joins the conversation the model sees.

JavaScriptDeepSeek Harness plugin API (Cordis)JSON

Status: Completed (2026)

Role: Developer Tool (Editor/Agent Plugin)

Key Features:

  • Uses ctx.commands.register() to run a handler that creates no model message, borrowing the invoking session's derived history and provider route.
  • Sends one tool-less request and returns the text for the UI to present, deliberately not reusing the main agent's system prompt.
  • Caps the transcript at 40,000 characters, degrading a long session by dropping oldest turns rather than failing.

dsh-gmail-plugin (Read-Only Gmail for DSH)

Plugin that lets an agent search a Gmail mailbox and read individual messages without any ability to send or draft. Connects with a Gmail app password over IMAP or an OAuth client using the gmail.readonly scope.

JavaScriptIMAP (app password)Gmail API OAuth (gmail.readonly)

Status: Completed (2026)

Role: Developer Tool (Agent Plugin)

Key Features:

  • gmail_search accepting Gmail-style queries (from:, subject:, is:unread, newer_than:), returning subject, sender, date and id.
  • gmail_read_thread returning one message in full with the body decoded and attachments skipped rather than fetched.
  • /gmail command exposing status, login and logout for the OAuth route.

Move App Utility

PowerShell utility that relocates application data and program folders to another drive and leaves junction points behind, so the applications keep working while their files live elsewhere.

PowerShellWindows junction points

Status: Completed (2025)

Role: Developer Tool (PowerShell)

Key Features:

  • Stops running processes of the target application before moving its folders.
  • Moves folders to a configured target location, then creates junction points redirecting the original paths.
  • Ships preconfigured application definitions for common large installs.

WhatsApp to Telegram Auto-Forwarder

Utility that watches a WhatsApp group and forwards selected messages into course-specific topics in a Telegram group — built for an educational group where students reply with course codes.

TypeScriptNode.jsWhatsApp Web clientTelegram Bot API

Status: Completed (2025)

Role: Developer Tool (Bot)

Key Features:

  • Detects replies containing a course code in the #AAA 000 or #GENERAL format and extracts the quoted message.
  • Maps each course code to a Telegram topic ID through topic-map.json, falling back to the general topic.
  • Admin notifications and graceful shutdown when WhatsApp connection failures persist.

Custom Web Scraping

Web scraping library written from scratch, alongside a separate WhatsApp Web scraper that collects conversation data by driving a real browser session.

JavaScriptHTMLPythonSeleniumChromeDriver

Status: Completed (2024)

Role: Developer Tool (Library)

Key Features:

  • Scraping library built from the ground up rather than on an existing framework.
  • WhatsApp scraper drives WhatsApp Web through ChromeDriver, waiting for the QR-code session before collecting the contact list and messages.
  • Documented failure mode for WhatsApp's rotating CSS class names, with screenshots of the selectors to patch.

DbUtility (Database Backup Manager)

TypeScript utility for managing database backups, built as a HatchDev assignment with Azure Blob Storage as the backup target.

TypeScriptNode.jsAzure Blob StorageAzure Identitybcryptjsaxios

Status: Completed (2025)

Role: Developer Tool (CLI Utility)

Key Features:

  • Azure Identity and Blob Storage SDK integration for pushing and retrieving backup artifacts.
  • TypeScript build to dist/main with a nodemon dev loop and .env-driven configuration.

Auto-Scheduler

Python scheduling engine that fits tasks with deadlines and duration estimates into the free slots between fixed events, honouring buffers and working hours, then renders the timetable as standalone HTML.

PythonHTMLCSS

Status: Proof of Concept

Role: Developer Tool (Scheduling Engine)

Key Features:

  • Greedy allocation of deadline-sorted tasks into free slots between fixed events.
  • Buffers reserved around events and tasks so adjacent time cannot be booked.
  • Working hours converted into free time by inverting time ranges.

cli-qa (Terminal Q&A)

Python CLI that answers a question from the terminal using Gemini 2.0 Flash-Lite, built for an ML Lagos GenAI study group assignment requiring rate-limit handling.

PythonClickgoogle-generativeaipython-dotenvGemini 2.0 Flash-Lite

Status: Completed (2025)

Role: Developer Tool (CLI)

Key Features:

  • Click command installed as the qa console script entry point.
  • Error handling distinguishing 429, 401, 404 and 5xx responses, retrying rate limits and server errors with exponential backoff.
  • API key read from .env or the environment, with an explicit error when missing.

Ollama Scripts (Local LLM Tooling)

Suite of scripts for working with local models through Ollama: a streaming chat CLI with tool calling, a journal agent that reads and writes the Obsidian vault, and an OpenAI-compatible proxy in front of a local agent runtime.

PythonOllamaFastAPIPydanticargparseJSON

Status: In Progress (2026)

Role: Personal Project (Developer Tooling)

Key Features:

  • Shared chat harness that derives tool schemas from plain Python function signatures and runs the stream → execute tool calls → repeat loop, reused by every script that needs a…
  • Streaming CLI that loads callable functions from an adjacent tools.py, exposes them to the model through Ollama's native tool calling, and survives Ctrl+C mid-response without…
  • Journal agent with tool access to recent entries, the task list and a personal system file: it can ask follow-up questions, append notes to a specific day's entry, and save its…

INCOSE 2027 Paper (Autonomous & Adaptive Systems)

Paper being prepared for the 37th INCOSE International Symposium (July 2027, Washington DC) under the theme "Architecting Intelligence: Engineering Complex Systems", narrowed to autonomous and adaptive systems.

LaTeXOverleafEasyChairAPA 7th

Status: In Progress — literature review stage, initial submission due 11 January 2027

Role: Research Paper (Conference Submission)

Key Features:

  • Submission requirements fixed against the IS2027 call: 2,000–7,000 words, APA 7th, blind PDF via EasyChair with an identity-bearing cover page uploaded separately.
  • Topic narrowed to Autonomous and Adaptive Systems after screening topic areas by result volume and most-cited recent reviews.
  • Structured review of review papers recording each source's scope, vocabulary and open questions — systems of autonomous systems, robotic test and validation, and GenAI for…