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.
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.