{"id":15650427,"url":"https://github.com/keynmol/jobby","last_synced_at":"2025-04-30T17:02:34.395Z","repository":{"id":49405144,"uuid":"517391449","full_name":"keynmol/jobby","owner":"keynmol","description":"Smithy4s (Scala + Scala.js) full-stack application","archived":false,"fork":false,"pushed_at":"2025-02-05T16:02:03.000Z","size":269,"stargazers_count":42,"open_issues_count":1,"forks_count":4,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-30T18:04:44.112Z","etag":null,"topics":["full-stack","scala","scalajs","smithy","smithy4s","webapp"],"latest_commit_sha":null,"homepage":"https://blog.indoorvivants.com/tags/series:smithy4s","language":"Scala","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/keynmol.png","metadata":{"files":{"readme":"README.md","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}},"created_at":"2022-07-24T17:27:45.000Z","updated_at":"2025-03-25T14:24:24.000Z","dependencies_parsed_at":"2024-10-03T12:35:14.791Z","dependency_job_id":"29587d4d-8ecb-4f85-8fba-c18ac8ba6362","html_url":"https://github.com/keynmol/jobby","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keynmol%2Fjobby","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keynmol%2Fjobby/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keynmol%2Fjobby/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keynmol%2Fjobby/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/keynmol","download_url":"https://codeload.github.com/keynmol/jobby/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251748929,"owners_count":21637413,"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":["full-stack","scala","scalajs","smithy","smithy4s","webapp"],"created_at":"2024-10-03T12:34:35.564Z","updated_at":"2025-04-30T17:02:34.241Z","avatar_url":"https://github.com/keynmol.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Jobby\n\nThis is a full-stack Scala application (job posting board), made with the following excellent libraries and technologies:\n\n1. [Scala 3](https://docs.scala-lang.org/scala3/new-in-scala3.html)\n2. [Smithy4s](https://disneystreaming.github.io/smithy4s/) and [Smithy](https://awslabs.github.io/smithy/2.0/index.html#) for the API and protocol \n   definition between backend and frontend (and in tests)\n3. [Scala.js](https://www.scala-js.org) and [Laminar](https://laminar.dev) for the [SPA](https://en.wikipedia.org/wiki/Single-page_application) frontend\n4. [PostgreSQL](https://www.postgresql.org) and [Skunk](https://tpolecat.github.io/skunk/) for database access \n5. [Weaver-Test](https://disneystreaming.github.io/weaver-test/) for unit and integration testing\n\nThe app used to be deployed on \n\n1. Platform.sh but I've run out of the free trial plan\n2. Heroku but they discontinued the free plans for everyone\n\nand now the app is deployed to the lovely Fly.io and here's the [**live version**](https://jobby-web.fly.dev/)\n\nIt's a companion repo for my [4-part blog post series](https://blog.indoorvivants.com/2022-06-10-smithy4s-fullstack-part-1).\n\n![Demo of the Jobby App](https://user-images.githubusercontent.com/1052965/185575996-2c524e44-d9c6-402d-b2c9-76d2b7b20356.gif)\n\n### Prerequisites\n\n- JDK 11+\n\n- SBT installed (or use the `./sbt` launcher provided)\n\n- PostgreSQL\n  Easiest way to run it is:\n\n   ```\n   docker run --name jobby -p 5439:5432 -e POSTGRES_USER=jobby -e POSTGRES_PASSWORD=mysecretpassword -e POSTGRES_DB=jobby -d postgres\n\n   ```\n\n  Take note of the user, password, database (`jobby`) and host port (`5439`), if you wish to reconfigure the connection .\n\n### Running\n\nTo just run the app (not great for development per se),\nrun the following command:\n\n```\nsbt 'app/run 9999'\n```\n\nThen open http://localhost:9999 - and you should see a (not working) app.\n\n### Configuration \n\nThe following settings are respected, and can be either be set as environment variables (recommended for \ndeployments), or read from the `jobby.opts` file at the root of the project, for example:\n\n```properties\nPG_USER=jobby\nPG_PASSWORD=mysecretpassword\nPG_DB=jobby\nLOCAL_DEPLOYMENT=true\nPG_PORT=5439\n```\n\n* `PG_PASSWORD`, `PG_HOST`, `PG_DB`, `PG_USER`, `PG_PORT` - variables to configure access to Postgres\n\n* `LOCAL_DEPLOYMENT` - setting this to `true` will **disable** hardened cookies for authentication, making \n    it easier to develop locally\n\n* `RELEASE` - setting it to `yesh` will produce fully optimised, single-file frontend from Scala.js\n\n\n### Developing\n\nThis gets finicky as we try to satisfy the following requirements:\n\n1. Backend should be rebuilt and restarted independently of the frontend\n2. Frontend should be rebuilt on a per-module basis, and managed by https://vitejs.dev/\n3. Request to backend should be proxied\n\nTo achieve (1), we need to start the backend without bundling the frontend - removing \nthe `RELEASE` env variable will achieve that:\n\n(in terminal 1)\n```\nPG_PASSWORD=mysecretpassword PG_DB=jobby sbt '~app/reStart 9999'\n```\n\nTo achieve (2), we need to \n\na) Continuously rebuilt the frontend:\n\n   (in terminal 2)\n   ```\n   sbt '~buildFrontend'\n   ```\n\nb) Run Vite's development server:\n\n   (in terminal 3)\n   ```\n   cd frontend-build \u0026\u0026 npm run dev\n   ```\n\nAnd (3) is achieved by the configuration in `frontend-build/vite.config.js`. **Make sure to start \nthe server on port 9999**","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkeynmol%2Fjobby","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkeynmol%2Fjobby","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkeynmol%2Fjobby/lists"}