Skip to main content
Back
Farmer Parcel Assistant preview

Farmer Parcel Assistant

View repository →

Problem

An AgriTech team needed farmers to ask about parcels in plain language, without a form-heavy admin tool, while keeping answers grounded in real parcel data.

Tech stack

JavaScriptNode.jsDockerReactExpress.jsPostgreSQLTailwindCSS

What I built

  • Built a conversational backend for parcel lookup, phone linking, and message validation.
  • Handled common intents with validation and regex, and used LLM context only for ambiguous requests.
  • Deployed the stack with Docker Compose on AWS EC2.
  • Added a lightweight frontend to visualize message flow while the API handled the core work.

Decisions

Key technical choices, alternatives considered, and trade-offs.

Regex first, LLM second

Context

Most questions repeated a small set of parcel lookups. Routing every message through an LLM raised cost and made incorrect answers harder to control.

Alternatives

  • LLM on every message: more natural language coverage, less predictability and higher cost.
  • Forms only: safer for the backend, poor fit for farmers who needed chat.

Decision

Classify common intents with validation and regex, and pass ambiguous requests to an LLM for context.

Trade-off

Less open-ended coverage early on, with more predictable answers on the common path.

Docker Compose on a single EC2 host

Context

The assignment needed a reproducible demo under a short delivery window, not a multi-service platform.

Alternatives

  • Managed containers from day one: cleaner operations later, more setup than the brief allowed.
  • Bare processes on the host: fast to start, harder to rebuild cleanly.

Decision

Ship the API and dependencies as one Docker Compose stack on EC2.

Trade-off

Simple to deploy and demo, with less horizontal scale than a managed container platform.