Mohamed AjabSoftware / security / dataGet in touch
SOFTWARE / SECURITY / DATA

Mohamed Ajab.
Built to be explored.

34 merged contributions ↗

Open to graduate & junior roles.

CVSay hello
Pick a station. Follow a connection.28 projects · 6 routes

34 merged open-source contributions Code, tests & documentation · checked 27 October 2026
01 / SELECTED BUILDS

A few good starting points.

Personal & academic work. Public code.

01
Full-stack / publishing workflows

Pressroom

Live demo + public source

A team publishing app. Draft, review and publish—without exposing unfinished edits.

Live demo · PostgreSQL concurrency tests

Temporary demo workspace · may take a moment to wake.

DraftReviewPublish
Build notes & tests

What I built

  • Built workspace-separated author and editor workflows, with revision history and scheduled publishing.
  • Kept the public page on its approved revision while new edits remain private.
  • Handled competing edits with version checks and database transactions.

Python · Django · Django REST Framework · PostgreSQL · Docker

Evidence & limits

The repository records 76 PostgreSQL tests, concurrency checks and browser verification. A visitor-isolated demo runs the actual workflow.

Server-rendered Django keeps the application straightforward. SQLite is useful locally, but PostgreSQL is needed to exercise the row-locking and concurrency behaviour.

Read verification notes
02
Java backend / transaction correctness

ClearLedger

Runnable locally

A Java payment backend that handles retries, account balances and access controls.

Authenticated API · database integration tests

RequestJournalEvent
Build notes & tests

What I built

  • Made retries return the original payment, while conflicting requests are rejected.
  • Used verified identity tokens and tenant-scoped permissions to separate organisations.
  • Built a React operations interface with sign-in, payment creation and journal exports.

Java 21 · Spring Boot 4 · PostgreSQL 17 · Redpanda · React 19

Evidence & limits

Database integration tests and architecture checks exercise the payment flow. The repository explains authentication, transaction boundaries and remaining risks.

An outbox keeps payment changes and pending events in one transaction. Publishing is at least once, so downstream consumers still need to handle duplicates.

Inspect the architecture
03
Python backend / reliable delivery

RelayForge

Runnable locally

A webhook service that retries failed deliveries and makes stuck messages easy to inspect.

Signed requests · competing-worker tests

QueueDeliverRetry
Build notes & tests

What I built

  • Persisted events before workers attempt delivery.
  • Added signed requests, retry delays and dead-letter inspection.
  • Used database leases so competing workers can coordinate.

Python · FastAPI · SQLAlchemy · PostgreSQL · HMAC

Evidence & limits

PostgreSQL concurrency checks exercise competing workers. Tests and source make the delivery states and recovery behaviour inspectable.

At-least-once delivery favours eventual delivery over a promise of no duplicates. Stronger secret storage and DNS pinning remain production-hardening work.

Inspect source and tests
04
Data engineering / repeatable imports

ReliableETL

Public source

A Python data pipeline that tracks imports and explains rejected rows.

File tracking · rejected-row reports

ImportCheckLoad
Build notes & tests

What I built

  • Tracked file hashes and business identifiers to detect repeat input.
  • Separated invalid records with reasons instead of silently discarding them.
  • Recorded run status and counts alongside committed data.

Python · SQLite · SQL · pytest

Evidence & limits

The project exposes ingestion logic, rejection evidence and tests in a compact Python and SQLite codebase.

The current file-hash constraint also blocks an unchanged failed file from being retried. Automated recovery is a next step, not a completed feature.

Read pipeline source
05
SQL / analytical modelling

Customer360 Retail Warehouse

Public source

A retail data model that turns orders and returns into customer insights.

SQL models · documented business measures

OrdersModelInsights
Build notes & tests

What I built

  • Modelled order-line detail rather than treating each order as one product.
  • Separated transformation and SQL views from presentation.
  • Documented measures and a dashboard wireframe for analysing customer behaviour.

Python · SQLite · SQL · Power BI modelling

Evidence & limits

The repository includes the Python/SQLite pipeline, SQL models and DAX definitions. The dashboard is a design artifact, not a claimed live Power BI deployment.

The pipeline rebuilds its data rather than incrementally updating it. Inner joins can remove unmatched records, which matters when interpreting totals.

Read the data model
06
Applied ML / usable review tools

Volleyball Analyser

Active Development
Local application

A local video tool for tracking players, reviewing events and exporting results.

Human review · processing recovery

VideoTrackReview
Build notes & tests

What I built

  • Built a FastAPI and JavaScript interface with progress, cancellation and restart recovery.
  • Added manual identity corrections and review before statistics are counted.
  • Kept the last good outputs when a later processing job fails.

Python · FastAPI · JavaScript · OpenCV · YOLO · ONNX Runtime

Evidence & limits

The repository records exploratory clip checks and a validation workflow. Player labels are manual; the ball detector uses a credited third-party pretrained model.

One worker avoids sharing model state across sessions, at the cost of throughput. The application is local-only and does not claim validated full-match or physical 3D accuracy.

Read validation and limits
THE PROJECT INDEX / 28

Find your thread.

01

AgentGuard Lab

Can an email or document trick an AI assistant into doing the wrong thing?

security
02

ModelExtract MiniLab

How much of a model can you copy just by asking it questions?

security
03

RAGTrust MiniBench

Can a search system tell useful documents from planted ones?

security
04

PhishGuard

Spot suspicious messages—and inspect where the model gets it wrong.

vision
05

Volleyball Analyser

Turn volleyball footage into a reviewable workspace, not just a model output.

vision
06

RunLedger

Keep experiment records that reveal later edits.

tools
07

SplitCheck

Check whether training and test data accidentally share the same examples.

tools
08

Service SLO Lab

Find out whether a service is fast and reliable enough.

tools
09

Tool Policy Playground

Decide what an AI assistant is allowed to do before it acts.

tools
10

Multi-Turn LLM Safety Benchmark

How do AI replies change over a six-turn sensitive conversation?

security
11

Customer360 Retail Warehouse

Bring retail data together so business questions are easier to answer.

data
12

RetailPulse Azure Pipeline

Clean messy retail files before they reach a dashboard.

data
13

ReliableETL

Import transaction files without counting the same batch twice.

data
14

Transaction Ledger API

Move money between two accounts without half-finishing a transfer.

systems
15

FinTech Integration Monitor

See when a connected service is slow or unavailable.

systems
16

CourtSight Tennis Analyser

Explore what a tennis video-analysis app could feel like.

vision
17

ClearLedger

Follow a payment from a signed-in operator to a balanced journal and an event.

systems
18

RelayForge

Keep trying important notifications when another service is down.

systems
19

LLM Safety Protocol V3

Plan a broader AI-safety study before collecting its results.

security
20

FailureBench

Can a prediction stay reliable when some of its inputs disappear?

research
21

TelemetryUQ

Can you predict an AI agent’s failure when its confidence data goes missing?

research
22

Ajarvo Hire Audit

Check whether hire invoices match the agreed rates and dates.

systems
23

Medical VQA Calibration

Does a medical-image AI know when its answer is likely to be wrong?

research
24

Missing-Data Medical AI

Do medical-image predictions still work when patient information is missing?

research
25

Pressroom

Write, review and publish content without letting unfinished edits leak onto the live site.

systems
26

Backstop

A JSON cache that shares one upstream fetch across concurrent requests and serves recent saved content when the origin is slow or down.

systems
27

Driftweir

An Android and iPhone focus app that filters selected social feeds while preserving useful features.

systems
28

PRLemur

A GitHub pull-request reviewer that checks evidence before publishing findings, with review controls and usage limits.

systems
28 projects
OPEN SOURCE / WORKING WITH OTHER TEAMS

My work in
other people’s code.

34Merged22Open9Projects

Fixing bugs, writing regression tests and responding to maintainer review.

urllib3/urllib3 · MERGED

Trace and fix a gzip compatibility regression

Fixed a gzip error resurfacing after it was deliberately ignored, with a regression test.

Change & review #5271 ↗
psf/black · MERGED

Fix formatting and cover the edge cases

Fixed long return-type annotation formatting and added edge cases requested in review.

Change & review #5427 ↗
getsotto/sotto · MERGED

Make failed billing quotes recoverable

Added billing-quote retries and tests for failed or outdated responses.

Change & review #553 ↗
THE FULL RECORD

Across 9 codebases.

Checked 27 October 2026

59 contributions

fsspec/filesystem_specMerged

Link the current CI setup environments

PR #2388View change
getsotto/sottoMerged

Explain secret removal and syncing across devices

PR #619View change
getsotto/sottoMerged

Explain local locking and CLI logout

PR #608View change
getsotto/sottoMerged

Explain secret-input modes and newlines

PR #607View change
urllib3/urllib3Merged

Set the JSON content type in the orjson example

PR #5331View change
psf/blackMerged

Explain file-type selection for standard input

PR #5527View change
fsspec/filesystem_specMerged

Make the quick-start file examples runnable

PR #2337View change
getsotto/sottoMerged

Test OAuth destinations and temporary login cleanup

PR #604View change
fsspec/filesystem_specMerged

Keep block-cache fetches within the file size

PR #2319View change
fsspec/filesystem_specMerged

Clarify environment configuration overrides

PR #2324View change
fsspec/filesystem_specMerged

Update contributor formatting commands to Ruff

PR #2325View change
getsotto/sottoMerged

Explain restoring an earlier secret version

PR #595View change
psf/blackMerged

Render the no-cache example as a command

PR #5552View change
getsotto/sottoMerged

Test recovery after failed sponsored checkout

PR #594View change
getsotto/sottoMerged

Test how shared-secret opening errors are shown

PR #559View change
getsotto/sottoMerged

Explain environment switching and copy previews

PR #558View change
getsotto/sottoMerged

Test recovery of saved payment attempts

PR #557View change
getsotto/sottoMerged

Test failed encrypted exports and fresh retry

PR #556View change
getsotto/sottoMerged

Keep account recovery available when notices fail

PR #554View change
getsotto/sottoMerged

Retry failed billing quotes without reloading

PR #553View change
getsotto/sottoMerged

Show logout failures and allow another attempt

PR #552View change
getsotto/sottoMerged

Explain sharing limits without losing the opened secret

PR #526View change
getsotto/sottoMerged

Test invitations when optional key sharing fails

PR #525View change
getsotto/sottoMerged

Test unavailable shares and explicit retry

PR #524View change
getsotto/sottoMerged

Explain interactive sharing limits

PR #510View change
getsotto/sottoMerged

Announce secret-search results to screen readers

PR #509View change
getsotto/sottoMerged

Test vault-unlock failures and successful retry

PR #508View change
getsotto/sottoMerged

Test setup checks and recovery after failure

PR #507View change
OpenMDAO/AviaryMerged

Test ordering of dynamic-variable metadata

PR #1320View change
OpenMDAO/AviaryMerged

Remove unused aircraft-design metadata and helpers

PR #1308View change
python-poetry/poetryMerged

Clarify release-age exclusion configuration

PR #11087View change
psf/blackMerged

Fix long quoted return-type annotation formatting

PR #5427View change
urllib3/urllib3Merged

Prevent a suppressed gzip error from resurfacing

PR #5271View change
Hebbian-Robotics/hflowMerged

Let applications control the library's logging

PR #590View change
getsotto/sottoOpen

Test billing-portal failures and retries

PR #605View change
psf/blackOpen

Explain adopting Black in an existing codebase

PR #5472View change
urllib3/urllib3Open

Show how to limit streaming download size

PR #5339View change
getsotto/sottoOpen

Keep team controls usable when seat discovery fails

PR #606View change
fsspec/filesystem_specOpen

Close the owning file wrapper in manual examples

PR #2338View change
fsspec/filesystem_specOpen

Skip excluded ancestor folders in shallow file searches

PR #2318View change
reframe-oss/reframeOpen

Remove unused theme colour declarations

PR #1812View change
python-poetry/poetryOpen

Select package sources by platform

PR #11144View change
python-poetry/poetryOpen

Explain certificate settings for system Git

PR #11145View change
python-poetry/poetryOpen

Distinguish download and publishing URLs

PR #11143View change
python-poetry/poetryOpen

Explain captured build-script output

PR #11142View change
urllib3/urllib3Open

Test cache operation sequences and cleanup locking

PR #5312View change
python-poetry/poetryOpen

Clarify what clearing a named cache removes

PR #11137View change
sktime/sktimeOpen

Simplify forecast time points in a tutorial

PR #11248View change
python-poetry/poetryOpen

Add a quickstart for joining an existing project

PR #11088View change
python-poetry/poetryOpen

Clarify alternative dependency constraints

PR #11123View change
reframe-oss/reframeOpen

Correct the Node.js setup requirement

PR #1807View change
reframe-oss/reframeOpen

Explain local Storybook component development

PR #1806View change
sktime/sktimeOpen

Speed up GMRSE per-index error calculations

PR #11398View change
sktime/sktimeOpen

Document the Dask time-series data format

PR #11397View change
python-poetry/poetryOpen

Explain editable dependencies installed from Git

PR #11124View change
sktime/sktimeOpen

Handle custom markers for missing data

PR #11308View change
fsspec/filesystem_specClosed · not merged

Explain client-side transfers when copying WebHDFS files

PR #2381View change
python-poetry/poetryClosed · not merged

Propose a guide to dependency-marker shorthand

PR #11126View change
python-poetry/poetryClosed · not merged

Propose a fix for running installed file scripts

PR #11108View change

Merged changes were accepted upstream. Open proposals are still under review; closed proposals are not counted as merged.

LET’S TALK

Have a role in mind?