{"id":30580804,"url":"https://github.com/akvo/akvo-lumen","last_synced_at":"2025-08-29T05:42:50.355Z","repository":{"id":38184818,"uuid":"44529983","full_name":"akvo/akvo-lumen","owner":"akvo","description":"Make sense of your data","archived":false,"fork":false,"pushed_at":"2023-03-02T11:32:23.000Z","size":35428,"stargazers_count":62,"open_issues_count":9,"forks_count":18,"subscribers_count":15,"default_branch":"master","last_synced_at":"2023-03-10T21:48:01.731Z","etag":null,"topics":["agplv3","akvo","akvo-lumen","clojure","d3","data-cleaning","data-visualization","react"],"latest_commit_sha":null,"homepage":"https://akvo.org/akvo-lumen","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/akvo.png","metadata":{"files":{"readme":"README.dev.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-10-19T11:25:53.000Z","updated_at":"2022-10-19T17:55:37.000Z","dependencies_parsed_at":"2023-01-26T09:31:15.086Z","dependency_job_id":null,"html_url":"https://github.com/akvo/akvo-lumen","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"purl":"pkg:github/akvo/akvo-lumen","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akvo%2Fakvo-lumen","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akvo%2Fakvo-lumen/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akvo%2Fakvo-lumen/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akvo%2Fakvo-lumen/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/akvo","download_url":"https://codeload.github.com/akvo/akvo-lumen/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akvo%2Fakvo-lumen/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272636933,"owners_count":24967987,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-29T02:00:10.610Z","response_time":87,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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"}},"keywords":["agplv3","akvo","akvo-lumen","clojure","d3","data-cleaning","data-visualization","react"],"created_at":"2025-08-29T05:42:49.689Z","updated_at":"2025-08-29T05:42:50.328Z","avatar_url":"https://github.com/akvo.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Development setup\n\nAkvo Lumen provides a Docker Compose file to start the whole system in development mode.\n\nThis Docker Compose environment will have:\n\n- Two tenants\n- A KeyCloak server with some accounts setup\n- A PostgreSQL DB\n- A Backend server with a REPL\n- A Client with hot reloading\n- A Windshaft server\n- A Redis DB\n\n## Hosts\nAkvo Lumen is a multi tenant system and to do enable local routing to the tenants\nthe following hosts must be defined in your /etc/hosts file:\n\n``` sh\n127.0.0.1 t1.lumen.local\n127.0.0.1 t2.lumen.local\n127.0.0.1 auth.lumen.local\n```\nOr just\n\n\n    sudo sh -c 'echo \"127.0.0.1 t1.lumen.local t2.lumen.local auth.lumen.local\" \u003e\u003e /etc/hosts'\n\n\n## Start development environment\n\nBefore starting the following ports that must be free: 8080, 3000, 3030, 47480, 5432\n\nTo start:\n\n```sh\ndocker-compose up --build -d \u0026\u0026 docker-compose logs -f --tail=10\n```\n\nTo stop:\n\n```sh\ndocker-compose down -v\n```\n\n## User\nTo add your email and use Google as authenticator run the local-admin script.\n```\n./backend/dev_helpers/local-admin.sh \u003cemail\u003e\n```\n\n## Keycloak\n\nKeycloack is available at http://auth.lumen.local:8080/\n\nThe admin password for keycloak is \"admin\" / \"password\". There is an \"akvo\" realm, where two tenants (t1 \u0026 t2) and they are represesnted by the following groups:\n\n```\nakvo\n└── lumen\n    ├── t1\n    │   └── admin\n    └── t2\n        └── admin\n```\n\nAvailable users are:\n\n- \"lumen\" service account\n- \"jerome\" t1 admin\n- \"salim\" t1 user\n- \"ruth\" t2 admin\n- \"harry\" t2 user\n- \"kaj\" keycloak user not on a tenant\n\nAll passwords are \"password\".\n\n## Client\n\nThe Akvo Lumen UI should be accessible at:\n\n - http://t1.lumen.local:3030/\n - http://t2.lumen.local:3030/\n\nThe Docker Compose file mounts the \"client\" directory, so any changes in the source directory should\nbe picked up automatically by the Webpack server.\n\n#### Tests\n\nRun:\n\n```sh\ndocker-compose exec client npm test\n```\n\n## Backend\n\nThe tenants api root should be accessible at\n - http://t1.lumen.local:3000/api\n - http://t2.lumen.local:3000/api\n\nHitting that endpoint should print the tenants dns label and connection pool.\n\nA Clojure REPL should be available on port 47480.\n\n## Puppeteer\n\nTo run the test of the puppeteer user simulator, just go to lumen main\nfolder and run:\n\n```sh\n./ci/e2e-test.sh\n```\n\n#### Tests\n\nTo run the tests, either do it from the REPL or run:\n\n```sh\ndocker-compose exec backend lein test\n```\n\n#### Postgres\n\nTo connect to the postgres server connect using something like:\n```sh\ndocker-compose exec backend psql --host=akvo-lumen_postgres_1 --port=5432 --dbname=lumen_tenant_1 --username=lumen --password\n```\n\nTo enable postgres SQL statement logging execute:\n\n```sh\n./backend/dev_helpers/enable-pg-logging.sh\n```\n\n## Windshaft\n\nThis container has a development version of the Windshaft container, with plenty of hardcoded assumptions.\n\nThe Windshaft server is not exposed directly to the external world, but it is proxied by the Webpack server\non the url http://t1.lumen.local:3030/maps/**. That url forwards the requests to \"windshaft:4000\".\n\n## Legal\nCopyright © 2016 - present Akvo Foundation\n\n\n### Thanks\n\u003cimg src=\"http://www.browserstack.com/images/layout/browserstack-logo-600x315.png\" width=\"280\"/\u003e\n\n[BrowserStack](http://www.browserstack.com) is supporting Akvo, allowing us to use their service and infrastructure to test the code in this repository. Thank you for supporting the open source community!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakvo%2Fakvo-lumen","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fakvo%2Fakvo-lumen","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakvo%2Fakvo-lumen/lists"}