Projects

Ask 100 App

Developed a Flutter-based mobile app that uses AI to simulate answers from 100 diverse virtual respondents to user-submitted questions, offering quantitative and qualitative results.

I Integrated OpenAI's GPT API along with AnthropicAI's Claude API for natural language generation and Firebase for authentication, analytics, and secure data handling.

I designed a clean, responsive UI using Material 3, optimised for a range of screen sizes and pixel densities (a lot of trial and error), and published to the Google Play Store with closed testing, user feedback cycles, and full integration of ads and subscription tiers.

19th February 2025 - Present

Weather Application for Renewable Energy Companies

I built a ReactJS web application that helps renewable energy companies forecast predicted energy production from wind turbines and reduce costs by integrating real-time weather forecasts using the OpenWeather API.
A key feature is the smart maintenance suggestion tool, which uses wind speed predictions and turbine specifications to recommend the best days for maintenance to reduce potential energy losses. This project was part of the Graphical User Interfaces module.

4th February 2025 - 4th April 2025

FDM Expenses Application

As part of a university software engineering project, I was part of a 7-person Agile team to develop a full-stack PHP-based expense management system for FDM Group. The system allows employees to submit expense claims, upload evidence, and track approval status, while managers and finance teams can review, approve, and process reimbursements.

I developed core features including:

- User authentication and session management
- Relational database schema (MySQL)
- Managerial dashboards
- System log functionality

We worked closely with a real FDM employee acting as our client, delivering iterative MVPs based on their feedback.

1st February 2025 - 10th April 2025

Automatic Fish Feeder

I made an automatic fish feeder using a servo motor and a Raspberry Pi.
We were going on a two-week holiday soon, and I needed to find a way to feed my fish. Of course, I could have asked someone to take him, but I wanted a go at creating an automatic feeder.
The feeder uses Python to turn the servo, which turns a drum of fish food. Since it was running on the Pi, I used the crontab to schedule it once per day. The code logs each time it turns the servo into a text file, and emails me too.
My fish was, in fact, alive and well when I came back from holiday.

19th July 2024

ESP-32 Mailbox Sensor

I made a solar-powered mailbox sensor using an ESP-32, break beam sensors and a solar panel—the mailbox sensor emails you when mail has been detected.

When I first made this, I had a problem where the battery connected to the ESP-32 would run out even when connected to a solar panel, because batteries cannot charge and discharge simultaneously. That is when I learnt about load-sharing circuits.
On the second iteration, I bought a solar power management board, which contained an 18650 battery and allowed the battery to charge alongside the ESP-32 being powered. However, it still had an issue where the battery would run out of charge because the solar panel could not keep up with the mailbox sensor's power demands, so I had to optimise power.
By the final iteration, I had implemented deep-sleep cycles in the code, so that the sensor would use microwatts of power 99% of the time rather than the constant 400 mW it would previously constantly use. This proved to be the answer, and it now stays powered 24/7.

13th July 2024 - 16th February 2025

Mini Television

I created a small television using a Raspberry Pi Zero and a small 1.3" 240x240px screen. The screen used the Serial Peripheral interface, a standard protocol for serial communication, usually used for embedded systems.

Even though the SPI protocol is standard, the method of interpreting data relative to the system clock can be different. This variation occurs because SPI can operate in one of four modes, defined by the clock polarity (CPOL) and clock phase (CPHA) settings. Each combination of CPOL and CPHA determines how the data bits are clocked in and out of the devices.

CPOL: This determines the base value of the clock signal when the SPI bus is idle.
CPOL = 0: Clock is low when idle.
CPOL = 1: Clock is high when idle.
CPHA: This determines the edge of the clock signal on which the data is sampled.
CPHA = 0: Data is sampled on the first clock edge.
CPHA = 1: Data is sampled on the second clock edge.
Therefore, the four possible modes are:
Mode 0: CPOL = 0, CPHA = 0
Mode 1: CPOL = 0, CPHA = 1
Mode 2: CPOL = 1, CPHA = 0
Mode 3: CPOL = 1, CPHA = 1

Getting to this stage took a very long time, since figuring out why the screen would not work included so many variables, so a lot of testing was required. After I had learned at a lower level how the SPI bus worked, thanks to Ben Eater's video on the SPI interface here, I consulted some issues on the GitHub page of the SPI driver and found someone else with the same screen and the same problem I had, who had fixed their problem by changing the SPI mode.

Once the correct mode was identified, I configured the SPI drivers I had installed on the Raspberry Pi to match. The drivers were very well documented and you can find them here. The drivers mirrored the HDMI output, which meant I could move on to the next step.

I soldered the screen to the pins of the Raspberry Pi and fine-tuned some settings, including continuously recompiling the drivers with different settings using trial and error to determine the maximum speed I could set the system clock to for the highest refresh rate.
Now I could move on to the last part, which was finding software that would output a video, without needing X windows. Command line VLC was a great option for this since it could use hardware acceleration, support many video formats as well as use the frame buffer to output the video. After some setup with bashrc to open and start a video file on each launch of a terminal, it was complete.

12th March 2024 - 17th March 2024

Raspberry Pi Smart Mirror

I created a smart mirror using a Raspberry Pi and Docker technology. I utilised a frameless monitor and a two-way mirror. I containerised the application and hosted it on our NAS to overcome the Raspberry Pi Model B's hardware limitations. This transformed the mirror into a dynamic dashboard displayed as a local web page.

9th January 2022

Creation of this website

I made a simple website using HTML and CSS in Notepad after completing a course on Codecademy. I bought the domain mustaali.co.uk and updated it frequently, using it to display my interests and hobbies at the time. I also presented my website to my class in primary school. Now I have refactored it and used more complex web technologies like PHP and JavaScript for my portfolio. (Picture was taken 1 August 2016).

2nd December 2014 - Present