"Local Farm To You" - A Marketplace For Locally Produced Food

1. Introduction

The purpose of the project is to give you the opportunity to practice the concepts discussed in this class. The requirements are purposely somewhat vague such that you can interact with the client (that's your instructor) to figure out the detailed requirements.

Before we get into the functionality detail, I want to remind you that detail about the programming language, the platform on which the project will be tested, unit-testing, and how to submit your work is available in the syllabus.

Sections 2 through 4 in this document cover acceptance criteria for the project, Q&A, and a description of how you can earn extra credit for the project.

Lastly, the best project will receive a prize of $300 in cash, curtesy of our sponsor, theSleeples, Inc. Your instructor reserves the right to not award the prize or to split it between multiple outstanding submissions.

2. Acceptance Criteria

The basic implementation of the project assumes the application runs on a server and that various clients access it through a REST interface.

The RESTful API will be available here as soon as we clarify the project detail. This process will require you to ask lots of questions, in class, via email, etc.

I will not change the high-level requirements as a result of the requirements clarification process. However, I will document the decisions made in the Q&A document.

Here is the scenario that will be used to test your application.

3. Questions and Answers

Check here for answers before asking your TA or the teacher.

4. Extra Credit

The main purpose of this project is to practice object-oriented analysis, design and programming, not to teach you web development frameworks or relational databases. As such, the use of a database is expressly prohibited for the core project implementation.

There is a finer point to be made about the databases ban, namely that most students would start with the design of a database schema, the way they learned in a Databases class, instead of thinking about use cases, entity objects, etc.

In fact, the database should be a plug-in to your application, the same way the delivery mechanism should be, whether command line, web, etc.

We can talk about extra credit iff (if and only if) your core project implementation works impecably. This point will not be debated.

If you complete your core project implementation on time and feel adventurous, then you can get extra credit for implementing a web client for the customer.

5. Project Description

"Local Farm To You" brings together farmers and customers looking for the freshest local food available where they live.

Why go to the grocery store to buy vegetables that have been hauled from hundreds of miles away and have been sitting on the shelf for days when you can just order the same produce from a local farmer and have them delivered to your door step next day, freshly harvested.

The idea is that farmers can register with Local Farm To You (LF2U henceforth) to create what you could call a "virtual grocery stand" where they describe what they produce and what's available for delivery presently. For example many farmers produce tomatoes, however, the tomatoes are only available during certain times of the year. Please note that certain products may be available all the time, such as milk, honey, meats, etc.

Each farmer must specify what zip codes they deliver to.

Consumers register with LF2U and can then order products from the farmers available that deliver in the consumer's zip code.

LF2U is the entity that manages the software that you'll be developing, takes care of the server where the software is running, takes payment from consumers, takes care of paying the sales tax to the proper government bodies, and then pays the farmers after taking a small administrative cut from the money collected.

Sounds pretty sweed, doesn't it?

LFTU will maintain of catalog of all the things farmers produce and are willing to sell and deliver, e.g. tomatoes, cucumbers, eggplant, potatoes, cabbage, milk, cheese, honey, eggs, meats, etc.

Each farmer will be able to select a generic product from the catalog, e.g. "honey" and then add a personal description to it, e.g. "Organic clover honey". The farmer can specify the price per unit of product, e.g. ounce, pound, pint, gallon, etc. The farmer can also specify the delivery charge.

Consumers should be able to view the farmers that deliver in their zip code. Consumers should be able to see what a specific farmer produces and what's available for delivery; a consumer should be able to select a list of products to be delivered to their address and place an order with LF2U; the order could contain a note with delivery instructions. When the order is placed the consumer will receive a confirmation token.

A consumer should be able to see all products available for them to order; for each product they could see how many farmers offer the product.

Consumers can view their outstanding orders. A consumer can cancel an order if they wish, but it has to be done before the end of the day.

Farmers can view orders that need to be delivered today. Same for orders that need to be delivered tomorrow. A farmer should also be able to get a report that breaks down quantities to be delivered by product such that they know how much to harvest/prepare for delivery.

When the order is delivered, the delivery person can confirm delivery by submitting to LF2U the confirmation token that was given to the customer when the order was placed.

One of the LF2U employees will be tasked with responding to consumer and farmer support issues. It would be very helpful if this employee could search for consumers/farmers, view their orders and the status of those orders, etc.

Finally, LF2U management should be able to request a report that shows total revenues during a certain time frame, the LF2U cut, and what needs to be paid to farmers, broken down by farmer.

I have all sorts of other ideas for how to make LF2U great - see below for some of them - but I'm afraid it would be too much for a student in the cs445 class that needs to complete the project by mid-November.

Here is a list of ideas for the future:

  • Allow for "will pick-up" instead of just delivery.
  • Allow for delivery to be "asap" (same day) or "standard" (tomorrow). For "asap" orders farmers may not be able to deliver in all zip codes. Also, "asap" orders could not be cancelled.
  • Consumer could create a shopping list and the system would calculate the price of that shopping list for each of the farmers that deliver in their zip code.
  • Each farmer could get from the system a delivery route.
  • A rating system for farmers and maybe one for the products of each farmer.

Last update: Aug 31, 2016 Virgil Bistriceanu cs445 Computer Science

$Id: project.html,v 1.2 2016/08/31 17:16:00 virgil Exp $