Omar Fouda in a dark suit at an engineering workspace

Backend / ML Engineer

Omar Fouda

I build backend systems for search, matching, and secure AI workflows.

Recent Information Systems graduate and FlyRank ML intern (2026-present). I use FastAPI, vector search, and practical security controls to turn applied ML features into services teams can review and depend on.

17API endpoints across candidate, company, and admin workflows
~3.2 GBof documented search artifacts moved out of the container image
45test functions written across API, authorization, and resume helpers

Featured case study

Jobify: adding intelligence to a hiring platform

My part of the graduation project was the complete AI backend: a separate service for resume understanding, semantic job matching, and candidate/company chat. I also hardened its trust boundaries by fixing cross-company access, unsafe JWT defaults, resume URL request risks, and concurrent FAISS/SQLite writes.

Stack FastAPI, FAISS, Sentence Transformers, Gemini, SQL Server, SQLite, Docker
Architecture Separate FastAPI AI service

Resume parsing, embeddings, FAISS search, and Gemini chat stay outside the main CRUD platform.

Security Trust boundaries tightened

Authorization, JWT defaults, resume URL validation, and concurrent index writes were reviewed and hardened.

Outcome Evidence without overclaiming

17 endpoints, externalized artifacts, and 45 tests are presented with the system limits clearly named.

01 / The problem

A database that stored hiring data but could not understand it

The main Jobify application was a standard CRUD system on SQL Server. It could store applicants, resumes, and job postings, but it had no intelligence layer. Search was limited to exact filters such as title or location.

It could not understand resume content, compare skills with a job description, recommend relevant jobs, or support recommendation-aware chat. The challenge was to add those capabilities without forcing ML workloads into the existing application or putting the core platform at risk while the AI layer changed quickly.

02 / What I did and decided

A separate service for a different kind of workload

I built a FastAPI service connected to the hosted SQL Server data through each applicant's user_id. It retrieves the active resume, extracts PDF or DOCX text, creates embeddings, and searches job vectors with FAISS. SQLite maps FAISS results back to job records, while Gemini supports analysis and candidate/company chat.

Use FAISS for vectors

SQL Server handled relational data; FAISS handled nearest-neighbor search over embeddings.

Keep the Python runtime

Resume parsing, transformer models, and Gemini integration belonged in a Python service.

Sync instead of rebuilding

Admin endpoints update new jobs and resumes without a full re-ingest.

I moved jobs.db and jobs.index to Hugging Face and download them when the container starts. That kept the image smaller and allowed the artifacts to be updated independently from the application image.

Security review

Hardening the boundaries around real company and resume data

01

Cross-company access

Company endpoints accepted a company_id, but ownership checks depended on a configuration flag. I made the check run whenever a JWT subject is present and added cross-company regression coverage.

02

JWT configuration

The service silently used a public fallback secret and made authentication opt-in. Authentication now defaults on, and insecure or missing secrets stop the application at startup.

03

Resume URL handling

I added scheme, hostname, resolved-IP, and redirect-hop checks to block direct private-address and unchecked-redirect SSRF paths. The remaining DNS-rebinding risk is documented rather than hidden.

04

Concurrent index writes

FAISS and SQLite are shared mutable state. One threading.RLock now protects the complete update and autosave sequence so writers cannot interleave.

03 / What came of it

A working intelligence layer with evidence and boundaries

17 API endpoints

Health, candidate matching and chat, company AI workflows, and administrative synchronization.

Live embedding sync

New jobs and resumes become searchable after the main application saves them.

~3.2 GB externalized

The documented ~700 MB SQLite database and ~2.5 GB FAISS index now download at startup instead of shipping inside the image.

45 test functions written

Coverage exists for API behavior, company authorization, and resume helpers; this is not presented as a current pass count.

Honest limitation

This version is designed for one service replica because its FAISS index and SQLite metadata are local files. Multiple replicas need a shared vector store or centralized synchronization. The repository also has no labeled relevance set or benchmark, so I do not claim measured matching accuracy or latency.

Supporting work

More applied ML systems

Retrieval / multimodal ingestion

Educational RAG Backend

An Arabic-first FastAPI backend that turns documents, images, audio, and video into searchable educational material using OCR, transcription, metadata-aware retrieval, and configurable model providers.

FastAPI / ChromaDB / OCR / FFmpeg / OpenAI / Gemini

View source

Model serving / API contract

Diabetes Prediction Public API

A FastAPI wrapper around a trained scikit-learn model with an eight-field JSON contract, human-readable prediction output, model serialization, ngrok startup, and endpoint tests.

FastAPI / scikit-learn / REST / ngrok

View source

About

Recent graduate, current ML intern, practical builder

I am Omar Fouda, a backend/ML engineer and 2026 graduate of Menoufia University's Faculty of Computers and Information. I earned a B.Sc. in Computers and Information, specializing in Information Systems.

I build Python backends and applied ML features, with a focus on semantic search, recommendation systems, integrations, and the security work needed to make them dependable.

I am completing a 2026 ML internship with FlyRank, where I am strengthening my practice around data contracts, leakage checks, baselines, validation, and careful reporting.

Based inEgypt
EducationB.Sc. Computers and Information (Information Systems), Menoufia University
CurrentML internship with FlyRank (2026-present)
Interested inBackend engineering, applied ML, semantic search, RAG, and recommendation systems
LanguagesArabic (native), English (professional working proficiency)

Technical toolkit

Tools I use to build and ship

Grouped by the job they do, not as a keyword wall.

Backend

Python, FastAPI, REST APIs, WebSockets, Uvicorn, Docker

ML and retrieval

scikit-learn, PyTorch, TensorFlow/Keras, Sentence Transformers, FAISS, ChromaDB

Data and storage

Pandas, NumPy, SQL Server, PostgreSQL, MySQL, MongoDB, SQLite

Multimodal and LLM

OpenAI API, Gemini API, OpenCV, Tesseract OCR, FFmpeg, Whisper

Learning

Selected certifications

Computer VisionKaggle
Intro to Deep LearningKaggle
Full Stack Web Development using Python, 160 hoursITI
Responsible AI and Ethical ConsiderationsManara

Contact

Building a backend or ML team?

I am looking for backend and applied ML opportunities. Contact me and I will walk you through the architecture, tradeoffs, and security decisions behind Jobify.