StayUpToDo-Laundry 🚀


Inspiration

Living in Singapore University of Technology and Design (SUTD) hostels, we experienced a small but persistent frustration: walking all the way to the laundry room only to find every washer occupied.

While residents frequently posted updates in the “SUTD Family” Telegram group, those messages were buried in an active chat stream. The information existed — but it was unstructured, fleeting, and hard to act on.

We asked ourselves:

How might we eliminate uncertainty and inefficiency in shared laundry spaces through automated monitoring and smart visualisation?

StayUpToDo-Laundry was born from that question — a system that converts informal human updates into structured, actionable machine status insights.


What it does

StayUpToDo-Laundry is a comprehensive laundry management portal for Blocks 55, 57, and 59 that:

  • 🤖 Automatically monitors Telegram group messages 24/7
  • 🧠 Uses AI to extract machine numbers, block numbers, and statuses from natural language
  • 📊 Displays real-time availability in a Flutter web dashboard
  • ⚡ Eliminates wasted trips and reduces uncertainty

If someone types:

“Block 55 washer 4 is done!”

The system automatically updates 55W4 → Available.

Behind the scenes, we convert unstructured text into structured state updates:

[ \text{Message} \xrightarrow{\text{LLM Parsing}} (\text{Block}, \text{Machine}, \text{Status}) \xrightarrow{\text{API}} \text{Dashboard Update} ]

The result: real-time visibility without requiring new user behavior.


How we built it

We designed a modular, event-driven architecture:

1️⃣ Telegram Monitoring Layer

  • Used Telethon to monitor group messages asynchronously
  • Messages are sent to the OpenAI API (GPT-5) for structured parsing
  • AI extracts:

    • Block number
    • Machine type (Washer/Dryer)
    • Machine ID
    • Status

2️⃣ Backend API

  • Built with Python + Flask-RESTful
  • REST endpoints manage machine states
  • Status history tracking ensures traceability
  • Designed with a clear migration path from in-memory storage → database

3️⃣ Automation Layer

  • Integrated n8n for:

    • Telegram bot commands
    • Google Sheets logging
    • Webhook routing
  • Exposed backend using ngrok

4️⃣ Frontend Dashboard

  • Built with Flutter Web
  • Color-coded status indicators
  • Real-time polling from Flask API
  • Responsive for mobile + desktop

5️⃣ Intelligence Layer

We framed parsing as a probabilistic extraction problem:

[ P(\text{Structured Output} \mid \text{Message}) ]

Instead of writing brittle regex rules, we leveraged LLM reasoning to handle linguistic variations like:

  • “55W4 done”
  • “Dryer 2 @ 57 not working”
  • “Paid for washer 3 block 59”

This dramatically increased robustness.


Challenges we ran into

🧩 1. Parsing Ambiguous Natural Language

Telegram messages are messy:

  • Typos
  • Missing block numbers
  • Slang
  • Mixed updates in one sentence

We had to refine prompts carefully to reduce hallucinations and enforce structured JSON outputs.


🔁 2. Synchronization & State Conflicts

Multiple users could update the same machine simultaneously.

We needed to design status transitions carefully:

[ \text{Available} \rightarrow \text{PaidFor} \rightarrow \text{InUse} \rightarrow \text{PendingUnload} ]

Preventing invalid transitions required backend validation logic.


🌐 3. Deployment Complexity

We were juggling:

  • Flask server
  • Telegram monitor
  • n8n workflow
  • ngrok tunnel
  • Flutter frontend

Ensuring all services were live simultaneously required careful orchestration.


🧠 4. Avoiding Overengineering

It was tempting to add:

  • ML-based time prediction
  • Occupancy forecasting
  • Push notifications

But we focused on solving the core pain point first: visibility.


Accomplishments that we're proud of

✨ Built a fully working end-to-end AI-powered system ✨ Successfully converted social chat into structured infrastructure data ✨ Created a clean, intuitive dashboard residents can use immediately ✨ Designed scalable architecture ready for database + cloud deployment ✨ Reduced friction without requiring users to change their habits

Most importantly, we turned an everyday inconvenience into a real systems design challenge — and solved it.


What we learned

🧠 1. AI Is Powerful for Interface Problems

The real value wasn’t prediction — it was translation. LLMs shine at bridging human language and structured systems.


🏗️ 2. Systems Thinking Matters

We learned how to:

  • Design APIs for real-time updates
  • Manage asynchronous workflows
  • Handle edge cases in distributed systems

🎯 3. Start With Behavior, Not Features

Instead of building a new app users had to adopt, we piggybacked on existing behavior (Telegram updates).

This reduced adoption friction to nearly zero.


📉 4. Small Problems Can Have Big UX Impact

Laundry seems trivial — but eliminating even 10 minutes of wasted time per resident per week compounds significantly:

[ \text{Time Saved} = N \times 10 \text{ minutes/week} ]

At hostel scale, that’s hours of reclaimed productivity.


What's next for StayUpToDo-Laundry

🚀 Database Migration Move from in-memory storage → PostgreSQL for persistence.

📈 Predictive Analytics Estimate machine availability time using:

[ T_{\text{available}} = T_{\text{start}} + \text{Cycle Duration} ]

🔔 Push Notifications Notify users when a machine becomes available.

☁️ Cloud Deployment Deploy backend to AWS/GCP and eliminate ngrok dependency.

🏢 Campus Expansion Extend to more blocks — and potentially other universities.


StayUpToDo-Laundry started as a hostel inconvenience. It became a lesson in AI integration, distributed systems, and product thinking.

And most importantly:

We no longer waste trips to the laundry room. 🧺✨

Built With

Share this project:

Updates