Inspiration

The average person needs to drink 2 to 3 liters of water everyday, but 47% of US adults only drink half a liter each day. Also, phone reminders are easy to ignore, and they can’t tell whether you actually drank anything. Water-tracking apps rely on you logging every glass by hand, which most people stop doing within days. We wanted something that knows when you drank, because a weight sensor can.

What it does

Put any cup or bottle on the Swig scale, and it tracks every sip automatically. It cheers when you keep pace and nags when you fall behind. If you fall too far behind, your comfort apps (Instagram, TikTok) lock until you drink water. Your daily intake, streaks, and a leaderboard live in the app, and it works offline and syncs later.

How we built it

Hardware: A 5 kg load cell, an HX711 amplifier, and a Seeed XIAO ESP32C3. The firmware only weighs. It sends the weight over Bluetooth Low Energy about twice a second, and it handles calibration, auto-tare, and a tare button. App: Expo (React Native, TypeScript) on iPhone. It receives readings over BLE and forwards them to the server. It keeps an offline copy of your data in SQLite and uses Screen Time (Family Controls) to lock apps. Reminders are scheduled notifications. Server: Python with FastAPI and Flask on Railway, backed by Postgres. It detects sips and refills from the weight stream, computes pace, lock state, and streaks, and serves accounts, sync, and the leaderboard. We developed a complete loop from hardware to software: scale, BLE, app, server, spoken feedback, and app lock. This fully supports reminders that speak through a Bluetooth speaker even with the app closed and offline-first sync, so sips are never lost when the connection drops.

Challenges we ran into

Wi-Fi blocked device-to-device traffic. Our first speaker, a Google Nest Mini, couldn’t connect, so we switched to a Bluetooth JBL speaker. That pushed us to move speech from the server to the phone. Rethinking the scale’s connection. We moved the scale from Wi-Fi straight to the server to BLE through the phone, which also removed the need for a shared network. Telling a sip from noise. A scale drifts and wobbles, so the server waits for a stable reading before it counts a sip. The firmware also re-zeroes itself when the platform is empty.

Accomplishments that we're proud of

Incorporating a physical, hardware component elevates our project past a simple tracker app. The tactile component creates a more memorable and personal reminder to drink water, and connecting the hardware to our IOS app presented several obstacles we are proud to say we overcame.

What we learned

Most of our members did not have much experience working with hardware, so we learned how to connect hardware with software. We also learned that iOS background Bluetooth, notifications, and Screen Time each have strict platform rules that you design around early.

What's next for Swig

Connect the smart coaster to a Google Nest Mini and other smart home devices. Make it portable by allowing users to attach the coaster to the bottom of their water bottle.

Share this project:

Updates

Submission history