LiteFarm is the world’s first community-led, not-for-profit, digital platform joining farmers and scientists together for participatory assessment of social, environmental and economic outputs of farming systems. LiteFarm is the first application of its kind specifically tailored to the needs of diversified farmers with built-in pathways to provide expert decision support and help them earn additional income through payment for ecological services (PES) schemes and in-app certifications (such as organic). These approaches serve the multiple purposes of incentivizing adoption of sustainable land use practices through the provision of evidence-based decision support, and significantly increasing the amount of data being collected by diversified farming operations around the globe. It was developed with farmers at the center of the design process and built from the ground up with accessibility and approachability in mind. We are proud of our mission:
To meet farmers where they are and equip them with the tools they need to make informed and responsible decisions about the health of their farm, their livelihood, their community, and the planet.
LiteFarm version 1.0.0 was released to the public in July 2020. The LiteFarm app is continually being developed, with farmers, researchers, designers and developers working together to create new localized modules and features into the future. LiteFarm is deployed in Canada, the USA, and Latin America.
If you’re a farmer and would like to join LiteFarm you can sign up today at app.litefarm.org. If you are a researcher or would like to find out more about this project you can contact the UBC Centre for Sustainable Food Systems. If you're a developer, welcome to the team! All the details on how you can contribute to this project are right here.
LiteFarm is comprised of three applications which all reside in this monorepo.
packages/webappis the client-facing applicationpackages/apiis the back-end API server with entry pointsrc/server.jspackages/api/src/jobsis the "jobs scheduler" for certification exports, with entry pointindex.js
- Install node.js if you do not already have it.
- If you do not have pnpm installed, run
npm install -g pnpmin a terminal. - Use the
git clonecommand to clone this repository to your computer. - In a terminal, navigate to the root folder of the repo and run
npm install. - Navigate to the
packages/apifolder, and runnpm install. - Navigate to the
packages/webappfolder, and runpnpm install.
The applications are configured with environment variables stored in .env files. Configuration information includes secrets like API keys, so the .env files should never be added to source control. This repository does contain .env.default files for api and webapp. These files contain all necessary environment variables, but for sensitive ones the values are redacted. Contact smattingly@litefarm.org for assistance.
-
Install PostgreSQL by downloading installers or packages from https://www.postgresql.org/download/. Alternatively, Mac and Linux users can use homebrew as shown below.
# Install homebrew. /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" # Install PostgreSQL. brew install postgresql # Start DBMS service. brew services start postgresql
-
Set up the PostgreSQL role (account) and databases. You will use the
psqlclient program. Account setup details will vary by OS. If an installer asks you to choose a password for thepostgres(superuser) account, usepostgresfor consistency with the contents of.env.default.-
Linux. In a terminal, start the client with
sudo -u postgres psql, then execute each of the following commands. (The last command terminates the client session.)ALTER ROLE postgres WITH PASSWORD 'postgres'; CREATE DATABASE "pg-litefarm"; CREATE DATABASE test_farm; exit;
-
Windows. At the Start menu, type
psqland the search results will show "SQL Shell (psql)". In the client, execute each of the following commands. (The last command terminates the client session.)CREATE DATABASE "pg-litefarm"; CREATE DATABASE test_farm; exit;
-
-
In a terminal, navigate to the
packages/apifolder. Executenpm run migrate:dev:dbto run the migrations that set up the PostgreSQL database used by the app.
In a terminal, navigate to the packages/api folder. Run npm run nodemon to launch the backend application. It will automatically reflect any changes you make to the backend.
In a terminal, navigate to the packages/webapp folder and run pnpm dev. This builds the frontend code, and starts a web server that will automatically reflect any changes you make to the frontend.
Load the frontend app in your browser at http://localhost:3000.
To run ESLint checks execute npm run lint
The chai.js and jest libraries automate tests that run real database operations using JWT. The tests use a dedicated database named test_farm, distinct from the pg-litefarm database that the app normally uses .
- In a terminal, navigate to the
packages/apifolder. - Execute
npm run migrate:testing:dbto set up the test database. - Execute
npm testto launch the tests. Or, to generate test coverage information, runnpm test -- --coverage .and then see thecoverage/index.htmlfile.
While the tests do attempt to clean up after themselves, it's a good idea to periodically use psql to DROP and CREATE the test_farm database, followed by the migrations from step 2 above.
To run ESLint checks execute pnpm lint
Since this is a mobile web application, webapp should be viewed in a mobile view in the browser.
Please see https://ngrok.com/ for more general information about ngrok.
Use cases in which we currently utilize ngrok at LiteFarm include:
- Testing local changes on phones or different devices
- Testing local changes when working with other APIs and integrations
- Go to https://ngrok.com/ and sign up for an account
- Install the ngrok CLI (on the Getting Started page after signing up)
- Create a copy of
ngrok/ngrok.default.ymland call itngrok.yml. Make sure this file is in thengrokfolder at the root of the repo - Login to your ngrok account and go to https://dashboard.ngrok.com/get-started/your-authtoken
- Add the auth token from there in
ngrok.ymlby replacing the?
These commands can be run from the root of the repo.
npm run ngrokto forward both backend and frontend ports with ngroknpm run ngrok:setupto add the ngrok urls to the file .env files (always run after forwarding a port to ngrok)npm run ngrok:apito forward the backend port with ngroknpm run ngrok:webappto forward the frontend port with ngrok
Note: Please make sure to run the commands in the following order:
npm run ngrokornpm run ngrok:apiornpm run ngrok:webappnpm run ngrok:setup(in a new terminal)pnpm dev(in a new terminal from thepackages/webappfolder)npm run nodemon(in a new terminal from thepackages/apifolder)