Collaborative Fact Checking. This is a work in progress.
-
Setup on your system:
# to enter the devbox dev shell loaded by direnv direnv allow
-
Run the development stack
just dev
-
Point your browser to http://localhost:12345
-
List other useful commands by typing
just
- devbox and nix flakes for a reproducible dev environment: devbox.json
- direnv to automatically load dev environment when entering project directory: .envrc
- just runner for common commands used in development: justfile
- process-compose process orchestrator used for dev environment (process-compose.yml) and prod environment (process-compose-prod.yml)
- earthly Dockerfile-like CI with very good caching, locally runnable: Earthfile
- fly.io simple cloud hosting provider: fly.toml, deployment happens via Earthfile in a GitHub Action .github/workflows/deploy.yml
- Keratin Authn with keratin-authn-scala, simple self-hosted authentication service, deployed alongside the backend using process-compose-prod.yml
- Scala 3 programming language, compiled to javascript using ScalaJS, used for frontend and backend
- Mill build tool for Scala: build.sc
- sloth Type safe RPC calls for Scala: RpcApi.scala, RpcApiImpl.scala, RpcClient.scala, HttpServer.scala
- smithy with smithy4s for http api code generation
- Outwatch web-frontend library for ScalaJS: Entrypoint in FrontendMain.scala
- Shoelace web components, with outwatch types generated by scala-web-components-codegen, configured in build.sc
- Vite hot reloading and bundling: vite.config.mts, main.js, index.html
- TailwindCSS CSS Framework with lots of utility classes: tailwind.onfig.js, postcss.config.js
- Mergify for automatic PR merging with a merge queue: .mergify.yml
- Bun for fast npm installs (package.json), used in process-compose.yml and Earthfile
- entr Run arbitrary commands when files change, used for development reloading in process-compose.yml and justfile
- wrk for http benchmarking: wrk/ (
just benchmark <name>
)
- SQLite lightweight, fast single-file relational database
- magnum, JDBC library for Scala 3
- HikariCP fast JDBC connection pool, configured in AppConfig.scala
- scala-db-codegen using SchemaCrawler to read schema.sql and generate schema types for magnum. Template schema.scala.ssp, config in build.sc
- flyway for Database Migrations
- Atlas generate SQL migrations by diffing schema.sql against migrations (
just new-migration <name>
) or the current dev-database (just migrate-dev
). - sqlc with sqlc-gen-from-template to generate type-safe functions for every query in queries.sql into Queries.scala using a template queries_template.go.tmpl. Config in sqlc.yml,
just generate-query-code