{"id":41325709,"url":"https://github.com/grrrisu/thundermoon-umbrella","last_synced_at":"2026-01-23T06:06:46.360Z","repository":{"id":36977849,"uuid":"189610618","full_name":"grrrisu/thundermoon-umbrella","owner":"grrrisu","description":"some simulation examples using phoenix live view","archived":false,"fork":false,"pushed_at":"2025-10-25T07:01:36.000Z","size":4292,"stargazers_count":7,"open_issues_count":18,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-25T08:26:14.347Z","etag":null,"topics":["elixir","hacktoberfest","lotka-volterra","phoenix-framework","phoenix-live","phoenix-live-view"],"latest_commit_sha":null,"homepage":"https://thundermoon.zero-x.net","language":"Elixir","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/grrrisu.png","metadata":{"files":{"readme":"README.md","changelog":"changelog.md","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":"2019-05-31T14:47:35.000Z","updated_at":"2025-10-25T07:00:11.000Z","dependencies_parsed_at":"2024-06-03T08:13:56.394Z","dependency_job_id":"13edb984-314c-4f55-9417-77cacc911971","html_url":"https://github.com/grrrisu/thundermoon-umbrella","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/grrrisu/thundermoon-umbrella","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grrrisu%2Fthundermoon-umbrella","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grrrisu%2Fthundermoon-umbrella/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grrrisu%2Fthundermoon-umbrella/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grrrisu%2Fthundermoon-umbrella/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/grrrisu","download_url":"https://codeload.github.com/grrrisu/thundermoon-umbrella/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grrrisu%2Fthundermoon-umbrella/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28681853,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-23T05:48:07.525Z","status":"ssl_error","status_checked_at":"2026-01-23T05:48:07.129Z","response_time":59,"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"}},"keywords":["elixir","hacktoberfest","lotka-volterra","phoenix-framework","phoenix-live","phoenix-live-view"],"created_at":"2026-01-23T06:06:45.537Z","updated_at":"2026-01-23T06:06:46.356Z","avatar_url":"https://github.com/grrrisu.png","language":"Elixir","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Stop the War in Ukraine](Stop_War_in_Ukraine.png)](https://en.wikipedia.org/wiki/2022_Russian_invasion_of_Ukraine)\n\n[![Build Status](https://thundermoon.semaphoreci.com/badges/thundermoon-umbrella.svg?style=semaphore)](https://thundermoon.semaphoreci.com/badges/thundermoon-umbrella.svg?style=semaphore)\n\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/2ab69a409d24453fa5431a92f7d9050e)](https://www.codacy.com/gh/grrrisu/thundermoon-umbrella/dashboard?utm_source=github.com\u0026utm_medium=referral\u0026utm_content=grrrisu/thundermoon-umbrella\u0026utm_campaign=Badge_Grade)\n\n# Thundermoon.Umbrella\n\n![Sim.Realm Diagram](thunderbirdmoon.png)\n\n_image: Thunderbird Moon by Joe Wilson-Sxwaset_\n\nThis is a collection of examples using [phoenix live view](https://github.com/phoenixframework/phoenix_live_view).\nThe state is hold in memory and broadcasted to all clients.\nThe examples include a simple chat, a counter, [Conways Game of Life](https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life) and [Lotka-Volterra](https://en.wikipedia.org/wiki/Lotka%E2%80%93Volterra_equations).\n\n[Changelog](./changelog.md)\n\n## Umbrella Apps\n\n- [Thundermoon](apps/thundermoon/README.md)\n\n- [ThundermoonWeb](apps/thundermoon_web/README.md)\n\n- [Sim Library](apps/sim/README.md)\n\n- [Game of Life](apps/game_of_life/README.md)\n\n- [Lotka Volterra](apps/lotka_volterra/README.md)\n\n## Docker\n\nto start the application in a docker container\n\nfirst copy and rename the files in `.env_files` to `app` and `db`.\n\nset the corresponding values in those files and then run:\n\n```shell\ndocker build -t thundermoon:build .\ndocker build -t thundermoon:app --target=app -f .semaphore/Dockerfile_release .\nIMAGE=thundermoon:app docker-compose up\n```\n\nstop application\n\n```\ndocker-compose down\n```\n\n## Developement\n\n### Setup\n\nTo start the application\n\n- Copy `config/dev.secret.example.exs` to `config/dev.secret.exs` and replace ueberauth `client_id` and `client_secret` with your Github App credentials\n- Install dependencies with `mix deps.get`\n- Create and migrate your database with `mix do ecto.create, ecto.migrate`\n- Install Node.js dependencies with `cd apps/thundermoon_apps/assets \u0026\u0026 npm install`\n- Start Phoenix endpoint with `mix phx.server`\n\nNow you can visit [`localhost:4000`](http://localhost:4000) from your browser.\n\n### Migration\n\nto create a migration issue the command in `app/thundermoon` directory and specify the repo\n\n`mix ecto.gen.migration create_user -r Thundermoon.Repo`\n\n### New Sub Application\n\ngo to `./apps`and issue the mix new command like this:\n`mix new lotka_volterra --module LotkaVolterra --sup`\n\ncopy the new `mix.exs` file to the docker container in the `Dockerfile` line 15 (section _install dependencies_)\n\n### Testing\n\n#### Cypress\n\n##### Install\n\n`npm install -g cypress@4.5.0`\n\n```shell\nMIX_ENV=integration mix do ecto.create, ecto.migrate, run apps/thundermoon/priv/repo/seeds.exs\n```\n\n##### Run\n\nrun the application\n\n`MIX_ENV=integration mix phx.server`\n\nstart the cypress Test Runner in `app/thundermoon_web/assets`\n\n`npm run cypress`\n\nstart testing ....\n\n##### Docker\n\nRun cypress with docker\n\n`docker build -t thundermoon:build .`\n`docker build -t thundermoon:integration -f .semaphore/Dockerfile_integration .`\n\n`IMAGE=\"thundermoon:integration\" docker-compose -f .semaphore/docker-compose.integration.yml up --abort-on-container-exit --exit-code-from browser`\n\n### Release\n\nmanually a test release can be built\n\n```shell\nMIX_ENV=prod mix esbuild default --minify\nMIX_ENV=prod mix phx.digest\nMIX_ENV=prod mix release\n\nexport SECRET_KEY_BASE=REALLY_LONG_SECRET\nexport DATABASE_URL=ecto://\u003cuser\u003e:\u003cpassword\u003e@localhost/thundermoon_dev\n\n_build/dev/rel/thundermoon_umbrella/bin/thundermoon_umbrella eval \"Thundermoon.Release.migrate\"\n_build/prod/rel/thundermoon_umbrella/bin/thundermoon_umbrella start\n```\n\n## Production\n\nstop docker stack\n\n`docker stack rm thundermoon`\n\nrestart docker swarm\n\n`TAG=\u003ccontainer_tag\u003e deploy.sh`\n\n\nshow all services\n\n```\ndocker service ls \n```\n\nsee details of one service\n\n```\ndocker service ps --no-trunc thundermoon_app\n```\n\n### Debug\n\nssh into production server, then\n\n```shell\ndocker ps\ndocker exec -it \u003ccontainer-id\u003e sh\n./bin/thundermoon_umbrella remote\n```\n\n```elixir\n:observer_cli.start()\n```\n\n### Send Test Error\n\n```shell\nSENTRY_DSN=https://12345@sentry.io/123 MIX_ENV=prod mix sentry.send_test_event\n```\n\n## Semaphore\n\nset dockerhub credentials as semaphore secrets\n\n```shell\nsem create secret dockerhub-secrets \\\n  -e DOCKER_USERNAME=\u003cyour-dockerhub-username\u003e \\\n  -e DOCKER_PASSWORD=\u003cyour-dockerhub-password\u003e\n```\n\nset app specific credentials\n\n```shell\nsem create secret thundermoon-secrets \\\n  -e DB_PASSWORD=\u003cpassword\u003e \\\n  -e SECRET_KEY_BASE=\u003csecret\u003e \\\n  -e SECRET_LIVE_VIEW_KEY=\u003csecret\u003e \\\n  -e SENTRY_DSN=\u003csecret\u003e \\\n  -e GITHUB_CLIENT_ID=\u003csecret\u003e \\\n  -e GITHUB_CLIENT_SECRET=\u003csecret\u003e \\\n  -e SSH_USER_AT_HOST=\u003cdeploy_user@ip_address\u003e\n```\n\nadd `deploy-key` containing the private key to the secrets and add the pub key to the deploy server\n\n```shell\nsem create secret deploy-key -f ~/.ssh/id_rsa_semaphoreci:/home/semaphore/.keys/deploy-key\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrrrisu%2Fthundermoon-umbrella","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgrrrisu%2Fthundermoon-umbrella","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrrrisu%2Fthundermoon-umbrella/lists"}