diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..31931fa --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +__pycache__ +venv +surprise.txt +backend/static/main.js +frontend/elm-stuff diff --git a/Dockerfile b/Dockerfile index b55c9d8..418e0aa 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,19 @@ -FROM xxx +FROM python:3-alpine -# Install flask and elm +ENV SURPRISE_ASSET_DIR=/assets +ENV ELM_VERSION=0.19.1 +ENV PYTHONUNBUFFERED=1 -# Copy files +COPY backend backend +COPY frontend frontend -# Compile elm - -# Run flask +ADD https://github.com/elm/compiler/releases/download/$ELM_VERSION/binary-for-linux-64-bit.gz elm.gz +RUN gunzip elm.gz && \ + chmod +x elm && \ + mv elm /bin/elm +RUN cd frontend && \ + elm make src/Main.elm --optimize --output=../backend/static/main.js +WORKDIR backend +RUN pip install -r requirements.pip +ENTRYPOINT ["flask", "run", "-h", "0.0.0.0"] diff --git a/README.md b/README.md index cd5b4bf..bb7d703 100644 --- a/README.md +++ b/README.md @@ -2,5 +2,43 @@ This is a web application for revealing a surprise at a given time. +Two pages are served: + + 1. `/` - The index page polls the backend every second and displays the image + asset corresponding to the state of the surprise with a countdown if applicable. + 2. `/set-surprise` - Select and POST the surprise to the backend (password protected). + +The surprise can have the following states: + + - `_null` - The surprise is not set. + - `_secret` - The surprise is set but not yet revealed. + - `` - The surprise is set and revealed. +## Configuration + +Environment variables: + + - `SURPRISE_TITLE` - Page title + - `SURPRISE_STORE_FILE` - File name to store surprise value. + - `SURPRISE_SECRET` - Password for setting the surprise. + - `SURPRISE_ASSET_DIR` - Directory of image assets that corresponds to surprise + state/values. The set of possible surprise values are parsed from the basename + of the asset files. The `_null` and `_secret` states may be overridden. + - `SURPRISE_REVEAL_DATETIME` - Datetime for reveal. + + +## Build + +```bash +$ docker build -t surprise-countdown . +``` + + +## Run gender reveal example + +```bash +$ docker run -e SURPRISE_SECRET=hunter2 -p 5000:5000 -v $(pwd)/surprise-assets/gender-reveal:/assets:ro surprise-countdown +``` + +Then browse to [localhost:5000](localhost:5000). diff --git a/frontend/src/Main.elm b/frontend/src/Main.elm index 7cd6432..3c3a7f4 100644 --- a/frontend/src/Main.elm +++ b/frontend/src/Main.elm @@ -64,7 +64,7 @@ update msg model = subscriptions : Model -> Sub Msg subscriptions model = - Time.every 980 FetchSurprise + Time.every 1000 FetchSurprise -- VIEW