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. 🧺✨
Log in or sign up for Devpost to join the conversation.