OpenLitterMap
An open, interactive and accessible database of the world's litter and plastic pollution.
https://github.com/OpenLitterMap/openlittermap-web
Category: Industrial Ecology
Sub Category: Circular Economy and Waste
Keywords from Contributors
transforms measur optimize observation compose archiving projection conversion generic animals
Last synced: about 24 hours ago
JSON representation
Repository metadata
https://opengeospatialdata.springeropen.com/articles/10.1186/s40965-018-0050-y
- Host: GitHub
- URL: https://github.com/OpenLitterMap/openlittermap-web
- Owner: OpenLitterMap
- License: gpl-3.0
- Created: 2020-08-19T23:19:26.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2026-04-04T19:28:09.000Z (3 days ago)
- Last Synced: 2026-04-04T22:32:52.816Z (3 days ago)
- Language: PHP
- Homepage: https://openlittermap.com
- Size: 195 MB
- Stars: 129
- Watchers: 7
- Forks: 42
- Open Issues: 72
- Releases: 1
-
Metadata Files:
- Readme: README.md
- Funding: FUNDING.json
- License: LICENSE
README.md
OpenLitterMap
Open-source platform for mapping litter and plastic pollution.
Built in Cork, Ireland. Used in 110+ countries. 500,000+ geotagged observations. 850,000+ classified tags. Cited in 98+ peer-reviewed publications including Nature and the World Bank. Previously identified as a Digital Public Good by the Digital Public Goods Alliance.
Code: GPL v3 | Data: ODbL | Privacy: Anonymous by default
Tech Stack
- Backend: PHP 8.2, Laravel 11
- Frontend: Vue 3 (Composition API), Pinia, Vue Router 4, Tailwind CSS 3, Vite 6
- Database: MySQL 5.7+, Redis 7+
- Auth: Laravel Passport + Sanctum
- Real-time: Laravel Reverb (WebSockets)
- Storage: AWS S3 (prod), MinIO (dev)
- Payments: Stripe via Laravel Cashier
Getting Started
Prerequisites
- PHP 8.2+, Composer
- Node v20.20.0, npm v10.8.2
- MySQL 5.7+, Redis 7+
- Laravel Valet (macOS)
Install
git clone https://github.com/OpenLitterMap/openlittermap-web.git
cd openlittermap-web
composer install
npm install
cp .env.example .env
php artisan key:generate
php artisan migrate
php artisan db:seed
HTTPS with Valet
The app runs at https://olm.test. Set up Valet:
valet trust
valet secure olm
valet restart
Update .env:
APP_URL=https://olm.test
See readme/Setup.md for Reverb TLS configuration and troubleshooting.
Start Everything
The app needs several processes running at once. Create a startup script:
1. Create the script:
mkdir -p ~/scripts
cat > ~/scripts/olm.sh << 'SCRIPT'
#!/bin/zsh
# Update this to your project directory
PROJECT_DIR="/Users/youruser/Code/openlittermap-web"
open_new_tab() {
local command="$1"
osascript <<EOF
tell application "Terminal"
activate
tell application "System Events"
tell process "Terminal"
keystroke "t" using command down
delay 0.2
end tell
end tell
do script "cd $PROJECT_DIR && $command" in front window
end tell
EOF
}
open_new_tab "npm run dev"
open_new_tab "php artisan reverb:start"
open_new_tab "php artisan queue:work"
open_new_tab "php artisan horizon"
open_new_tab "php artisan tinker"
open_new_tab "php artisan serve --host=0.0.0.0 --port=8000"
# Open browser
if [ -x "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser" ]; then
open -a "Brave Browser" "https://olm.test"
elif [ -x "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" ]; then
open -a "Google Chrome" "https://olm.test"
else
open "https://olm.test"
fi
SCRIPT
chmod +x ~/scripts/olm.sh
2. Add to your PATH (in ~/.zshrc):
export PATH=$PATH:~/scripts
3. Run it:
olm.sh
This opens a terminal tab for each process and launches the browser:
| Tab | Command | Purpose |
|---|---|---|
| Vite | npm run dev |
Frontend HMR |
| Reverb | php artisan reverb:start |
WebSocket server |
| Queue | php artisan queue:work |
Background jobs |
| Horizon | php artisan horizon |
Queue dashboard |
| Tinker | php artisan tinker |
PHP REPL for debugging |
| Serve | php artisan serve --host=0.0.0.0 --port=8000 |
HTTP server for mobile dev |
Running Tests
php artisan test # All tests (~1000+)
php artisan test tests/Feature/Teams/CreateTeamTest.php # Single file
php artisan test --filter=test_method_name # Single test
Project Structure
app/
Actions/ # Command-pattern action classes
Http/Controllers/ # Thin controllers
Http/Requests/ # Form request validation
Http/Resources/ # API response transformers
Models/ # Eloquent models
Services/ # Business logic (MetricsService, ClassifyTagsService, etc.)
Enums/ # VerificationStatus, CategoryKey, etc.
resources/js/
views/ # Page components (by feature)
components/ # Reusable components
stores/ # Pinia stores
router/index.js # Vue Router config
langs/ # Translation files (i18n)
routes/
api.php # API routes (v3)
web.php # SPA catch-all
tests/
Feature/ # Integration tests
Unit/ # Unit tests
Documentation
Detailed docs live in readme/:
| Doc | What it covers |
|---|---|
| Setup.md | Full local dev setup, HTTPS, Reverb TLS, troubleshooting |
| API.md | API endpoint reference (source of truth for all contracts) |
| Tags.md | Tagging system, categories, litter objects |
| Teams.md | Teams, permissions, safeguarding |
| SchoolPipeline.md | School approval pipeline |
| Metrics.md | Metrics pipeline and aggregation |
| Clustering.md | Map clustering system |
| Leaderboards.md | Leaderboard system |
| XP.md | XP scoring and levels |
| Admin.md | Admin verification system |
| Profile.md | User profile, privacy, account deletion |
| Upload.md | Photo upload pipeline |
| Locations.md | Location and geography system |
| Terms.md | Terms & Conditions |
| Privacy.md | Privacy Policy (GDPR) |
Contributing
- Fork the repo
- Create a branch:
git checkout -b feature/your-feature - Make your changes, add tests
- Submit a pull request
File issues and feature requests at github.com/OpenLitterMap.
Links
- Website: openlittermap.com
- Global Map: openlittermap.com/global
- Training: LitterWeek.org
- Contact: info@openlittermap.com
Owner metadata
- Name: OpenLitterMap
- Login: OpenLitterMap
- Email: info@openlittermap.com
- Kind: organization
- Description: Join us and share data
- Website: https://openlittermap.com
- Location: Cork, Ireland
- Twitter: OpenLitterMap
- Company:
- Icon url: https://avatars.githubusercontent.com/u/62770201?v=4
- Repositories: 2
- Last ynced at: 2023-03-05T06:42:33.652Z
- Profile URL: https://github.com/OpenLitterMap
GitHub Events
Total
- Delete event: 15
- Pull request event: 21
- Fork event: 4
- Watch event: 7
- Issue comment event: 3
- Push event: 173
- Pull request review event: 4
- Create event: 17
Last Year
- Delete event: 12
- Pull request event: 6
- Fork event: 3
- Watch event: 5
- Issue comment event: 1
- Push event: 131
- Pull request review event: 2
- Create event: 4
Committers metadata
Last synced: 3 days ago
Total Commits: 2,660
Total Committers: 27
Avg Commits per committer: 98.519
Development Distribution Score (DDS): 0.268
Commits in past year: 305
Committers in past year: 2
Avg Commits per committer in past year: 152.5
Development Distribution Score (DDS) in past year: 0.003
| Name | Commits | |
|---|---|---|
| xlcrr | i****o@o****m | 1948 |
| geni_jaho | j****i@g****m | 436 |
| lley154 | l****y@c****a | 57 |
| Sthefane | s****a@o****m | 53 |
| Trung Luu | l****7@g****m | 26 |
| greallra | g****a@t****e | 20 |
| José P. Gómez B | j****b@h****m | 20 |
| Kamil Michalski | k****9@g****m | 19 |
| dependabot[bot] | 4****] | 16 |
| William Alexander | w****6@g****m | 13 |
| Steenbergen | s****d@g****m | 13 |
| Steenbergen | f****n@c****m | 5 |
| Mike Dougllas | m****s@g****m | 4 |
| Joseph | 3****n | 3 |
| Sahil Bhatia | s****1@g****m | 3 |
| SmashedFinger | 4****r | 3 |
| TehBuckets | d****8@g****m | 3 |
| Trung Luu Hoang | t****g@p****m | 3 |
| Sthefane Oliveira | s****a@S****l | 3 |
| Sean Lynch | s****h@S****l | 3 |
| Joseph Shepin | j****n@g****m | 2 |
| omahs | 7****s | 2 |
| Brautantoine | a****t@g****m | 1 |
| José P. Gómez B | j****b@g****m | 1 |
| Kevin Makwana | k****9@g****m | 1 |
| Lawrence Ley | l****y@c****a | 1 |
| Ocheretovich | o****h@g****m | 1 |
Committer domains:
- contetxtsolutions.ca: 1
- pycogroup.com: 1
- capgemini.com: 1
- tcd.ie: 1
- contextsolutions.ca: 1
- openlittermap.com: 1
Issue and Pull Request metadata
Last synced: 1 day ago
Total issues: 151
Total pull requests: 534
Average time to close issues: 5 months
Average time to close pull requests: 25 days
Total issue authors: 12
Total pull request authors: 22
Average comments per issue: 1.06
Average comments per pull request: 0.31
Merged pull request: 426
Bot issues: 0
Bot pull requests: 65
Past year issues: 0
Past year pull requests: 9
Past year average time to close issues: N/A
Past year average time to close pull requests: 2 days
Past year issue authors: 0
Past year pull request authors: 3
Past year average comments per issue: 0
Past year average comments per pull request: 0.0
Past year merged pull request: 4
Past year bot issues: 0
Past year bot pull requests: 2
Top Issue Authors
- FredMark (107)
- xlcrr (27)
- GeniJaho (4)
- zorae (3)
- petya-kangalova (2)
- IlanLuci (2)
- aliman80 (1)
- sudoDeznit (1)
- willalexander (1)
- DarkNormal (1)
- GrazianoC (1)
- gioman (1)
Top Pull Request Authors
- xlcrr (217)
- GeniJaho (144)
- dependabot[bot] (65)
- brazilsunshine (18)
- lhtrung307 (16)
- FredMark (15)
- Xamyrz (11)
- lley154 (7)
- JosephShepin (7)
- greallra (7)
- jpablogomezb (7)
- willalexander (4)
- SmashedFinger (3)
- omahs (2)
- AdamDetki (2)
Top Issue Labels
- good first issue (18)
- bug (13)
- help wanted (12)
- enhancement (12)
- work in progress (1)
- documentation (1)
Top Pull Request Labels
- dependencies (65)
- to review (60)
- javascript (36)
- php (28)
- work in progress (15)
- help wanted (12)
- bug (8)
- good first issue (7)
- changes requested (4)
- enhancement (4)
- review done (3)
- parked (3)
- In review (3)
- Wen merge? (2)
- Ready to merge (2)
- Bullish (1)
- AI superhack (1)
- performance (1)
- moon request (1)
- Next Major Release (1)
- documentation (1)
Dependencies
- actions/checkout v2 composite
- shivammathur/setup-php 15c43e89cdef867065b0213be354c2841860869e composite
- mysql 5.7 docker
- redis * docker
- babel-cli ^6.24.0 development
- babel-core ^6.26.3 development
- babel-plugin-add-module-exports ^0.2.1 development
- babel-plugin-istanbul ^2.0.1 development
- babel-plugin-transform-es2015-modules-commonjs ^6.26.2 development
- babel-preset-es2015 ^6.3.13 development
- babel-preset-es2017 ^6.22.0 development
- babelify ^8.0.0 development
- benchmark ^2.1.1 development
- bluebird ^3.4.6 development
- browserify ^16.2.2 development
- chai ^4.1.2 development
- cheerio ^0.22.0 development
- coveralls ^3.0.1 development
- es6-promise ^2.3.0 development
- eslint ^2.13.1 development
- fs-extra ^0.26.7 development
- gh-pages-deploy ^0.5.0 development
- jsdoc ^3.4.0 development
- karma ^2.0.2 development
- karma-browserify ^5.2.0 development
- karma-firefox-launcher ^1.1.0 development
- karma-mocha ^1.2.0 development
- karma-mocha-reporter ^2.2.0 development
- mocha ^5.2.0 development
- native-promise-only ^0.8.0-a development
- nyc ^11.8.0 development
- rimraf ^2.5.0 development
- rollup ^0.36.3 development
- rollup-plugin-node-resolve ^2.0.0 development
- rollup-plugin-npm ^2.0.0 development
- rsvp ^3.0.18 development
- semver ^5.5.0 development
- uglify-js ~2.7.3 development
- yargs ^11.0.0 development
- lodash ^4.17.14
- eslint 3.10.2 development
- eslint-config-standard 6.2.1 development
- eslint-plugin-markdown 1.0.0-beta.3 development
- eslint-plugin-promise 3.4.0 development
- eslint-plugin-standard 2.0.1 development
- istanbul 0.4.5 development
- mocha 1.21.5 development
- eslint ^5.2.0 development
- eslint-config-google ^0.11.0 development
- expect.js 0.1.x development
- mocha 1.3.x development
- @babel/cli ^7.0.0 development
- @babel/core ^7.0.0 development
- @babel/preset-env ^7.0.0 development
- browserify 14.4.0 development
- chai ^3.5.0 development
- concurrently ^3.1.0 development
- coveralls ^3.0.2 development
- istanbul ^0.4.5 development
- karma ^3.0.0 development
- karma-chai ^0.1.0 development
- karma-mocha ^1.3.0 development
- karma-phantomjs-launcher ^1.0.2 development
- mocha ^5.2.0 development
- mocha-lcov-reporter ^1.2.0 development
- rimraf ^2.5.4 development
- xo ^0.23.0 development
- ms ^2.1.1
- eol ^0.9.1 development
- eslint ^3.19.0 development
- eslint-config-airbnb-base ^11.3.2 development
- eslint-plugin-import ^2.14.0 development
- express ^4.16.3 development
- mkdirp ^0.5.0 development
- request ^2.88.0 development
- tap ^12.0.1 development
- he ^1.1.1
- mime ^1.6.0
- minimist ^1.1.0
- url-join ^2.0.5
- assume ^2.2.0 development
- browserify ^16.5.0 development
- mocha ^8.0.1 development
- nyc ^15.1.0 development
- pre-commit ^1.2.0 development
- sauce-browsers ^2.0.0 development
- sauce-test ^1.3.3 development
- uglify-js ^3.9.0 development
- concat-stream ^2.0.0 development
- eslint ^5.16.0 development
- express ^4.16.4 development
- lolex ^3.1.0 development
- mocha ^6.0.2 development
- nyc ^14.1.1 development
- codecov.io ^0.1.6 development
- grunt ^0.4.5 development
- grunt-cli ^1.3.1 development
- grunt-shell ^1.1.1 development
- grunt-template ^0.2.3 development
- istanbul ^0.4.2 development
- jsesc ^1.0.0 development
- lodash ^4.8.2 development
- qunit-extras ^1.4.5 development
- qunitjs ~1.11.0 development
- regenerate ^1.2.1 development
- regexgen ^1.3.0 development
- requirejs ^2.1.22 development
- sort-object ^3.0.2 development
- async ^3.0.0 development
- auto-changelog ^1.15.0 development
- concat-stream ^2.0.0 development
- expect.js ~0.3.1 development
- mocha ^3.5.3 development
- nyc ^14.0.0 development
- semver ^5.0.3 development
- socket.io ^2.1.0 development
- socket.io-client ^2.1.0 development
- sse 0.0.8 development
- ws ^3.0.0 development
- eventemitter3 ^4.0.0
- follow-redirects ^1.0.0
- requires-port ^1.0.0
- common-style ^3.0.0 development
- request ^2.88.2 development
- vows ~0.8.3 development
- basic-auth ^1.0.3
- colors ^1.4.0
- corser ^2.0.1
- ecstatic ^3.3.2
- http-proxy ^1.18.0
- minimist ^1.2.5
- opener ^1.5.1
- portfinder ^1.0.25
- secure-compare 3.0.1
- union ~0.5.0
- eslint ^5.5.0 development
- eslint-config-mourner ^3.0.0 development
- esm ^3.0.82 development
- rollup ^0.65.2 development
- rollup-plugin-buble ^0.19.2 development
- rollup-plugin-terser ^2.0.2 development
- tape ^4.9.1 development
- github-release-notes 0.13.1 development
- mime-db 1.31.0 development
- mime-score 1.1.0 development
- covert ^1.0.0 development
- tap ~0.4.0 development
- tape ^3.5.0 development
- mock-fs ^3.7.0 development
- tap ^5.4.2 development
- minimist ^1.2.5
- eslint 4.12.1 development
- expect.js 0.3.1 development
- husky 0.14.3 development
- lint-staged 5.0.0 development
- mocha 4.0.1 development
- eslint ^7.7.0 development
- glob ^7.1.4 development
- vows ^0.8.2 development
- async ^2.6.2
- debug ^3.1.1
- mkdirp ^0.5.5
- @ljharb/eslint-config ^16.0.0 development
- browserify ^16.5.1 development
- covert ^1.1.1 development
- eclint ^2.8.1 development
- eslint ^6.8.0 development
- evalmd ^0.0.19 development
- for-each ^0.3.3 development
- has-symbols ^1.0.1 development
- iconv-lite ^0.5.1 development
- mkdirp ^0.5.4 development
- object-inspect ^1.7.0 development
- qs-iconv ^1.0.4 development
- safe-publish-latest ^1.1.4 development
- safer-buffer ^2.1.2 development
- tape ^5.0.0 development
- assume 1.3.x development
- istanbul 0.4.x development
- mocha 2.3.x development
- pre-commit 1.1.x development
- chai ^2.2.0 development
- mocha ^2.2.1 development
- @rollup/plugin-buble ^0.21.3 development
- @rollup/plugin-node-resolve ^8.0.0 development
- c8 ^7.1.2 development
- eslint ^7.1.0 development
- eslint-config-mourner ^3.0.0 development
- esm ^3.2.25 development
- mkdirp ^1.0.4 development
- rollup ^2.12.0 development
- rollup-plugin-terser ^6.1.0 development
- tape ^5.0.1 development
- kdbush ^3.0.0
- connect 2.22.x development
- director 1.x.x development
- ecstatic 0.5.x development
- request 2.29.x development
- vows 0.8.0 development
- qs ^6.4.0
- mocha ^3.2.0 development
- should ~1.2.1 development
- async 2.6.4 development
- basic-auth 1.1.0 development
- colors 1.4.0 development
- corser 2.0.1 development
- debug 3.2.6 development
- ecstatic 3.3.2 development
- eventemitter3 4.0.7 development
- follow-redirects 1.14.8 development
- he 1.2.0 development
- http-proxy 1.18.1 development
- http-server 0.12.3 development
- lodash 4.17.21 development
- mime 1.6.0 development
- minimist 1.2.6 development
- mkdirp 0.5.5 development
- ms 2.1.2 development
- opener 1.5.2 development
- portfinder 1.0.28 development
- qs 6.9.4 development
- requires-port 1.0.0 development
- secure-compare 3.0.1 development
- union 0.5.0 development
- url-join 2.0.5 development
- fs 0.0.1-security
- kdbush 3.0.0
- supercluster 7.1.0
- http-server ^0.12.3 development
- fs 0.0.1-security
- supercluster ^7.1.0
- 1235 dependencies
- axios ^0.21 development
- cross-env ^7.0.3 development
- eslint ^7.14.0 development
- eslint-plugin-vue ^7.1.0 development
- laravel-mix ^5.0.1 development
- lodash ^4.17.21 development
- resolve-url-loader ^3.1.0 development
- sass ^1.15.2 development
- sass-loader ^8.0.0 development
- vue-eslint-parser ^7.1.1 development
- vue-template-compiler ^2.6.11 development
- @turf/hex-grid ^6.0.2
- @turf/turf ^5.1.6
- animate.css ^4.1.0
- animated-number-vue ^1.0.0
- buefy ^0.9.1
- bulma ^0.9.0
- chart.js ^2.9.3
- eslint ^7.15.0
- eslint-plugin-vue ^7.3.0
- fs 0.0.1-security
- laravel-echo ^1.8.1
- laravel-permission-to-vuejs ^2.0.5
- leaflet ^1.7.1
- leaflet-timedimension ^1.1.1
- leaflet-webgl-heatmap github:xlcrr/leaflet-webgl-heatmap
- leaflet.glify ^3.1.0
- leaflet.markercluster ^1.4.1
- lodash.sortby ^4.7.0
- mapbox-gl ^1.12.0
- moment ^2.27.0
- pusher-js ^4.4.0
- supercluster ^7.1.0
- v-img ^0.2.0
- v-mask ^2.2.3
- vue ^2.6.11
- vue-chartjs ^3.5.0
- vue-click-outside ^1.1.0
- vue-drag-resize ^1.4.2
- vue-draggable-resizable ^2.3.0
- vue-echo-laravel 0.0.6
- vue-fullscreen ^2.2.0
- vue-functional-calendar ^2.9.2
- vue-i18n ^8.21.0
- vue-loading-overlay ^3.3.3
- vue-localstorage ^0.6.2
- vue-mapbox ^0.4.1
- vue-number-animation ^1.0.5
- vue-paginate ^3.6.0
- vue-recaptcha ^1.3.0
- vue-router ^3.4.3
- vue-select ^3.10.8
- vue-simple-suggest ^1.10.3
- vue-slider-component ^3.2.5
- vue-stripe-checkout ^3.5.7
- vue-stripe-elements-plus ^0.3.2
- vue-sweetalert2 ^3.0.6
- vue-toastify ^1.8.0
- vue2-dropzone ^3.6.0
- vue2-leaflet ^2.5.2
- vue2-leaflet-markercluster ^3.1.0
- vuedraggable ^2.24.3
- vuex ^3.5.1
- vuex-persistedstate ^3.1.0
- barryvdh/laravel-debugbar ^3.6 development
- coreproc/laravel-debugbar-git-info ^0.1.1 development
- facade/ignition ^2.3.6 development
- fzaninotto/faker ^1.9.1 development
- mockery/mockery ^1.3.1 development
- nunomaduro/collision ^5.0 development
- phpunit/phpunit ^9.0 development
- ahmedsaoud31/laravel-permission-to-vuejs dev-master
- anhskohbo/no-captcha ^3.3
- benjamincrozat/laravel-dropbox-driver ^3.0
- beyondcode/laravel-websockets ^1.8
- doctrine/dbal ^2.10
- ext-json *
- fideloper/proxy ^4.2
- fruitcake/laravel-cors ^2.0
- gpressutto5/laravel-slack ^2.2
- guzzlehttp/guzzle ^7.0.1
- intervention/image ^2.7
- laravel/cashier ^12.3
- laravel/framework ^8.0
- laravel/helpers ^1.2
- laravel/horizon ^5.0
- laravel/passport ^10.0
- laravel/slack-notification-channel ^2.3
- laravel/tinker ^2.0
- laravel/ui ^3.0
- league/flysystem-aws-s3-v3 ^1.0
- maatwebsite/excel ^3.1
- php ^7.3
- pragmarx/firewall ^2.3
- predis/predis ^1.1
- pusher/pusher-php-server ~3.0
- schuppo/password-strength ^2.1
- spatie/laravel-backup ^6.16
- spatie/laravel-permission ^4.0
- stripe/stripe-php ^7.49
- youthage/laravel-geohash ^3.1
- 182 dependencies
Score: 8.599141774063405