Skip to content

👑 King of Tokyo Multiplayer Board Game using Phoenix LiveView

Notifications You must be signed in to change notification settings

dkarter/king_of_tokyo

Repository files navigation

The King Live    Elixir CI

An online multiplayer game inspired by the King Of Tokyo board game.

Written in Elixir, Phoenix and Phoenix LiveView.

I created this app to enable playing one of my favorite board games in the age of social distancing. It is meant to be used in a multi person video chat app, such as Zoom, with at least one person in the group owning a copy of the original board game.

The person who owns the game needs to point a camera at the cards and share them with the rest of the group. Every player must then go to https://theking.live and join the same room code.

Disclaimer

I do not own or claim to own the copyrights or trademark to King of Tokyo board game by Richard Garfield and IELLO. This application was built for educational purposes only and you must own the original game to play it. The purpose of this application is not to replace the original game, but to enable playing it over a video conferencing software.

If you enjoy it - please purchase the game from IELLO and support the authors.

Running

To start your Phoenix server:

  • Install dependencies with mix deps.get
  • Install Node.js dependencies with yarn install --cwd assets
  • Start Phoenix endpoint with mix phx.server

Now you can visit localhost:4000 from your browser.

Deployment

  1. Set up a DigitalOcean account

  2. Get an API token from the API section on the sidebar and export an API token like so:

    $ export DIGITALOCEAN_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  3. Create an ssh key for the project:

    $ ssh-keygen -f ~/.ssh/theking
  4. Install Pulumi dependencies:

    $ yarn --cwd infra
  5. Run Pulumi to associate your ssh key, create a droplet, domain and firewall:

    $ mix pulumi up
  6. Store the Ansible Vault password in ansible/.vault-password

  7. Run Ansible to provision the droplet:

    $ mix ansible
  8. Deploy using edeliver:

    $ mix edeliver update production --branch=[OPTIONAL_BRANCH_TO_DEPLOY]

    (do not use edeliver's restart / start / stop - the app will automatically restart the systemd service when deployed)