Example of
-
Client written with Laminar, interacting with server using sttp
-
Server with http4s serving both the compiled Javascript for the client and an endpoint for server-side interactions
-
Shared code with protocol definitions
-
Gzip compression on the server side
-
Docker packaging of the full application
-
Tests for the client with simulated DOM using jsdom
Run in SBT (uses fast JS compilation, not optimized):
sbt> ~runDev
And open http://localhost:9000/frontend
This will restart the server on any changes: shared code, client/server, assets.
Run in SBT (uses full JS optimization):
sbt> ~runProd
sbt> backend/docker:publishLocal
Will publish the docker image with fully optimised JS code, and you can run the container:
✗ docker run --rm -p 8080:8080 backend:0.1.0-SNAPSHOT
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Running server on http://0.0.0.0:8080 (mode: prod)
The interface is fairly simple: