Back to portfolio

Facial Emotion Detection App on Expo, with LoRA Training Pipelines

The AI track of a software developer role at a German firm, November 2024 to July 2026: a facial emotion detection app on Expo (React Native) with models trained in OpenCV, TensorFlow/Keras and scikit-learn, and LoRA fine-tuning pipelines served through FastAPI, Celery and Docker. Employment, not a marketplace contract.

Architecture: Expo app, emotion model, FastAPI serving, then LoRA training jobs on Celery, a FastAPI control plane and Docker
expo / react nativetensorflow / kerasopencvlora fine-tuningfastapi + celery

The Brief

Two tracks at a German software firm. The first was PHP (Yii2) development with SAP integration for the firm's enterprise clients. The second, described here, was AI: a mobile app that reads a person's facial expression and reports an emotion, and a training pipeline for LoRA adapters that the firm's other AI work depended on.

What I Built

  • The app, on Expo (React Native): camera capture, the request to the model, and the result rendered in the app on both iOS and Android from one codebase.
  • The emotion model: trained with OpenCV for face handling and TensorFlow/Keras and scikit-learn for the classifier, on the same line of work as my MPhil research into detecting depression and anxiety levels from facial expressions.
  • Serving: FastAPI endpoints the app calls, packaged in Docker.
  • LoRA training pipelines: fine-tuning runs queued as Celery tasks so an API request never waits on a GPU, a FastAPI control plane to start a run, check progress and fetch the finished adapter, and one set of Docker images for workers and API on the firm's own machines.
Nov 2024to July 2026, alongside the PHP and SAP track
2platforms from one Expo codebase, iOS and Android
3ML libraries in the model: OpenCV, TensorFlow/Keras, scikit-learn
Asynctraining as Celery jobs, never blocking a request

Why It Holds Up

The interesting engineering is not the classifier, it is the seam between a phone app and a model: keeping inference fast enough to feel live, keeping training off the request path, and giving the rest of the team a plain API for both. That is the same shape as most AI features clients ask for, which is why this role is the closest match when someone wants an LLM or vision feature inside an existing React Native app.

This was employment, not an Upwork contract, so there is no marketplace review to point to. The employer is named on my CV; the enterprise clients behind the PHP and SAP work are not.

Message me on the platform where you found this and I will answer there.