This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend.
What I built, and who it's for
A friend of mine works on a production line. He finds it hard to keep track of how much water he drinks during a shift, and he gets dehydrated quickly. When the work is busy, it's easy for a glass of water to slip down the list, and the day goes by without it.
I see something similar closer to home. My sister needs my mom to remind her to drink water, again and again. That got me thinking: what if the reminder could come from something that isn't a person?
So this weekend I built HydroLocal, a hydration coach for my friend that runs entirely on a laptop.
Watch or listen to the story (narration and visuals made with ElevenLabs):
What it does
- Shift at work: you enter your shift times, your breaks, how warm and physical the work is, and whether you can keep water at your station. It builds a drinking schedule around your breaks. Night shifts that cross midnight work too.
- Phone alarms: every plan downloads as a calendar file (.ics). Open it on a phone and the schedule becomes alarms, with no internet needed.
- Everyday reminders: gentle reminders through the day for anyone who forgets to drink.
- Trek pacing: a bonus mode that spreads the water you carry across a whole walk and keeps a reserve.
Demo
HydroLocal runs on your own computer, so there is no hosted link. Here is what it looks like.
1. Enter your shift. Times, breaks, how warm and physical the work is, and whether water can be kept at the station. Note the "No internet access" message in the corner: the app is running with the internet off.
2. Get a schedule. The amounts and times are worked out by plain Python, so they appear straight away. Here, the app is waiting for Gemma's note.
3. Read Gemma's note, and take the plan to your phone. The note is written by Gemma on my own laptop, and the download button turns the plan into phone reminders.
Code
github.com/sadhirr1/Hydrolocal
The README has the setup steps. In short: install Python, install LM Studio, download google/gemma-4-e4b (about 6 GB), start LM Studio's server, then run two commands.
How I built it
I worked with Claude. I described what I wanted, tested it, and kept feeding it the errors to fix until the application worked.
The design choice I'm proudest of is splitting the work in two:
-
Plain Python does the maths. The amounts and times come from a small, readable file (
hydration.py). The numbers are rule-of-thumb estimates, not medical advice, and the app says so. - Gemma does the words. An open-weight model, Gemma 4 (the e4b version), running locally in LM Studio, writes a short friendly note around the numbers it's given. It is told not to diagnose anything, not to invent places or brands, not to recommend salt, supplements or food, and to say that anyone who feels dizzy or faint should stop, sit down and get help.
I split it that way on purpose. For something health-adjacent, I wanted a small model to be good at friendly wording, and I didn't want it guessing at numbers.
Where the numbers come from
My first version used amounts I couldn't point to a source for, and I didn't want to publish that. So I rebuilt them around two public sources:
- Hot work: the US CDC/NIOSH guidance, about one cup (8 oz) every 15 to 20 minutes, which is 24 to 32 oz (roughly 710 to 950 ml) per hour, and never more than 48 oz per hour. HydroLocal never suggests more than the top of that range. CDC/NIOSH hydration guide (PDF)
- Comfortable conditions: the US National Academies adequate intake for total water, about 2.7 L a day for women and 3.7 L for men, with roughly 80% coming from drinks. National Academies report
Everything in between is my own estimate, and both the app and the code say so. That covers the "warm" level, scaling by body weight, the drinks before and after a shift, and the trek reserve.
What went wrong
My first test came back with an empty note. Gemma 4 is a "thinking" model. It reasons silently first, and that reasoning counts toward the answer's length limit, so my limit was too low and it ran out of room before writing anything. Raising the limit fixed it. Figuring out how token limits affect silent reasoning was a huge learning moment for me.
Gemma also once suggested a pinch of salt in a note. I never told it to say that, and I didn't want a small model giving that kind of advice, so I added a rule against it.
Privacy, all the way down
Streamlit, the library behind the interface, sends anonymous usage statistics by default. I turned that off and made the app reachable only from my own computer, so the privacy claim is true all the way down.
A small set of automated tests checks the schedule logic, the calendar file, and what happens when the local model isn't running. In that case the app still shows the schedule and skips only the note.
Why open innovation mattered
- Privacy. Body weight, shift patterns and health habits never leave the laptop. There is no account and nothing is saved.
- No running cost. There is no per-message fee. It's an open model on hardware I already own.
- Swappable. The app asks LM Studio which model is loaded, so Gemma can be replaced by another open model without changing the code.
- Offline. I made a plan with the internet switched off, and the schedule and Gemma's note still appeared. The first screenshot above shows Windows reporting "No internet access".
- An honest limit. Running a local model takes a bit of patience. In my last test on my laptop, Gemma 4 E4B took about 35 to 40 seconds to write the note. A small model on an ordinary laptop is slower than a cloud service, but the schedule appears straight away, and for this use case I think the privacy tradeoff is worth it.
Categories I'm entering
- Best Use of Gemma: Gemma 4 runs locally and writes the coaching note.
- Best Use of ElevenLabs: the story video at the top was made with ElevenLabs.
Honest limits
HydroLocal is a general guide, not medical advice, and it can't tell anyone why they feel unwell. Anyone who feels dizzy, faint or confused should stop, sit down, tell someone and get medical help. People with kidney, heart or other medical conditions should follow their doctor's advice about fluids.
My friend hasn't used it on the line yet. I built it for him, and I hope it helps.
Thank you for reading, and thanks to my friend for letting me build this for him.



Top comments (0)