// Profile

Malik Adebiyi
Hello

I'm Malik

Software  |  DevSecOps Professional

Toronto, Canada

I build systems that keep running without me: cloud infrastructure, CI/CD and nightly scheduled jobs underneath, with the dashboards, iOS and web apps on top. When something breaks it fails loudly, rather than quietly reporting success.
Architecture · Event-sourced system

M-OPS (Personal Operating System)

17 domain modules run on one immutable ledger, and forecasting and timelines were added later as new projections rather than a re-architecture.

  • ProblemOperational state lived across terminals, log files and scheduled scripts. The obvious fix, a CRUD dashboard, has a known failure mode: every feature owns its own history, so state drifts and the past cannot be reconstructed.
  • ApproachAn event-sourced modular monolith. Commands validate invariants and append immutable events to one universal ledger, a transactional outbox publishes them, and CQRS projectors build the per-module views the UI reads. Snapshots keep replay fast past a million events.
  • OutcomeAdding a feature means adding a projection, not migrating a schema. Every architecture decision is recorded as an ADR, and a money mask plus a demo seeder let the system be shown end to end without exposing real data.
M-OPS write and read path. A user, agent, automation or integration
                                  issues a command; a command handler validates invariants and the
                                  expected sequence number, then appends to one append-only,
                                  hash-chained event ledger holding over a million events, with
                                  snapshots every 200 events. A transactional outbox commits in the
                                  same transaction and publishes to projectors, which idempotently
                                  build the read models for 17 domain modules. Failed projections
                                  route to a dead-letter queue, and agents read current state from a
                                  read model before acting.
Drawn from the project's own architecture specification and ADRs.
Event sourcingCQRS Node.jsSQLite Docker
ML · Automated pipeline

Soccer Predictions (SportsNator)

Publishes a calibrated forecast for four competitions before kickoff every day, unattended, and reports its own accuracy instead of a claimed win rate.

  • ProblemMatch-outcome forecasts are only useful if they are produced and published before kickoff, every day, without anyone touching them.
  • ApproachA probability model with per-competition calibration, kept only where it improved held-out Brier score. A scheduled CI workflow retrains it and republishes the static dashboard four times a day, with a concurrency guard so two runs can never race the deploy.
  • OutcomeCovers the Premier League, Serie A, Brasileirão and Copa Libertadores. Every prediction is written to a forward log before kickoff and graded afterwards, so the published record can be checked rather than taken on trust.
PythonGitHub Actions CloudflareStatic site
iOS · Shipped, rebuilding

Lottery Analysis Platform (LottoNator)

A shipped iOS app whose own interface tells users that no selection method beats a random draw.

  • ProblemLotto Max draw history is public but arrives as raw CSV, so players pick numbers with no view of what the data does and does not support.
  • ApproachSwiftUI and Swift Charts with zero third-party dependencies, over a FastAPI and SQLite backend that ingests official WCLC results and cross-validates its sources before storing a draw.
  • OutcomeShipped to the App Store under a developer account that has since lapsed, so the listing is no longer live. The web build serves the same data today, and the charts are built to show what the history does not support as clearly as what it does.
SwiftSwiftUI FastAPISQLite
DevOps · Infrastructure

Backup, CI/CD & Todo Automation

A silent success had already cost one repository its backup, so the job was rewritten to hard-fail on a missing repo rather than report green.

  • ProblemWork spread across several repositories had no reliable backup, and the todos that governed it never reached a calendar.
  • ApproachNightly launchd jobs covering the whole tree and each standalone repository, committing per project rather than sweeping the index. A Python pipeline compiles every TODO.md into Apple Calendar, Apple Reminders and a tracker document, and scheduled GitHub Actions plus whitelist-staged deploy scripts ship the sites themselves.
  • OutcomeA missing repository is now a loud failure instead of a quiet one. Projects marked private publish under a neutral alias, so a calendar that syncs to a phone never carries a project name it should not.
BashPython launchdGit GitHub ActionsCI/CD
  • Associate Software EngineerBig Five Canadian bank

DevOps

  • CI/CD
  • Docker
  • GitHub Actions
  • Jenkins
  • Terraform
  • launchd
  • Git

Security

  • DevSecOps
  • Vulnerability management
  • Qualys VMDR
  • Policy compliance
  • Encryption at rest
  • Secrets handling

Cloud

  • EC2
  • S3
  • IAM
  • VPC
  • Lambda
  • CloudFormation
  • RDS
  • Route 53
  • Entra ID

Languages

  • Python
  • Swift
  • TypeScript
  • JavaScript
  • SQL
  • Bash
  • PowerShell

Application

  • SwiftUI
  • Node.js
  • React
  • REST API
  • MongoDB
  • HTML / CSS
  • AWS Certified Cloud Practitioner
  • AWS Certified AI Practitioner
  • CompTIA Network+
  • Qualys VMDR Certified Specialist
  • Qualys Policy Compliance
  • AI Fluency Framework & Foundations (Anthropic)
  • AWS re/Start Graduate

Let's build something.

DevOps, cloud, AI security and platform engineering. Toronto or remote.