Quack Stanley is an Apples-to-Apples-style party game, inspired by Snake Oil, designed by Jeff Ochs.
Play at quackstanley.net, have fun!
Quack Stanley is an Elm frontend with a Scala backend that runs "serverless" as an AWS Lambda Function.
| Project | Purpose |
|---|---|
| core | Quack Stanley game logic |
| lambda | AWS Lambda handler |
| frontend | Web application for game UI |
| cloudformation | Infrastructure for AWS deployment |
| dev-server | Standalone server for local development |
| e2e | Playwright end-to-end tests |
To run Quack Stanley locally, you will need the following installed:
Install npm dependencies:
npm install # e2e workspace
npm install --prefix frontend
You can then run the api and frontend using the helper scripts in the root of the repository.
- devapi.sh
- devfrontend.sh
The development server stores game data in-memory. This data will not persist through a restart of the API.
The end-to-end tests exercise a complete three-player game session, capturing screenshots at each step across multiple device sizes.
Prerequisites: the API dev server must be running, and the frontend must be built.
./devapi.sh & # start the Scala dev server in the background
npm run build:frontend
npm run e2e
To view the test report with all screenshots:
npm run --workspace e2e report
The report is also uploaded as a playwright-report artifact on every CI run.
Quack Stanley can be run in AWS using the two CloudFormation templates provided in this repository.
Notes:
- Running Quack Stanley in AWS will incur costs.
- Some properties are hard-coded for the public Quack Stanley service. If you'd like to change these to run your own version of Quack Stanley some settings will need to be changed.
- The region is currently hard-coded in Quack Stanley's source code
quack-stanley-storage.template.yaml
creates the persistent resources needed to run Quack Stanley.
Quack Stanley stores its data in S3. The template creates one S3 bucket
for the web assets and another for storing the data for in-progress games.
quack-stanley.template.yaml
sets up the application itself. It creates an API Gateway with an AWS Lambda
function as the backend, and a CloudFront distribution for serving the webapp.
It also uses Route53 to configure the webapp's DNS.