{"id":15211128,"url":"https://github.com/mattlangsenkamp/rocfreestands","last_synced_at":"2026-01-15T23:53:24.193Z","repository":{"id":192715081,"uuid":"686525563","full_name":"MattLangsenkamp/rocfreestands","owner":"MattLangsenkamp","description":null,"archived":false,"fork":false,"pushed_at":"2023-11-30T20:06:12.000Z","size":758,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-08T02:22:01.218Z","etag":null,"topics":["docker","docker-compose","elm","functional-programming","postgres","postgresql","scala","scalajs","smithy","typelevel"],"latest_commit_sha":null,"homepage":"https://rocfreestands.com","language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MattLangsenkamp.png","metadata":{"files":{"readme":"README.md","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}},"created_at":"2023-09-03T04:43:53.000Z","updated_at":"2024-09-28T06:41:31.000Z","dependencies_parsed_at":"2023-11-30T21:22:37.742Z","dependency_job_id":"8282f8f2-95fb-4586-8f19-3b9c20d001c3","html_url":"https://github.com/MattLangsenkamp/rocfreestands","commit_stats":null,"previous_names":["mattlangsenkamp/rocfreestands"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MattLangsenkamp%2Frocfreestands","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MattLangsenkamp%2Frocfreestands/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MattLangsenkamp%2Frocfreestands/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MattLangsenkamp%2Frocfreestands/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MattLangsenkamp","download_url":"https://codeload.github.com/MattLangsenkamp/rocfreestands/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246802630,"owners_count":20836397,"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","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":["docker","docker-compose","elm","functional-programming","postgres","postgresql","scala","scalajs","smithy","typelevel"],"created_at":"2024-09-28T08:05:06.251Z","updated_at":"2026-01-15T23:53:24.142Z","avatar_url":"https://github.com/MattLangsenkamp.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Rocfreestands\n\nThis repo contains the code used to develop [Rocfreestands](https://rocfreestands.com). The frontend is built using [ScalaJS](https://www.scala-js.org/) \nand the [Tyrian Framework](https://tyrian.indigoengine.io/). The backend is built using [http4s](https://http4s.org/), postgres, and the \n[Typelevel FP stack](https://typelevel.org/). The frontend and backend communicate via rest endpoints defined using the [Smithy IDL](https://smithy.io/2.0/index.html). The app is deployed to Digital Ocean, through the help of docker and Github Actions \n\n\n## Environment setup\n\nThe following tools where used to set up the development environment, if these requirements are already met this step can be skipped \\\n- [nvm](https://github.com/nvm-sh/nvm) \n- [sdkman](https://sdkman.io/)\n- [docker](https://docs.docker.com/engine/install/ubuntu/)\n\n```\n# JS stuff\nnvm install node 20\nnvm use node 20\nnpm install\n\n# Scala stuff\nsdk install java 22.3.1.r19-grl\nsdk install scala 3.3.0\nsdk install sbt 1.9.4\n```\n\n## Starting Just The Backend\n\n### Using Docker \nThe fastest way to start the backend is to use Docker Compose. This will automatically start a postgres service, then the server as well as create volumes to persist data\nsimply run \n\n`docker compose -f stack.yml  up db server -d`\n\nTo stop the services run \n\n`docker compose -f stack.yml down` \n\nTo remove any volumes run \n```bash\ndocker volume ls\ndocker volume rm \u003cnames of volumes to remove\u003e\n```\n\nTo confirm that the services started correctly navigate to http://localhost:8081/docs. The swagger documentation should be present\n\nTo change ENV variables alter them in the  `stack.yml` file prior to the first time you run `docker compose up`\n### Using SBT\nEven when the server is being run with SBT postgres is still run via Docker. To start just postgres run\n\n`docker compose -f stack.yml -p dblocal up db`\n\nThen run \n\n`sbt \"serverJVM/run\"`\n\nTo confirm that the services started correctly navigate to http://localhost:8081/docs. The swagger documentation should be present\n\n## Starting Just The Frontend\n\nFirst make sure the backend is running as the frontend will immediately try and pull data from the backend.\n\nTo compile the frontend from scala to JS simply run\n\n`sbt \"~fastLinkJS\"` \n\nNote that the `~` enables live reloading of code changes.\n\nTo build the CSS styles defined using tailwind CSS, in a separate terminal run \n\n`npx tailwindcss -i ./style.css -o ./output.css`\n\nNote that this step will need to be rerun anytime a tailwind style is added\n\nFinally, in a third terminal run\n\n`npm run dev`","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmattlangsenkamp%2Frocfreestands","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmattlangsenkamp%2Frocfreestands","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmattlangsenkamp%2Frocfreestands/lists"}