Styl-AI Closet
Smart wardrobe app built with a Flutter mobile client and backed by a FastAPI service.
Sole software engineer (2-person capstone; partner led physical hardware)
- Flutter
- FastAPI
- WebSockets
- MySQL
- RBAC
- REST API
View detailsHide details
In Styl-AI-Closet, I was the sole software engineer that built the app that would connect to the hardware (ESP32). I built the Flutter frontend and a FastAPI backend with 30+ endpoints backed by MySQL, plus a WebSocket layer for real-time state, RBAC for user/admin permissions, and the ESP32 integration that drives the physical rail. The name reflects the product concept; the current build focuses on the real-time control and delivery system rather than an ML component. The app has a login system that would allow a user to sign up to their closet. This app allows them to scan pieces of clothing that they had and display them in the digital closet inside the app. The user also had the option to add clothing to the physical closet and display it in the app and this would let the hardware know that a spot in the closet is taken by said garment. If the user decided to take out a piece of clothing the rail would rotate and display the selected garment in front of the user so he could take it. The app would then notify the user that the delivery has been made and that it was taken out of the designated slot.
A major problem encountered was safeguarding the hardware system from overloading with commands or stopping if 2 users shared the same physical closet. I didn't want to let both commands through, since the physical rail can only be in one place, and I couldn't have each app track its own state, because then the two users' mobile apps would disagree with the current state of the rail and closet. To counter this I used a WebSocket layer so the server held the single source of truth of the closet's state, when one user took control and sent a command, the other user was locked and put in queue to send a new command to the closet. This allowed for real-time updates to each user of the closet. This resulted in being able to have multiple users that all saw the updates and accurate state of the closet without sending contradicting commands.
- Sole software engineer on the project: Flutter client, 30+ endpoint FastAPI backend, MySQL schema, and the ESP32 integration layer
- Solved a real concurrency problem in hardware: server-authoritative state over WebSockets with command locking and queueing, so two users can't send the physical rail contradicting commands
- Designed RBAC user/admin permissions and treated every feature's auth surface as part of the design, not a later pass
