Oluwaseyi

Oluwaseyi (Ekpere) Oyewunmi

--:-- · ...

I'm that i'm, a tinkerer, over thinker, and the lover of my girlfriend. This site is a personal playground for me, and hopefully over time, a place that i can maintain my thoughts.

Software engineer. I build things in O(sometimes).

$ ls ~/projects

Things I've built

Mostly backend & infra — scrapers, ML pipelines, and the systems around them. Most of it is client work, so it's written up as case studies rather than repos. The public tinkering lives on GitHub.

Selected case studies

Aktivate

Creator-intelligence engine: five platforms scraped, scored and shipped

private · client work

Software Engineer · data platform & DevOps · Aktivate · Dover, DE · Jan 2025 — Sep 2026

An influencer-analytics platform for African-market brands. I built its data engine on my own: a FastAPI service that scrapes Instagram, TikTok, X, YouTube and LinkedIn on a self-protecting schedule and turns raw posts into engagement, authenticity and topic scores. Then I moved the product's AdonisJS and Nuxt apps from PM2 to health-gated container deploys.

  • ▹Sole author of the scraping engine: 5 platforms behind a 20-endpoint FastAPI service, with MongoDB upserts deduplicated on (platform, post_id)
  • ▹Anti-bot strategy per platform: Instagram's private GraphQL through Scrapfly geo-proxies, TikTok via a JS auto-scroll that captures the page's own item_list XHRs, X via Playwright with masked automation flags and cookie-session reuse
  • ▹Self-protecting scheduler: 20-job batch cap, a circuit breaker that pauses when more than 20% of the last 50 runs fail, 2ⁿ-hour backoff, and a per-platform X concurrency cap tuned down in production
  • ▹Transparent scoring: engagement rate plus a consistency score from the coefficient of variation, a weighted authenticity score, and hybrid topic tagging (keyword rules + Mistral-7B, falling back to rules if the model fails)
  • ▹Moved the product off PM2: GHCR images tagged by commit with layer caching, health-gated Compose deploys isolating API, queue worker and two Redis instances. Trialled Docker Swarm first and rolled back within 9 days
PythonFastAPIPlaywrightScrapflyMongoDBAPSchedulerMistral-7BAdonisJSDockerGitHub Actions

BRaaS

Multi-tenant Telegram platform that runs, grades and pays X raids

private · client work

Co-lead Engineer · SwarmTech · Remote · Aug 2024 — May 2025

Bot Raiding as a Service. A crypto project enrolls its Telegram group, a moderator points the bot at a post on X, and it watches engagement until the targets are hit, grades every raider's reply, and maps the scores to token payouts on Solana. A two-person codebase: I owned scraping, AI grading, deployment and on-chain funding.

  • ▹11 per-chat, per-user conversation flows, including an 8-step enrollment state machine; bit-flag roles checked against Firestore, then version and subscription gates, before every privileged command
  • ▹Real multi-tenancy: the tenant is resolved from the Telegram chat, with its own raid targets, time limits, scoring weights and payout bands, and separate DEV/UAT/PROD bots and Firebase projects
  • ▹Raids run as cancellable background tasks: a stealth Playwright scraper (masked automation flags, cookie-session reuse, human-like scrolling) polls every 30s until replies, likes, bookmarks and reposts all hit target, and even opens X's hidden "probable spam" replies so they're excluded
  • ▹Cost-gated hybrid grader: tenant-configurable rules score every reply, a local Llama 3.2 (Ollama) only sees the low scorers, and the 60/40 blend maps to 7 payout bands, degrading to rules-only if the model fails
  • ▹On-chain funding via Helius webhooks sharded up to 100K watched wallets each, re-verifying balances before automatically activating a tenant's plan
Pythonpython-telegram-botPlaywrightFirestoreOllamaSolanaHeliusDocker

Hordanso Workspace

Pay with Stripe, get a provisioned Google Workspace tenant

private · client work

Lead Backend & DevOps Engineer · Hordanso · Remote · Oct 2023 — Oct 2024

A self-serve platform for reselling Google Workspace. Customers check a domain and pay through Stripe, and a webhook provisions everything on Google's side (customer, super admin, subscription), then keeps seats in sync. I led the FastAPI backend and built the Kubernetes infrastructure and CI/CD the platform's microfrontends run on.

  • ▹Payment-driven provisioning: a signature-verified Stripe webhook creates the Workspace customer, promotes a super admin and opens the subscription, then writes IDs and billing dates back to Firestore
  • ▹Integrated 3 Google APIs (Reseller, Admin Directory, Site Verification) through a domain-wide-delegated service account: 3 Workspace editions × 3 billing plans, seat and plan changes, suspend and reactivate
  • ▹Stripe quantity changes sync to Google seats, and a Celery beat job on Redis flags annual commitments ending within 7 days and trials within 20
  • ▹One domain check that combines registrar availability with "is this already on Workspace?"; Firebase auth with TOTP 2FA and role-guarded routes
  • ▹Hetzner k3s cluster across 3 locations with an autoscaling worker pool (0–5 nodes), ingress-nginx behind a load balancer, and cert-manager TLS for 8 microfrontends, each with its own path-filtered build-and-deploy pipeline
PythonFastAPIGoogle Workspace APIsStripeFirestoreCeleryRedisk3sHetznerGitHub Actions

RouletteAid

Desktop roulette predictor: a 10-model ensemble with licensing and self-updates

proprietary

Lead Developer · RouletteAid · Madrid, ES · Jul 2022 — Feb 2024

A Windows desktop app that predicts the next spin per bet type from the last three spins, keeps learning from every prediction, and ships in three paid tiers with time-metered licences and a Git-based auto-updater.

  • ▹One model per bet family, 10 in all: k-NN, an SVM pipeline, LightGBM, CatBoost and Random Forests, each chosen for its own bet type
  • ▹21 wheel-geometry features from the last 3 spins: forward and backward pocket distance on the 37-pocket European wheel, neighbours, figure and subset
  • ▹Online learning: each prediction is appended to its model's 5,000-row seed set and the model refit; the top tier works on copies restored at exit, so a session can't corrupt the shipped models
  • ▹Tiered, time-metered licensing: 3 tiers × 4 durations that stack, validated against the licence server with a network clock to resist local clock tampering
  • ▹Self-updating installs: change detection against a private repo, a shallow single-branch clone on a background thread with progress, packaged with PyInstaller bytecode encryption into a Windows installer
PythonPySide6scikit-learnLightGBMCatBoostMySQLPyInstaller

More work

FeteFlex

Microservices backend — 70% faster, 80% cheaper

private · client work

Lead Software Engineer · FeteFlex · Lagos · Jun 2024 — Nov 2025

  • ▹API response times −70% while holding 99.9% uptime
  • ▹Docker + Kubernetes migration cut AWS costs ~80% and deploy time ~40%
FastAPIgRPCDockerKubernetesAWSRedisPython

GreatSomme School Platform

Multi-tenant Django e-learning with performance-prediction ML

private · client work

Software Engineer · GreatSomme Inc · Lagos · Mar 2021 — Nov 2022

  • ▹Proxy personas + relational profiles → a tailored dashboard per role
  • ▹E-learning module with a 500+ book class library, full-text search, analytics across 20+ metrics
DjangoPythonPostgreSQLscikit-learnML