Student • Builder • Product-minded Engineer

I'm an electrical & computer engineering student who loves building things that move, sense, and actually solve problems — from medical devices and robotics to libraries and tools.

What I do Product Design • Systems
Experience Startup co-founder & student engineer

Current focus

Closing gaps in how we measure, control, and reason about real-world systems.

About

A bit more about me, my background, and what I'm passionate about.

Portrait of Mohammed Farah

I'm Mohammed, an electrical & computer engineering student who enjoys working close to the hardware: robots, sensors, and the software that ties everything together.

I've co-founded a startup working on a device to measure postpartum blood loss more accurately, and I've built robotics projects where I own both the technical implementation and the product thinking: what the system should actually do, and why it matters.

Right now, I'm focused on:

  • Designing HemoSave around real clinical gaps and workflows.
  • Building robots that feel purposeful, not just "demoable".
  • Developing a kinematics library that makes robotics math less painful to use.

Projects

Ongoing work that mixes robotics, product design, and systems thinking.

Kinematics Library Robotics Tools • WIP

HemoSave Device

About this project

Postpartum hemorrhage kills thousands of mothers every year, especially in low-resource settings. Existing approaches either rely on rough visual estimation, which can be wildly inaccurate, or on premium devices that are too expensive and slow to deploy at scale.

HemoSave is an ongoing project to close that gap: a device designed to measure blood loss quickly and affordably, targeting a correlation with premium devices while being feasible for hospitals that can't spend thousands per unit. Learn more at bainitech.com.

  • Co-founded the project and helped define the core product requirements.
  • Ran conversations with clinicians to understand workflow constraints and real failure modes.
  • Focused on making the system usable in noisy, resource-constrained environments.

Status: Active • Ongoing validation and iteration.

SantaBot

About this project

SantaBot in action SantaBot in action

SantaBot is a playful robotics project built around a simple idea: can we design a robot that feels delightful but still uses the same core systems we'd rely on for more serious work?

It combines motion, sensing, and behavior in a compact package — a way to practice robotics fundamentals while shipping something that actually makes people smile.

  • Implemented behaviors that react to the environment in real time.
  • Used this project as a sandbox to test control ideas and hardware integrations.

Status: Complete for now • Future upgrades possible.

Kinematics Library

About this project

A lot of robotics students run into the same wall: the math behind kinematics is already hard, and the libraries they use can feel opaque, under-documented, or too tied to specific hardware. This library is my attempt to fix that — starting from the math, not the framework.

It's built around a SerialChain abstraction that accepts any mix of revolute and prismatic joints, handles symbolic design parameters (link lengths, offsets) separately from runtime joint angles, and exposes both symbolic and high-speed numeric paths.

FK — Numeric
SE(3) chain via Rodrigues formula; batched NumPy einsum for N configurations simultaneously
FK — Symbolic
SymPy expressions for end-effector position and the full geometric Jacobian, cached after first build
Workspace Sampling
Vectorized batched FK over thousands of random configs; optional SciPy convex hull for a solid mesh
3D Visualizer
Interactive Plotly + Dash app with live sliders for joint angles and design parameters

How it works

A robot is described by listing joints with R() (revolute) or P() (prismatic) calls. Joint origins and axes can be symbolic expressions — so link lengths and offsets stay as parameters until you're ready to fix numbers. The chain pre-compiles home-pose transforms whenever the design changes, keeping per-query FK fast.

# Define a 3-DOF arm with symbolic link lengths
chain = SerialChain(
    joints=[
        R("z", at=(0, 0, 0), q="q1"),
        R("y", at=(L1, 0, 0), q="q2"),
        P("z", at=(L2, 0, 0), q="q3"),
    ],
    ee=("L3", 0, 0),
)

# Numeric FK — single config
pts = chain.fk_points({L1: 0.4, L2: 0.3, L3: 0.2},
                       {q1: 0.5, q2: -0.3, q3: 0.1})

# Symbolic Jacobian — computed once, then cached
J = chain.jacobian_symbolic()

What's built so far

  • SerialChain core — forward kinematics (single and batched), SE(3) transforms, home-frame compilation with design-change detection.
  • Symbolic layer — SymPy end-effector position expression and geometric Jacobian, useful for deriving closed-form IK or checking singularities.
  • Workspace visualizer — Dash app with real-time 3D rendering of joint cylinders, rotation-axis arrows, arc indicators, and a reachable workspace cloud (convex hull if SciPy is available, point cloud otherwise).
  • Modular geometry — separate helpers for cylinder meshes, orthonormal frame construction, and arrowhead lines keep the rendering layer decoupled from the math core.
Python NumPy SymPy Plotly / Dash SciPy SE(3) Math Jacobian Workspace Sampling
View on GitHub

Status: Active • Being expanded as I learn — IK and dynamics coming next.

Skills

The tools I reach for when turning ideas into working systems.

Languages

Python C/C++ Java JavaScript

Systems

ROS OpenCV Kinematics Embedded

Product & Tools

Product Design Rapid Prototyping Git & GitHub Docker

Contact

I'm always interested in projects that mix hardware, software, and real users.