Fertilytics

Zach CardozaTulare, CA

Fertilytics is a fertilizer scheduling tool I built at Kaweah Tech for Farmer's Fertilizer. Farmers upload whatever data they have on hand (spreadsheets, CSV files, PDFs, text files, the occasional scanned image of a soil test). A RAG pipeline ingests the corpus alongside Farmer's Fertilizer's product catalog and their own recommendation schedules, and an LLM produces a fertilizer schedule optimized for the products they actually stock. The farmer can add notes, concerns, or observations directly inside the app and re-generate as conditions change through the season.

Role
Founder
Client
Farmer's Fertilizer
Dates
2025 - present
Tech
  • TypeScript
  • Nuxt
  • Python
  • RAG pipeline
  • LLM orchestration
  • PDF generation

The framing of Fertilytics turned out to be the right shape for an LLM tool. The farmer has the data, the operational knowledge, and the final say. The LLM is a scheduling assistant that pulls the available inputs into a single recommendation.

Most of the interesting engineering was on the ingestion side. The data did not come from sensors or a clean API. It came in whatever format the farmer or the agronomist had on hand: spreadsheets, CSV files, PDFs, text files, and the occasional scanned image of a soil test or a fertilizer record. Each format needed its own parsing path and its own confidence weighting before any of it reached the LLM context window. Yield spreadsheets in particular were formatted four different ways depending on which year's template happened to be in use.

On top of the farmer's corpus, the pipeline pulls in a sizeable chunk of Farmer's Fertilizer's side of the relationship: their product catalog backend and their own recommendation schedules. The result is that the schedule the LLM produces is weighted toward what Farmer's Fertilizer actually stocks and sells, so the farmer ends up with something they can act on with their existing supplier rather than a list of generic fertilizer names.

Iteration happens inside the app. The farmer can drop additional inputs, concerns, or observations into the generation area, and the next pass picks them up alongside the existing corpus and produces an updated schedule. Conditions change through the season; the schedule re-runs as they do.