Projects

UWash

CAPT's laundry bot only knew a machine was running if someone told it. We put vibration sensors on the machines so they report it themselves, and made the top 8 at the NUS Student Life Hackathon 2026.

UWash dashboard analytics: an hourly usage chart with morning and evening peaks, and tiles for idle time, unregistered use, shared loads and water saved
The dashboard's analytics view, with demo data.

Why we built it

CAPT already had a Telegram laundry bot, built by earlier students. You picked a machine and started a timer, and the bot reminded you when your wash was done. But it only knew what people told it, so if someone didn't start a timer, the machine looked free when it wasn't. We wanted the machines to report their own status.

What we built

From the machine

  1. ESP32 + vibration sensor
  2. HTTPS with an API key
  3. Flask API
  4. SQLite

To residents

  1. SQLite
  2. React dashboard
  1. SQLite
  2. Telegram bot: status, timers, "your laundry's done"

A small ESP32 board with an SW-420 vibration sensor sits on each machine and sends its state to the backend. The React dashboard shows which machines are free and when the laundry room is busiest. The Telegram bot tells you what's free, runs timers and messages you when your cycle ends. It works for several residences, each with its own machines.

I worked on the backend and the Telegram bot: the Flask API that the sensors and dashboard talk to, the SQLite database, and the bot with its notifications and digital queue. It's written in Python with python-telegram-bot, hosted on Railway, with the dashboard on Vercel.

Decisions

Sensing vibration

A vibration sensor can tell a cycle is running without touching the machine's electronics, so it can be fitted and removed without opening anything up.

Building on the existing bot

We forked the laundry bot that already existed and added the sensor side to it, instead of starting over and asking people to learn a new tool. The original is by jloh02 and zibo.

Anyone can read, only sensors can write

The dashboard and bot can read machine status freely. The endpoint that changes a machine's status needs an API key that only the sensors have.

Results

UWash made the top 8 at the NUS Student Life Hackathon 2026. There's a demo video.

What I learned

The biggest improvement was removing the need for anyone to report anything. Starting from a bot that already worked meant our hackathon time went into the sensors, which was the new part.