diff --git a/.gitignore b/.gitignore
index 470cc88c7e0..7e572259eee 100644
--- a/.gitignore
+++ b/.gitignore
@@ -38,4 +38,7 @@ jupyterlab/*/ui-tests/test-results/
jupyterlab/*/ui-tests/tests/*.ts-snapshots/
# Sphinx documentation build files
-docs/_build
\ No newline at end of file
+docs/_build
+
+# the file containing the API keys for the web version
+gamestonk_terminal_web/setenv
diff --git a/README.md b/README.md
index d94ed2dad75..cfc8497a1ab 100644
--- a/README.md
+++ b/README.md
@@ -66,6 +66,7 @@
@@ -101,6 +102,7 @@ There are currently two main options to install the terminal:
* using Docker: recommended if you just want to use the terminal
* using Python: recommended if you want to develop new features
+* using the Docker web UI: recommended if you want to deploy the web UI for users to access over your LAN
First step in both options is to star the project
@@ -158,6 +160,20 @@ This installation type supports both Windows and Unix systems (Linux + MacOS). H
If you are using macOS or other Linux operating systems you can jump the next section Installing the terminal.
+### Web UI - Docker
+
+1. Ensure Docker is installed.
+2. Navigate to the location of the Dockerfile in the repo (`cd gamestonk_terminal_web`)
+3. Ensure the launcher is executable with `chmod +x ./launch`
+4. Launch it with `./launch`. If you get a permission denied error, do `sudo ./launch` instead
+5. Once it's launched, you will be able to access it by going to `http://host-ip:8080` in a browser, or `http://localhost:8080` if you are running it on your local machine.
+
+For API keys, create the `setenv` file if it doesn't already exist.
+It will automatically get created on the first launch, and won't get committed to Git because it is on the `.gitignore`.
+Set the API keys [as explained here](https://github.com/GamestonkTerminal/GamestonkTerminal/blob/main/DOCKER_ADVANCED.md#environment-variables).
+Once you've put the API keys in that file, re-run the launch script, and it will use your API keys.
+There are a few things that still don't work, and you can see what works and what doesn't [here](https://github.com/CoconutMacaroon/GamestonkTerminal/blob/main/gamestonk_terminal_web/README.md#todo).
+
#### Installing WSL (Only for Windows users)
If you are using Windows you first you need to install WSL. The process is simple and a tutorial can be found [here](https://www.sitepoint.com/wsl2/). Once you reach the section **Update Linux** on that tutorial, you should have a linux machine installed and can proceed to the next steps.
diff --git a/gamestonk_terminal_web/Dockerfile b/gamestonk_terminal_web/Dockerfile
new file mode 100644
index 00000000000..64a8c598890
--- /dev/null
+++ b/gamestonk_terminal_web/Dockerfile
@@ -0,0 +1,33 @@
+# Use Debian 11 as the base image. It's stable, reliable, and simple. Not the smallest, but it will work fine.
+FROM debian:bullseye-slim
+
+# Install git, subversion, Python, wget, and pip (the Python library manager)
+RUN apt-get update && apt-get install subversion git wget python3 python3-pip -y
+
+# Get the GamestonkTerminal repo, and go into the cloned repo
+# We use svn export instead of git clone so that we don't get
+# the history and the .git folder, as both are not helpful for
+# Docker. See also the following Stack Exchange question:
+# https://stackoverflow.com/a/18324428/
+#
+# Gamestonk Terminal requires Git, so we install it, even if we don't use it here
+RUN svn export --quiet https://github.com/GamestonkTerminal/GamestonkTerminal/trunk GamestonkTerminal
+WORKDIR /GamestonkTerminal
+
+# Download its dependicies using pip
+RUN pip install -r requirements.txt && pip cache purge
+
+# Create a little script to start the GamestonkTerminal
+RUN printf '#!/bin/sh\npython3 /GamestonkTerminal/terminal.py\n' > /bin/run && chmod +x /bin/run
+
+# Put our custom index.html and .gotty into the root directory of the container
+COPY index.html /index.html
+
+# I've built this version of gotty myself
+# It uses the sources from here https://github.com/sorenisanerd/gotty
+# Except the one difference is that font is hard-coded in
+COPY gotty /bin/gotty
+RUN chmod +x /bin/gotty
+
+# And launch the script when we run the container
+ENTRYPOINT gotty --index '/index.html' --term xterm --title-format 'Gamestonk Terminal Web' --permit-write run
diff --git a/gamestonk_terminal_web/GOTTY_LICENSE b/gamestonk_terminal_web/GOTTY_LICENSE
new file mode 100644
index 00000000000..85d168da21c
--- /dev/null
+++ b/gamestonk_terminal_web/GOTTY_LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2017 Iwasaki Yudai
+Copyright (c) 2021 Søren L. Hansen
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/gamestonk_terminal_web/README.md b/gamestonk_terminal_web/README.md
new file mode 100644
index 00000000000..eb991d98ef5
--- /dev/null
+++ b/gamestonk_terminal_web/README.md
@@ -0,0 +1,17 @@
+# Gamestonk Terminal Web
+
+> Warning: It works, but a few things are still broken like graphs. See the TODO section for what works and what doesn't.
+
+## Running it
+
+Clone the repo, go into the cloned directory, do `chmod +x ./launch`, and then run the launch script with `./launch` (you may need to do `sudo ./launch`, depending on how Docker is set up). You can set API keys my modifying the `setenv` file as documented [here](https://github.com/GamestonkTerminal/GamestonkTerminal/blob/main/DOCKER_ADVANCED.md#environment-variables). The launch script will automatically create it if it doesn't exist.
+
+You can then view the web UI at `http://host-ip:8080` or `http://localhost:8080` if it's running on your local computer.
+
+## TODO
+
+- [X] Terminal output works.
+- [X] Pick a font that supports required characters (emojis, box-drawing characters, etc.) - I chose Consolas. Other ones, like Fira Code, don't usually come pre-installed on machines, so those are less ideal. Consolas is a reasonable tradeoff of looks-good, has the right Unicode characters, widely-supported, and reasonably-liked. If you have a different idea, feel free to ping me @CoconutMacaroon on Discord (I'm in the main Gamestonk Terminal Discord server).
+- [X] API keys - Done, set them in the `setenv` file as documented [here](https://github.com/GamestonkTerminal/GamestonkTerminal/blob/main/DOCKER_ADVANCED.md#environment-variables).
+- [ ] Graphs - There are so many options - you can [plot them in the terminal](https://stackoverflow.com/q/37288421/), use a [web-based VNC client](https://stackoverflow.com/q/3240633/), and there are many other options. Still looking into this. Graphs don't currently work.
+- [ ] Prompt emoji is broken - I don't know why, but I will replace it with one that does work once [this issue](https://github.com/GamestonkTerminal/GamestonkTerminal/issues/1244) is done.
diff --git a/gamestonk_terminal_web/gotty b/gamestonk_terminal_web/gotty
new file mode 100755
index 00000000000..8b179457a21
Binary files /dev/null and b/gamestonk_terminal_web/gotty differ
diff --git a/gamestonk_terminal_web/index.html b/gamestonk_terminal_web/index.html
new file mode 100644
index 00000000000..7e29313daf3
--- /dev/null
+++ b/gamestonk_terminal_web/index.html
@@ -0,0 +1,22 @@
+
+
+
+
+ {{ .title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/gamestonk_terminal_web/launch b/gamestonk_terminal_web/launch
new file mode 100755
index 00000000000..f0db2933b4c
--- /dev/null
+++ b/gamestonk_terminal_web/launch
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+# check if the setenv file exists (it holds the API keys)
+if [ ! -f ./setenv ]; then
+ # and if it doesn't exist, create it
+ touch setenv
+fi
+
+# build the Dockerfile, and if that worked, run it on port 8080
+docker build -t gst_web . && docker run -it -p 8080:8080 --env-file setenv gst_web