{"id":348408,"name":"Collect Earth Online","description":"Crowdsourced visual interpretation of on-demand satellite imagery for land use assessment.","url":"https://github.com/openforis/collect-earth-online","last_synced_at":"2026-04-19T16:00:41.307Z","repository":{"id":15232496,"uuid":"74567355","full_name":"openforis/collect-earth-online","owner":"openforis","description":"Collect Earth Online","archived":false,"fork":false,"pushed_at":"2026-04-15T05:11:39.000Z","size":203268,"stargazers_count":58,"open_issues_count":3,"forks_count":20,"subscribers_count":17,"default_branch":"main","last_synced_at":"2026-04-15T07:16:25.503Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/openforis.png","metadata":{"files":{"readme":"README.org","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2016-11-23T10:46:29.000Z","updated_at":"2026-04-10T14:44:20.000Z","dependencies_parsed_at":"2023-09-23T05:04:52.534Z","dependency_job_id":"a64d1d0d-b1b9-4832-8bba-62344c507b2b","html_url":"https://github.com/openforis/collect-earth-online","commit_stats":{"total_commits":4339,"total_committers":38,"mean_commits":114.1842105263158,"dds":0.6501498041023277,"last_synced_commit":"ea65b090c6e65f81c52e3283bfcb3141f92e0dac"},"previous_names":[],"tags_count":25,"template":false,"template_full_name":null,"purl":"pkg:github/openforis/collect-earth-online","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openforis%2Fcollect-earth-online","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openforis%2Fcollect-earth-online/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openforis%2Fcollect-earth-online/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openforis%2Fcollect-earth-online/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openforis","download_url":"https://codeload.github.com/openforis/collect-earth-online/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openforis%2Fcollect-earth-online/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31844329,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T13:28:40.153Z","status":"ssl_error","status_checked_at":"2026-04-15T13:28:29.396Z","response_time":63,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"owner":{"login":"openforis","name":"Open Foris","uuid":"1212750","kind":"organization","description":"Free open-source solutions for environmental monitoring","email":"openforisinitiative@gmail.com","website":"http://www.openforis.org","location":"Rome, Italy","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/1212750?v=4","repositories_count":45,"last_synced_at":"2024-03-26T05:00:06.549Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/openforis","funding_links":[],"total_stars":493,"followers":52,"following":0,"created_at":"2022-11-03T05:34:40.096Z","updated_at":"2024-03-26T05:00:11.381Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openforis","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openforis/repositories"},"packages":[],"commits":{"id":1345889,"full_name":"openforis/collect-earth-online","default_branch":"main","total_commits":4690,"total_committers":31,"total_bot_commits":2,"total_bot_committers":1,"mean_commits":151.29032258064515,"dds":0.6761194029850746,"past_year_total_commits":201,"past_year_total_committers":4,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":50.25,"past_year_dds":0.427860696517413,"last_synced_at":"2026-04-17T15:07:24.129Z","last_synced_commit":"81ee3cf6fd8e2a58382cebc4d120f512e76d1fa1","created_at":"2023-09-12T09:53:35.797Z","updated_at":"2026-04-17T15:04:58.738Z","committers":[{"name":"Matt Spencer","email":"sirmspencer@gmail.com","login":"sirmspencer","count":1519},{"name":"Gary Johnson","email":"gwjohnso@uvm.edu","login":null,"count":598},{"name":"a-luz","email":"aluz@sig-gis.com","login":"a-luz","count":353},{"name":"Gary Johnson","email":"lambdatronic@gmail.com","login":"lambdatronic","count":331},{"name":"NDC\\gtondapu","email":"githika.tondapu@nasa.gov","login":"gtondapu","count":328},{"name":"Billy Ashmall","email":"billy.ashmall@nasa.gov","login":"billyz313","count":304},{"name":"Roberto Fontanarosa","email":"robertofontanarosa@gmail.com","login":"rfontanarosa","count":279},{"name":"Biplov Bhandari","email":"bionicbiplov45@gmail.com","login":"biplovbhandari","count":215},{"name":"RJ Sheperd","email":"rjsheperd@gmail.com","login":"rjsheperd","count":189},{"name":"Oliver-BE","email":"obaldwinedwards@gmail.com","login":"Oliver-BE","count":110},{"name":"Andrew Carlile","email":"acarlile@sig-gis.com","login":"jollyblondgiant","count":108},{"name":"Sif Biri","email":"sbiri@sig-gis.com","login":"sifbiri","count":72},{"name":"Matt Spencer","email":"semail@snasa.io","login":null,"count":69},{"name":"fefrain","email":"fefrain","login":"fefrain","count":53},{"name":"Jerome","email":"jeromeagostini@gmail.com","login":"supershivas","count":38},{"name":"jonnvega","email":"jonn.vega@gmail.com","login":"jonnvega","count":30},{"name":"John Dilger","email":"johnjdilger@gmail.com","login":"jdilger","count":21},{"name":"Thomas DeVera","email":"devera@p43bd02.plant43.cbt","login":null,"count":16},{"name":"yzq.yang","email":"yzq.yang@gmail.com","login":"c11","count":15},{"name":"Roberto Fontanarosa","email":"robertofontanarosa@gmaiil.com","login":null,"count":8},{"name":"fefrain","email":"ferfrain","login":"ferfrain","count":5},{"name":"kdyson","email":"kdyson","login":"kdyson","count":5},{"name":"tdev2308","email":"tomdev@covad.net","login":null,"count":5},{"name":"Fefrain","email":"fefrain@outlook.it","login":null,"count":4},{"name":"Alfonso Sanchez-Paus Diaz","email":"Alfonso.SanchezPausDiaz@fao.org","login":"herrtunante","count":4},{"name":"justineb17","email":"75046596+justineb17","login":"justineb17","count":3},{"name":"Gary Johnson","email":"lambdatronic@disroot.org","login":null,"count":2},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":2},{"name":"David S Saah","email":"dsaah@sig-gis.com","login":"davidsaah","count":2},{"name":"Andrew","email":"ajb2189@gmail.com","login":"ajb2189","count":1},{"name":"Kyle Woodward","email":"51868526+kyle-woodward","login":"kyle-woodward","count":1}],"past_year_committers":[{"name":"a-luz","email":"aluz@sig-gis.com","login":"a-luz","count":115},{"name":"Andrew Carlile","email":"acarlile@sig-gis.com","login":"jollyblondgiant","count":83},{"name":"kdyson","email":"kdyson","login":"kdyson","count":2},{"name":"jonnvega","email":"47796239+jonnvega","login":"jonnvega","count":1}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/openforis%2Fcollect-earth-online/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-18T00:00:07.883Z","repositories_count":6214375,"commits_count":900064817,"contributors_count":34919947,"owners_count":1144201,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"openforis/collect-earth-online","html_url":"https://github.com/openforis/collect-earth-online","last_synced_at":"2026-04-17T15:01:54.331Z","status":"error","issues_count":22,"pull_requests_count":253,"avg_time_to_close_issue":12006732.529411765,"avg_time_to_close_pull_request":1328228.2844444443,"issues_closed_count":17,"pull_requests_closed_count":225,"pull_request_authors_count":12,"issue_authors_count":12,"avg_comments_per_issue":1.2272727272727273,"avg_comments_per_pull_request":0.1857707509881423,"merged_pull_requests_count":206,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":2,"past_year_pull_requests_count":55,"past_year_avg_time_to_close_issue":710466.0,"past_year_avg_time_to_close_pull_request":649315.0238095238,"past_year_issues_closed_count":2,"past_year_pull_requests_closed_count":42,"past_year_pull_request_authors_count":4,"past_year_issue_authors_count":2,"past_year_avg_comments_per_issue":1.5,"past_year_avg_comments_per_pull_request":0.03636363636363636,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":36,"created_at":"2023-09-12T09:54:06.081Z","updated_at":"2026-04-17T15:01:54.332Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/openforis%2Fcollect-earth-online","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/openforis%2Fcollect-earth-online/issues","issue_labels_count":{},"pull_request_labels_count":{"Bug Fix":1},"issue_author_associations_count":{"NONE":22},"pull_request_author_associations_count":{"CONTRIBUTOR":219,"COLLABORATOR":26,"NONE":8},"issue_authors":{"ricds":9,"rohansaw":2,"MatthieuStigler":2,"Olganep":1,"paullc":1,"fargotty":1,"Pedrord-gis":1,"MarshallLaw1581":1,"ElieNgembo":1,"chitrez":1,"moralesluciacr":1,"twoldemariam":1},"pull_request_authors":{"a-luz":129,"jollyblondgiant":61,"sirmspencer":17,"jonnvega":14,"sifbiri":13,"Oliver-BE":9,"jdilger":4,"lambdatronic":2,"ricds":1,"carloshormazabal":1,"kdyson":1,"kyle-woodward":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-19T00:00:13.985Z","repositories_count":14327480,"issues_count":34498435,"pull_requests_count":112851786,"authors_count":11238633,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{"NONE":2},"past_year_pull_request_author_associations_count":{"CONTRIBUTOR":54},"past_year_issue_authors":{"fargotty":1,"twoldemariam":1},"past_year_pull_request_authors":{"jollyblondgiant":38,"a-luz":14,"jonnvega":1,"kdyson":1},"maintainers":[{"login":"sifbiri","count":13,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/sifbiri"},{"login":"Oliver-BE","count":9,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/Oliver-BE"},{"login":"jdilger","count":4,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/jdilger"}],"active_maintainers":[]},"events":{"total":{"ReleaseEvent":1,"DeleteEvent":59,"PullRequestEvent":90,"ForkEvent":1,"IssuesEvent":26,"WatchEvent":7,"IssueCommentEvent":34,"PushEvent":248,"PullRequestReviewCommentEvent":9,"PullRequestReviewEvent":10,"CreateEvent":71},"last_year":{"ReleaseEvent":1,"DeleteEvent":49,"PullRequestEvent":63,"IssuesEvent":10,"WatchEvent":4,"IssueCommentEvent":19,"PushEvent":184,"PullRequestReviewEvent":6,"PullRequestReviewCommentEvent":8,"CreateEvent":58}},"keywords":[],"dependencies":[{"ecosystem":"actions","filepath":".github/workflows/linter.yml","sha":null,"kind":"manifest","created_at":"2023-01-11T20:48:31.417Z","updated_at":"2023-01-11T20:48:31.417Z","repository_link":"https://github.com/openforis/collect-earth-online/blob/main/.github/workflows/linter.yml","dependencies":[{"id":6872065437,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":6872065438,"package_name":"actions/setup-node","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":6872065439,"package_name":"sibiraj-s/action-eslint","ecosystem":"actions","requirements":"v1.1.0","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"npm","filepath":"package.json","sha":null,"kind":"manifest","created_at":"2023-01-11T20:48:31.458Z","updated_at":"2023-01-11T20:48:31.458Z","repository_link":"https://github.com/openforis/collect-earth-online/blob/main/package.json","dependencies":[{"id":6872065453,"package_name":"@babel/plugin-transform-runtime","ecosystem":"npm","requirements":"^7.16.0","direct":true,"kind":"runtime","optional":false},{"id":6872065454,"package_name":"@ckeditor/ckeditor5-build-classic","ecosystem":"npm","requirements":"^19.0.0","direct":true,"kind":"runtime","optional":false},{"id":6872065455,"package_name":"@ckeditor/ckeditor5-react","ecosystem":"npm","requirements":"^2.1.0","direct":true,"kind":"runtime","optional":false},{"id":6872065456,"package_name":"airbnb-prop-types","ecosystem":"npm","requirements":"^2.16.0","direct":true,"kind":"runtime","optional":false},{"id":6872065457,"package_name":"highcharts","ecosystem":"npm","requirements":"^9.1.0","direct":true,"kind":"runtime","optional":false},{"id":6872065458,"package_name":"highcharts-react-official","ecosystem":"npm","requirements":"^3.0.0","direct":true,"kind":"runtime","optional":false},{"id":6872065459,"package_name":"lodash","ecosystem":"npm","requirements":"^4.17.20","direct":true,"kind":"runtime","optional":false},{"id":6872065460,"package_name":"ogr2ogr","ecosystem":"npm","requirements":"^1.5.0","direct":true,"kind":"runtime","optional":false},{"id":6872065461,"package_name":"ol","ecosystem":"npm","requirements":"^6.4.3","direct":true,"kind":"runtime","optional":false},{"id":6872065462,"package_name":"prop-types","ecosystem":"npm","requirements":"^15.7.2","direct":true,"kind":"runtime","optional":false},{"id":6872065463,"package_name":"react","ecosystem":"npm","requirements":"^16.13.1","direct":true,"kind":"runtime","optional":false},{"id":6872065464,"package_name":"react-dom","ecosystem":"npm","requirements":"^16.13.1","direct":true,"kind":"runtime","optional":false},{"id":6872065465,"package_name":"react-grid-layout","ecosystem":"npm","requirements":"^1.3.0","direct":true,"kind":"runtime","optional":false},{"id":6872065466,"package_name":"shpjs","ecosystem":"npm","requirements":"^4.0.2","direct":true,"kind":"runtime","optional":false},{"id":6872065467,"package_name":"@babel/core","ecosystem":"npm","requirements":"^7.11.6","direct":true,"kind":"development","optional":false},{"id":6872065468,"package_name":"@babel/eslint-plugin","ecosystem":"npm","requirements":"^7.14.5","direct":true,"kind":"development","optional":false},{"id":6872065469,"package_name":"@babel/plugin-proposal-class-properties","ecosystem":"npm","requirements":"^7.10.4","direct":true,"kind":"development","optional":false},{"id":6872065470,"package_name":"@babel/preset-env","ecosystem":"npm","requirements":"^7.11.5","direct":true,"kind":"development","optional":false},{"id":6872065471,"package_name":"@babel/preset-react","ecosystem":"npm","requirements":"^7.10.4","direct":true,"kind":"development","optional":false},{"id":6872065472,"package_name":"babel-eslint","ecosystem":"npm","requirements":"^10.1.0","direct":true,"kind":"development","optional":false},{"id":6872065473,"package_name":"babel-loader","ecosystem":"npm","requirements":"^8.2.3","direct":true,"kind":"development","optional":false},{"id":6872065474,"package_name":"babel-plugin-lodash","ecosystem":"npm","requirements":"^3.3.4","direct":true,"kind":"development","optional":false},{"id":6872065475,"package_name":"buffer","ecosystem":"npm","requirements":"^6.0.3","direct":true,"kind":"development","optional":false},{"id":6872065476,"package_name":"css-loader","ecosystem":"npm","requirements":"^4.3.0","direct":true,"kind":"development","optional":false},{"id":6872065477,"package_name":"eslint","ecosystem":"npm","requirements":"^7.32.0","direct":true,"kind":"development","optional":false},{"id":6872065478,"package_name":"eslint-config-airbnb","ecosystem":"npm","requirements":"^18.2.1","direct":true,"kind":"development","optional":false},{"id":6872065479,"package_name":"eslint-plugin-import","ecosystem":"npm","requirements":"^2.25.4","direct":true,"kind":"development","optional":false},{"id":6872065480,"package_name":"eslint-plugin-jsx-a11y","ecosystem":"npm","requirements":"^6.5.1","direct":true,"kind":"development","optional":false},{"id":6872065481,"package_name":"eslint-plugin-react","ecosystem":"npm","requirements":"^7.29.2","direct":true,"kind":"development","optional":false},{"id":6872065482,"package_name":"eslint-plugin-react-hooks","ecosystem":"npm","requirements":"^4.3.0","direct":true,"kind":"development","optional":false},{"id":6872065483,"package_name":"react-svg-loader","ecosystem":"npm","requirements":"^3.0.3","direct":true,"kind":"development","optional":false},{"id":6872065484,"package_name":"style-loader","ecosystem":"npm","requirements":"^1.2.1","direct":true,"kind":"development","optional":false},{"id":6872065485,"package_name":"tern","ecosystem":"npm","requirements":"^0.23.0","direct":true,"kind":"development","optional":false},{"id":6872065486,"package_name":"webpack","ecosystem":"npm","requirements":"^5.70.0","direct":true,"kind":"development","optional":false},{"id":6872065487,"package_name":"webpack-cli","ecosystem":"npm","requirements":"^4.9.2","direct":true,"kind":"development","optional":false}]},{"ecosystem":"pypi","filepath":"requirements.txt","sha":null,"kind":"manifest","created_at":"2023-01-11T20:48:31.487Z","updated_at":"2023-01-11T20:48:31.487Z","repository_link":"https://github.com/openforis/collect-earth-online/blob/main/requirements.txt","dependencies":[{"id":6872065488,"package_name":"python-dateutil","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6872065489,"package_name":"shapely","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6872065490,"package_name":"shapely_geojson","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"clojars","filepath":"src/clj/collect_earth_online/utils/project.clj","sha":null,"kind":"manifest","created_at":"2023-09-23T05:04:51.862Z","updated_at":"2023-09-23T05:04:51.862Z","repository_link":"https://github.com/openforis/collect-earth-online/blob/main/src/clj/collect_earth_online/utils/project.clj","dependencies":[]}],"score":7.544861068658458,"created_at":"2026-03-14T09:28:55.527Z","updated_at":"2026-04-19T16:00:41.308Z","avatar_url":"https://github.com/openforis.png","language":"JavaScript","category":"Natural Resources","sub_category":"Soil and Land","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"* Collect Earth Online\n\nCrowd-sourced visual interpretation of on-demand satellite imagery\n\n** Installation Requirements\n\n*** Required\n\n- [[https://jdk.java.net][Java Development Kit (version 11, or 17)]]\n- [[https://clojure.org/guides/install_clojure][Clojure CLI tools 1.10+]]\n- [[https://www.postgresql.org/download][Postgresql (version 12)]]\n- [[https://postgis.net/install/][PostGIS (version 3.2+)]]\n- [[https://www.7-zip.org/][p7zip]]\n- [[https://nodejs.org/en/][node 18]]\n- [[https://www.python.org/downloads/][Python 3]]\n\n** Application Configuration\n\nOn startup, the CEO application reads a file called ~config.edn~ in the top level directory of this repository, which contains various user-configurable system parameters. A sample file called ~config.example.edn~ is provided with this repository to get you started. To begin, simply copy it to ~config.edn~. Then edit it according to the following sections.\n\nPlease note that you must replace all values surrounded with angle brackets (e.g., \"\u003capi-key\u003e\") with actual values for the application to work correctly. Most of the fields should be self-explanatory.\n\n** PostgreSQL Database Setup\n\n*PostgreSQL* needs to be installed on the machine that will be hosting this website. This installation task is system specific and is beyond the scope of this README, so please follow the instructions for your operating system and PostgreSQL version. However, please ensure that the database server's superuser account is named ~postgres~ and that you know its database connection password before proceeding.\n\n*** PostgreSQL Server\n\nTo confirm that PostgreSQL is running as a server on your machine, you'll need to check its ~systmed~ or ~sysvinit~ process. To figure out which you're using on your system, run ~ps -p 1 -o comm=~. Once you know if you're using ~systemd~ or ~sysvinit~, you can run the following command:\n\n#+begin_src sh\n# If you're using systemd:\nsudo systemctl status postgresql.service\n# If you're using sysvinit:\nsudo service postgresql status\n#+end_src\n\nIf it's not running, you'll need to start it by running:\n#+begin_src sh\n# If you're using systemd:\nsudo systemctl start postgresql.service\n# If you're using sysvinit:\nsudo service postgresql start\n#+end_src\n\nFinally, to ensure that your PostgreSQL server always restarts when your system reboots, you can run:\n#+begin_src sh\n# If you're using systemd:\nsudo systemctl enable postgresql.service\n# If you're using sysvinit:\nsudo update-rc.d postgresql enable\n#+end_src\n\n*** CEO Database\n\nOnce the PostgreSQL database server is running on your machine, you should navigate to the top level directory (i.e., the directory containing this README) and run the database build command as follows:\n\n#+begin_src sh\nclojure -M:build-db build-all --dev-data\n#+end_src\n\nThis will begin by creating a new database and role called ~ceo~ and then add the ~postgis~ and ~pgcrypto~ extensions to it. Next, the script will populate the database with the schemas, tables, and functions that are necessary for storing and processing ceo's data. Finally, it will load some default data into these tables that is necessary for the website to function properly. You can optionally load dev data with ~--dev-data~.  This will initialize the DB with 3 users, an imagery source, and a project.\n\nIf you wish to use a live copy of the CEO database instead of the dev data and you have a ~.dump~ file, run the following command:\n\n#+begin_src sh\nclojure -M:build-db restore -f /path/to/ceo/database/ceo-db-\u003cyear\u003e-\u003cmonth\u003e-\u003cday\u003e.dump\n#+end_src\n\n*** Performance Settings\n\nIf you want to improve the performance of your Postgresql server, one way is to visit the [[https://pgtune.leopard.in.ua/][pgtune]] website and input your system settings. This will generate a set of configuration options that you can add to the postgresql.conf file in your system-specific Postgresql data directory.\n\nIf you would like to keep these settings separate for your own reference, you can add them to a file called \"performance.conf\" that you should place in your Postgresql data directory. You can then import these settings into postgresql.conf by adding this line to the end of that file:\n\n#+begin_example\ninclude = 'performance.conf'\n#+end_example\n\nNote that the Postgresql server will need to be restarted for these changes to take effect.\n\n** Environment Variable Setup\n\nIn order for your command line shell to find the programs installed above, you will need to update your environment variables. Under GNU/Linux, *BSD, or MacOS X, you can set these through your shell's .*rc or .*profile configuration files in your $HOME directory. In a Windows environment, you will need to set either the USER (for the current user only) or SYSTEM (for any user) environment variables under your system settings menu.\n\n*** Step 1: Add JAVA_HOME\n\nOn a Unix machine using bash (e.g., GNU/Linux or MacOS X):\n\n#+begin_src sh\nexport JAVA_HOME=\u003cjdk-installation-directory\u003e\n#+end_src\n\nOn a Unix machine using csh or tcsh (e.g., *BSD):\n\n#+begin_src sh\nsetenv JAVA_HOME \u003cjdk-installation-directory\u003e\n#+end_src\n\nOn a Windows machine:\n\n#+begin_example\nJAVA_HOME = C:\\Program Files\\Java\\jdk-X.X.X\n#+end_example\n\nReplace *X.X.X* with the JDK version installed on your computer. In order to run CEO, your JDK version has to be either 11 or 17.\n\n*** Step 2: Update PATH\n\nOn a Unix machine using bash (e.g., GNU/Linux or MacOS X):\n\n#+begin_src sh\nexport PATH=$PATH:$JAVA_HOME/bin\n#+end_src\n\nOn a Unix machine using csh or tcsh (e.g., *BSD):\n\n#+begin_src sh\nsetenv PATH $PATH\\:$JAVA_HOME/bin\n#+end_src\n\nOn a Windows machine, add these entries to the PATH environment\nvariable:\n\n#+begin_example\n%JAVA_HOME%\\bin\nC:\\Program Files\\PostgreSQL\\X\\lib\nC:\\Program Files\\PostgreSQL\\X\\bin\nC:\\Program Files\\7-Zip\n#+end_example\n\nReplace *X* with the PostgreSQL version installed on your computer.\n\n** Configuration\n\nCopy ~config.default.edn~ to ~config.edn~ and update any settings that you wish. The base set of defaults should be sufficient to run CEO in a development setting.\n\n** Python dependencies\n\nUse ~pip~ to install dependencies.  The python / clj interop does not support virtual environments.\n\n#+begin_src sh\npip install -r requirements.txt\npip install earthengine-api --upgrade\n#+end_src\n\n** Development Web Server\n\n*** Google Earth Engine authentication\n\nYou will need a Google Earth Engine account to use the GeoDash. To apply for a GEE account, visit https://signup.earthengine.google.com/#!/. Once you receive an account, you can store local authentication information with:\n\n#+begin_src sh\nearthengine authenticate\n#+end_src\n\nThis command will open a window in your browser containing a key that you should copy and paste back into your terminal. You do not need to update the ~:gee~ section of ~config.edn~ if you use this method. If the above method is giving you issues, try following [[the official step-by-step instructions provided by Google][https://developers.google.com/earth-engine/guides/python_install#expandable-2]].\n\n*** Modifying hosts file\n\nAdd the following line to your hosts file. This local URL should be used for local development in place of ~localhost~ due to CORS settings on CEO's Mapbox account.\n\n#+begin_src sh\n127.0.0.1 local.collect.earth\n#+end_src\n\n*** Create accounts\n\nTo be able to crate accounts without having to send email for confirmation, set ~:auto-validate?~ of ~:mail~ to ~true~ in ~config.edn~.\n\nThere can only be one superuser account with ~user_uid~ of ~1~ ~adminstrator~ flag set to ~true~. Activating this flag for other users can cause their queries to sometimes not return the full result, as some of those queries assume only one root superuser to be existing.\n\n*** Compile and run\n\nTo compile and run the web application, navigate to the top level project directory and run:\n\n#+begin_src sh\nnpm install\nnpm run vite-dev\n#+end_src\n\nNow, in a separate terminal window (because webpack needs to be running in the background), run the following commands:\n\n#+begin_src sh\nnpm run server-dev\n#+end_src\n\nThe website will then be available at http://localhost:8080 unless a port is specified. These can also be configured using the ~:server~ section in your ~config.edn~ file. When using the ~clojure -M:server start~ command (which is what ~npm run server-dev~ is an alias for) an http port can be specified with -p and an https port can be specified with -P. In dev mode, server-side exceptions will be displayed in the browser and JavaScript source files will be reloaded whenever you refresh the page.\n\nGoing forward you will usually only need to run ~npm run webpack-dev~ and ~npm run server-dev~ (still in separate terminals) to get your dev environment set up.  Watch for updates to SQL files or ~package.json~ and run ~npm run build-db-functions~ or ~npm install~ respectively.\n\n*** Checking for Reflection Warnings\n\nFrom the top level project directory run:\n\n#+begin_src sh\nclojure -M:check-reflection\n#+end_src\n\nThis will emit warnings when reflection is needed to resolve Java method calls or field accesses. To resolve any that appear, add [[https://clojure.org/reference/java_interop#typehints][type hints]] to your code. Resolving all reflection warnings can improve system performance.\n\n** Production Web Server\n\n*** Sessions\n\nIt is very important to change the default ~:session-key~ in ~config.edn~.  This key is used to encrypt user session data and should be unique to each deployment. The key must be exactly 16 characters long.\n\n*** Email Server\n\nTo set up the email server for system emails, open the \"config.edn\" file in the root directory of the application. Edit the default EDN object containing server details to the file, replacing the values with your own.\n\n*** Enabling HTTPS (optional)\n\nTo enable HTTPS from within the server, view the [[https://github.com/sig-gis/triangulum#triangulumhttps][Triangulum HTTPS]] page for further instructions on enabling HTTPS.\n\n*** Google Earth Engine service account\n\nFor production it is recommended that you use a service account with a key file. You can obtain your key file by logging into your service account, navigating to the account menu, and clicking \"Create key \u003e JSON\". Then, download that JSON key file and place it in the root directory of CEO. Set the email for your service account and key path in the ~:gee~ section of config.edn.\n\n#+begin_src text\n:gee {:ee-account  \"example@gmail.com\"\n      :ee-key-path \"ceo-gee-key.json\"}\n#+end_src\n\n*** Launching the Web Server\n\nTo compile and run the web application, navigate to the top level project directory and run:\n\n#+begin_src sh\nnpm install\nnpm run webpack-prod\nclojure -M:build-db functions -d ceo\nclojure -M:server start -m [dev|prod] [-p 8080] [-P 8443] [-r]\n#+end_src\n\nThe website will then be available at http://localhost:8080 unless a port is specified. These can also be configured using the ~:server~ section in your ~config.edn~ file. An http port can be specified with -p and an https port can be specified with -P. In dev mode, server-side exceptions will be displayed in the browser and Clojure source files will be reloaded whenever you refresh the page. These features are disabled in prod mode. If -m is unspecified, it will default to prod mode.\n\n*** Running the Web Server as a System Service\n\nView the [[https://github.com/sig-gis/triangulum#triangulumsystemd][Triangulum Systemd]] page for further instructions on enabling the app as a system service.\n\n*** Maintaining Daily Logs\n\nBy default the server will log to standard out. If you would like to have the system log to YYYY-DD-MM.log, use the \"-o path\" option to specify an output path. You can either specify a path relative to the top level directory of this repository or an absolute path on your filesystem. The logger will keep the 10 most recent logs.\n\n*** Using the Announcement Banner\n\nOn each page load clojure will read the value of ~announcement.txt~. If text is found, the value will be inserted into a HTML element that displays as a red banner at the top of the page. To add a new announcement, edit ~announcement.txt~ and add a new message.  To remove the announcement, edit ~announcement.txt~ and remove all text.\n\n** Contact\n\n*Authors:*\n- [[mailto:dsaah@sig-gis.com][David S. Saah (SIG)]]\n- [[mailto:mspencer@sig-gis.com][Matt Spencer (SIG)]]\n- [[mailto:gjohnson@sig-gis.com][Gary W. Johnson (SIG)]]\n- [[mailto:billy.ashmall@nasa.gov][Billy Ashmall (NASA)]]\n- [[mailto:roberto.fontanarosa@fao.org][Roberto Fontanarosa (FAO)]]\n- [[mailto:obaldwinedwards@sig-gis.com][Oliver Baldwin Edwards (SIG)]]\n- [[mailto:githika.tondapu@nasa.gov][Githika Tondapu (NASA)]]\n- [[mailto:stefano.ricci@fao.org][Stefano Ricci (FAO)]]\n- [[mailto:alfonso.sanchezpausdiaz@fao.org][Alfonso SanchezPausDiaz (FAO)]]\n- [[mailto:bbhandari@sig-gis.com][Biplov Bhandari (SIG)]]\n\n** License and Distribution\n\nCopyright © 2016-2022 FAO.\n\nCollect Earth Online is distributed by FAO under the terms of the MIT License. See LICENSE in this directory for more information.\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["chirps","climate","climateserv","emodis","esi","imerg","ndvi","servir","servirglobal"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/348408","html_url":"https://ost.ecosyste.ms/projects/348408"}