diff --git a/docs/assets/grpc-logo.png b/docs/assets/images/grpc-logo.png
similarity index 100%
rename from docs/assets/grpc-logo.png
rename to docs/assets/images/grpc-logo.png
diff --git a/docs/assets/rpc_architecture.png b/docs/assets/images/rpc_architecture.png
similarity index 100%
rename from docs/assets/rpc_architecture.png
rename to docs/assets/images/rpc_architecture.png
diff --git a/docs/assets/rpc_types.svg b/docs/assets/images/rpc_types.svg
similarity index 100%
rename from docs/assets/rpc_types.svg
rename to docs/assets/images/rpc_types.svg
diff --git a/docs/assets/rust.svg b/docs/assets/images/rust.svg
similarity index 100%
rename from docs/assets/rust.svg
rename to docs/assets/images/rust.svg
diff --git a/docs/assets/tonic.svg b/docs/assets/images/tonic.svg
similarity index 100%
rename from docs/assets/tonic.svg
rename to docs/assets/images/tonic.svg
diff --git a/docs/assets/tower-layers-diagram.svg b/docs/assets/images/tower-layers-diagram.svg
similarity index 100%
rename from docs/assets/tower-layers-diagram.svg
rename to docs/assets/images/tower-layers-diagram.svg
diff --git a/docs/assets/tower.png b/docs/assets/images/tower.png
similarity index 100%
rename from docs/assets/tower.png
rename to docs/assets/images/tower.png
diff --git a/docs/assets/templates/slideshow.html.jinja b/docs/assets/templates/slideshow.html.jinja
new file mode 100644
index 0000000..52c97ee
--- /dev/null
+++ b/docs/assets/templates/slideshow.html.jinja
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+ {% if favicon %}
+
+ {% endif %}
+
+
+
+ {% if theme %}
+
+ {% endif %}
+ {% if highlight_theme %}
+
+ {% endif %}
+
+ {% for plugin in plugins %}
+ {% if plugin.extra_css %}
+ {% for css in plugin.extra_css %}
+
+ {% endfor %}
+ {% endif %}
+ {% endfor %}
+
+
+
+
+
+
+
+
+
+
+ {% if plugins %}
+ {% for plugin in plugins %}
+ {% if plugin.extra_javascript %}
+ {% for javascript in plugin.extra_javascript %}
+
+ {% endfor %}
+ {% endif %}
+ {% endfor %}
+ {% endif %}
+
+
+
+
diff --git a/docs/assets/themes/dracula.css b/docs/assets/themes/dracula.css
new file mode 100644
index 0000000..5343904
--- /dev/null
+++ b/docs/assets/themes/dracula.css
@@ -0,0 +1,409 @@
+/**
+ * Dracula Dark theme for reveal.js.
+ * Based on https://draculatheme.com
+ */
+
+@import url("https://fonts.googleapis.com/css2?family=League+Gothic&display=swap");
+@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
+
+/**
+ * Dracula colors by Zeno Rocha
+ * https://draculatheme.com/contribute
+ */
+html * {
+ color-profile: sRGB;
+ rendering-intent: auto;
+}
+
+/*********************************************
+ * GLOBAL STYLES
+ *********************************************/
+:root {
+ --r-background-color: #282a36;
+ --r-main-font:
+ -apple-system, BlinkMacSystemFont, avenir next, avenir, segoe ui,
+ helvetica neue, helvetica, Cantarell, Ubuntu, roboto, noto, arial,
+ sans-serif;
+ --r-main-font-size: 40px;
+ --r-main-color: #f8f8f2;
+ --r-block-margin: 20px;
+ --r-heading-margin: 0 0 20px 0;
+ --r-heading-font: League Gothic, Impact, sans-serif;
+ --r-heading-color: #bd93f9;
+ --r-heading-line-height: 1.2;
+ --r-heading-letter-spacing: normal;
+ --r-heading-text-transform: none;
+ --r-heading-text-shadow: none;
+ --r-heading-font-weight: normal;
+ --r-heading1-text-shadow: none;
+ --r-heading1-size: 3.77em;
+ --r-heading2-size: 2.11em;
+ --r-heading3-size: 1.55em;
+ --r-heading4-size: 1em;
+ --r-code-font:
+ Fira Code, Menlo, Consolas, Monaco, Liberation Mono, Lucida Console,
+ monospace;
+ --r-link-color: #ff79c6;
+ --r-link-color-dark: rgb(255, 64.6, 174.0089552239);
+ --r-link-color-hover: #8be9fd;
+ --r-selection-background-color: #44475a;
+ --r-selection-color: #fff;
+ --r-overlay-element-bg-color: 240, 240, 240;
+ --r-overlay-element-fg-color: 0, 0, 0;
+ --r-bold-color: #ffb86c;
+ --r-italic-color: #f1fa8c;
+ --r-inline-code-color: #50fa7b;
+ --r-list-bullet-color: #8be9fd;
+}
+
+.reveal-viewport {
+ background: #282a36;
+ background-color: var(--r-background-color);
+}
+
+.reveal {
+ font-family: var(--r-main-font);
+ font-size: var(--r-main-font-size);
+ font-weight: normal;
+ color: var(--r-main-color);
+}
+
+.reveal ::selection {
+ color: var(--r-selection-color);
+ background: var(--r-selection-background-color);
+ text-shadow: none;
+}
+
+.reveal ::-moz-selection {
+ color: var(--r-selection-color);
+ background: var(--r-selection-background-color);
+ text-shadow: none;
+}
+
+.reveal .slides section,
+.reveal .slides section > section {
+ line-height: 1.3;
+ font-weight: inherit;
+}
+
+/*********************************************
+ * HEADERS
+ *********************************************/
+section.has-light-background,
+section.has-light-background h1,
+section.has-light-background h2,
+section.has-light-background h3,
+section.has-light-background h4,
+section.has-light-background h5,
+section.has-light-background h6 {
+ color: #282a36;
+}
+
+.reveal h1,
+.reveal h2,
+.reveal h3,
+.reveal h4,
+.reveal h5,
+.reveal h6 {
+ margin: var(--r-heading-margin);
+ color: var(--r-heading-color);
+ font-family: var(--r-heading-font);
+ font-weight: var(--r-heading-font-weight);
+ line-height: var(--r-heading-line-height);
+ letter-spacing: var(--r-heading-letter-spacing);
+ text-transform: var(--r-heading-text-transform);
+ text-shadow: var(--r-heading-text-shadow);
+ word-wrap: break-word;
+}
+
+.reveal h1 {
+ font-size: var(--r-heading1-size);
+}
+
+.reveal h2 {
+ font-size: var(--r-heading2-size);
+}
+
+.reveal h3 {
+ font-size: var(--r-heading3-size);
+}
+
+.reveal h4 {
+ font-size: var(--r-heading4-size);
+}
+
+.reveal h1 {
+ text-shadow: var(--r-heading1-text-shadow);
+}
+
+/*********************************************
+ * OTHER
+ *********************************************/
+.reveal p {
+ margin: var(--r-block-margin) 0;
+ line-height: 1.3;
+}
+
+/* Remove trailing margins after titles */
+.reveal h1:last-child,
+.reveal h2:last-child,
+.reveal h3:last-child,
+.reveal h4:last-child,
+.reveal h5:last-child,
+.reveal h6:last-child {
+ margin-bottom: 0;
+}
+
+/* Ensure certain elements are never larger than the slide itself */
+.reveal img,
+.reveal video,
+.reveal iframe {
+ max-width: 95%;
+ max-height: 95%;
+}
+
+.reveal strong,
+.reveal b {
+ font-weight: bold;
+}
+
+.reveal em {
+ font-style: italic;
+}
+
+.reveal ol,
+.reveal dl,
+.reveal ul {
+ display: inline-block;
+ text-align: left;
+ margin: 0 0 0 1em;
+}
+
+.reveal ol {
+ list-style-type: decimal;
+}
+
+.reveal ul {
+ list-style-type: disc;
+}
+
+.reveal ul ul {
+ list-style-type: square;
+}
+
+.reveal ul ul ul {
+ list-style-type: circle;
+}
+
+.reveal ul ul,
+.reveal ul ol,
+.reveal ol ol,
+.reveal ol ul {
+ display: block;
+ margin-left: 40px;
+}
+
+.reveal dt {
+ font-weight: bold;
+}
+
+.reveal dd {
+ margin-left: 40px;
+}
+
+.reveal blockquote {
+ display: block;
+ position: relative;
+ width: 70%;
+ margin: var(--r-block-margin) auto;
+ padding: 5px;
+ font-style: italic;
+ background: rgba(255, 255, 255, 0.05);
+ box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);
+}
+
+.reveal blockquote p:first-child,
+.reveal blockquote p:last-child {
+ display: inline-block;
+}
+
+.reveal q {
+ font-style: italic;
+}
+
+.reveal pre {
+ display: block;
+ position: relative;
+ width: 90%;
+ margin: var(--r-block-margin) auto;
+ text-align: left;
+ font-size: 0.55em;
+ font-family: var(--r-code-font);
+ line-height: 1.2em;
+ word-wrap: break-word;
+ box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.15);
+}
+
+.reveal code {
+ font-family: var(--r-code-font);
+ text-transform: none;
+ tab-size: 2;
+}
+
+.reveal pre code {
+ display: block;
+ padding: 5px;
+ overflow: auto;
+ max-height: 400px;
+ word-wrap: normal;
+}
+
+.reveal .code-wrapper {
+ white-space: normal;
+}
+
+.reveal .code-wrapper code {
+ white-space: pre;
+}
+
+.reveal table {
+ margin: auto;
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+.reveal table th {
+ font-weight: bold;
+}
+
+.reveal table th,
+.reveal table td {
+ text-align: left;
+ padding: 0.2em 0.5em 0.2em 0.5em;
+ border-bottom: 1px solid;
+}
+
+.reveal table th[align="center"],
+.reveal table td[align="center"] {
+ text-align: center;
+}
+
+.reveal table th[align="right"],
+.reveal table td[align="right"] {
+ text-align: right;
+}
+
+.reveal table tbody tr:last-child th,
+.reveal table tbody tr:last-child td {
+ border-bottom: none;
+}
+
+.reveal sup {
+ vertical-align: super;
+ font-size: smaller;
+}
+
+.reveal sub {
+ vertical-align: sub;
+ font-size: smaller;
+}
+
+.reveal small {
+ display: inline-block;
+ font-size: 0.6em;
+ line-height: 1.2em;
+ vertical-align: top;
+}
+
+.reveal small * {
+ vertical-align: top;
+}
+
+.reveal img {
+ margin: var(--r-block-margin) 0;
+}
+
+/*********************************************
+ * LINKS
+ *********************************************/
+.reveal a {
+ color: var(--r-link-color);
+ text-decoration: none;
+ transition: color 0.15s ease;
+}
+
+.reveal a:hover {
+ color: var(--r-link-color-hover);
+ text-shadow: none;
+ border: none;
+}
+
+.reveal .roll span:after {
+ color: #fff;
+ background: var(--r-link-color-dark);
+}
+
+/*********************************************
+ * Frame helper
+ *********************************************/
+.reveal .r-frame {
+ border: 4px solid var(--r-main-color);
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
+}
+
+.reveal a .r-frame {
+ transition: all 0.15s linear;
+}
+
+.reveal a:hover .r-frame {
+ border-color: var(--r-link-color);
+ box-shadow: 0 0 20px rgba(0, 0, 0, 0.55);
+}
+
+/*********************************************
+ * NAVIGATION CONTROLS
+ *********************************************/
+.reveal .controls {
+ color: var(--r-link-color);
+}
+
+/*********************************************
+ * PROGRESS BAR
+ *********************************************/
+.reveal .progress {
+ background: rgba(0, 0, 0, 0.2);
+ color: var(--r-link-color);
+}
+
+/*********************************************
+ * PRINT BACKGROUND
+ *********************************************/
+@media print {
+ .backgrounds {
+ background-color: var(--r-background-color);
+ }
+}
+
+:root {
+ --r-bold-color: #ffb86c;
+ --r-italic-color: #f1fa8c;
+ --r-inline-code-color: #50fa7b;
+ --r-list-bullet-color: #8be9fd;
+}
+
+.reveal strong,
+.reveal b {
+ color: var(--r-bold-color);
+}
+.reveal em,
+.reveal i,
+.reveal blockquote {
+ color: var(--r-italic-color);
+}
+.reveal code {
+ color: var(--r-inline-code-color);
+}
+.reveal ul li::marker,
+.reveal ol li::marker {
+ color: var(--r-list-bullet-color);
+}
diff --git a/docs/learning_grpc.md b/docs/learning_grpc.md
index dbcea46..2b0f978 100644
--- a/docs/learning_grpc.md
+++ b/docs/learning_grpc.md
@@ -35,7 +35,7 @@ Things were shared in plain non secured text.
[1] WHITE, J. E. A high-level framework for network-based resource sharing. In Proc. National Computer Conference, (June 1976).
---
-
+
http://birrell.org/andrew/papers/ImplementingRPC.pdf
@@ -89,7 +89,7 @@ In the paper mentioned above, they wrote the interface using the Mesa interface
---
-
+
*gRPC is a modern open source high performance Remote Procedure Call (RPC) framework that can run in any environment.*
@@ -139,7 +139,7 @@ Explain multiplexing and server push
### 4 types of RPC supported
-
+
note:
@@ -321,17 +321,17 @@ Give a short example of why it is backward and forward compatible. Mention tags.
## gRPC in the Rust ecosystem
-
+
:heart:
-
+
---
# Tonic
-
+
@@ -568,7 +568,7 @@ Let's dive into Tower
---
# Tower
-
+
note:
@@ -644,7 +644,7 @@ Timeout -> SSRHL -> Tracing -> SSRHL -> Auth -> Starsky service
---
-
+
---
Now let's dive into real middleware implementations
diff --git a/mkslides.yml b/mkslides.yml
index ac0a2c4..5911544 100644
--- a/mkslides.yml
+++ b/mkslides.yml
@@ -1,6 +1,8 @@
slides:
highlight_theme: tokyo-night-dark
- theme: dracula
+ theme: docs/assets/themes/dracula.css
+ template: docs/assets/templates/slideshow.html.jinja
revealjs:
history: true
slideNumber: c/t
+ jumpToSlide: true