timhaley94 / holdem

Real time poker in JavaScript
https://holdemhounds.com
GNU General Public License v3.0
7 stars 7 forks source link
aws docker-compose ecs full-stack javascipt poker react terraform websockets

Hold'em Hounds

Born of the pandemic, Hold'em Hounds is an (🚧 in development 🚧) poker app that's aiming to bring a fresh perspective to a crowded field of garish, clunky apps, desparate to suck you into microtransactions.

Product priorities

Hold'em Hounds should be...

Directory structure

holdem/
  .circleci/        --> CI/CD configuration
  client/           --> Client (React) code
    src/
      components/   --> UI Elements
      data/         --> Constants
      hooks/        --> Generic React hooks
      state/        --> Application state (i.e. the "data layer")
      utils/        --> Generic reusable code
  infrastructure/   --> Infrastructure (Terraform) code
  server/           --> Server (Node.js) code
    src/
      api/          --> View/Controller logic
      domain/       --> Business logic (i.e. the "service layer")
      loaders/      --> Side effects (i.e. mongo and redis connections)
      modules/      --> Specific reusable code
      utils/        --> Generic reusable code

Development

While you you could set up each individual piece of the system locally (i.e. server, client, mongo, redis) the easiest way to run the project is through docker-compose. First make sure you have docker and docker-compose installed. Then you can use the scripts.sh file which takes a variety of subcommands:

We have a scripts.sh file which takes a includes a number of subcommands. Some options are:

For example, to get the app up and running, run ./scripts.sh up and then, viola, http:localhost:3000.

The docker-compose configuration supports hot reloading, so once you have it running, your changes to ./client and ./server will be respected. However, if you ever need to force a rebuild: ./scripts build.

Testing and linting

In order to lint the source code or run the test suite, you'll need to run npm install in the directory in question (i.e. client or server) and then run either npm run test or npm run lint.

High level docs

We have a couple of diagrams to get a high level feel for the implementation:

Contributing

  1. Read our contributing guide
  2. Find a Github issues
  3. Fork this repository (if you aren't a collaborator)
  4. Open a pull request