{"id":23531709,"url":"https://github.com/ryanprior/lutrine-dice","last_synced_at":"2026-02-13T02:47:13.022Z","repository":{"id":46302921,"uuid":"370894671","full_name":"ryanprior/lutrine-dice","owner":"ryanprior","description":"Roll Dice With Friends","archived":false,"fork":false,"pushed_at":"2025-06-13T04:03:14.000Z","size":462,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-19T11:34:51.522Z","etag":null,"topics":["dice-roller","hacktoberfest","roleplay","websocket-chat"],"latest_commit_sha":null,"homepage":"https://dice.next.lutrine.com","language":"Mint","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ryanprior.png","metadata":{"files":{"readme":"README.org","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2021-05-26T03:27:15.000Z","updated_at":"2025-02-25T09:32:12.000Z","dependencies_parsed_at":"2025-09-13T22:43:54.159Z","dependency_job_id":"8bb3e989-efdf-4e80-afc4-ab4d76849db3","html_url":"https://github.com/ryanprior/lutrine-dice","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ryanprior/lutrine-dice","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanprior%2Flutrine-dice","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanprior%2Flutrine-dice/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanprior%2Flutrine-dice/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanprior%2Flutrine-dice/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryanprior","download_url":"https://codeload.github.com/ryanprior/lutrine-dice/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanprior%2Flutrine-dice/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29393703,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-13T00:53:09.511Z","status":"online","status_checked_at":"2026-02-13T02:00:10.076Z","response_time":78,"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":["dice-roller","hacktoberfest","roleplay","websocket-chat"],"created_at":"2024-12-25T22:20:08.680Z","updated_at":"2026-02-13T02:47:13.016Z","avatar_url":"https://github.com/ryanprior.png","language":"Mint","funding_links":[],"categories":[],"sub_categories":[],"readme":"#+TITLE: Lutrine Dice\n\n- Lutrine :: (adj) Of, pertaining to, or characteristic of an otter. [[https://en.wiktionary.org/wiki/lutrine][(Wiktionary)]]\n\nLutrine Dice is a web application for rolling dice and chatting with friends. You might use it alongside video chat to a play pen \u0026 paper role-playing game, or host a whole standalone play by post game inside the app. You can [[https://dice.next.lutrine.com][use it for free]].\n\nThe aim of Lutrine Dice's design philosophy is to create a powerful, streamlined, delightful, playful piece of software, following its otter namesake. Please [[https://github.com/ryanprior/lutrine-dice/issues/new/choose][report an issue]] about anything you encounter that falls short of these ideals.\n\n* Hacking on Lutrine Dice\n\n** The client\n\n| Source code             | lives in the =client/= directory |\n| Implementation language | [[https://www.mint-lang.com/][Mint]]                             |\n| Main entrypoint         | [[file:client/source/Main.mint][main.mint]]                        |\n| Docs                    | [[file:client/README.org][client README]]                    |\n| License                 | [[https://www.gnu.org/licenses/gpl-3.0.en.html][GNU GPLv3+]] (see [[file:client/LICENSE][client/LICENSE]])  |\n\n** The server\n\n| Source code             | lives in the =server/= directory                                    |\n| Implementation language | [[https://crystal-lang.org/][Crystal]]                                                             |\n| Main entrypoint         | [[file:server/src/server.cr][server.cr]]                                                           |\n| Docs                    | [[file:server/README.md][server README]]                                                       |\n| License                 | [[https://anticapitalist.software/][Anti-capitalist Software License 1.4]] (non-free; see [[file:server/LICENSE][server/LICENSE]]) |\n\n(Want to use the server for capitalist purposes? Get in touch; answer is likely no. You're of course welcome to use the free software client with your own backend.)\n\n** How to set up a dev environment\n\nThe way I set up my dev environment requires these tools:\n- Docker \u0026 =docker-compose=\n- GNU =make=\n- =watchexec=\n\nWith all these tools installed, you can run ~make dev~ to bring up a dev server. It will live in docker-compose as two separate containers, one for the server and another for the client.\n\n#+begin_src bash\n  # start-up dev environment containers\n  make dev\n  # check service status\n  docker-compose ps\n  # view server logs\n  docker-compose logs server\n  # shut down dev environment\n  docker-compose down\n#+end_src\n\nWhenever you modify code in the =server= subdirectory, =watchexec= will restart the container for the server which will re-compile. The client container is running the mint dev server which handles its own hot-reload logic.\n\nThe server will be locally accessible on port =3000= and the client on port =3001= (configurable in =docker-compose.yml=.) The dev build is configured to allow CORS and communicate across your local host network. When hacking on the client you should connect to the client container directly so that you benefit from the features of the mint-lang dev server.\n\n*** Database\n\nThe dev server uses a =sqlite= file called =lutrine-dice.db= in the project directory to store your local test data. You can run ~make destroy-db~ to get a fresh database. If you delete the file, Docker will try to create a directory called ~lutrine-dice.db/~ and this will break the dev enviornment, so save yourself the hassle and don't do that.\n\n** How to build the production container\n\nThe production build also uses =make= and =docker-compose=:\n\n#+begin_src bash\n  make server-container-prod\n#+end_src\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryanprior%2Flutrine-dice","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fryanprior%2Flutrine-dice","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryanprior%2Flutrine-dice/lists"}