Projects

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

Page 5 of 8

SongRank (Swipe-to-Rank Playlists)

Next.js app that ranks a playlist by repeated head-to-head song duels instead of manual sorting. Drag distance drives the audio crossfade and preference strength, and a Ridge-regression model updates the leaderboard in the browser.

Next.jsTypeScriptReactTailwind CSSml-matrixframer-motionSupabaseYouTube Data APIPython

Status: In Progress (2026)

Role: Personal Project

Key Features:

  • Ridge-regression ranker with time-decayed weighting over five feedback levels (strong/weak win, tie) and active-learned pair selection, ported from a Python scikit-learn prototype…
  • Swipe arena built with framer-motion and react-youtube, where drag zones control crossfade volume, winner scale, and a drag-down tie gesture.
  • YouTube Music import through the Data API plus Next.js API routes for playlist, search and expand, and InnerTube helpers for artwork and metadata.

Financial Advisor (FinAgent)

Full-stack financial analysis app: a FastAPI backend runs Gemini 2.5 Flash with function calling over live Finnhub quotes and Tavily news search, and a React/TypeScript frontend renders the answers.

PythonFastAPIGoogle Gemini 2.5 FlashFinnhub APITavily APIUvicornReactTypeScriptViteTailwind CSSRailway

Status: Completed (2026)

Role: Personal Project

Key Features:

  • Gemini 2.5 Flash agent with tool declarations for Finnhub market quotes and Tavily news retrieval, looped through manual function-call dispatch.
  • FastAPI service exposing POST /api/analyze and GET /health, with startup validation of the three required API keys.
  • React 18 and TypeScript frontend on Vite, isolated behind a single services/api.ts client.

Monopoly: Global Village

Playable digital version of the Global Village Monopoly edition, played pass-and-play on one device or over a LAN from separate phones. Board values, rents and colour groups were transcribed from the physical set and its printed Title Deeds.

JavaScriptHTMLCSSNode.jsServer-Sent EventsWeb Audio APIlocalStorage

Status: Completed (2026)

Role: Personal Project (Game)

Key Features:

  • Rules engine holds all game state as pure functions and never touches the DOM, so rent, building and bankruptcy rules are tested directly in Node.
  • LAN mode keeps one browser tab authoritative while the server only hosts files, keeps the roster and routes messages, so both modes cannot drift apart.
  • Server-Sent Events downstream and plain POST upstream, so LAN play needs no dependency installed.

Natural Proofs (Predicate Logic Editor)

Browser editor for formalizing an argument in predicate logic: each sentence is written in plain English, the app builds the formula, checks whether the conclusion follows, and shows a counterexample when it does not.

TypeScriptReactViteVitestTesting LibrarylocalStorageCSS

Status: In Progress (2026)

Role: Personal Project

Key Features:

  • Sentence builder needs no symbols typed: quantifier, noun-phrase, relation and compound-clause forms produce first-order formulas, each shown with a plain-English reading.
  • Two independent checkers: a bounded countermodel search over situations of up to four things, and a clause-form refutation that closes the proof.
  • Verdicts limited to must-be-true, must-be-false or cannot-be-determined, with a named search bound and "couldn't settle" rather than a guess.

FreeTime (Activity Scheduler)

Dynamic activity scheduler that answers "what should I do now?": it scores the user's activities and returns a suggestion set fitting a chosen time budget, each pick carrying a human-readable rationale.

TypeScriptNext.jsReactTailwind CSSUpstash RedisModel Context Protocol SDKZodNode.js

Status: In Progress (2025)

Role: Personal Project

Key Features:

  • Scoring multiplies importance by a square-root recency boost, a preferred-day bonus, and a category-repetition penalty that decays over days.
  • Budget-aware selection loops weighted-random picks until the time budget is exhausted, recomputing every remaining weight after each pick.
  • Next.js server actions persist activities to Upstash Redis, with a one-time migration from a local activities.json on first read.

The Data Community, UNILAG (Community Platform)

Campus platform for Data Community UNILAG: a Strapi 5 CMS and API behind a React Router 7 server-rendered site, a six-step Datathon registration wizard, and a password-gated admin review table.

TypeScriptReact Router 7Tailwind CSS 4Strapi 5PostgreSQLSQLiteCloudinaryNodemailerRailwaypnpmDocker

Status: In Progress (2026)

Role: Community Platform (Full-Stack)

Key Features:

  • Registration rule engine with 13 hard and 4 soft rules in shared TypeScript, mirrored client-side for instant wizard feedback while the server copy stays authoritative.
  • 32 Strapi content types split across public content, blog, identity/portal, and registration surfaces.
  • Append-only points ledger: a member's score is SUM(delta), never a stored column, and corrections are posted as new rows.

Rickbert Fashion (Client Storefront)

Fashion storefront: a React and Vite shop with cart, multi-step checkout, Paystack payment and order tracking, backed by a Strapi 5 API that verifies transactions server-side before creating orders.

TypeScriptReactViteTailwind CSSStrapi 5PostgreSQLSupabasePaystackRenderpnpm

Status: Completed (2025)

Role: Client Project (Full-Stack)

Key Features:

  • Custom Strapi checkout service calls Paystack's verify endpoint and only creates an order when the transaction status is success.
  • Verification is idempotent: an existing order with the same paymentReference short-circuits instead of creating a duplicate.
  • Order content type with shared address and order-item components, plus separate paymentStatus and orderStatus enumerations.

Amari Girls (Foundation Website)

Website for the Amari Girls foundation: a Next.js 16 frontend over a Strapi 5 backend, covering programmes, gallery, board and testimonials, plus a volunteer form, newsletter signup and Paystack donation campaigns.

TypeScriptNext.js 16React 19Tailwind CSS 4Strapi 5PostgreSQLSQLiteCloudinaryPaystackpnpm

Status: Completed (2026)

Role: Client Project (Full-Stack)

Key Features:

  • Strapi content types for programmes, events, gallery items, board members, donation campaigns, reports, partners and volunteer roles.
  • Section-level CMS merge against hardcoded defaults, so every page still renders when Strapi is unreachable or a section is missing.
  • Donation page using Paystack inline checkout with preset amounts, impact tiers and campaign goal progress bars.

Adeyemi Gbemileke (Portfolio Site)

Portfolio site for an engineering student working in 3D modelling and design: a React Router 7 server-rendered frontend driven by a Strapi 5 backend, with project detail pages and a star-field hero.

TypeScriptReact Router 7Tailwind CSSStrapi 5Dockerpnpm

Status: Completed (2026)

Role: Client Project (Full-Stack)

Key Features:

  • Strapi content types for profile, project, experience, skill and social link, fetched through @strapi/client with one typed module per resource.
  • Home route loader fires all five CMS fetches in parallel and renders the sections from loader data with fallbacks.
  • Dynamic projects/:slug route for per-project detail pages.

Kakka (Agency Enquiry Backend)

Client site whose Strapi 5 backend captures service enquiries across web development, UI/UX, marketing and consulting. The Next.js 15 frontend is still at scaffold stage.

TypeScriptStrapi 5Next.js 15React 19Tailwind CSS 4PostgreSQLRender

Status: In Progress (2025)

Role: Client Project (Full-Stack)

Key Features:

  • Strapi Request content type with a required service enumeration, company name, budget text and contact fields.
  • Render blueprint provisioning the Strapi service with Postgres and JWT environment variables.

Hairs by Solomon (Salon Storefront)

Hair salon storefront: a Create React App frontend with shop, product detail, wishlist, login and product upload pages, plus a small Express API and Firebase for auth, database and image storage.

JavaScriptReact 18Create React AppReact Router 6ExpressFirebaseVercel

Status: In Progress (2024)

Role: Client Project (Full-Stack)

Key Features:

  • React Router 6 SPA with shop, product detail, new-product upload, wishlist, login and contact routes under a shared root layout.
  • Express API split into post and user routes over a shared HttpError model.
  • Firebase Realtime Database, Storage and Auth clients initialised in a single module.

Awofeso Aisha (Analyst Portfolio)

Single-page portfolio for a data analyst, built as one static HTML file with Tailwind from a CDN, presenting projects and Medium articles as linked cards.

HTMLTailwind CSS

Status: Completed (2025)

Role: Client Project (Static Site)

Key Features:

  • Entire site is a single index.html, with custom card, hover and dark-theme styling in an inline style block.
  • Section layout of hero, about, project-card grid, article list and a social-linked footer.