Awesome
<h1 align="center">๐ฑ NMF.earth app</h1> <h3 align="center">Understand and reduce your carbon footprint</h3> <br /> <p align="center"> <a href="https://apps.apple.com/us/app/nmf-earth/id1494561829"> <img alt="app-store" src="https://github.com/NotMyFaultEarth/nmf-app/blob/main/app-store.png" /> </a> <a href="https://play.google.com/store/apps/details?id=nmf.earth"> <img alt="google-play" src="https://github.com/NotMyFaultEarth/nmf-app/blob/main/play-store.png" /> </a> </p> <br /> <p align="center"> <a href="https://www.figma.com/community/file/967052407514062912"> <img alt="figma" src="https://github.com/NotMyFaultEarth/nmf-app/blob/main/figma.png" /> </a> </p> <br />Repository for the NMF.earth React Native application, built with Expo, Redux Toolkit and Typescript. Design can be found on Figma.
<br />๐ Data source
Carbon data comes from NMF's carbon footprint repo while barcode product scanned data comes from Open Food Facts api.
<br />๐ฆ Getting started
Installing Dependencies:
$ yarn
Running the app:
$ yarn start
For starting the app on a specific OS:
$ yarn ios | yarn android
Copy the 2 files that contain secrets and replace them with yours
$ cp .env.example .env
<br />
๐ฉ๐พโ๐ป Development
-
Eslint is used in the project to enforce code style and should be configured in your editor.
-
Prettier is also used and apply automatically by eslint
-
Typescript is used in the project for type-checking and should be configured in your editor.
You can check this manually by running:
$ yarn lint
or
$ yarn typescript
You can ask eslint to fix issues by running:
$ yarn lint:fix
<br />
๐ Testing
Use the following command to run unit tests with coverage:
$ yarn test
Use the following to update unit tests
$ yarn test -u
Use the following to run unit tests in watch mode while developing:
$ yarn test --watch
<br />
๐จ Storybook
Stories (*.story.tsx) can be automatically added to storyLoader.js
with :
$ yarn prestorybook
<br />
๐ Sustainable guide
To place new .md
files inside guides
folder or modify existing guide and then run node scripts/generate-guides.js
to generate a new sustainable guide. Images can be used in the .md
as follow: ![Earth](earth.png)
and should be place in assets/images/guide
.
For methodology screen, just run node scripts/generate-methodology.js
to update methodology.json
from methodology.md
.
For emission info screen, just run node scripts/generate-emission-info.js
to update emission-info.json
from assets/emission-info/markdown/*.md
.
๐ฃ Translations
You can help us with translate the app with our online tool POEditor. Any help is appreciate and no coding skills are needed ๐ค
PS: please do not use send translations made by Google translate or similar.
<br />Generate
Run node scripts/generate-translation-files.js
in order to create the files needed for the new language you want to add to the app.
Manage Files
Run node scripts/poeditor/group-translation-files.js
to generate 1 JSON file per language, with all the translation vars in it. From there, you can easily make any edit you want. When you're done, you can run node scripts/poeditor/spread-translation-files.js
to merge your edits and spread them into all the translation files across the repo.
๐ Deployment
Any tag starting with v
will runs expo publish. During this step app.example.json
is used to generate an app.json
file for expo's deployment, this is done with the following script scripts/generate-app-json.js
.
๐ Build
First you need to configure SENTRY_AUTH_TOKEN
and SENTRY_DSN
secrets on expo.dev and then define projectId
in app.config.js
. Then run npm install dotenv
and place your secrets inside .env
file that you need to create with SENTRY_AUTH_TOKEN
and SENTRY_DSN
, like in .env.example
.
Run eas build -p ios
to build for the App Store Connect and eas build -p android
for the Google Play Console.
๐จโ๐ป Contribute โค๏ธ
More than 40 developers have contribute to the app, thanks a lot to them!
Have a look to contributing.md if you want to contribute!
<br />๐ Backers
A big thank you to Christopherย Gwilliams and to the Phelps family for their amazing contribution to the Kickstarter!
<br />ยฉ๏ธ Open source - licence
Repository and contributions are under GNU General Public License v3.0