ML Engineer

Mitchell Sparrow Portfolio

Machine Learning Engineer at Tensora

Clean, headless-CMS-powered ML portfolio that proves you can build production-quality web infrastructure AND train models — a rare combination that most ML engineers' GitHub-readme portfolios completely miss.

Machine LearningNext.jsComputer VisionLLMsTypeScript

Location

Glasgow, United Kingdom

Companies

TensoraKey Three DataCo-Pilot Consulting

Credentials

  • Masters in Computer Science with Artificial Intelligence, University of Nottingham
  • Undergraduate degree in Mechatronic Engineering, South Africa

Skills

Machine LearningNext.jsComputer VisionLLMsTypeScript

What makes it work

A breakdown of the choices that make this portfolio stand out.

1

Headless CMS for live updates without code rebuilds

Mitchell uses Sanity as a backend so he can add new projects, update descriptions, and publish case studies without touching the codebase. This is an engineering maturity signal — it shows awareness of content lifecycle, not just the ability to hard-code data into a file.

2

Modern frontend stack paired with ML depth

Next.js, TypeScript, Framer Motion, and Tailwind produce a portfolio that looks like it was made by a strong frontend engineer — not the typical sparse GitHub Pages site most ML candidates submit. The contrast makes the profile memorable and signals versatility across the full engineering stack.

3

Range of ML domains with honest depth signals

The projects section covers a robot-arm computer-vision dissertation, the portfolio site itself, an F1 Fantasy tool and a Flutter loyalty app. The experience section adds Tensora work on 3D, computer-vision and LLM fine-tuning and on distributed multi-GPU training in the cloud. The F1 Fantasy Analysis tool is particularly effective: it is a real product with an actual user goal, not a Kaggle competition replay.

4

Credential + project combination

A Masters in Computer Science with AI from the University of Nottingham provides institutional credibility, but the project portfolio is what converts it. The combination — formal training plus shipped work — is the strongest possible signal for ML engineer hiring.

5

Playful personal branding with a fully working contact flow

The hero headline is styled as a Python filename — "I_like_to_code.py" — set against a plain circular portrait and a thin animated ring, a small but deliberate personality touch on an otherwise minimal, teal-accented layout. The contact section backs it up with a real name, phone number, email, Glasgow, UK location, and a working name/email/subject/message form rather than just a mailto link.

What ML Engineers can take from this

Specific, actionable tips to apply to your own portfolio — no generic advice.

  • ML engineers who can build a professional web frontend stand out sharply. Most ML portfolios are Jupyter notebooks in a GitHub repo — a deployed, styled web app immediately separates you from the candidate pool.

  • Use a headless CMS (Sanity, Contentful) to power your portfolio projects section. It signals engineering discipline and means you can add projects without a new deployment cycle.

  • For each ML project, answer three questions: what was the goal, what was the technical approach, and what can someone do with the result? A working demo beats a model accuracy number every time.

  • Specialise in at least one domain (computer vision, NLP, recommendation systems) while showing breadth. Generalist ML resumes get lost; domain specialists with cross-area experience get hired.

  • Show distributed training or cloud deployment experience — even small-scale. Running a model on a single GPU is table stakes in 2025; demonstrating awareness of scaling infrastructure is a meaningful differentiator.

Projects

A robot-arm computer-vision dissertation on one side, an F1 Fantasy team picker built because he kept losing his league on the other. Mitchell Sparrow's projects run from research to small shipped tools, including a Flutter loyalty app for a Cape Town café.

ResearchadvancedMSc dissertation (University of Nottingham)

Masters Dissertation: Robot-Arm ML for Object Physical Properties

PythonTensorFlowLSTMSemantic segmentationTransfer learningUniversal Robots

"Non-Invasive Determination of the physical properties of objects using machine learned interpolation of the observation of robot arm manipulations." The project combines machine learning, computer vision and a robot arm to infer an object's physical properties from watching it being manipulated. The repo shows a semantic segmentation model (predictions shown alongside ground-truth masks) and a stacked LSTM evaluated on precision, recall, F1 and accuracy.

Vision plus sequence modelling on real robot data is a harder problem than a curated benchmark. It pairs directly with the robotics side of his mechatronics degree.

  • Segmentation results shown next to ground-truth masks, not just a score

  • Stacked LSTM reported on precision, recall and F1, not only accuracy

  • Bridges robotics hardware (Universal Robots) and ML

Web Appbeginner1–3 weeks (estimate)

F1 Fantasy Team Calculator

PythonFlaskHTMLCSSHeroku

A tool that computes the statistically best theoretical F1 Fantasy team for the next grand prix. It started as a personal Python script ("To put it nicely I was quite horrible" at the league) and became a Flask web app. It can run as a web app or as a raw script with a configurable combined cost limit, and it accounts for streaks and recommends a turbo driver.

A small tool built to solve its author's own problem, then packaged so others can use it. That product instinct is easy to discuss in an interview and rare in ML portfolios.

  • Budget-constrained team selection (COMBINED_COST_LIMIT), with streaks and turbo-driver pick

  • Runs either as a Flask web app or as a plain Python script

  • Honest origin story on the site: built because he was losing his league

Web Appintermediate2–4 weeks (estimate)

Portfolio Website (Next.js + Sanity)

Next.jsTypeScriptReactTailwind CSSFramer MotionSanity

The portfolio site itself, built to learn Next.js, TypeScript, Framer Motion and Tailwind. It was originally inspired by a Sonny Sangha YouTube video, and Mitchell says it has since "morphed into something I am quite proud of". Sanity serves as the backend, so content updates without rebuilding the app.

An ML engineer shipping a headless-CMS frontend in a modern TypeScript stack shows range beyond notebooks, and the repo is there to inspect.

  • Content lives in Sanity, so no redeploy is needed to add a project

  • Credits the tutorial it grew from instead of hiding it

  • Typed-text hero styled like a Python filename

Web Appintermediate3–6 weeks (estimate)

Lucky Dice Coffee Loyalty App

FlutterDart

A cross-platform Flutter app built for the owner of the Lucky Dice Coffee Company in Cape Town. It tracks a customer's total and consecutive coffee purchases, rewarding streaks — in effect adding a time constraint to a traditional loyalty card.

A real client, a clear business mechanic (consecutive-purchase rewards), and a cross-platform build. It shows he can scope a product for someone else.

  • Built for a real café owner, not a tutorial brief

  • Loyalty twist: rewards consecutive visits, not just totals

  • Cross-platform from one Flutter codebase

Ready to build your portfolio?

Follow the ML Engineer roadmap — skills, projects, and timeline to get hired.

ML Engineer Roadmap