diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 00000000000..5760be58369
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,12 @@
+# http://editorconfig.org
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.md]
+trim_trailing_whitespace = false
diff --git a/emails/README.md b/emails/README.md
new file mode 100644
index 00000000000..e00d048bc2a
--- /dev/null
+++ b/emails/README.md
@@ -0,0 +1,79 @@
+# generator-ink-me [](https://travis-ci.org/dnnsldr/generator-ink-me)
+
+A [Yeoman](http://yeoman.io) generator
+
+This is a Yeoman generator for building emails based on [Zurb Ink](http://zurb.com/ink/) templates. This also uses Grunt to add livereload, remove unused CSS and then to inline all CSS for the final build.
+
+Email templates include:
+* Basic
+* Hero
+* Sidebar
+* Sidebar Hero
+* Order Confirmation
+* Shipping Confirmation
+* Shopify Order Confirmation
+* Shopify Shipping Confirmation
+
+##
+## Getting Started
+##
+
+* Install: `npm install -g generator-ink-me`
+* Run `yo ink-me` in the folder you wish to have your files (ex: Sites/my-email-project-folder-name)
+
+
+##
+## The Generator will ask you for the following information:
+##
+* Choose your template
+* Give your project a name -- This will be the github/bitbucket repository name
+* What domain will images be hosted on
+* What is the folder path on the server of the hosting provider you want to use
+* What is the `public` folder path for the images on the hosting server
+* What is your FTP username
+* What is your FTP password
+* Do you want to Litmus test
+* Litmus username **(this is conditional based on if you want litmus testing)
+* Litmus password **(conditional)
+* Litmus API name (in your litmus Settings -> Profile -> Subdomain for API) **(conditional)
+* Choose your litmus testing clients **(conditional)
+
+##
+## Using LiveReload
+##
+
+To get started you can run `grunt` from the terminal.
+
+The default "grunt" will start the `watch` process for all css files and the index.html file. LiveReload is now enabled.
+Grab the [Chrome extension](https://chrome.google.com/webstore/detail/livereload/jnihajbhpnppcggbcgedagnkighmdlei) for LiveReload to help with ports.
+
+##
+## When Your Ready to Finalize the Files for Production
+## Final Build
+##
+
+Once you are ready to package up your final build, grunt will get rid of the unused css from Ink and inline all the css, ftp your images to your image hosting provider, and run a Litmus test if you chose Litmus -
+
+* run the command `grunt inkify` from the terminal
+
+* This will create a copy of your index file with a reference to a newly created css file. This new css file gets rid of all of the unused css from Ink and makes a copy of the new css for reference in the copied html.
+
+* The grunt task of 'premailer' will take the newly reference html and css and move all css inline.
+
+* Images will be optimized
+
+* Images will be FTP'd to your hosting provider.
+
+* Image relative URL's will be replaced with absolute URL's from Image Hosting Domain set during the generator.
+
+* A test will be sent to Litmus if you choose to with the clients you define.
+
+* Thats it. There will be a new folder called 'dist' that will have your `email-inline.html` file that is ready for use.
+
+## Tips
+
+* To get out of the 'Watch' when running the terminal, on MacOS click `control` and `c`. This will get your terminal back to the prompt to run new tasks.
+
+* Make all CSS changes in the `style.css`. The `ink.css` is from the bower componenet and is pulling the lastest ink css. These files will be merged togehter and will get rid of any unused when running `grunt inkify`.
+
+##
\ No newline at end of file
diff --git a/emails/assets/css/ink.css b/emails/assets/css/ink.css
new file mode 100644
index 00000000000..f7d40238555
--- /dev/null
+++ b/emails/assets/css/ink.css
@@ -0,0 +1,688 @@
+/**********************************************
+* Ink v1.0.5 - Copyright 2013 ZURB Inc *
+**********************************************/
+
+/* Client-specific Styles & Reset */
+
+#outlook a {
+ padding:0;
+}
+
+body{
+ width:100% !important;
+ min-width: 100%;
+ -webkit-text-size-adjust:100%;
+ -ms-text-size-adjust:100%;
+ margin:0;
+ padding:0;
+}
+
+.ExternalClass {
+ width:100%;
+}
+
+.ExternalClass,
+.ExternalClass p,
+.ExternalClass span,
+.ExternalClass font,
+.ExternalClass td,
+.ExternalClass div {
+ line-height: 100%;
+}
+
+#backgroundTable {
+ margin:0;
+ padding:0;
+ width:100% !important;
+ line-height: 100% !important;
+}
+
+img {
+ outline:none;
+ text-decoration:none;
+ -ms-interpolation-mode: bicubic;
+ width: auto;
+ max-width: 100%;
+ float: left;
+ clear: both;
+ display: block;
+}
+
+center {
+ width: 100%;
+ min-width: 580px;
+}
+
+a img {
+ border: none;
+}
+
+p {
+ margin: 0 0 0 10px;
+}
+
+table {
+ border-spacing: 0;
+ border-collapse: collapse;
+}
+
+td {
+ word-break: break-word;
+ -webkit-hyphens: auto;
+ -moz-hyphens: auto;
+ hyphens: auto;
+ border-collapse: collapse !important;
+}
+
+table, tr, td {
+ padding: 0;
+ vertical-align: top;
+ text-align: left;
+}
+
+hr {
+ color: #d9d9d9;
+ background-color: #d9d9d9;
+ height: 1px;
+ border: none;
+}
+
+/* Responsive Grid */
+
+table.body {
+ height: 100%;
+ width: 100%;
+}
+
+table.container {
+ width: 580px;
+ margin: 0 auto;
+ text-align: inherit;
+}
+
+table.row {
+ padding: 0px;
+ width: 100%;
+ position: relative;
+}
+
+table.container table.row {
+ display: block;
+}
+
+td.wrapper {
+ padding: 10px 20px 0px 0px;
+ position: relative;
+}
+
+table.columns,
+table.column {
+ margin: 0 auto;
+}
+
+table.columns td,
+table.column td {
+ padding: 0px 0px 10px;
+}
+
+table.columns td.sub-columns,
+table.column td.sub-columns,
+table.columns td.sub-column,
+table.column td.sub-column {
+ padding-right: 10px;
+}
+
+td.sub-column, td.sub-columns {
+ min-width: 0px;
+}
+
+table.row td.last,
+table.container td.last {
+ padding-right: 0px;
+}
+
+table.one { width: 30px; }
+table.two { width: 80px; }
+table.three { width: 130px; }
+table.four { width: 180px; }
+table.five { width: 230px; }
+table.six { width: 280px; }
+table.seven { width: 330px; }
+table.eight { width: 380px; }
+table.nine { width: 430px; }
+table.ten { width: 480px; }
+table.eleven { width: 530px; }
+table.twelve { width: 580px; }
+
+table.one center { min-width: 30px; }
+table.two center { min-width: 80px; }
+table.three center { min-width: 130px; }
+table.four center { min-width: 180px; }
+table.five center { min-width: 230px; }
+table.six center { min-width: 280px; }
+table.seven center { min-width: 330px; }
+table.eight center { min-width: 380px; }
+table.nine center { min-width: 430px; }
+table.ten center { min-width: 480px; }
+table.eleven center { min-width: 530px; }
+table.twelve center { min-width: 580px; }
+
+table.one .panel center { min-width: 10px; }
+table.two .panel center { min-width: 60px; }
+table.three .panel center { min-width: 110px; }
+table.four .panel center { min-width: 160px; }
+table.five .panel center { min-width: 210px; }
+table.six .panel center { min-width: 260px; }
+table.seven .panel center { min-width: 310px; }
+table.eight .panel center { min-width: 360px; }
+table.nine .panel center { min-width: 410px; }
+table.ten .panel center { min-width: 460px; }
+table.eleven .panel center { min-width: 510px; }
+table.twelve .panel center { min-width: 560px; }
+
+.body .columns td.one,
+.body .column td.one { width: 8.333333%; }
+.body .columns td.two,
+.body .column td.two { width: 16.666666%; }
+.body .columns td.three,
+.body .column td.three { width: 25%; }
+.body .columns td.four,
+.body .column td.four { width: 33.333333%; }
+.body .columns td.five,
+.body .column td.five { width: 41.666666%; }
+.body .columns td.six,
+.body .column td.six { width: 50%; }
+.body .columns td.seven,
+.body .column td.seven { width: 58.333333%; }
+.body .columns td.eight,
+.body .column td.eight { width: 66.666666%; }
+.body .columns td.nine,
+.body .column td.nine { width: 75%; }
+.body .columns td.ten,
+.body .column td.ten { width: 83.333333%; }
+.body .columns td.eleven,
+.body .column td.eleven { width: 91.666666%; }
+.body .columns td.twelve,
+.body .column td.twelve { width: 100%; }
+
+td.offset-by-one { padding-left: 50px; }
+td.offset-by-two { padding-left: 100px; }
+td.offset-by-three { padding-left: 150px; }
+td.offset-by-four { padding-left: 200px; }
+td.offset-by-five { padding-left: 250px; }
+td.offset-by-six { padding-left: 300px; }
+td.offset-by-seven { padding-left: 350px; }
+td.offset-by-eight { padding-left: 400px; }
+td.offset-by-nine { padding-left: 450px; }
+td.offset-by-ten { padding-left: 500px; }
+td.offset-by-eleven { padding-left: 550px; }
+
+td.expander {
+ visibility: hidden;
+ width: 0px;
+ padding: 0 !important;
+}
+
+table.columns .text-pad,
+table.column .text-pad {
+ padding-left: 10px;
+ padding-right: 10px;
+}
+
+table.columns .left-text-pad,
+table.columns .text-pad-left,
+table.column .left-text-pad,
+table.column .text-pad-left {
+ padding-left: 10px;
+}
+
+table.columns .right-text-pad,
+table.columns .text-pad-right,
+table.column .right-text-pad,
+table.column .text-pad-right {
+ padding-right: 10px;
+}
+
+/* Block Grid */
+
+.block-grid {
+ width: 100%;
+ max-width: 580px;
+}
+
+.block-grid td {
+ display: inline-block;
+ padding:10px;
+}
+
+.two-up td {
+ width:270px;
+}
+
+.three-up td {
+ width:173px;
+}
+
+.four-up td {
+ width:125px;
+}
+
+.five-up td {
+ width:96px;
+}
+
+.six-up td {
+ width:76px;
+}
+
+.seven-up td {
+ width:62px;
+}
+
+.eight-up td {
+ width:52px;
+}
+
+/* Alignment & Visibility Classes */
+
+table.center, td.center {
+ text-align: center;
+}
+
+h1.center,
+h2.center,
+h3.center,
+h4.center,
+h5.center,
+h6.center {
+ text-align: center;
+}
+
+span.center {
+ display: block;
+ width: 100%;
+ text-align: center;
+}
+
+img.center {
+ margin: 0 auto;
+ float: none;
+}
+
+.show-for-small,
+.hide-for-desktop {
+ display: none;
+}
+
+/* Typography */
+
+body, table.body, h1, h2, h3, h4, h5, h6, p, td {
+ color: #222222;
+ font-family: "Helvetica", "Arial", sans-serif;
+ font-weight: normal;
+ padding:0;
+ margin: 0;
+ text-align: left;
+ line-height: 1.3;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ word-break: normal;
+}
+
+h1 {font-size: 40px;}
+h2 {font-size: 36px;}
+h3 {font-size: 32px;}
+h4 {font-size: 28px;}
+h5 {font-size: 24px;}
+h6 {font-size: 20px;}
+body, table.body, p, td {font-size: 14px;line-height:19px;}
+
+p.lead, p.lede, p.leed {
+ font-size: 18px;
+ line-height:21px;
+}
+
+p {
+ margin-bottom: 10px;
+}
+
+small {
+ font-size: 10px;
+}
+
+a {
+ color: #2ba6cb;
+ text-decoration: none;
+}
+
+a:hover {
+ color: #2795b6 !important;
+}
+
+a:active {
+ color: #2795b6 !important;
+}
+
+a:visited {
+ color: #2ba6cb !important;
+}
+
+h1 a,
+h2 a,
+h3 a,
+h4 a,
+h5 a,
+h6 a {
+ color: #2ba6cb;
+}
+
+h1 a:active,
+h2 a:active,
+h3 a:active,
+h4 a:active,
+h5 a:active,
+h6 a:active {
+ color: #2ba6cb !important;
+}
+
+h1 a:visited,
+h2 a:visited,
+h3 a:visited,
+h4 a:visited,
+h5 a:visited,
+h6 a:visited {
+ color: #2ba6cb !important;
+}
+
+/* Panels */
+
+.panel {
+ background: #f2f2f2;
+ border: 1px solid #d9d9d9;
+ padding: 10px !important;
+}
+
+.sub-grid table {
+ width: 100%;
+}
+
+.sub-grid td.sub-columns {
+ padding-bottom: 0;
+}
+
+/* Buttons */
+
+table.button,
+table.tiny-button,
+table.small-button,
+table.medium-button,
+table.large-button {
+ width: 100%;
+ overflow: hidden;
+}
+
+table.button td,
+table.tiny-button td,
+table.small-button td,
+table.medium-button td,
+table.large-button td {
+ display: block;
+ width: auto !important;
+ text-align: center;
+ background: #2ba6cb;
+ border: 1px solid #2284a1;
+ color: #ffffff;
+ padding: 8px 0;
+}
+
+table.tiny-button td {
+ padding: 5px 0 4px;
+}
+
+table.small-button td {
+ padding: 8px 0 7px;
+}
+
+table.medium-button td {
+ padding: 12px 0 10px;
+}
+
+table.large-button td {
+ padding: 21px 0 18px;
+}
+
+table.button td a,
+table.tiny-button td a,
+table.small-button td a,
+table.medium-button td a,
+table.large-button td a {
+ font-weight: bold;
+ text-decoration: none;
+ font-family: Helvetica, Arial, sans-serif;
+ color: #ffffff;
+ font-size: 16px;
+}
+
+table.tiny-button td a {
+ font-size: 12px;
+ font-weight: normal;
+}
+
+table.small-button td a {
+ font-size: 16px;
+}
+
+table.medium-button td a {
+ font-size: 20px;
+}
+
+table.large-button td a {
+ font-size: 24px;
+}
+
+table.button:hover td,
+table.button:visited td,
+table.button:active td {
+ background: #2795b6 !important;
+}
+
+table.button:hover td a,
+table.button:visited td a,
+table.button:active td a {
+ color: #fff !important;
+}
+
+table.button:hover td,
+table.tiny-button:hover td,
+table.small-button:hover td,
+table.medium-button:hover td,
+table.large-button:hover td {
+ background: #2795b6 !important;
+}
+
+table.button:hover td a,
+table.button:active td a,
+table.button td a:visited,
+table.tiny-button:hover td a,
+table.tiny-button:active td a,
+table.tiny-button td a:visited,
+table.small-button:hover td a,
+table.small-button:active td a,
+table.small-button td a:visited,
+table.medium-button:hover td a,
+table.medium-button:active td a,
+table.medium-button td a:visited,
+table.large-button:hover td a,
+table.large-button:active td a,
+table.large-button td a:visited {
+ color: #ffffff !important;
+}
+
+table.secondary td {
+ background: #e9e9e9;
+ border-color: #d0d0d0;
+ color: #555;
+}
+
+table.secondary td a {
+ color: #555;
+}
+
+table.secondary:hover td {
+ background: #d0d0d0 !important;
+ color: #555;
+}
+
+table.secondary:hover td a,
+table.secondary td a:visited,
+table.secondary:active td a {
+ color: #555 !important;
+}
+
+table.success td {
+ background: #5da423;
+ border-color: #457a1a;
+}
+
+table.success:hover td {
+ background: #457a1a !important;
+}
+
+table.alert td {
+ background: #c60f13;
+ border-color: #970b0e;
+}
+
+table.alert:hover td {
+ background: #970b0e !important;
+}
+
+table.radius td {
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+
+table.round td {
+ -webkit-border-radius: 500px;
+ -moz-border-radius: 500px;
+ border-radius: 500px;
+}
+
+/* Outlook First */
+
+body.outlook p {
+ display: inline !important;
+}
+
+/* Media Queries */
+
+@media only screen and (max-width: 600px) {
+
+ table[class="body"] img {
+ width: auto !important;
+ height: auto !important;
+ }
+
+ table[class="body"] center {
+ min-width: 0 !important;
+ }
+
+ table[class="body"] .container {
+ width: 95% !important;
+ }
+
+ table[class="body"] .row {
+ width: 100% !important;
+ display: block !important;
+ }
+
+ table[class="body"] .wrapper {
+ display: block !important;
+ padding-right: 0 !important;
+ }
+
+ table[class="body"] .columns,
+ table[class="body"] .column {
+ table-layout: fixed !important;
+ float: none !important;
+ width: 100% !important;
+ padding-right: 0px !important;
+ padding-left: 0px !important;
+ display: block !important;
+ }
+
+ table[class="body"] .wrapper.first .columns,
+ table[class="body"] .wrapper.first .column {
+ display: table !important;
+ }
+
+ table[class="body"] table.columns td,
+ table[class="body"] table.column td {
+ width: 100% !important;
+ }
+
+ table[class="body"] .columns td.one,
+ table[class="body"] .column td.one { width: 8.333333% !important; }
+ table[class="body"] .columns td.two,
+ table[class="body"] .column td.two { width: 16.666666% !important; }
+ table[class="body"] .columns td.three,
+ table[class="body"] .column td.three { width: 25% !important; }
+ table[class="body"] .columns td.four,
+ table[class="body"] .column td.four { width: 33.333333% !important; }
+ table[class="body"] .columns td.five,
+ table[class="body"] .column td.five { width: 41.666666% !important; }
+ table[class="body"] .columns td.six,
+ table[class="body"] .column td.six { width: 50% !important; }
+ table[class="body"] .columns td.seven,
+ table[class="body"] .column td.seven { width: 58.333333% !important; }
+ table[class="body"] .columns td.eight,
+ table[class="body"] .column td.eight { width: 66.666666% !important; }
+ table[class="body"] .columns td.nine,
+ table[class="body"] .column td.nine { width: 75% !important; }
+ table[class="body"] .columns td.ten,
+ table[class="body"] .column td.ten { width: 83.333333% !important; }
+ table[class="body"] .columns td.eleven,
+ table[class="body"] .column td.eleven { width: 91.666666% !important; }
+ table[class="body"] .columns td.twelve,
+ table[class="body"] .column td.twelve { width: 100% !important; }
+
+ table[class="body"] td.offset-by-one,
+ table[class="body"] td.offset-by-two,
+ table[class="body"] td.offset-by-three,
+ table[class="body"] td.offset-by-four,
+ table[class="body"] td.offset-by-five,
+ table[class="body"] td.offset-by-six,
+ table[class="body"] td.offset-by-seven,
+ table[class="body"] td.offset-by-eight,
+ table[class="body"] td.offset-by-nine,
+ table[class="body"] td.offset-by-ten,
+ table[class="body"] td.offset-by-eleven {
+ padding-left: 0 !important;
+ }
+
+ table[class="body"] table.columns td.expander {
+ width: 1px !important;
+ }
+
+ table[class="body"] .right-text-pad,
+ table[class="body"] .text-pad-right {
+ padding-left: 10px !important;
+ }
+
+ table[class="body"] .left-text-pad,
+ table[class="body"] .text-pad-left {
+ padding-right: 10px !important;
+ }
+
+ table[class="body"] .hide-for-small,
+ table[class="body"] .show-for-desktop {
+ display: none !important;
+ }
+
+ table[class="body"] .show-for-small,
+ table[class="body"] .hide-for-desktop {
+ display: inherit !important;
+ }
+}
diff --git a/emails/assets/css/style.css b/emails/assets/css/style.css
new file mode 100644
index 00000000000..8b137891791
--- /dev/null
+++ b/emails/assets/css/style.css
@@ -0,0 +1 @@
+
diff --git a/emails/dist/email1.html b/emails/dist/email1.html
new file mode 100644
index 00000000000..4b77baa1c41
--- /dev/null
+++ b/emails/dist/email1.html
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{.Test}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hi, John Doe
+ Phasellus dictum sapien a neque luctus cursus. Pellentesque sem dolor, fringilla et pharetra vitae.
+ Phasellus dictum sapien a neque luctus cursus. Pellentesque sem dolor, fringilla et pharetra vitae. consequat vel lacus. Sed iaculis pulvinar ligula, ornare fringilla ante viverra et. In hac habitasse platea dictumst. Donec vel orci mi, eu congue justo. Integer eget odio est, eget malesuada lorem. Aenean sed tellus dui, vitae viverra risus. Nullam massa sapien, pulvinar eleifend fringilla id, convallis eget nisi. Mauris a sagittis dui. Pellentesque non lacinia mi. Fusce sit amet libero sit amet erat venenatis sollicitudin vitae vel eros. Cras nunc sapien, interdum sit amet porttitor ut, congue quis urna.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Phasellus dictum sapien a neque luctus cursus. Pellentesque sem dolor, fringilla et pharetra vitae. Click it! »
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/emails/dist/email2.html b/emails/dist/email2.html
new file mode 100644
index 00000000000..b3ca3b18f2f
--- /dev/null
+++ b/emails/dist/email2.html
@@ -0,0 +1,209 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hi, John Doe
+ Phasellus dictum sapien a neque luctus cursus. Pellentesque sem dolor, fringilla et pharetra vitae.
+ Phasellus dictum sapien a neque luctus cursus. Pellentesque sem dolor, fringilla et pharetra vitae. consequat vel lacus. Sed iaculis pulvinar ligula, ornare fringilla ante viverra et. In hac habitasse platea dictumst. Donec vel orci mi, eu congue justo. Integer eget odio est, eget malesuada lorem. Aenean sed tellus dui, vitae viverra risus. Nullam massa sapien, pulvinar eleifend fringilla id, convallis eget nisi. Mauris a sagittis dui. Pellentesque non lacinia mi. Fusce sit amet libero sit amet erat venenatis sollicitudin vitae vel eros. Cras nunc sapien, interdum sit amet porttitor ut, congue quis urna.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Phasellus dictum sapien a neque luctus cursus. Pellentesque sem dolor, fringilla et pharetra vitae. Click it! »
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/emails/grunt/aliases.yaml b/emails/grunt/aliases.yaml
new file mode 100644
index 00000000000..9afb9004c34
--- /dev/null
+++ b/emails/grunt/aliases.yaml
@@ -0,0 +1,8 @@
+default:
+ - 'watch'
+
+inkify:
+ - 'clean'
+ - 'uncss'
+ - 'processhtml'
+ - 'premailer'
diff --git a/emails/grunt/assemble.js b/emails/grunt/assemble.js
new file mode 100644
index 00000000000..a4a6390c4c2
--- /dev/null
+++ b/emails/grunt/assemble.js
@@ -0,0 +1,16 @@
+module.exports = function() {
+ 'use strict';
+ return {
+ options: {
+ layout: 'templates/layouts/default.html',
+ partials: ['templates/partials/*.hbs'],
+ helpers: ['templates/helpers/**/*.js'],
+ data: [],
+ flatten: true
+ },
+ pages: {
+ src: ['templates/*.html'],
+ dest: 'dist/'
+ }
+ };
+};
diff --git a/emails/grunt/clean.js b/emails/grunt/clean.js
new file mode 100644
index 00000000000..60b8ff0a917
--- /dev/null
+++ b/emails/grunt/clean.js
@@ -0,0 +1,5 @@
+module.exports = function(config) {
+ return {
+ dist: ['dist'],
+ };
+};
diff --git a/emails/grunt/premailer.js b/emails/grunt/premailer.js
new file mode 100644
index 00000000000..37b444b048e
--- /dev/null
+++ b/emails/grunt/premailer.js
@@ -0,0 +1,14 @@
+module.exports = {
+ main: {
+ options: {
+ verbose: true,
+ removeComments: true
+ },
+ files: [{
+ expand: true, // Enable dynamic expansion.
+ cwd: 'dist', // Src matches are relative to this path.
+ src: ['*.html'], // Actual pattern(s) to match.
+ dest: 'dist/', // Destination path prefix.
+ }],
+ }
+};
diff --git a/emails/grunt/processhtml.js b/emails/grunt/processhtml.js
new file mode 100644
index 00000000000..9bca41183c5
--- /dev/null
+++ b/emails/grunt/processhtml.js
@@ -0,0 +1,10 @@
+module.exports = {
+ dist: {
+ files: [{
+ expand: true, // Enable dynamic expansion.
+ cwd: 'templates', // Src matches are relative to this path.
+ src: ['*.html'], // Actual pattern(s) to match.
+ dest: 'dist/', // Destination path prefix.
+ }],
+ }
+};
diff --git a/emails/grunt/replace.js b/emails/grunt/replace.js
new file mode 100644
index 00000000000..7038802d34e
--- /dev/null
+++ b/emails/grunt/replace.js
@@ -0,0 +1,13 @@
+module.exports = {
+ dist: {
+ overwrite: true,
+ src: ['dist/*.html'],
+ replacements: [{
+ from: '[[',
+ to: '{{'
+ }, {
+ from: ']]',
+ to: '}}'
+ }]
+ }
+};
diff --git a/emails/grunt/uncss.js b/emails/grunt/uncss.js
new file mode 100644
index 00000000000..7bc08d008e7
--- /dev/null
+++ b/emails/grunt/uncss.js
@@ -0,0 +1,9 @@
+module.exports = {
+ dist: {
+ src: ['templates/*.html'],
+ dest: 'dist/css/tidy.css',
+ options: {
+ report: 'min' // optional: include to report savings
+ }
+ }
+};
diff --git a/emails/grunt/watch.js b/emails/grunt/watch.js
new file mode 100644
index 00000000000..3613b40bc15
--- /dev/null
+++ b/emails/grunt/watch.js
@@ -0,0 +1,14 @@
+module.exports = {
+ src: {
+ files: [
+ //what are the files that we want to watch
+ 'assets/css/*.css',
+ '*.html'
+ ],
+ options: {
+ nospawn: true,
+ livereload: true,
+ }
+ }
+
+};
diff --git a/emails/gruntfile.js b/emails/gruntfile.js
new file mode 100644
index 00000000000..b6d54cf651b
--- /dev/null
+++ b/emails/gruntfile.js
@@ -0,0 +1,6 @@
+module.exports = function(grunt) {
+
+ // load grunt config
+ require('load-grunt-config')(grunt);
+
+};
diff --git a/emails/new_user_invite.html b/emails/new_user_invite.html
new file mode 100644
index 00000000000..68a4a99b31a
--- /dev/null
+++ b/emails/new_user_invite.html
@@ -0,0 +1,867 @@
+{{Subject .Subject "{{.InvitedBy}} has invited you to join Grafana"}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ You're invited to sign up to Grafana and join {{.OrgName}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/emails/package.json b/emails/package.json
new file mode 100644
index 00000000000..96779fb5609
--- /dev/null
+++ b/emails/package.json
@@ -0,0 +1,24 @@
+{
+ "name": "Grafana-Email-Campaign",
+ "version": "1.0.0",
+ "description": "Grafana Email templates based on Zurb Ink",
+ "repository": "dnnsldr/",
+ "author": {
+ "name": "dnnsldr",
+ "email": "delder@riester.com",
+ "url": "https://github.com/dnnsldr"
+ },
+ "devDependencies": {
+ "grunt": "^0.4.5",
+ "grunt-premailer": "^0.2.10",
+ "grunt-processhtml": "^0.3.3",
+ "grunt-uncss": "^0.3.7",
+ "load-grunt-config": "^0.14.0",
+ "grunt-contrib-watch": "^0.6.1",
+ "grunt-text-replace": "^0.3.12"
+ },
+ "dependencies": {
+ "grunt-assemble": "^0.4.0",
+ "grunt-contrib-clean": "^0.6.0"
+ }
+}
diff --git a/emails/reset_password.html b/emails/reset_password.html
new file mode 100644
index 00000000000..970d5da6ca0
--- /dev/null
+++ b/emails/reset_password.html
@@ -0,0 +1,34 @@
+{{Subject .Subject "Reset your Grafana password - {{.Name}}"}}
+
+
+
+
+
+{{.Name}}, please reset your password
+
+
+
+
+
diff --git a/emails/templates/email1.html b/emails/templates/email1.html
new file mode 100644
index 00000000000..124be9a35be
--- /dev/null
+++ b/emails/templates/email1.html
@@ -0,0 +1,177 @@
+
+
+ [[.Test]]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hi, John Doe
+ Phasellus dictum sapien a neque luctus cursus. Pellentesque sem dolor, fringilla et pharetra vitae.
+ Phasellus dictum sapien a neque luctus cursus. Pellentesque sem dolor, fringilla et pharetra vitae. consequat vel lacus. Sed iaculis pulvinar ligula, ornare fringilla ante viverra et. In hac habitasse platea dictumst. Donec vel orci mi, eu congue justo. Integer eget odio est, eget malesuada lorem. Aenean sed tellus dui, vitae viverra risus. Nullam massa sapien, pulvinar eleifend fringilla id, convallis eget nisi. Mauris a sagittis dui. Pellentesque non lacinia mi. Fusce sit amet libero sit amet erat venenatis sollicitudin vitae vel eros. Cras nunc sapien, interdum sit amet porttitor ut, congue quis urna.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Phasellus dictum sapien a neque luctus cursus. Pellentesque sem dolor, fringilla et pharetra vitae. Click it! »
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/emails/templates/email2.html b/emails/templates/email2.html
new file mode 100644
index 00000000000..fc18b0e67c6
--- /dev/null
+++ b/emails/templates/email2.html
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hi, John Doe
+ Phasellus dictum sapien a neque luctus cursus. Pellentesque sem dolor, fringilla et pharetra vitae.
+ Phasellus dictum sapien a neque luctus cursus. Pellentesque sem dolor, fringilla et pharetra vitae. consequat vel lacus. Sed iaculis pulvinar ligula, ornare fringilla ante viverra et. In hac habitasse platea dictumst. Donec vel orci mi, eu congue justo. Integer eget odio est, eget malesuada lorem. Aenean sed tellus dui, vitae viverra risus. Nullam massa sapien, pulvinar eleifend fringilla id, convallis eget nisi. Mauris a sagittis dui. Pellentesque non lacinia mi. Fusce sit amet libero sit amet erat venenatis sollicitudin vitae vel eros. Cras nunc sapien, interdum sit amet porttitor ut, congue quis urna.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Phasellus dictum sapien a neque luctus cursus. Pellentesque sem dolor, fringilla et pharetra vitae. Click it! »
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/emails/templates/layouts/default.html b/emails/templates/layouts/default.html
new file mode 100644
index 00000000000..a5e8bf94f35
--- /dev/null
+++ b/emails/templates/layouts/default.html
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/emails/welcome_on_signup.html b/emails/welcome_on_signup.html
new file mode 100644
index 00000000000..5018930da57
--- /dev/null
+++ b/emails/welcome_on_signup.html
@@ -0,0 +1,30 @@
+{{Subject .Subject "Welcome to Grafana"}}
+
+
+
+
+
+{{.Name}} Welcome to Grafana
+
+
+
+
+
+
+
+
+ Hi {{.Name}} ,
+
+
+
+
+
+
+
+
+
+
+
+