Inspiration
In hot climates, air conditioning systems pull water from humid air and usually send it straight down a drain. Meanwhile, the same building may use fresh or desalinated water for landscaping.
I wanted to know whether that condensate could cover a useful amount of irrigation at a real site. Annual water volume alone does not answer that. Supply changes with the weather, plant demand changes through the year, and the tank has to connect the two.
What it does
Lets you choose a location and describe the cooling system, operating schedule, planted area, and storage tank.
It loads a complete year of local weather data and estimates condensate production hour by hour. The app then calculates daily irrigation demand and runs the water through a tank simulation.
The results show:
- Condensate produced
- Water used for irrigation
- Overflow and shortfall
- Percentage of irrigation demand covered
- A suggested storage tank size
Users can review assumptions, compare monthly supply and demand, and print a screening plan for the site.
How I built it
React and TypeScript browser app built with Vite. It uses Open Meteo for historical weather and place search. The interactive map runs on MapLibre GL with OpenFreeMap and OpenStreetMap data.
The condensate model is based on psychrometric equations used in ASHRAE research. Irrigation demand follows the crop coefficient method from FAO Irrigation and Drainage Paper 56.
Each hour of weather passes through the coil model. The output is grouped into daily supply, matched against plant demand, and passed through a tank balance. The app tests common tank sizes and recommends the smallest one that captures at least 95% of the maximum useful recovery
Challenges
The difficult part was keeping the estimate honest. Cooling schedules use local time, weather years can include leap days, and condensate must be limited by the system's available latent capacity.
Storage added another problem. A large annual supply can still perform poorly when the water arrives at the wrong time. I had to simulate the tank day by day instead of comparing two yearly totals.
I also wanted the demo to survive an unreliable connection. Weather responses are cached, stale requests are cancelled, and the default example has a documented fallback dataset.
What I learned
The biggest lesson was how much timing matters. A larger tank does not automatically produce a useful improvement, which is why the recommendation comes from testing capacities instead of using a fixed rule.
I also learned how to turn psychrometric equations into controls that someone can use without already understanding psychrometrics. Building the tests helped catch edge cases that looked reasonable in the interface but failed the water balance.
What's next
The next step is comparing the model with measured condensate from a real building. I would also like to add pipe routing, pump energy, treatment options, installation cost, and local water prices.
Cold Harvest is a screening tool, not a final engineering design. Any installation would still need water testing, code review, overflow protection, and a maintenance plan and I agree with that.
Built With
- github
- maplibre
- open-meteo
- openfreemap
- openstreetmap
- playwright
- react
- typescript
- vite
- vitest
Log in or sign up for Devpost to join the conversation.