projects

Awita

IoT water monitor for regions where the supply is unreliable. An Arduino reads the tank level every minute, the dashboard shows it live, and email alerts fire before you run dry. It has been running on my family's tank for over a year.

Personal Project
Main image
1/3
Thumbnail 2
Thumbnail 3

The Problem

In Baja California, water isn't guaranteed. Many homes rely on water trucks that deliver on irregular schedules, and storage tanks are the buffer between having water and running dry. I wanted to build something that would tell you exactly how much water you have left and warn you before it runs out.

How It Works

  1. 1An Arduino with an ultrasonic sensor sits on top of your water tank, measuring the distance to the water surface every 60 seconds.
  2. 2Readings are sent to an AWS Lambda via API Gateway, which calculates the water level percentage and stores it in MySQL.
  3. 3A React dashboard shows your current water level as an animated gauge, with 24-hour, 7-day, and 30-day historical charts.
  4. 4Email alerts notify you when water drops below a configurable threshold or when the sensor stops reporting (disconnection).

What I Built

Designed the full system architecture: Arduino firmware that registers itself on first boot, Lambda for sensor ingestion and notification dispatch, NestJS API behind API Gateway, and a React SPA with Clerk authentication.

Built an LSTM prediction service on FastAPI, trained on historical usage with hyperparameters tuned by a genetic algorithm and cached in Redis. I measured it against the latency it added and switched it off. A simpler regression is what I would build in its place.

Results

About 1,440 readings a day at under 100 ms per write. The system has been running on my family's tank in Ensenada since 2025, and my dad and my brother use it too.

Technologies

ReactNestJSGoMySQLAWSArduino