Skip to main content

Command Palette

Search for a command to run...

Why Would You Build A Shower App?

Sometimes the Best Apps Come From Really Weird Problems

Updated
7 min readView as Markdown
Why Would You Build A Shower App?
D

David is driven by a passion for discovery and believes that innovation thrives on collaboration and continuous learning. As a recognized thought leader, he contributes to industry advancements through conferences, open-source projects and strategic partnerships. With over 15 years of experience, David has deep expertise in software development, cloud platforms, and designing cutting-edge systems. Known for mentoring fellow technical leaders, he plays a key role in fostering growth and excellence across the organization. Outside of work, David is a hands-on creator, enjoying 3D printing, CNC, laser cutting, and woodworking in the small town of Floyd, VA with his wife and four kids. His love for making reflects his innovative spirit—always exploring and pushing boundaries.

Last week my oldest son and I spent the week volunteering at Richmond Diocese WorkCamp.

If you’ve never heard of it, it’s a week where hundreds of teenagers spend their days helping people in the community who need it most. Building wheelchair ramps, repairing porches, fixing roofs, installing flooring, painting homes… all the kinds of projects that can genuinely change someone’s quality of life.

I’ve volunteered on projects like this before, but never at this scale. But it checked a lot of boxes for me:

  • I enjoy building things.

  • I enjoy mentoring.

  • I enjoy watching students discover that they're capable of more than they thought.

  • I get to spend a week with my son.

I figured I’d be swinging a hammer most of the week. But one of my first assignments was shower duty.


250 Teenagers. Three Shower Rooms. One Hour.

Every afternoon, roughly 250 exhausted teenagers would return from construction sites covered in sweat, drywall dust, insulation, mud, and whatever else they had managed to collect during the day.

It was our job to get every single one of them showered, changed, and to supper on time.

Each student was given a numbered shower card and assigned a shower, and told they had 7 minutes to shower. They'd get a one-minute warning...

Easy peasy, right? The first night was horrible. Every shower monitor was using the timers on their phones, which worked ok but resetting them and keeping up with which timer went with which card was a pain. If a kid was done after the timer was up, there was no way to see how long they actually took. We went well over the allotted hour, and that's when I had an idea to create mainly just for me a shower timer app.


A Shower Timer was Born

That night, I fired up Claude Code and, after a little back and forth, had a dedicated shower timer up and running.

The goal wasn't to build the world's greatest shower app. It was simply to make my job easier.

Each shower card had its own timer; there was a giant reset button, and it would automatically highlight when it was time to give the one-minute warning. If someone went over, the timer kept counting so I knew exactly how far behind we were.

Talking with the others on shower duty, they wanted to try out the app as well. Luckily, I was able to use Claude artifacts to just publish the prototype and share a URL.

Then came the curveball...

"Actually, we're changing the shower time to six minutes."

😱

Thankfully, I'd added an Edit button the night before because I figured someone would eventually ask for a different time limit. Instead of rebuilding anything, we simply changed the timer from seven minutes to six.

Sometimes the feature you almost don't build ends up being the one everyone needs.


Scope Creep... The Good Kind

Once people realized the app worked, they immediately started asking for more.

Our "Shower Czar" (yes, that was basically her official title) asked if there was any way we could answer questions like:

  • Were the boys faster than the girls?

  • Which crew was the fastest?

  • How many kids had finished?

  • Which crews hadn't checked in yet?

She was tracking everything with a clipboard and was curious if she could pull it up in the app.

So that evening, I built a backend and made a few tweaks to the timers so we could select which crew and which monitors were overseeing which showers.

I connected everything to Supabase, hosted it on GitHub Pages, and suddenly this little timer app had turned into a full management system.

Now instead of simply timing showers we could:

  • Check workgroups in as they arrived.

  • Assign shower cards.

  • Track every monitor.

  • See who was currently showering.

  • See who had finished.

  • Automatically collect statistics throughout the week.

Now she no longer needed a clipboard and could focus on herding the teens!


Since We Had the Data...

It's almost like that kids book "If you give a mouse a cookie" If you have data you have to build a dashboard right?

Every evening we'd pull it up and start looking through the numbers.

It turns out shower logistics are a lot more interesting than you'd think.

The kids even got excited to know how their crew ranked. Some were going for the longest, and some were trying to be too quick 🤣 🤢

Mr. Bates where's my crew? I'm gonna be the fastest!


"Can We Show This at Tonight's Program?"

Then someone casually asked:

"Wouldn't it be cool if everyone could see this in the powerpoint?"

If we're already collecting statistics, why not make them fun?

So I decided to build a Spotify recap... but for shower stats 🤣

Firing up Claude code again I made a recap button that aggregated the data, Answered those questions like which crew was the fastest, which crew was the longest and were boys quicker at showers than girls.

I generated some music with Eleven Labs and even added voiceover options that use the browser's built-in speech system to talk to the viewer.

It turned something nobody was excited about, waiting in line for showers, into something people were actually talking about.

Here's one of the recaps


A Practical Use Case

One of the days we had an incident in one of the showers that got reported after everyone left. It wasn't serious but we needed to address it with everyone involved. The program coordinator pulled me aside and asked if I could identyify everyone in the showers at the time of the incident. Since I was collecting data on which crews and which monitors and times it was easy to pull up the admin dashboard and identify the crews that we needed to pull and address the incident.

This couldn't have happened before; we would have been reliant on word of mouth and memory.


My Favorite Moment

One student became determined to top the leaderboard.

The next day he came flying out of the shower in about...

Three minutes.

I actually had to stop him.

"Dude... you don't have to win that badly."

Nobody wants you to be that quick! We want you to be clean!


The Real Lesson

I never intended to spend my week writing software and thankfully with the help of AI I didn't, I could make small iterations to my app and it was fun! I didn't have to spend the whole time trying to figure out a schema or code out edge cases, it was hey I want this feature!

The best software rarely starts with,

"I have an app idea."

It starts with,

"This is annoying... there has to be a better way."

What I really enjoyed wasn't using AI to generate code.

It was using AI to compress the boring parts so I could spend my evenings talking with volunteers, listening to feedback, and shipping improvements that everyone could use the very next day.

Every night someone would say,

"Hey... do you think it could also..."

And every morning we'd have a new feature.

By the end of the week, what started as six timers had become a management dashboard, reporting platform, and nightly recap system.

Not because that was the plan.

Because real users kept asking real questions.

It was a cool experience and I still got to spend time with my son helping people both in the community and in the program!

Now if I could make something that would wash, rinse, and fill the 250 gallons of water we needed to provide everyday!