Projects

Three projects I designed and built, covering game systems, embedded hardware and a full-stack IoT system.

Taxi Driver

A PSX-styled night-time taxi game in Unity 6 and C#, with a real drivetrain model, conversation-based gameplay and some funky GPS rerouting.

A green Lada parked under a street lamp, with the title taxi driver above it

The problem

I wanted a driving game where the car feels like a real car and the city feels like a real place, without building either by hand.

What I built

  • A vehicle controller that models a real drivetrain, using the manufacturer's gear ratios and torque curve.
  • A GPS that plans the route with A* over the road network and recalculates it live when the player leaves it.
  • A city built from OpenStreetMap data in Blender, with a Python script that assigns materials by map tag.
  • Unity Editor tools that automate bulk changes across the road network.

Status

In active development. Code available on request.

The GPS on the dashboard recalculating the route after a wrong turn.
Picking up the passenger.
Choosing what to say while driving.
Driving through the city.
Drop-off, and a cigarette as a tip.

Music-reactive LED orb

An ESP32 fitted inside a pondering orb that follows the music on its own, with a phone app for changing its settings.

Press play with sound on: colour follows the notes being played, brightness follows the volume, and the lights pulse on the kick drum.

The problem

My original orb was just a piece of ambient lighting, and I felt it had a lot of wasted potential. So I turned it into something that follows the music: it changes colour with the intensity, dims or brightens with the bass, and adds effects for claps, hi-hats, drops and special segments.

What I built

  • Firmware that runs an FFT on audio from an INMP441 I2S microphone and groups the energy into the 12 musical notes to choose the colour.
  • Brightness that follows the volume, and kick-drum detection with a low-pass filter that pulses the lights.
  • A web app that connects over Bluetooth to change settings, calibrate and save presets to the ESP32.
  • The original infrared remote's buttons remapped to switch between presets.

Hardware

ESP32, INMP441 microphone, WS2812B addressable LEDs, battery power, all fitted inside the original shell.

The control app

The orb reacts to music by itself. This web app connects to it over Bluetooth from a phone to change its settings, calibrate it and save presets.

Facial recognition access control

My final-year project: a door access system that checks a face and a one-time passcode, with an app for administrators.

System diagram: a Raspberry Pi and a React Native mobile app both connect to a Flask backend on Amazon EC2, the Pi over MQTT and the app over a REST API
How the door, the server and the admin app connect.

The problem

A single factor, like a key card or a face alone, can be lost or faked. I built a system that needs both a recognised face and a passcode sent to the user's phone.

What I built

  • Face recognition on a Raspberry Pi 4 with OpenCV and dlib, plus my own liveness check that rejects photos and phone screens using texture entropy (LBP), edge gradients and screen reflections.
  • A Flask REST API and Mosquitto MQTT broker on AWS EC2, behind Nginx with Let's Encrypt HTTPS. The door talks to the server over MQTT with mutual TLS.
  • One-time passcodes through Twilio Verify, and JWT-protected endpoints for admins.
  • An Expo React Native app for admins to manage users, set the door's opening hours, read the access logs and unlock the door remotely.

Results

  • 100% identification accuracy in testing
  • 80% liveness detection accuracy
  • About 5 seconds from approach to access
  • Final grade: 86