Call-for-Code / OpenHarvest

OpenHarvest is a platform designed to manage farmers, fields, and crops to ensure the farmers succeed in making profits. Task timelines are given for each crop by a recommendation engine, then confirmed by a verification engine utilizing drones and ML models to allow farmers to collect blockchain based reputation tokens for financial institutions.
Apache License 2.0
21 stars 5 forks source link

OpenHarvest

License Slack

OpenHarvest is an open source software platform that is developed based on the non for profit organization Heifer's requirements to help farmers in Malawi's ndichuma project. The platform is used by a co-op manager to keep track of farmers, fields, and crops. Displaying visual data and using the latest technologies to ensure farmer's succeed in growing their crops and making a profit. This is done by sending sms weather based recommendations for when specific tasks from the recommendation matrix should be performed as well as integrating weather forecasts and automatic data driven verification to confirm if farmers have performed the behaviour or not. Based on these behaviours the tool will allocate blockchain based reputation tokens which will be recorded for each farmer. Each farmer's reputation will be shared with Heifer as they will be working with financial institutions to provided lower rates for loans.

OpenHarvest is a winner in the 2021 Call for Code. With the help of IBM Sustainability Accelerator program the project has being evolving. Please check the IBM Sustainability Accelerator blog to learn about the project development and its collaboration.

Follow us on Medium! https://medium.com/@openharvest

Contents

Awards

Originally OpenHarvest was a submission for IBM's call for code challenge, a global competition to use code to create a solution to environmental issues such as sustainability. OpenHarvest was a web application designed to balance farming production in India. Farmers in India are struggling with marketing their crops. The greatest instance of this was with India's recent onion shortage. Essentially, farmers are being told that the market needs specific goods which results in a massive surplus as all the farmers dedicated their crops to the market's needs. This results in many farmers’ watching entire crops go to waste. These crops can take over a year to grow and leave the farmer in debt rather than making a profit. One of our group members has great insight into this issue as he has family in the farming industry.

OpenHarvest was a top solution created for the 2021 Call for Code IBMer Challenge. It took on a key agricultural challenge prompt in the Call for Code competition.

Demo video

Watch the video

Demo URL

This is built against master on request.

Available at: https://openharvest.net

Architecture

Technology stack

flowchart LR
  subgraph react["React Client"]
    direction LR
    cc(Carbon Components)
    wcc(Watson for IoT Carbon Components)
  end
  subgraph node["Node.js REST API"]
    exp(Express HTTP Framework)
  end
  react<-->node
  node<-->MongoDB
  node<-->AfricasTalking
  node<-->IBMFoodTrust

  User<-->react
  EthersJS<-->node
  Colony<-->node
  AWS-KMS<-->node

Infrastructure / deployment stack

flowchart LR
  subgraph ibm_cloud["IBM Cloud"]
    direction TB
    ibm_ib(Image Builder)<-->ibm_cr
    ibm_ce(Code Engine Running API Image)<-->mongodb(MongoDB Managed Service)
    ibm_cr(Private Container Registry)--Deploys API Image-->ibm_ce
  end
  subgraph dns["Cloudflare DNS"]
    domain(OpenHarvest.net)
  end
  dns-->ibm_cloud
  User<-->dns

Long description

More details are available here

Getting started

Prerequisites

Building app

Backend

  1. Install mkcert. For Mac or Linux: brew install mkcert. Windows user can download mkcert.exe from Mkcert Github

    Install ts-node for Windows users in backend folder

    npm i -g ts-node

  2. Create Certificates

    mkcert -install
    mkcert localhost 127.0.0.1
  3. Create Mongodb data directory, anywhere you want but preferably in the same directory as Docker Compose. This is optional for Windows users.

    mkdir {YOUR_PATH}
  4. Create docker-compose.yml.

    For Mac and Linux:

    version: '3.7'
    services:
    mongodb_container:
      image: mongo:latest
      environment:
        MONGO_INITDB_ROOT_USERNAME: {YOUR_ROOT_USER}
        MONGO_INITDB_ROOT_PASSWORD: {YOUR_ROOT_PASSWORD}
      restart: unless-stopped
      ports:
        - 27017:27017
      volumes:
        - {YOUR_MONGO_DB_DATA_DIR}:/data/db

    For Windows:

    version: '3.7'
    services:
    mongodb_container:
      image: mongo:latest
      environment:
        MONGO_INITDB_ROOT_USERNAME: {YOUR_ROOT_USER}
        MONGO_INITDB_ROOT_PASSWORD: {YOUR_ROOT_PASSWORD}
      restart: unless-stopped
      ports:
        - 27017:27017
      volumes:
        - data:/mongodb/data/db
    volumes:
     data:
      driver: local
  5. Email openharvest@gmail.com to receive the .env file, cd into /backend and save file.

  6. npm i
    npm start

note: if 'npm i' fails, add '--force'

Frontend

cd react-app
npm install
npm start

Built with

Contributing

Please read CONTRIBUTING.md for details on our code of conduct, areas where we'd like to see community contributions, and the process for submitting pull requests to the project.

Technical Steering Committee

Per the The OpenHarvest Technical Charter.pdf

Name Organization
Tyler Philips IBM
Ryan Pereira IBM
Jonathan Scialpi IBM
Vikas Jagtap IBM
David Gill Heifer International

Join the Community

Join the #openharvest slack channel in the Call for Code workspace.

License

This project is licensed under the Apache 2 License - see the LICENSE file for details.

Acknowledgments