This is an automated email from the ASF dual-hosted git repository.

kamilbregula pushed a commit to branch aip-11
in repository https://gitbox.apache.org/repos/asf/airflow-site.git


The following commit(s) were added to refs/heads/aip-11 by this push:
     new dbb402c  Add case study page (#81)
dbb402c is described below

commit dbb402ceccfaa87cbdb5e08e0ad633b47344d90d
Author: Kamil Gabryjelski <[email protected]>
AuthorDate: Fri Oct 18 17:27:11 2019 +0200

    Add case study page (#81)
---
 landing-pages/site/assets/icons/spotify-logo.svg   | 21 ++++++
 .../scss/{main-custom.scss => _base-layout.scss}   | 38 +++++++---
 landing-pages/site/assets/scss/_buttons.scss       | 24 ++++++-
 .../scss/{main-custom.scss => _case-study.scss}    | 14 ++--
 landing-pages/site/assets/scss/_list-boxes.scss    | 10 +++
 landing-pages/site/assets/scss/_ol-ul.scss         |  2 -
 .../assets/scss/{main-custom.scss => _pager.scss}  | 16 ++---
 .../scss/{main-custom.scss => _paragraph.scss}     | 19 ++---
 .../assets/scss/{main-custom.scss => _quote.scss}  | 41 ++++++++---
 landing-pages/site/assets/scss/main-custom.scss    |  5 ++
 .../site/content/en/case-studies/_index.html       |  7 ++
 .../content/en/case-studies/example-case1.html     | 27 +++++++
 .../content/en/case-studies/example-case2.html     | 27 +++++++
 .../content/en/case-studies/example-case3.html     | 27 +++++++
 .../content/en/case-studies/example-case4.html     | 27 +++++++
 .../content/en/case-studies/example-case5.html     | 27 +++++++
 .../content/en/case-studies/example-case6.html     | 27 +++++++
 landing-pages/site/data/case_studies.json          | 25 +++++--
 landing-pages/site/layouts/_default/baseof.html    |  9 ++-
 .../layouts/{_default => case-studies}/baseof.html |  9 ++-
 .../content.html}                                  |  6 +-
 .../case-study.html => case-studies/list.html}     | 24 ++++---
 .../single.html}                                   |  7 +-
 landing-pages/site/layouts/examples/list.html      | 83 ++++++++++++----------
 .../site/layouts/partials/boxes/case-study.html    |  2 +-
 .../layouts/partials/buttons/button-hollow.html    |  2 +-
 .../layouts/partials/buttons/button-with-icon.html |  2 +-
 .../partials/{boxes/case-study.html => pager.html} | 17 ++---
 .../{buttons/button-hollow.html => quote.html}     | 10 ++-
 .../paragraph.html}                                |  3 +-
 30 files changed, 435 insertions(+), 123 deletions(-)

diff --git a/landing-pages/site/assets/icons/spotify-logo.svg 
b/landing-pages/site/assets/icons/spotify-logo.svg
new file mode 100644
index 0000000..1aebfcd
--- /dev/null
+++ b/landing-pages/site/assets/icons/spotify-logo.svg
@@ -0,0 +1,21 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="166.806" height="50.029" 
viewBox="0 0 166.806 50.029">
+    <g id="Group_696" data-name="Group 696" transform="translate(-4.252 
-1.277)">
+        <g id="Group_692" data-name="Group 692" transform="translate(4.252 
1.277)">
+            <path id="Path_634" d="M29.267 1.277a25.015 25.015 0 1 0 25.015 
25.014A25.015 25.015 0 0 0 29.267 1.277zm11.472 36.08a1.558 1.558 0 0 
1-2.144.519c-5.874-3.59-13.268-4.4-21.975-2.412a1.559 1.559 0 1 
1-.694-3.039c9.528-2.178 17.7-1.241 24.3 2.788a1.559 1.559 0 0 1 .513 
2.144zm3.061-6.811a1.951 1.951 0 0 
1-2.682.642c-6.722-4.132-16.973-5.329-24.926-2.915a1.95 1.95 0 1 
1-1.134-3.732c9.085-2.757 20.38-1.422 28.1 3.323a1.95 1.95 0 0 1 .642 
2.682zm.264-7.093C36 18.664 22.7 18.224 15 [...]
+        </g>
+        <g id="Group_695" data-name="Group 695" transform="translate(61.829 
12.781)">
+            <g id="Group_693" data-name="Group 693">
+                <path id="Path_635" d="M207.486 
55.758c-4.319-1.03-5.088-1.753-5.088-3.271 0-1.435 1.351-2.4 3.36-2.4a9.819 
9.819 0 0 1 5.9 2.243.282.282 0 0 0 .214.052.277.277 0 0 0 
.187-.115l2.109-2.973a.283.283 0 0 0-.054-.385 12.759 12.759 0 0 
0-8.295-2.874c-4.663 0-7.921 2.8-7.921 6.8 0 4.294 2.81 5.814 7.666 6.988 
4.133.952 4.83 1.749 4.83 3.175 0 1.58-1.41 2.562-3.68 2.562a9.92 9.92 0 0 
1-6.878-2.841.3.3 0 0 0-.208-.068.281.281 0 0 0-.194.1l-2.365 2.814a.281.281 0 
0 0 .028.392 14. [...]
+                <path id="Path_636" d="M271.776 64.326a6.776 6.776 0 0 0-5.438 
2.616v-1.979a.283.283 0 0 0-.283-.283h-3.867a.283.283 0 0 
0-.283.283v21.986a.283.283 0 0 0 .283.283h3.867a.283.283 0 0 0 
.283-.283v-6.94a6.947 6.947 0 0 0 5.438 2.461c4.047 0 8.144-3.116 
8.144-9.071s-4.096-9.073-8.144-9.073zm3.648 9.073c0 3.033-1.868 5.149-4.543 
5.149-2.644 0-4.639-2.213-4.639-5.149s1.995-5.149 4.639-5.149 4.543 2.165 4.543 
5.15z" fill="#1ed760" data-name="Path 636" transform="translate(-242.5 [...]
+                <path id="Path_637" d="M335.549 64.326a9.091 9.091 0 1 0 9.263 
9.073 9.12 9.12 0 0 0-9.263-9.073zm0 14.254a4.919 4.919 0 0 1-4.862-5.181 4.8 
4.8 0 0 1 4.8-5.118 4.934 4.934 0 0 1 4.894 5.183 4.815 4.815 0 0 1-4.832 
5.116z" fill="#1ed760" data-name="Path 637" transform="translate(-287.647 
-56.997)"/>
+                <path id="Path_638" d="M400.219 54.63h-4.256v-4.351a.283.283 0 
0 0-.282-.283h-3.867a.284.284 0 0 0-.284.283v4.351h-1.859a.283.283 0 0 
0-.282.283v3.324a.282.282 0 0 0 .282.283h1.859v8.6c0 3.475 1.73 5.238 5.141 
5.238a7.055 7.055 0 0 0 3.623-.9.282.282 0 0 0 .143-.245v-3.166a.284.284 0 0 
0-.41-.254 4.874 4.874 0 0 1-2.27.548c-1.241 
0-1.794-.563-1.794-1.826v-7.994h4.256a.283.283 0 0 0 .282-.283v-3.324a.283.283 
0 0 0-.282-.284z" fill="#1ed760" data-name="Path 638" transform=" [...]
+                <path id="Path_639" d="M460 49.914v-.534c0-1.572.6-2.273 
1.955-2.273a6.525 6.525 0 0 1 2.179.4.283.283 0 0 0 .372-.269V43.98a.283.283 0 
0 0-.2-.272 10.615 10.615 0 0 0-3.214-.462c-3.572 0-5.46 2.011-5.46 
5.815v.818h-1.862a.284.284 0 0 0-.284.283V53.5a.284.284 0 0 0 
.284.283h1.858v13.27a.283.283 0 0 0 .282.283h3.867a.284.284 0 0 0 
.283-.283V53.787h3.611l5.529 13.262c-.628 1.393-1.245 1.671-2.088 1.671a4.46 
4.46 0 0 1-2.133-.6.29.29 0 0 0-.225-.021.286.286 0 0 0-.167.153l-1 [...]
+                <rect id="Rectangle_205" width="4.434" height="17.439" 
fill="#1ed760" data-name="Rectangle 205" rx=".949" transform="translate(70.377 
7.683)"/>
+                <path id="Path_640" d="M433.581 39.791a2.773 2.773 0 1 0 2.774 
2.773 2.774 2.774 0 0 0-2.774-2.773z" fill="#1ed760" data-name="Path 640" 
transform="translate(-360.968 -39.791)"/>
+            </g>
+            <g id="Group_694" data-name="Group 694" 
transform="translate(103.772 7.65)">
+                <path id="Path_641" d="M547.129 70.858a2.729 2.729 0 1 1 
2.736-2.737 2.711 2.711 0 0 1-2.736 2.737zm.014-5.187a2.458 2.458 0 1 0 2.435 
2.45 2.434 2.434 0 0 0-2.434-2.45zm.6 2.73l.77 
1.078h-.649l-.693-.988h-.6v.988h-.543v-2.858h1.274c.663 0 1.1.34 
1.1.911a.852.852 0 0 1-.655.868zm-.459-1.289h-.708v.9h.708c.354 0 
.565-.173.565-.452s-.208-.449-.561-.449z" fill="#1ed760" data-name="Path 641" 
transform="translate(-544.408 -65.4)"/>
+            </g>
+        </g>
+    </g>
+</svg>
diff --git a/landing-pages/site/assets/scss/main-custom.scss 
b/landing-pages/site/assets/scss/_base-layout.scss
similarity index 62%
copy from landing-pages/site/assets/scss/main-custom.scss
copy to landing-pages/site/assets/scss/_base-layout.scss
index 0d0dc95..2c560ec 100644
--- a/landing-pages/site/assets/scss/main-custom.scss
+++ b/landing-pages/site/assets/scss/_base-layout.scss
@@ -17,13 +17,33 @@
  * under the License.
  */
 
-@import url('https://fonts.googleapis.com/css?family=Rubik:500&display=swap');
-@import 
url('https://fonts.googleapis.com/css?family=Roboto:400,500,700&display=swap');
-@import 
url('https://fonts.googleapis.com/css?family=Roboto+Mono&display=swap');
+.base-layout {
+  padding: 64px 0 40px;
 
-@import "typography";
-@import "accordion";
-@import "buttons";
-@import "ol-ul";
-@import "list-boxes";
-@import "avatar";
+  &--button {
+    display: flex;
+    justify-content: flex-end;
+    margin-right: 45px;
+    margin-top: 80px
+  }
+}
+
+.page-header {
+  @extend .header__medium--greyish-brown;
+  text-align: center;
+  margin-bottom: 16px;
+}
+
+.page-subtitle {
+  @extend .subtitle__large--brownish-grey;
+  text-align: center;
+  font-weight: normal;
+  margin-bottom: 80px;
+}
+
+.container {
+  margin-top: 44px;
+  @media(min-width: 1200px) {
+    max-width: 1230px;
+  }
+}
diff --git a/landing-pages/site/assets/scss/_buttons.scss 
b/landing-pages/site/assets/scss/_buttons.scss
index a186550..4aa76fc 100644
--- a/landing-pages/site/assets/scss/_buttons.scss
+++ b/landing-pages/site/assets/scss/_buttons.scss
@@ -16,7 +16,6 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
 @import "colors";
 
 button {
@@ -26,6 +25,10 @@ button {
   padding: 9px 29px;
   transition: all ease-out 0.2s;
 
+  &:disabled {
+    cursor: not-allowed;
+  }
+
   &.btn-filled {
     border-color: map_get($colors, cerulean-blue);
     background-color: map_get($colors, cerulean-blue);
@@ -60,7 +63,12 @@ button {
       border-color: map_get($colors, cerulean-blue);
       background-color: transparent;
 
-      &:hover {
+      &:disabled {
+        color: map_get($colors, very-light-pink);
+        border-color: map_get($colors, very-light-pink);
+      }
+
+      &:hover:enabled {
         color: map_get($colors, white);
         background-color: map_get($colors, cerulean-blue);
       }
@@ -76,6 +84,7 @@ button {
         span {
           color: map_get($colors, white);
         }
+
         svg {
           path {
             fill: map_get($colors, white);
@@ -84,4 +93,15 @@ button {
       }
     }
   }
+
+  &.button-fixed {
+    position: fixed;
+    right: 60px;
+    bottom: 40px;
+    z-index: 1;
+  }
+
+  &.with-box-shadow {
+    box-shadow: 0 2px 6px 0 rgba(0, 0, 0, .12);
+  }
 }
diff --git a/landing-pages/site/assets/scss/main-custom.scss 
b/landing-pages/site/assets/scss/_case-study.scss
similarity index 68%
copy from landing-pages/site/assets/scss/main-custom.scss
copy to landing-pages/site/assets/scss/_case-study.scss
index 0d0dc95..801c5bc 100644
--- a/landing-pages/site/assets/scss/main-custom.scss
+++ b/landing-pages/site/assets/scss/_case-study.scss
@@ -17,13 +17,7 @@
  * under the License.
  */
 
-@import url('https://fonts.googleapis.com/css?family=Rubik:500&display=swap');
-@import 
url('https://fonts.googleapis.com/css?family=Roboto:400,500,700&display=swap');
-@import 
url('https://fonts.googleapis.com/css?family=Roboto+Mono&display=swap');
-
-@import "typography";
-@import "accordion";
-@import "buttons";
-@import "ol-ul";
-@import "list-boxes";
-@import "avatar";
+.case-study-page {
+  max-width: 790px;
+  margin: 60px auto 0;
+}
diff --git a/landing-pages/site/assets/scss/_list-boxes.scss 
b/landing-pages/site/assets/scss/_list-boxes.scss
index 3d5e85e..51b49ed 100644
--- a/landing-pages/site/assets/scss/_list-boxes.scss
+++ b/landing-pages/site/assets/scss/_list-boxes.scss
@@ -60,7 +60,9 @@ $box-margin: 20px;
     justify-content: space-between;
 
     &--logo {
+      display: flex;
       height: 60px;
+      align-items: center;
     }
 
     &--quote {
@@ -68,6 +70,14 @@ $box-margin: 20px;
       font-style: italic;
       margin: 30px 0 20px;
       text-align: center;
+
+      &::before {
+        content: "“";
+      }
+
+      &::after {
+        content: "”";
+      }
     }
   }
 
diff --git a/landing-pages/site/assets/scss/_ol-ul.scss 
b/landing-pages/site/assets/scss/_ol-ul.scss
index f52414e..fbacaf2 100644
--- a/landing-pages/site/assets/scss/_ol-ul.scss
+++ b/landing-pages/site/assets/scss/_ol-ul.scss
@@ -17,8 +17,6 @@
  * under the License.
  */
 
-@import "typography";
-
 ol.counter-blue, ul.ticks-blue {
   list-style: none;
 
diff --git a/landing-pages/site/assets/scss/main-custom.scss 
b/landing-pages/site/assets/scss/_pager.scss
similarity index 68%
copy from landing-pages/site/assets/scss/main-custom.scss
copy to landing-pages/site/assets/scss/_pager.scss
index 0d0dc95..35d1ce0 100644
--- a/landing-pages/site/assets/scss/main-custom.scss
+++ b/landing-pages/site/assets/scss/_pager.scss
@@ -17,13 +17,9 @@
  * under the License.
  */
 
-@import url('https://fonts.googleapis.com/css?family=Rubik:500&display=swap');
-@import 
url('https://fonts.googleapis.com/css?family=Roboto:400,500,700&display=swap');
-@import 
url('https://fonts.googleapis.com/css?family=Roboto+Mono&display=swap');
-
-@import "typography";
-@import "accordion";
-@import "buttons";
-@import "ol-ul";
-@import "list-boxes";
-@import "avatar";
+.pager {
+  display: flex;
+  width: 100%;
+  justify-content: space-between;
+  margin-top: 60px;
+}
diff --git a/landing-pages/site/assets/scss/main-custom.scss 
b/landing-pages/site/assets/scss/_paragraph.scss
similarity index 68%
copy from landing-pages/site/assets/scss/main-custom.scss
copy to landing-pages/site/assets/scss/_paragraph.scss
index 0d0dc95..70717d2 100644
--- a/landing-pages/site/assets/scss/main-custom.scss
+++ b/landing-pages/site/assets/scss/_paragraph.scss
@@ -17,13 +17,14 @@
  * under the License.
  */
 
-@import url('https://fonts.googleapis.com/css?family=Rubik:500&display=swap');
-@import 
url('https://fonts.googleapis.com/css?family=Roboto:400,500,700&display=swap');
-@import 
url('https://fonts.googleapis.com/css?family=Roboto+Mono&display=swap');
+.paragraph {
+  &--header {
+    @extend .subtitle__large--greyish-brown;
+    margin-top: 40px;
+  }
 
-@import "typography";
-@import "accordion";
-@import "buttons";
-@import "ol-ul";
-@import "list-boxes";
-@import "avatar";
+  &--text {
+    @extend .bodytext__medium--brownish-grey;
+    margin-top: 20px;
+  }
+}
diff --git a/landing-pages/site/assets/scss/main-custom.scss 
b/landing-pages/site/assets/scss/_quote.scss
similarity index 60%
copy from landing-pages/site/assets/scss/main-custom.scss
copy to landing-pages/site/assets/scss/_quote.scss
index 0d0dc95..55d35d2 100644
--- a/landing-pages/site/assets/scss/main-custom.scss
+++ b/landing-pages/site/assets/scss/_quote.scss
@@ -17,13 +17,36 @@
  * under the License.
  */
 
-@import url('https://fonts.googleapis.com/css?family=Rubik:500&display=swap');
-@import 
url('https://fonts.googleapis.com/css?family=Roboto:400,500,700&display=swap');
-@import 
url('https://fonts.googleapis.com/css?family=Roboto+Mono&display=swap');
+@import "colors";
 
-@import "typography";
-@import "accordion";
-@import "buttons";
-@import "ol-ul";
-@import "list-boxes";
-@import "avatar";
+.quote {
+  display: flex;
+  flex-direction: column;
+  border-bottom: solid 1px map-get($colors, brownish-grey);
+  padding: 0 78px 60px;
+
+  &--text {
+    @extend .subtitle__large--brownish-grey;
+    text-align: center;
+    font-weight: normal;
+
+    &::before {
+      content: "“"
+    }
+
+    &::after {
+      content: "”";
+    }
+  }
+
+  &--author {
+    @extend .bodytext__medium--greyish-brown;
+    text-align: center;
+    font-weight: 500;
+    margin-bottom: 32px;
+  }
+
+  &--logo {
+    margin: 0 auto;
+  }
+}
diff --git a/landing-pages/site/assets/scss/main-custom.scss 
b/landing-pages/site/assets/scss/main-custom.scss
index 0d0dc95..4b7330e 100644
--- a/landing-pages/site/assets/scss/main-custom.scss
+++ b/landing-pages/site/assets/scss/main-custom.scss
@@ -27,3 +27,8 @@
 @import "ol-ul";
 @import "list-boxes";
 @import "avatar";
+@import "quote";
+@import "pager";
+@import "case-study";
+@import "paragraph";
+@import "base-layout";
diff --git a/landing-pages/site/content/en/case-studies/_index.html 
b/landing-pages/site/content/en/case-studies/_index.html
new file mode 100644
index 0000000..90f08e3
--- /dev/null
+++ b/landing-pages/site/content/en/case-studies/_index.html
@@ -0,0 +1,7 @@
+---
+title: "Case studies"
+linkTitle: "Case studies"
+menu:
+    main:
+        weight: 6
+---
diff --git a/landing-pages/site/content/en/case-studies/example-case1.html 
b/landing-pages/site/content/en/case-studies/example-case1.html
new file mode 100644
index 0000000..3ccaa63
--- /dev/null
+++ b/landing-pages/site/content/en/case-studies/example-case1.html
@@ -0,0 +1,27 @@
+---
+title: "Example 1"
+linkTitle: "Example 1"
+quote:
+    text: "A great ecosystem and community that comes together to address 
about any batch data pipeline need."
+    author: "Austin Benett, CTO at Spotify"
+logo_path: "icons/spotify-logo.svg"
+---
+
+{{< paragraph header="What was the problem?" >}}
+    We faced increasing complexity managing lengthy crontabs with scheduling 
being an issue, this required carefully planning timing due to resource 
constraints, usage patterns, and especially custom code needed for retry logic. 
 In the last case, having to verify success of previous jobs and/or steps prior 
to running the next.  Furthermore, time to results is important, but we were 
increasingly relying on buffers for processing, where things were effectively 
sitting idle and not process [...]
+{{</ paragraph >}}
+
+{{< paragraph header="How did Apache Airflow help to solve this problem?" >}}
+    Relying on community built and existing hooks and operators to the 
majority of cloud services we use has allowed us to focus
+    on business outcomes.
+{{</ paragraph >}}
+
+{{< paragraph header="What are the results?" >}}
+    Airflow helps us manage many of our pain-points, letting us benefit from 
the overall ecosystem and
+    community.  We are able to reduce time-to-end delivery of data products by 
being event-driven in our
+    processing flows (in our first usage, for example, we were able to take 
out over 2 hours - on average - of various
+    waiting between stages).  Furthermore, we are able to arrive at and 
iterate on products quicker as a result of
+    not needing as much custom or roll-our-own solutions.  For Our code base 
is smaller and simpler, it is easier to
+    follow, and to a large extent our DAGs serve as sufficient documentation 
for new contributors to understand
+    what is going on.
+{{</ paragraph >}}
diff --git a/landing-pages/site/content/en/case-studies/example-case2.html 
b/landing-pages/site/content/en/case-studies/example-case2.html
new file mode 100644
index 0000000..8556393
--- /dev/null
+++ b/landing-pages/site/content/en/case-studies/example-case2.html
@@ -0,0 +1,27 @@
+---
+title: "Example 2"
+linkTitle: "Example 2"
+quote:
+    text: "A great ecosystem and community that comes together to address 
about any batch data pipeline need."
+    author: "Austin Benett, CTO at Spotify"
+logo_path: "icons/dish-logo.svg"
+---
+
+{{< paragraph header="What was the problem?" >}}
+    We faced increasing complexity managing lengthy crontabs with scheduling 
being an issue, this required carefully planning timing due to resource 
constraints, usage patterns, and especially custom code needed for retry logic. 
 In the last case, having to verify success of previous jobs and/or steps prior 
to running the next.  Furthermore, time to results is important, but we were 
increasingly relying on buffers for processing, where things were effectively 
sitting idle and not process [...]
+{{</ paragraph >}}
+
+{{< paragraph header="How did Apache Airflow help to solve this problem?" >}}
+    Relying on community built and existing hooks and operators to the 
majority of cloud services we use has allowed us to focus
+    on business outcomes.
+{{</ paragraph >}}
+
+{{< paragraph header="What are the results?" >}}
+    Airflow helps us manage many of our pain-points, letting us benefit from 
the overall ecosystem and
+    community.  We are able to reduce time-to-end delivery of data products by 
being event-driven in our
+    processing flows (in our first usage, for example, we were able to take 
out over 2 hours - on average - of various
+    waiting between stages).  Furthermore, we are able to arrive at and 
iterate on products quicker as a result of
+    not needing as much custom or roll-our-own solutions.  For Our code base 
is smaller and simpler, it is easier to
+    follow, and to a large extent our DAGs serve as sufficient documentation 
for new contributors to understand
+    what is going on.
+{{</ paragraph >}}
diff --git a/landing-pages/site/content/en/case-studies/example-case3.html 
b/landing-pages/site/content/en/case-studies/example-case3.html
new file mode 100644
index 0000000..e3458fa
--- /dev/null
+++ b/landing-pages/site/content/en/case-studies/example-case3.html
@@ -0,0 +1,27 @@
+---
+title: "Example 3"
+linkTitle: "Example 3"
+quote:
+    text: "A great ecosystem and community that comes together to address 
about any batch data pipeline need."
+    author: "Austin Benett, CTO at Spotify"
+logo_path: "icons/spotify-logo.svg"
+---
+
+{{< paragraph header="What was the problem?" >}}
+    We faced increasing complexity managing lengthy crontabs with scheduling 
being an issue, this required carefully planning timing due to resource 
constraints, usage patterns, and especially custom code needed for retry logic. 
 In the last case, having to verify success of previous jobs and/or steps prior 
to running the next.  Furthermore, time to results is important, but we were 
increasingly relying on buffers for processing, where things were effectively 
sitting idle and not process [...]
+{{</ paragraph >}}
+
+{{< paragraph header="How did Apache Airflow help to solve this problem?" >}}
+    Relying on community built and existing hooks and operators to the 
majority of cloud services we use has allowed us to focus
+    on business outcomes.
+{{</ paragraph >}}
+
+{{< paragraph header="What are the results?" >}}
+    Airflow helps us manage many of our pain-points, letting us benefit from 
the overall ecosystem and
+    community.  We are able to reduce time-to-end delivery of data products by 
being event-driven in our
+    processing flows (in our first usage, for example, we were able to take 
out over 2 hours - on average - of various
+    waiting between stages).  Furthermore, we are able to arrive at and 
iterate on products quicker as a result of
+    not needing as much custom or roll-our-own solutions.  For Our code base 
is smaller and simpler, it is easier to
+    follow, and to a large extent our DAGs serve as sufficient documentation 
for new contributors to understand
+    what is going on.
+{{</ paragraph >}}
diff --git a/landing-pages/site/content/en/case-studies/example-case4.html 
b/landing-pages/site/content/en/case-studies/example-case4.html
new file mode 100644
index 0000000..4b4891e
--- /dev/null
+++ b/landing-pages/site/content/en/case-studies/example-case4.html
@@ -0,0 +1,27 @@
+---
+title: "Example 4"
+linkTitle: "Example 4"
+quote:
+    text: "A great ecosystem and community that comes together to address 
about any batch data pipeline need."
+    author: "Austin Benett, CTO at Spotify"
+logo_path: "icons/spotify-logo.svg"
+---
+
+{{< paragraph header="What was the problem?" >}}
+    We faced increasing complexity managing lengthy crontabs with scheduling 
being an issue, this required carefully planning timing due to resource 
constraints, usage patterns, and especially custom code needed for retry logic. 
 In the last case, having to verify success of previous jobs and/or steps prior 
to running the next.  Furthermore, time to results is important, but we were 
increasingly relying on buffers for processing, where things were effectively 
sitting idle and not process [...]
+{{</ paragraph >}}
+
+{{< paragraph header="How did Apache Airflow help to solve this problem?" >}}
+    Relying on community built and existing hooks and operators to the 
majority of cloud services we use has allowed us to focus
+    on business outcomes.
+{{</ paragraph >}}
+
+{{< paragraph header="What are the results?" >}}
+    Airflow helps us manage many of our pain-points, letting us benefit from 
the overall ecosystem and
+    community.  We are able to reduce time-to-end delivery of data products by 
being event-driven in our
+    processing flows (in our first usage, for example, we were able to take 
out over 2 hours - on average - of various
+    waiting between stages).  Furthermore, we are able to arrive at and 
iterate on products quicker as a result of
+    not needing as much custom or roll-our-own solutions.  For Our code base 
is smaller and simpler, it is easier to
+    follow, and to a large extent our DAGs serve as sufficient documentation 
for new contributors to understand
+    what is going on.
+{{</ paragraph >}}
diff --git a/landing-pages/site/content/en/case-studies/example-case5.html 
b/landing-pages/site/content/en/case-studies/example-case5.html
new file mode 100644
index 0000000..7f13697
--- /dev/null
+++ b/landing-pages/site/content/en/case-studies/example-case5.html
@@ -0,0 +1,27 @@
+---
+title: "Example 5"
+linkTitle: "Example 5"
+quote:
+    text: "A great ecosystem and community that comes together to address 
about any batch data pipeline need."
+    author: "Austin Benett, CTO at Spotify"
+logo_path: "icons/spotify-logo.svg"
+---
+
+{{< paragraph header="What was the problem?" >}}
+    We faced increasing complexity managing lengthy crontabs with scheduling 
being an issue, this required carefully planning timing due to resource 
constraints, usage patterns, and especially custom code needed for retry logic. 
 In the last case, having to verify success of previous jobs and/or steps prior 
to running the next.  Furthermore, time to results is important, but we were 
increasingly relying on buffers for processing, where things were effectively 
sitting idle and not process [...]
+{{</ paragraph >}}
+
+{{< paragraph header="How did Apache Airflow help to solve this problem?" >}}
+    Relying on community built and existing hooks and operators to the 
majority of cloud services we use has allowed us to focus
+    on business outcomes.
+{{</ paragraph >}}
+
+{{< paragraph header="What are the results?" >}}
+    Airflow helps us manage many of our pain-points, letting us benefit from 
the overall ecosystem and
+    community.  We are able to reduce time-to-end delivery of data products by 
being event-driven in our
+    processing flows (in our first usage, for example, we were able to take 
out over 2 hours - on average - of various
+    waiting between stages).  Furthermore, we are able to arrive at and 
iterate on products quicker as a result of
+    not needing as much custom or roll-our-own solutions.  For Our code base 
is smaller and simpler, it is easier to
+    follow, and to a large extent our DAGs serve as sufficient documentation 
for new contributors to understand
+    what is going on.
+{{</ paragraph >}}
diff --git a/landing-pages/site/content/en/case-studies/example-case6.html 
b/landing-pages/site/content/en/case-studies/example-case6.html
new file mode 100644
index 0000000..7744ae4
--- /dev/null
+++ b/landing-pages/site/content/en/case-studies/example-case6.html
@@ -0,0 +1,27 @@
+---
+title: "Example 6"
+linkTitle: "Example 6"
+quote:
+    text: "A great ecosystem and community that comes together to address 
about any batch data pipeline need."
+    author: "Austin Benett, CTO at Spotify"
+logo_path: "icons/dish-logo.svg"
+---
+
+{{< paragraph header="What was the problem?" >}}
+    We faced increasing complexity managing lengthy crontabs with scheduling 
being an issue, this required carefully planning timing due to resource 
constraints, usage patterns, and especially custom code needed for retry logic. 
 In the last case, having to verify success of previous jobs and/or steps prior 
to running the next.  Furthermore, time to results is important, but we were 
increasingly relying on buffers for processing, where things were effectively 
sitting idle and not process [...]
+{{</ paragraph >}}
+
+{{< paragraph header="How did Apache Airflow help to solve this problem?" >}}
+    Relying on community built and existing hooks and operators to the 
majority of cloud services we use has allowed us to focus
+    on business outcomes.
+{{</ paragraph >}}
+
+{{< paragraph header="What are the results?" >}}
+    Airflow helps us manage many of our pain-points, letting us benefit from 
the overall ecosystem and
+    community.  We are able to reduce time-to-end delivery of data products by 
being event-driven in our
+    processing flows (in our first usage, for example, we were able to take 
out over 2 hours - on average - of various
+    waiting between stages).  Furthermore, we are able to arrive at and 
iterate on products quicker as a result of
+    not needing as much custom or roll-our-own solutions.  For Our code base 
is smaller and simpler, it is easier to
+    follow, and to a large extent our DAGs serve as sufficient documentation 
for new contributors to understand
+    what is going on.
+{{</ paragraph >}}
diff --git a/landing-pages/site/data/case_studies.json 
b/landing-pages/site/data/case_studies.json
index 965e1d1..a3f9107 100644
--- a/landing-pages/site/data/case_studies.json
+++ b/landing-pages/site/data/case_studies.json
@@ -2,31 +2,46 @@
   {
     "name": "dish",
     "logo_path": "icons/dish-logo.svg",
-    "quote": "\u201cA great ecosystem and community that comes together to 
address about any batch data pipeline need.\u201d",
+    "quote": {
+      "author": "John Doe",
+      "text": "A great ecosystem and community that comes together to address 
about any batch data pipeline need."
+    },
     "url": ""
   },
   {
     "name": "dish",
     "logo_path": "icons/dish-logo.svg",
-    "quote": "\u201cA great ecosystem and community that comes together to 
address about any batch data pipeline need.\u201d",
+    "quote": {
+      "author": "John Doe",
+      "text": "A great ecosystem and community that comes together to address 
about any batch data pipeline need."
+    },
     "url": ""
   },
   {
     "name": "dish",
     "logo_path": "icons/dish-logo.svg",
-    "quote": "\u201cA great ecosystem and community that comes together to 
address about any batch data pipeline need.\u201d",
+    "quote": {
+      "author": "John Doe",
+      "text": "A great ecosystem and community that comes together to address 
about any batch data pipeline need."
+    },
     "url": ""
   },
   {
     "name": "dish",
     "logo_path": "icons/dish-logo.svg",
-    "quote": "\u201cA great ecosystem and community that comes together to 
address about any batch data pipeline need.\u201d",
+    "quote": {
+      "author": "John Doe",
+      "text": "A great ecosystem and community that comes together to address 
about any batch data pipeline need."
+    },
     "url": ""
   },
   {
     "name": "dish",
     "logo_path": "icons/dish-logo.svg",
-    "quote": "\u201cA great ecosystem and community that comes together to 
address about any batch data pipeline need.\u201d",
+    "quote": {
+      "author": "John Doe",
+      "text": "A great ecosystem and community that comes together to address 
about any batch data pipeline need."
+    },
     "url": ""
   }
 ]
diff --git a/landing-pages/site/layouts/_default/baseof.html 
b/landing-pages/site/layouts/_default/baseof.html
index c5e50d5..04a48dc 100644
--- a/landing-pages/site/layouts/_default/baseof.html
+++ b/landing-pages/site/layouts/_default/baseof.html
@@ -26,9 +26,14 @@
 <header>
     {{ partial "navbar.html" . }}
 </header>
-<div class="container-fluid td-default td-outer">
-    <main role="main" class="td-main">
+<div class="container-fluid td-default">
+    <main role="main" class="td-main base-layout">
         {{ block "main" . }}{{ end }}
+        <div class="base-layout--button">
+            <a href="https://github.com";>
+                {{ partial "buttons/button-with-icon" (dict "text" "Suggest a 
change on this page" "class" "button-fixed") }}
+            </a>
+        </div>
     </main>
     {{ partial "footer.html" . }}
 </div>
diff --git a/landing-pages/site/layouts/_default/baseof.html 
b/landing-pages/site/layouts/case-studies/baseof.html
similarity index 78%
copy from landing-pages/site/layouts/_default/baseof.html
copy to landing-pages/site/layouts/case-studies/baseof.html
index c5e50d5..b83b82f 100644
--- a/landing-pages/site/layouts/_default/baseof.html
+++ b/landing-pages/site/layouts/case-studies/baseof.html
@@ -26,9 +26,14 @@
 <header>
     {{ partial "navbar.html" . }}
 </header>
-<div class="container-fluid td-default td-outer">
-    <main role="main" class="td-main">
+<div class="container-fluid td-default">
+    <main role="main" class="td-main container base-layout">
         {{ block "main" . }}{{ end }}
+        <div class="base-layout--button">
+            <a href="https://github.com";>
+                {{ partial "buttons/button-with-icon" (dict "text" "Suggest a 
change on this page" "class" "button-fixed") }}
+            </a>
+        </div>
     </main>
     {{ partial "footer.html" . }}
 </div>
diff --git a/landing-pages/site/layouts/partials/buttons/button-hollow.html 
b/landing-pages/site/layouts/case-studies/content.html
similarity index 81%
copy from landing-pages/site/layouts/partials/buttons/button-hollow.html
copy to landing-pages/site/layouts/case-studies/content.html
index ca28cee..c7a2037 100644
--- a/landing-pages/site/layouts/partials/buttons/button-hollow.html
+++ b/landing-pages/site/layouts/case-studies/content.html
@@ -17,4 +17,8 @@
  under the License.
 */}}
 
-<button class="btn-hollow btn-blue bodytext__medium--cerulean-blue">{{ .text 
}}</button>
+<div class="td-content">
+    {{ partial "quote" .Params}}
+    {{ with .Params.description }}<div class="lead">{{ . | markdownify 
}}</div>{{ end }}
+    {{ .Content }}
+</div>
diff --git a/landing-pages/site/layouts/partials/boxes/case-study.html 
b/landing-pages/site/layouts/case-studies/list.html
similarity index 63%
copy from landing-pages/site/layouts/partials/boxes/case-study.html
copy to landing-pages/site/layouts/case-studies/list.html
index b4937a8..0ec1351 100644
--- a/landing-pages/site/layouts/partials/boxes/case-study.html
+++ b/landing-pages/site/layouts/case-studies/list.html
@@ -17,14 +17,18 @@
  under the License.
 */}}
 
-
-<div class="box-event box-event__case-study hoverable-icon">
-    <div class="box-event__case-study--logo">
-        {{ with resources.Get .logo_path }}
-            {{ .Content | safeHTML }}
-        {{ end }}
+{{ define "main" }}
+    <div>
+        <h2 class="page-header">Case studies</h2>
+        <h5 class="page-subtitle">
+            Find out how Apache Airflow helped businesses reach their goals
+        </h5>
+        <div class="list-items">
+            {{ range .Pages }}
+                <a href="{{ .RelPermalink }}" class="list-item">
+                    {{ partial "boxes/case-study" .Params }}
+                </a>
+            {{ end }}
+        </div>
     </div>
-    <p class="box-event__case-study--quote"
-       >{{ .quote }}</p>
-    {{ partial "buttons/button-hollow" (dict "text" "Learn more")}}
-</div>
+{{ end }}
diff --git a/landing-pages/site/layouts/partials/buttons/button-hollow.html 
b/landing-pages/site/layouts/case-studies/single.html
similarity index 84%
copy from landing-pages/site/layouts/partials/buttons/button-hollow.html
copy to landing-pages/site/layouts/case-studies/single.html
index ca28cee..eaa0d61 100644
--- a/landing-pages/site/layouts/partials/buttons/button-hollow.html
+++ b/landing-pages/site/layouts/case-studies/single.html
@@ -17,4 +17,9 @@
  under the License.
 */}}
 
-<button class="btn-hollow btn-blue bodytext__medium--cerulean-blue">{{ .text 
}}</button>
+{{ define "main" }}
+    <div class="case-study-page">
+        {{ .Render "content" }}
+        {{ partial "pager.html" . }}
+    </div>
+{{ end }}
diff --git a/landing-pages/site/layouts/examples/list.html 
b/landing-pages/site/layouts/examples/list.html
index 329a10d..7259aaa 100644
--- a/landing-pages/site/layouts/examples/list.html
+++ b/landing-pages/site/layouts/examples/list.html
@@ -22,49 +22,60 @@
         {{ . }}
     {{ end }}
 
-    <div style="margin-bottom: 80px;">
-        <div id="events-container" class="list-items">
-            {{ range .Site.Data.meetups }}
-                <div class="list-item">
-                    {{ partial "boxes/event" . }}
-                </div>
-            {{ end }}
+    <div style="max-width: 1200px; margin: 0 auto;">
+        <div style="margin: 0 0 120px;">
+            <div style="width: fit-content; margin: 20px auto;">
+                {{ partial "buttons/button-filled" (dict "text" "Learn more") 
}}
+            </div>
+            <div style="width: fit-content; margin: 20px auto;">
+                {{ partial "buttons/button-hollow" (dict "text" "Learn more") 
}}
+            </div>
+            <div style="width: fit-content; margin: 20px auto;">
+                {{ partial "buttons/button-with-icon" (dict "text" "Suggest a 
change on this page") }}
+            </div>
         </div>
-    </div>
 
-    <div style="margin-bottom: 80px;">
-        <div id="integrations-container" class="list-items">
-            {{ range .Site.Data.integrations }}
-                <a class="list-item" href="{{ .url }}">
-                    {{ partial "boxes/integration" . }}
-                </a>
-            {{ end }}
+        <div style="margin-bottom: 80px">
+            <div id="events-container" class="list-items">
+                {{ range .Site.Data.meetups }}
+                    <div class="list-item">
+                        {{ partial "boxes/event" . }}
+                    </div>
+                {{ end }}
+            </div>
         </div>
-    </div>
 
-    <div style="margin: 0 auto 80px; max-width: 1200px">
-        <div id="commiters-container" class="list-items">
-            {{ range .Site.Data.commiters }}
-                <div class="list-item">
-                    {{ partial "boxes/commiter" . }}
-                </div>
-            {{ end }}
+        <div style="margin-bottom: 80px">
+            <div id="integrations-container" class="list-items">
+                {{ range .Site.Data.integrations }}
+                    <a class="list-item" href="{{ .url }}">
+                        {{ partial "boxes/integration" . }}
+                    </a>
+                {{ end }}
+            </div>
         </div>
-        <div style="width: fit-content; margin: 60px auto 0">
-            {{ partial "buttons/button-filled" (dict "text" "Show all" "id" 
"show-all-commiters")}}
+
+        <div style="margin-bottom: 80px">
+            <div id="case-studies-container" class="list-items">
+                {{ range .Site.Data.case_studies }}
+                    <a href="{{ .url }}" class="list-item">
+                        {{ partial "boxes/case-study" . }}
+                    </a>
+                {{ end }}
+            </div>
         </div>
-    </div>
 
-    {{/*
-        TODO: replace json mockdata with case study site metadata
-    */}}
-    <div style="margin: 0 auto 48px; max-width: 1200px">
-        <div id="case-studies-container" class="list-items">
-            {{ range .Site.Data.case_studies }}
-                <a href="{{ .url }}" class="list-item">
-                    {{ partial "boxes/case-study" . }}
-                </a>
-            {{ end }}
+        <div style="margin-bottom: 80px">
+            <div id="commiters-container" class="list-items">
+                {{ range .Site.Data.commiters }}
+                    <div class="list-item">
+                        {{ partial "boxes/commiter" . }}
+                    </div>
+                {{ end }}
+            </div>
+            <div style="width: fit-content; margin: 60px auto 0">
+                {{ partial "buttons/button-filled" (dict "text" "Show all" 
"id" "show-all-commiters")}}
+            </div>
         </div>
     </div>
 {{ end }}
diff --git a/landing-pages/site/layouts/partials/boxes/case-study.html 
b/landing-pages/site/layouts/partials/boxes/case-study.html
index b4937a8..72848fc 100644
--- a/landing-pages/site/layouts/partials/boxes/case-study.html
+++ b/landing-pages/site/layouts/partials/boxes/case-study.html
@@ -25,6 +25,6 @@
         {{ end }}
     </div>
     <p class="box-event__case-study--quote"
-       >{{ .quote }}</p>
+       >{{ .quote.text }}</p>
     {{ partial "buttons/button-hollow" (dict "text" "Learn more")}}
 </div>
diff --git a/landing-pages/site/layouts/partials/buttons/button-hollow.html 
b/landing-pages/site/layouts/partials/buttons/button-hollow.html
index ca28cee..c178dea 100644
--- a/landing-pages/site/layouts/partials/buttons/button-hollow.html
+++ b/landing-pages/site/layouts/partials/buttons/button-hollow.html
@@ -17,4 +17,4 @@
  under the License.
 */}}
 
-<button class="btn-hollow btn-blue bodytext__medium--cerulean-blue">{{ .text 
}}</button>
+<button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" {{ if 
.disabled }}disabled{{ end }}>{{ .text }}</button>
diff --git a/landing-pages/site/layouts/partials/buttons/button-with-icon.html 
b/landing-pages/site/layouts/partials/buttons/button-with-icon.html
index 970f7b0..7841d4b 100644
--- a/landing-pages/site/layouts/partials/buttons/button-with-icon.html
+++ b/landing-pages/site/layouts/partials/buttons/button-with-icon.html
@@ -18,7 +18,7 @@
 */}}
 
 {{ $svg_path := .svg_path | default "icons/github.svg" }}
-<button class="btn-hollow btn-brown btn-with-icon">
+<button class="btn-hollow btn-brown btn-with-icon with-box-shadow {{ .class 
}}">
     {{ with resources.Get "icons/github.svg" }}{{ .Content | safeHTML }}{{ end 
}}
     <span class="bodytext__medium--brownish-grey">{{ .text }}</span>
 </button>
diff --git a/landing-pages/site/layouts/partials/boxes/case-study.html 
b/landing-pages/site/layouts/partials/pager.html
similarity index 66%
copy from landing-pages/site/layouts/partials/boxes/case-study.html
copy to landing-pages/site/layouts/partials/pager.html
index b4937a8..bea5e36 100644
--- a/landing-pages/site/layouts/partials/boxes/case-study.html
+++ b/landing-pages/site/layouts/partials/pager.html
@@ -17,14 +17,11 @@
  under the License.
 */}}
 
-
-<div class="box-event box-event__case-study hoverable-icon">
-    <div class="box-event__case-study--logo">
-        {{ with resources.Get .logo_path }}
-            {{ .Content | safeHTML }}
-        {{ end }}
-    </div>
-    <p class="box-event__case-study--quote"
-       >{{ .quote }}</p>
-    {{ partial "buttons/button-hollow" (dict "text" "Learn more")}}
+<div class="pager">
+    <a {{if .PrevInSection}}href="{{.PrevInSection.RelPermalink}}"{{end}}>
+        {{ partial "buttons/button-hollow" (dict "text" "Previous" "disabled" 
(not .PrevInSection)) }}
+    </a>
+    <a {{if .NextInSection}}href="{{.NextInSection.RelPermalink}}"{{end}}>
+        {{ partial "buttons/button-hollow" (dict "text" "Next" "disabled" (not 
.NextInSection)) }}
+    </a>
 </div>
diff --git a/landing-pages/site/layouts/partials/buttons/button-hollow.html 
b/landing-pages/site/layouts/partials/quote.html
similarity index 74%
copy from landing-pages/site/layouts/partials/buttons/button-hollow.html
copy to landing-pages/site/layouts/partials/quote.html
index ca28cee..64ec9d3 100644
--- a/landing-pages/site/layouts/partials/buttons/button-hollow.html
+++ b/landing-pages/site/layouts/partials/quote.html
@@ -17,4 +17,12 @@
  under the License.
 */}}
 
-<button class="btn-hollow btn-blue bodytext__medium--cerulean-blue">{{ .text 
}}</button>
+<div class="quote">
+    <p class="quote--text">{{ .quote.text }}</p>
+    <p class="quote--author">{{ .quote.author }}</p>
+    {{ with resources.Get .logo_path }}
+        <div class="quote--logo">
+            {{ .Content | safeHTML }}
+        </div>
+    {{ end }}
+</div>
diff --git a/landing-pages/site/layouts/partials/buttons/button-hollow.html 
b/landing-pages/site/layouts/shortcodes/paragraph.html
similarity index 88%
copy from landing-pages/site/layouts/partials/buttons/button-hollow.html
copy to landing-pages/site/layouts/shortcodes/paragraph.html
index ca28cee..fe5e358 100644
--- a/landing-pages/site/layouts/partials/buttons/button-hollow.html
+++ b/landing-pages/site/layouts/shortcodes/paragraph.html
@@ -17,4 +17,5 @@
  under the License.
 */}}
 
-<button class="btn-hollow btn-blue bodytext__medium--cerulean-blue">{{ .text 
}}</button>
+<h5 class="paragraph--header">{{ .Get "header"}}</h5>
+<p class="paragraph--text">{{ .Inner }}</p>

Reply via email to