/draft

Build a roster of upcoming films and compete for the highest gross earnings.

Primary LanguageJavaScript

Movie Draft Happy Fun Time <>

Build a roster of upcoming films and compete for the highest gross earnings.

What is a movie draft?

First, full credit to Night Attack/NSFW Show, Diamond Club, and Chat Relm. The idea of a movie draft is not my own; I simply wrote some software to help my coworkers and I conduct our own.

A movie draft is something like a fantasy sports draft… or so I’m told. Generally, there are two drafts per year: the Summer Block Buster Season and the Winter Oscar Bait Season. A group of friends get together with equal amounts of fake money to buy upcoming movies in an auction. Roughly 30 movies are generally included in the draft, and players bid to purchase them. The goal is to have the highest income from your owned movies using U.S. domestic grosses, ending two weeks after the final movie is released. This implementation is rather U.S.-centric.

General Info

  • There are 2 drafts per year:
    • Summer Blockbuster: Drafting begins in March for movies showing through the end of August.
    • Winter Oscar Bait: Drafting begins in September for movies showing through the end of February.
  • Approximately 30 movies should be chosen per draft.
  • Groups of 4–6 players are best, given the number of movies.
  • The order of movies is randomized prior to drafting.
  • Each week the US domestic film grosses are updated using IMDb.
  • The game ends 14 days after the final movie is released.

Rules Per Team

  • Drafting takes 1–2 hours. Plan accordingly!
  • The draft period opens in the first two weeks of each drafting season. You should coordinate teams
  • Each player gets 100 “Draft Bucks” used to bid on a major film studio release from the current season.
    • Each player has at most $100 to spend on all their combined purchases; they may not exceed $100.
  • Films are put up for auction one at a time in random order to all players.
  • Bidding on a film is open while its trailer plays. Players should speak loudly so that bids are heard during the video.
  • Vigorous discussion is encouraged (and is a large part of the fun).
  • Should the bidding for any film reach $100, players may continue bidding for a lower percentage of that film’s gross.
    • “I bid $100 at 70%” means the film's domestic gross would be multiplied by 0.7 before being applied to the player’s total. A subsequent bid of “$100 at 65%” would take the lead because the player is accepting less of the film’s gross total toward their score.
    • Players must reach $100 bids before bidding down the percentage.
    • Players who do not have $100 may not participate in percentage bidding.
  • If multiple groups are playing (each an independent draft), the winners of each group will compete by drafting efficiency (total Adjusted Gross per Draft Buck spent). The group winner who also has the best efficiency will get ultimate bragging rights.
  • If a large group (8–12) wants to play, players may pair up.

Installation

Install Node.js Fork the repo

git clone <...>
cd draft
npm install

Setup

At the project root, add a .env file with environment variables for the properties below. A sample file is provided. Alternatively, configure your runtime environment manually with the following properties:

  • NODE_ENV: production or development
  • PORT: target HTTP port for Node server
  • DB_TYPE: mysql or postgresql
  • DB_USER: your database username
  • DB_PASSWORD: your database password
  • DB_HOST: your database hostname
  • DB_PORT: database access port
  • DB_NAME: optional schema name
Mac/Linux: `export KEY = VALUE`
Windows: `$env:KEY = VALUE`

Insert draft and movie information into the database with CLI scripts prior to running the server. Example:

cd bin
node create-draft.js

create-draft.js

Inserts a movie draft game in the database. You'll need to enter the season (Summer or Winter), the year, and the dates that the different phases start and stop.

add-movies.js

Adds movies to an existing draft. This is the most time-consuming part. You'll need to have the following for each film:

  • Title
  • Release date
  • IMDb ID
  • YouTube ID for the film’s trailer
  • Poster image URL

edit-movies.js

Prompts for an existing draft, then cycles through the draft's movies one field at a time to make changes as desired.

Running

Launch the server:

npm start

This is an app built on Express. Like most Express apps, it defaults to port 3000 for development. To run on port 80 for production, you will need root permissions and run the server with the port environment variable:

$ sudo NODE_ENV=production PORT=80 npm start

I also recommend using nodemon to keep the app running and automatically restarting when monitored files are edited.