diff --git a/buildspec.yml b/buildspec.yml
new file mode 100644
index 00000000..e4e7df9b
--- /dev/null
+++ b/buildspec.yml
@@ -0,0 +1,46 @@
+version: 0.2
+
+phases:
+  install:
+    runtime-versions:
+      python: "3.8"
+    commands:
+      - apt-get update
+      - lsb_release -a
+      - apt-get -qq install pandoc -y
+      - pip install ipython sphinx sphinx_rtd_theme sphinxcontrib-bibtex sphinxcontrib-blockdiag sphinx-autobuild sphinx-sitemap jupyter-sphinx nbsphinx -q
+  pre_build:
+    commands:
+      - python --version
+      - pip --version
+  build:
+    commands:
+      - cd sphinx/java-intro && make clean && make html && cd ../..
+      - cd sphinx/python-intro && make clean && make html && cd ../..
+      - cd sphinx/pytorch-intro && make clean && make html && cd ../..
+      - cd sphinx/scikit-intro && make clean && make html && cd ../..
+      - cd sphinx/spark-intro && make clean && make html && cd ../..
+      - cd sphinx/datascience && make clean && make html && cd ../..
+      - cd sphinx/python-dothis && make clean && make html && cd ../..
+      - cd sphinx/scratch && make clean && make html && cd ../..
+      - cd sphinx/tello && make clean && make html && cd ../..
+      - cd sphinx/makeblock && make clean && make html && cd ../..
+      - cd sphinx/r-intro && make clean && make html && cd ../..
+      - cd sphinx/excel && make clean && make html && cd ../..
+      - cd sphinx/docker && make clean && make html && cd ../..
+  post_build:
+    commands:
+      - aws s3 sync sphinx/java-intro/build/html s3://learn-java.oneoffcoder.com --quiet
+      - aws s3 sync sphinx/python-intro/build/html s3://learn-python.oneoffcoder.com --quiet
+      - aws s3 sync sphinx/pytorch-intro/build/html s3://learn-pytorch.oneoffcoder.com --quiet
+      - aws s3 sync sphinx/scikit-intro/build/html s3://learn-scikit.oneoffcoder.com --quiet
+      - aws s3 sync sphinx/spark-intro/build/html s3://learn-spark.oneoffcoder.com --quiet
+      - aws s3 sync sphinx/datascience/build/html s3://datascience.oneoffcoder.com --quiet
+      - aws s3 sync sphinx/python-dothis/build/html s3://python.oneoffcoder.com --quiet
+      - aws s3 sync sphinx/scratch/build/html s3://scratch.oneoffcoder.com --quiet
+      - aws s3 sync sphinx/tello/build/html s3://tello.oneoffcoder.com --quiet
+      - aws s3 sync sphinx/makeblock/build/html s3://makeblock.oneoffcoder.com --quiet
+      - aws s3 sync sphinx/r-intro/build/html s3://r.oneoffcoder.com --quiet
+      - aws s3 sync sphinx/excel/build/html s3://excel.oneoffcoder.com --quiet
+      - aws s3 sync sphinx/docker/build/html s3://docker.oneoffcoder.com --quiet
+      - echo Build completed on `date`
diff --git a/docker/cicd/Dockerfile b/docker/cicd/Dockerfile
new file mode 100644
index 00000000..891955c7
--- /dev/null
+++ b/docker/cicd/Dockerfile
@@ -0,0 +1,17 @@
+FROM ubuntu:disco
+LABEL One-Off Coder "info@oneoffcoder.com"
+
+ENV CONDA_HOME=/usr/local/conda
+ENV PATH=${CONDA_HOME}/bin:${PATH}
+
+# setup ubuntu
+RUN apt-get update -y \
+    && apt-get upgrade -y \
+    && apt-get -y install wget \
+    && apt-get clean
+
+# setup conda
+RUN wget -q https://repo.anaconda.com/archive/Anaconda3-2019.10-Linux-x86_64.sh -O /tmp/anaconda.sh \
+    && /bin/bash /tmp/anaconda.sh -b -p $CONDA_HOME \
+    && $CONDA_HOME/bin/pip install sphinx sphinx_rtd_theme sphinxcontrib-bibtex sphinx-autobuild nbsphinx \
+    && $CONDA_HOME/bin/conda update -n root conda -y
diff --git a/docker/cicd/README.md b/docker/cicd/README.md
new file mode 100644
index 00000000..5ffa2eeb
--- /dev/null
+++ b/docker/cicd/README.md
@@ -0,0 +1,5 @@
+![One-Off Coder Logo](../logo.png "One-Off Coder")
+
+# Purpose
+
+This docker container is meant to be used for CI/CD to publish the books.
diff --git a/docker/cicd/build.sh b/docker/cicd/build.sh
new file mode 100755
index 00000000..24986760
--- /dev/null
+++ b/docker/cicd/build.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+AWS_URL=982057254752.dkr.ecr.us-east-1.amazonaws.com
+
+docker build --no-cache -t book-cicd:local .
+
+docker tag book-cicd:local $AWS_URL/book-cicd:0.0.1
+docker tag book-cicd:local $AWS_URL/book-cicd:latest
\ No newline at end of file
diff --git a/docker/cicd/deploy.sh b/docker/cicd/deploy.sh
new file mode 100755
index 00000000..39acec22
--- /dev/null
+++ b/docker/cicd/deploy.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+# NOTE: make sure you have created an AWS CLI conda environment
+
+AWS_URL=982057254752.dkr.ecr.us-east-1.amazonaws.com
+
+$(aws ecr get-login --no-include-email --region us-east-1)
+docker push $AWS_URL/book-cicd:0.0.1
+docker push $AWS_URL/book-cicd:latest
\ No newline at end of file
diff --git a/sphinx/datascience/source/d-separation.ipynb b/sphinx/datascience/source/d-separation.ipynb
index 459bb3a2..d06ace02 100644
--- a/sphinx/datascience/source/d-separation.ipynb
+++ b/sphinx/datascience/source/d-separation.ipynb
@@ -159,10 +159,10 @@
     "- Output: True or False\n",
     "- Find all paths, $P$, between $X$ and $Y$\n",
     "- For each path $p$ in $P$\n",
-    "  - if $p$ is inactive, return True\n",
-    "- return False\n",
+    "  - if $p$ is active, return False\n",
+    "- return True\n",
     "\n",
-    "In the algorithm above, if we find any path in $G$ between $X$ and $Y$ (given $Z$) that is active, then $X$ and $Y$ are d-connected; if we cannot find any active path between $X$ and $Y$ (given $Z$) in $G$ then they are d-separated. The idea of an active and inactive path comes through understanding the configuration of triplets. In general, there are 3 types of triplet configurations.\n",
+    "In the algorithm above, if we find any path in $G$ between $X$ and $Y$ (given $Z$) that is active, then $X$ and $Y$ are d-connected; if we cannot find any active path between $X$ and $Y$ (given $Z$) in $G$ then they are d-separated. The idea of an active and inactive path comes through understanding the configuration of triplets in a DAG. In general, there are 3 types of triplet configurations.\n",
     "\n",
     "- serial: $X \\rightarrow Z \\rightarrow Y$ (causal chain)\n",
     "- diverging: $X \\leftarrow Z \\rightarrow Y$ (common cause)\n",
