{"_id":"resin-emails","_rev":"169-8318be2c77bd14ac6db513fd95b6e1e8","name":"resin-emails","dist-tags":{"balena-2018-12-92adcfa27381c0a54ce1f3bcc49b2bc46a248adc":"1.1.0-balena-2018-12-92adcfa27381c0a54ce1f3bcc49b2bc46a248adc","balena-2019-08-c3903fd46bc60ec2fdc33446e6e8fd71ad4c14cd":"1.2.0-balena-2019-08-c3903fd46bc60ec2fdc33446e6e8fd71ad4c14cd","balena-2019-08-0434f696795ae467325234266171214fa6606731":"1.2.0-balena-2019-08-0434f696795ae467325234266171214fa6606731","balena-2019-09-3cbdd74584e516aed38370eecc4afa17e0780351":"1.2.0-balena-2019-09-3cbdd74584e516aed38370eecc4afa17e0780351","aug-2021-newsletter-6ee8df75d4888d90ea3801f6a90e8f3fe61694a5":"2.8.0-aug-2021-newsletter-6ee8df75d4888d90ea3801f6a90e8f3fe61694a5","verification-5fabf57265cdd4d3703434dac27ba4a6aea56960":"2.19.0-verification-5fabf57265cdd4d3703434dac27ba4a6aea56960","verification-a7d3cff13554916266cdebcfbc1317abe876e9b7":"2.19.0-verification-a7d3cff13554916266cdebcfbc1317abe876e9b7","verification-18863d9a8a955a6c93956e82cdb459f462b036ee":"2.19.0-verification-18863d9a8a955a6c93956e82cdb459f462b036ee","add-flowzone-yml-file-d8a85ffa0d168594a726a4b312dc791753fd9b12":"2.22.0-add-flowzone-yml-file-d8a85ffa0d168594a726a4b312dc791753fd9b12-1","add-flowzone-yml-file":"2.22.0-add-flowzone-yml-file-d8a85ffa0d168594a726a4b312dc791753fd9b12-1","build-aethernet-bump-deps-435c8e131892b54f5206d468808e5a6b5698e933":"2.22.1-build-aethernet-bump-deps-435c8e131892b54f5206d468808e5a6b5698e933-1","build-aethernet-bump-deps":"2.22.1-build-aethernet-bump-deps-435c8e131892b54f5206d468808e5a6b5698e933-1","latest":"2.22.1"},"versions":{"0.0.2-sanitize-2e40b24b00e5d00da1d7184db3094feb52e971d8":{"name":"resin-emails","version":"0.0.2-sanitize-2e40b24b00e5d00da1d7184db3094feb52e971d8","author":{"name":"Craig Mulligan","email":"craig@resin.io"},"license":"MIT","_id":"resin-emails@0.0.2-sanitize-2e40b24b00e5d00da1d7184db3094feb52e971d8","maintainers":[{"name":"resin.io","email":"accounts@resin.io"}],"homepage":"https://github.com/resin-io/resin-emails#readme","bugs":{"url":"https://github.com/resin-io/resin-emails/issues"},"dist":{"shasum":"15d464cd984f1633f84e34ff710dbde47a4417b1","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-0.0.2-sanitize-2e40b24b00e5d00da1d7184db3094feb52e971d8.tgz","fileCount":31,"integrity":"sha512-3s+WxG88cHBUwz5Us1ZXgukBLMLpC/hTdXCtnzCo82r4QYqtRHEqT8wJgJKT58qS+2vX1+qYDxEvZ8b9hG2/RA==","signatures":[{"sig":"MEYCIQCMctOxomBSn+q6weDfE/oKClly7m6ovRFzStNUXg29SAIhAJPjDoIemG6ym+n+6+uC0VBgW9396f6yJ3TeeSym+a61","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39444,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbt1lhCRA9TVsSAnZWagAAMJAP/3p/zhJcwCXWiAiL11hg\nAtHaVpK3GGS/0mw4tip52Ja9EEGUB5LiqYcMGF4dDvFtNZE+kk5p533yIEI0\nLifEOHMBJ+CcpHh/PnbIko3lv8Zij/v4cvKGcReHWsx2o0Rayd61pA0ZVe27\nCM6iR1keDASvPlpAbH6s3GZZAAZswA5TwigTbguf2a6h1Yv0jEOpHb0qXWhD\nvF/46H2v1Qr5+sg6IjyevhrwehZXVEzV/r05NCdXv+wVlsVnvD23MJkwVAyD\nux983MfbMukWlsnqBAAbNiNWHuz9fceBOHYg/qqonTc9zN6tAXs/T8RvgQS7\nX6xbJsvrZshaKlz1YtCTzMfdOJRV4yWz4kJBfYwqsY/dD133zDBXMmT5QDqk\n1lcMKigRIaDaafVHetV9S/mDDpkxx5AlHlHW1zU+M5FsUqIqDgIDagh8gLvC\nYeY9FIEcv/BMvraSciQe7XEjQuaK94PODRhabcuv/kXvVyb3cJgnlK8d2HXW\nrlXto0sxXavpwwxPY6+pXEMwYc+oOOdZPH60w5tOgH1v+YJopKBUvQ9JgfAN\nk4eUiEekMl58SBKWni5QjtD6/guobtV0KhC1yqV0akfSZbQosr98vyi7IyFV\nN48uLSCslpBoUAipOcuRDtrfyhG8btng+gdFI4MgyZpM6NZ3NDE8KDcsDo/y\nz0/I\r\n=cWBx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulpfile.babel.js","babel":{"presets":["es2015"]},"gitHead":"2e40b24b00e5d00da1d7184db3094feb52e971d8","scripts":{"zip":"gulp zip --production","build":"gulp --production","start":"gulp","litmus":"gulp litmus --production"},"_npmUser":{"name":"resin.io","email":"accounts@resin.io"},"repository":{"url":"git+https://github.com/resin-io/resin-emails.git","type":"git"},"_npmVersion":"6.1.0","description":"resin.io email generator.","directories":{},"_nodeVersion":"10.4.0","dependencies":{"node-sass":"^4.9.0","foundation-emails":"^2.2.1"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"git+https://github.com/gulpjs/gulp.git#4.0","inky":"^1.3.6","yargs":"^4.1.0","colors":"^1.1.2","panini":"^1.3.0","rimraf":"^2.3.3","gulp-if":"^2.0.0","beepbeep":"^1.2.0","gulp-cli":"^1.1.0","gulp-zip":"^3.2.0","lazypipe":"^1.0.1","gulp-sass":"^2.1.0","babel-core":"^6.3.26","gulp-litmus":"0.0.7","gulp-rename":"^1.2.2","browser-sync":"^2.11.0","gulp-htmlmin":"^1.1.1","gulp-replace":"^0.5.4","merge-stream":"^1.0.0","gulp-html-src":"^1.0.0","gulp-imagemin":"^2.4.0","babel-register":"^6.7.2","gulp-awspublish":"^3.0.1","gulp-inline-css":"^3.0.0","gulp-sourcemaps":"^1.6.0","gulp-load-plugins":"^1.1.0","siphon-media-query":"^1.0.0","babel-preset-es2015":"^6.3.13"},"_npmOperationalInternal":{"tmp":"tmp/resin-emails_0.0.2-sanitize-2e40b24b00e5d00da1d7184db3094feb52e971d8_1538742624554_0.937132582709546","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"0.0.2-sanitize-2c54872919d50dd8548df7ff30ab591f64529f97":{"name":"resin-emails","version":"0.0.2-sanitize-2c54872919d50dd8548df7ff30ab591f64529f97","author":{"name":"Craig Mulligan","email":"craig@resin.io"},"license":"MIT","_id":"resin-emails@0.0.2-sanitize-2c54872919d50dd8548df7ff30ab591f64529f97","maintainers":[{"name":"resin.io","email":"accounts@resin.io"}],"homepage":"https://github.com/resin-io/resin-emails#readme","bugs":{"url":"https://github.com/resin-io/resin-emails/issues"},"dist":{"shasum":"7f9eedf882534fe7aedb817a0055e201dad006c9","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-0.0.2-sanitize-2c54872919d50dd8548df7ff30ab591f64529f97.tgz","fileCount":31,"integrity":"sha512-Qqa1WpNqt4LOk3Tbm2xri/BcGwET3xzjkgfCuhukgZwXHeJQ+B6kv2DTsRhrcYA0Pumfa8TtTfr6xRdIP9rSig==","signatures":[{"sig":"MEUCIDE5dCLMUxprSkWCP24+CgTdiNBHdsGFpjeZoNtjzQG7AiEAgxlYLOb1aDQzxc7B846hAby1KGtfzYFed1BT1e/HrDM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39445,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbt1qiCRA9TVsSAnZWagAAv9IP/1YNPkJcyeXrFTpsOs8C\n7MRonTEcp0hVb5PQGh7bKNHdoakB4RsOoKclff487fYxSWh/8HMq/ZqxZ42O\nU8+Zm7VuqLYFKLb54oUh6sSKey8dB0IowaILXfrIQxNTw7ep70AnfUXJqTEb\nWbrqag0VX4ul0fPzI0kMCZopcNS1pEAvysGd3tnSSs8uUlvcGTMPaMXsXaM3\nR83V+kBszEiA4rRFFcQDkcUfRKFtjHb/bDEeirmWWNkaOSbBmSo2Su2eUOz+\nP5b+6Bm3NBOxi2FAfOtUumgxjX68h3a6Ddn5g+ZwI/f9l9IKB7dd7PWVTuzZ\n60rN16dnOm9hwggINyVniBqVOyNfRnXdUgm9gIfr+yb8lxzCvhZHb1yPK7JG\napORsLkWCYXDKTiU0SPQ+xwB+3n/qmsQWp44OltpHbofjFQmW/ayEVaHcu2I\nzv8tJuinBO0TFsZXa4XTfhyuCDoR70nu8PXx37UG5a0nli6wU9sjvUqjd7EP\nmeFERixEGsTwNeylQFfgQqpYsKxWihSFhiVQFRsLOELn7SHweK7vH5GDU43+\nVLy5iksIyRAwg+s3BJKK9PjAutGUBFdmrgjN8X5fGJIzl2V6zfeDhiv0gm6o\nXcCcfRxtEAf/tPMF8O5asAmw8H7KZQkBJzA6mQzBCGI1ahiB76YwIMyE3GFQ\nez70\r\n=LLJH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulpfile.babel.js","babel":{"presets":["es2015"]},"readme":"# resin emails\n\nThis is a generator for resin emails, it uses [zurb's email framework](http://foundation.zurb.com/emails/docs) which borrows templating principles from static site generators(handlebars.js). It also includes a minimal templating language that converts simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup.\n\n- Handlebars HTML templates with [Panini](http://github.com/zurb/panini)\n- Simplified HTML email syntax with [Inky](http://github.com/zurb/inky)\n- Sass compilation\n- Image compression\n- Built-in BrowserSync server\n- Full email inlining process\n\n## Installation\n\nTo use this template, your computer needs [Node.js](https://nodejs.org/en/) 0.12 or greater.\n```\ngit pull https://github.com/resin-io/resin-emails\n```\n```\nnpm i\n```\n\n## Editing\n\nTo update data of the newsletter you need to update the data in `/src/data`. Each `<data>.json` corresponds to a section in the newsletter. Generally you'd only need to change `featured, posts, & events`.\n\n## Build Commands\n\n#### When developing\n\n* Run `npm start` to kick off the build process. A new browser tab will open with a server pointing to your project files.\n\nCurrent all files will get reloaded while developing except for `.js` and `.json`. This will be fixed soon just waiting for this [PR](https://github.com/zurb/panini/pull/82/commits/47173300605f49ee7372324ada229a28500ba871) to be merged.\n\n#### When building\n\n* Run `npm run build` to inline your CSS into your HTML along with the rest of the build process.\n\n## Sending out the newsletter\n\nOnce you have run the build command you should have a built `/build/index.html` with all the css inlined.\n\nLogin to mailchimp and follow\n\n* Create new template [ name format: `December 16` ]-> import html -> select `/build/index.html`.\n* Send you're self + some others a test email from template editor.\n* Create a campaign [ name format: `December 16` ] -> Add subject, list etc and select template.\n* Scheduling the campaign. Generally we use time warp so that users receive it in their tz (Keep in mind you need to start the scheduler 24hrs earlier for this feature). We also generally send it out at 3pm on wednesdays.\n* :tada\n\nOnce you're done commit + push your changes.\n\n```\ngit commit -am `<month year>` && git push\n```\n","gitHead":"2c54872919d50dd8548df7ff30ab591f64529f97","scripts":{"zip":"gulp zip --production","build":"gulp --production","start":"gulp","litmus":"gulp litmus --production"},"_npmUser":{"name":"resin.io","email":"accounts@resin.io"},"repository":{"url":"git+https://github.com/resin-io/resin-emails.git","type":"git"},"_npmVersion":"6.1.0","description":"resin.io email generator.","directories":{},"_nodeVersion":"10.4.0","dependencies":{"node-sass":"^4.9.3","foundation-emails":"^2.2.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gulp":"git+https://github.com/gulpjs/gulp.git#4.0","inky":"^1.3.6","yargs":"^12.0.2","colors":"^1.3.2","panini":"^1.3.0","rimraf":"^2.3.3","gulp-if":"^2.0.0","beepbeep":"^1.2.0","gulp-cli":"^2.0.1","gulp-zip":"^4.2.0","lazypipe":"^1.0.1","gulp-sass":"^4.0.1","babel-core":"^6.26.3","gulp-litmus":"0.0.7","gulp-rename":"^1.4.0","browser-sync":"^2.24.7","gulp-htmlmin":"^5.0.1","gulp-replace":"^1.0.0","merge-stream":"^1.0.0","gulp-html-src":"^1.0.0","gulp-imagemin":"^4.1.0","babel-register":"^6.7.2","gulp-awspublish":"^3.4.0","gulp-inline-css":"^3.0.0","gulp-sourcemaps":"^2.6.4","gulp-load-plugins":"^1.1.0","siphon-media-query":"^1.0.0","babel-preset-es2015":"^6.3.13"},"_npmOperationalInternal":{"tmp":"tmp/resin-emails_0.0.2-sanitize-2c54872919d50dd8548df7ff30ab591f64529f97_1538742945677_0.5562434925249651","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"0.0.2":{"name":"resin-emails","version":"0.0.2","author":{"name":"Craig Mulligan","email":"craig@resin.io"},"license":"MIT","_id":"resin-emails@0.0.2","maintainers":[{"name":"resin.io","email":"accounts@resin.io"}],"homepage":"https://github.com/resin-io/resin-emails#readme","bugs":{"url":"https://github.com/resin-io/resin-emails/issues"},"dist":{"shasum":"d4bd57f11e3910aa347d21dd24454da2f9c163a9","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-0.0.2.tgz","fileCount":31,"integrity":"sha512-urtlCB/VbkxgXsn+ZAxb52OZQMVoHWD+HxySD0zTt1RBe/E7bkR7jOx5leY+Z32CuZlG8qu8DHUp5TcaaC38Pg==","signatures":[{"sig":"MEUCIFjYVycoudCV8++iZSXRzXBxPG8HT4zwGGKXDdQxKlTnAiEA2ItBOdqWCM5Daxvw5y//xD4uEoQY8sFV1Dgs5xAjWIU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39395,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbt4CdCRA9TVsSAnZWagAAvn8P/R2m9+P+Lt/+brapY6Or\ne6zONFJJzM2jBOxwK+bix1ccWZE+TPRKSJWEC3FhqgNZ6U07OvScNfdyVB//\nWSyiSdDY6PJ6AqP7uNH4ZlMHrDMZV6ZWfM711lC1hxuoR8plRVpc966NObD/\nRyj0tqEb03Nn0FfIE+oAo4w3QLkzERq4trUA3+PZYHmhHfaa+FDtzhecxpdS\nl2BiGHSH9WHlEHopNrFAmMbiwJEnuZfJ8XWLb/nX9+acXpQ1cXzmDaUZ6ip+\nx00nqwnRo9i4oq/33en3vL8SmbxrE4jyA+3QOihZiW9G8JJEuVpGibI1NDVx\nLR9HN4g70zF8OnO9W7XcCrcnoLtrdsdCtz4YvfeJZ7ExyblnMV/81uTxDOM+\nmwS8JiUPkdgRsdos1e6BdzhkS59P2BfL9ZMoyispC+3muM2fWQl5TXNQG449\nrLkBh7QL7Jl+9OzGDKbNf4J3Vdml6vzTi6k5pF7CGWQNX+GJaoht7M6LxGX2\nlJkeX3oOgthECCfBjnHlrXdrQ7tUeM8isoENTCjcL828ivG3Od7CFsqxpktL\nAeZ9xOoHxCPNE7fUa7Iw29VCZNXmARQ77xxQ1bkiWRClDT2o5BG09APoNUjl\nHGyuVy2pSlVWxVWXypbUhqPkItbbAA4Ki/SrlRdiEd/QOvv3ePgW8LmajhMG\nDTN4\r\n=milF\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulpfile.babel.js","babel":{"presets":["es2015"]},"gitHead":"341d4c7c1cfb08334ac04818100051b79453854f","scripts":{"zip":"gulp zip --production","build":"gulp --production","start":"gulp","litmus":"gulp litmus --production"},"_npmUser":{"name":"resin.io","email":"accounts@resin.io"},"repository":{"url":"git+https://github.com/resin-io/resin-emails.git","type":"git"},"_npmVersion":"6.1.0","description":"resin.io email generator.","directories":{},"_nodeVersion":"10.4.0","dependencies":{"node-sass":"^4.9.3","foundation-emails":"^2.2.1"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"git+https://github.com/gulpjs/gulp.git#4.0","inky":"^1.3.6","yargs":"^12.0.2","colors":"^1.3.2","panini":"^1.3.0","rimraf":"^2.3.3","gulp-if":"^2.0.0","beepbeep":"^1.2.0","gulp-cli":"^2.0.1","gulp-zip":"^4.2.0","lazypipe":"^1.0.1","gulp-sass":"^4.0.1","babel-core":"^6.26.3","gulp-litmus":"0.0.7","gulp-rename":"^1.4.0","browser-sync":"^2.24.7","gulp-htmlmin":"^5.0.1","gulp-replace":"^1.0.0","merge-stream":"^1.0.0","gulp-html-src":"^1.0.0","gulp-imagemin":"^4.1.0","babel-register":"^6.7.2","gulp-awspublish":"^3.4.0","gulp-inline-css":"^3.0.0","gulp-sourcemaps":"^2.6.4","gulp-load-plugins":"^1.1.0","siphon-media-query":"^1.0.0","babel-preset-es2015":"^6.3.13"},"_npmOperationalInternal":{"tmp":"tmp/resin-emails_0.0.2_1538752669049_0.17136303405982423","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.0.0-balena-2018-11-be3b2fb3b0063e0de567f441c755cb2f0176f4a9":{"name":"resin-emails","version":"1.0.0-balena-2018-11-be3b2fb3b0063e0de567f441c755cb2f0176f4a9","author":{"name":"Craig Mulligan","email":"craig@resin.io"},"license":"MIT","_id":"resin-emails@1.0.0-balena-2018-11-be3b2fb3b0063e0de567f441c755cb2f0176f4a9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"homepage":"https://github.com/resin-io/resin-emails#readme","bugs":{"url":"https://github.com/resin-io/resin-emails/issues"},"dist":{"shasum":"8afa7fe78b29e46668f8bcdc44350dbf87e26f9b","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-1.0.0-balena-2018-11-be3b2fb3b0063e0de567f441c755cb2f0176f4a9.tgz","fileCount":43,"integrity":"sha512-oN49NLKx/Br6V/n1qjoTU/TfZt02gcC2Pw8MR+BWx1Kc6iQ9qV0wjWupqP3TQZt9VlDhmhuTFQymgDeE+kq/Gw==","signatures":[{"sig":"MEUCIFTEkb2m6FFu89JxjcaiUBNotIi5r8VrKNPXkitemoToAiEA1ohJtZHiJQJBWnoDCnVU7VTAh+i5Tbk6qT/TOluBXvA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":709725,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb6azuCRA9TVsSAnZWagAAxG0P/3FuI/Arr92VmNacPfp+\n0ZFOCDChhH0ixRQQOCpBmZc9DO//MPGpQ2KTfJaXBLTwiK0rGaZ6l08i+1An\ns7ivSFQiOoeJZxS9T5+bZPPC7CbQs+vBT7JBri5L2DoPaFJQ+Phq3D0Bt7jE\nmvN3WjYpQ32Sh2KcfWS3H+45EFYFoUn23ZEx7BhDie7XeOczlLQgptWoevpk\nKVo8RgGgZxvS47rXKrb0TnMjVf8kU22FTF2RrC0nvm1YpT2EZfsVaDrUPWtH\nezezsIuNOB49NTpenF9WylEMlFYJZllJUnCHGVU/lCZ/ceJaPRAK/SkhNRmW\nvQZ1tMyV4+ahyFs60lPR+5O5MqtuCCSwQQtJq5fPq/7qB1s7LkcNB5CEtyFb\n1fwYVYRVtXPFbpV1ALO4S6ml9YY7ewKhJ9JN8YCax83peQLkV6ER2K6fkOCG\ncQvcWCNZv2Hc9O/1BctFSctr+3KMKmIdR6D72LtjiTELyrmFGzAMfY5Qwg/e\njwEqTsf+aiw3dXkVzwIm8FCKlraDD/Ljef8fIOz7yfR8TIqDJMEbHd4FI4Gv\nIbf/oCdo8/jvphGuq/IAsWOrT+XoZXzD9cwKVvlo1mBVEjvZQjfpTPklN0Qt\n92b5LVmwBb6GrqYaNzwHasKmpKvFeUsTYHzgQgr5HzfR0bMoKAq4G7CzmO85\ngbSV\r\n=XIwW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulpfile.babel.js","babel":{"presets":["es2015"]},"readme":"# resin emails\n\nThis is a generator for resin emails, it uses [zurb's email framework](http://foundation.zurb.com/emails/docs) which borrows templating principles from static site generators(handlebars.js). It also includes a minimal templating language that converts simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup.\n\n- Handlebars HTML templates with [Panini](http://github.com/zurb/panini)\n- Simplified HTML email syntax with [Inky](http://github.com/zurb/inky)\n- Sass compilation\n- Image compression\n- Built-in BrowserSync server\n- Full email inlining process\n\n## Installation\n\nTo use this template, your computer needs [Node.js](https://nodejs.org/en/) 0.12 or greater.\n```\ngit pull https://github.com/resin-io/resin-emails\n```\n```\nnpm i\n```\n\n## Editing\n\nTo update data of the newsletter you need to update the data in `/src/data`. Each `<data>.json` corresponds to a section in the newsletter. Generally you'd only need to change `featured, posts, & events`.\n\n## Build Commands\n\n#### When developing\n\n* Run `npm start` to kick off the build process. A new browser tab will open with a server pointing to your project files.\n\nCurrent all files will get reloaded while developing except for `.js` and `.json`. This will be fixed soon just waiting for this [PR](https://github.com/zurb/panini/pull/82/commits/47173300605f49ee7372324ada229a28500ba871) to be merged.\n\n#### When building\n\n* Run `npm run build` to inline your CSS into your HTML along with the rest of the build process.\n\n## Sending out the newsletter\n\nOnce you have run the build command you should have a built `/build/index.html` with all the css inlined.\n\nLogin to mailchimp and follow\n\n* Create new template [ name format: `December 16` ]-> import html -> select `/build/index.html`.\n* Send you're self + some others a test email from template editor.\n* Create a campaign [ name format: `December 16` ] -> Add subject, list etc and select template.\n* Scheduling the campaign. Generally we use time warp so that users receive it in their tz (Keep in mind you need to start the scheduler 24hrs earlier for this feature). We also generally send it out at 3pm on wednesdays.\n* :tada\n\nOnce you're done commit + push your changes.\n\n```\ngit commit -am `<month year>` && git push\n```\n","gitHead":"be3b2fb3b0063e0de567f441c755cb2f0176f4a9","scripts":{"zip":"gulp zip --production","build":"gulp --production","start":"gulp","litmus":"gulp litmus --production"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io/resin-emails.git","type":"git"},"_npmVersion":"6.1.0","description":"resin.io email generator.","directories":{},"_nodeVersion":"10.4.0","dependencies":{"node-sass":"^4.9.3","foundation-emails":"^2.2.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gulp":"git+https://github.com/gulpjs/gulp.git#v4.0.0-alpha.3","inky":"^1.3.6","yargs":"^12.0.2","colors":"^1.3.2","panini":"^1.3.0","rimraf":"^2.3.3","gulp-if":"^2.0.0","beepbeep":"^1.2.0","gulp-cli":"^2.0.1","gulp-zip":"^4.2.0","lazypipe":"^1.0.1","gulp-sass":"^4.0.1","babel-core":"^6.26.3","gulp-litmus":"0.0.7","gulp-rename":"^1.4.0","browser-sync":"^2.24.7","gulp-htmlmin":"^5.0.1","gulp-replace":"^1.0.0","merge-stream":"^1.0.0","gulp-html-src":"^1.0.0","gulp-imagemin":"^4.1.0","babel-register":"^6.7.2","gulp-awspublish":"^3.4.0","gulp-inline-css":"^3.0.0","gulp-sourcemaps":"^2.6.4","gulp-load-plugins":"^1.1.0","siphon-media-query":"^1.0.0","babel-preset-es2015":"^6.3.13"},"_npmOperationalInternal":{"tmp":"tmp/resin-emails_1.0.0-balena-2018-11-be3b2fb3b0063e0de567f441c755cb2f0176f4a9_1542040813819_0.6867483531590346","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.0.0-balena-2018-11-e8bee66be3139751075bd2a2af9bdcfee00349b3":{"name":"resin-emails","version":"1.0.0-balena-2018-11-e8bee66be3139751075bd2a2af9bdcfee00349b3","author":{"name":"Craig Mulligan","email":"craig@resin.io"},"license":"MIT","_id":"resin-emails@1.0.0-balena-2018-11-e8bee66be3139751075bd2a2af9bdcfee00349b3","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"homepage":"https://github.com/resin-io/resin-emails#readme","bugs":{"url":"https://github.com/resin-io/resin-emails/issues"},"dist":{"shasum":"f4c60253ad5bf8609bc4a508335380d1a42918bc","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-1.0.0-balena-2018-11-e8bee66be3139751075bd2a2af9bdcfee00349b3.tgz","fileCount":43,"integrity":"sha512-xpNE36ldEaRu/HAdQsNaQGWk+3Hq5u4NtD3/1DKaDyce6sLU6bCq7GWTcDXKYtzZQTsFUB9HFQyIVNyomMsmnQ==","signatures":[{"sig":"MEYCIQDcgXifEp5YYzOrJDKRFITGt4FXhYWZ1t2b/+HwhoQlvQIhAJHUZrI9iaqx/O7kYHXjtPyGa74IIkYnGIVXlkHhq3Ze","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":709720,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb6bCECRA9TVsSAnZWagAAbmQP/3B6It7ayqgyNtgMcXIQ\nV6OJOiPqlfy5aBqC8Of/LtJtuD06ZEmBZ1KlrhfwXT0g1vToqop9cKRgOcD4\nSwI0d+6h7gmrOv6rM1K4+gp8Aoi2ZjEcnCm4mgzMxSoZVe7kz4f4s7G22aIl\nxt0HwYsW645fOoGIz/27kdVSnNlfC7V6fqNNjBwRqrq7Y0c52uppUYpVcx9B\nGHthvMb9Re98/DE4dKu3VELvfR110G1RpkmO3ANU4wWsOur0vdoZLloAns2q\nRFU1R2EUHX1r0iKceaaI3ejKT/WVmhOMXQam3Svuqf/OKSdNpryJ+sRIDuiX\n6TjzCFo8duyZX4qY99lp9gyVAYlsKtFAG00M2anNxlE7gasCKFxDeqLWcswX\nqiTBjHxMmYCvPDi5KyNho6oZsgYrxW2k6CWbm37hLC7nl4AbGNOrqHLujdsO\noKTZ22hxRY2uXD/mCLgeT28uibk4/AVdRtCPbPNpiCWyTEH6Oeig3fiOPsTC\nFlSOpp4qtVfcjO1ovZBMajzJupNa02Rjgg8+ew/KLd2p7yI9nkPKKk/6juj7\ngDkqE0DKyQaoPEyYJqpkcDckprG5Wnhc4rAL65Q9+KkZ8HryDoXcQbe/QY5K\nmuXUeMvT4SI9AZV6vStXYtCk7GAnrKhP34nDxydiYXhYIA0TEKjcGxQW7pQe\nqArH\r\n=r7Iw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulpfile.babel.js","babel":{"presets":["es2015"]},"readme":"# resin emails\n\nThis is a generator for resin emails, it uses [zurb's email framework](http://foundation.zurb.com/emails/docs) which borrows templating principles from static site generators(handlebars.js). It also includes a minimal templating language that converts simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup.\n\n- Handlebars HTML templates with [Panini](http://github.com/zurb/panini)\n- Simplified HTML email syntax with [Inky](http://github.com/zurb/inky)\n- Sass compilation\n- Image compression\n- Built-in BrowserSync server\n- Full email inlining process\n\n## Installation\n\nTo use this template, your computer needs [Node.js](https://nodejs.org/en/) 0.12 or greater.\n```\ngit pull https://github.com/resin-io/resin-emails\n```\n```\nnpm i\n```\n\n## Editing\n\nTo update data of the newsletter you need to update the data in `/src/data`. Each `<data>.json` corresponds to a section in the newsletter. Generally you'd only need to change `featured, posts, & events`.\n\n## Build Commands\n\n#### When developing\n\n* Run `npm start` to kick off the build process. A new browser tab will open with a server pointing to your project files.\n\nCurrent all files will get reloaded while developing except for `.js` and `.json`. This will be fixed soon just waiting for this [PR](https://github.com/zurb/panini/pull/82/commits/47173300605f49ee7372324ada229a28500ba871) to be merged.\n\n#### When building\n\n* Run `npm run build` to inline your CSS into your HTML along with the rest of the build process.\n\n## Sending out the newsletter\n\nOnce you have run the build command you should have a built `/build/index.html` with all the css inlined.\n\nLogin to mailchimp and follow\n\n* Create new template [ name format: `December 16` ]-> import html -> select `/build/index.html`.\n* Send you're self + some others a test email from template editor.\n* Create a campaign [ name format: `December 16` ] -> Add subject, list etc and select template.\n* Scheduling the campaign. Generally we use time warp so that users receive it in their tz (Keep in mind you need to start the scheduler 24hrs earlier for this feature). We also generally send it out at 3pm on wednesdays.\n* :tada\n\nOnce you're done commit + push your changes.\n\n```\ngit commit -am `<month year>` && git push\n```\n","gitHead":"e8bee66be3139751075bd2a2af9bdcfee00349b3","scripts":{"zip":"gulp zip --production","build":"gulp --production","start":"gulp","litmus":"gulp litmus --production"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io/resin-emails.git","type":"git"},"_npmVersion":"6.1.0","description":"resin.io email generator.","directories":{},"_nodeVersion":"10.4.0","dependencies":{"node-sass":"^4.9.3","foundation-emails":"^2.2.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gulp":"git+https://github.com/gulpjs/gulp.git#v4.0.0-alpha.3","inky":"^1.3.6","yargs":"^12.0.2","colors":"^1.3.2","panini":"^1.3.0","rimraf":"^2.3.3","gulp-if":"^2.0.0","beepbeep":"^1.2.0","gulp-cli":"^2.0.1","gulp-zip":"^4.2.0","lazypipe":"^1.0.1","gulp-sass":"^4.0.1","babel-core":"^6.26.3","gulp-litmus":"0.0.7","gulp-rename":"^1.4.0","browser-sync":"^2.24.7","gulp-htmlmin":"^5.0.1","gulp-replace":"^1.0.0","merge-stream":"^1.0.0","gulp-html-src":"^1.0.0","gulp-imagemin":"^4.1.0","babel-register":"^6.7.2","gulp-awspublish":"^3.4.0","gulp-inline-css":"^3.0.0","gulp-sourcemaps":"^2.6.4","gulp-load-plugins":"^1.1.0","siphon-media-query":"^1.0.0","babel-preset-es2015":"^6.3.13"},"_npmOperationalInternal":{"tmp":"tmp/resin-emails_1.0.0-balena-2018-11-e8bee66be3139751075bd2a2af9bdcfee00349b3_1542041731634_0.7309934951899344","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.0.0":{"name":"resin-emails","version":"1.0.0","author":{"name":"Craig Mulligan","email":"craig@resin.io"},"license":"MIT","_id":"resin-emails@1.0.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"homepage":"https://github.com/resin-io/resin-emails#readme","bugs":{"url":"https://github.com/resin-io/resin-emails/issues"},"dist":{"shasum":"8c2a4d7361394dbeea1544fa7fc4116423f46d36","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-1.0.0.tgz","fileCount":43,"integrity":"sha512-CA4NrK2yq43ThoQpdnPZH9ka2p/ab7Ek39AQB6OIWpXyLhNA62/BdLbAP9UaMQhUxDUsoZd1rcRK4nz2w8UeHg==","signatures":[{"sig":"MEUCIQCgJpeBMfT/DoRcxwOJlmLcUMvTRaW18S2F5/32TGX/AAIgYYA1DxC5qWUNe2heNke2UHRGFGsWoujvrY2nlPorOio=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":709664,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb6bH4CRA9TVsSAnZWagAAGVwP+wS3N7sGczHjnKVVGDmm\nYQPjTj198MUXHn2j6Y7uX4/xErZIH5jpt5HaQRDc9UyAVqVdRa/nFv8KcPch\n9lLBr9ruER4joCo50DxATafJkLkZin3+ItDCbqeZ2Lw7/EXrLM+1NTXU165N\n6tgN+lK1T+YB1rnYoDh+UxNuo0wHoQVrKxb9Acc/Qa25wPbRbLvrwytWoXjG\nPbHXUaSfDGF4YmZrP+gp9Rb/LflEGFwCPI49R43pMuMLXBKaYGWgwPzcadhX\nXXIF9yfxyVx/7i5jI4TUS1uJ5kbz4pJhCJorK3fjznV92Fyyw6LAU6lUir/X\n0BhiPLx5qWS/v7ANI97CN07FRSaJkTbVn/HSYHvlBMDjj3xtV7eL4q1HPx+i\nu4dJMkcqsDak8iAPdMne9ux/5XRDAH8O0xWwL4y3Nv3/njrlMX57uKxJP2O0\nEiR9QLajuMDpVvmW59QeJYqW7QNTTHZsl8/49WJItJ1EIEjqegf9PXOhAU+X\nWk4It8oG+u7LC9XHsXKXYs0fLjytojINMWEt7GnV6k0aRTvCRc9qkzlHdKM6\n0u+IrgRwPSQ8jBmsnNHou4Y4P5LscV6lN6kJdiMc/jEfC6sI4ENTmENw3PBR\nUHXDhGUDXpjDagoaLU6moD7O1cDotAkrd1OWcx7rv3/KPllhO7lJRZ+ygQTO\naHMM\r\n=tfvC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulpfile.babel.js","babel":{"presets":["es2015"]},"gitHead":"794f529829cbc0ef3eeb130e17d1ed17bfaa7c7d","scripts":{"zip":"gulp zip --production","build":"gulp --production","start":"gulp","litmus":"gulp litmus --production"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io/resin-emails.git","type":"git"},"_npmVersion":"6.1.0","description":"resin.io email generator.","directories":{},"_nodeVersion":"10.4.0","dependencies":{"node-sass":"^4.9.3","foundation-emails":"^2.2.1"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"git+https://github.com/gulpjs/gulp.git#v4.0.0-alpha.3","inky":"^1.3.6","yargs":"^12.0.2","colors":"^1.3.2","panini":"^1.3.0","rimraf":"^2.3.3","gulp-if":"^2.0.0","beepbeep":"^1.2.0","gulp-cli":"^2.0.1","gulp-zip":"^4.2.0","lazypipe":"^1.0.1","gulp-sass":"^4.0.1","babel-core":"^6.26.3","gulp-litmus":"0.0.7","gulp-rename":"^1.4.0","browser-sync":"^2.24.7","gulp-htmlmin":"^5.0.1","gulp-replace":"^1.0.0","merge-stream":"^1.0.0","gulp-html-src":"^1.0.0","gulp-imagemin":"^4.1.0","babel-register":"^6.7.2","gulp-awspublish":"^3.4.0","gulp-inline-css":"^3.0.0","gulp-sourcemaps":"^2.6.4","gulp-load-plugins":"^1.1.0","siphon-media-query":"^1.0.0","babel-preset-es2015":"^6.3.13"},"_npmOperationalInternal":{"tmp":"tmp/resin-emails_1.0.0_1542042104127_0.41562156497441216","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.0-balena-2018-12-92adcfa27381c0a54ce1f3bcc49b2bc46a248adc":{"name":"resin-emails","version":"1.1.0-balena-2018-12-92adcfa27381c0a54ce1f3bcc49b2bc46a248adc","author":{"name":"Craig Mulligan","email":"craig@resin.io"},"license":"MIT","_id":"resin-emails@1.1.0-balena-2018-12-92adcfa27381c0a54ce1f3bcc49b2bc46a248adc","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"homepage":"https://github.com/resin-io/resin-emails#readme","bugs":{"url":"https://github.com/resin-io/resin-emails/issues"},"dist":{"shasum":"8277f5d0b4d227bd80f1ec94838542438727200e","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-1.1.0-balena-2018-12-92adcfa27381c0a54ce1f3bcc49b2bc46a248adc.tgz","fileCount":45,"integrity":"sha512-IJDsqkJrYP3GTso7ZGMX4f0buXFr0DHZQomjGZPjlq94REIpyZbpSXw2H1I8asQD2iZmpSBeyAx1Yy3tzbd3aQ==","signatures":[{"sig":"MEUCIEsO91/ywCdIMVepmWWGjSDycM5H6JaLkAxSFHi6DI4fAiEA+pMfRNK6aeEbnIn3NzV67qmW2fUXY81IHL15M9+5nOw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":714473,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcBpu6CRA9TVsSAnZWagAAhVkQAJXWCHWHjM/I2DXS4LhQ\ntDp+Yfk+VzzB7ExeVTz0/EHtYRcCRcVyAiT/YWeeoUC5A++x1M0kcvmS2C4h\nSGSsdPskdhDJTFtMb7Tz+el//BFn/F7le3YHzVsolkr+uSQypZFCf3WRccTf\n5sUw8sSPLZSBuRUSfoFz0qFiLm9N5twpYgQNAn7grpioR/HA1iu1U1pCkVk3\nIiNNXjcs7DO7h/3AvXIsrAwXpQ1P/g6GlpP0Ziolxvy47VSyBBbQwvo9qGNV\nCvBtyj8CkDqXb6P0BHnzHHrq6zNhIEhmmkDaAkNhAs2pJxDqt22cusoI9QIL\n15T+VvW1tqsvGyjMfbJi7kqzC7G3HLsL3HQCRQ6HGxDwU6mfxH/SSU9Wgqnr\nO4BnyPK+cCAy1/z94jTALGcTDEqUgH7w/YVDHNzkJcaivi1u5edqANyAFMxZ\ndBMJtjDSWQg7Jl47S6tN8mrS3alxPmYBv/CvIz08pf5u92ngr0uG+wj0qOAO\nqypYu1KQIn7jDu3daNCFqkbGjT/GWT4tGm+ThlCLJshHuHDy/D28PjOlExXG\nOnGtC1+IXWtNmxwoCjtcze1/rRwiFp0UqaUmQfndKyaDkpokRf4sEli6Kg9o\nBXBIFDOGrz5V/wGPrF0qGFhbEHrHRhmQ4I9rU1XX0Xpe+hX9LjL96MaDxePZ\nbrCN\r\n=dMyq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulpfile.babel.js","babel":{"presets":["es2015"]},"readme":"# resin emails\n\nThis is a generator for resin emails, it uses [zurb's email framework](http://foundation.zurb.com/emails/docs) which borrows templating principles from static site generators(handlebars.js). It also includes a minimal templating language that converts simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup.\n\n- Handlebars HTML templates with [Panini](http://github.com/zurb/panini)\n- Simplified HTML email syntax with [Inky](http://github.com/zurb/inky)\n- Sass compilation\n- Image compression\n- Built-in BrowserSync server\n- Full email inlining process\n\n## Installation\n\nTo use this template, your computer needs [Node.js](https://nodejs.org/en/) 0.12 or greater.\n```\ngit pull https://github.com/resin-io/resin-emails\n```\n```\nnpm i\n```\n\n## Editing\n\nTo update data of the newsletter you need to update the data in `/src/data`. Each `<data>.json` corresponds to a section in the newsletter. Generally you'd only need to change `featured, posts, & events`.\n\n## Build Commands\n\n#### When developing\n\n* Run `npm start` to kick off the build process. A new browser tab will open with a server pointing to your project files.\n\nCurrent all files will get reloaded while developing except for `.js` and `.json`. This will be fixed soon just waiting for this [PR](https://github.com/zurb/panini/pull/82/commits/47173300605f49ee7372324ada229a28500ba871) to be merged.\n\n#### When building\n\n* Run `npm run build` to inline your CSS into your HTML along with the rest of the build process.\n\n## Sending out the newsletter\n\nOnce you have run the build command you should have a built `/build/index.html` with all the css inlined.\n\nLogin to mailchimp and follow\n\n* Create new template [ name format: `December 16` ]-> import html -> select `/build/index.html`.\n* Send you're self + some others a test email from template editor.\n* Create a campaign [ name format: `December 16` ] -> Add subject, list etc and select template.\n* Scheduling the campaign. Generally we use time warp so that users receive it in their tz (Keep in mind you need to start the scheduler 24hrs earlier for this feature). We also generally send it out at 3pm on wednesdays.\n* :tada\n\nOnce you're done commit + push your changes.\n\n```\ngit commit -am `<month year>` && git push\n```\n","gitHead":"92adcfa27381c0a54ce1f3bcc49b2bc46a248adc","scripts":{"zip":"gulp zip --production","build":"gulp --production","start":"gulp","litmus":"gulp litmus --production"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io/resin-emails.git","type":"git"},"_npmVersion":"6.1.0","description":"resin.io email generator.","directories":{},"_nodeVersion":"10.4.0","dependencies":{"node-sass":"^4.9.3","foundation-emails":"^2.2.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gulp":"^4.0.0","inky":"^1.3.6","yargs":"^12.0.2","colors":"^1.3.2","panini":"^1.3.0","rimraf":"^2.3.3","gulp-if":"^2.0.0","beepbeep":"^1.2.0","gulp-cli":"^2.0.1","gulp-zip":"^4.2.0","lazypipe":"^1.0.1","gulp-sass":"^4.0.1","babel-core":"^6.26.3","gulp-litmus":"0.0.7","gulp-rename":"^1.4.0","browser-sync":"^2.24.7","gulp-htmlmin":"^5.0.1","gulp-replace":"^1.0.0","merge-stream":"^1.0.0","gulp-html-src":"^1.0.0","gulp-imagemin":"^4.1.0","babel-register":"^6.26.0","gulp-awspublish":"^3.4.0","gulp-inline-css":"^3.0.0","gulp-sourcemaps":"^2.6.4","gulp-load-plugins":"^1.1.0","siphon-media-query":"^1.0.0","babel-preset-es2015":"^6.3.13"},"_npmOperationalInternal":{"tmp":"tmp/resin-emails_1.1.0-balena-2018-12-92adcfa27381c0a54ce1f3bcc49b2bc46a248adc_1543936954140_0.5248310148576532","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.0-starting-template-7dc0ff71a3621ec034e04ba3bdda6414a72b8094":{"name":"resin-emails","version":"1.1.0-starting-template-7dc0ff71a3621ec034e04ba3bdda6414a72b8094","author":{"name":"Craig Mulligan","email":"craig@resin.io"},"license":"MIT","_id":"resin-emails@1.1.0-starting-template-7dc0ff71a3621ec034e04ba3bdda6414a72b8094","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"homepage":"https://github.com/resin-io/resin-emails#readme","bugs":{"url":"https://github.com/resin-io/resin-emails/issues"},"dist":{"shasum":"f62d58cd47de7667a55b76d7da0796024ece1bc2","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-1.1.0-starting-template-7dc0ff71a3621ec034e04ba3bdda6414a72b8094.tgz","fileCount":30,"integrity":"sha512-7ic8831nHrEdp4ETJIGI5uEyOdVnul+ZRY/vEqDdUjBMO027hfA25CecRXBmuCJxS6Ztq2ZzhyxXcxZW83ycOg==","signatures":[{"sig":"MEUCICNKENKnWvOl3VIdMHoUsI6LUkjZrXDbZCZ9hOZiaqwsAiEA+Ph+4bufrdc46IP4aG7CVt9cKA1CyooIJOgBQ8bZGew=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44956,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcar0RCRA9TVsSAnZWagAAgcYQAJMAd6z/jszOHWi/6oBM\n5HzCU+QHNSh77f8zfViUykq+dABg/NdjAQrU5z6ic1m2kfxigsA5uSwFYUcA\nJpYohHYAokq2BDEaZpxQHPU2rETb6f3n9jFMqRzPOXK6d2NESdw5yrNe3WKw\nOxGrchZmwNQJT8TIFbK+xiKgJZnKrzxZMFbextK//dFJ69TZ8Ulh10esPwEZ\n4KDtu3AthGh7kqPabl27pQr5bteQX6gQPhfLwP5+TA9hpzz8jCYmNZYPfrax\ndL3AkCNfIFqTZhNFYdkibZLFnhYJK2+JbDIY+pV0HjRkSFPuLdMyNk4d7yMe\nIOYTOH8GWOMXqrDEy/MAqrNh2tI/CSl330F7QvbY/GVl/Mfwz3cyVOepAcrq\nk+mG9w7SKaG26ivTZKz+eIjA8AzcSDoi1qIlHQclDtXA2Fr9WIrzaCvBaE9U\nKnZKN+HImY7X0euNdY8lyFofeube2gHs/aZUki/PjWUnLvBxOBw2fXh33SYE\nOEyhJPNalvwTBI6x9ZvexWX+6eiOjRjdftr80S+F+VtAZuB3Nj/F+dbloo8t\n307Yov3olNvxQDDSsebEdB01Xa306qQaUKbGB9mLs4OamL6l0OKofz0q7RQf\n+6F8Phjh4Yw0okPO3hxVNEsvw0jOOZ+JQM5NtKLNkTHN7Eu1/eFk+vQTrINn\ntN8B\r\n=3f6r\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulpfile.babel.js","babel":{"presets":["es2015"]},"readme":"# Balena newsletter generator\n\nThis is a generator for balena emails, it uses [zurb's email framework](http://foundation.zurb.com/emails/docs) which borrows templating principles from static site generators(handlebars.js). It also includes a minimal templating language that converts simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup.\n\n- Handlebars HTML templates with [Panini](http://github.com/zurb/panini)\n- Simplified HTML email syntax with [Inky](http://github.com/zurb/inky)\n- Sass compilation\n- Image compression\n- Built-in BrowserSync server\n- Full email inlining process\n\n## Installation\n\nTo use this template, your computer needs [Node.js](https://nodejs.org/en/) 0.12 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\n```\n```\nnpm i\n```\n\n## Editing\n\nTo update data of the newsletter you need to update the data in `/src/data`. Each `<data>.json` corresponds to a section in the newsletter. Generally you'd only need to change `featured, posts, & events`.\n\n## Build Commands\n\n#### When developing\n\n* Run `npm start` to kick off the build process. A new browser tab will open with a server pointing to your project files.\n\nCurrent all files will get reloaded while developing except for `.js` and `.json`.\n\n#### When building\n\n* Run `npm run build` to inline your CSS into your HTML along with the rest of the build process.\n\n## Sending out the newsletter\n\nOnce you have run the build command you should have a built `/build` folder with all the data compiled for the email.\nJust zip the folder and move to the next step.\n\nLogin to mailchimp and follow\n\n* Create a campaign [ name format: `Mounth Year` ] -> Add subject, list etc and select template.\n* When editing the template, select to add a custom template and upload the zipped file containing the design files.\n* Send you're self + some others a test email from template editor.\n* Scheduling the campaign. Generally we use time warp so that users receive it in their tz (Keep in mind you need to start the scheduler 24hrs earlier for this feature). We also generally send it out at 3pm on wednesdays.\n* :tada\n\nOnce you're done commit + push your changes.\n\n```\ngit commit -am `<month year>` && git push\n```\n","gitHead":"7dc0ff71a3621ec034e04ba3bdda6414a72b8094","scripts":{"zip":"gulp zip --production","build":"gulp --production","start":"gulp","litmus":"gulp litmus --production"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io/resin-emails.git","type":"git"},"_npmVersion":"6.7.0","description":"resin.io email generator.","directories":{},"_nodeVersion":"10.4.0","dependencies":{"node-sass":"^4.9.3","foundation-emails":"^2.2.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gulp":"^4.0.0","inky":"^1.3.6","yargs":"^12.0.2","colors":"^1.3.2","panini":"^1.3.0","rimraf":"^2.3.3","gulp-if":"^2.0.0","beepbeep":"^1.2.0","gulp-cli":"^2.0.1","gulp-zip":"^4.2.0","lazypipe":"^1.0.1","gulp-sass":"^4.0.1","babel-core":"^6.26.3","gulp-litmus":"0.0.7","gulp-rename":"^1.4.0","browser-sync":"^2.24.7","gulp-htmlmin":"^5.0.1","gulp-replace":"^1.0.0","merge-stream":"^1.0.0","gulp-html-src":"^1.0.0","gulp-imagemin":"^4.1.0","babel-register":"^6.26.0","gulp-awspublish":"^3.4.0","gulp-inline-css":"^3.0.0","gulp-sourcemaps":"^2.6.4","gulp-load-plugins":"^1.1.0","siphon-media-query":"^1.0.0","babel-preset-es2015":"^6.3.13"},"_npmOperationalInternal":{"tmp":"tmp/resin-emails_1.1.0-starting-template-7dc0ff71a3621ec034e04ba3bdda6414a72b8094_1550499088918_0.21642849439893097","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.1.0":{"name":"resin-emails","version":"1.1.0","author":{"name":"Craig Mulligan","email":"craig@resin.io"},"license":"MIT","_id":"resin-emails@1.1.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"homepage":"https://github.com/resin-io/resin-emails#readme","bugs":{"url":"https://github.com/resin-io/resin-emails/issues"},"dist":{"shasum":"562d0a93cf6e2319c0c7a662f70db83d3f09c040","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-1.1.0.tgz","fileCount":30,"integrity":"sha512-mtyRsFKsD3SWUAHoiiXhyEQiBrqaWWE8lNrQXGHGC8Kcv+SkbDyGA6hTencqn4EUTG0h12JXxsCIRNZEVD1P6g==","signatures":[{"sig":"MEYCIQCvN81NSX4KPVtZKxyq49EhOfadL+YS4TfBUKDtOCrEoQIhANuBFJxy57MzIQr8/Nu/W3waz9eZ8IR82wzh+rMe+GGO","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44897,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJca8OgCRA9TVsSAnZWagAA6tAP/Rt/k9kRlpj5702ZMFyU\nbjx8OIPGRuWLd+Iya9V21Y28xchW5cFRO27PB7kJvkS89tgps1ScrbPPSV0f\n9d2KAU8Mqreeve8Tg68aaJVj9g5T9LlEoq6+HF+oWwcnEYxjGYOphebrVicE\nafXRdfVdfyk13jp0VLMBdWR7GkY4t3DIRtpRqzBGheq1Un0fuG+jdNx53t7D\n5GzHEn7n4QZ2zdRFSpQMMzgtsZEpBju/NpBRZ0/KJkOrE8aZqbXYe6pRYjes\nh6B1DchB/K7ENxz2+UY9znMQbGMRHqxMcqEGoBHwpI5xjSfwcnUGjHAq9OMH\n6x4UCXfXs68Md1T23+hAobc095A82fRs/SlcVSKkRSQAUADjJYjCu2cS35PD\n5ni90eXhzasB3s4RLAK1aG0SuYh7gBAXCFYdNrDLdmbBHFOqozdIP2oXaYZI\nJxiHtHDWROnKkq4STjr8q8HyXZL4CKr/U9ud5NloqfTH3dpaa45HQ834U5E5\nKv9Pmf9/4CDMOJttZWulmjUZxREeuGMDLB2gRL4gbGTHeQYnHCU/BMQM4n58\nNHYd3unZpkIpEfKKQQ0HRAAaHJEQ3RNGqUUOVku3d4js+pHEffvrDabqw76Q\n18QPtMNEwRmPF3MJuWyaCKwfGMbmW2QHGWKV909K5foJ0fW8hy00lK1k9Vm0\nKRwc\r\n=vcZi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulpfile.babel.js","babel":{"presets":["es2015"]},"gitHead":"ad81d0fb813aada13db33acc8d35718bc054b3b8","scripts":{"zip":"gulp zip --production","build":"gulp --production","start":"gulp","litmus":"gulp litmus --production"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io/resin-emails.git","type":"git"},"_npmVersion":"6.7.0","description":"resin.io email generator.","directories":{},"_nodeVersion":"10.4.0","dependencies":{"node-sass":"^4.9.3","foundation-emails":"^2.2.1"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^4.0.0","inky":"^1.3.6","yargs":"^12.0.2","colors":"^1.3.2","panini":"^1.3.0","rimraf":"^2.3.3","gulp-if":"^2.0.0","beepbeep":"^1.2.0","gulp-cli":"^2.0.1","gulp-zip":"^4.2.0","lazypipe":"^1.0.1","gulp-sass":"^4.0.1","babel-core":"^6.26.3","gulp-litmus":"0.0.7","gulp-rename":"^1.4.0","browser-sync":"^2.24.7","gulp-htmlmin":"^5.0.1","gulp-replace":"^1.0.0","merge-stream":"^1.0.0","gulp-html-src":"^1.0.0","gulp-imagemin":"^4.1.0","babel-register":"^6.26.0","gulp-awspublish":"^3.4.0","gulp-inline-css":"^3.0.0","gulp-sourcemaps":"^2.6.4","gulp-load-plugins":"^1.1.0","siphon-media-query":"^1.0.0","babel-preset-es2015":"^6.3.13"},"_npmOperationalInternal":{"tmp":"tmp/resin-emails_1.1.0_1550566303461_0.8446549220259876","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.0-balena-2019-08-c3903fd46bc60ec2fdc33446e6e8fd71ad4c14cd":{"name":"resin-emails","version":"1.2.0-balena-2019-08-c3903fd46bc60ec2fdc33446e6e8fd71ad4c14cd","author":{"name":"Craig Mulligan","email":"craig@resin.io"},"license":"MIT","_id":"resin-emails@1.2.0-balena-2019-08-c3903fd46bc60ec2fdc33446e6e8fd71ad4c14cd","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/resin-io/resin-emails#readme","bugs":{"url":"https://github.com/resin-io/resin-emails/issues"},"dist":{"shasum":"ac045908e76eb83d8e02b5bc086fd11b06f540e1","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-1.2.0-balena-2019-08-c3903fd46bc60ec2fdc33446e6e8fd71ad4c14cd.tgz","fileCount":32,"integrity":"sha512-QG/dQYT1n+sZHMWyAkeLMj4Y0HQSMYXA06SS6KPcewJpUE+T0qfR5tSBMlvuA58TMK1/stuKAeIlphpDXw7sYA==","signatures":[{"sig":"MEYCIQCXbWFIv2T62UlFhUErLamOYFfeYMtIOMVffMEIB4KcTgIhAJ65MpdxQvokGHdhkecMrO+PxPT7agfMRgT+EWzn7DlB","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51008,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdUQm2CRA9TVsSAnZWagAAJ9sP/iKP1A/b1R/V08cyJ4kD\n/0rpK1rpZ1ZILzfWABk1Ycj2qDAp3iigcKCrH9novl4j7ML+Fdo15cHNHt0G\nYg/QYAl99yKrF1Hv1fX6lv/f3agsLGqETtvuABUYJVyyKDEoVFqyycz413GY\nG2Wv20GTLYrDdiLXLSxMryDN3ygsZpMwH0sTAujRaZBor1uv1R5IudGxsjiT\ntkpMG81BcjqOiyWFSIpTpG78z98dE3J0An9FMTKpXQ9/R+rnVwG8hlydHHQ9\ncXq47k8hOsUCSe8PJiAPkBlYHUETOBc4i9L/64c91nt9YBpk4twYG92U4vBB\nw0yV8/yx0VDsdr+M1U5AXbvzfkG+DQkGN/1eU+7/OZWFq+TGTKkGRe8Td3eU\n6H4zDLG1XJJkBM2tH7T8NFJNizW27WbO2zaccVwrcPa9CkSIOI94yKszX9jl\na2YfzqjIVV1Z496EAdqrnvuGOghK8R4CEwCDmXNwkYWujSIL2gBUF9G0k8ms\nKaNnVuOORugAyLQd6+8inRtv/DXjSP+3+mD+HThsjGlqgh20Oin6t855slF6\ni4NegVKbl5Tq/7Vw0hAv3DR4dF2VOjailljs0OhFDcTTxP+kydTKQ5DT6a/i\nrDKFpN4PUTFNZqnLjoZZEW2opUj0tnFym0vzuNKiSIw9j0OCEul+GBDYGEZM\nKp9A\r\n=52iV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulpfile.babel.js","babel":{"presets":["es2015"]},"readme":"# Balena newsletter generator\n\nThis is a generator for balena emails, it uses [zurb's email framework](http://foundation.zurb.com/emails/docs) which borrows templating principles from static site generators(handlebars.js). It also includes a minimal templating language that converts simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup.\n\n- Handlebars HTML templates with [Panini](http://github.com/zurb/panini)\n- Simplified HTML email syntax with [Inky](http://github.com/zurb/inky)\n- Sass compilation\n- Image compression\n- Built-in BrowserSync server\n- Full email inlining process\n\n## Installation\n\nTo use this template, your computer needs [Node.js](https://nodejs.org/en/) 0.12 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\n```\n```\nnpm i\n```\n\n## Editing\n\nTo update data of the newsletter you need to update the data in `/src/data`. Each `<data>.json` corresponds to a section in the newsletter. Generally you'd only need to change `featured, posts, & events`.\n\n## Build Commands\n\n#### When developing\n\n* Run `npm start` to kick off the build process. A new browser tab will open with a server pointing to your project files.\n\nCurrent all files will get reloaded while developing except for `.js` and `.json`.\n\n#### When building\n\n* Run `npm run build` to inline your CSS into your HTML along with the rest of the build process.\n\n## Sending out the newsletter\n\nOnce you have run the build command you should have a built `/build` folder with all the data compiled for the email.\nJust zip the folder and move to the next step.\n\nLogin to mailchimp and follow\n\n* Create a campaign [ name format: `Mounth Year` ] -> Add subject, list etc and select template.\n* When editing the template, select to add a custom template and upload the zipped file containing the design files.\n* Send you're self + some others a test email from template editor.\n* Scheduling the campaign. Generally we use time warp so that users receive it in their tz (Keep in mind you need to start the scheduler 24hrs earlier for this feature). We also generally send it out at 3pm on wednesdays.\n* :tada\n\nOnce you're done commit + push your changes.\n\n```\ngit commit -am `<month year>` && git push\n```\n","gitHead":"c3903fd46bc60ec2fdc33446e6e8fd71ad4c14cd","scripts":{"zip":"gulp zip --production","build":"gulp --production","start":"gulp","litmus":"gulp litmus --production"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io/resin-emails.git","type":"git"},"_npmVersion":"6.9.0","description":"resin.io email generator.","directories":{},"_nodeVersion":"10.4.0","dependencies":{"node-sass":"^4.9.3","foundation-emails":"^2.2.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gulp":"^4.0.0","inky":"^1.3.6","yargs":"^12.0.2","colors":"^1.3.2","panini":"^1.3.0","rimraf":"^2.3.3","gulp-if":"^2.0.0","beepbeep":"^1.2.0","gulp-cli":"^2.0.1","gulp-zip":"^4.2.0","lazypipe":"^1.0.1","gulp-sass":"^4.0.1","babel-core":"^6.26.3","gulp-litmus":"0.0.7","gulp-rename":"^1.4.0","browser-sync":"^2.24.7","gulp-htmlmin":"^5.0.1","gulp-replace":"^1.0.0","merge-stream":"^1.0.0","gulp-html-src":"^1.0.0","gulp-imagemin":"^4.1.0","babel-register":"^6.26.0","gulp-awspublish":"^3.4.0","gulp-inline-css":"^3.0.0","gulp-sourcemaps":"^2.6.4","gulp-load-plugins":"^1.1.0","siphon-media-query":"^1.0.0","babel-preset-es2015":"^6.3.13"},"_npmOperationalInternal":{"tmp":"tmp/resin-emails_1.2.0-balena-2019-08-c3903fd46bc60ec2fdc33446e6e8fd71ad4c14cd_1565591989673_0.060117060369690334","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.0-balena-2019-08-0434f696795ae467325234266171214fa6606731":{"name":"resin-emails","version":"1.2.0-balena-2019-08-0434f696795ae467325234266171214fa6606731","author":{"name":"Craig Mulligan","email":"craig@resin.io"},"license":"MIT","_id":"resin-emails@1.2.0-balena-2019-08-0434f696795ae467325234266171214fa6606731","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/resin-io/resin-emails#readme","bugs":{"url":"https://github.com/resin-io/resin-emails/issues"},"dist":{"shasum":"61c2b5ad28d01518978859b2b8cca221689fa924","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-1.2.0-balena-2019-08-0434f696795ae467325234266171214fa6606731.tgz","fileCount":32,"integrity":"sha512-Zek1XDWNHMhqYrNPQfCqHUh/ddyzw2idl7MxWkfBpVYSadGz6v1ZmI6kyjR3+iesU/DPGYg5K4pcU7ZLW1moFA==","signatures":[{"sig":"MEUCIQC14m7p77LeF0ZYuYAhpHzuRUhlj80M1aAKoCAGPv4DLAIgLQ6FYCUu6kH1OWqqDQbBXxmJZBEMg+gI+X7NdoB51Q0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54190,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdUQpHCRA9TVsSAnZWagAAHC4P/1XcQyrY/1ZvcA0tteo+\n+td+ouNCGfEPD2TkXMPYycUPUtl6RF/CqkxZnmnWUnB5xhd6ySCAT5UXwR+Q\n3BuRKNl5DAVxQAHyz9OxHrHZy8ZwVcULAyB4KCwKnHdPbdOYYzOOd5yrlcQM\nedR4OX39W1Z3D415dPbRBRTWOgaEfD3jPbOEXUmOSXOdyUTpSfgogwrgt8GM\nPkTR4W67l1yCZCUaTyuUWOvwiUpKYvk7Fz9VhDENpu0kmasSAxwYfvqlshwO\n4QHev0g0UqVa6aW9HNDn48T9Ix83ufCD0+xFLTTgxrkt0hVPVjw/QTo7pI4t\nusot7Ij10hOpRJF5NhNrNd+0lKo7L4QNz2V1ILWoJ5ejNtUMgMXsf9JtB6CI\n8BMXIJoPlQZEtbNVsK6K9/+6gbDycZ0x5/29D5kfsE/iiMI1rwkmoW/EOFbp\nQDMA7uj650wOvhWhu/if87ruFrRE+66G51d84sW26GhH+WJfZY/ZGYSh7FBC\nVhGT1fFZlH6oAWXjOqgJJzfdSfrW+SFPA1zMbcHeGP8NaPycmSwKwf4oH3m8\n+gfreMZ2dxUvyf/Ia3Rl6fdE+eW8RF8HYNR0sc2yQTnf3Ycn/7im+lFvOCbo\nxpvlq4rst9FiY5PXVvG2EvBy8v5TJCFd2GRpnxEHW2IZoaiyii8whgRnsXNQ\nSs/s\r\n=WsXG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulpfile.babel.js","babel":{"presets":["es2015"]},"readme":"# Balena newsletter generator\n\nThis is a generator for balena emails, it uses [zurb's email framework](http://foundation.zurb.com/emails/docs) which borrows templating principles from static site generators(handlebars.js). It also includes a minimal templating language that converts simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup.\n\n- Handlebars HTML templates with [Panini](http://github.com/zurb/panini)\n- Simplified HTML email syntax with [Inky](http://github.com/zurb/inky)\n- Sass compilation\n- Image compression\n- Built-in BrowserSync server\n- Full email inlining process\n\n## Installation\n\nTo use this template, your computer needs [Node.js](https://nodejs.org/en/) 0.12 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\n```\n```\nnpm i\n```\n\n## Editing\n\nTo update data of the newsletter you need to update the data in `/src/data`. Each `<data>.json` corresponds to a section in the newsletter. Generally you'd only need to change `featured, posts, & events`.\n\n## Build Commands\n\n#### When developing\n\n> NOTE: Currently running on node version 8.16.0.\n\n* Run `npm start` to kick off the build process. A new browser tab will open with a server pointing to your project files.\n\nCurrent all files will get reloaded while developing except for `.js` and `.json`.\n\n#### When building\n\n* Run `npm run build` to inline your CSS into your HTML along with the rest of the build process.\n\n## Sending out the newsletter\n\nOnce you have run the build command you should have a built `/build` folder with all the data compiled for the email.\nJust zip the folder and move to the next step.\n\nLogin to mailchimp and follow\n\n* Create a campaign [ name format: `Mounth Year` ] -> Add subject, list etc and select template.\n* When editing the template, select to add a custom template and upload the zipped file containing the design files.\n* Send you're self + some others a test email from template editor.\n* Scheduling the campaign. Generally we use time warp so that users receive it in their tz (Keep in mind you need to start the scheduler 24hrs earlier for this feature). We also generally send it out at 3pm on wednesdays.\n* :tada\n\nOnce you're done commit + push your changes.\n\n```\ngit commit -am `<month year>` && git push\n```\n","gitHead":"0434f696795ae467325234266171214fa6606731","scripts":{"zip":"gulp zip --production","build":"gulp --production","start":"gulp","litmus":"gulp litmus --production"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io/resin-emails.git","type":"git"},"_npmVersion":"6.9.0","description":"resin.io email generator.","directories":{},"_nodeVersion":"10.4.0","dependencies":{"node-sass":"^4.9.3","foundation-emails":"^2.2.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gulp":"^4.0.0","inky":"^1.3.6","yargs":"^12.0.2","colors":"^1.3.2","panini":"^1.3.0","rimraf":"^2.3.3","gulp-if":"^2.0.0","beepbeep":"^1.2.0","gulp-cli":"^2.0.1","gulp-zip":"^4.2.0","lazypipe":"^1.0.1","gulp-sass":"^4.0.1","babel-core":"^6.26.3","gulp-litmus":"0.0.7","gulp-rename":"^1.4.0","browser-sync":"^2.24.7","gulp-htmlmin":"^5.0.1","gulp-replace":"^1.0.0","merge-stream":"^1.0.0","gulp-html-src":"^1.0.0","gulp-imagemin":"^4.1.0","babel-register":"^6.26.0","gulp-awspublish":"^3.4.0","gulp-inline-css":"^3.0.0","gulp-sourcemaps":"^2.6.4","gulp-load-plugins":"^1.1.0","siphon-media-query":"^1.0.0","babel-preset-es2015":"^6.3.13"},"_npmOperationalInternal":{"tmp":"tmp/resin-emails_1.2.0-balena-2019-08-0434f696795ae467325234266171214fa6606731_1565592134488_0.30486683791445257","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"1.2.0-balena-2019-09-3cbdd74584e516aed38370eecc4afa17e0780351":{"name":"resin-emails","version":"1.2.0-balena-2019-09-3cbdd74584e516aed38370eecc4afa17e0780351","author":{"name":"Craig Mulligan","email":"craig@resin.io"},"license":"MIT","_id":"resin-emails@1.2.0-balena-2019-09-3cbdd74584e516aed38370eecc4afa17e0780351","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/resin-io/resin-emails#readme","bugs":{"url":"https://github.com/resin-io/resin-emails/issues"},"dist":{"shasum":"c570ad1c8de58caf7392727b336b805aa7c2c6b5","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-1.2.0-balena-2019-09-3cbdd74584e516aed38370eecc4afa17e0780351.tgz","fileCount":32,"integrity":"sha512-tGtSKy7/1RJnQNtMbJu+oTZo3h7kRzkGGNulegHzK7+VutNN5wqY5MWDuMtslycViRaUgmEeUZx9whCw1DMz8Q==","signatures":[{"sig":"MEUCIEwu/30+5xuDvoT8n7yi1Gyn2Ire30KwAW8w1TTGz2+iAiEA7o0qQVonhEknkcXbSacemHqNjemXjzAp/UPQHOifp/0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53345,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJde+M2CRA9TVsSAnZWagAALxsP/jwbOPZSLLzxkHGLt/tV\nK1hvIsPu1YtFaaf3QyFEoQ1HlPlF0mr48vaieZKrMMJ0jgDeLqgYY2iFs2cT\n5iA04q92afbgKPlvR+1M0vizUliuH5hlsXarb0AWq9hraSe3VSkjePc+PRQp\nONI+aiD+mTrkEq1+K8a13l3Ym963n/E1ZeQlEXEkiIF/FN5aZmYWMlJ7yoCh\nRGU1JodlO2ULCvfPuAMNTqrNsH02jIhEpMW36zI5kRwfFynpSRmNV+2nrL3Q\ndhn9IPTpffqmofvSgRST1xpYQIzpz/Xgj1RMeIKgkWLixxA3kxNlifga5rj2\nnro4uI8FIXWe6SAgyybU09GjPAbDbSQGqAbVR1wPx1ZWXK7CarlQhgxPCAXG\nUAWPv3azWyOhZ+H5HsqktM8+ZfsztEQdpaAnyDa21ljzeLxKERjx6fnv7E7N\n0f4jMZFowaNyO2v8fxoBZBywK9O6VGVw+mi31UD1JE0mjCSBJk0vexeVwYHx\n9FPiKNVcHVcTEvOokD93VShPCpFr4xVSmaupl1+to1QgB0nW3VNtvFhabzC3\nVAuNx6VfH2JHUqISO1ARKH64EdeopzlsTB0F6WpwFRpvYNhjxsnkXX1DfkoP\nOpcjewchkIj0z96Y9NpL+x5INbNOPIcLsIIVD2s/m3+Z/ec9t5PXZ80TuqXq\nblBm\r\n=2Vxz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulpfile.babel.js","babel":{"presets":["es2015"]},"readme":"# Balena newsletter generator\n\nThis is a generator for balena emails, it uses [zurb's email framework](http://foundation.zurb.com/emails/docs) which borrows templating principles from static site generators(handlebars.js). It also includes a minimal templating language that converts simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup.\n\n- Handlebars HTML templates with [Panini](http://github.com/zurb/panini)\n- Simplified HTML email syntax with [Inky](http://github.com/zurb/inky)\n- Sass compilation\n- Image compression\n- Built-in BrowserSync server\n- Full email inlining process\n\n## Installation\n\nTo use this template, your computer needs [Node.js](https://nodejs.org/en/) 0.12 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\n```\n```\nnpm i\n```\n\n## Editing\n\nTo update data of the newsletter you need to update the data in `/src/data`. Each `<data>.json` corresponds to a section in the newsletter. Generally you'd only need to change `featured, posts, & events`.\n\n## Build Commands\n\n#### When developing\n\n> NOTE: Currently running on node version 8.16.0.\n\n* Run `npm start` to kick off the build process. A new browser tab will open with a server pointing to your project files.\n\nCurrent all files will get reloaded while developing except for `.js` and `.json`.\n\n#### When building\n\n* Run `npm run build` to inline your CSS into your HTML along with the rest of the build process.\n\n## Sending out the newsletter\n\nOnce you have run the build command you should have a built `/build` folder with all the data compiled for the email.\nJust zip the folder and move to the next step.\n\nLogin to mailchimp and follow\n\n* Create a campaign [ name format: `Mounth Year` ] -> Add subject, list etc and select template.\n* When editing the template, select to add a custom template and upload the zipped file containing the design files.\n* Send you're self + some others a test email from template editor.\n* Scheduling the campaign. Generally we use time warp so that users receive it in their tz (Keep in mind you need to start the scheduler 24hrs earlier for this feature). We also generally send it out at 3pm on wednesdays.\n* :tada\n\nOnce you're done commit + push your changes.\n\n```\ngit commit -am `<month year>` && git push\n```\n","gitHead":"3cbdd74584e516aed38370eecc4afa17e0780351","scripts":{"zip":"gulp zip --production","build":"gulp --production","start":"gulp","litmus":"gulp litmus --production"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io/resin-emails.git","type":"git"},"_npmVersion":"6.9.0","description":"resin.io email generator.","directories":{},"_nodeVersion":"10.4.0","dependencies":{"node-sass":"^4.9.3","foundation-emails":"^2.2.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gulp":"^4.0.0","inky":"^1.3.6","yargs":"^12.0.2","colors":"^1.3.2","panini":"^1.3.0","rimraf":"^2.3.3","gulp-if":"^2.0.0","beepbeep":"^1.2.0","gulp-cli":"^2.0.1","gulp-zip":"^4.2.0","lazypipe":"^1.0.1","gulp-sass":"^4.0.1","babel-core":"^6.26.3","gulp-litmus":"0.0.7","gulp-rename":"^1.4.0","browser-sync":"^2.24.7","gulp-htmlmin":"^5.0.1","gulp-replace":"^1.0.0","merge-stream":"^1.0.0","gulp-html-src":"^1.0.0","gulp-imagemin":"^4.1.0","babel-register":"^6.26.0","gulp-awspublish":"^3.4.0","gulp-inline-css":"^3.0.0","gulp-sourcemaps":"^2.6.4","gulp-load-plugins":"^1.1.0","siphon-media-query":"^1.0.0","babel-preset-es2015":"^6.3.13"},"_npmOperationalInternal":{"tmp":"tmp/resin-emails_1.2.0-balena-2019-09-3cbdd74584e516aed38370eecc4afa17e0780351_1568400181535_0.12202197213744848","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.0-mjml-7db9ca79b020aacf235daac6dcb544265697c91f":{"name":"resin-emails","version":"2.0.0-mjml-7db9ca79b020aacf235daac6dcb544265697c91f","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.0.0-mjml-7db9ca79b020aacf235daac6dcb544265697c91f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"64b3344227cac0f9e2220f1884c018f9865a749f","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.0.0-mjml-7db9ca79b020aacf235daac6dcb544265697c91f.tgz","fileCount":92,"integrity":"sha512-bGroTRseVJtzcnS8cp1ZlOiIqjoJq9036IC4J3aMEC4iLAMWBeygdsxCpRdTQJE2Rf2LJA1AnQhqbyGtbHcGTg==","signatures":[{"sig":"MEYCIQDWNnBkUDBefLsoui4a7xPg7aDS2Iv4SfYC/6xsyhsRxAIhAIZX+0zkyTcXVTlXKb1j+yzx2ueZrxXdXA9m3Gx21ipg","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":7995002,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe1SteCRA9TVsSAnZWagAAuxQP/ikBoWOdZU0QzFg6S9ax\n8NnjzEtb2PrelDspta2a0TnJt612+gjZgWh+CriZ0WwhSY+dQ0r40VRf9vAf\n7Cegi2+icU5RBMbo6vgwM2s0hWk5lv5P3Kc9Yz7/Dp7FWbNl8yFNDxWIjx+K\nZPsGCW+w4q+rkxkmiEzTEknhv13WghGURCFnW9VPXF7KxZbLSDYvgIzY3Z/M\nx+liMkMNn3aNEhkd6nPFZaWO162X+/XovANWOrBGYKET+IETdFwElpAp2Uox\nnC59Kgv7TtWp8lrbBk6O2Bd0hV42G13IX/fN+2oxTESMtqx2E2FOQHHr9C+k\n8rEt2G74wXNP8Lfntthw4crvbjv7PRGtMH24xCeNeKI/kOatnZzaBFZGMwHV\n7rfs7htTiRei0QzOGbRHdj5BVVtUNndLAuEfDNH+/qOIrQP1N7QkqG/7vyXQ\n3pjhar1KymMqAEJ0CvWx2wQk+9/n7n8yIvtKZtFJoj9vF83xSp70zDmg+ZwV\nci7ysjdg28GHweF0BSXlUwbgwvh3rvMakmhZHpTb4abrta77VhQ5KmIBoscG\nX2I8DYG6/QGOxhG3ftcPpNtLkjY4D6j6bWhQBDnZeIfoY6hzA4/S7sR16tvy\nQEn79b/k3cNikxpomWVNdK5gZTQaKRBGC69/fFtZOFlIE8PoMyR7xEq4H910\n+TTy\r\n=01Qf\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"7db9ca79b020aacf235daac6dcb544265697c91f","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"10.20.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.5.1","gulp-rename":"^1.4.0","browser-sync":"^2.26.7","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.0.0-mjml-7db9ca79b020aacf235daac6dcb544265697c91f_1591028573296_0.7860755586231234","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.0-mjml-ec369d99619874319943300e65683f05a1d6819f":{"name":"resin-emails","version":"2.0.0-mjml-ec369d99619874319943300e65683f05a1d6819f","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.0.0-mjml-ec369d99619874319943300e65683f05a1d6819f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"7ac222aebb35da920a2a4783348305457276bce9","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.0.0-mjml-ec369d99619874319943300e65683f05a1d6819f.tgz","fileCount":92,"integrity":"sha512-frEdjr0RURq+1+tiF8l72UFrSV0aCCGplxDDgQNvLQWX8Y98RhrZZWdgelDZS0/CfKKDMQdTotO5vQ/9blEyXQ==","signatures":[{"sig":"MEQCIGR8vCx5buiQDymyvrCfbaOneKMiNuJ1xCw+6ZaUEuT6AiBIE9x6cMf2WHaTkOmXoGjEH21ED4FbgpFuPVs2NEm+MQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":7992867,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe1TcGCRA9TVsSAnZWagAAbC0P/j9UaCT4JYCuOlkqo0kh\n1a8u/R7XpJFjItf246W3Rd2UHWnUdbIewzhWj44WZTv6uK1EAr4VHNvH997t\nGOll7d0ordfN6mATJHY4opAtQjE/k6CrH5SV4lc9g52I+lISkrIZtRNCVeLT\n8TGuv7pBNCv72mNOtpzfeVWdLuOQd8bgMATnXN2UXYPzArRyop/tqvi97Pqu\nf0OI8lNpzzzvqbsnYWlZZcFkzQh8wjhbd/In2TlhKC5Ur5SrRtUQryd2UKm6\nNL8pZehhCVmYtXvDyHdbR1grExgs2dM/S1NiItW1b68a/y0hUCCXi5LHsDyB\n8xxSWr3u5vSqvIz5W/TP1w/4iUiBo2ufcSHM03vM3Mdvz6GBUgvw7HNoWaxu\nxKlCVBgARrNEgTeVCQBQvFfhrHBL/H1FBiw2iuolAs+kh0w7B/9f70sXdemd\n3c3RXJDlBR7mOrS3hmSPQP3GAtbkJ8I6wAnlp7+8SGEUnAklUWc3nS6qVXfC\nKval0WTjAsnPqA9F5NiUtJXjFtvt/SqDwAaZ7BF1JVIHgcbd42//29/MaaSK\nA5vUsDHvqyhyvp7wZ8sgXUjjbtyoMGK3/el0m3QM9CnI2Zlr7TQBNNVPLHhn\nTIm5667xDnnTeYhVReClL5HjrSQarK7GcdtdWSe3CXcmV1MKGZu2sKySM9jC\nIqb/\r\n=S9e7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"ec369d99619874319943300e65683f05a1d6819f","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"10.20.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.5.1","gulp-rename":"^1.4.0","browser-sync":"^2.26.7","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.0.0-mjml-ec369d99619874319943300e65683f05a1d6819f_1591031557941_0.38268005284643447","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.0-mjml-b8045a537b05fc6fea8a4ea7ec922ad6aeebf8a6":{"name":"resin-emails","version":"2.0.0-mjml-b8045a537b05fc6fea8a4ea7ec922ad6aeebf8a6","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.0.0-mjml-b8045a537b05fc6fea8a4ea7ec922ad6aeebf8a6","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"6d75a55c1a2cc10362733f701cf81c28bc7be989","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.0.0-mjml-b8045a537b05fc6fea8a4ea7ec922ad6aeebf8a6.tgz","fileCount":93,"integrity":"sha512-mawkeunqKiIVwDXo2Gy2//FpP8qr0AAcuptzTuyfERND6g9jYBHvFv1aYynrl0+wg6zmyRDYuBM/bx6acCwLKA==","signatures":[{"sig":"MEYCIQCEIF+ukbxwAdpowMslfxx74e5pjU/l3zaTecqm0f60ZwIhAP974HR3nUKuYPbYl/ie4eu4JIgEqdyOOWcH621o82CF","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":8148456,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe19OeCRA9TVsSAnZWagAAJ3wP/1PyMGBGgMrV/N9+t9bG\n0dXET2UeMnwyCtj7JSSIwDDjKPfFw5Et23pjzmJCjxWxz2JHuXJH12YmrwET\n02XEYC0daLHGksH2q+tuiQoC+aG7sWoq6HAkmKREBb6j+4bFlChAPwnTNHHy\nyZKJG2XH1M8GGWbNyVbhrZL9mg55g4pZY3YNsAVKjCEhXi8TyjniQ2hW+LH7\nZFrEkXTMKyTPO70Ccs59XL6Cpox1/zcSGHzFtcO7vna+QgGv7UTgSMjP9QO5\n6Ealc6RjHmEfA3rFsIlmcRd6qQ+Trbh06lKPcOp3ut3142z1c4YrJeDTl+U8\n5IFfiyZU/stJDgotpMDBLg+bHZQbfIy2bQ2AAUxm1ZOKkEOpRk9reO7svb70\nA9XmuY/XvoR0q3/nibsqz6kD3lzCjEKw/gxjlgguxVcWtL/T5UBadR1zdqdU\nPhWqXE5LqmfgGYYpMGXdMYweOXnxw6WNDWwnxlVTTeKNrdaGflCOfswk07je\nlRvkAefeITjtt7kPuBueaPJyaci8yG/muJvT3Hgdu9yuafOSixevQnSgZASF\nSrlUcPWvLBJ/QrNFUubuCfDZjPgrL25mORFgszsi8nPCJNoacQJe2WnTlGtm\n7jdajDhShxR2AWCF1yIYxl5IqqkncZIH8feEeP0UZkGg+mvcsPIcKRJkH9M5\n7bEK\r\n=NDxX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"b8045a537b05fc6fea8a4ea7ec922ad6aeebf8a6","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"10.20.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.5.1","gulp-rename":"^1.4.0","browser-sync":"^2.26.7","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.0.0-mjml-b8045a537b05fc6fea8a4ea7ec922ad6aeebf8a6_1591202717848_0.04253704867384567","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.0":{"name":"resin-emails","version":"2.0.0","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.0.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"be7b930b1b504d979fd95eba1742b033265c9772","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.0.0.tgz","fileCount":93,"integrity":"sha512-+jomM6d0m88sVkLD3vSP2RfpSuC4kVFX+UaF8FrkKocZK1QxrZo56xqSYCffModyqnIRtAbKueBbxMyF+JuZZg==","signatures":[{"sig":"MEUCIEQwTx95aVmMholGw4gM1zBB1rRiwWKrHGwTKijjzuxDAiEA1q5Rtunw9D93la7sw3UuPw8wV8SzGhPZGxiBYkDS9U0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":8148410,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe19VICRA9TVsSAnZWagAAY38P/01/nxxbfjbsaqt3ELjx\nS5tm//qPmtRaVwKVvDQ76auzWLV6WQOUIvptPfEfJYDBlGDoaPK51fAJRWmE\nlhwSZzcR9BFcqCX0wvoXW9o75Bc1vyEDYMRGB+w3BoVfu5VQIFcBaLcJig0P\n6eirHtmej4dkrgCzq0yhfe8pYYlQ87NzRwKO4e0g4OEwTaPOdH4+aD6sgpgF\nQcSimY9d4CsyAykNJT57PxGps8ajsdsNNUFXITZC4VRLk91YaqUk1/cdrpu1\nenr8SC/+zm6J/YRH7hPZ6ZflSeU1zu8lUIVM3PhNJ/jGxFgtZmeJCZD2EfGg\ngtpDBIr2Q+Mxqq7/pPy0fbbe6FOjoP3UhsAcvW5FrLmvRvh1FDaPo0fKS2vB\nuf2r9px2viGBJAXra/o/On4woHyoCBE3ytXvebFAsVGJ0izttXze0xj2Eie2\nx0wXIfzV6FYk5m/EAm80PsEnTFlWj2us9/EHpVB1PqTdkyYn7izU0E+Tu7u1\ndA391y2DUo7WovT1P6dU9VXsfAq7m/jKWlAvHobkG4BAzSHWR9GWnKw0P72o\nN5B/O/DH0DaJnuSabzMBJTq0ujGPfh99egPW89TqN7abO5SVogy2O6QbClxR\niePa9lCdyZTRCId22YdVxt7DUrS3sMdfVR1t66rRFnC6yoZew/poaXrUcu3j\nA0gE\r\n=XCot\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"89fa8aa7a8048ee9303d09b95e3fdd66a34d176e","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"10.20.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.5.1","gulp-rename":"^1.4.0","browser-sync":"^2.26.7","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.0.0_1591203143773_0.4173915351241304","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.1-newsletter-2020-06-de21eaaf5f00ce047ce3d52ce1f7c14e71453434":{"name":"resin-emails","version":"2.0.1-newsletter-2020-06-de21eaaf5f00ce047ce3d52ce1f7c14e71453434","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.0.1-newsletter-2020-06-de21eaaf5f00ce047ce3d52ce1f7c14e71453434","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"0e6ae2190f01c74446ae0f0ba2918633ac8e3b40","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.0.1-newsletter-2020-06-de21eaaf5f00ce047ce3d52ce1f7c14e71453434.tgz","fileCount":100,"integrity":"sha512-YgzKPxoCBl8q4c9mVH424zBq4Qqm5OhBP+5IKDLN5C9YnZTuB1CpXkZTJjyWbxi2DqtQNjLGTk0g66Kqfrc9rA==","signatures":[{"sig":"MEYCIQDgg0CAan/bQr54TO0W3znymyJa3gPD6n9iq3TxIiPAqAIhAP5bpj0qJp6lJ+KQZcDOHqW97n+qdx477b+C/qeE5Sq+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":9027020,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfA4IvCRA9TVsSAnZWagAAXiYP/ioBLgyQWyRMQmDfUfTl\nXI1UURl0c57u7dRYAZX4nujh7XSyBJJFC/OKnA9qmzylWvrPJYbl+e10DBN9\nPYQ8YCxNmrgpYNmr1oOqhTGEldW7gFwXb9LnFPIGkqlSR4hnecyQwzoD61Md\nob9A4jG9k8smmktqofBsjMT6xy70FKllhkNEHcAum3erPyQR5VjXci/ZHpfM\nBtsTj0GNQF6L8Bn1TzNAKysDPpRkM9uy9KTzw0vfToLuv4qRQEq7ajpZuZ97\nuZ/VvI4n0Xe+KkOn960IMHLQtojzGRcGrnFuNZyPjf9XwPAJdncpYgv105Nr\nDPDoviUUfwRER/R848+4ROdE7LnkDFMUhomzhyA3mgbxBLrffbzIWgSDKPli\nysFr2vG26I59RPIGsDv40XiawDvj0ONeQHVmEecrROsGmpYd62lW74hUHQay\nwRCb8L3U5IIH82cDOsSunESc6o2uIkWSKfw09LyCQzvKwI0ivwMNqet/ntsK\n89vrH8xsDI4yhAtliG1vbTvOSzF2HLdNYsLewMSnthBBMDCrJZnpcCFcDXU4\njrDSuS+Yw6Dj8dsbETHbPqFjIwdFMyE2dsK5opmrtTAYRbHmz9lG4eB5aU73\n53hK76Yt55ZLs8dSDf8lw2f4srIaaJZjbVbK27QzSpqdqaZZ1ARUT0duSAGB\nFFnb\r\n=5Yq5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"de21eaaf5f00ce047ce3d52ce1f7c14e71453434","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"10.20.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.5.1","gulp-rename":"^1.4.0","browser-sync":"^2.26.7","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.0.1-newsletter-2020-06-de21eaaf5f00ce047ce3d52ce1f7c14e71453434_1594065455301_0.7493391374001297","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.1":{"name":"resin-emails","version":"2.0.1","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.0.1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"54efa72340c42f262bd11892fd80cb912e944376","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.0.1.tgz","fileCount":100,"integrity":"sha512-btOmB84WTlOmLgj4v1RlxXkaCKaSWkPaLiOgO/FCRYc0uku6WeZIwm1wNIPh0Eg7mV3CKfxaN56Bmm07DpZr/A==","signatures":[{"sig":"MEUCIQCe9JOzGm+Gh1y0ZVumfUoTAP2UxvIwUNQguTAsSfcC7wIgMQOi2AEtUfTnsxhS/5e5aREKBw8a5kdqdibvNL0b4uA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":9026960,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfA4LaCRA9TVsSAnZWagAAvkYP/1geUsrakDDojNIbdeH0\n02nx20XC1NjK3RtP4HXKvp2eiXtezkZcZnC/GAA+82x7dcHAuxU9ECSyASi2\n/Z/hp2kQvcimfRU3V4XUEwh2I//3u1+hlvmU5isN20+yQtgWikoOSaDZA61D\nlSrcY7pdGKD5pWpXk96qBbhFeRZKfvNwAWo8qraZB5O8Fq0Z+FFsQNdGSyL/\n7SG2bv5U7jpQBq4MHX1mEXJGI/iDpOVX6xEur538PGMmo9fQasuFtPAS7Rdt\n1atTG0W/Oad1fL81fmucNPph16f2x0cYUpy4/5np2KthIhtSrhOi6v6YqV++\nHVJM4/IAgsOtbiymGc2IH1licrTIhECf3qK3MlJM8RRYpAu+u5oyT30dorsh\ncZMp4xmLnI+tPyMrTCZGUmdhyG5ze0RB04ZoATMvHwP94qvkWNbjVZpRUUke\nktAzKtyre8+7cuLdbNLxHfXbyNEhojFH7heGlYfdqw5nup296NlJmTL4bRSr\nkD1bvnjbnjQJ5KPFAgLViwz4atK1nnqPMJyFHZpPnsmwZfdg6PCXn5swj4G/\nnKYewHOVWV3BocZO2u+WAgp2/+osQW59F+wuMittE4TzdLC66i7D7XpVLJhI\njWFR/Ab6z2HdqCn3XQCdOu4AS3Jf9TL+CmwFYlEhCDoXdQRvDYBstz0vDOWN\nU5UD\r\n=q/jx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"8d107b91e7d52f045ff9521e1774aa5db8912ed0","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"10.20.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.5.1","gulp-rename":"^1.4.0","browser-sync":"^2.26.7","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.0.1_1594065625642_0.3677454003922853","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.2-newsletter-2020-08-4d0f643f9e92dc93c3659728df58d3306dda0209":{"name":"resin-emails","version":"2.0.2-newsletter-2020-08-4d0f643f9e92dc93c3659728df58d3306dda0209","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.0.2-newsletter-2020-08-4d0f643f9e92dc93c3659728df58d3306dda0209","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"e73b0b048b90166e658a2b295aeeabb86f0b16e9","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.0.2-newsletter-2020-08-4d0f643f9e92dc93c3659728df58d3306dda0209.tgz","fileCount":108,"integrity":"sha512-Z4BVjITEG2Bte6/al0lmvkbAvOxfUql9W1s34h5gND/z83t1HwEUXooUYr5sUY7gAONaWDClk8+ZpSuu3MDOoQ==","signatures":[{"sig":"MEUCIQDjEkR5+NqnwvyUkbG4zKWfpua3z8GiMOuxacnh+FVssQIgdpoRNvfLGX93Mu11eFhc2kj0Lpc1ml29xw1EQ+oF35o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":9925382,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfLWrSCRA9TVsSAnZWagAAkWYQAIl/fg4h3+eI+d44akEh\nn39qdyrLl05CF92eIWm/7OIOzwtQjtR6dGAdV3qB/at9DoEvgvD6yB8QcN7v\nZAm+4dIqOnQK6bIowGEVp3WxqsV4ZULt/adPX+4/2wnTXiWN1qaZohduOZS1\nKHEd+RfjDp3CI7t1CnkHPMB/2qvIPOHRPoOO75ggE5bycmIknom9Ly8MM6iv\nyVjUBq86HdxWI9Ac0A8Pk6QcOSFTmgvK5eUIb8BgbcsCMrLeDAH6KhVznHS4\nxjqyGDE3mQczlPRiPCPrgzo+LlKHAaQscjqxHZK3XDFkrp2mJBQEi4PGMaR9\nOgk8AXrLFgOnj17x+28c0edGE24PkG+yBonRJQ0QwsWkD3Ahzh1JKx0MHfV/\n3hcdL4h51PZKdATdLoi99+A/D0kkPCxzaBwDPjn0VGTThrp+PI1RLVtA+AH6\nmyeXTVTWvQSOt6WYjlKpwHxPsV5Xjj630nmQz+Ah8fthF7D2wOMmZ3Pebx1K\nd98ezcPbQBMxenai4M1EDrxNkLExMAzspgduqNz5miO0+23t4MeLfTasnUQg\nm5dZ72AzrThZGYc1MLNPRPfgQ7L/a6pRXv578opUA3wRlVkLuweg4IhIaNrn\nzz0LLUJcm/bwGljLYkpW5cnYFGkQ99dhOW/dB3DzrgLpDr9APLxPKaZalo8j\nwr+B\r\n=Xj//\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"4d0f643f9e92dc93c3659728df58d3306dda0209","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"10.20.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.5.1","gulp-rename":"^1.4.0","browser-sync":"^2.26.7","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.0.2-newsletter-2020-08-4d0f643f9e92dc93c3659728df58d3306dda0209_1596811986156_0.603028468166763","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.2":{"name":"resin-emails","version":"2.0.2","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.0.2","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"f5c05230d600dae521cc7f9a49160f378aa2acbf","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.0.2.tgz","fileCount":108,"integrity":"sha512-VYoz83xQM75GF172vcWMsea0J6z+GHo1sQKe7RoDiN6nNIN8+MqlwCrpaCsbkcrxeR9GSJd2Vx+79nlmBpkaBA==","signatures":[{"sig":"MEUCICMrZxxPeR4ssmz6hQvfBIfsQQW41hZlql1uakFSG0zxAiEAq8Nbe+anHqdvgUnb2b1Uo8dQ+Cwqdlebb4Hqe1P7mGM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":9925322,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfLWuECRA9TVsSAnZWagAA3z8P/2057bAF96DgUkyn64ZO\nCnUX2eMaglrEBb/ag99bE/GvB2EjScfFlvtNo5jdTawss2GgMaqoUiGAHHT5\n5XDGQeK/Q4g8PYbFF3ZRpFHBVBHrKRZDR8cAZzFgthiAjsUJ7LcLDMHCG2DK\nfwO7YlvNoiV7tQhGZ716FB+J6CS7W8kwN1FX2aG6W8ItiBOgLjH+Y10ur9J6\nbn6SyqT8F56J7SuiZSqWvCwyyRFl0L/7LzLnTadspa8kjSvOsLpaHjjhfkqM\nIaawyIv526u6sxQFDYZzoiaiaUWAo4iPcmucUeXkZNNVhQl9UV3ayb+Zy2O/\nkY2kSmnlVT9HLyWwx7ekuNcOl+lsI+Fmz4xzSbOdPxPIjmsjX1DquHXna8Gp\nDVE6RDlgmH15MXglqotPpU0QGFGM0ACNyEuJFqZb0kLbZl518FIHVvVPRwp/\nYy7BMUHbe8gjQ3YUFX3jtB+lo8PGM/ZLCaPZ813MTsg8yqKOeWOuJijp//gC\nixAkAU8svKw+Lo03pqUZOMPZ5WbueIe3tcai4GLnawJ+RgZzm7m7lW53ldsv\nkLAzoGdE146Msqk8ggDi73VZo/sEAC41DU2HrS5OMYAoENikGdxAnj6dyXZ6\nAnIc+QG+cWuBi9UDUR1n6g+fcPi6WdqBcCRmb7mh9Hf+7H/fKMgDjUo1Vl5L\ngPUK\r\n=UZqs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"1f48c8a6ac7990acb88855a762c327d0c536193b","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"10.20.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.5.1","gulp-rename":"^1.4.0","browser-sync":"^2.26.7","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.0.2_1596812163892_0.5440285744090403","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.3-newsletter-2020-09-a27cde9cf313cb40a0b631722985651019940ef3":{"name":"resin-emails","version":"2.0.3-newsletter-2020-09-a27cde9cf313cb40a0b631722985651019940ef3","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.0.3-newsletter-2020-09-a27cde9cf313cb40a0b631722985651019940ef3","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"dd7a49b98c1440b9ce1ca482347b3953f2812e3c","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.0.3-newsletter-2020-09-a27cde9cf313cb40a0b631722985651019940ef3.tgz","fileCount":117,"integrity":"sha512-oSmrlNp0kd+YYuq2oish/xQjsdSMkj31oXMUqZTYMPGmrqKH5acgfAm8MujKHgwaPU88x6w4NQTe0M3cGcRu+A==","signatures":[{"sig":"MEYCIQDoGny7tgE4RR9jhNMf7dFYmlUPWARqgYoDOyUfwdqlkgIhAI5w9N0hJejOne6lDUBtQpywWbe0tEodUIzwSEuphmoz","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":10358676,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV+RjCRA9TVsSAnZWagAAXKIP/0FpeW3+MPU63uPlNF+W\ngjNCi8SFaR4/rPS5pc0FLCYgZvvfBIu7CHqmiCT5FQs8Geaxe9OeIsmEkwxg\nTOQ0PWnqE3dUdlHk2jo5LzasCAizoFKMSEKTPfv70lb7wigVAmRFDVparQfU\nlQJKwyCnUcRAHMjW2yJ26sFPoxAjprhkicfubUe9O3+E0kLtIZX9UKWDYlLC\nlw5gaO9HMX6032FMOe9BO02bVsHEPlBPPzsbIZnygOmZumaQVSztvUykQ/+0\n2Q7p94X8lj6ENzThFOdvykS/4L/W9pDkax9HA2IJiz6V0f+mNSmOe91qEIk5\nJoS4d+b30JLY0AxZu1vwxhN6Fkqdr0gz1rANoya5mENcdkjb4e/nj2jbwscM\nczeVJF4XMWoWfZOkNlHSEX216kSBo5pFZnr6H2yzWRggTSPmucxewY6rPl4D\nGYHN0wd9Uzq9+5Ifl8CDPS5iHwS2bJ8Mu2hrkX7WJxAsdkC+oBYjKElILHos\n4D2S7SjQMAHAuntd+A76nhuTK/OBF1AjRKjOa+OCpUBNoGlD+DISReRGYciQ\n2XhC/6i7LUWZc/EJA1nxnu7A3fLDT1D3/n8n5F8PGY0QYwliWuucvq/yTk7y\n301p2GbG1SH7vttOhQ/1Pm5sCdC/Cdl3KQ8OPe6/uLjdMPfP133V7udpJTPC\naDK1\r\n=B4L9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"a27cde9cf313cb40a0b631722985651019940ef3","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"10.20.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.5.1","gulp-rename":"^1.4.0","browser-sync":"^2.26.7","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.0.3-newsletter-2020-09-a27cde9cf313cb40a0b631722985651019940ef3_1599595618516_0.724210563875471","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.3":{"name":"resin-emails","version":"2.0.3","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.0.3","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"fd45f2bd17c170153ca2e9a3623bfcd3155720ac","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.0.3.tgz","fileCount":117,"integrity":"sha512-E7UMp04CxhhOEH5E/b5JugWKBma9Oo00VVU7f8GnuOzflagjjpxMaTAeadXV4nwe7ljGAqSSP4yxgultwdw9wQ==","signatures":[{"sig":"MEUCIDtfeaQtDN7Wq7CL+w/KHsDzEeXOJZl4Iaau8W6r7KhNAiEAkPq0e8vEHu3k8GYLVFEyqNMEKXqVNgLu7/19yDAn4Nk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":10358616,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV+UGCRA9TVsSAnZWagAA8asQAJKCyf2gT9JJebaEVRUH\nZbclGKQgvFgVaFnrCeCuFJ/BV6m04JxhRi//d4hGiNo8anrCNP3YvDxxmvc4\nauZQrCzBAD/KC9x2MJW3tcGDwxjg90fD/WUjFuvvXCNlP60DFHz1MqEPY2Bv\nGCDdAMqxeNrLOOAzhCj1wcDm83Pd54dp8VFePLsgRvydFc7dDO6BBEMYuHwN\nMWSsf6SQ1gBNilVLAoL5Aa0AUcbwmTxy7oCWGAPYchjeUH0FUAEBBEJ/tlqR\nNhv150rRlntIRD0T8wEh2IfGSjOSmLc0WCffwkb+fYf0ZQdjtH0SGf4e6TPq\njbDIJMnAgROERVowPtjPBC41fVhNJ1NZCQbk9RtG8wXEk+wgXuWD6d4AeThn\nuCUulWlurD1fxt6HjTUc74nXCf6MoPacNejeDm1+Tq8Yk5iQdEt/qQrXjJHv\nZNuppABOBDbEYtRuveBbkbQuYEcX7IfW/BxGLtiQAPFhDM15IerHGtz6rg6+\nHcHA6iSTbmllLTT8/TnLC2v3xoqWu52gSlWtTA4UYebwPy7sOvyjtqYx+VZ3\nWteBxCAEzfoLFSrEjAUQN99hYEpDgjejVx+Kn9OFzH8eZ+Kan+5jC3i5EBHG\nCkUgimm69IV4NUyxp8s/W5/Jr9fsBiDfU6OkRRBI2d5+rJTE4sYkYs2TqjAG\nHmDu\r\n=A9n5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"50548e892a3efe377580e90d46d741cd163749e3","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"10.20.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.5.1","gulp-rename":"^1.4.0","browser-sync":"^2.26.7","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.0.3_1599595781881_0.4214952487942303","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.4-newsletter-2020-09-bf7fe47a145e8278c74f6390f82807d6f5f8eed2":{"name":"resin-emails","version":"2.0.4-newsletter-2020-09-bf7fe47a145e8278c74f6390f82807d6f5f8eed2","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.0.4-newsletter-2020-09-bf7fe47a145e8278c74f6390f82807d6f5f8eed2","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"1653f457f1c3dc2e7d720499623545f7ab24b34a","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.0.4-newsletter-2020-09-bf7fe47a145e8278c74f6390f82807d6f5f8eed2.tgz","fileCount":126,"integrity":"sha512-urHT4n21Tp5xtCdRkcZ9DZCKQuQ1u/kdcp1UD2BXOuAdpatMOShIRv+x6IdZnp6nDBlaBziE7v4YEcSIOKQv1Q==","signatures":[{"sig":"MEQCIBqDey8JVrW+9Ov35CTEOVagd4Dzv3Ehw3TBCHN9GW9jAiARveBLEIh/qyFW8RrP2WRM930zNVcBxcR5Yt2uOHdgJA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":11082318,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfquZpCRA9TVsSAnZWagAAswUQAKBDCcQODv0ph8qOQ54+\ndhMPOSM2wYdW5URlZmfNwS7L485yewLg7qeFgcjn8r1LVsp5CVswHbUCJ6Zv\nfqBiRRk0Xz2vNccYKFZDPgU+hSbyZQ8eogg5pzY0rV1V2rjjTBrXC37sWl15\nT3Vy5KIYTTWJugOsB2lS5F0aE1oEPI6cu5MP1tL4d2VrrD1OIWM8N/xdnbRv\nQStuiLUvN4aqrLUzL6+wNlU0NI/1XSe+2SW+xxrmxoqGIg/x5GAgrZ+wZk7X\nn4kanh6pDlcC7Jjo2Ac3HVUNAYKYPLvzqWLzSc0fO9TbIZm7cDoIvNZ7LbGg\nqKf+J3DMwzzCgSX9eMRW630Tu8NdADZOa0bLhAOWTYwWT/iGYM3Iu7gw7OUp\nBOeMSFsaRUmL1GLXVEb8UJ5AHplBrHSMNoo4dT7DQA2JisK3DY8RW8+LEPYP\nJnlRbNXsndPxoJGnVzvQfcuUuZabdU98D6wjqzHVW6q2EktQn1xOGk/ZSE/n\n4SVhl5xwrai4v6Sic3TFrfY3W2O0xIPP5h9ARFBTNIIXwhmvlNGYxETixjuV\nmqwV9hojpkocHkdX+79A0hcS+aNj7w4AEC9PjeXDfMy/WlLLcFAc/s3DjbWO\naSGDdkemwg/HO3QJ04P/n+zyLOTHL2dGlX94P3uDGxXCZXlg9NSgZdxyWS4h\nQQWi\r\n=1/nA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"bf7fe47a145e8278c74f6390f82807d6f5f8eed2","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.5.1","gulp-rename":"^1.4.0","browser-sync":"^2.26.7","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.0.4-newsletter-2020-09-bf7fe47a145e8278c74f6390f82807d6f5f8eed2_1605035624447_0.8982029819170805","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.4":{"name":"resin-emails","version":"2.0.4","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.0.4","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"ef0dd3008d1d2806af2e7c17d4be005623078f46","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.0.4.tgz","fileCount":126,"integrity":"sha512-EnSuuWF1SHeOp24tGWvy2HqFCmcs8LA9DdVZk1UK9O4DjmPEJ57KYv7sjFpNjW/38W8kzUfpQ7/HknvseSoYuw==","signatures":[{"sig":"MEUCIAaHF8s5RNLyurj5LJPWr0hTW+YG3cMO4MofGmrxn1IVAiEAq6KLCxEHDlOXUZRy7W/Z6VfwWZzYplaTmvSlDrGLS18=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":11082258,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqueMCRA9TVsSAnZWagAAPNgP/133g0IFRPN/nQsrI80f\nY89UyBfTTLhLe5JToJtbsl2V4BgwSrkVmxh8hWCeS/a2o44VvGoO5N90h4ar\n9lZE759rCTzqmvfLa0Mu14ps5l2fIDdtNBZmdSqs2AwwS2wKEvgushhM3vmj\n/YTVa4g4zYiX/AvVAWkdrXPNzCL+FblHQmUU9Qjtl/RgTWanZKpXGK3On6Va\nhtkIeEmCVAdDeTCcyNZv3wvP4jnfTDXPgeDl6kuXCCBRTiM6C3uF0DbNnIj5\nF9e7YHYGQG09EGLtP4tgIzV/gP/JskfnaHHxJdlKB7yoHY2hIQef+6v7WSxJ\n58PLdqTu3+qeEBpXNqCRWlyu+f8Kh8klptPCxlWuqs4uptB8uBMtriD9aTHJ\n2fUKiEyrVYTPva8Sy6FKbnu607Y9a0oHd+v8DbZ5Y1eXkwUovTBHOtheyH3U\nGUK7n8NfOUIMbICDOujPtJ8RXGOKNMbgTA8VksXgvc8+L8riRPXRxGzhEZEk\nHT6SqLlKM/k4PBvsJCeyCRzAWOJNyE+SH2JbFC9S5dhnSJpF5JKrQfRet56k\n3C6zAgZGk30Z1YEyKfIu1D9WjlLTk+fC8T/+LI9qoCTqG870eJ+hNCD3qv5A\nlZtOol/OScqDFJyWlRr6pHSg+3d8gdvkextMfNp7Lzs0FogP+IA+vU6P1vCL\nBtqu\r\n=d5JR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"bd1a9c1b97f7082d32d58b1f29b3882c5041510d","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.8","description":"balena.io email generator.","directories":{},"_nodeVersion":"10.20.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.5.1","gulp-rename":"^1.4.0","browser-sync":"^2.26.7","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.0.4_1605035915425_0.5328781307938386","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.5-newsletter-2020-11-9a3067add26c4f7440e3475aa9bbce856864a544":{"name":"resin-emails","version":"2.0.5-newsletter-2020-11-9a3067add26c4f7440e3475aa9bbce856864a544","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.0.5-newsletter-2020-11-9a3067add26c4f7440e3475aa9bbce856864a544","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"1e8f9aae06aa696ce3f01128a50c2dcd44a8d2f2","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.0.5-newsletter-2020-11-9a3067add26c4f7440e3475aa9bbce856864a544.tgz","fileCount":133,"integrity":"sha512-uKMOrCu6UKjZs5zKjS2ZK3Ed/KWrzYnzL+KLCybKca382T57FyHAbgspEJOcnvFDrwZSYqHAEuQreIA5luxwxA==","signatures":[{"sig":"MEUCIEch1H14KieDa4LSYt3EGDAqglXAGxJcMNSE87dIUeuhAiEAz88Ds+99t1YyPRbSMMCH78CtiUpJJL6TxxWN6gweyes=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13241526,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrTMyCRA9TVsSAnZWagAAUI8P/iGjWzkGSSSz8iqri9IS\nc1W6AONm8q9SWFk+s21151dRsjmJcoWIpaWmoEC0Ye00mXl9C/Q+9NOJdoVa\nRFVCyRktSXMOutCmSXDaQ1HYRE8hm4+QQPdkgCLqNPmFurinDg3zzf8z/R3e\n2t+owah3cnCW1HF4uHcxjgpF/vdXhdfE4y0ovgIt5hKW4zgi9CUzaY+hPmZm\n8WYmzLo2ms55fFeZQdQuMoo8pHPAd2hrs1bwxMsQCufDXL9KxBSdBrKKL0u/\n7wWHvGZSnlyQZ3POB3lOG5SP8294I8T6rzzslvRqJ9dJJyV3RYZ/t6rprWk/\nmfAFrtC3FPbDYIm3WsUKLxFwCbEKntYeW4/W9tCBHkLpX3z8hozuoOUKur6Y\nyAKupWfm541rX8vuGX/D4QDcqCtYYOfS/KX65gXwaG5Ig6szzUKqmInF0nL4\nC4F4h1dmak2bo1IOezBndvvtFB0adXWgENFAbMxb1mIC8TSAGEiaq8WW9Ej7\nNg/8Dud13jHuSbEnzDcZMJZaGIrrr9g8SeabUKHvHrtMSYNJP+n/dOxoDLgc\n4Nr4l+vQA7ZSMydaWwKLoZ+6dkg32xNelnhI/K00uz0QfaPkbriUCBy3cnn7\nsuuOqj2sDOThh/vwdCBh2AX/0EJlAS/YQVfRembp+BrRPE5cMBFv96L01mZB\nYV0n\r\n=jrFC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"9a3067add26c4f7440e3475aa9bbce856864a544","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.5.1","gulp-rename":"^1.4.0","browser-sync":"^2.26.7","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.0.5-newsletter-2020-11-9a3067add26c4f7440e3475aa9bbce856864a544_1605186353595_0.2605257303642816","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.0.5":{"name":"resin-emails","version":"2.0.5","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.0.5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"44770737376cea32242b8295b80b8b7725c7958d","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.0.5.tgz","fileCount":133,"integrity":"sha512-hos0eQuaBQN0678If3/NcgiXnjwtdmim666hyh6j+zxfTBzcIaHc9TC5lsPhoI8kZq7e1iJeXu2zOn9EDiu8SA==","signatures":[{"sig":"MEQCIHbegLKZvxn+UDj1qGPp0wcuFQ1BP9E74Bk2V7tWuNC4AiB+Cf3a9Zx70nIZVjBb7guBbCTnN31vYQQQAwpXx0UagA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13241466,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrTPxCRA9TVsSAnZWagAAzlQP/RgBSjlRh2bWgpRmeY7a\npe5b2xv59FWNfsHv+vFRTh4ppQVv94Rrfet2psv4/oIV43FFajSO5w+ejTY1\n3inHDKUTEV5/u5zOKza/97X1QvnpXPy724oiCyjI/SnUjM2W6LHx0W52QCHk\nrsGjRZHltu55n1Kl13fo+gl6cfTe2qpwjIYQw9/q/fsF0hfWUSXAP88mnZia\n4EBvmi+cI73LwSrdf1Q1/LJH6UMIcgsJG8+6Rgwe/WD3N40/ZONZ1MJ8qMnc\neDgeqfwJbrS9F20PXkKBaf8eOgC2XU+8GwGl/Einw8QG47f/him0aWEWWRH0\nxKQ0D6HaKlPF0WRhLVXuyD9+zUbh4r3ECatb7vy/+K3wHxc61gafTPdt1epg\nzD4TP+w9JQ+jOSCqiM+vEQ5wBTBFbWfeHfzkchqRQ+Yqloyy2m3JmeIId//I\nuCajZ36RzNECUNLx9jOK3eepNag+Ci4uLkI0HbOyvBUf/BADkWFK5Qm8ppNZ\n0NK19yfwEiaepax3PYbg+Ec3kDwh7ZUPncgr6V3iEBDHpJjt6E+GKietVs6T\n7SHYbkW/UGmaSB10FzGlCc2skxiTawGCzlVjFDLuy/0SIskPw11LUnNOPeyT\nCJjXoLTKQ6x5xTlR+G3BwQZmK+5PLCKCusiIjhy64d5II55ZwgOBB6lt9OPA\navmh\r\n=4SP/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"68a7cd557e814e2248e6ebb018a45170fb2e5a27","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.8","description":"balena.io email generator.","directories":{},"_nodeVersion":"10.20.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.5.1","gulp-rename":"^1.4.0","browser-sync":"^2.26.7","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.0.5_1605186544977_0.6748365394868001","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.0-adding-dec-2020-newsletter-248b8b76033544b8f319ec74a0ffa21b6f32f3c4":{"name":"resin-emails","version":"2.1.0-adding-dec-2020-newsletter-248b8b76033544b8f319ec74a0ffa21b6f32f3c4","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.1.0-adding-dec-2020-newsletter-248b8b76033544b8f319ec74a0ffa21b6f32f3c4","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"d244f37565ebac7595b82a4b07ee3b7b1560cbc8","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.1.0-adding-dec-2020-newsletter-248b8b76033544b8f319ec74a0ffa21b6f32f3c4.tgz","fileCount":141,"integrity":"sha512-xKZXcg+CI2W91XoIeBi8Jjj653bupb3hLU+Crm1Oa017UIzaBO/kyHC5JvA9MzUmeL4bmVjHw4ROz5kAcahybA==","signatures":[{"sig":"MEYCIQDF6m+MD5dKK0NG1IFv+Jd8VZmfHXHJSZJIsUev3/fazAIhAJ6tCZTynJw1u1e4OTKRqppKVQUUTVDrMVfMeANnXjVK","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13919154,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0r58CRA9TVsSAnZWagAAM/oP/jLsFXZ6W6fXR5Ut+xxK\n24cxQRgrBbel60swQvF14dwyMn4LHGz3KEAEYI3BfsQvDpXW5TiQ3SLIw5yX\nye92v1MIiKzVcrfXlIIKV2VEQjUl7DtAwgv5Io+o4oGGKkL/JrVPH9zu3sZm\nfCLKGc6JLcyKyuLdvkd6NaqWSrWBQOYXvLuQHWljbC5KcS3L2o9aFyaSLTNY\nVlxOvnXgXFGD0dZ4RcdHfQEjsXbn8Z/k4lFEPzADa2/aAQ5JX7IVPnwOV4Ab\nGqgZSPPwODmEWSO8LIn/UJmuP+bQOBfyuXu90CdbrLU/rpIoMS0ZmQXNRh2O\ne4lgmuJf3R8lLVlItIxWF1uzCglAPQ/plQuYBQUhLM2uPIZYEN2As4+xI9xq\nCuCimN2bAK46Kv9KZO/TxhbqUh24Obgjd6gBp6WmgBBuS6vJbNBCMt5ohsxs\nXX4DvUH2+7ygha5KJL+zOq4h58QJDjRrVc4dRIxkdliGi//3mKIKs8+DapGQ\nwaVbuP2rt2k62PC4CKvVyGtgfc7Ux9HpAGuYXZZAnWN7C5+Oud51fKjXwr+T\nbYU/6aaRI0XO8Sz8VR+zoa7OX/8nwyLZBFd8U5WXEENLh+jWV7WZWs6/JBlm\n3vcSPc3Iud1LUbF+OtzfYEBe/koPC5Bml316MyqwNJhUtSczin7E4kPM5NEf\nmD1J\r\n=+TLa\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"248b8b76033544b8f319ec74a0ffa21b6f32f3c4","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.5.1","gulp-rename":"^1.4.0","browser-sync":"^2.26.7","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.1.0-adding-dec-2020-newsletter-248b8b76033544b8f319ec74a0ffa21b6f32f3c4_1607646843814_0.4886835744499669","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.1.0":{"name":"resin-emails","version":"2.1.0","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.1.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"8c9246a047601a46b16482f7b78d4be76353fd53","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.1.0.tgz","fileCount":141,"integrity":"sha512-ozj7rJRCVX3DaQJ4+5UImiTSmh7LJtKPOd4CrlV/9RIIzVix6japSBAwrcJEKu0FFY7UdQqKH8HpvXfGAeChtw==","signatures":[{"sig":"MEUCIHoMepqqfxAGU/QEFhTR6Zbjp/0Tl7fzWXft+phK0/M/AiEA+Muj4ngit6EAfXaNJm3eWPg0GWY4FccMCK4ERLpe+vI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13919086,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0r9qCRA9TVsSAnZWagAAUkYP/2/HMO4gfu/Oeh2rCk4k\nxq33jbm0gTdU3x9jOb3+908ifZQmHjq6EqGfryMDVCxOcRgOX8nBTcwbERUN\n0h9va01V9cdj29fYZ4iHqg3GfrCODxIKPrFaiVzj7nIMb0FGbtzajPkT62zY\ntmhr27+XJqX1VQVwDcCT7qU9yVXWnrh4/siFImW1Ms8eBGxn8/5XouClyh9K\nmTQo3etyErbKNOc69uiI0C52p0Wg1EthmvJR8OyHm5PHZxiCa7U3OZqlPfwv\nhmZSmffN+CrBHgoKE9MYGQtmjQk5kXjO/eibFyDw/K2zR52pzsdBJRFR4EiR\nAi1oxYGfIzFQzLPRHWW4ip/odZ9hUJSrQc7eaHMiS7D2wblXu8mV7g596D6r\n2QhuBLIzJsV5AOF7SKve/83a6EAZ0/Og7fE8YEBvJUb9lX6yEh6NMLNKEnWy\nohUrIZw3ynCqXbQY8zORhJa+fWOtpMCCkqBdAIqlYse/dKzRIjeRoLlGevPs\n/Y1INhhWIrzxKUvHFG0Jx10rhUQYjrLSnCZENBdAY3xeK29+QPOajC+qbrV0\nKNYDWnEhHHwqeRIYH1ydyxhjC04BesrMwT/oaZWXVneu9837XTh3gMQRnZRy\n5E2ZxxfGFBhM1r2ecYeWbV7915hejTe3M+Bp3CGiwCKPO8xZMtWJbjEizlW7\nW3sJ\r\n=uZG0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"2d5a85cb0ac7d5af7f689afe34fed60f2fae9aa7","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.5.1","gulp-rename":"^1.4.0","browser-sync":"^2.26.7","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.1.0_1607647081565_0.9981550773876815","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.0-add-jan-2021-newsletter-433346ffa6527021843030fa6e426d31f4ba9ff9":{"name":"resin-emails","version":"2.2.0-add-jan-2021-newsletter-433346ffa6527021843030fa6e426d31f4ba9ff9","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.2.0-add-jan-2021-newsletter-433346ffa6527021843030fa6e426d31f4ba9ff9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"fda68ff049c87399c531ad388868e3d61eae5137","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.2.0-add-jan-2021-newsletter-433346ffa6527021843030fa6e426d31f4ba9ff9.tgz","fileCount":150,"integrity":"sha512-CYGC7hQrXRB4xzL2DCOC5V5zJnwmaKkdXm8X3M4RTdfg2WSFQgCl0l2jVeOWe24p0ZpbPA4dcOK0+CxcjVHqAQ==","signatures":[{"sig":"MEUCIQCpAVjShNxMDyBZP3lnSIOGiVejaFz9nA+BgBKCHP9bmwIgREtDM+9g5V0t2RIMRp1H/qQMgNyF+WAsfb133CbxISQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":15039982,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+M6zCRA9TVsSAnZWagAA7LgQAI9tce8BbQdjUJPXO9Re\nuRxClRjkYZ47K7yceWfz0nv5iYcScvzjZywdkGIXI1YGVLPpnsGLEyXp9M1T\nXJGAYHpqq08WxYE4vsEWrKbfS4TAyD/X7dV+wmbRWyd79P6Gyyk0QSIm4jpP\noVYOi5jju6gieO3GuzYMQdAe9J20ZJbdpzsEZ3aN3UVPlStClDqocMCdoheS\nNll9D+pb/1qhkPRWNpY2u6psf3MUKYb/bvkte9W76EEJmImD/nNBnhGYAw0k\ncjd9ydVoV9lQ4bYC18825cYXfJf8Ips37AlTGyV2BAqFh+Z2ZuH7vjCTESYl\nb+lBT47ucU9bwbSaPNoiZaSsmany6pe4w7M17i4pzij+0APA7lC+iB6pLLde\nz58T9b+2P4OfT83X8XFRkWvurwBZw+rIX5iZKMnvfbxN1RKl3hsJoDk31KAZ\nkoUvv5HOrvzbMyBegHDecUxUbttmUx23HixmwO3tRLEJ9g+01Nwi4shqh7XX\nVMEEvj5vciYB9ohuru6fCHEmQJa7WCzXaTmUTewWyVxd+nzHCq7KqJgumd3u\nE+o50DY+R2ZpSLAanSp8NxyE6PhLaTTlyoiO1piCFb3TzrLkIZcjkK+rWx2Y\n7vnvLUaob1VLMvwX5ONkQsqeyF8+6LiF7BCN1hHXM8LEgL6Z1WCV6I4O4ulr\n30xZ\r\n=zhel\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"433346ffa6527021843030fa6e426d31f4ba9ff9","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.2.0-add-jan-2021-newsletter-433346ffa6527021843030fa6e426d31f4ba9ff9_1610141362996_0.9080568139457443","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.2.0":{"name":"resin-emails","version":"2.2.0","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.2.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"0bf5385a2051f130ac20af667bb78e76b0a86357","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.2.0.tgz","fileCount":150,"integrity":"sha512-x8D1OCti1mbiX2GkoOyIdvFnA0OlkYam6nFZtkaoWNXP/m1+wkzzIe8jvXS2d1WaDSgxYt9tY7xvtreR0D9J7A==","signatures":[{"sig":"MEQCIA7FTwrQiEDVe8g2JOIJAufR6iD57Gra3PqZL5PQL62YAiB0dHdEUkpgrb+S7BpnkW2LhMkoOc58UI4pB4LEcMvuzQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":15039917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+M+CCRA9TVsSAnZWagAAITQQAKIi3Fsch3HSntuESeSP\n7M2hjxpsQ1HxoTx3ij97zrzOcjwKhIYV/Qimsyr/K3TMy8RjIuC5bsK0DGvj\nfwU++p1G0w+6t+Rb5rgyd7Bj4E8tlrRmaB+AZyPef/PQkmtiFmvLD6u0QYhU\nwZxEZb+BPoKuTIcVgN0nJOPK3Ht5OgK/5f3xHrM+5B9JEWT8UNqvgANgh78l\npD73CDa/14tPkM9LhJELzLMXeMIFZ2t6egNaEKpoQXhAg9qbfHIm8j18F2Zm\n3SRrynHpUTjCGIu5l7Z5c0YzHZH7blHVxRNL0F+OPQL7odpM+oofd+AKZNgM\nEL8+JpEGI7LzH2cJ1iY8qCwVzoEdZg7/HzI3ZP/+1ssA8IN0y4QyZIbKO3fr\nlulmyGTplIX5tpM/wutpfOxiblA5+yGS84i5PQpdDr5t0Op+GTCJp/nLiMab\nDkRxRXR8Bz7UC1aMquk/PCptzV4wvC+cxUWUfZXxxtLB6gKkm3B2qzqFqxh/\na9vvXj8HEtfXfnq5sOm4Dz2npgS0eQLLZbMU85DUa+i1EJYO//kbL3OtILLj\nQQdDJhZY2j20nX5vLmjPFSNM85/1NRGeTeWQdPhA62TlxTNLefTWMj14kyyf\nKweujhPMYySEGwcOuTrGuqAbsKplKPQKFHGuPzciH+mBTtAN5MvG0Z5SBigJ\nwwT7\r\n=E9k6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"ba224d671ec741fff76fb3829a11d901e578aab7","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.2.0_1610141569391_0.9287309982023588","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.3.0-add-hub-3ab55bf9d9cc908af4a6a6f7899835768cde25a2":{"name":"resin-emails","version":"2.3.0-add-hub-3ab55bf9d9cc908af4a6a6f7899835768cde25a2","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.3.0-add-hub-3ab55bf9d9cc908af4a6a6f7899835768cde25a2","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"1569521f4e9532353f41c3dd543952d3e025d52f","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.3.0-add-hub-3ab55bf9d9cc908af4a6a6f7899835768cde25a2.tgz","fileCount":162,"integrity":"sha512-t4jRQ/irP6XmZG3/VK7riPbXeKJh6yqIncbAhMPtxfYnmaOoUn2eev6QYk/DlZSmXgZUZtA1Xf0jUk0s2dzURA==","signatures":[{"sig":"MEQCIA21KVr4cVU+5/hwk5T7d3j4UXPHiKwJjOPqhHTRMb/1AiB46rdv17ts02EsezG33sjkujBZ3d0/DSxcZI7IbpuOLQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":16221242,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIW4QCRA9TVsSAnZWagAAxLoP/AtQLFtm22iumzJXTRSh\nK3AaxrhB94ne4uTdPO17f+xZzarQCgifmq9g3YFDwx/n2j5Wm+VotZ94A8FE\nb8lIF0zuZiD5udjvtk0PrMsb7ASQawlW1meShcyMM40ddA5dPs97uCrpkQoL\nnNzWu+VOT1yVrLZli08Pxr0WohNfNZpLj+QBJak0Q+sh6OQaWr/s3Ip3Bxth\nDgwFlu0RiSV07yBOh6rvi0V9wNv5e7xCivPtWCxSIylMqUNc3AmJJnN5lcO/\nAc61v6KC4yw1V6sZ0J4dWMO6g9qCsST3ZhZ1M43HYLIJRWV43xhauejokMan\ndaR7JlSb1js6OD4r0mbsEnen8UXLpbeESH0ivB2H3xPB21MRmCZdwR1wP5RR\nQNuiURENsodZmasBNJLbw2Wv18Sr4DYGC4nQq83yqc6dB56eSUD7gRNNfAK4\nzDNIUgBz6RtBY+AB1GTW9L4bsIQS2yXhIWqylM4BmuSJChHLAgwrsdzmqqWt\nf9mQH3pzdL6Eg54rTNbEIp//KjR6Cp0fsTAKpoz64ambr8W20a9ZWFXtvAcU\neSMzVvF3LG0O07Vpz1RTPOb4iqmVhDVVR6bx0GLf0GzKWPG9CuBH+ytNb4tc\nFTzM8B2KftHdBGCgArTNN29OrFc7+VOOfrTLVQ6WpXLtWBL1VNBBSCG47m6T\ncHNp\r\n=8hJh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"3ab55bf9d9cc908af4a6a6f7899835768cde25a2","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.3.0-add-hub-3ab55bf9d9cc908af4a6a6f7899835768cde25a2_1612803599613_0.390840832401969","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.3.0":{"name":"resin-emails","version":"2.3.0","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.3.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"6a6fff442fb4626a5caea391ee1ec904647668f5","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.3.0.tgz","fileCount":162,"integrity":"sha512-5p2dyoKNASFp7O/8ZEhJsaYvtqc+ckc8C2xkABPl2/QLcqTY4ObMUp/pPHRKwdI6MM1TOtIZyBoLYW/duPSgYQ==","signatures":[{"sig":"MEUCIQCf5x8nCrRmvq6kapwKrRQZUOcdsCnnbK6WT7zHL+vgPAIgORARG5pjg1lAFbEUQSaP4p/7BcK+h/pU3YI/1dxfhn4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":16221193,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIXESCRA9TVsSAnZWagAAvpkP/A4JTSBbXcoXLSuQ+cgK\n9sStohJwHl8Kr11GBPV/vkipaz0U5vco6IJ+ycJg5Scp9tflvh8TJ7fH4fiZ\nfR5BihITnuPU15AjZYQrzD8YA01iOhNlD9BsnLbMjuqRW5PL21YpTXLvhMGZ\nmZBVuuglRsqpSOUfIHQSr2sgC+98aahWz3JuAJflXSKU8Cshkwt6TsTSDZas\nskcDMCPP9fpYOtxUpbVPnk5vrq8v+z0JASn29ZbmRB0A3Urxt1w0IzjaPUwP\ndxEAghWM3oIDNyxUZaNZ2ed06qTdjNVyqvG1cqV57cOoDMvmP+IMnu4u7WnV\nxUwifP3xppmXRu5s+ZDoVHbBbKxBvxE0y1rB/PjNncorBmXAJWL8nDzzefAs\n2f0siPpz387CMRDAOT/WmzBhu27hm6XiD60OeJiV002QTo4S1AVqtjjFNfuj\niutZzI1FpMbqo8Nry5f/MQ7IhrvF+feak+foNv2xqbXgGyjaAnRuIK+DDumE\nIqlntTr50H2lKVxxuD8m6fYsv3qTBEhhfUIegaXS0yI8svn+a8PcbCIAssoA\nHJN2pKDn8Pf7P/aSmv49gNOma29oTusGTsLBxIqcuU9yehwMUQMJJB2YTYC/\nMHp8oolpwTnltxdHsQUZB/iboVFhE69pOJpP4afcJfzLKoy9CwCPuSkKBL0f\n1zyZ\r\n=0ptp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"32fc44deed60d4484b288aed6146529dbae68df4","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.3.0_1612804369670_0.35166657899188714","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.3.0-february-2021-c4f777d27b5afe355d2a4d9d938bb671f383107c":{"name":"resin-emails","version":"2.3.0-february-2021-c4f777d27b5afe355d2a4d9d938bb671f383107c","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.3.0-february-2021-c4f777d27b5afe355d2a4d9d938bb671f383107c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"04c734779482ec9aeab6e9541c17577fda3b0a11","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.3.0-february-2021-c4f777d27b5afe355d2a4d9d938bb671f383107c.tgz","fileCount":161,"integrity":"sha512-QfosIu1P7yaWpjvU5tn1o2g71KfjmvJKVS34MCnzHGHUaRuJXKMhe4roGHVxKU7Ey82khfToh7M/dNDEJD12mw==","signatures":[{"sig":"MEUCIQDT3fX6wLqCW0dqGc+W8/rsIcn5cFWy0pW2LuX+omtF/AIgFLt66YWTg5tQlztegl3kUEznSE+z7R5lMvZ+XfNm6vw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":15826832,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIbkWCRA9TVsSAnZWagAAiGEQAIN0iyttIo3/xidw1r6W\nm/Anp1/vQJ8gxuXeb4M1/UjEaheV9ptkoBulzb8zedInchTs5ybqiY2NEBvQ\nZM3T022ZkcpMuM9+xgXwDJYyWY3Y7Bx690MoovheMH0Z7SuWjWUKd0OpnLBx\n1W00bT4/eCs+KtvUQozK4TTT9WU5GyIHtCdOkrbFPc6TN7qSTClVeu9g7Xnh\nrgkGBxZ7dogED466QIMIyMUrWmzjUfVDyla+bjqOV0cj0MuksG66QjkZOx8/\n6JOJGi6x97iVoO+7VF2K7XFVRgkj7UkeAesSwceOKUQionfQLsXMWFz+c7jG\nCV1lT0VtDkXS+W4e0NRSYLNXs3qqJtTPlJFfSmx4j5E2RB/5qlBRstquEyhr\nc8hTA9EqVgJtcGKL2yDcL6AWZnKFcBERVAxxoTWMcjWzAA4GBWLK9yEXJ9d+\nkzOQ0mmL75fjuBbtfrSQf3rAiQis9nPXobiit+XEQRsSjwiXHcCWwZT2IdRw\nt5WGMN9tkN8phPCMYRtttP1ysDLjanO6iEkZck3HnmnYVHjXY7xipc7E2sNM\ndzO5/ljl448+2KvR6mYHOdTm0vypTIM6zmZ7+2axRcgLQcp+h1X5rs/xGdMZ\nfYCm+hZKBEQJipmFfDNxTCBdJb+p4zeV0sMffTwWuox9vdYkvP4Gyb5FLI+N\ngV/7\r\n=fEeM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"c4f777d27b5afe355d2a4d9d938bb671f383107c","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.3.0-february-2021-c4f777d27b5afe355d2a4d9d938bb671f383107c_1612822805830_0.44275845300011984","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.4.0-february-2021-01ad7298bd7d7591f7be7a033d1082cc701e27f7":{"name":"resin-emails","version":"2.4.0-february-2021-01ad7298bd7d7591f7be7a033d1082cc701e27f7","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.4.0-february-2021-01ad7298bd7d7591f7be7a033d1082cc701e27f7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"b1ddcb9639579ae8469aa7806cbc8f8830df69bc","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.4.0-february-2021-01ad7298bd7d7591f7be7a033d1082cc701e27f7.tgz","fileCount":161,"integrity":"sha512-oFu4NONNgpu1jZPOd04McnHD3JK/RFNwrv45qQ2qfkV5x+5ltD4VvpdIGsveeQMBlo/nhhcwB4ja6GM30yQQPw==","signatures":[{"sig":"MEQCIGFynFm329qz1lMaRK1Q5a9zoFcfJO1OuXC3A25ieqh1AiBdDE1ThDVferFAVz/MvrLQCsLuRG7shIACxffJWme9xQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":15826859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIgGBCRA9TVsSAnZWagAA+dMP/1nyVGtUfi3DrP7QCTmf\n//NPc44q1xQnac1NBtDnARlnDk3UtjUx3eIP6R85GBHc8V3Dv5D40h+RdqD9\nhTH61hfL5FLbBesk9r/crB4BYA7Y2LlKS7/WZ15zn3H+pDhxDTtAb8BSDfps\naNAQtqlRNAS0X3QFXP35uQ1GXnfJDXpAVDXkTHBv+c0xABVfnBG1gLK8XQE9\n5kVF9GRr629neDs1EG5ULYJGZn6J+bdNcQgiUmGd+G62m4eqgcMraxIrUwY/\n/nIZMiQafHZyzQHrzuycdLc+ms3ut9W0lUccBg6vo7r2ks53P1ftZRCAWywY\n9hSH3BZTBy/rlU9gTb9vEw+dRQQEXi7V1DvUJ0d06ZkrSeXHOqe5yB5L+RTn\nAqnfVDFtsOvfeU+Zi3Nj8y7XyvlDQKqNrO8aWukDDhiEubl8s+Lo70iX52Pd\nTkGHXP+qhQfvZK5zYjJkKDoZsG9CZYgEQPzhd4T9l1dthWFozwJUBT4aVIbx\nqpIOgP+h3vluEhTZJtuVE78qYwciYugRT2sN7hhGe0k14a+TrF0abioQfhjd\ntfm8UbjeUEQ/ER4P4B75Hdsx0e165aALjOF+RjRzOlaBGg4p1fTjCz5LZFtA\ndDJv67ZHWfTaWngpFkM1kTG47iGcQS7fV3uzk9e6et4mF11V3ndDsDhiAwgi\nfaxK\r\n=N+tu\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"01ad7298bd7d7591f7be7a033d1082cc701e27f7","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.4.0-february-2021-01ad7298bd7d7591f7be7a033d1082cc701e27f7_1612841344349_0.8379879256738267","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.4.0":{"name":"resin-emails","version":"2.4.0","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.4.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"649f40506f1b6c5b32ced584975c5eb953efd0d0","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.4.0.tgz","fileCount":161,"integrity":"sha512-biJTptUCIvIyDHNeUKqz6qlKRSCzX7Ho1R1/YomuUXW7Wmc0e9oS2GZqzznSJUk6MPIP2odgiGJzE1Z6enEUFg==","signatures":[{"sig":"MEQCIHXDtTOqoyqqdO7VyrAAmzhPC6rTk9dapAiMvi9Ca0plAiBdbkS9SFGdX/R7vWOzQPGGmc/vr+OPEt+A5T5lwEGmgA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":15826804,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIoDDCRA9TVsSAnZWagAASP8QAID19oG0naVkDlriCYJC\nCc/plmUaveNN1CEKp7PbOGpKCy7hBo7fGlOdUTrUWZyGdBbe9XA6l9D/QUrV\n8CYUJTRz+oNyksh4xSw+8sDwmfi1kZwaZ8hu1edLk+4LPhu3CTpasbh3F07/\nlFksH7tOaq2OL28IhYfd9nL8Jn3r1joFViBip6jW3vdrZC6eSBfvH3Ki7nwS\n1WlwWFPbQ8Lks2ZNSIQmMXVposreIRXTuL+MwDLGWKErnlKXr2n9bmJCCve/\nNBbkVkiKzAkkami3iLYZOzUKUMEE57ISAxuOYnHWoICluWz9uyH+cL81SmUK\nFDFeVA1+GxgOwyO5tQRhlcWeYaxhAMvmq0O0w8briHuZN9EAtUiHRBc35iYZ\nmuGPbfLE/ecmnx7Q1GXR0OHDWponuuCgKisR8ndVtexx6Z0XKtYPrrUA1L3N\nKyxT7nHdz1N9GYZaXPwdWfowWi9Abr3wc3rws497QOCKy/0oAmSdHmBPTJ2X\nddXoGuNUUze9+HvgTFOKAVyQt9CH0USbS+XtdOge7UBdKLi2usNXlSSo9Jqc\n8AWTkdRGEI/dzG55zzZAXIGx0suhmk12p25ichFqYwXB1EtarxbQ2wCGC6/G\nbrfmu44aIBtT20QjQfDageKZOGdk8LTlHF1J5duZ4juyDvi60olk8h3ar/Qi\ngXUQ\r\n=L0bE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"bf4efbc4b940a9b01d7ad66ccf323bbdbddac388","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.4.0_1612873923208_0.7443999869161073","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.4.1-font-fix-67549a3f08d7273177894eac82a45ae3d545ae43":{"name":"resin-emails","version":"2.4.1-font-fix-67549a3f08d7273177894eac82a45ae3d545ae43","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.4.1-font-fix-67549a3f08d7273177894eac82a45ae3d545ae43","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"3bd852c7cc3344036190c4a863df9b73b0e2c046","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.4.1-font-fix-67549a3f08d7273177894eac82a45ae3d545ae43.tgz","fileCount":161,"integrity":"sha512-gkVs6ZrYvza1gBdpqm3IdQIz4/8T4cxsrpAKSboTNi9Q/YXruA/Yvs7xZoyvnCiHqYLpS3nL/dkj1vEwtW/EYw==","signatures":[{"sig":"MEUCIQD6eGVWMmhPj1kj2K6jPBdngcpZWmQHg1LPfQo3UFOB+QIgGlb+IJqWjxi/J/BSdlUKYj+9R3dG3qhz76bQef29qEA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":15827580,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgRnokCRA9TVsSAnZWagAA4RkQAIYYtrcqXkMAcyhhmGPv\nl/cDNixmD3+L/1DjIDKQlFIrSddw/WmXNWJ8O/dkAAT8x990qbLA73Ip6Rck\nJQ/UP33BB6Er8rWsMy+kkRpqsdoYXYpixhfXiU304CGwaak+ghgBsNUFw75D\nXGwxNd9c/mM+nqJ/jC6iaph0YefMvTgVuRhDwGOQrUoeEqqbVnZYflsMgykB\n9gzm2dmnLyYdOr1hmvnirWMhY/80kYJVkeMMIvOXafLwD5BGeWMhF7ViuscH\ncmd2uWLaJIjI+Up4E/bO3QNBfq9T7cro0nQEb/5wUm+ZAYeYzZFNeRgh5kP2\nUkD6aQ4TwVlMYvaHpGc36AEf88b8sQhjgmKfqqzm6uYN/VM8YLwSVxdetJwS\nVUeelkQWBetMP2+tG9ZZmUFI7cRbB60/XKytaeJmxBSeTItbEhnfU8N6L7xu\nHlHH59lHdaRPO64qCt1hQQdO8ZlJ0NaCONPo6Wl+73elNrlyPuJ1+979HZ6i\nw1id2LVAeAhlmN3iTcJA4Hn6105J21ZCGLqtAgO7u+5tROR7DG+7fPVysU6U\noQj3j9y9tYKgDC6mybqYAZUjnaaZjxgp80/daFt3J9pN00DTSNK7he7DXk+X\n4rRK8W0FKF2RJxuRvKSECA0v29CVImoMGvOTKBOMWsWidp/NMxIlvROXxZqm\n18lx\r\n=YicB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"67549a3f08d7273177894eac82a45ae3d545ae43","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.4.1-font-fix-67549a3f08d7273177894eac82a45ae3d545ae43_1615231523570_0.5695393948884815","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.4.1":{"name":"resin-emails","version":"2.4.1","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.4.1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"2ff8a7513885d1f41e4ed2434debfdb146733c80","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.4.1.tgz","fileCount":161,"integrity":"sha512-5DH/ipWLTAZo0kPkKCecRxD1rES0rOgAPzcQkvJ23JTfLwFZBp+DjwP/n69eleNzdo7s9KS9PpLfk9H8zBgtkg==","signatures":[{"sig":"MEUCID/vC1o0Hd5q1SP60CMR9ieA3z+R8gZclBw2kKc8C2OCAiEAwaFEziKRKZokzeKjHTnnxnZyL0P/MfsughAXBPulguQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":15827530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgRntiCRA9TVsSAnZWagAAMKgP/RJrKm6FZgWunGVUK6i3\nZuLhY3ukZWMR0YXVeNmZji90g7/KNXVQQQJw2UxlY7CWfbgjhwNU36COPMbk\n11ayGTjjF0TT0yv80jwYj8/CJl2qomvO3g/mIYt2Iy+FXxqJJLrr93jRNs5J\nigS1XkpaNOQ084X9IAB6dOoV3/sl7u+P115taD76HaCkXNHq474iqdow+iD9\nDJO5hOXHyg0vwbhMJXF9/uIeyzQYgLXOahL9MOEwNZQZhaAUr7Kb509BlVHo\nd024QimrCKcVd4hZU2m11pANSsqpVZQwcDCNFRO0PFn4rpHsFXZu64C205Ko\nYXJn+a3I2ShfBSVfjexkKLmDaE3uFF1QbTCmTUo8e53kEGjdp0+0eVyK+M7Q\nFv11tP3mIxi1PKiSw6sEPI0qQWeiryYLSncFf54IpqOBCjgi96KveqSiQxn7\ncTwMJmRXAmJ5QYe0/3kFMK1qab+HaD5DZDTYvoKVVVYQUKga0KoTnGM1I5qV\nR2T0JYbqRE1b5rRg7d+obrCRw7z9mPUh9kC8t4ZxsDkXJPktHfvfynWgzIUy\nf6jhYHYsCnH3BuwVuqtJkvXorNSVvaGNrykdhGpPM/fvlP1D6Mu3sukcGLyf\nFXXadHgpexOz3x4O7+8RtxryuR9rZwbTxtrVfQNc3bhFYZOQHdVegvIszoj7\nkV3S\r\n=FuqT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"8bf3852e7e243bc35a679e4bbea07660ed5b05a9","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.4.1_1615231842010_0.764712691059708","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.4.2-2021-03-newsletter-09c34ea1abb99640ae0801b9522f38e38b8ed8e5":{"name":"resin-emails","version":"2.4.2-2021-03-newsletter-09c34ea1abb99640ae0801b9522f38e38b8ed8e5","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.4.2-2021-03-newsletter-09c34ea1abb99640ae0801b9522f38e38b8ed8e5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"64c076141e5a914bd6ccf34ec6be786f2c6f9d56","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.4.2-2021-03-newsletter-09c34ea1abb99640ae0801b9522f38e38b8ed8e5.tgz","fileCount":166,"integrity":"sha512-0HAHYdFaCAGtyD4NUkL38i7et+aGFXcemtzNMTFFsj/cn62qq0Cb+IlEi0SxitN2vhdIc2WX42B4mloZS5l7bw==","signatures":[{"sig":"MEQCIGR7UKwlFkD/4CjbdAke0iETURsLWQbRdTFQcYwm3WDUAiBkvqg5YMVBpQwDURlto0DbFiaqagKv/Fqs6FFg4ljqmQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":16197351,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgRn5RCRA9TVsSAnZWagAAWnEP/0WJH89HR7kBDOO/qoP0\n4cKe9jjkIsqPuyf9ui1BSjqURMzTHeLvKjGIHH+sgdSA2HSqnHuRzumudEZ0\nIDAD4yR2hHLPWPrFM915by6Qt7zaQddrMLjvv4BxMexKbRpi6ykd+NOpGrJl\nAPYizwVG8sSeHPLh0OXqhZtTWOY/9IxR5Y9vknq9y6XW5sMjF1zKQGPAN8hp\n0FZAVnfhqUgdEvkS3AI84wMnPtpfiqDlms2JpoSj8+N+ZTlDwRGjuGp0MQxD\nZCmSq0a7YUZHXgZwVLdY9Fa2jcf7TqOlGzIYR+mmnqgzaycZ5TTHJ56sP6CS\n0BMwGBDPDYUBFOs49McgWyHMK/+KXHYu/uBCZTXn1eS4CNbALUicykSUwaAv\nORCaoeVrJzbyOSN3KLKYDAJzH4xYv509UKHaFAruV5eaf0T7zyVNB0CG8Xd9\n82hXRM/WoaiBf13eOLHH15Idh+eGfR9lm/IZud+lss9yC2JqvjahzbGuUpTu\nEp4Fww75nBZ+EpPCpZ4ItDq+8kTyPDbKEi25TlgkqBq4hHuncFx9kS9/HNRU\nyEdSwdBVVZoEOA9oijwfhEQrjozySmwWAa9WAbVNNzjMSU8QyI3nB0AUuGwY\nCsuPRUbhIzMD6m8RTWzhPdyXM1+8u0q+K4Cm+Qsy2slaAIRF/MaknNvnqpyd\ncraf\r\n=KmX6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"09c34ea1abb99640ae0801b9522f38e38b8ed8e5","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.4.2-2021-03-newsletter-09c34ea1abb99640ae0801b9522f38e38b8ed8e5_1615232593028_0.4841628305539807","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.4.2-2021-03-newsletter-ac130c927641fb6de30be24a695bd5abd9343c47":{"name":"resin-emails","version":"2.4.2-2021-03-newsletter-ac130c927641fb6de30be24a695bd5abd9343c47","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.4.2-2021-03-newsletter-ac130c927641fb6de30be24a695bd5abd9343c47","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"60bdaa78f9e9a5ec8e1464d35908fd388fececdd","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.4.2-2021-03-newsletter-ac130c927641fb6de30be24a695bd5abd9343c47.tgz","fileCount":168,"integrity":"sha512-7jkP7TThYb7OaVmo53oEwKAE3d5je9E+2QCLI1+7eshSW9/swZFc6p6wpOBAtQ/wT4+aImrJrI03f8Vt8G8CZA==","signatures":[{"sig":"MEUCIQD6UGQcaMn1O547bSv/Xnv/wXRSbVsNSgS7GVKU/yfKJgIgBLQi3QbqUZ+9X7RwUhl/aRVTkrIslc1IZYTI8DZf6Mk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":16272009,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSL7DCRA9TVsSAnZWagAAy84P/jwvyvQwhAVtAlJ6ITLa\nk3AtGPgmsW8Xl2FCsKsYADMS4Q9DaX2KP3VdmqVjoTNHYSb2zXiPosphyrNZ\n6gQNpe7HlnSZjpdv2LDOxVYMOjBLd/8fAXVl+55r/oJHf2icfjtfqGJPSIZg\nGa13jkViPJlvFMGwd4TljlAD78nmqO6yNvH4BcQW5M3Vizix/SlTb7c7Z70D\nBhPX+LgIzpVv+JnLrw7t7FpNj+3hIk12QmI4uCLzUgWZ1SV910ADSN/rkWFC\n8T+k3fVY5GubQsCaULW+zRQbcAsf8vwRfK+83AD2Y9WpCgcYlyQb0CyY7Qth\n2E/X/8NZIyNMXlezB0KSTKq7wtnzQoMHKyJ5U/JG5fciQ7a+rIDJ8NdmAM4j\nRkksAHBq2uQ/HwfeJUpUxWHGzFifMp5TDP2MxLrCUa9O2avtaTuJEqPNiOWd\nch7xJNvGsJPg+e4efKaMxnZSfRmvIaGsMEIYcIEX0sZDLxYlQim4T2KCJS0A\ng4R/lgdyUIVdcUsTdJV3B9PA7aUIAsQ5oazd3QRiLj2pVx+tHALFqkZUIu3N\nGXlnHFZqIP4LQ3QuKHiJ4Zhjh472swwvNez4MAoPcRsTzgQkLwwndmwzyg3W\nsBeDn86TgNYgqnnU4lQiSMaH3S9s5lNuBK+6cf29+IacAkhUriTR9JSTQKlf\nT3Ev\r\n=IIcU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"ac130c927641fb6de30be24a695bd5abd9343c47","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.4.2-2021-03-newsletter-ac130c927641fb6de30be24a695bd5abd9343c47_1615380162288_0.1713740578626215","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.4.2":{"name":"resin-emails","version":"2.4.2","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.4.2","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"4d4e8c4d20796aa23f60abbaa480cd953099b442","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.4.2.tgz","fileCount":168,"integrity":"sha512-wy5jxdjGbWepy7GuCabM9831tvOoabN8C3zqltMMe6DvDlIeRflPTlQNiODMfVs8VkwAa/sAkiTPEsLdHSDMAA==","signatures":[{"sig":"MEYCIQD+ZNxjBF9eR8WGS8p2CyVwpH4czg649nuvJeWW2bvYsAIhAK3Jx3J8W6Ukk2C9boUCLQntXize1C4wwk+Gn/QYcfKl","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":16271949,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSL96CRA9TVsSAnZWagAAz/AP/Reh7a6gX9HmBgMHZdd7\nChy3g+s6ZYvK/k/ibZ7Izt6AWRxpAYOsaXZPv6zYxo3+iH2VVbpA2retdJ7R\npRxqmm7G03vEN/96I2MszYfA2CUzHUCNyB7U3u2TKG1B+4WZtFgCC+Fst02q\n1iCWUDdAU8f9Nz6EiUkgglQiv/unU/fxBRylQX8yzo3vAwwPuOsQ+WYE+eVr\nKV7QrHvgRc5CZnVJvcixwAu7eNt1hFtpjXWBBi3Pu52bTTEwGMMJez7jTfi3\nCSt4Y4VzcRU6ie9jTtrYoPNQ50zfR4U6Kw3BojmTehnYieR8zTfbxmymeHUr\nCgA8jVERwZJyaZ5gL04PM7vSAtyCaaOJOwLWb6m5magjp9ZYRh2wISNd4ExG\ny9kkg33W+clgo9MHGH36liq+vheoCceIe8Jsst8U3wHS+pMljfjfPbUPdjhD\nEJPqK+R44kCiR1ETE1m0ueSaUZwhX1YkOzST1JIfwS2F4cG9S/WtCQSrMB5J\nmrkagZcWMpT0bi3NEHiIwnE79h+YUpwmsviwdk2NbFuAzY0RLPNU2hLM12iG\n/4W1RteTmVynkQ7cad5K0g0hf59j4Sl8KwNwGuMP0wjhwVlgWALndV29/5Vo\niOifjFZpww/Gmtn/r9peqLOs+4JfuMPPkbizWsn1szE7hLyPqUiysLWkCpkI\n/JSs\r\n=GNSt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"c1e53d429a4fab1398ffecbccd99341145fd97f1","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.4.2_1615380346199_0.19882236319290802","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.4.3-2021-03-role-announcement-5988804445fb6cdf8996c1b524b6f04a142b4ff5":{"name":"resin-emails","version":"2.4.3-2021-03-role-announcement-5988804445fb6cdf8996c1b524b6f04a142b4ff5","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.4.3-2021-03-role-announcement-5988804445fb6cdf8996c1b524b6f04a142b4ff5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"df9394b9208f3de9e7609e8251b9c2699e9fd234","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.4.3-2021-03-role-announcement-5988804445fb6cdf8996c1b524b6f04a142b4ff5.tgz","fileCount":169,"integrity":"sha512-cihNwpzg5V6gy3dgHrSfojwAQx74OgOE1VXpccMxxsz0uBLUNPUCijrtDXs2itvxBqQQ4KsKIcjQDZRMVfZuig==","signatures":[{"sig":"MEUCIQDWKgIAbv3XMTpcym8TNRdLy8sCc3s/yvHM4tIyj9m+gAIgDLCkfiMoCJ/fDPtCceMntYOQuxGjNb6qciSJIj/hQB4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":16274123,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUgSGCRA9TVsSAnZWagAAJT8QAJxxUWsSbbOd/tPIPKcT\nhv15bjNiS9DLqLj5zWeecMsZjtLh+zniKD10YuGQmHebymYuvrYcHoOPCYE1\njOU8mOMyL1fHYsTaTGf98cHjLTyrNFYLRhMx4czxiAQg8m+vhIhCTxkcoSgG\nRs9zTm6SlJpbZKRpCo84l31toU6/UMffS0dWv+YSR9JbwRTenwbfXvpCA7na\nyzyPe2HA+iakyemIP2bNtUn8jOa53dvJd1o4twfbaRfMmTL1VabSrSAbraad\nTJeXJP4/G/JFPKE1zdl8bo7h4YAc89s4gMtBNOQENnZB/OwA32eyZ0sx+EdF\nc7Nlfm/tw4ajoZP/cCBN2jpUXMOnYLRSWXjZAdADX+S81gsIot+K8Oi1yAxo\njV1PhOLEXdAJPDmvalPDYQgD2MG7B9PDuWdggNfXnP4R1POeW2+f+AOKLFvh\nPpsv5DZCKqGQUpW2IND5UKnHRDDUYyOM7BX0CfHwfNuV0TyLxBuZBdzvpRdH\ni9be6y8VFvGOGWK5W9NRdopLUWa/8+vHcVIO9o8eLAsC0XKEZEulc2zpeejK\nTSyR0Qna+AMN6zM5OlxQFfPz8v7TxVrfwEGzSgJCisp9F5BVWXSqfPlrzFLP\npf2dmth6LjVSrZKE85D0LO2YS+Pj8dQmz+7Xoc5GOO2WHS/GA7guRX7Q1mMe\nEI+U\r\n=Tv2p\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"5988804445fb6cdf8996c1b524b6f04a142b4ff5","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.4.3-2021-03-role-announcement-5988804445fb6cdf8996c1b524b6f04a142b4ff5_1615987845589_0.48767632024482466","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.4.3":{"name":"resin-emails","version":"2.4.3","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.4.3","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"5abefc1d83916c5997804f235c1bef0f3d921d13","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.4.3.tgz","fileCount":169,"integrity":"sha512-Z4WFgRlN2CNL+CWjpVw55PqGabS9Vt91fcHmw+r25p3cssidtImBC4BxEyO9H0QREsKdSlWn977Owd2P6ineig==","signatures":[{"sig":"MEMCIGnCNvzweK+Bwecs5+fHr8T2rKYbfZ4BOXR58Yp2/KRSAh94T3qM7KjgnHwGhKjrBk5MVFwBJFSkIVw0fRCq4LSB","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":16274056,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUgVBCRA9TVsSAnZWagAA714QAJmTJbXTyxV+g9Pek+3z\n/qJ/A2xzlNSGtCJhcFDuNnrFXW3yiYI9L7yYvPJTc6H8S4cp6qyxgtRs1AGE\nvpyWEGOxDPz+q9IpIZZCFGzJBCaMtShWp4ykWt1UnZeo2HRaOTb0Nno27aHN\nSO4gbgiLfquufVlnGu3daMi/AAnLBJXipRpN74W7IZ3DGbJhSnuBeYMyFKcm\n53kS0vr3ZtdRqC00AXd+Grgea6hrInHPZB8jOEVVcfEO6pbqSsEe3efBh8pK\nNail0s8Q6W8ZQBj0lVTBQ/K2J28aTwad7AP8rwcVnHrU9bzrZaVsXmJREmG/\n165xcfyrMIXcVZJbI/b3zlPn3Vz8ISRTA5QFGS7/TgLgoLoFbjnnS5gQCjT8\ng5ps7UkRXHATPc5UVS4Be6BtvSzU+Z1YfSeycBBzz/b+/UitzFfZJSj96kcK\nerGHs5kxCu0kJehvIsbyi4OSE0nbeuhhBt2izJIzt3QP0uHxjZh677fqThxV\nnb9wFda2Xm1FOg6WVqrEJmp2ZsmA3IX2qneybaaMDByds2hgaHpl9g7xhuZ3\ntqS1sfFvcas78w3mKgMsbGmRaIbLsXlOseLhdS64roh6H719lXBIiXOV/Ewi\nZOwnBvbbqnwOtor2tWi5cUhIrJ8DXYm/V2SERPxVKfZoiFcp2Y0G1LXILAFr\nX1ju\r\n=a17S\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"2c9f4265ae0738470721ef59fd72b06438ef4e51","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.4.3_1615988033175_0.12033114110472432","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.4.4-2021-04-newsletter-4b96dd723eb7d31241d0ce1c07cb72724e30998a":{"name":"resin-emails","version":"2.4.4-2021-04-newsletter-4b96dd723eb7d31241d0ce1c07cb72724e30998a","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.4.4-2021-04-newsletter-4b96dd723eb7d31241d0ce1c07cb72724e30998a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"f26cb1c3030d3ce6193e65be5e3d9102afc5b337","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.4.4-2021-04-newsletter-4b96dd723eb7d31241d0ce1c07cb72724e30998a.tgz","fileCount":176,"integrity":"sha512-JFZeHdVlsuZX2qS/86TgOpHbx1XwGdy1c6GOwz8FZ3jfIsjcDWXEOE6ClEFLk+3dQFskdBLcMLqggvL6tjrenQ==","signatures":[{"sig":"MEUCIBtJQoM7Lykddq2ao7GsjMosP9w9c0+gjm5Tm/9cFMDtAiEAujaLnvuEDKuv9tlNtS1LRlE2KkjqQHBMUnp9flexhMc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":17022721,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdGzpCRA9TVsSAnZWagAAiSkQAIurspeQOYz/+qfWAtiy\nB0gNF3vcSgERg09yUDKC/s9j3LwExRPNwtsOuFUGkQRXbvReEnAzjIYmDz+6\n09s3+3qQ00ANJ3fyUH29MPPsduGurh4YT4LhpqTeWRvC4HOPx4hLkWzPIAAK\nVQqOcw0R4yeEerXUGe6vXdolQ9CesXICU041CgJOU4wBsz8O6eRRkw3mtSu3\n2GJP+WQ91/rF/r1eiMJjMxGxZOzNx+7asPmhQl4dgiywAYZKm8rPpa1K/jTf\nf1Qb0qUCf6ric6qoDm8NXADVSem3UvMJ4ZnyS2MwtT0psybijA1sZmbTLET6\n4F4QBIAkDhW84gxArWNftMvQyE7pyM+MRK5SJnv424H1yztWTkIiyZPZd5J8\n9zhKD0IwNgWkuKGPjy3E3fGSnCKgA/NEihvlcAgcm4ZvcJkSQq7UtcS/7MjM\nvJ432Tswmp/xeXPrUFnTG5dyT/UQtZqGvj2ytvpjt5X8cpCwOuLbBuSL51zG\nMHwdFDXDvKWsouae9Q6KR2KQFhPgBWQ6ZeJ6XjWJhjBbKwhhTaqs0G2DACZJ\nJPMTHWx9Cu5s1/GwZXW9/SmNcGglWr/5EzdL36p/tCLZ4Si1zX7wSkK2GgAc\nuqgTue7hnYDE39Qrc/P9XSz9vwS8sgJpQVoxALfP875c2Pf5xuTU9SLyuD0W\n77cC\r\n=Fs4I\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"4b96dd723eb7d31241d0ce1c07cb72724e30998a","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.4.4-2021-04-newsletter-4b96dd723eb7d31241d0ce1c07cb72724e30998a_1618242793019_0.8400472219767783","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.4.4":{"name":"resin-emails","version":"2.4.4","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.4.4","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"2206c00b15076d86327a929d4ed94cc540b61abf","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.4.4.tgz","fileCount":176,"integrity":"sha512-tu4mAV+uBTwpZB+laPtfVXSJtLBuCnfLsSShnJVGGf3fdukCkvpWrW2ktVcFBjmyl0PBW/u6dLA+ERaqTtHnpA==","signatures":[{"sig":"MEUCIQCWeztHtV1aUjqQncd3WyevHlrhBPyHQUQ0SEbj4Kwr1wIgSWi8sRJcU5M8ZCu639tbt51PK5m7rFu5ty+4CHvJEo0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":17022661,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdG22CRA9TVsSAnZWagAA1qIP/jZC1tfmu7FblNO+v3x3\nC1IximCTIajl3Ta1Q9F5F8OgPey7tweucQiTMqBzzO+JpZNUBZSLLit5m21Y\nsq5M4g+NcbrgGFJrPdd8t/eyr5O8qb7mip2JaO7347z0F16mI5gBjErmFmHW\nU1NKXGRibTGxR0KLCVHJRbtJZoYJhmPyILCaRFG8v0HtQdxQdDPYoMo9q/TY\n54HDZvUjgre0W5AXiLbljzF9JvFzOcPgHrHWOvhx/Vym5Z4tdnqlRGojvHUS\ntx4lGfJ1csy7IP1KA7NXq+tKMYOcHyIFbYYGmjoVVOYfy2af2uxA6UUurbbf\nCVAzp155S7vi8PRl8QRfSMOEYKP1oT7c17nObh8jkw1DdMFy955I3Ih0pqyz\nUflUDouDxU+fIT9sY6l22MTh/PUTlcr1UkvFhwZ5g+3blYyezUgJlMtpDCS0\niL3evfxEoD36wviAO08Tx/N4mWJYwzmzeEZGS0B0RL+S2YmBptI1c/Nh0TY6\n48BSMs+UPZkFzZiZOh1gwHiJPmrbYFxQNBZzuIF7chxOChRDwE9pnxEwUnK9\n5IcUOh+VZpbe7Tp+d8m78yEh0G2yozEAnN+sgw21orNbgGp84D+Rccb75/JF\nu7sfCR+sfcrLodDekXI7cd2CWcRgyBtVp6q6aZLi/K7I7cEgUa/iUxXjPNPh\nvmsx\r\n=ijYf\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"9031cb6643f17f9724286767b31610c355c5b058","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.4.4_1618242997750_0.422595951043494","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.4.4-2021-04-newsletter-97bd5b2102c4cdf742526869a58716ce22c0f3ab":{"name":"resin-emails","version":"2.4.4-2021-04-newsletter-97bd5b2102c4cdf742526869a58716ce22c0f3ab","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.4.4-2021-04-newsletter-97bd5b2102c4cdf742526869a58716ce22c0f3ab","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"6aa850b844f78d410d7e06edb882e0423aa9711b","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.4.4-2021-04-newsletter-97bd5b2102c4cdf742526869a58716ce22c0f3ab.tgz","fileCount":176,"integrity":"sha512-whDIxHBvMpNTORhvS9qD6OsoDeOT6FXAeskArIREBWnNhnmSRKGe0iuG45d2+xg1Y2IzDq2KKpMZySL6cq4sTA==","signatures":[{"sig":"MEQCIAJ5+ggY3iSmXvFZ+S5miwiqqltTRZXkGq/qDcLpQ+1kAiBh/DJY3sR1BENu793GwLn9OmPY7SH6IOrbwIClZ8bQ4Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":17022868,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggXYaCRA9TVsSAnZWagAAo5QP/2jfX42XtABQ4r9zPKRw\nNz7Hoc4p7l0vSysbGb8xz3v+q/vSSKOERwtNO8CdMK9a/0A82GkOnfnekmvf\nTE3eCOhMVaZJ6UxxOdKHwaGIwAfm+EPrrMmQ38mJNzE3JmnKVWbsocKVX6qn\nkxfHGo84+BDxGTKkQJD+fnlS4aiiuLd0DGKGPzC29VX//BslmQVCHMdvQLip\nKwocDcOsf0z3vIYBtfdC6EBeKR0lZxQ0aR48nM8zy+FMhX6an8ecbL5rIpl0\nYFzuiyR9wzW+nCpbae9ZH+CmFM6p5S5HeyRHUGPlTEXQ1p3DRQSnLrwu64Z7\nXzm4BrWejO1zr0OsKy1lJl5nKCzMY0ltflkGX23MqK3uKnRMVNGVzREFjgc4\nlaf0rtA1DFLFFF9lcjQ+Fdz+Pmo4BxCinABjUUgeljFb/sT/V7McvG2lcgM6\nmcUopM5h16GnmuFdpxUDqmrd8gV3Zi6u8hUX7/zslI+jjc1du306081S4pZ6\ntg3FpifuEsE0AC9t6Ay69B/lJhb9g+yqx9pSSbKQbKdKLwOSZR7SrVK1eone\nBY7KPI3n43CiZgvXe0L5Gcj89xc9oMKbo2MCpxYiOfav5nO2kC3GdHIawJhY\nqvsp/KOj1A5TliyhkKWkzpNy5tThrtvrVYvH63ZJghpxFcPkiCzzxG0StQDw\n83Hw\r\n=7v8t\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"97bd5b2102c4cdf742526869a58716ce22c0f3ab","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.4.4-2021-04-newsletter-97bd5b2102c4cdf742526869a58716ce22c0f3ab_1619097113552_0.6315167875521428","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.4.5-2021-04-newsletter-675b7f6fb8711b517a876f1d5857d0d2894dbca4":{"name":"resin-emails","version":"2.4.5-2021-04-newsletter-675b7f6fb8711b517a876f1d5857d0d2894dbca4","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.4.5-2021-04-newsletter-675b7f6fb8711b517a876f1d5857d0d2894dbca4","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"7049a20ca11f0fdc314b54ec99487e553b8db8d6","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.4.5-2021-04-newsletter-675b7f6fb8711b517a876f1d5857d0d2894dbca4.tgz","fileCount":176,"integrity":"sha512-mlKotPs4WXeYZvYCItsOqgfTsxopUREXbNbOLYnxGaAxhpJmeQ/bda0IV1Tmo977zKaaxCdJ5bAR/RrcXfHFkw==","signatures":[{"sig":"MEQCIHJ2zK8/CN+HkNaLOIxm2WbaF2VwvwVZN7O0lgQG/ApWAiBt3ARKSNjOpmCEZjwu7bDipsXuG3ODu9dBgzaHYf58og==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":17022895,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggXmXCRA9TVsSAnZWagAAUV4P/Am98SudLq2mavwy3Gxz\n8ketZDQlqSzpxDtXzvlYvZBTqxn0bXKlxTYkSSifEFZnxFCF9q3thzt+fCgF\nlbDBZzRBoNPOkMcvBR80QDYE/78UYzYjRfetat9BYO1cOO20lIUqc+kG0X5h\n9IPTJCp7YpCACn7BlL7xf6XTJcq9k1LdI3PSl/WM0WyKsLe5JNSMecNuVe6l\nf9W75yUlxnvMeaynF+G/PpyoGMGpEyZSQhwnZEODYWYWrbOzH4kyMkwfiVcX\nDCrUTawjGxT7JedVS/fGy2KnkC0dM3qUYy/tm521Z3Pkbgmuc/Z8EGZ2OUtM\nuvm3fXUkl6roCTNk77mtvt7lfqVasMyFw0eMECLm9RiMUeQgmioqEgfQYppQ\nqv5FyMwN6x3vnoCmghsUrk9TF+QDOw6W9/ms7qSzmKo7SX8s+hgNpbHSdlnF\n3e1yUTVzuKVONjPo6ivyoF+ja2aZ+n5siF6u9HtH/TkzY2fECLYrHvam1/Ry\neqriRfAOglJEYZyDT//5lLBYKc7sbC52qgEdBBsZsbKCMJh6d8gsh6HAo2nv\nXheVrgOCN1IuI/yEsDB/RYKluBZ58hHdiqcWOrjyUVA7f19vrASD4LJ9PDYc\n/IlMRjnMo96R7VGwOHA8UiwBYQpeMHYPaVFNNlQE4KRfJ+wPl2uAhtxXFfSX\nGgQi\r\n=rnfs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"675b7f6fb8711b517a876f1d5857d0d2894dbca4","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.4.5-2021-04-newsletter-675b7f6fb8711b517a876f1d5857d0d2894dbca4_1619098006367_0.3707777823760443","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.4.5":{"name":"resin-emails","version":"2.4.5","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.4.5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"d06b4a2f10c3000b29a692a5aa5127a7698c26c8","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.4.5.tgz","fileCount":176,"integrity":"sha512-ifcOW69fmhaHfznTV67QNMMLqVBA3LK03b24Etqnk3DxI50MgRGh00OfNu1ZzL7dB9PJksM6AsifxvtSZY4YlA==","signatures":[{"sig":"MEUCIQC9zEILwj7w+ehYtyCG6cF8U1XURSIG/xLTu3UHHPLilwIgdkEf8Z4gpWrgjjZrhF/EJpDLXoG0Ulev4jyGc+Jtq5A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":17022835,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggXp5CRA9TVsSAnZWagAAvOoP/RwFH0QnGM4XAoSIPuEL\n1sXjNA1PblC2uwSmyzZT+lXV2/BhbacyvXTuqktvIASi/6xrMdKJCdJT40A2\nWx971TdiHyWts1vRUG/dQli7TEPK3QsIJ1gV2INhgSmh8s2M+gZDv/kcvLX1\niyWXXN7CSwJju3sl3JtQD4cghZ5R8GxuuKqz9VTI+NhhhtmPQsC1c9+Ood9p\nPhtlQaCD7zLNdK7CW/Ky9g2c2jZBdh9bSgTsVM4mWSAb7J/ppAucVPyUxwKW\ndFZibOvEmhVITP+qA+TxfAgIBzGAqQm2hqZPod7RuFvzpsatuS8jUvdS/Elu\ntosZ3csblcsb6g7GM/p2v1MKYUNK9PQpHs6eKkDkFspL8m9XuOJWdd07ZFne\nLbVuMrHiKDvRb7Ft2LRaBmeTzJIN/+BwtC6vJdPhkd33qzvpCVJu910TgY3l\ndkxC8zXm8St5lZsYerMQm1DLfp14snlCxr4bg5zufHrGo0oJoyWeyaaIjY+K\n9HR30LjB/uiMWGjaNdxJPZf4QM4w5uxcVNL05Zbk2OYtF4UIBIzGTb728HRp\nkMhQrK7lBtg9pgsNIr+rp+HQfoOGSfPngwdwOcsmUOtMY706Hae+TA719HaN\nC9WW5K6D3Lhi0/xVdM0KVXUQLUy4ZpkoMV8CdAOTVmny8J84w3+OzzA13CrE\nqnZN\r\n=JDmG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"51f1b3b911f84d9a02f1a197ce767ca0869835d0","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.4.5_1619098232909_0.8810703540810991","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.4.6-role-changes-announcement-f7820dd1053c2bf29419928c4e9a01ee3da08b30":{"name":"resin-emails","version":"2.4.6-role-changes-announcement-f7820dd1053c2bf29419928c4e9a01ee3da08b30","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.4.6-role-changes-announcement-f7820dd1053c2bf29419928c4e9a01ee3da08b30","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"032aef6aa36192cfdc7e21ade2e542ec6d5d7aec","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.4.6-role-changes-announcement-f7820dd1053c2bf29419928c4e9a01ee3da08b30.tgz","fileCount":177,"integrity":"sha512-FuGSUAYbqd60BWetIraycHc+svn6uSQyzGeJ5QmE/N7NBr8YvkHXnKojMmf0mmGIVxKaMEQvi9Z18U1ZTJEWbQ==","signatures":[{"sig":"MEUCIQC5vHlw8/KK/zkg6MvcFn24VoDyezZ7APIWXcWBTYLvHQIgGEeG2hSMYPdnxW/G2c9bb5AnrvvFYLa8DuSWuq5ECOY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":17025778,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggcuoCRA9TVsSAnZWagAADQYQAIcxLIu0P2EdiupLyblr\ndivE8nOkBIrujgGYuIDWvyMeVW+dXhhzDWVDOe0fXaSkKNow8kWIaS4hgsAo\n1VzpUn8dc/WmIit349pKD8FeUSYbwmWu4m+BRyeyjiYfFkEfDwSqi/kfJohp\nYevqn4hmc51ZbMno2sQ9qk3S9AqLDS/iJ6c29+TY4s24W/Jk05YHB7N3jNwE\nnMjdSIVpKidt3JqxZns2owo9zQAksUPen/xooSyF5b4llnyIQnJmOZEoj/QZ\nb5V6tvt4qoUaQbQCB4YcrarWnblrCJE0GFBMFdmjNuUtfplygCbyEuYcofct\nfDS7T9iljvpFsTYE9FJpc+KJxFqbHtGnVOC01Dx9ASwzmdiMNtml09HRMzMD\nFvw8EgS9ua8RNOfiHxjQaAbCMkVNQOr3X/uMm0Y8aPuqFOvgSB3QyC1m6/SK\n+yvmRrpZBorkdUGvdxMQiw2i14PK9rKS5NbAejL/m3aItQKySI1BAAC+4CHk\nfJ13SSOxZs3CaLvzy4uHrceQT/AFoZvn/8TP8MqObg8Mf/CD/NlmdoN2yq//\n9DTswYvoLaAG+6gmGfiM9uvY4o4eHuphWCCQ4byd18+e8AxXYeHVjTtfJ44n\n+flXbeToBal872XUarP5Ij53KWfVC85Lg2DNe0TQHU2lWaNHhrL22gbVuNf6\nho0S\r\n=Xl7H\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"f7820dd1053c2bf29419928c4e9a01ee3da08b30","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.4.6-role-changes-announcement-f7820dd1053c2bf29419928c4e9a01ee3da08b30_1619119015966_0.0861365327354513","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.4.6":{"name":"resin-emails","version":"2.4.6","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.4.6","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"e6cab8b46a3cc70049557b26d45cf59a1038d552","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.4.6.tgz","fileCount":177,"integrity":"sha512-TKhghXDqYDeac7GlH8YnlZkhi5zdAAUfo3qjnLc+NnCYWw8pSZqkR9m3xETksZqGbC+mDn5XjpMX1Brhj7wBgw==","signatures":[{"sig":"MEUCIQDHGTL8Q89XIeT7PwDEalcFUEiqhJBybzRsUL3MUO65hAIgJmMVnupG+dvNGtX5XEhix798uXzkqdkw4yFf6GVWPoA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":17025711,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggcyNCRA9TVsSAnZWagAApooP/i8y3OlhRBuFebXiPuBv\nL7N129jcXizpdivHwXGG+biH2+8d/dwJDHh05OvuU3hDU1cjdemB/BOvL4MH\npU8+mXH0Z3FjwlhrE6VukFnqCtyeWMfrlyJS8+LspFHaNqf/ihVMjqinnMGF\n2uBJHUuDbyfcKaX752c1Dn35XdrycqfR2rPvCveZNrxyezk7DXdSgIcj+iRt\nmK8kbZB1cTVVR/ymSgv6jrFgWyXI4ZnBAdsK+U3XY4n8TkhLK9SXpH/DZFZi\njOq2C0vGU438Tr+YCkyorKs9k889492HRlYuAlttqeBXs2UHwcHcZnYD4Zb7\nuFLGbJ4d7BSyIw63akqkDGyTmG9VJTMdiEgnACgWXGcTaMY3oT1Ak461q2xY\nUITY6jOUNg5Laccy1N7msfK6ceXIIo10D/9ahZKIIBheldXydkDrIbkOTC/1\nEqipCVSmvY8wa0AoaXOnDcvIT+mwtyK7sUJ5Ebl4xuTNz/ZN7ghWZruyWxR4\nvKEGrxg8qK2hOYO+/Z+RBaqM7QR5yCvTEtL5/A10YOFEiB3FuE+UpShE2j+G\n9f+bfJCtLFKmy776ym+0FYyxobDMXC+T0W88cR7/Ak3A+xAFI4Pxqd8iGOIU\ncYCTiP7O364nsxJ868ODzTr7/X6WlyYrUrM8wxai6Jvy33IPIjDmriUaKN5W\nd0P+\r\n=hynD\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"e7b614da81f661b9924038295e7b199dac00cebd","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.4.6_1619119245045_0.17053972150664487","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.4.7-2021-05-newsletter-27d193d97b04cfe5ae127c1c9804400ba4c4aa0a":{"name":"resin-emails","version":"2.4.7-2021-05-newsletter-27d193d97b04cfe5ae127c1c9804400ba4c4aa0a","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.4.7-2021-05-newsletter-27d193d97b04cfe5ae127c1c9804400ba4c4aa0a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"7fac42e49d6c0f388a15f8d41f36f1e881e8e273","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.4.7-2021-05-newsletter-27d193d97b04cfe5ae127c1c9804400ba4c4aa0a.tgz","fileCount":182,"integrity":"sha512-gIRZMrF5wyXClXGYODdCGR5HT1QJuyrTLQnU3dCrI79bJasxIMYK9p3y5dI+u4CoC7+s88wg88BDiPpcCCIALQ==","signatures":[{"sig":"MEYCIQDVvSaDI9k0NNcWOI16upSzQE8a0C8vTRqi2RICtO3H9AIhAJ+1Bl+TshWfjkwhHgtS8dRPdKOgflBkV6wkAWgstD9s","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":17409342,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmq/NCRA9TVsSAnZWagAACX0QAKM5CWfOcRaZs5EiKrXr\nz0JiJPcjw8H3ePTYlfHFHbKS4yFTAgwwnxC4kTgGXrI8JMttOPCJ22VnMQ2F\npdi2qyxLLvRXGUTanJJ27mbJDy6bXalgh3IxBQWn+Ybvzyt/0uX92WVi73/O\nclZon0dTZ8xkjKJfwSG6qTZd0fLXTBTBI3/TH86Ynnwk2QNQUhHYTaO3iarI\nFiprgs5+Lke2OlbbY3TMRgMtzFkR+HQ68G2Wp4SU+NIHvom+0G3KhGy9BOKk\nB4VVlDxJiX8tmqtc7ElIhOziCRtZt4yX/LvfDiuhRTWuAJzfE7i95i13SG60\nLGcURaxtuGBR4RkHTQD41D7oqLTW2IBMrZPzOLPTMvdNJhTDSjeb3zDXsc5I\nMzMS9HuaNxmwTLPTj0pY/KEYu9fP5jGuh0tUazu8uj/1+Bqu6eUO6s2Bcxn5\nGlojgZ8lB2ky6Rv7cG/Rz97A8/QoEtSdvCzLJu67xT8fcFHXRLLFKwHOxc13\nRQJ1hRPzWfFdFgTdvzc1ciKS24F7pa+h3wCAfVvgMkiV+37XIXe4pAz6ZLyc\ncxuWwS7M9i8IscjYyiHp21miIVTo41XZWtYdUTVF8Qiq2tJYqW5MR7+bJQ1A\nv1oEhST61EruBS5maCxbFs117FB5O+3WWwEIUt3wo8QxJL5FpkrAy88M2u3X\nFtOc\r\n=wCoE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"27d193d97b04cfe5ae127c1c9804400ba4c4aa0a","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.4.7-2021-05-newsletter-27d193d97b04cfe5ae127c1c9804400ba4c4aa0a_1620750283398_0.4711382495303851","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.4.7":{"name":"resin-emails","version":"2.4.7","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.4.7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"1a4e5f15464a920260321234ec331b9988db503c","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.4.7.tgz","fileCount":182,"integrity":"sha512-kOYGpBgL2QaqipFCof2TJKjWblM6hI/SAhtZcZEu+6tef4dtk8oi3pdQAASza9g2TeU5/ejI8iWXso2KzEEOcQ==","signatures":[{"sig":"MEYCIQCZviiEpgdknZvcH3XVrPF8HN+9DX7xidQuw7Yi/4ShiQIhAJtmftmY1rBoDpcXxfTDJoII4uh3I7b44PUYqb4kSu5I","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":17409282,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmrFrCRA9TVsSAnZWagAAnHUP+gJtvMSBg0OlXdh8s4cI\n1Hjs9IGQE1ek/P0q1PwHGviBbNcL2ZjgNrXOwbmmUVD1FL44HNa6SFID1JAQ\n7T0Nunc4aSpWOhA8zM0Nbn9Smbh/2IxkPjCHoFs+4/mB4GXa31O8L2/xDPfV\nSwyr7eV5yCjCLJZsQ80Y9JYhcqJJV+/H56PfaHUU8jw8FcPGtEkYY5IzPX9+\nW1I2vf5K9+BuJUZwmkmV6PjuloB6N12ipcjgLglbSBMLYMbwr9uAVvWcqwgn\nQL4+/8so+cQo7GGYlqHvP02tDV5EwHi7dI584IEwx+YRVQxDjjY7ezy89OyE\nXC9nK/RspuAQYXWOQwWTP3ao0UwbSizRKYrnJWJh7cmzgYPH+nzXjGqI+r0r\nS0r62PA6zkRTQ39QBSAXaVEYtgbDWGTlOieOozc+/LXf1xYr4omdNSnAFiSE\n60E6POQdbmMdPFGLZC+cnUq9JAgJYXPJVDsR1Zn0jSXkuSb+4evKIHVXuGeB\nw6nF2Nt3e7czIf8yulRo09p9CiXTDvytUV/qK7134IStowa8cQXKin6ZLcy8\nxW09VDDwFcOewn1PXrIwKbRpwmEI/UQXsEjNJUuqCSZu0/GsXJUrdznfAGBJ\n2stprLiXl/ymA6t+361h9goc13oJF8TBvUuRbIziM9xeBjpK8v6BUBFh9w5R\ndQjF\r\n=Fhl0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"f4fb8c046fdb6a454c8b9cafd8a277d8bccd48a4","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.4.7_1620750698993_0.8543770442192342","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.4.8-2021-06-newsletter-82509cd2bb1538974bc4733c573e408056b8a7d5":{"name":"resin-emails","version":"2.4.8-2021-06-newsletter-82509cd2bb1538974bc4733c573e408056b8a7d5","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.4.8-2021-06-newsletter-82509cd2bb1538974bc4733c573e408056b8a7d5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"8ec642e873c4df9ae00027b06365a1879c4d5f7b","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.4.8-2021-06-newsletter-82509cd2bb1538974bc4733c573e408056b8a7d5.tgz","fileCount":187,"integrity":"sha512-9YLDi4ZTW+G+yvOgK1mPpgJySDskuRS4uocpi7WV0kyVHDsNftaxYqooq7hOABk0HYmZVxU3OLnqDhcXiQbJcg==","signatures":[{"sig":"MEUCIQC6rV3SKJiAhK6hUFZgTCuHD4/BXh5s4Lm8cXG9Yq5IrwIgBuI+Hc/PdP0Uf911HgEeCM0V8q38MYu8eOFAwnZoQnw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":17792364,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgx1XuCRA9TVsSAnZWagAA7+4P/jOHuZPCdafJH092CoR6\n2sAatMBcyQXIRFJhJoLmgz2s9ztHq7vAbfu8y7vOCQjK/r66mJgvfLPjWkef\nXfWzrElkJvqZT4dhyg7HX801yLFTnkHXDUVX7Y3hU2fEpTjqhfhX0CLvkI4g\nExkFNIdzhltvJQH1nxRTdyIDaCeqOXCt2y+njdzVNyQmM1CgE9R6DLrXAHKA\nSdxPZDToxmfiZb3TEFe1Ep+vX93RXf634/ZwAE4p1578fkeeH7GrqXS1bMe2\nKTN1FGC+gsmWU0P9OWvxcBvYv8Onp9UKZFGaRrBBuD1VDzX4s4kVXn4FbOny\neyULoXbmkVM0+Wb0fkSyb0ocOgm0WobQCzZ90qvYzBsAed+6O5VerqBVSsdK\nB2voZ2MO8IbsRwWain69USX8P53vZ7dpZxuOru3f/VrhFXavxXku5EF4qiPq\n6bVixh8ZLasaTdjelStaiejPO69pCuQ+hoo0Bb2BLZpCXJFVjqVSSM/XJgoc\nA+60k4ZwZFeJyrbC4uRNpXe+ZbYUD4Vy4X1Hlp6Z639PkqDgBqDvhMWpfvQk\ngMfyiTiZnf8bBachHhYHaJ7Bmu4edj9THO7RLn5dTLuxaYNHKycezuxsGmYA\nQhC3k72MIW6Rr4IzaUJCe+0ciAX60zWPs3vqOCNPCTIg8FGc6WEVrug6WR0Q\nAiU1\r\n=6sBt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"82509cd2bb1538974bc4733c573e408056b8a7d5","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.4.8-2021-06-newsletter-82509cd2bb1538974bc4733c573e408056b8a7d5_1623676398321_0.541974139289908","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.4.8":{"name":"resin-emails","version":"2.4.8","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.4.8","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"55a60c5b55f626f802962b819a40aa733dd03525","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.4.8.tgz","fileCount":187,"integrity":"sha512-KLY0qkPLQNOdsJXI6f+MBSDz2epsWlcGOpb7HkSftQlm/pgbqIdqGGCcFt7y4t89Eil8aGjKLxOrLn9yP4j8xA==","signatures":[{"sig":"MEYCIQDnWySMwfXo4NcKwKcVEYWc6NwljEGylP1jVU/9QIhc3wIhAMulSkjxoh5IdXsVp7U3Zm9hfCkygDFObcCSMO8ZgU0T","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":17792304,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgx1cYCRA9TVsSAnZWagAAzWAP/1ze27v+SgRTZAF3HgHn\nip+eNVyaYBWTWrbNU2RcpAqg0OHSyJviz4HXsoiIogALfi7BHE0MYQZKGUrG\n5TkHNJ6ZaMIgED+yExKxN1lw/Tyv1Qej6uHp+Fg1LY1z1wUjMVMs50czty/d\nHRxJGBbPkxY/K1aUCoc+i0MllJuoFr3WcrgVPsBbOyYqxPTLeoUz0sYLc/DY\nP56zO2bRNyL+9WRWbs5aX4XlzkH2D4C6Xkk7dHqEZOmYNWqEoUUlYYn+uZEf\ngFae5b//L+71ViL/V5d8/6gDZD/6EgOFyZPaOqZuNbsAiBMdI3dK3W5G6XOa\nE+qQGoBewFRPzmqcoliKDoR/EsGLlAvt9Oo4ixHElK/I2TqNEeLzM6091kv4\nRxlMabyKfAnuPIGBxJ7Xz1vUsHHoyfRygi0nKhyt+qb79fCHbTrEKh1r+8lF\njYibAxjHjffKgKdSnGhdJyX1x1vfSA0ZuJmsDlKkvWvjU2/Iy48S/DEbd77g\noqAMTiffQNOqJtwDEE78qtqvL3aWd4SY13UJitgB6TptaKH4CKAuALOzCheb\nW283KlWPDvIAJlX8EvOblK7BP8zp5tq94gNQ0SJEX3EAot/PcvhnmrDQrr0Q\nQx+2u4u81lPDmfPEZGamEYHtKOi9p9wcF8WKI0OG58AgybVl8PGbBxAjCA6D\nIEWD\r\n=lxcR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"766447bf0c442e9b67b886bca2ae825f250f78c7","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.5","description":"balena.io email generator.","directories":{},"_nodeVersion":"12.18.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.4.8_1623676696114_0.16293067534420325","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.5.0-2021-06-shortage-ada325ea9766afc6f8ba214fcf47a78b35d262bf":{"name":"resin-emails","version":"2.5.0-2021-06-shortage-ada325ea9766afc6f8ba214fcf47a78b35d262bf","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.5.0-2021-06-shortage-ada325ea9766afc6f8ba214fcf47a78b35d262bf","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"cbc83b6354e0919819e4a2017adcad4a2b6d283e","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.5.0-2021-06-shortage-ada325ea9766afc6f8ba214fcf47a78b35d262bf.tgz","fileCount":188,"integrity":"sha512-z5vskUgSN9SoydRIpzKZvA37E3LN1IYgnNruIyRJqkzGxcrO6S5bWhabgo/DwoiJ67kyAgIMSZoqLPSs6/WJ2g==","signatures":[{"sig":"MEYCIQDa4du6iIHInxwYEuYqDhkTX47nc97mmj0odXSsTLGtfwIhAIiqBnPvb2C3kZA4iFlMWHqD8GNZLliVlCfAIxB8Q0KH","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":17793655,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3LtzCRA9TVsSAnZWagAAKjEP/jR0NT5STA0m3/I3+p2G\nJah1JUPuQrttM7jN2iyvHlaLus/sS2Xjy2eq7cxeAyxLhL9lNuAeB14OEfwh\nf5Lo0jOMhuOtvhIjGy4e5Dkv2gJDtT1FQQ4WMQLnwww1/jAFChkOBWciehoJ\nhDuklQiKHxYU1T8IuVfkO0uBVx/2CwAiFyqMNJbdIV9ZcIHMcz2u9SjLAbzn\nfTzd8HwMRWmHAxXUWNNM7A+DTZ+LwQuPjUf0y5iedvqZWfGqOe6tS/8bdDDX\nr+hLNlQi73iUdr7AJIhSLs6ZjPPvS4vi2q+NyHAg+jlb9DnqhA6WWQzyUQrk\nE+NE0vPJE05rYXMFrZN1diJYFuQrKFDgxDabvthJX9e1558LkM+p6dsKCGCc\nmhyW+9biKt5QqnPBjIu3BgHGp5ZwXZQKmkiA2HQbpttBVtaj5id6YSqSR8Ee\nbqy2cGYsuac8Fg1cLFxGuOCxLfLiNR2SbOMYZGaPu9G8RgwdFP4OOFtXp5M9\nPlTfh2dbBV/8CzfENrHBYJMzjctxZQC3/vj4TFS1jR44byEj6kaqMBSZ52Id\n+sMuL3XqJiUGbSlE4nP271wN0unR5ah2evYNc8vaewttux0pYAdirToTsmuJ\nFcNzDSvgJuENTqhws4V6+dcWMoqj07lxIndVRuvoLsZRPkWW1TmxV3FDfDE3\nSKvF\r\n=V0Q+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"ada325ea9766afc6f8ba214fcf47a78b35d262bf","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.13","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.5.0-2021-06-shortage-ada325ea9766afc6f8ba214fcf47a78b35d262bf_1625078640725_0.6253431609096856","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.5.0":{"name":"resin-emails","version":"2.5.0","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.5.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"87f4242c7e75e138f15565f1da7479e650dc7f82","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.5.0.tgz","fileCount":188,"integrity":"sha512-uSWkg2iIkPvYpNSRjcEOnY1HqyF5bG5tEWIMFqya2yNvUD4J90bOAfkk3bdsZTOJEdfUPwmIw+ywWdHHkvAW8w==","signatures":[{"sig":"MEYCIQDH4y10I6xRkVq6pTcK55qMo0D7p61lBHlfpqXMlHYsSAIhANQYLZgI1irhZqSqWDum8R6fb61PH94ShdrruhN5AZPQ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":17793597,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3LwdCRA9TVsSAnZWagAAypsP/179IY4Mm86hbH/j1LzR\nDtpkrC8oQZ4QZeYarAkysz0GPj2g1cUXOizDX1SwsR8wxeec0+yonK6Ldxz7\ngea70Ns3DN147GG+I2b8A+dE23Sg7Fw4DAKQg6STvSZIRjGdBmE5/VjHEfDQ\n5BbSXNGYtvK5gqTakU1rQ37Oc6WiJZqiYQOCrs9o6IaQaG+e3Gvw8QouoZYn\n+5xDfj+aXGOgdkCBQYjpndPgmjNRT4ViHuRrN+YVA3OEnsdpZzXJ5zQfi/gd\nAgnKa4B4TBN9uMvaWpi5DJL32H+YSyHECYzMEGUo3RbXCxKY7lYutwQ6z67H\nGzOi134LlhSEBatf9NzgUXNpH1SJILal+IuBEa7x6ZRoaHbufDtMaQijPNgd\nLFV3Kk2NqfA5qHybBigPSXEexCifUHyM5mthsK2KIZMtZIgDhml4g5BB+yBU\nhjF6/o0JKBk0PvUZJNJbAyAvsyk3P4YhrPMqoyg6ZLA492c07lTEg6jylbYi\npJQX1QxJiLfvbT9eskQ/YoZiv1PUxldtvlAafHgHJmWpMspA5o+nOpDipMi1\n0Vtqru3lD7NqK3xLfPW6yCovgXoQSfLCd7CmeTa/YTEMNXzZx/1BLVWgSt5w\nP+gPo9caJKx3xYLiwSem+8fh+b1YqhYCNuyXvQlrn5t5pQAY1rpUmawRlLRC\nbDLB\r\n=hiCd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"3688a84ed5056d8a71f89203fe4c7ca2203e56e1","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"_npmVersion":"6.14.13","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.5.0_1625078813155_0.11319751175476056","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.6.0-2021-07-newsletter-aa5e57848a37af949a90bf93455f474f8c299489":{"name":"resin-emails","version":"2.6.0-2021-07-newsletter-aa5e57848a37af949a90bf93455f474f8c299489","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.6.0-2021-07-newsletter-aa5e57848a37af949a90bf93455f474f8c299489","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"a211e6715d634c8564b0a2da3a2b9f5727b64893","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.6.0-2021-07-newsletter-aa5e57848a37af949a90bf93455f474f8c299489.tgz","fileCount":193,"integrity":"sha512-3ypAj6k1VFxebdYFQhU78CEjbeXtIGNpYs1fI/a2jF/8I7P4bHaxJDGiHh+gyc4qNEtKWeNZOZH8mh8eM56dCA==","signatures":[{"sig":"MEYCIQCy3gQN5cth9YHJ7rPj35inDvOeDytpSucJ21P2rMiNggIhALbYFejxGMlPVWou638+x10UqE9mm33OCniF6+vAz+ap","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":18315439,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg73G7CRA9TVsSAnZWagAAoH8P/iVWj5aGPaVaWdRqE/dK\nSnxCtY3G9W+yQ9EjVF4Bo5MVbOmCtD84ujIzVh8ln0qKZCzWoDAseC5X7I7a\nNzeORX+XbYPnj6Pt1G2cUzYlUHm54hmWyyogZUYXPPKT2tcECWlmsvMaLgfn\neRA7uoFNrx+1z7B3PmGHmxlADPTtPkuYrFY0f7R9OgKfS6EPnXBfCO0lVqjB\nDArqcIVwBquAd0rIYIHma+NilDKucU/JzszOHNrIi1/0oM9n9VM/tn+FQJdN\n38+yZMemmdDjhht+LF7dwIxRYJJAqrEZXmc/i72q/pJtPaQrmRAwff5/8y2M\nqdBrkfBVDHu+FG7UV0KKjUIk9X4GmtDe23V81DtugYZsarPtK5i1RimtnJ4/\npKLA7s7CeabsIU1KLWi6oQPS+3NWxqOzJGi94uMuxPdwzVva5e83QmTwWqNB\nhtfuto06+SQ72/6dpNpcoTqxsGmxtYGDhOct4sGmfgLxm78IDhTlQ9Wo9rQi\nHxyiqnJ8Juxf/7+3v0fMDCdZ04J6kajm2xBAGWD8Wb5U6O75Yf21ik+Y9j2H\n5EYEq7YfvFPGZBZEfrgEEZ3v2nby9hPBhoY83ov/5p/zJ0hihACVJfzmByDR\njapkoriVHeyDpnNCcEJxGzsCEy+yZ8ZWLdxmYt90ev8qAXEYBtAEMOtf4u8o\nk6Wr\r\n=Fnej\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"aa5e57848a37af949a90bf93455f474f8c299489","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2021-07-14T23:20:26.824Z"},"_npmVersion":"6.14.13","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.6.0-2021-07-newsletter-aa5e57848a37af949a90bf93455f474f8c299489_1626304954681_0.8184107352018757","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.6.0":{"name":"resin-emails","version":"2.6.0","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.6.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"74101a147c42929f9998a9e9b1e2cd3e58e5d495","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.6.0.tgz","fileCount":193,"integrity":"sha512-4gCd35I4cyD/K/+zw/FxwLShxgNryBcxMLKCZOwgw0NhzdX7iZigFu1JsKIr+Rune1q3FftRFt4G4lWaYQiHGw==","signatures":[{"sig":"MEUCIDIiAaytKIOwQTo9yYnKgpifXjvxa2sedvweOAEdDpppAiEA9Nf0a3QyNu20Sp5PNBzkTXcb+hDZAqlvTlhqnUrwzas=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":18315379,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg8DfTCRA9TVsSAnZWagAAJzIQAJtQi+ndXbHgGiKf1lba\nSgCPTxZfJayPVhZI946hYjNxP6YPGrf0JWxyXJED//dXjFSytVuzIfNt2jC+\nqfH0JvEhzAcVVRA/LXHCS8yyp93EFgQkQoEnpmUM6KQYo3lKu95UIkZxlRBB\nIWRQJLr+wFOuzGpAgAbNQq8XPvC/0xRCt8QV6qp+rlg0p6L45RT4n58Dnw0g\nOuZi6aR7qjxnetxghXBA4fnulscwgpdnRv7ZG4NPRl/DqDpW4X/9HPTdGmCv\nFygmgV/SJsfbKdGknlkEdgWnHA8DR5v4EsyDh9VYZW+vswNyBWH6AIJEtwKQ\natI8VN7ixjeh3f2OVNmtjuwJoD4kFsFZz9FZ/JzFaQjyzuJmWIOpPAoQ/Xu8\nQVPObOSObIYdOGiEr1Qq7pgUzzjz+NJ0eBdblGsU4joIubWlbea32OtP1Rya\nLu97MaMBEXk8IOYcsHNlCkZCINwiSwYYN2fgVHRCqJe4Y1+9/Z1Fon4gq0z5\nuqzAejfLkBeRZtWVa7rm9KIjGYdZZes08LnN5S9WiY7G9IXuQ8r0FKBIYjpm\nUlvfcvOWaTQ8H1owpM4PYekI5IWd+/pELKaq10ClZJGvtBdW2BwMbLl7dFwn\nZa+zKHanzLlUX2JKkW3pJnwzgCxR9GzWMd8KsnYPfVEau6vmGPEhk5DYH6XA\n8i09\r\n=L6su\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"7251ae7768b125b5cec25c7d631e4ef9dd782edf","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2021-07-15T13:26:10.620Z"},"_npmVersion":"6.14.13","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.6.0_1626355666713_0.8368985499537276","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.7.0-add-apps-fleets-email-75b885288bc73d8d3b8c6ddeaec626db57d2a869":{"name":"resin-emails","version":"2.7.0-add-apps-fleets-email-75b885288bc73d8d3b8c6ddeaec626db57d2a869","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.7.0-add-apps-fleets-email-75b885288bc73d8d3b8c6ddeaec626db57d2a869","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"c716839e23e0f973cf87d2a475359a9453c70bfe","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.7.0-add-apps-fleets-email-75b885288bc73d8d3b8c6ddeaec626db57d2a869.tgz","fileCount":194,"integrity":"sha512-NvhnlIquXdRtWQ6o9JZ3rePgoen9C08zd+HvHBD9YNjC0RDBgiU1WQC3yLLcFHedgCgi5udAcUwQp0zJm7jRvA==","signatures":[{"sig":"MEQCIHHD3MxPr6Bge77TU6araBFfO1etqY5HWZEWC0QTrOF5AiBDrQxXDOMNoba823EFehtqNfX1kU7X/qPFglLvUuMM9g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":18317398,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhDHPECRA9TVsSAnZWagAA6O8QAKF6Z1yt/nUssywCFUoZ\nj31AM2w9tPuRA+Y+/DTqDhLZaec/8DsQg+CV23ao0YD+0uQLZEnRR+9zPhgL\nSKlG7E725/KS95M95m2pQWYp9vHeQfdcMUg+UzjU1QK9qk3AN4musaP3ccqf\nAhcUKt+TJsioMfTeAq7U3Vp3GMujBDkVa9DK6R5ygmlnbbTjSpj4z3Pg/CgV\nuhn8MH4AqGOy+OLIcBDFHw+OnVpHV+B0n3xlRkfMrpqieV6D0nguS2SQHyXp\nGzuXyE/N3RRIr9/vHXLwD4vsUPjQp/Crfz+1uZRnVg0FOMvyHRVhLssjoWe7\nrq3ZqBIBAZZAYPKQtKLfDmw8rTmC21YtMqbCUiUHRYpSRzRAWL+4l8iw4yMv\nvSlJ8Bp+kzOOmsyobBCabis/X7dX2q0jGd87pel8m176jvDwpcA+2UlvBceX\n8R9cW/8G36VFMM83IlRfMAqLLzaH8yIPhcX0i8J4eW7S81BrvYAEKjdzbdeG\nonl1aWNLd6MvI5kRKRDAcAE5iIosIwVtKAZyWoCgN/2SqM4eh8MnTX6VD6uY\nbQtSAyOQ4MVrmz5O5gttTpPQudh5Z7zqOuAs7uCXoOER4tdkyRmn/0R3t+MQ\n3a9sdk3Y9jfyyYmZv1znCl5BkCTHHWvso7rFnJ1sBnWyFa4K9/xyRYjMrs3A\nLh4x\r\n=rO+8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"75b885288bc73d8d3b8c6ddeaec626db57d2a869","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2021-08-05T23:24:39.240Z"},"_npmVersion":"6.14.14","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.7.0-add-apps-fleets-email-75b885288bc73d8d3b8c6ddeaec626db57d2a869_1628206020025_0.5158317595813939","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.7.0-add-apps-fleets-email-3d37f9814e372985260cf1f2ba3ae2d304919e1e":{"name":"resin-emails","version":"2.7.0-add-apps-fleets-email-3d37f9814e372985260cf1f2ba3ae2d304919e1e","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.7.0-add-apps-fleets-email-3d37f9814e372985260cf1f2ba3ae2d304919e1e","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"b1a3225d99bbcdabbf0bc09e6fcb771d219435d4","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.7.0-add-apps-fleets-email-3d37f9814e372985260cf1f2ba3ae2d304919e1e.tgz","fileCount":194,"integrity":"sha512-sDmy+A869/uj7i2DFwM3nLFh49x2ntVaJyaOljdRJN1mvlfJ1gXocNB7NoLRel+h2hleCVcAn8BtMEwafmeYCw==","signatures":[{"sig":"MEUCIHEBOor5NJBep6BSM6+ISpJysqEtBvnQXBeEHHbemo14AiEAyNK79kLiueZOgLidWfXdPIXqfLElDhIhZblwciynuJ0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":18317550,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhDVQ2CRA9TVsSAnZWagAAB4AP/278ySAoBCbCWtzQdUiq\np41uJkom2CYLUGnkC/L9OENcDqLy57B69B2U3KCqKtKTLUy5SlaKq+tpLPXc\nm2BAYbw3PwUSzDCZ6A6v7e1hCs7EOpURAzZ9FqYVSbHPLPw0WVP9JkmrpuK+\nVivQyVQdP019C+hd868Ew1xVMOQFq7eUx7WUACB+ebpNbnTlcvMxHg2QPNHF\nU8q0QZlQ7HZ7eF+RPxMYKTVJUvAnhjWcZZkwK5wZNwkOBdxNO6vRtGdHNMpN\ng0tyJq+zLGohookc54BSvlfMIVobxJ1OiNKgj33BF9zzcDXaABNe9gvQB5kc\nfxiTXD5XuD659AKjaWQda2QbCxLkSB0g8nx4S4mqknRHNOjaAxqj5p90F2JQ\n26BibU6vTbsmvdqeR2FWJU+7G6OJMzpzUIT6VKG+bCLEerH/lUm0E+F1H0aL\nc4u68WdF/qoQEXcsGDEh4AX4FQ+LRYmIjoelopKVpPVuPzAqIFuHylnvccIf\n062buJM1YsagaL5JCxlOL+rbR1WdPUpUo2IezZw5HH2sF22/CX4Eje4+hIcz\niPC59/d4W6nRx0un0s0qT1fpKnST1hok0+dEIEGNxTPkx127ZeHGQIWKgxGC\nufx0gu2wNTPjiBtrugget8bcUzBJRzVCVHIth8jz4kETT4XNA3VHufh32F8l\nb/gK\r\n=QLhF\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"3d37f9814e372985260cf1f2ba3ae2d304919e1e","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2021-08-06T15:22:10.931Z"},"_npmVersion":"6.14.14","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.7.0-add-apps-fleets-email-3d37f9814e372985260cf1f2ba3ae2d304919e1e_1628263477441_0.9818288642665651","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.7.0":{"name":"resin-emails","version":"2.7.0","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.7.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"78a73002cf3c98f66e55c48f04cbb297c43664e6","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.7.0.tgz","fileCount":194,"integrity":"sha512-dDA0rTOfBK6uI3v8ZoOCjYUhj4Ft70THz7au7IBp6x+3Xj4V3Oxax96HW2aBBvBcwBA6A4h55b08Ts05kUl2CA==","signatures":[{"sig":"MEUCICi8V0k2vJsnJgTXWl81eABF/WcJSTSXypBxhSQEmz6jAiEAiE/v8jtUlaxlGqC297KOzAUQJ/mqmHuUro/JSNbQn8E=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":18317487,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhDWFECRA9TVsSAnZWagAAs1QQAIAmwUnkHBHCrG/6Hh9A\n3DL7Akqs+3T284vReBaaJ2M+ZGncbJ9tXcCPAzwXy0T5BQB/5fMz6fmai5IT\nWElg5huzyfyg+Nr2L3iAmwUaqrPOe/sZ3TVoe44Vf1WlCpGZqQO+TQvq+ADu\n7acJ6lc9i6IkfIuAIvJgGYtI/yRtUO1OctAheoomPdz5BspqafgvKkbP/W34\nzFUuUxx4doglf/UKMcRs60JQyAGK9QiuUtV+rZtbfUMevSINFgasp68OXISL\nDX2taD+Fr6yZQRxU9vX+RUpgLLhILg7wLCsPEWzcKpLeQQlc0F7K6p02HIAV\ntsZiwZQ60PnnngqvDm4VREHOBNGyPEzVma5RYMp0Bf/L7LGrwQw+Awz3dfTt\nHQ4UMUssm8IYgDhazJnSaUB2lX1jMIq52qjcfTeoXqHVEto13XmmHdwnF1H4\nJhYsQgfGknwPJSRn08aP6ma5IvTf/kz0lZrhcabZDDd3rKkIknu56f0BD1BW\nNXL1sd5Fy7O24dEJ9wpKfVpmNyGLsFUDdZI2uHaK2waJTWJPSgAopPcPUQwm\nnVP1eBN1Dnf7beykFcWJn+ME479jyqq08fwMq7i7Kj85ecR2IPn6KOudNWHE\nsYsEgIxvdkP2Gti6TAKc9Y5iQA13tLURWeT+o5c+nMANpEjf+CphvHwUVOVm\nqZEz\r\n=IzcR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"1004d3a50c3ffcaee1d68e66b9198d03482f8b38","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2021-08-06T16:18:23.055Z"},"_npmVersion":"6.14.14","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.7.0_1628266820139_0.7110341556409687","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.8.0-aug-2021-newsletter-6ee8df75d4888d90ea3801f6a90e8f3fe61694a5":{"name":"resin-emails","version":"2.8.0-aug-2021-newsletter-6ee8df75d4888d90ea3801f6a90e8f3fe61694a5","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.8.0-aug-2021-newsletter-6ee8df75d4888d90ea3801f6a90e8f3fe61694a5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"d8a22b09153e5687f022ee8f891ddeae430c1271","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.8.0-aug-2021-newsletter-6ee8df75d4888d90ea3801f6a90e8f3fe61694a5.tgz","fileCount":202,"integrity":"sha512-T8AjXrIO8OXxQk0V5iDr5pOSJ38CYE7yFS6R7JQOr2drIwWD+S620CVi/9PUaq6Nc5YGo4esFnAjgSxWQcQLkg==","signatures":[{"sig":"MEUCIDdGI8BY2uRacfHLKhfc4pmHu3keXyi7xHWg5mkjmfBJAiEAqhCYVjZY33FVTJr5DJTYnIHFZ8v/ZDGAeFL1+KLiyUM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19252029,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhFT0FCRA9TVsSAnZWagAAqK8P/ReaK22KYxiIDRrynYAN\nWzvgS+l7sdPCOliCDmlcMvzC3mIv3fFTFNGyqH3xmsIHbewF0qfgpQcCbjG7\nu3ZvSNLpmh1H2gGQJzQLK+P/+SsSG3l770/8EqHdjAFS3YyOIIs6ZuSCA6qQ\nn4Aop+J2MBTfURN7OwU8yhipW0FaFJji+QZNOLeo0wkpkKyxqJ2cpjEpnqmE\nPIiEi1koykfwjWW0leBVgyvCITgNX+4YZjhESgYA3+QVdKwofIlOeMcfDLRu\n4u+9ckl3zNmMAe/cirJnHshsgNjrnuL6lN14EzuqaOGULyB4rr8YqHTY1pQy\nsTSZmD9QqkgNqvg2wQd59ohaR/Tq3Wt3HzRt1MA9RFoSuiVA4YWigo/+Bulu\nlqtdq6HtsF7APg2EaCbwEoMtFB3K3u7S1GYpBTpYdnvlxqtxXI9lcRckFWaA\ngifwA6b4aWV0xrQrRBbzE5eq9kxXR8IiHcpk6h7nAdvdLMda31CImSYSN5yN\nmRT0yXoQeZ0SCxdumIxGF4kK5S8Ys4FQrQbzz+81vc8ZCKSZDfHa6qYvKnFz\npRfPP1eGixMxo9qDe9xLnd2KR2Qak8MG7DurYJ4CfhnCrE66XQqvhi7sWprN\n+NPe+p0HiF5/WZLOMPEnCFLlT/MRExE8rB+4E/NzzEIxS4riZ2uD3Rab3AIp\nKrxz\r\n=Y1/d\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"6ee8df75d4888d90ea3801f6a90e8f3fe61694a5","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2021-08-12T15:21:20.355Z"},"_npmVersion":"6.14.14","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.8.0-aug-2021-newsletter-6ee8df75d4888d90ea3801f6a90e8f3fe61694a5_1628781829005_0.5786274764282655","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.8.0":{"name":"resin-emails","version":"2.8.0","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.8.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"762ebea8b05229c3453a49426932a17dbbb2a0ce","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.8.0.tgz","fileCount":202,"integrity":"sha512-fVNd3+cOOwMhwTLHgimbq77J1It0D+V8pAk9jdO6UmYUG7vUAQ+nloq6UrdIqqcyP5SwzwwmFdxTasWk3zjmrA==","signatures":[{"sig":"MEUCIQCd8t4K31ICOBTwcCGDDb5owbWoS2O45yJsmgIKGQv7MQIgNUVtBfacv181edatAsi3dOQBHx/H0Yrx9hsjKVpnQtQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19251968,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhFT3RCRA9TVsSAnZWagAAq28QAI1j0zEWw1K3w0UvqkCP\nAMGiV+jHit0w4DaeyFNsdxPR6gRqziS4hKrChZspp+rxDanJIkivlBxTH32z\npc5TPO0Bu5ekcLcfOwTOOTM3nfT5ovCxiNN7KTTRSZurn8To7qV+HAYi13xf\nUp5mya2rFTFTV3epan5At6rhNHN3XRgOzBBYArSQEFQAkqBu3pL4obFSE5sQ\nZlwLWC2jfIyP1cWRbeWErGujfB4oYxGTQQ205HtwuNAtkXMx8RqliBfBzz2+\n4EpIKXMUvTlDAZAg7sSe+4IOS8n9/16RAkCeElh8OSk5edDGGpFbmbvxT4oG\nSAA/j7AYO9ILkGSgv8ASODC3BWCL29l4G3KsI9Y1YZEVGPqHrpzXNIrw7loP\nGJhv2LqT02KjFXz6lJcI01d+RaklLNG2iuXPKiel/WWXOlkOctkhi0ccnNr0\n/GV0YmXI6EEzHz8MKHPrgNxH/z7fMn9rn/Ui4p19GTjxRmG8F3DDsUvDDxvo\nr3/S0cr8kOtiCmcVg7LaNBo+iJtNNxuw09LGx0fwOS/LzhITCsHpchQbOUxF\nTljZUOsfWe66PYvXKjpLbqAdrAIgjHQg5+jnQuo48XfwBm0YiD44KKkhxeax\np9+jb2DB5gmiyRVfDghnV4LDpx2EbPSEMwSfJwYDnlARH+Fu80p7yAquPupn\nSTmK\r\n=QdSd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"ee4a66de2086ebcc5090874a83eeb116ab633f96","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2021-08-12T15:25:30.579Z"},"_npmVersion":"6.14.14","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.8.0_1628782033065_0.5007335345313231","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.9.0-aug-2021-news-fix-6f5905cbf8c0f94f5a51319f96a462ed1530c03d":{"name":"resin-emails","version":"2.9.0-aug-2021-news-fix-6f5905cbf8c0f94f5a51319f96a462ed1530c03d","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.9.0-aug-2021-news-fix-6f5905cbf8c0f94f5a51319f96a462ed1530c03d","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"41272e15772390da96d0ee249b70521b76f1d621","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.9.0-aug-2021-news-fix-6f5905cbf8c0f94f5a51319f96a462ed1530c03d.tgz","fileCount":202,"integrity":"sha512-1AGTTXAbAHyrWdLabC+gOGhzx2x7Qd0m0zzQi1DdQ/Q2wo1LW8W17ZlfppyvmERAcOO/AvF/9Ev0Q6Papfe4ww==","signatures":[{"sig":"MEUCIQDSUtfOKX7u7eMCjrhtmv7O5eQlD+6JItfPFgJTH2dH/gIgV8DiHlf3BorKQF+wG4vCfAln2Or+ee4ZXVeiVnqZgZU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19252480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhFViyCRA9TVsSAnZWagAAaacP/2+Z40r8GWvuTM+kYWDR\nxWu6b5d/cel14Gg6+6fj7YkgVcsxkCpfoMv+xhU61Gv5lt7Fqix157LBnlFR\nQ+lr3Pp2fGtX8tmnm/K1tXqGRNvry6NkC5OK5Ki1J5+CWDBnDeAN9YfrZT2B\noYYl4dGe6920o9mBYXYStxYFu8Rqx5WxpWWC96KJNWBLkL8mer+hP03H003N\nkTq+v4W6JytlJ057Blmw5XZ//YgXSgNukpcw6u171Y+R5s8xSWIiJXYbYI8f\nXJeHT29O7Od1h2VIaf1SBVvxBtCbPqgGwBeTubciW7N+fuwjELBmLX5lMy4/\nK5xCgPggoAj70aIkOmAdIJCoEOTpsPKzko+EzwECVzMAnjfiLfUC+Nq/hjAk\nXpumZNx6uCfzDOL3FlxLqTjziz9ORJVcj6Ar20cubmR2Olr2JZruCR90RXxR\nmS9fLjF6QamxWgP1dfgVCGcmE8XUJ0gQLr3iVVK4C0HwPPA0E/lYnkR2IVGe\n4yI9KxiZJIyQ04PPK4PSBF3oZ8/63Z7zoNUILYCE1969exRubtvHgMkN0LfT\n9Y9Q5ohGmACNxNnqviuQpu199HhGknX9NKoFwJ5FX8JQzUIXUXJaFYIUMI7Y\nDH7Z08pfKkGLMlP1bgJOxWs7ciYQdU8BJTb/I/8EYJt+tlpOfOp8oAQDK3bi\ntp6X\r\n=59A2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"6f5905cbf8c0f94f5a51319f96a462ed1530c03d","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2021-08-12T17:19:10.704Z"},"_npmVersion":"6.14.14","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.9.0-aug-2021-news-fix-6f5905cbf8c0f94f5a51319f96a462ed1530c03d_1628788914378_0.29637429127892134","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.9.0":{"name":"resin-emails","version":"2.9.0","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.9.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"de0a1310181644e69975eb6e128a7c200583815f","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.9.0.tgz","fileCount":202,"integrity":"sha512-h5Fgm1sK00XTwfoHssq0g4K9ctITs5UrWP/uXr/mppxWLrAOV6HSlScB6HLk/+KFzdruWuXgC6qJN8ptx06WBw==","signatures":[{"sig":"MEYCIQDwR2TpqsgJnnTl6h9jGvRCA/PeOQFGXegonYSdU7VB8AIhAO2HikqfS95nCcH5X8FRz9mtxYiSfNX0M8yN0dmiPPBe","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19252421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhFVlUCRA9TVsSAnZWagAAhzUP/1CqINYSER5+n1rpy6bK\nXhLjQOaEjvITFycd72u6ThBHNPO2UCdijqh8QNQQXgxhnIH8LMjrslQJJrye\nE4ePoI2RaG2Nz0Kkz5p7yl3U1xt0GYTpRC8JJXA1lgjOXQdBQcANB88az2+j\nbna6grcagjtFTmNa0ugO8qF7lfnOVvHZuGC/9CLDoUhWONWkSCUWg1Ih1vVU\n8wkjnV1HEeWSjhR+zrylBcM1HWksfyzCTGhkIV2DA5ObOUVRazL0X77U4HVn\noFG1AWXzjgD7z4NR5NJgO3xuwk9NAY8xdU4gq/JvHwOjDw+e/byiA7ZI0Q+Z\n5dx9d4qeoli1829IA5k/IBsKJbAP3k1HOsRAK6WrGQNAaSiP5EG3m71h3G8D\njjzn9vciZSwY5buzDdzmDrH/H9n/ge8FRCfP3LNAL5273byiL6cH0w1EQQUh\ngJvx9GJE4xnXv/IPqPVH3M1yfliRRGqXszHNWih+V02c0ooGuduYntEezeny\nUNxQUx+Qbss2QWVTWQoj4yLrw2reArV9BomP4seA7ORfk2JVL0mz1BjiDxjC\nPoSpwchxWtADgJzSX/3sZ7J8cDzMAorEfsLE+ZP5A7axdCceZCgO8x4EvTM8\nIJ/ugg+n+lFVsUBXm1qvtA0b/g89lBJKfg/X49fge8ezqHPeoOM+MGCFbsWU\n815R\r\n=MbiG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"8a84ee89ef19c0c45521462f6b36efb4eab044a5","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2021-08-12T17:22:44.528Z"},"_npmVersion":"6.14.14","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.9.0_1628789076034_0.7375749457944312","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.9.1-andrewnhem-patch-1-473210c984c97d50bdef7f51c827d1adf73f34be":{"name":"resin-emails","version":"2.9.1-andrewnhem-patch-1-473210c984c97d50bdef7f51c827d1adf73f34be","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.9.1-andrewnhem-patch-1-473210c984c97d50bdef7f51c827d1adf73f34be","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"087f5d4ef6300048376863015f135b6cc36628ee","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.9.1-andrewnhem-patch-1-473210c984c97d50bdef7f51c827d1adf73f34be.tgz","fileCount":202,"integrity":"sha512-RHbeqZwkq3BdNLtIuSdutYvVAflLK+jfPNYRNp19KckSEItuKzRa42hOYeuPjTIcyKAMcHdjRChbUfFNdhb2Cw==","signatures":[{"sig":"MEYCIQD2U3e58FZLaWopSB6FUi2veqhKMjU2AeUzd9BTCw2ESgIhAKDwEyPAufCsipPxN53gv+Yo+YrAucts1LKKTRlOAntx","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19252534,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhFtpaCRA9TVsSAnZWagAAO0sP/19JRSgbPE/voaPygmJJ\nV5Gz3AI08SUUk0wAWoVjziU5RzugFGfqu0fSj4wwa9EGgSn00nz5gubs6dhE\nBa7GYmcqHKDbASzGeNJqgLPLbANCwhE4GtcMlwXGm85ytZdPEmuiOnpvh47v\niq9zMI3RJmWRDkC9lEllaU3v+SqNLTNGSUSGG5NcH5LISLV5X4XUak+r/RCu\n+7aA7hqBWOVahzjP39SKa439HKSj4E4V9ZEwaphbB0ROBnlPcIYwB/US7C6c\nOVoUCd81sgTNPfInf8MEG3AumUnlQYrbK5hasW62VtUItGZQmxbUnonCLrS7\nfrVCIcOVJrkXkw9nU8pWxZdFrngZ+QvM7S2WQPPVMBrBnWDCA5D8ysUwK4Zi\nkfU+pkFwyjPp68PorCZqoNOpuFCoSUbTs1ZKeitikPx32Sh5373HDnMFNNGC\nOOPqOXpTm+0ONEMO4aLoL1iYQv6T70tJHQd3ee4Ulc4rSMTg05gr+hyBLqIQ\noq1X1wilLrlaT+wumUs4OxjK5hj9EQVcorJvv78PSWrBbrLLlaQrXH1ztMuA\nbM1sPCmi1i68RF/EJoAKBt6mhecvcWMM3Ln9v7j2815bu/fbe4oYLVftewWF\nsos5WOuticFc61Ya5EPezmO8y4OxlLoMX0JmMqUPBejHIohlrWtNu5h0BUHm\nDEhd\r\n=78lp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"473210c984c97d50bdef7f51c827d1adf73f34be","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2021-08-13T20:44:06.161Z"},"_npmVersion":"6.14.14","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.9.1-andrewnhem-patch-1-473210c984c97d50bdef7f51c827d1adf73f34be_1628887642514_0.62578673800246","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.9.1":{"name":"resin-emails","version":"2.9.1","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.9.1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"2c0ce228ee9158839ae1e6ddc9b181e02ab7e8ca","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.9.1.tgz","fileCount":202,"integrity":"sha512-tLREIR+F/iu1K/u81rkyAuSSJvpQVQ94I0xng3w6F91wQrdScZE9rR9JzpRdZtgGeUhanGduWBWd4ddyVFTcQg==","signatures":[{"sig":"MEUCID0HDAOak5H8h1v4Z/M7CnIhG/dQFrMmJPguVtCJqZKoAiEA5FLMzgDPOowhpJSM8IF7rLKEqqWTRpBWT6X56JJHPUc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19252474,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhFtsOCRA9TVsSAnZWagAAG8QP/3A0iSqQIuMcuSg4WJLW\nS/Opsi83jGvz83+wlMlAxMPFGxjmLgitl3KYZttJIqQsksnZ7heW5sLhLWiG\nZp443WX4hcL3cl+X9L9l+hqYLv9q6EaAQOBPj/2OGmqCNN+NcMSjkND4kmTF\nuxK4jeLgtjh0BSkU5P/pa7ZpiwQWS1Zcg6HgdRSvRaObANxmDDIQVBC5shQm\nUf9x47cFSDQzYV0I9nTz/qltIEhTjFSD/TAKM5kuPI+2cS81XkZVwmYREbny\nZVg3cbJF9O6tETQ7MZH5tTTLI7JLY9SfGQP24JSX9l+tq10pq0sdG7h2PQxu\naP+flhDnStEdrf4ZXoJWWPlmaK/+RbAF/xAGcP+7Drmq/99iZBoAqlkRbCms\nyrOH0xE/ibx2HAkHkFTXH9s1YT6dIs7O36DcrgCkU18kVr9i9zNTwZ8dyXI3\n12sA8P/7Jda4GqPVCNFGPuwKhxsirQdSEy9OOfErO7xS5V+1jhXuaJF/jb4t\nKVExf17SCmTkyGRGKMLmXzp2DkECvhlfOw1wAyOR+SSPtDqezbpnGw/tyHK1\nyFVAIk4YHVYven5aL4Hj2kzfrIS7D+W3uisRvIzwItdZAoagFD15rPSz2XRg\n+JnZdcOR3JLz8Mj/yvKancocoTB0pCiOpvqcYTggc6fwzkDRcHKrxjlvyQcY\n1uJg\r\n=TAMF\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"5bef77a9b364ef69cff60aed575936d7b8b32eed","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2021-08-13T20:48:27.290Z"},"_npmVersion":"6.14.14","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.9.1_1628887821980_0.08428192467862705","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.10.0-add-sept-2021-news-602fad7cdc53311f44e24dd6241431ae4a81493d":{"name":"resin-emails","version":"2.10.0-add-sept-2021-news-602fad7cdc53311f44e24dd6241431ae4a81493d","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.10.0-add-sept-2021-news-602fad7cdc53311f44e24dd6241431ae4a81493d","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"d8fa57ece8c6e89152d412189fd85277d983552d","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.10.0-add-sept-2021-news-602fad7cdc53311f44e24dd6241431ae4a81493d.tgz","fileCount":204,"integrity":"sha512-czhllf+wZlFZJ/lpBWdE/jqL1rGqgEYHsWSiV7sNpsvXUFSEj/Fu9yLyMXRkAf38qiMeuxiclzFfpoe0gmvzPg==","signatures":[{"sig":"MEUCIEFpMPDPvEni9AzywaEShFlHo2PyZgRvtizfhALH+cXsAiEAq/hHskSjCaYRczy3GLXtyBj33Y5gmrc/f/IS86nRqNk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19302377,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhP6KUCRA9TVsSAnZWagAAYWcP/2VSjsPR9jLyLcE5R4CX\n89YEeRAZYPXwEXFZHh4xjnEeqdmN46GcG4BANenRBVEXeEwhi8pJlymUdtOF\nSd2VXKpnHWTZsgS8jGlcgzaH/DKrV6qHRPpNUzvOHDeaJ5U3VMnJhzZLxGuY\n4hPF0GOywLB9m4bFaO2wYUr4nOUn5hLmPrKShLQY8Qa70uMsNZHcSnGZcuwn\nTTI5nKknGP+WTLCMj1ADVtUp2kAFdHZwAZ86TbgpNIW9I1cQeL+GO1K1lrEu\nF4TgSVGl1FyAigHTS1unxVaYbMaeGm4nnBywqX1ddlfSqSVbOjyU7vOmijqz\ncEw0Tw8V1ywvoe4VEWKrT1FK3ebVF1tlaq55JJgtn2iMRHDtSlMtrsnkgmz5\nQekBPoWZoKhfdx4NEBmxyotxz9tZOgSFJ1KERCMq2l6avTjhMLBH0DyDPToM\nfkATLLeBwQHmSXp+ADvYAH+CSGaBL3w42D5B8x0dcrJBb+J7FGRepjC4PHz0\nOQdNsOQeGhBnXwuAMbRzVlIt8ZyFlyZnDBMDoSPfxxkJdLyggKfcZbfkzpLC\nZ8SoYoH/DVRI0HsJSELRccvSsm9XL0Rgkn0OWETACEt0hfyeReV6ZLe+ol8F\nfHDeU3JkRp+U8B4Tq8qG36jZDfMHvB41yD72L4vbtLxkVxFDzu/B5IvjFAHd\njKRF\r\n=lbjG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"602fad7cdc53311f44e24dd6241431ae4a81493d","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2021-09-13T19:08:51.660Z"},"_npmVersion":"6.14.14","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.10.0-add-sept-2021-news-602fad7cdc53311f44e24dd6241431ae4a81493d_1631560340073_0.7446782579012825","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.10.0":{"name":"resin-emails","version":"2.10.0","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.10.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"dacb8506b0979d87c31eb6ea19009c6d3c833b77","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.10.0.tgz","fileCount":204,"integrity":"sha512-Ky5YpYJSSoERL0AP9DJAebXEYaN4OySkhyKp7/VbmW/R2tc+tSgWuFdOvrej8bzHvP2wnTyc7Yh0x8aYSD27pw==","signatures":[{"sig":"MEYCIQD3sriIEpURQEe02JnUiE4YT1Fhqj6/HPPWzWRyCgBDeAIhAPbbsJhgs1lc99iK3ZcBAdYuJw+ZQbgQhoMF6heCTTXU","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19302317,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhP9WJCRA9TVsSAnZWagAAf08P+wYHVEBw7PGFgU4wxtXB\nk0VBlp8c/q4meAt1D32HUjjcKwTLVeuAMjRsBHPw88phwpBm83cMy2Aa7mqS\nONRjiM0BAUY5lZJYQ/iygzv8wsqUY8bEHRxi5L0C9rB9a3c4jTuFqojIPEfM\nB6BTHeqm3h9sSvYYdaJvtKxNifpmSKqcN+QPssqp+7QZMAsTd1hGCyg4zmAN\nNM4c7dWs6ZhCh4D12rmaseUrFpIel4jaTikf+kObO4nHaKx6Rg8oWZ0fvgOI\nfiHmp6upUpj/kwMoVeV+920proJ3SMCjtikxpXY8PmtWVPodFGUhirLHKcge\nAiQtgzag1SL19eqoOkaVloQ4tyL33vaRHAql4x25hc0IyYX/d3scM38VJcNk\nOgcAYptfdPVsX8AzkJWE2RFxh3bMje/29Jlz/nZHIgq+Q+6U+ZIFZ3hLHvQJ\nG9ApnHIboRO+Ftvep3dY3cjslOsmYY4o3IW6QGgeRAEoSKLxPi2SAH6DLWlX\nfLiLIAk9fZP2TBq6Nd6KqwIAbWu96te0lNkECRl9OIsuYtVi4xhb1q4Vgs+b\nGlKvKPEcudk/mQdD24U8uLvHcv0yGlXZL2TaKlV+QaSuqP1S/cunOerAbis/\n+I+egW8ozjtgBBwPZZ73w5Mjj1F9lqa8NnR6pUVqe2bRG3qK3+RzKW9AtuqH\nyi3H\r\n=DVwB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"28438dd07bb77e909367d3402a81d996b7578ea3","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2021-09-13T22:47:54.239Z"},"_npmVersion":"6.14.14","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.10.0_1631573385135_0.3384210543895352","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.11.0-add-hackathon-2021-cda2e86a6157cb3df8cbb9da7e733b6c0440c415":{"name":"resin-emails","version":"2.11.0-add-hackathon-2021-cda2e86a6157cb3df8cbb9da7e733b6c0440c415","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.11.0-add-hackathon-2021-cda2e86a6157cb3df8cbb9da7e733b6c0440c415","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"5408696ac12554d301c9b0bd94f7d406b79c7f0f","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.11.0-add-hackathon-2021-cda2e86a6157cb3df8cbb9da7e733b6c0440c415.tgz","fileCount":206,"integrity":"sha512-4e7yfsiwrE983zkJ/kTCzaA3VBj8PeH/HlYF6/87bz2kR9bj+aAmWMBNoHbIsnAmQVa+XoxRAzezSYIYHu/nqw==","signatures":[{"sig":"MEQCIFn9OOBSIOEgO0HxIozHTXRz6x6eFZkCrMo8fKsbQfwVAiAGSovWQvq25oemPFh33J7j2ObEqruoWnIYOMl4o/5qZQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19443496},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"cda2e86a6157cb3df8cbb9da7e733b6c0440c415","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2021-09-23T20:12:08.621Z"},"_npmVersion":"6.14.15","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.11.0-add-hackathon-2021-cda2e86a6157cb3df8cbb9da7e733b6c0440c415_1632428129568_0.4307368273554837","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.11.0":{"name":"resin-emails","version":"2.11.0","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.11.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"22af3d3081904d2c27ca37d2f5a84f8e15f15693","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.11.0.tgz","fileCount":206,"integrity":"sha512-4g7YSraN6/sEGKVC9RbtySjNy4C9GRAlV+Td1Tn/zE8/Jf7J99vxKuxgfKPhc64AckwZkZf8qt6Wlk8O7MLBhQ==","signatures":[{"sig":"MEQCIF9AgJmpZXEc9DJJ183BJPX1TudU0KloNybgJXZ+z3qgAiBdM69k2jyPzGpZJx3fn2PWmyH/Rle51jA/jHmea0Mb1Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19443436},"main":"gulp build","gitHead":"d309bd6e2e22873de1140fb83261c5e8ec9c1503","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2021-09-23T20:16:25.340Z"},"_npmVersion":"6.14.15","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.11.0_1632428301244_0.165385105689146","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.12.0-add-oct-2021-news-37899d768859e3bfac590cb4ca1accd6cbbef33d":{"name":"resin-emails","version":"2.12.0-add-oct-2021-news-37899d768859e3bfac590cb4ca1accd6cbbef33d","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.12.0-add-oct-2021-news-37899d768859e3bfac590cb4ca1accd6cbbef33d","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"34404bf677248e2158350a4eea274d2c3e78d844","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.12.0-add-oct-2021-news-37899d768859e3bfac590cb4ca1accd6cbbef33d.tgz","fileCount":209,"integrity":"sha512-4irUJekxRtAW9q8DmrDe755/+BWhoebASvvzeQLAMxj1aiuzbBtxe8TizgGY73sAwmwJlegAtFCmVn1BmJOVFw==","signatures":[{"sig":"MEYCIQDOlMp+w2ZVvIXFVSmD9+yvzS9s1QlI2blcbG2F+9soVQIhAIIQbDD0M5QROy2pbimQMqrkYpmO70D36eXAn1WoQ5HO","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19543869},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"37899d768859e3bfac590cb4ca1accd6cbbef33d","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2021-10-14T00:06:57.739Z"},"_npmVersion":"6.14.15","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.12.0-add-oct-2021-news-37899d768859e3bfac590cb4ca1accd6cbbef33d_1634170173959_0.8960866598193356","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.12.0":{"name":"resin-emails","version":"2.12.0","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.12.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"e1e2228e16fefb15272c64e7e520bd61016c7b6b","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.12.0.tgz","fileCount":209,"integrity":"sha512-mniqEyZ4aWxlpMbIiwF43SiHD0Kt9x457nMreGqiDXIteiK5rSixXOsXwYiPMnizjjK2diFvI0MEXQcyTnoBkA==","signatures":[{"sig":"MEUCIDK1CpdQja00flHF52rpq49l06YfvlG31sWBtYdCOaoiAiEAmomrJ2PZh3uXwXPfCHjrWsSkWzeqsBNo0mfeGtxZw4g=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19543810},"main":"gulp build","gitHead":"0ea2879d0a664fa025c2ab2c547db5db48792901","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2021-10-14T00:30:37.664Z"},"_npmVersion":"6.14.15","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.12.0_1634171534854_0.44753752753639975","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.13.0-add-nov-2021-newsletter-f599d5bc3a5e2d9ce80c14fd0cfbbdac9d9b1875":{"name":"resin-emails","version":"2.13.0-add-nov-2021-newsletter-f599d5bc3a5e2d9ce80c14fd0cfbbdac9d9b1875","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.13.0-add-nov-2021-newsletter-f599d5bc3a5e2d9ce80c14fd0cfbbdac9d9b1875","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"c83b2b5ec0e47784f04234ca43b294ca05f5bfe4","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.13.0-add-nov-2021-newsletter-f599d5bc3a5e2d9ce80c14fd0cfbbdac9d9b1875.tgz","fileCount":212,"integrity":"sha512-e5DZOVRRayYJsFz6vy2zEBVX68zSsnXAJKD+kUwugI70ePIIkszdWLggeDX8t+K9EXY05RZT1HM4Msdzipk/gA==","signatures":[{"sig":"MEYCIQCTX52FEU+fFHQb5iJyng263bkZI43Wb1Aa0CewH0eE+wIhAJXHUEWVfR8NWvfMFyoR84EZRx8/Yz0UdOOyPY1svDV1","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19643559,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhk+VUCRA9TVsSAnZWagAAEusP/inrICbFxoCZsHGfrcDo\ncBFFnkTguUnWb8AZB5+eZDx//yTKP0aMECItNHk3HmCyoRfpDnO2/ERSHykp\niU5DseYxRsblpw7J4Zko0Yig2CUrpzjQHalez7uTJpgVb5kNrjdVYgKB2fMX\nnLsiYB2Yse459tKyLzzFtA35VM18Fv6xRqczzkJEP7mzrmtmRhLY3JX6pQLG\n+mzfw61oerdsz1k6tITdT2hMvns9QZk4hI7fonbg9NPM8tq1VVV7bhCzYvy0\neVXdWUf0+re+XXRAbZzRYlmM7oTJaPD0mU+7ktZB5PwhqR0Dc+NPqCxSBGDB\nt4jOzWc9vxU8axTLoNBgKglttbuonInhAqDos38CmKa4oHS3AI6+kDNiQiob\nsVPtuFjrc2ZaxIDe7PphW4gQ6JXUysymsdV7M4Av3JGLXndfL8UAZCiHnf02\ncaOyyJ6CI75/8ZoL+3UKBdaszJM66jvUyDzOWb4C7Hl/nkgaPbPDmQZo4TL5\n5WVAhgpT0dwXgztH64xOiegXGqiIXCN9khrFc5utPSATOLpRknPTg1ZxJZfX\nPQ9xD9e1TphCMz5txXCD/kbIbIc7+VjF+/sxIjeUKgUvEQlhBU96O+1X/1X6\nPqDAl14yAQeMMrOmteqdwZH2jJ97yiU5+5lJqcuSVkovmlJSGcYUPHVpijme\noa1O\r\n=1Q2j\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"f599d5bc3a5e2d9ce80c14fd0cfbbdac9d9b1875","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2021-11-16T17:01:01.872Z"},"_npmVersion":"6.14.15","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.13.0-add-nov-2021-newsletter-f599d5bc3a5e2d9ce80c14fd0cfbbdac9d9b1875_1637082452105_0.6628783321024767","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.13.0":{"name":"resin-emails","version":"2.13.0","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.13.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"04e33212170afcfe48775aec1afe8d89502d654e","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.13.0.tgz","fileCount":212,"integrity":"sha512-LiQ9luLRaa5E7gfy1kZEjOuz3P3dwJQ5C38lyS8WM9+wsIhlSRGdBAGK3TAIfHX/OBCPOTx/teqklsxcZVEGTw==","signatures":[{"sig":"MEQCIBoZ3SYLoRcaP4tI42vwPgo5Q5SjKm/JljsaoSB8u3daAiA1yJcCl3pBicDlXGEyHCRFkDDoONNkUoWpVDO9IueGTg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19643494,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhk+ZFCRA9TVsSAnZWagAAOMkP/RLi5H8mZaGQkkevxpcU\nhneukYVPvl+eJtZXI9e4VqkZ0Se/VMcmyNg4EoOpshiCmufpTKsnRpc3YMOp\n5tPReiiut4QVtuVleVJNvC5R//0+7e4YidCDHJ/xmoVGptjemAWrUbFXikA2\n3WesHX4drQDedGjIX0JEtFVwd/mvibtejblpUBbUzMbo/k2jXn4wErS4HRxJ\n/MzDTDdNLWVO0hkfT51f5yqCTlvhZ2em+d60F0jKNWZqft13Mk1Y+buIZcXb\nonPi9nw0FfM2LshKeVUJqXlKYl0TDnwewW4vhhvbQEUwWonK8OVDtGxJtKVF\n+C7S/Hn3dp/3pN7lNgix/kmYkyqmJy0R2gBTgczOlzKHb1gGD26Q4ISdoo+u\n8NkuYDOkFeJYnZiJvhOyb+YsXVAxkR3A6Z6ajbjDW6TtYafI8NpJMYkOLLm6\nfdoCtvNbFVqg2jg6+dd93yCm+FHQ4Qy3OGE0DnH7Ee5XXsFPOw47XBg2sYgz\nzeD62ntiPbeipjGlOEt77pdXzzezXRUmRPriTN2vXHFOH+3dOTZFR6s/IBKX\nSHdriFhA8xEYxpELWI3yGFx8PeEqKo/MnHXDyCyPzHP39PN64lI2K0gqxgMs\nc8BaoHVOsxFP2JMGLTiKWFYMPU9x30DqjBhoCV6DjBKOb4ajVej1k8yRGxo/\nAmbz\r\n=n7pe\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"0e3b862da99ed3f3f660dfadcecd234e73ad5d38","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2021-11-16T17:09:16.324Z"},"_npmVersion":"6.14.15","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.13.0_1637082692506_0.7668666521246721","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.14.0-add-dec-2021-newsletter-398fd7c4c5e0e68d641e33401880d54d8294eb5b":{"name":"resin-emails","version":"2.14.0-add-dec-2021-newsletter-398fd7c4c5e0e68d641e33401880d54d8294eb5b","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.14.0-add-dec-2021-newsletter-398fd7c4c5e0e68d641e33401880d54d8294eb5b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"3c2e0d7d8d018432254ca335bd5af016d48e3fcd","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.14.0-add-dec-2021-newsletter-398fd7c4c5e0e68d641e33401880d54d8294eb5b.tgz","fileCount":215,"integrity":"sha512-w7xwCJYXL/QDcwdZjxVc5AUefNrAcJ4S4SX/C9GE5O9miiDSW+N99cItr9stdk6K/16pPOk4fzTVMzMlaJFohA==","signatures":[{"sig":"MEUCIQCZkkwKVQXVIWDIytVMOLNPz3MCFRo3xMUHHABpWu2BVQIgXMAdTYHKKNFR/uU3318LFQtjnu6JmID0lBM/k7Hak0s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19744360,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhuOxcCRA9TVsSAnZWagAAzq8P/RMbaB/Wx16pd6sUn6Nr\no3SWABrneO4BoUhhyhgUZIDF+zsyYmpeV3x+Uw9V+n09uguqcRzYn2iQaEyl\n83l/dsr23N0E+s0Bw6n7uAASc2VtBsw1p2tUspGD2LavgHbSTTOzOI5g4OcP\nFkQJzJwzgBPDQu267oRIpjTideQf27nqeEn3delWRAtQF0G5D/2XnmHB0IBv\nrg3m0m4jO2aSPCBin4Bx0NQOaM9/oqLOhp1hI8vuzadSw3OObs8tahIyb40R\nwbN07Vp+rR28PN0ztbv3nZZs3l0o3rydSGyU90EU/+PohbNq4mYboxvYTT/Z\nhQYiAvcAmJ8gWEuT6sY8g2vNH2Awj2CaXHDRju1H+v5bVGE7hN4M1S8Jb238\nLrKKKVOyV6XAkjG/ItRopVXey44pWnT2CO4RggXsJYglxd3gU517hsES9GLN\ndmTBovXOZvnh1MaTSJ99vkzyEnJlFrdUUZI50EIXcmj0j4wUaIhNMuTvNAs2\noHn/qVe+gwNd11M6tQm/AmLnReetasqW3IJ/lDq2TxGT7Vi53wzLEGyOE22/\n/zUgzwYuHKE83hgMuyaI6I6NzAsrE3w7yFDzPUEwYC/rbZLQIsqCF4gtrLXw\nllfpFEHkhaUIs4kQftW4HtBbX3hJPJP3eKPUKSm2OpCz97bQ++F945GbC9oQ\niohe\r\n=TPex\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"398fd7c4c5e0e68d641e33401880d54d8294eb5b","scripts":{"build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2021-12-14T19:08:57.081Z"},"_npmVersion":"6.14.15","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.14.0-add-dec-2021-newsletter-398fd7c4c5e0e68d641e33401880d54d8294eb5b_1639509083632_0.8635002618251137","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.14.0-add-dec-2021-newsletter-3186b0eb685e37fd1b7fdc50136da22a631a2439":{"name":"resin-emails","version":"2.14.0-add-dec-2021-newsletter-3186b0eb685e37fd1b7fdc50136da22a631a2439","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.14.0-add-dec-2021-newsletter-3186b0eb685e37fd1b7fdc50136da22a631a2439","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"b28d18772eb866b85dd9adae75d3f5a1f23a9b93","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.14.0-add-dec-2021-newsletter-3186b0eb685e37fd1b7fdc50136da22a631a2439.tgz","fileCount":215,"integrity":"sha512-TxuxyDivIfYQs5xM6xY6I7o8v+WnVQXvv/f+wJAtvIW3C5aFcURUubJsEtpoE7THuQMxWtW56W/L+aPHB5vAUA==","signatures":[{"sig":"MEUCIQCIsCYgIaYB4CAaHNN44SlIkw6NgmgkLjW99twMWRlQagIgXW+HeeCICBkEvq5h0yEm3iTKoqyN6erGP+3ABA2uFgc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19744382,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhuR1sCRA9TVsSAnZWagAAHIMQAIAjc7MlCfFvwoBrT9WQ\n96uskUQhnj97B01udq6GT0HtOXC9hQ8gj9m5n47Gp1WRpirAKAe3pvIK41Wm\nCnFWg+ErzC+CSMEmFhnxRdkbgs72tAi/Yt+ycBwBr5BD/wxGR5KqwVYDxb1T\nadH1xD5nQe9XK8uefoq+cU26Aq3fSzJy7dV25arkYnh++8AggY6YAGHgrncO\nbJAVO9kuRtbe0JTvLEBAsIRPqmXNpBlQMlsCBkVOjgD06qzScDeUaAhu3w9W\nwy3TvVoogAJeEV4P36FpdPe2W3IDO9/KpT6XnF9DVufZL/7e0j8UDfws9JA1\n1WD6z9DybTN2Xgen5qifMutZY2aVgmHPChg+XSsJAP9FqriPDrBnq/bkxgwS\nYA+pBhuHwhOaFqgYu290lcwTLEQ2KpEV8IIi6OPYmUg8SSq17V+BVLhdNGB1\nDTX0U648+BgHXRH9kaiud/IQVNLb40I1ZV43I09VIrikDDePwXBti2v7Znox\n5PfofOVj931tA3N/dGV2qWuJraEyNyuuZoPnVoRZD0Fk3sLxXixOs8+OkAPo\nTo8UtFtSCgU5HgysCpybFpRWCBS8vgsSxjuMN7/7AQPc/MqrpSSLQtD5W3fb\npgd2ta8s81h5sVyjT+Jaqxa6KJNefY3meZdLjmVqhMQ0e5W8zVA2Qu9XvaBi\n2k1+\r\n=pkm1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"3186b0eb685e37fd1b7fdc50136da22a631a2439","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2021-12-14T22:38:33.204Z"},"_npmVersion":"6.14.15","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.14.0-add-dec-2021-newsletter-3186b0eb685e37fd1b7fdc50136da22a631a2439_1639521644089_0.5179155391639021","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.14.0":{"name":"resin-emails","version":"2.14.0","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.14.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"fb67610605b4ed49fbfe543890b7c3cb33b03ede","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.14.0.tgz","fileCount":215,"integrity":"sha512-gL+OgjIo/F86kush6k5dSGXjNQeZ37Wb71jWtskVDXMK+fhbfbe3lkEuPRGvhG9Nok5eAmkkIcjVC/e0X+khxA==","signatures":[{"sig":"MEYCIQDCcZpvsq0ryVsx6UsN1iaVYHMUfp4dayrGWsJ6HVbDYgIhAOsvruetk49FyI/AA2DoJytA6u4DCPDbhB5wLk8FAAop","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19744317,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhuR4+CRA9TVsSAnZWagAA2G4P/jL6QQeLaP6pmbO8YVrb\npHJFPok1tBu8lRuCPIDUn9eSwdY52ezfxd+pUPCjcvqBsVZnSeg0VcXNZSD1\nM2cXvPfYyNSi0j9+SvbB4ZAzayWbCfok+dOMN1WXJ8PBOPM7GVfN06BNHKS1\nMdZJist16pNpXZuKXZb5ZAoGTvF5zLrqJDanpV/6fGi3xXrBcVc/21s4+IP2\nh5SxYPaNYYRx0IHZz0m5JUhZG6PgdUBNK5XeJmBgNzZE0xqmXbollTkFiR/S\nGHYPHPsXBPYZy0Nib0X69B2rggA0cGom7is013hMrQIHh7pT9ivfasvTYs88\nt7L7Jxvv6GSGrTlZWm5xyipX7zVWK31lA2Ddm5SaIyMsAKysSVZ6MVwbt7og\n0wRRzuwQh/s6WmAx3WUAezadEwajHICe+ocmoruQMxZOa9YZ5yB+1ZJgq756\niI0vOhEEgWbvBuT9V4WUToDRc3Q0tyFlZ9Py5ZLSi3oOzH3ICAIsbve7zMxL\n5mGxLFOBYDpf4EKvkSQ6h4CxrCvepVYPQMe7CRU7lBJ98NY/ijgxEJwcYYJe\nXxZKBo97ADiE6r1UT63/qeeHZO1KRXTM+LtocpuDFkKa8whMgtTrfIf75GPM\nu+orzVqVX6SvNmhQfMvSYOsd7lXRZv/UaZbyEVuLcacecbE4jIVJKImcwDzi\nkW9x\r\n=E/Qe\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"33d8c227f6d1b17c326f860a62f636d40de06f77","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2021-12-14T22:42:14.518Z"},"_npmVersion":"6.14.15","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.14.0_1639521853314_0.6007943060508887","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.14.1-2022-01-newsletter-1c57d356475c66f74c09414dea88cbee506ba593":{"name":"resin-emails","version":"2.14.1-2022-01-newsletter-1c57d356475c66f74c09414dea88cbee506ba593","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.14.1-2022-01-newsletter-1c57d356475c66f74c09414dea88cbee506ba593","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"d1734674628e1a8f65fa93915ea25063b8e889e2","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.14.1-2022-01-newsletter-1c57d356475c66f74c09414dea88cbee506ba593.tgz","fileCount":222,"integrity":"sha512-cQX4s2xQlLp1/U0wxm6/N8vkBraL3eA2hcNvVjYw+IudsTc/8kVPBDAJ6lYm7X7EnveAWZ0aY7Hk9HEKOevlig==","signatures":[{"sig":"MEUCIQDl6dg2N78fR3M8mdnT7L/1MrDTJIvcY+NCsbru8qSfXAIgKr73Qjo8+TYQz+PaEp3Fa1PZcv2x1qA10FmtrdNYWMA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20215481,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiC/iHCRA9TVsSAnZWagAAiFMP/RrgZ8+hzW94HYXVIqsh\nnC/gFbrhMvf5MvRuH6DEFQaYuqtN6G7npviWqghTJINhs7+2z/vRVJCZIp2C\n+RW1e2u3/PZ0WmDIGyozF3OX+vBTqhkTOlMPrWNNVoI5FRvS4CwNg1Fg6WnK\nTQJHT7eLMG4eDp09MIaPJ1lp5jSHEVSgF1/Lw16nUqOAd4gQrUHs/3O0UCIV\nhoWNqH0nqX9LZguEZMtnyVKnx5FP2hp5XYpGQ2sW6MFbE5suHrv/t6n/3mcx\nslAtuyQUelmRt/iwGn50gO2qg3UZ7/DHF5nTU/Z1w1cipLyX81gFOIc7phzN\nZV+gqNJ5qw4m2006/UBn6jximMLDqAINW0BO0cWhNnozZ1ufpktzjUYXjOis\nhDnvj4F5XnX2GpxA227PfMLtmSrgVevJGni+H2Ochbr39aZTuxiz1KcnU7ve\nBNx128oWbRcQ8rHQRgm09STHI5xtPWWQeIn9QRkKjM1YOUe23GMprYaq13c/\n7K6fYhQD95U/tHoInP/PlnIQMpkddQXMSwU4eay3ArkYu4yrgi9wwuOpqMW1\nM5+SfcKe2atsWY1X8PnWVrBXkeJ9bb9L2OuIZq9XnLh2BRAumyZScLTck8Q+\nMSeOIK4e+sD0flxutORI9PjBf4NqJog5c23IvAvuMj0O6C3nrLOnE/QhB6cW\n4gie\r\n=lyyi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"1c57d356475c66f74c09414dea88cbee506ba593","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-02-15T18:58:34.370Z"},"_npmVersion":"6.14.15","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.14.1-2022-01-newsletter-1c57d356475c66f74c09414dea88cbee506ba593_1644951687152_0.05240750851344411","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.14.1":{"name":"resin-emails","version":"2.14.1","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.14.1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"9977ddc29cf73620710b9d27305e1d0e2bd233da","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.14.1.tgz","fileCount":222,"integrity":"sha512-d+GrxjC4tXomv6896Yuw8bD5gVbsHIDkWGSHKolRp1D4+fuc1xpuodjDTiAgCCM0U2D7qnDEHdXh2SszulEySA==","signatures":[{"sig":"MEYCIQD35n1kLOCHj0hrReerBrA/tiQLANlR6DfGV5+PCQvHRAIhAPUT9iEh8y/Tc1ghxrz7WhH7q4NCizUBSb2SXBu3gowb","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20215421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiDAFJCRA9TVsSAnZWagAABH0QAKAmjeh/IG9qoPGBn99y\nCTtlMa/HnuPCilU9mdzaUb7s/sQtPmPfRMQhDO/ZMATT+df1yYXGLr5Cqu8j\nhR7rxo+JMXgLWdgTMJt9eNElRnPwV3UvoFb31LkzCSH+6zrdm4bDQJ7NLkB0\noBtfaplvc7ViXTMBzxdkkSDwA8ExQxs0QVkSzSJvN2g/y783QUCYeuE4Abs+\n7Vs4LdGqCKdrLP7UhxjhIrKmlr8RgN+TjvPaa4817/wfvl8XbyvOfHu/nUwH\njCC8E02u9EeAVubkY4Ubekx0SSj5S+XfhdKPLCAU/feR/YhujC+5aCS9sHA6\nnoGMmlqoMIsowxZmX9YOzsoOop4QLl9XoSEeHeEqkbn2Cmo/djNfbQZopY86\n9ffZscYdHwp4N0V+c96ouPeq0oGyI69JuB+8/nTpxN5NAJP+J08Zi17NPW8M\npoNOal3Fhte71cpUxzzqXE9QUjq2BG2VM92jqXeguG88oOPht6HRoLjB4cFx\nqMSZ2p4/7rFNEVbxuFb9b3pBVovy1o3ndFDRMB66dGnrYhkUaICk+scTSP2L\n9uPFcyqCpcHmtlMrVC1+6rvrYcHmZ5tb+R83VOxFhvPC/sHByaMbRX5JkSFr\n60PFu3AXjgVI2wJpsoG31vUn0NONLjgukIJguki5EodseWH11VctwEd73EZ/\njySq\r\n=iCT7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"6c4e847ba838b6e33ac1b184e8520f0bd80047e6","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-02-15T19:36:55.731Z"},"_npmVersion":"6.14.15","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.14.1_1644953928988_0.3025850110267361","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.14.1-2022-02-newsletter-ab7d13e74bab28ddfe7c5fac402cc98c016ebb21":{"name":"resin-emails","version":"2.14.1-2022-02-newsletter-ab7d13e74bab28ddfe7c5fac402cc98c016ebb21","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.14.1-2022-02-newsletter-ab7d13e74bab28ddfe7c5fac402cc98c016ebb21","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"e83ccaf020d7f1325adb524591659c9fec3d5b76","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.14.1-2022-02-newsletter-ab7d13e74bab28ddfe7c5fac402cc98c016ebb21.tgz","fileCount":223,"integrity":"sha512-cHDclTFxQJRgNhr4mTvwrR1K82HpX2E/LER7gUVgiTd3dWjiwINCO95oHKrqatyJzXqgm18iLeMeymAQc7C8nA==","signatures":[{"sig":"MEYCIQDFSq53acQROi5Glypv9sR+GWLzNNBtnCb2lECkSAIpgAIhAOBQBCKT/xUBELmDDKtmu0ww91p/WeFoCnnPxLCQ5qq9","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20856628,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiDAGCCRA9TVsSAnZWagAAjlYQAJfXw0JGOM4kU8IqQXpK\nKeZoSN3pfa436YJ34KLjsy2SvDM9ZVCd4jJL6USNJUoe3WhPhmIndzBECVJk\nuNSwfbA7J1kvsgzOrCBtl7YlI+IyRzMU2fCzUBRTO5b4Pa9eSDVd+BgjrQHH\ntbtWikcS4QflJ6j95RUNQRwmbDF25W5xRv1objD9yLnk69QiAskQ+WdMtsi8\ncT8EbvGXJYl7Ci76exKLaZRhpevL6/jYNRyhhmpH47RaP6416GWqLU0V6BqL\nnX0H8YqVeHbvq5OuPPPycM0le7OyZYc/54z7QJm2Q4oClhuQnp/twyyADx8Y\nTI1ziBom+HfCTMhNgxJG4w7n/dgWfuE/8qEUyx6M+3lDiNVd96+78fKu8eoe\n0iHIWpI0pkZxmXOfsSh715Axft6w0LxmCYrFcLh/tu/aT1ljJulRig6xn2t4\n3vYnIYn/H6qKAjR+ibF1bBzaTDqf/OZ0Ru18NqarU/Y1k03djW4xLgWRyG++\ngpyW+7tFWd9aRjaHPOWRclWjCYB9YsJg3AqhyCF55fwzEXL8qrO5pojrNUq3\nhlHSM2MBl5yLuVAeyjToW1zCk8CAg7RrmZsc9KmYGPH8B4DgO0WoUVvsS6S4\noe/Mks6SdDHLcNc9LWkypq5dL4MIxxk6TMzqYdDTb2Uhub9dWZV03tUs1QWA\n7+NJ\r\n=5abo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"ab7d13e74bab28ddfe7c5fac402cc98c016ebb21","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-02-15T19:37:37.000Z"},"_npmVersion":"6.14.15","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.14.1-2022-02-newsletter-ab7d13e74bab28ddfe7c5fac402cc98c016ebb21_1644953986068_0.15702514981493532","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.14.2-2022-02-newsletter-2d920881ca3db555cb7be22a8c796193a8db4267":{"name":"resin-emails","version":"2.14.2-2022-02-newsletter-2d920881ca3db555cb7be22a8c796193a8db4267","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.14.2-2022-02-newsletter-2d920881ca3db555cb7be22a8c796193a8db4267","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"f812c287f575006d12f0caa8d0559ee9d964c7e0","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.14.2-2022-02-newsletter-2d920881ca3db555cb7be22a8c796193a8db4267.tgz","fileCount":230,"integrity":"sha512-Mk6e5wWF0MvxR/mo2WcW2acu/MC2AJFsU4v09HJzdkGpzLFK1N5TAgmWSE5VV6EB1umeWMJ5sj97RYpBqI5Ydg==","signatures":[{"sig":"MEUCIQDfX2z/w3kc23Hm7lWQKkAl3LjnVFB9J3SnpaFshYUvLgIgUCBdTHdcvf+aiIHg6eljtUe21svVwNOD2y1p8Z/rs4U=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21328081,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiDP/KCRA9TVsSAnZWagAAX7QP/1S9aT9Je55208Vf1v07\ndzUTlftUP+pva2YMLt1LIYirdDKLUiSFU3awei3fkcrQyBvC1Y9lWcKddU2D\nr3Ok0yPqTEnbf4URPHjMpyDWstzLe0rWUGvsok/fKx0AkQfZih0EA3HgJ3SM\nCaiuFK8TIxv/xL116NHpA5y2X0kiRWvyRt2cEj9AO/M4fwv/MbeqzhHtSV67\n9iYlfcXza91VeTWYt/0Btdfprn2zt6DTF6LGUGEozuHLG79hQYEESm78Be6T\nx+3bYdMSTc1hnGyI1EmVkMCb7e8Op9glOkc95f10nZAmm0r2phbTF8+9kivk\n1SZh2xJOGi1GTgTaVV59M22tvwb1xMMezl1yLFUBWIjIWt3ZlOXr8Lx8z8OR\n8POhKrpKd9aMIUw1S3FT1bJg18IRZEAZKNf+yNKtknI/2hbSmuqzOZfGEZSg\nSVxBuV4uNEMkMU7fvHXfe/eHax2Otqy3QCxKxagLhzGv5p/kdCD8b2ixrfLk\naMxa/RWfX3ZBBroJ18mNhiS/01zGwWfHLY8V8vL4f22SCf3Yn6mmqb4ckkjE\nAR6pEUPK24NMYHv2gh2uf2fleFM9ebWqGPKuQSfFGOOc4zoSUvYyG34I1WPi\neTvYRTBOtuFEwq0OD9otJ8PCarhax7JCJF9ibP0eA1Zq9cgdgbYOhTXnCGvE\nB1xq\r\n=99fD\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"2d920881ca3db555cb7be22a8c796193a8db4267","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-02-16T13:42:36.329Z"},"_npmVersion":"6.14.15","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.14.2-2022-02-newsletter-2d920881ca3db555cb7be22a8c796193a8db4267_1645019082134_0.5166900370247354","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.14.2-2022-02-newsletter-c5e072ccd2a9d5dea03854b91e37c3da1e7f05d1":{"name":"resin-emails","version":"2.14.2-2022-02-newsletter-c5e072ccd2a9d5dea03854b91e37c3da1e7f05d1","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.14.2-2022-02-newsletter-c5e072ccd2a9d5dea03854b91e37c3da1e7f05d1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"5eab971f4aefc0d0883527c45e49f5b211e05afb","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.14.2-2022-02-newsletter-c5e072ccd2a9d5dea03854b91e37c3da1e7f05d1.tgz","fileCount":230,"integrity":"sha512-vjS6dYOamj6qK+N+vW9MtDwMd8Hw8xHQbU7vAfMOXaB7h2yINtFrJYJ3YJ4lr62otltnFZeu3ksy51MYn5klVg==","signatures":[{"sig":"MEQCIB0Z/fgFMaXuxaE1JtcS+kM3AfIhw5cpPe4dwid5bnlIAiAaDmv7D9BCdOd4xrgXBqxHnTxYXKst9VQrdgJZUvVDoA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21328124,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiDWAZCRA9TVsSAnZWagAA6h4QAJmZq9bq2MF8AUc7q+v6\nbyJhyP9rWfn8kKv7VjiterFmEiksGa1sZ1HyaRNj6MppOHpyhqZqV82GB3/8\nOtLJXCxjdx3U1R8ZywjaumYrEBA8YK7Hfi5eP7qDWuTzOulRP8tdOD7AaRhj\nS17UdjN7Vy1d1psP2Ju5AIi8WOad1vGQNrSIr2Srl1uQ+RP26BLlJhC5DTqf\nlwJz51Xe+p9BWjb6LnyS2agXxXrG/1ycLAhoyjZ2JQdzDjJSscXVQ2MpVSms\nbFr/VKKL9dXd3dnGDtKuxe0thzuKtuCyenhU4Zn5EP76PZSj5BTH/IFR6Zqv\nLZ+qkLyw2Yp/3ADuHjSnOif5A8fupWkkpJwI2TS/6cyHGjqawJcshlzG7Kh0\noxgliBdo+Vldis/w0hAXkZfZ5uDQBvJ6T6O00sq+Z3jOAwyiz/kh9NH0LXXY\nmGU9/NlRHaBmeprcqAvmqLUPjEqQsCRLoIqK0m3JDtpbzFKSyen3QekrBCf8\nNRY5m/eLQ50tYhSNRYtFL50KO8l6uGN1JGyx3hG3iY6XpCNItvEbC5eR4tek\n1Btdd+MOvSZnclPPaeSLTQs6GzhRgBSaXtU3Rw2JmYy0fAPpd3JCEjs3io1Z\nALzFM8r1/8nLdzCpfcUEQOxhUa/HMz9tHrKv1JuiarhTRPC6bdLYOPx/bH9z\nYvrH\r\n=6r2W\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"c5e072ccd2a9d5dea03854b91e37c3da1e7f05d1","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-02-16T20:33:07.030Z"},"_npmVersion":"6.14.15","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.14.2-2022-02-newsletter-c5e072ccd2a9d5dea03854b91e37c3da1e7f05d1_1645043737470_0.9609269335671031","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.15.0-march-newsletter-6af2df8c1c576ebf3b7253ee1c9189947fc67fd1":{"name":"resin-emails","version":"2.15.0-march-newsletter-6af2df8c1c576ebf3b7253ee1c9189947fc67fd1","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.15.0-march-newsletter-6af2df8c1c576ebf3b7253ee1c9189947fc67fd1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"496050f7b18abea94652890ee98ea0416eb4ea39","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.15.0-march-newsletter-6af2df8c1c576ebf3b7253ee1c9189947fc67fd1.tgz","fileCount":226,"integrity":"sha512-BiZmRLWmtYMYGu/f9nzm5fONqBCZ0MZmtd0wE5ij0QhkZWoRGWy/FFuWNT+omNGGywjF7KTsUsrYsyBTWZehvg==","signatures":[{"sig":"MEYCIQDNoWCBuJmaIMQZsp2WG3QuaX5FBp9tqfluS9xQIGeUQwIhAKhbq/f+aJ2Y9a5jFFdi8y9H8eCd55FMTZfSoLlBPq32","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20432394,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiMeJgACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmox1Q/9Ghr7r1FcYc+terv0k/s2CT/b7mpgRuSwgoA0r6LhxKn6FPdH\r\nIhAqlvEQmzQYt5LtxGIzbtdn7wV+FFdhPooVOSXok7jzpbKZGS+QimSDuSkf\r\nxAUDB87QQsWdA28lG01qNFeFTINML3SrRv97+E70dfFDPeTpEhUM5AjLHJJl\r\nkNbtUpBU1yVFHcZBBLv8XQc+T0MXHl9xIOLJsVyQ05qbtx07voBU+3FvwMQD\r\nJYtMcfiFfW4oj5e7nkCkPjxBATxgh13Wh7yADiTBgEHnTmOdMi7Sy1dbXFoN\r\ncUoK48sPM87Jga+iI0gdGREizi2UveMVfzmVs4+xU74YCqkkcnSa0HSqjMGe\r\nOAXx8FsrHs3q1VP3X6MN0suf+l8d6To9ui8QPFq3lQQQ/JZpj9Iur9xE/cmA\r\nmVp7Awqhh57/FNoHLRTnzTebgfdeUeJTi9JzqOfH48245aI6o+0RWunZPOz3\r\nJSvzcP8mKmR+alQe2Ip0HVAhQBGjtKGEPxmNHMOkQNw3EsmiwTr3/exWyra6\r\n7IjW0GcTkaQ15+SX6lywFv9xDRgRItIo9NSmMLMKyJEJJWhh6hiJAZaqWOMZ\r\nMk16zu/dC+uXNFGmlNfwZAUNF5ekjY2plnmx+YokrclncFXUfGf9jKxXS6wM\r\nkTJ/jIUA9W1O4GaC0aGfy0U6WhTpXO4GDw8=\r\n=rbfz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"6af2df8c1c576ebf3b7253ee1c9189947fc67fd1","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-03-16T13:10:10.712Z"},"_npmVersion":"6.14.16","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.15.0-march-newsletter-6af2df8c1c576ebf3b7253ee1c9189947fc67fd1_1647436383866_0.5466463011394809","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.15.0":{"name":"resin-emails","version":"2.15.0","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.15.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"3bbe4c9445ed3b14ae32b896cadfe258e62371be","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.15.0.tgz","fileCount":226,"integrity":"sha512-ymqph3ts2TC5g++JM6SjZP/6d+IDS+3DQZ1XtyQr3koIxhd2QIGimyw41cBK3rLm7UgFfi+rb/Vzoszo5f/ydw==","signatures":[{"sig":"MEQCIAv0xIOQrlgwwl3ohzSqDgROnS6ah05Y/7BMjipCt7T1AiBtLD7m+014dHNlV1qXVRAUXhSD1Xzgk9ipDjiFJ4xwYQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20432336,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiMeNFACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrd8w//cTd082YrPT6PSgyBY5PLMcXRV8HnDxO8zhzFHJkmXRYxJ7Ot\r\n0isHFNmq3fkVCvAnYxVkp4FbQRGX3og4dTVHVkNGCx8TdDktruGssvgKk3uY\r\n8tJlW7REVSz21fBgfg90+9Z1c8VW0GiEleXNo8g7roklBEFSf/vsacJye5HY\r\neurXhjpk10zMSsngP6JQwM2vebqx7UunZDkNpXmSAot3uMNB4xETbOVJSvFZ\r\nycB7qJGqJa5wwdJtXbuWnJNl8RzEUrSztDZkhlgYOTyhX52MyA/vNQ+V+w58\r\nuqD1GVM/5UnmSqAqaJrHIED0OFh3YJqFcFfGyBtLzhN+eCGLlp2P0YSPq5B/\r\ntzyOy2bxs6qQZ9Xna7dK52NlTOp8TKSH69aKdhPQPNYW9zH1fD/iGzvP7VqY\r\n3V8hlz/obV71C8KhL9wwZrpccTxd31fXBKybe3mWMka16RE2PBx1DCFGO0qz\r\n/iCkhdWw3I7+pHtF87HyUGQWlyfvK+cDTnjRBv7DcnCXnSQRFcRdq5HCfLYg\r\nqRp/ycgYQJ/El+UFcFPv1UNiimGFpIgs22/WKedv70CypqNsRe+64cMEFmzG\r\nHyqXhwTDFzBFAXT04Kscu2gcSiNUPlQyt6XzIFEG8SID/vmXe4Yu4LToSIqz\r\nvWQ7hjgMW7bjsLT8hRhXFc3wLUIR9MoTktA=\r\n=oEud\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"038580a24f49c6e7862d8d730cf1b4e2a0f72c11","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-03-16T13:14:48.725Z"},"_npmVersion":"6.14.16","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.15.0_1647436613451_0.2389773068679606","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.15.0-2022-02-newsletter-180b512b7df73f8122907e618a5f0cf798c9625e":{"name":"resin-emails","version":"2.15.0-2022-02-newsletter-180b512b7df73f8122907e618a5f0cf798c9625e","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.15.0-2022-02-newsletter-180b512b7df73f8122907e618a5f0cf798c9625e","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"1469b34118568f6ee0cdfb2f38cbaeb2dc55df9f","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.15.0-2022-02-newsletter-180b512b7df73f8122907e618a5f0cf798c9625e.tgz","fileCount":234,"integrity":"sha512-4lLrWUPWwhBg02arbyL2VGAoGl5qnVhLUW72zzveoyKgw2VXlZ3JiBmUavZu1P9H7RTjQlZnHI91EW4K3hvHbw==","signatures":[{"sig":"MEUCIF9vqDmetswSzcaheZt+ncoxAGlBgHowS4LKS0mpsNHhAiEAtHStLmjd8gRM+BpXlzFJTijP8cqmyCEY2i8bn4agm2c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21545011,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiMeQFACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrWJg//XQRpGVXRNSsHyIL+167XMrSsTB88nslL4qtehhOG8IwHRNXi\r\nOUS5bv6MdrtoXb6r2LQKOWoF4SGuNP3pMXzEXvyK6JoVrzWfexbPqwQ0IMdo\r\n4sgmH0mQfn/Ux0RhcGJskW7r4iyvv1h+p9UH6qKmfZjSSoetkkdg+amhrS0w\r\nqauw1yTohcII8qSX3/1p3vvMUKuR+OlW0P+d8z5N/tfMTdZAv0T8r4djZ6+Y\r\nG7jztfSsiQSbJ1EsDzkgqDYJjLMf8tcr3ZbwjlKERusVx4HKfXpKS+5MmKZx\r\nV7d+6FZ3sNLLn0tRmnq2brpkO6W+n8g76v9wpiuPqyvELk8LylCf9TmAz7/c\r\nr0wdL/X7f4clzUVYCE+YeaDZwO8wh5fxIv9fsXbO1ENthrhvyK5zMnQVRlDa\r\ntBelVbhp7c4EJSeTzDqePE3MkKfaMWxD9+eyXF7pb0w5vMF1k1HA867pdGTd\r\npWgbC9tvyVSUxxOClDXn1lTQS6TE57JYMffqC7W0HBXbyoNfw/6TT425FTBz\r\n2VPlGAH1kFoOvqUWqzHG94YWnBTMHj5pM2L/IJ+9BEk0LGFx6DGtrfkELMbP\r\n+cTJ3eIAsjMs/1Co2SCWP6Wl89p7yAAV2wZV4yu/47pjvInO31X+wIvXtsZt\r\nyeRPuEQTvMWD/xFbiPVAUV2vRFe5C/ZTFe0=\r\n=z3GL\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"180b512b7df73f8122907e618a5f0cf798c9625e","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-03-16T13:17:53.253Z"},"_npmVersion":"6.14.16","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.15.0-2022-02-newsletter-180b512b7df73f8122907e618a5f0cf798c9625e_1647436804966_0.7700771576899368","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.15.1-2022-02-newsletter-f245c9959da55edff42586ee8cbda286319f2a3a":{"name":"resin-emails","version":"2.15.1-2022-02-newsletter-f245c9959da55edff42586ee8cbda286319f2a3a","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.15.1-2022-02-newsletter-f245c9959da55edff42586ee8cbda286319f2a3a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"6337a8627d0fb41cf22475dc7bfe7b4efc197ae2","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.15.1-2022-02-newsletter-f245c9959da55edff42586ee8cbda286319f2a3a.tgz","fileCount":234,"integrity":"sha512-5rpKbBxjuzqojc7ryFJ2/rHDhu8Ed35p07Fp0ArnHe7Xk8yd3LfcTFUSPIT7sl81QkW0w7p4ZikKlaHzYFeE2Q==","signatures":[{"sig":"MEYCIQC34iXfN32ZqCLBwUg94zDWKSYVyZwDM1H5lvJWfzMlEwIhALNZlPDZhi8KFeO8PBKPuFL5Cd3omT610LyFqdvjxOdd","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21545039,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiMeffACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrbpw//VXcN3SfxHPfuWFo1eQdS0e8GzuztnNUdW71aAsjZRuLvae6H\r\n6Cb6K99zSq9kNpMJfJP3sMeDIOV5arTP2Oi29Bc/tNuP5xEqS/SIURIOjAtD\r\nmoiFfjEeL3luzhBDt0hqhQeFozG8M/n4bLwhE+3nYGqK84v6LYG8tpqKDzXG\r\nqLXjG7XpYaVq0YlzvT0KVaDblpv+S61kJ8sQb2ApQ9lutYWvxmasZvck4cDs\r\ns2k2oCUXuAm5uDGJMlWAryzxUiBEJ92B92SBSawLMvT/LbiBoE7R7XVpBt4W\r\nmlTufZHCWgvGKeiyBSzGshu3DbCkubehJbb8qGzqIhmTnO+368XhrdRJtDRw\r\n8bGkqPRZ5GAU77yBV9H/Flt8zLTNyu0YXGMgfkRg2wEPawtuRh6nT844lViQ\r\nLxxWFKNccb+4QXcbqJCSEUAAzOagJ6Lb3qhKHUchlD0nejbRT5Oxe3KgFFFk\r\nLh2fYj2sHQyb4nY8VHsVHybxPq1+vo4A/3k8zkfXIZDIBqBA8Q2B0uUwZ3+6\r\nBQW4we7139IUNFp4Q9ACxt7cRasuXlUdey4Z17IsYkx4YP225v3EUwEOy47D\r\nQYtaGJRiC2+A83bJWoSZzRhw1Fr6xQVjRXwP+wwR5x69bdNxuIy/un8LCj89\r\nSFuw/hz1zVaKHj170+0UwHobJ/vqDy1mq/M=\r\n=+mn8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"f245c9959da55edff42586ee8cbda286319f2a3a","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-03-16T13:33:50.782Z"},"_npmVersion":"6.14.16","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.15.1-2022-02-newsletter-f245c9959da55edff42586ee8cbda286319f2a3a_1647437790369_0.7875244296068225","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.15.1":{"name":"resin-emails","version":"2.15.1","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.15.1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"f78c1ac2b9920214754eea3529c2de78d8d68e08","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.15.1.tgz","fileCount":234,"integrity":"sha512-Lf9v/+yG47tVpxRfdk+n/gPxs5EJTdXEihglWVmnYOiO/LnF6UQzsiR4IMgfqE5OjFMiUfVMRwcZnnSrlQ5RoA==","signatures":[{"sig":"MEUCIGYpHvFtao6Z5bfDSVlPbVaKQPqtIv8XtpvFq4Di77oEAiEAh2luwFdKgyAwKuVpEWC91VJqQJVLdSoi17xH7gX5aT8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21544979,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiMei0ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo3qg//fId2yEPmgjCf3Cd+w9u1PhgSJEWs+igL1C/1m+QdKHlO9FHO\r\nQakEYICAvOsOD2x3DB5y9fCn/EC7vY8B8fEMYfj3HtfsqmafC1QE3UOMYxkP\r\nCdFyFLEbawAKzPSVvreDxyw8ziSnFMdXLi6ouUJdcTPmN22DuKW4SQnkjfit\r\nTUJ63xWc3vLoIRTAC6gUA/Ye8yqS6CKfdtK11SEwK7sL+tPy7BfxKBpuZGFz\r\n1IgexwPfuXXSUgbSwNP3Fhzkq0gNTv0D12tn++qO8PEZyVoSyfFhOvUf+oCV\r\n1EliCthurDCJIkyvzGfC36sd4P8OK5QkEnxIMNOLVcPAo6PHo537lnOfWs3O\r\ns+ewuSeo32fsCBvQTwRYHtXwVzXM+hsuANvTswqMqjfQcZe87dcECe6qG08X\r\nM8pVKKTvjGXXINiFT62jlY9mNVdyvVmWKbXmQrqxUxqOT+3+XJfk8jlHvijQ\r\njl+Vgbxuj0p2OOLaDPB6srwDJrkc53QE3ZVgkFF3WtZcj5UR/iTHylKufMh8\r\n9Czs7D78EeERCEN6S8LCh9xsTLkpMeRz/5jmANu/3iVkuzIU9dddn3qo7AXX\r\nMPuYIecLEe74wAzABtz6KSsVX7IXAd8xDJGJEJ9aVhYJdsWOlmek6cw7y6HR\r\nPizrXxLUFc6SjPMP6tmGHsPkEoyaCegVmGc=\r\n=Jlep\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"333fb2b93fe5f5ee8b0b60325404f8b87cffbddf","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-03-16T13:38:18.097Z"},"_npmVersion":"6.14.16","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.15.1_1647438004471_0.6523007354735229","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.16.0-April-newsletter-5eb8b8dc75760a0ee025016b824c71f86ea360f7":{"name":"resin-emails","version":"2.16.0-April-newsletter-5eb8b8dc75760a0ee025016b824c71f86ea360f7","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.16.0-April-newsletter-5eb8b8dc75760a0ee025016b824c71f86ea360f7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"5216d2369b89edb87f52ccf693b849097412dd4f","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.16.0-April-newsletter-5eb8b8dc75760a0ee025016b824c71f86ea360f7.tgz","fileCount":238,"integrity":"sha512-pE90o3XmslVPO2sJ6ovbCWS15FZStT4YpYGm9+HSVjl6XdTiIcRD8XFMteWzKhviMxdkEIrjn6dDrjcBzby9QQ==","signatures":[{"sig":"MEQCIFVvtZEk+trFAnXs/kNrbMyu3yqrF+CxG/tGAC9zi3pJAiB8hJNGsZO/Lfywr07F6qw3tDYJq0CdF4LGMQ/cmbeLFA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22023889,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiVs8fACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpnwA/+LJ/LEt42vaMoJXfc+nXH6FIqM+x+vGom0cjEB/KVFE3AvoPk\r\npvcY5DOxJyt9PnmUgaYeeB69zwPNn7c+mYu3JEmD7goryfrontUNxFxG/q8S\r\nbVqBiALbTVt7oJhmzzKgnTin+DaZklxkTlbZ4iFdzm+7MxYWNUMvHkioIrKs\r\neDSTx7LjfP8RC1MMx/edtOvOJ4hHnFkD9uXAbaVzuEN8Ulive/cXHQWztaXz\r\nIIZUV5NlvSRTG1pjvQP7D4m+RS5foGXrHNoY72LoxHl4KzYN/FCe0/suOiCi\r\nwwY+GI5USxSF/58cyLf075berCp2/Im0TKCJpEo3H3IMY1vqMXujA3kQ8lRZ\r\n4blTo4l8n706dfYjD44LOXRsQhXmcobuoyZYXIlPsxthuExA7KYNetC2D4vv\r\nLI9D0jUVz3FHDsB5Csugc9uiD6rH5Itnjm7DyuNhzKFUx/TJyw9MdUomSjso\r\ncQax0+xB12nNzGt8BhI+IojtniYQoNeq6J88I6NAxbFrRmGlpQIw+4ICzYpD\r\ngQxupDdWBq8oAO+i1B1HnNVblB/Idrhef3ybRQpvLEMzw0ZRkwf260mrjKvi\r\n0XeVyELH19HYsmdp85aM4mxmMNbrk7VAi3zyLKpx2of/6YFqyQOOvDKVw4QB\r\nLMHCS0dkArFRTCPIjMzxIPHEZKcjNgm53u8=\r\n=cpcW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"5eb8b8dc75760a0ee025016b824c71f86ea360f7","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-04-13T13:22:09.471Z"},"_npmVersion":"6.14.16","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.16.0-April-newsletter-5eb8b8dc75760a0ee025016b824c71f86ea360f7_1649856286610_0.48546087844505426","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.16.0":{"name":"resin-emails","version":"2.16.0","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.16.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"ef66b26f79632f0dc5559b319849c33a4a850af9","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.16.0.tgz","fileCount":238,"integrity":"sha512-+psIEWXudpCfoBBJMLag0h3KSBNGFYzmyZpna/iiOqANG12WAROXNphNLsjHSTAr+D/CDm0/X4xMO98n64NQpA==","signatures":[{"sig":"MEQCIDoB1R3eRBj52+h6OM0bo2L1vGasvIX+WpX0GeVybWHrAiBez+Puofm9qnvny0jCpD3v8PN3EIK7Hqn5r+9l9TJvVQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22023831,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiVtDlACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoaxBAAgbkTTXXxZGJsy7t/R2+HlnCR0DOSHincronuyGsffHIxY592\r\ncfRNUmu4BAQb4UY/X8VNaL4BA0jrQLmLUieYML2/w9Ga3eXuFaogZBgXXlPE\r\nNdkxcO89C+P/BnImPDYg6fgbWV/Nl5unpdBxklkcKzv8lntBvSlr7WmneL4x\r\nrRc1YjPUhYHASb58oPtQYPhlTWYz983rxrSxAh3pqUxLH8jopAIMTJ/B0vPe\r\nwdGxz8FiQB61wS9g2KYI70JrlEAuWfSdDm99bP2mPq5nuAq3U2utwEImo68K\r\n8z0ZTnTUMXC7RZLbN0fw4Im92rJeqAvK3lXX1lZU+0Jd3M7AdlUA0j7yv8y4\r\n1EtjWDuZig69+Z7pkafIx0ld3gIDjQr0HtZtiErKfr70lkqYmBSM50T+ZIvK\r\nMhInIirwzFkpeZ1cJS0X0gbFT+H9lOCowTSAwJoMT//oBhwflmLNGxpnFkea\r\nVsFzCzsYc/NZUqJ5WMOqvfWyNCNqj4F7Nmg/Q5YXaMxqcMxN2ULlVHeAO6PT\r\nH8t4rDXZ+MT+x4ybICLZyyZGskOVYLB0CJAZCbxsEg1z5YV0P9nRCs2XtTMu\r\nJS4zd1uFis+MB+oDpchxyvGUxzMwrDNX1Z3rniyqQRt9CfNXC35ENgmmoMhH\r\ntUY7D+uMNqnslorRuk82UljmzUAw3g+y/Io=\r\n=cd0R\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"cbfcb1530954ef82712d9a94bc2993a8e02d3047","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-04-13T13:29:44.932Z"},"_npmVersion":"6.14.16","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.16.0_1649856740536_0.028872188711535296","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.17.0-add-may-2022-newsletter-17b207fc714755bdab4d821dde8dcc461a2a72b2":{"name":"resin-emails","version":"2.17.0-add-may-2022-newsletter-17b207fc714755bdab4d821dde8dcc461a2a72b2","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.17.0-add-may-2022-newsletter-17b207fc714755bdab4d821dde8dcc461a2a72b2","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"afe08d7481dfcae275999fd86489e8d2b10c59df","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.17.0-add-may-2022-newsletter-17b207fc714755bdab4d821dde8dcc461a2a72b2.tgz","fileCount":242,"integrity":"sha512-hbzKvieuy5oJaSDa8K1qPjLtU6DQiY3xfk6Bf+FxDeWJJhIh4Sxst6gRMz+Wc5TuiG5aAo0f8D6DRgJ9f40Tgg==","signatures":[{"sig":"MEQCIHgl488Vl2tHbkSN+827PwQOREROLf6Z86Ol1le+zKbhAiBQOWkPMKhUQgOmnKjgKkU50j3sLbkBlwPBMqQ7vcmC7A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22502517,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJifvTDACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqyVA//fkoylBWWLXrTg6Hsu+/nngsrcMi1ptLwrU/KXvSt8pFBjlKw\r\neHDymAn4qLtKNjq9NJmhmKFkT2JIxFHHhInYoF6eYKnQECj7XlGQ58PmPDhY\r\nSvgI5nDx7mi4RKNUva38K3jZ0O1wZA0/AOZueAmapqcu5bFiwbjsbHbGMkEO\r\nxtyjZxm9A4uXBd1w22dZxILhw7dJvp9ap1qzJ+zTgSJ54JNdRlkz9HJa74uP\r\nhnKy04sG4ExYgE7qxVh6IJHCSBuGYNvKEM10w2T8j8oBIdc+dYSMyd0xy7GR\r\nj+8NlUIMdHW176wfEVtmnh7bbSwGbM5jCgNiuAgJBoAQ3nRTOxZoxPQXy9im\r\nZ8FIPLeOCWQWauIdaNY1B311iM8uEC7JqgX9XL8aq12sNoe6op3nQN7WVu0x\r\nt+0uzmvvLU/RMEOxspJXBwJcH6LxTAUv8xJXKnNt+a7+ICbYLoKBYvRZL+td\r\nlwBNFxOBFG/UqqI/RjAfSuz5pro83psl0dr40kFCQby9VU0LQufz8+cz6Jbd\r\nxMs2Gtoizoh5ILhotRllXi5ePw/TbMVebAY34xDvDaLFE/bmjNSjQJINSrOG\r\nTzj9VKTbpVVb/W4n3QdewGG2BmTUKF+aTkIlIoFuMK0LzGE6CZrjrWDYlqrl\r\n0eOIED0UsrqeL8XAHCqEdq1c9FJzqSmd25c=\r\n=WMPx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"17b207fc714755bdab4d821dde8dcc461a2a72b2","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-05-14T00:13:53.785Z"},"_npmVersion":"6.14.17","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.17.0-add-may-2022-newsletter-17b207fc714755bdab4d821dde8dcc461a2a72b2_1652487363103_0.10097052342810753","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.17.0":{"name":"resin-emails","version":"2.17.0","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.17.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"a2e469b6b9199e70e32010d3a2976221c887fb4c","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.17.0.tgz","fileCount":242,"integrity":"sha512-o1CIK5Yg8GHYHKPMqXEweHOrt50MNSAX6bAPlrOn/qgVKF0Ugl48oev2OSsSedsu16W7gMVQikTR/zAGStfj0A==","signatures":[{"sig":"MEQCIG+fx2+LVW6Kl3bTg6yGSJVnbsLxGv8CdqGvKisZnxfJAiAJcsJk12DtjJar8yO6K5mXkOTmpBoAyDwtVptoQnQyVA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22502452,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJifvXZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp+PRAAnmL4Q0rAb4e0sJ+9vfKh8zKWhJy2SO95x+RVEmGcPruohVVG\r\nsHeLwFE7YkN60ztKhjDTJgF8fwWQOwVLMi2vqqXoxC/2jcMPYyTxSIUVcJ65\r\nhjwQLstbjQpFKR9+cor4tK42PNU7eVuQDBQhf6ebK8oT3TdZdyOyaJEtEy+c\r\neNOi3gVMuj4gmZnD1j3Bs5Ffm1UfEIi3IWxISwkBQ0kQy+8a81QmbmhLoYGU\r\nYVbyj4bFE6uykJ4uZ2CvfC8yyl8qYhSX4APhEIY4f+W1AMd2r7veD9TngBoz\r\n6lIZMAiheASptzwMxAp8s2oUBAjSpEVnUrKl67kmJrRIWLap5CuZshw3gSEL\r\nB5KK0LSEHR9ggl7bCE1WvstWUKIJqwTKwYXNXZ9XOa7F3oItwPgXUPkgCxkQ\r\n5NQG3aYJIJ7goDdhKlQdu7ipsn+AUkqM68sfdpUc3npolfspcobGZEhL/TZ9\r\nFGNOgwh5oLK6/IcF6X3hl5blMUItyT3tGuQiZq2X8QHmvzq0b0EgMlOuJJZ3\r\nH0ZeSFer8EkS46Pr+GBLvOHkApeBb7rLmopll6ADMbnBMcxJ6cJcYimtUDzb\r\nA45opwOsMilBwUwHWw3dtZNb4w+VknmigkPM3zxV0V6Oh4jNnlPkMGWhI5I5\r\nUwERNQQxkpm/MD0pJ9nuiRyxqBS+b9g9Di8=\r\n=9oRG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"332b8dcfae2360b07a96229a6d4af338ca390e16","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-05-14T00:18:32.655Z"},"_npmVersion":"6.14.17","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.17.1","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.17.0_1652487641221_0.24827595370815092","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.18.0-add-june-2022-newsletter-c38759341913d3acb3acf9409d33810edabd36e1":{"name":"resin-emails","version":"2.18.0-add-june-2022-newsletter-c38759341913d3acb3acf9409d33810edabd36e1","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.18.0-add-june-2022-newsletter-c38759341913d3acb3acf9409d33810edabd36e1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"d3eaa669eaacdcb4d4ee3dd4ea30d613480ba6ee","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.18.0-add-june-2022-newsletter-c38759341913d3acb3acf9409d33810edabd36e1.tgz","fileCount":246,"integrity":"sha512-wJjXaZNmERe44yE5tM8mu6/yuFL5PG34YtZiyLVR5XK/TSAnGsg8+gJE6Ft6IiVsmfOWDiz8LlWJSOSb/nTqDw==","signatures":[{"sig":"MEQCICCXPncSFZhwN8n0t9PqmonqU9DPUB2S96Y4T1oenLSfAiAa1oYbwWwD6OARYFPahzb7YzpTkviRkEfCwSspOCOuqw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22982622,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiqQlrACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpwJBAAlxGvjKwrMC92da7qStJih7is4zegMvwMno7MRR0z+ue7UYIj\r\n/m2WGq7TbB0BlRcmxebyVikaEZkuOFN9NlDwabI2YrEg25qii17ZcdL3SLJl\r\nSQ05iO8/fTnsVPLKOCMokh+18Oc7W3TVf1vzHFy8buP4+h5eGOjsBLorGy4X\r\nMhjnf07+1bzi5gHwOoML4ROZszS5x4JjGJwGCzV76kwfyCgx4Wv44NNqx4jB\r\n4hqTGFIz/Dv1zu0koJ0SInqoz5T0ye31uZ5UwFJp0RWvqH4USHw+QaTBJLtS\r\nwmVYmP4O1Da7KiXlUXakN+oy7lsYaZKL2Yhk8e1xku7Ez3BaxbywbX/X5W9h\r\ni/1/YJt4IMXZkn63dW8zYe6fkxupP6Bz31/wFQBGJbNfNWWmYSFrSSdxYTZO\r\nKDsYo9RyCv7TA/jf1cV6jzOeWSGx6ZkwT1WfKJxrUFJx1dKzS8Si9i2sn+KL\r\nYbIkl0IjHqk2gncK2lp12ySiWZuKIFwlEmLKOBAXC25dxhdQkyUrsZxe/YQm\r\nmK0SfbUX7wjqCraM+3vSM/5briFgvIf8l6ty1t5uvlH3tcVuoSSPNsoTm7i3\r\nnEat4GuFixnHN2rFPjGU0ZfFgtvN0HBEIZ+R9NVlhLifVrLZTCfkWQ1Z8xJQ\r\nA55vK3bIxpNbQaCQTqdAH+HT+xxcuiob7CE=\r\n=k3aP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"c38759341913d3acb3acf9409d33810edabd36e1","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-06-14T22:16:50.508Z"},"_npmVersion":"6.14.17","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.19.3","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.18.0-add-june-2022-newsletter-c38759341913d3acb3acf9409d33810edabd36e1_1655245162851_0.7710979962046234","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.18.0":{"name":"resin-emails","version":"2.18.0","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.18.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"7e0bb46dcd7303715bf10438fbeddd314f7997c4","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.18.0.tgz","fileCount":246,"integrity":"sha512-3L2sW6mOma/K9o5gvz2hjhbpzA2nzcqsXTdaWT0mMkE9LBEb85mU1E1GOZG6o2qVYWY66otqexAgb7vBm6bhWw==","signatures":[{"sig":"MEUCIHBYpk3WoCKMuTos+xtSLtPrslMsdyVAAY8wkWJe3S8/AiEAgLVdH9Mbj2+YS2liQAcbJ+kQ5ASRXpiRtrs3fxhpbSA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22982556,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiqSBoACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmortQ/+MixGTLtzNZZPU/zngAIbNeUUInwn6Y830hT+wQCHiOFsTJ6t\r\nsZDH3wiMRC7oUEdIgYvIbB1AaBp4JUcKaqH7Nxi/AlNNBKTUFh+J5ae20ktZ\r\nHWbjIRw5JYNsbZ/9MoSXUwvUI2tXOx4RLR6fAGm1vin/9YfVWr9f/9z8RE1c\r\nKM14nIM/aY80VVPf+8KSleJtS/hox9xE8I2Ct6Ph1casdjYmoGfUhQfjg1KP\r\nb/Rnpt4x6KZafPPn/cvbjFoiLFai+MLRqOyXXghjw5eP0+blq9YSHHblgECA\r\nCKwIOG+5vFz4pAcYM719pBFAYuGfc/a3aM76WvRgdMCL+k8xDc7MIsEcxfVg\r\nAVRn07sqfSdEYYQJTAAoEy1d35ZK5U5riFE2GvBDF3yruBfo4lANAxxRm47j\r\n3HzbCEhavkExaqlQ24oCEyQHdCOExhWUC3/5rSgJ2y4bYIlJ+7XBja+PSXMJ\r\nffROAgb+f3yTTGyiYsbdxdQhjfOHXr9d96lLpDDelnBGTb9A+HljC34LBDIC\r\nLDfR+5it3IM/swXNGJbixlILRfkdZ9pSEuirHVzeTLzUWDVpATVNBm06HkFW\r\nyo2q3mPzMsvgr9uOKfT/oIESproGT/oB/EfJO9MTHjIj5wDIZ06gmPrYWvUc\r\nLKk0A/ha6Kgh9nuULR5QcHc249mBsrod2fU=\r\n=E2ng\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"b3156f0ea7def0dd6feb6b46bec70491d8d0dea3","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-06-14T23:55:25.118Z"},"_npmVersion":"6.14.17","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.19.3","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.18.0_1655251048171_0.05314746739057563","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.19.0-verification-5fabf57265cdd4d3703434dac27ba4a6aea56960":{"name":"resin-emails","version":"2.19.0-verification-5fabf57265cdd4d3703434dac27ba4a6aea56960","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.19.0-verification-5fabf57265cdd4d3703434dac27ba4a6aea56960","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"e89e1453ac0d5ac1cf965ae74f88a74ef143a0c3","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.19.0-verification-5fabf57265cdd4d3703434dac27ba4a6aea56960.tgz","fileCount":249,"integrity":"sha512-+xDeIrmZNru10sLjsC3P0oTpRCQ1STGDzKRBM8FYJSGaXt1iP5JKwmU0eFi7TK40ddW16e9ovhI5mJuDA1f39w==","signatures":[{"sig":"MEUCIAHbZ8xb4lvgS+Cs4mQfjqjmWxpcpmxowdlUr4jLHNSTAiEA2uytllf/RDr3oo6V1Ehw0HWdAq1suMiV8Rcv19bOj74=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":23031396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJixoP+ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmolWw/+JXQi+/1KJZNE+NDjqGIO8c+zTKym0q3fBj20H4PtZgYixUST\r\nc27LukMRNGA51CVRTTv8FD58qx7d9mCscmoLoxl1cCPNqJDzQkvX6xFTboiN\r\nsqMmCv7quhKf2EY9lNsxb3aA8pI4vdUlUrOiNw2V3IvT7ZK5MZRyTKk6pDno\r\nFT1cWEKIXXO3cTRY56E1zdrfazUxOVeW5XW4pj5iWT86m4yPvhBqI9kVrlhp\r\ncI8svnHjXzmLDeyHoxcbnvelyKdooUWHtTI3mwyiGhXZotDW2+sO2Qh6tahG\r\noEPx/HG4lChOZw9Wt/6memPzhY+pk1bN67vdW70DdhWNImJim651x+x5yq9J\r\n1sPCT5BCqILA8RhKl/RxkZPl83YLXulmFsIh6IcVuXxG/hhKW2qvu0WXcTbY\r\nmLpT4HXclxzYBwKfmWa4ufOAZxAkBukMil4f4FYjWkYhWaISMRi8uAplwmwP\r\nsjD9t6rRydrASFWh/kqfD7bYBvEcF/JgBk4eFLMq8sYpimQW7Ovq+uQLGk2F\r\nX+p2c8HN3W+sKx0IhZ2lEq/HaGTfdD7a6tX0cxlrYHOxu82uChCCK51+sWbj\r\nLG4x2zsoyyRTJIZwQ0Nl9ZUITUv9iRZlkoo57qiQHoulz8eRAx7DvQkBkvqp\r\nlqY/kNO3JWh0sXG/m2zNfwap+QWGSeawsPs=\r\n=Kp0t\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"5fabf57265cdd4d3703434dac27ba4a6aea56960","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-07-07T06:55:34.224Z"},"_npmVersion":"6.14.17","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.19.3","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.19.0-verification-5fabf57265cdd4d3703434dac27ba4a6aea56960_1657177085891_0.4502579934419051","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.19.0-verification-a7d3cff13554916266cdebcfbc1317abe876e9b7":{"name":"resin-emails","version":"2.19.0-verification-a7d3cff13554916266cdebcfbc1317abe876e9b7","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.19.0-verification-a7d3cff13554916266cdebcfbc1317abe876e9b7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"98973226e9c4df3ca591b119de8c334d7c2600cc","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.19.0-verification-a7d3cff13554916266cdebcfbc1317abe876e9b7.tgz","fileCount":249,"integrity":"sha512-x+ut0bJxT9lQjXOxJ/Bd5RXMDWZit9d+Wla0WdMEueo8MUNo+GA7naAJ1KA4pY6+Jk/eThlj910CQgXT7LPqYg==","signatures":[{"sig":"MEUCIBn2dpIVpoalncDDjyCQJJJdVdXCoh0ugwzppOCvEaSNAiEAwep6r0V7hrGnX2YKW11O2Hn8nN+0PAOTGhTXQAeAm6U=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":23031476,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiyAaOACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqY6A//WOLWB+lslj7k85F1RMJXeKLSg6UyVY8LDD3r+V+p1bL2bKvD\r\niE/poSeV0IVavMmRxs3V3XES0mZ/EOqt/YBbFCLO+mFZE8RHXpaMmqDOSRSy\r\n8g/at5lyjIHILSFDlw55deon4oLvKvyY6NMjc4x4seOgwiahiq6lB+fASzct\r\nB2MsBKl8sW5MPpRWwC7E0UST/6RA6XEh3ENtuc1b2YPQq7gSi38RSF0XSR1x\r\n1iZvXFuAmrB+d8yTCNh/YAU691f1RhVxkQwVtqqRRqSZhrW0rCHGQ0RwsTOV\r\nZGc0EwyGANzUf0teWtk7EddVbj9alVywyaNizYWI4wTVaCnuvJ1icsjIUQb/\r\nYVGyrbWZ6jEgh+3glJzQtLuqOUYfopeo+2WFVNr3XmVzdf9Fr3V3eutPn4Oh\r\n8quu2WxkIt7rdWfXJin1RC4t35mWH1rUm8kUEXC4cOssz45Z7Wwn+8/F8pTc\r\n+dEZJM4j+WF6LFLoA7xHnrTqHeVvKcIB+QxcMgtVSC+KiP7ADQaDBa1cSSog\r\n2Hrx9JHLS9IyH5MU40CpYbi5AgCZFCfaGTHHJ8Diza0+7sXlUDfhyZJSRINb\r\n5h+Wn8Pq87LmZIRaTyv96HBMT7ZVta21uRVjyM8XYDUB8WWKBzodQRu4bttX\r\nwACm7n40ijanb+c0OwgjFsDq9S9A2MFnzuk=\r\n=SmVK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"a7d3cff13554916266cdebcfbc1317abe876e9b7","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-07-08T10:24:15.995Z"},"_npmVersion":"6.14.17","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.19.3","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.19.0-verification-a7d3cff13554916266cdebcfbc1317abe876e9b7_1657276046365_0.5651802821549863","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.19.0-verification-18863d9a8a955a6c93956e82cdb459f462b036ee":{"name":"resin-emails","version":"2.19.0-verification-18863d9a8a955a6c93956e82cdb459f462b036ee","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.19.0-verification-18863d9a8a955a6c93956e82cdb459f462b036ee","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"af59aaa74be4b4a6722f63912b59fa285bf2d24b","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.19.0-verification-18863d9a8a955a6c93956e82cdb459f462b036ee.tgz","fileCount":249,"integrity":"sha512-DyIBfJReX1+CQ4edHHlqDIBl18gq2MR3ldXq6FgvHk45FSF45ak2JACK/4APlbsqS6wL++Nh8VDAy2nIxR8Trg==","signatures":[{"sig":"MEQCIAFRMNZ0l+ALg1eE/416dw/iZlygOBmR+36w3cVKTn8QAiAMvcEElMiCKWvuntFACVUDPh+jd+MIsI+9slfOHhNVmQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":23022520,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJizrPHACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpl4g//cwjnJ7L+XZpn/Ex1MG71ERPsPPyT+FLcJijWIiPQ9YRkPIbo\r\n49cBfdbrdWor0Gn0CWntTPTOosG3np6FVfARewaJRzx9U234VWyVKJKWiICe\r\nxa75N2zZeKL4zV0+lfd8J7TjXidi0W3OtMJFjayT7FOcMwBXslBo65pVIrJV\r\nh/CWU4u/DS9FBhgdzYZOa+Xq+ekPQO/I+pOJRm5CaniJWZaroa5EFc6Tu0a7\r\n4wJeYiekrHekcRyoYQTDR2dxEW7Nf8KAr6PqHU9PFS6dWzB7cRnXcDmOMc/M\r\nw+48jgudQTQ5GKcL9UzpIDyd+/z7lycfxzP94TMLc77+viSpv+hzIvGfhkvR\r\nxt68g3/OGY9oztpi+VlW9ZQt7xCoN4Qj9kwN3A2uAWO+waDDltdWBPABckMo\r\nQnuDMHYLN6HA9jOe50QueZxL/tPfCVcbiUHhxnHBiZh7xmj4AhI31NMZZJBX\r\nKdfgfrxfLpMwcYdrykmGinl1slQPhN9kbhsIG2yyovTUZD3pkHB/ZlcQemhy\r\n1wwV/Py7XELI9A91znr3o0pjP+/mWLlKJs0DZcWBnv+k7G5uoxEWLe3B2mDu\r\npqMOzxpuhcNqWXeXLd6pJrcCe/9wn0eDnahl6XgOUc3cuEq53CoqXcREglxm\r\n8p8WXDQclruHnljF+XuWqXfFTayYND9r+Wg=\r\n=eo5n\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"18863d9a8a955a6c93956e82cdb459f462b036ee","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-07-13T11:57:08.811Z"},"_npmVersion":"6.14.17","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.19.3","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.19.0-verification-18863d9a8a955a6c93956e82cdb459f462b036ee_1657713607337_0.7738725081701738","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.19.0-july-newsletter-c424ed0a5322c85659c6bef8a8a70eb8c86c0ffb":{"name":"resin-emails","version":"2.19.0-july-newsletter-c424ed0a5322c85659c6bef8a8a70eb8c86c0ffb","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.19.0-july-newsletter-c424ed0a5322c85659c6bef8a8a70eb8c86c0ffb","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"f86104a143a049bdec18761ce52f5924684f1695","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.19.0-july-newsletter-c424ed0a5322c85659c6bef8a8a70eb8c86c0ffb.tgz","fileCount":251,"integrity":"sha512-vQ7l4wJZHqS5Dbldq03ljqNQ58Dz1DQVew6m9h/fd+kzcqEobhFAewWpiJjAuQKnAXdlKCzjyAeEo4H8Xa5CGA==","signatures":[{"sig":"MEYCIQDZXxZWlS/FVUB/LUuIAhPZk5xWRnTS3ErQnFt4vUwAlwIhAJHQOjaOfdzh+k8i7YbUlVYXnZcq3gQoG8/8trspV15z","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":23354265,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi0GWXACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqkEg/+NdSFzEullR4BNNKv0yPxSJb9bWUjV6HsNVWrIfWaOKrlZuez\r\n9ET4xaNsir3pbLGeqQhsEwnt7pJtyccTL7BFABl7v69DZtmnRD7LzQueszto\r\np4cGUCEgJZNPfhAopWDvl/q4gFNjm09sav3/QjC9UtByBqmCaxLHRdnOfYpU\r\nEC3vBHed7JJYLxM0QJQOr4J36dNBNk7v9VyVRydlptlVY35a2b9b9Q78yypQ\r\nrSvs+QFU59icedXQO21NiqO248grHsTZiqiVM+mGZlvf5DNUzhoDbft8O+dE\r\nqmVe8lBaST8koFgXMcgLZzdg56wc6eUlnuz9tIdcyGcSjLcFA3fIowlgzdIn\r\n049X05MkTatjyeExv0pFjKleR5yXrV6gIYVe0D8WOjpKXphcX+ai8Cjk9IWH\r\nHw1HtjbFOgWC97103Wi1C+fYSAWkh7OS9CD9juo0ZERTaxkwc03N70r9/ZfG\r\nZI2+JhrNemdqi7+D0OBU6g+NLqjeONGYXeGBJJl49/xfP5DXavwEJjLmkAQ3\r\nDSIHEAJDcBNkUSrGyloH14BlKgqRJQoPZBzf+uIbyM4xDdo7gp+yRiOhg4QU\r\njyCEkAoOGBzggkrcpGAps9jrJATNiaeOMPK1lQ4v4K/XvwWdD1aX85+/1AId\r\n9+Rm6hwU+TB00VjvAhCRXm833RN/K3mJcjQ=\r\n=UAgU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"c424ed0a5322c85659c6bef8a8a70eb8c86c0ffb","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-07-14T18:47:57.634Z"},"_npmVersion":"6.14.17","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.19.3","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.19.0-july-newsletter-c424ed0a5322c85659c6bef8a8a70eb8c86c0ffb_1657824662467_0.7914135891211704","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.19.0-july-newsletter-d0d8c6096b514368f5b83cc25f4021c288b24a0b":{"name":"resin-emails","version":"2.19.0-july-newsletter-d0d8c6096b514368f5b83cc25f4021c288b24a0b","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.19.0-july-newsletter-d0d8c6096b514368f5b83cc25f4021c288b24a0b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"d1c31c08719ab733be0789542ebc8598124eabd5","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.19.0-july-newsletter-d0d8c6096b514368f5b83cc25f4021c288b24a0b.tgz","fileCount":251,"integrity":"sha512-VlWF5H0vySBsJLc3GAndbvUvB59pUjGhlQdRkxbxo9Jsj6V9TgxeR1S4Yo1cMXnxdkgi11MBSRSWUa2Mp3yf6Q==","signatures":[{"sig":"MEUCIEuCWB+sIbM559WUB9Aa09UX4RV3+5sdxAWaMsZq6QCjAiEAiA8agq22api+DGUl84MPhveTu72Fxlfn2M6rB4DUiR0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":23354209,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi0ZcuACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo4og/+P2YdVOce+kxLff0o4vA0zdtEEiVTBe2xrOzsnfFm5cRTlwfO\r\ndscE9HbTiscq8KIefn3Nt5yAuMWjUqlE1Bh4mluI8rKKL0394ahmaQi4x7nY\r\nDPQoYpfHgWBauoKTNwWo7WjmMPvSZ+vmOiLtnbff2+gbygU73q/f7KQoYNPw\r\n2IlnSAo35rPIX3xqyGOlIetcMY1pEA4jOQ945XuA0VozBRgzPs3xEpFkPZiU\r\n48XgpD7ccUBqD1L59dsYy/EdyC0tTE4t/pia/lUIux9slMr2XJjx6UdIJMSO\r\n2GtdYpQdHG7f6Ti4OwDEHuDbFL142LS3re5mzC5FHd03AwNarWWX6sTYsCBz\r\nlMWHA0Iwad9SMuOfNZ52CbrTXje7iV3UN35u+w6NBFsra11QOGS+KfDOY0f4\r\nUGap/4vYVM9j5V+X1YYEaXP7FEEaZSVtJK6PQCtxY5fGKptYumniY+DKooqq\r\nCwdkblD3+zM3lwkswkwI1sA1oEPrxsogPqyVmcjg8Wz5DRGT+xsEpfeQ42a4\r\ny54Y50IBWbGhElbbfEcVEYaxQlXEnHkmO9I655jKGhNHOVDOZ7zfAci35208\r\nvTGsgcOC2+Lnqbup6b8OlQQPfCi3l/fpH2Uo+V/Yf6JV2uVn5Q7QsXUqjSqi\r\njXzkNS5ZMj7dhTkqm3JByFR7vqi7lXPZR9w=\r\n=PS7E\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"d0d8c6096b514368f5b83cc25f4021c288b24a0b","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-07-15T16:31:26.637Z"},"_npmVersion":"6.14.17","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.19.3","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.19.0-july-newsletter-d0d8c6096b514368f5b83cc25f4021c288b24a0b_1657902893483_0.5692494919185003","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.19.0":{"name":"resin-emails","version":"2.19.0","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.19.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"1d93af0bff2c1d9a5b02e6ae69690224e7ca7d44","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.19.0.tgz","fileCount":251,"integrity":"sha512-k/IP7eTnmE0OKqn8X7wwmvpXYjIJUzJSa76jWzZ4PiY622myXE8Osuhpw7lOTQKGbELD5Rkac8LalCHlCyqp4g==","signatures":[{"sig":"MEUCIQC6njF3M7pj5Bz7QovD0h0t3YsNyqZbrbcpUUCutvMicwIgAKpT5rIBvXORHmWPpAJv277U504N7mkGf0KFk3Qqx9Q=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":23354152,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi0Z76ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpkQA//dLwiwPOY/7c8+4TThwgkQ56O8FdLpyTTOVLE/12/JL2NFpl0\r\nZBwznAPNRbU7dJ5K4ZR5z19oeB2pVXPwEk6VfKuRkkgr1+UTYEleVJkaVB5m\r\nztav8ZcWj1yBhPwZw6XDQxFV+Dy0wto3Tz9AOcE2nA1cPkwiIYGI8yPNiqzD\r\nai9MvxbHyJP0nC00X1A16Ap1SBh2L95NZ8jVREVavSBSdcExZA/8VgUct+qe\r\neaSyuaQbb32K3eMTMPiMjGVbqEoTTL+n+k8A6Azo2JYYGPVxEjrXdZuyIM94\r\n6saYqFRuo2RJOQ4Tg8+2AFZuN1BsHJ99C2nnpZFe90Me/7F5txzigJ/Bkwho\r\nacdhHq1RKyG/nxGHGG70NDLx0cMEpmZIlumNI1VknjE6WpSoT+kag18MQEAr\r\nkx78znXNTxUbHDLDpkIJxbx+Ofzf7LAcIIU3DG4CNzJWvHHoZ1c6zyB3EL1P\r\n1VGJO+efFJfLtN93udhKg65XGe9xzM/7d57oSh8gmkTZWm7idL8EVkem4WMU\r\n0hV/eQvq9VP5Lz9MGQj9OQXL1Qlya7BjUQ0X8ySiDM3BdidEQAdpjAlEilsp\r\nlM4SUdXEgNS2Z7dAmvtOwJlgmZOoSe2eR3yOuhcKNlOyTGaDyvZnNgl8g/0M\r\nL3Ul0fvac+Uc2oYtcxnyZODPwCKNkdDpO9Q=\r\n=qADW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"fc50668954d6a1415f6061d65668f7cc9d4385c7","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-07-15T17:06:10.700Z"},"_npmVersion":"6.14.17","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.19.3","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.19.0_1657904889789_0.3101703528363724","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.20.0-August-newsletter-9a8e21fd0d0b6f431a13267ec7b41f035c0c6673":{"name":"resin-emails","version":"2.20.0-August-newsletter-9a8e21fd0d0b6f431a13267ec7b41f035c0c6673","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.20.0-August-newsletter-9a8e21fd0d0b6f431a13267ec7b41f035c0c6673","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"d2d284d06db63188d8e4f18df70ec45f5f042296","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.20.0-August-newsletter-9a8e21fd0d0b6f431a13267ec7b41f035c0c6673.tgz","fileCount":255,"integrity":"sha512-lrSPl5zPRq1W44hLfcaIQLMydTioV8AXqKgoI6F4VOiyiF5mLKHMjm+h7dtXzSftgXe8/nzEQWtam0249Yc3sg==","signatures":[{"sig":"MEYCIQCRV9QNAVhXuryuojLSEYqrw39VqPhOy+GlPd0svdbRQQIhANC/UOaXHZn6UnGKuZTfSElii/CiyBImyCG8H8aYtiEO","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":23539678,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi86czACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpZoxAAgfNDvh4UcUljApzb+MSt2UrQxLp8Ud650NyA7L2G+wBzBsuE\r\n5XUlz30RJOsZWDVEKADSZz5XxtI0J8988cryDXOcle4SOv0ODDq87eiOyzDJ\r\nPUYXh14N4GOgmQZ+5sciGwwb2S+/IS6TAN+v5STNpZMMdlLaW6lPf1QQ1NBI\r\n/GExX9EP8ESeBqw7ykiwOszhITbmsR+LFvIfv/bpUf2GIaaIisTNpN8YB36L\r\nK0v10sfl1UICwLuWFsYHzcF7cmXWzkR9+2O9Wg+obHqs/LBjkqwoK7YdTiDN\r\nIpzQcCq/ZVvPIDu42SUQoS9/1GGxdpXDVLHeX24lxDVf6kEVO7xVgHXWlMkj\r\nXtjB0YwpTx0XE2rHk8oGvPm571Wztk4ualR7DIkxH+JBGUqu6fFKHBJzlgoj\r\neII1L7wN4yZDrxjkoDIfMcH35gukUQObX0WHwbDhN+Q+xiAjYURatzNh5CPr\r\nkVmWiKOd31rwSQTyXrLhuail6KUzJG1nferusSNbZNlxzf1PS5Ed5fIACxDJ\r\nhRbYj+yJzFrxpV1ToGPGPHbEjIeB9wZ3i6Ouhm2G36VgZ25Ef/XtLeKu1ODR\r\nPYsWboY0aTonbO2lYMY86b9pxQYQHYZjCnv99rlKSODf8pxPb82tUvt8f4/+\r\n3qjwAKFEk7CLJNsiov43j0g4Os1e7kZWn7o=\r\n=7FDu\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"9a8e21fd0d0b6f431a13267ec7b41f035c0c6673","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-08-10T12:37:03.104Z"},"_npmVersion":"6.14.17","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.19.3","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.20.0-August-newsletter-9a8e21fd0d0b6f431a13267ec7b41f035c0c6673_1660135219130_0.2822289472920132","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.20.0":{"name":"resin-emails","version":"2.20.0","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.20.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"6c925e1d875422cee76aa21e53a0c085db1d75b3","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.20.0.tgz","fileCount":255,"integrity":"sha512-749yb/x4y2kNV5IU1/0SH3FJ1yB+VKvVmIoKn8sb7Iz+x0mEY697k/lXvtK7MPIthHkkai1rZKO+1ZHNJkBMLA==","signatures":[{"sig":"MEQCIG5kBJe6/K2MqBIjCK/Kiz+Iyk0Vx+ZUmEn03Dlu78D8AiA2eHrzGW8UTZjZRLMSL0kBwVSlZv5inQRBKEw0NWibfg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":23539619,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi86g0ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrEjg/8DQ7dLYvrJW2icqLGxJQFRx0FnPlfT89SrCkBijJ8SYRGqq2+\r\nMM5rOV8/T2YnGe9xEOxb4BhE6FWTX+fYjRI3z2nHDQkWx++3d22uHkIyPb9q\r\nkz+GkUhgiR+dy3bNesNJUWJeJU8diaMabkrZJFJyhkUWEmcH9gVTI0Oaq8rC\r\nbw5YEGIwQMxNFkQUeNVuJJBLzy57QEG9YcE97owzzlSA06ijn02AFSmpYqvu\r\nt+7J2P0J1KJPFxR47CI1v0fEAjSKIwRUffSBNCaYiIwQjqyokgfm7fddEcZ4\r\nx/aqNCRchcojJ8YDkAnKr6v1SaQCYkWNzz6dPnob1WdZcXW9uS1Jx6fL9/Rz\r\nB0gc5vYGlw+h090syz4brXK9U+HRXKrmB4gbkhPjDIdUUdFYqJ/n60DgGh3R\r\nFUdxfBKEa7SbEU6CeFrlc9qB7hoH0wZ7NHL2khwl5E/ydcetOLmzMhx+qeie\r\n7ZkwPZ9Q92vJ8KjUMpHtR+KbTIjBz1qOe9sAhTfihx5Irkr1avBzeci2JO9m\r\ns8Z2BsyjYVIwwVYski+sDGpgnw1PTlV0HA966i2EuGCCDfYmslq5Yv7Rd9O5\r\n9PBUQFkNFtfJAFTnK85HJWEzx7h90/OzTBndYsHrrMwLhxNRghr1uv+cvkH4\r\n38Z7Fed+6nhaI1T3FHNGxmmFGqKmH5xmQgU=\r\n=s9ih\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"62139508e50aa293f309643589cccfc2355cdfe8","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-08-10T12:42:15.107Z"},"_npmVersion":"6.14.17","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.19.3","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.20.0_1660135475765_0.46485813385513497","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.21.0-september-newsletter-b524c35de561d708e4d0d8ab95ee1570fd3b20ed":{"name":"resin-emails","version":"2.21.0-september-newsletter-b524c35de561d708e4d0d8ab95ee1570fd3b20ed","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.21.0-september-newsletter-b524c35de561d708e4d0d8ab95ee1570fd3b20ed","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"f1f3f7e9945639a0ee7ad8a62e79d97ab381bcab","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.21.0-september-newsletter-b524c35de561d708e4d0d8ab95ee1570fd3b20ed.tgz","fileCount":259,"integrity":"sha512-TcFfLSDq/HbuHG5JvWsFZrr1PlnmYsupPmNFbOK7zCNtGxOhNQvtiynUKxfsqcu6LkJorlTcnwRUtk/OP1yr+Q==","signatures":[{"sig":"MEQCIHsKf4IXOSBpAgUSXIA2eOKwlcUzJ5qxvvsY6lXRLCOMAiBdIK7oaBHgt/JtSzd8YklcnPOH55hlHGOD/nVsPTYkqA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":23855818,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjKcahACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrKkA/8CWPul6qz5VK4CSfR+9/ra/Uz2tXoL0TxfkyQPP8sb5ZbuOiQ\r\nKW/tuvZ6KsBzH2mSTLi0+w0KQ6265wPbAnwr1qEEp6QFTTJFSYkf/Zt5L+3x\r\n4rhd8yrYx5XGWpv0sAuGoQCgnFKYIDRcRe4He+2egD0mvHHBfToweS1OAC6G\r\n6/HohhQ+4d4F/DIkuTeEaiS+nZ1/fB3XPFdjsJIyTucYia/MnGTmA0Ag/p2h\r\nzDmq6qQo5k1JTnBobPihBOLeSucGHilpkFHKVxD/A+eSz2+vVgQbwrKksL6O\r\nn8TA5xXIb8YQQTk85P+PgJgH9tZtBWvXwxPzpvVYkiOAUhIHRoKmZVBDcrt5\r\n9s2lat6fR8NaaBZy+HOEpgmJ2l4udrTlZ8NRnavRYiYFhVEXbAyE1dwJUrVu\r\ntewJVpdrpFZa2fIZyPvyfk6RmNW4PiA7qWTYb3/lcveqKVPJTp9SueQ77x7r\r\niB4MRIe5VRgvUaqtpMxQWbDLdk8mzjcAeZ1fJOMGD7Zktgfw28BZU3aLyQHO\r\ns5vldZVsxBLEtPQqPZsa/2s/zeYx3LOgzF7ovLNVr8rBi2YYEauilX+aiiGr\r\nr0vxK5G9QMlGzITsAlANHEpjo7nh46HsyQcQcLyKZDjJ/ow7knjz+wwgq2eg\r\nXYrXSmU6tKFj2sDLnEPBYanVqrzfELe7Zt0=\r\n=LiJO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","gitHead":"b524c35de561d708e4d0d8ab95ee1570fd3b20ed","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-09-20T13:53:48.086Z"},"_npmVersion":"6.14.17","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.19.3","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.21.0-september-newsletter-b524c35de561d708e4d0d8ab95ee1570fd3b20ed_1663682208593_0.6677666558798174","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.21.0":{"name":"resin-emails","version":"2.21.0","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.21.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"cdcec6dd2e2f38716ee425c9432aaf4038ca92a8","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.21.0.tgz","fileCount":259,"integrity":"sha512-n5K0XzWTrTkzkf0+v6b9GvQKkRU3MuCkYSYexs4/KtNNikgzXNYb7ua26xf9995v766+I0fk3KieXMJhzBq8gQ==","signatures":[{"sig":"MEQCIGFOH4i1hKY76Ry7+EoP1SfAVuzpTPbrT+kImaE/OQQLAiBdr8MDRLM+OHqmLKbZJnXjqny+/l79iHuCuau85+u9lw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":23855756,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjKcfiACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmolEw//RCdnU3HhJUBRY1afFQz1pjHZK5Wgpnf6CJXIqB1RiVZv7iWG\r\nMIQOZkhLhEO/KszFuRCvzs1+JDOXta8afIb9aL65HlLHLeeoxO0zrHdstGWr\r\nWkAApK/Zxgel5O3C246Nm9Ci5+igfmXj+OQ/lFWZv7YP0Kyx/sEE5NJ/fwVQ\r\nBMh43PNi+L3dniyLXZy8OaUrtfhk4Rgqmj5clkU8jwSESTRjWcrJhYTHfzLg\r\nVmXR86cPDd0xi9zEiKmcBy7BdH5yhu+lburHxsZqqfHNFXmLfkqUfQBPJphM\r\npocD2gWaUiEE/ed++W3R0e8YNADBOQwzLzJUdkI131GPA7XdHw9NL7jHKUnZ\r\nlvM3tDF4DZJiysf1lS105F0c8e3kGT1tvkSLVQndB0KRfjOI1WEyni+kdyIJ\r\n8gmAsCHLAU2XVVKxB3ZxHWu/ihoDNwoumrvGEe9ohVRid4zcB3D2Tb9Y71yC\r\nZtYZDJ5T5TT+Xilq0+8zjJ18LZ22nFne6RHGbwvYggRxcyteNdsI1uoh6APi\r\nlg90aAf3gpLZjUbIEjt6PUbQn1F/UIBWkQx7DBiQ+84I386JIWg+cKfx21rZ\r\nlTeJOMLjKvKRFl/CzvEO5Boz5k5I//tW+pXHQw8tqWWYpR6kGjE31EW9oFsP\r\n32wz4zqN9As2w29BPAwENXCZgP9GHrG2jRM=\r\n=o0+I\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","gitHead":"540abf528542105534316da132ccfa9ded4aa7aa","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-09-20T14:00:10.896Z"},"_npmVersion":"6.14.17","description":"balena.io email generator.","directories":{},"_nodeVersion":"14.19.3","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.21.0_1663682530327_0.14860642973330718","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.22.0-add-flowzone-yml-file-d8a85ffa0d168594a726a4b312dc791753fd9b12-1":{"name":"resin-emails","version":"2.22.0-add-flowzone-yml-file-d8a85ffa0d168594a726a4b312dc791753fd9b12-1","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.22.0-add-flowzone-yml-file-d8a85ffa0d168594a726a4b312dc791753fd9b12-1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"5b689890521d9aeed2088db0b80bdeb4f6997568","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.22.0-add-flowzone-yml-file-d8a85ffa0d168594a726a4b312dc791753fd9b12-1.tgz","fileCount":352,"integrity":"sha512-VZIXiLyAppeGq9fcdnxuu0+mUtLDcX2fe4H/enJrjwaASYLOAbuH33e6b/ajE0puuRZ1KwrTCBrwGWsjK4I11w==","signatures":[{"sig":"MEUCIQDuZAsNoz+DJxc3vV827sZsIqmN3R1h+Rq23VmkCOaJPQIgdPKoJITsOwkauNcdV5OnujW1YjeBl2d2+iT63JwF6dY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":23884013,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjcnBCACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo1PA/+L4UYo14mwXrW+ZU/+ct2Mf/Ij44cUiZ1/MbCzuNvUH6P6ZsZ\r\nRbcAswYtCkVbsgNTpIQ0RfUMexAeVlJzkqqPxlHRWUG6MuP1mel0QeQiRDnm\r\neF7vMXuzj6GclwtnSQpVAjd/cR6hT4yWywoHaDTjKErHE/FHdGEokm7H6Agp\r\n1nDMkJ8ExDUi2+r/7bUkBWGs3zVZ4TJwaG8BIrFvFQ+fcA3I1+PxykOuCLsl\r\nzU01Ae5gciPCk9z5HPI3qIXeDIul85zkduu4LwuD/tcTnRFnfm8MlsJWgiYW\r\n9x4uaswEXiQXqQcF8HmydcSAS/IaK34n6ma/Nfx4BJZzPIw7QnumJdNM5Rpu\r\n9s97rIR3aV9C54neKjh0EPYUnse0qgvSMfaPdY4pAQHAOPNE49L2BKIeeH3I\r\nzKLp/rN7Z6ISH+QZ5m8xkXE5FtnS6h5O94FYcZ4uMG3jQrqEuB7v97m75p/f\r\nxnL7tPiaYjDRuSwFMZLL09nAk0Yzzj1Prx6ROUHoMKd4GLZ9pZzGgiTs/F9i\r\nzi8S6KJpeyQqSBK+4wQ8EC+5s1MhhEUZRz3uctoVCx4SIgkDRQ2a9BxF/Jpd\r\nsEYQZoR6uo47JV8Rd8YI6JNofbl7jBH9S/TvsdqXkH127qjGrwO0J0TVwJFc\r\nMbvd15/1yDh/+UcMTGEvG0/3Avmr22SQArc=\r\n=570m\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","_from":"file:/home/runner/work/_temp/npm-d8a85ffa0d168594a726a4b312dc791753fd9b12-16.x/resin-emails-2.22.0.tgz","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"_resolved":"/home/runner/work/_temp/npm-d8a85ffa0d168594a726a4b312dc791753fd9b12-16.x/resin-emails-2.22.0.tgz","_integrity":"sha512-VZIXiLyAppeGq9fcdnxuu0+mUtLDcX2fe4H/enJrjwaASYLOAbuH33e6b/ajE0puuRZ1KwrTCBrwGWsjK4I11w==","repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-11-14T16:41:51.388Z"},"_npmVersion":"8.19.2","description":"balena.io email generator.","directories":{},"_nodeVersion":"16.18.0","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.22.0-add-flowzone-yml-file-d8a85ffa0d168594a726a4b312dc791753fd9b12-1_1668444226056_0.2806629868349182","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.22.0":{"name":"resin-emails","version":"2.22.0","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.22.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"56ea4a9b49a08f1efbfb16fdbdc2c6967c65a8f1","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.22.0.tgz","fileCount":261,"integrity":"sha512-v8aPKNefb+Yl0vxwAT5LQSMHA2HQhLY2PZjqGEYguFisiGIWceSnTrJ3A+7O1J4vhh5eRaAWsc7zhFk6Fto1Qw==","signatures":[{"sig":"MEUCIGuv3YAo0UqmPeftbxXft0bW65zCUzF1lBTLExbYd95IAiEAjtJbx3srleoeSqMSsSgmGs5kBOOAo//srSGmlyo8if8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":23883948,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjcnWHACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr35g//W3qORV1miAj0FBTh+AxPQfSwtBrwvvmkpPNl74RUIpw4daEV\r\nnCjJx7Q8KicoMfRRzQZZE3WaP39o2AWouFSUTbEl5n41xByUmNDNh0alOres\r\nKnGRMwdCHNfANcvolBQ4Q9LSwcgmLoT4CZWMNtHZ8Y5dGbYk3xlzYlFmSjdF\r\ngzFe4iGXAjs3TW2fzv+GFWHX42rZ3oYJa9J4LBfpNNGaSbZ0KchGOYQ9jzBM\r\n2/xNhy5dtrCFJSPa3fmunykbMQ7IPS3WQJ7qCT8NTEUFnQQy39VG2d4dErNx\r\nvcoQXFTcH85lFnYXWddMwORib/VJGEcOuwiJxGQwnSwFodmVtXn3zCiMOuYA\r\nMXE82B2b0kXDA+3cnziAZhgTIyxG9pzwBuFyxdcEqXTWFv9/8r/8BLA/xND0\r\nhxcccDPu5/eYrkxdl11Sna/e7illTRd4Qyr1YjTD+nVB0KBagfUSZF7BzwSY\r\nohqOgMaXPMFeUXG7lEpNJ27f4cE0cSw4bcEFj6j3xG4JfCCTmZ+/ThbH9wId\r\n693LAjUQw3tmGJxvHMhirHWoFBOpUYZcyIqoiZZG8i2fLKxIaFwaBWekLwqh\r\nRIvhiKM+tuGnk4rbaPZk0wV4cY9O/qV3TU3FNEMO1opRLnoE9JzaXBAKLv6Y\r\nC/DF1QlQXWs3t6iGtEy4GdMw5+O+ZSs4q3I=\r\n=y6Ry\r\n-----END PGP SIGNATURE-----\r\n"},"main":"gulp build","_from":"file:/home/runner/work/_temp/npm-d8a85ffa0d168594a726a4b312dc791753fd9b12-16.x/resin-emails-2.22.0.tgz","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"_resolved":"/home/runner/work/_temp/npm-d8a85ffa0d168594a726a4b312dc791753fd9b12-16.x/resin-emails-2.22.0.tgz","_integrity":"sha512-v8aPKNefb+Yl0vxwAT5LQSMHA2HQhLY2PZjqGEYguFisiGIWceSnTrJ3A+7O1J4vhh5eRaAWsc7zhFk6Fto1Qw==","repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2022-11-14T16:41:51.388Z"},"_npmVersion":"8.19.2","description":"balena.io email generator.","directories":{},"_nodeVersion":"16.18.0","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.22.0_1668445575382_0.5144391858390664","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.22.1-build-aethernet-bump-deps-435c8e131892b54f5206d468808e5a6b5698e933-1":{"name":"resin-emails","version":"2.22.1-build-aethernet-bump-deps-435c8e131892b54f5206d468808e5a6b5698e933-1","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.22.1-build-aethernet-bump-deps-435c8e131892b54f5206d468808e5a6b5698e933-1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"c0d986ac0ede6aff0f78f7add5d5d6d8e4a0824f","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.22.1-build-aethernet-bump-deps-435c8e131892b54f5206d468808e5a6b5698e933-1.tgz","fileCount":352,"integrity":"sha512-VpKo7pxiuxHLqNiaTpqf4toYg7H7j4GFlXl8pgmtFCiOQ/Kln7URls+x1qoCgJN0TsR6z2hnaq6fGLFBxs2xHA==","signatures":[{"sig":"MEUCIGdztPoXpPy+nwgTJJdmXQD6xan+gMjp4Dn3U+/fWZCoAiEA3MMi976hMa5i9ctG7elfsa6MvRKxpRsR7pglHJZRjwg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":23884351},"main":"gulp build","_from":"file:/home/runner/work/_temp/resin-emails-2.22.1.tgz","readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"_resolved":"/home/runner/work/_temp/resin-emails-2.22.1.tgz","_integrity":"sha512-VpKo7pxiuxHLqNiaTpqf4toYg7H7j4GFlXl8pgmtFCiOQ/Kln7URls+x1qoCgJN0TsR6z2hnaq6fGLFBxs2xHA==","repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2023-11-28T13:52:18.837Z"},"_npmVersion":"9.8.1","description":"balena.io email generator.","directories":{},"_nodeVersion":"18.18.2","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.22.1-build-aethernet-bump-deps-435c8e131892b54f5206d468808e5a6b5698e933-1_1701179762878_0.0886818655774908","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"2.22.1":{"name":"resin-emails","version":"2.22.1","author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","_id":"resin-emails@2.22.1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"homepage":"https://github.com/balena-io/resin-emails#readme","bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"dist":{"shasum":"2a4011d725f2a85c4bd53557cf58f6fbf586ca1e","tarball":"https://registry.npmjs.org/resin-emails/-/resin-emails-2.22.1.tgz","fileCount":261,"integrity":"sha512-QsHMm9JOSfeb3f2AEH8i1fGHg95nudiUyhly5SwHB6Rs9yFVfz9uc0SqabJJ1TvDcuU8Ezc57P3TsV5ELtdweg==","signatures":[{"sig":"MEYCIQDg+XbH2nyl7Rgwh7OqJB8lNxQsVCnBVeu+9Q1kJTz24QIhAIu2u1M2J6Sovmre11+P86KfR67eiWuNj1PuM46gm4hh","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":23884282},"main":"gulp build","_from":"file:/home/runner/work/_temp/resin-emails-2.22.1.tgz","scripts":{"test":"echo 0","build":"gulp build","watch":"gulp watch","publish":"gulp publish","staging":"gulp staging"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"_resolved":"/home/runner/work/_temp/resin-emails-2.22.1.tgz","_integrity":"sha512-QsHMm9JOSfeb3f2AEH8i1fGHg95nudiUyhly5SwHB6Rs9yFVfz9uc0SqabJJ1TvDcuU8Ezc57P3TsV5ELtdweg==","repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"versionist":{"publishedAt":"2023-11-28T13:52:18.837Z"},"_npmVersion":"9.8.1","description":"balena.io email generator.","directories":{},"_nodeVersion":"18.18.2","dependencies":{"gulp":"^4.0.2","mjml":"^4.5.1","rimraf":"^3.0.0","gulp-hb":"^8.0.0","netlify":"^2.4.8","gulp-copy":"^4.0.1","gulp-mjml":"^4.0.2","gulp-size":"^3.0.0","handlebars":"^4.7.6","gulp-rename":"^1.4.0","browser-sync":"^2.26.13","mailchimp-api-v3":"^1.13.1","handlebars-helpers":"^0.10.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resin-emails_2.22.1_1701179998646_0.9489944864168434","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."}},"time":{"created":"2018-10-05T12:30:24.381Z","modified":"2026-01-29T10:53:29.260Z","0.0.2-sanitize-2e40b24b00e5d00da1d7184db3094feb52e971d8":"2018-10-05T12:30:24.675Z","0.0.2-sanitize-2c54872919d50dd8548df7ff30ab591f64529f97":"2018-10-05T12:35:45.817Z","0.0.2":"2018-10-05T15:17:49.190Z","1.0.0-balena-2018-11-be3b2fb3b0063e0de567f441c755cb2f0176f4a9":"2018-11-12T16:40:13.970Z","1.0.0-balena-2018-11-e8bee66be3139751075bd2a2af9bdcfee00349b3":"2018-11-12T16:55:31.769Z","1.0.0":"2018-11-12T17:01:44.271Z","1.1.0-balena-2018-12-92adcfa27381c0a54ce1f3bcc49b2bc46a248adc":"2018-12-04T15:22:34.389Z","1.1.0-starting-template-7dc0ff71a3621ec034e04ba3bdda6414a72b8094":"2019-02-18T14:11:29.082Z","1.1.0":"2019-02-19T08:51:43.663Z","1.2.0-balena-2019-08-c3903fd46bc60ec2fdc33446e6e8fd71ad4c14cd":"2019-08-12T06:39:49.857Z","1.2.0-balena-2019-08-0434f696795ae467325234266171214fa6606731":"2019-08-12T06:42:14.602Z","1.2.0-balena-2019-09-3cbdd74584e516aed38370eecc4afa17e0780351":"2019-09-13T18:43:01.753Z","2.0.0-mjml-7db9ca79b020aacf235daac6dcb544265697c91f":"2020-06-01T16:22:53.618Z","2.0.0-mjml-ec369d99619874319943300e65683f05a1d6819f":"2020-06-01T17:12:38.330Z","2.0.0-mjml-b8045a537b05fc6fea8a4ea7ec922ad6aeebf8a6":"2020-06-03T16:45:18.178Z","2.0.0":"2020-06-03T16:52:24.133Z","2.0.1-newsletter-2020-06-de21eaaf5f00ce047ce3d52ce1f7c14e71453434":"2020-07-06T19:57:35.582Z","2.0.1":"2020-07-06T20:00:25.952Z","2.0.2-newsletter-2020-08-4d0f643f9e92dc93c3659728df58d3306dda0209":"2020-08-07T14:53:06.561Z","2.0.2":"2020-08-07T14:56:04.295Z","2.0.3-newsletter-2020-09-a27cde9cf313cb40a0b631722985651019940ef3":"2020-09-08T20:06:58.881Z","2.0.3":"2020-09-08T20:09:42.272Z","2.0.4-newsletter-2020-09-bf7fe47a145e8278c74f6390f82807d6f5f8eed2":"2020-11-10T19:13:44.875Z","2.0.4":"2020-11-10T19:18:35.833Z","2.0.5-newsletter-2020-11-9a3067add26c4f7440e3475aa9bbce856864a544":"2020-11-12T13:05:54.062Z","2.0.5":"2020-11-12T13:09:05.423Z","2.1.0-adding-dec-2020-newsletter-248b8b76033544b8f319ec74a0ffa21b6f32f3c4":"2020-12-11T00:34:04.363Z","2.1.0":"2020-12-11T00:38:02.008Z","2.2.0-add-jan-2021-newsletter-433346ffa6527021843030fa6e426d31f4ba9ff9":"2021-01-08T21:29:23.400Z","2.2.0":"2021-01-08T21:32:49.783Z","2.3.0-add-hub-3ab55bf9d9cc908af4a6a6f7899835768cde25a2":"2021-02-08T17:00:00.089Z","2.3.0":"2021-02-08T17:12:50.202Z","2.3.0-february-2021-c4f777d27b5afe355d2a4d9d938bb671f383107c":"2021-02-08T22:20:06.337Z","2.4.0-february-2021-01ad7298bd7d7591f7be7a033d1082cc701e27f7":"2021-02-09T03:29:05.065Z","2.4.0":"2021-02-09T12:32:03.669Z","2.4.1-font-fix-67549a3f08d7273177894eac82a45ae3d545ae43":"2021-03-08T19:25:24.056Z","2.4.1":"2021-03-08T19:30:42.418Z","2.4.2-2021-03-newsletter-09c34ea1abb99640ae0801b9522f38e38b8ed8e5":"2021-03-08T19:43:13.529Z","2.4.2-2021-03-newsletter-ac130c927641fb6de30be24a695bd5abd9343c47":"2021-03-10T12:42:42.744Z","2.4.2":"2021-03-10T12:45:46.686Z","2.4.3-2021-03-role-announcement-5988804445fb6cdf8996c1b524b6f04a142b4ff5":"2021-03-17T13:30:46.054Z","2.4.3":"2021-03-17T13:33:53.702Z","2.4.4-2021-04-newsletter-4b96dd723eb7d31241d0ce1c07cb72724e30998a":"2021-04-12T15:53:13.441Z","2.4.4":"2021-04-12T15:56:38.312Z","2.4.4-2021-04-newsletter-97bd5b2102c4cdf742526869a58716ce22c0f3ab":"2021-04-22T13:11:53.912Z","2.4.5-2021-04-newsletter-675b7f6fb8711b517a876f1d5857d0d2894dbca4":"2021-04-22T13:26:46.926Z","2.4.5":"2021-04-22T13:30:33.292Z","2.4.6-role-changes-announcement-f7820dd1053c2bf29419928c4e9a01ee3da08b30":"2021-04-22T19:16:56.472Z","2.4.6":"2021-04-22T19:20:45.514Z","2.4.7-2021-05-newsletter-27d193d97b04cfe5ae127c1c9804400ba4c4aa0a":"2021-05-11T16:24:45.250Z","2.4.7":"2021-05-11T16:31:39.424Z","2.4.8-2021-06-newsletter-82509cd2bb1538974bc4733c573e408056b8a7d5":"2021-06-14T13:13:18.823Z","2.4.8":"2021-06-14T13:18:16.642Z","2.5.0-2021-06-shortage-ada325ea9766afc6f8ba214fcf47a78b35d262bf":"2021-06-30T18:44:02.771Z","2.5.0":"2021-06-30T18:46:53.600Z","2.6.0-2021-07-newsletter-aa5e57848a37af949a90bf93455f474f8c299489":"2021-07-14T23:22:35.085Z","2.6.0":"2021-07-15T13:27:47.289Z","2.7.0-add-apps-fleets-email-75b885288bc73d8d3b8c6ddeaec626db57d2a869":"2021-08-05T23:27:00.430Z","2.7.0-add-apps-fleets-email-3d37f9814e372985260cf1f2ba3ae2d304919e1e":"2021-08-06T15:24:38.021Z","2.7.0":"2021-08-06T16:20:20.646Z","2.8.0-aug-2021-newsletter-6ee8df75d4888d90ea3801f6a90e8f3fe61694a5":"2021-08-12T15:23:49.489Z","2.8.0":"2021-08-12T15:27:13.564Z","2.9.0-aug-2021-news-fix-6f5905cbf8c0f94f5a51319f96a462ed1530c03d":"2021-08-12T17:21:54.901Z","2.9.0":"2021-08-12T17:24:36.515Z","2.9.1-andrewnhem-patch-1-473210c984c97d50bdef7f51c827d1adf73f34be":"2021-08-13T20:47:22.994Z","2.9.1":"2021-08-13T20:50:22.563Z","2.10.0-add-sept-2021-news-602fad7cdc53311f44e24dd6241431ae4a81493d":"2021-09-13T19:12:20.737Z","2.10.0":"2021-09-13T22:49:45.841Z","2.11.0-add-hackathon-2021-cda2e86a6157cb3df8cbb9da7e733b6c0440c415":"2021-09-23T20:15:30.088Z","2.11.0":"2021-09-23T20:18:21.750Z","2.12.0-add-oct-2021-news-37899d768859e3bfac590cb4ca1accd6cbbef33d":"2021-10-14T00:09:34.608Z","2.12.0":"2021-10-14T00:32:15.337Z","2.13.0-add-nov-2021-newsletter-f599d5bc3a5e2d9ce80c14fd0cfbbdac9d9b1875":"2021-11-16T17:07:32.650Z","2.13.0":"2021-11-16T17:11:33.016Z","2.14.0-add-dec-2021-newsletter-398fd7c4c5e0e68d641e33401880d54d8294eb5b":"2021-12-14T19:11:24.288Z","2.14.0-add-dec-2021-newsletter-3186b0eb685e37fd1b7fdc50136da22a631a2439":"2021-12-14T22:40:44.598Z","2.14.0":"2021-12-14T22:44:14.249Z","2.14.1-2022-01-newsletter-1c57d356475c66f74c09414dea88cbee506ba593":"2022-02-15T19:01:27.624Z","2.14.1":"2022-02-15T19:38:49.433Z","2.14.1-2022-02-newsletter-ab7d13e74bab28ddfe7c5fac402cc98c016ebb21":"2022-02-15T19:39:46.590Z","2.14.2-2022-02-newsletter-2d920881ca3db555cb7be22a8c796193a8db4267":"2022-02-16T13:44:42.734Z","2.14.2-2022-02-newsletter-c5e072ccd2a9d5dea03854b91e37c3da1e7f05d1":"2022-02-16T20:35:37.970Z","2.15.0-march-newsletter-6af2df8c1c576ebf3b7253ee1c9189947fc67fd1":"2022-03-16T13:13:04.289Z","2.15.0":"2022-03-16T13:16:53.898Z","2.15.0-2022-02-newsletter-180b512b7df73f8122907e618a5f0cf798c9625e":"2022-03-16T13:20:05.409Z","2.15.1-2022-02-newsletter-f245c9959da55edff42586ee8cbda286319f2a3a":"2022-03-16T13:36:31.037Z","2.15.1":"2022-03-16T13:40:04.937Z","2.16.0-April-newsletter-5eb8b8dc75760a0ee025016b824c71f86ea360f7":"2022-04-13T13:24:47.075Z","2.16.0":"2022-04-13T13:32:21.117Z","2.17.0-add-may-2022-newsletter-17b207fc714755bdab4d821dde8dcc461a2a72b2":"2022-05-14T00:16:03.671Z","2.17.0":"2022-05-14T00:20:41.777Z","2.18.0-add-june-2022-newsletter-c38759341913d3acb3acf9409d33810edabd36e1":"2022-06-14T22:19:23.313Z","2.18.0":"2022-06-14T23:57:28.646Z","2.19.0-verification-5fabf57265cdd4d3703434dac27ba4a6aea56960":"2022-07-07T06:58:06.515Z","2.19.0-verification-a7d3cff13554916266cdebcfbc1317abe876e9b7":"2022-07-08T10:27:26.821Z","2.19.0-verification-18863d9a8a955a6c93956e82cdb459f462b036ee":"2022-07-13T12:00:07.761Z","2.19.0-july-newsletter-c424ed0a5322c85659c6bef8a8a70eb8c86c0ffb":"2022-07-14T18:51:03.068Z","2.19.0-july-newsletter-d0d8c6096b514368f5b83cc25f4021c288b24a0b":"2022-07-15T16:34:54.057Z","2.19.0":"2022-07-15T17:08:10.248Z","2.20.0-August-newsletter-9a8e21fd0d0b6f431a13267ec7b41f035c0c6673":"2022-08-10T12:40:19.548Z","2.20.0":"2022-08-10T12:44:36.362Z","2.21.0-september-newsletter-b524c35de561d708e4d0d8ab95ee1570fd3b20ed":"2022-09-20T13:56:49.274Z","2.21.0":"2022-09-20T14:02:10.843Z","2.22.0-add-flowzone-yml-file-d8a85ffa0d168594a726a4b312dc791753fd9b12-1":"2022-11-14T16:43:46.572Z","2.22.0":"2022-11-14T17:06:15.917Z","2.22.1-build-aethernet-bump-deps-435c8e131892b54f5206d468808e5a6b5698e933-1":"2023-11-28T13:56:03.354Z","2.22.1":"2023-11-28T13:59:59.122Z"},"bugs":{"url":"https://github.com/balena-io/resin-emails/issues"},"author":{"name":"Tomás Migone","email":"tomas@balena.io"},"license":"Apache-2.0","homepage":"https://github.com/balena-io/resin-emails#readme","repository":{"url":"git+https://github.com/balena-io/resin-emails.git","type":"git"},"description":"balena.io email generator.","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"readme":"# Balena newsletter generator\n\nThe purpose of this tool is to help with the creation of balena newsletters and other marketing emails. It uses templating principles and a responsive email framework to convert simple HTML tags into the complex table HTML required for emails, so you don't have thousands of `tables` in your markup. The main technologies used are:\n\n- [Handlebars](https://handlebarsjs.com/) semantic HTML templates\n- [MJML](https://mjml.io/) responsive email framework\n- [Browsersync](https://www.browsersync.io/) Built-in synchronised server for testing\n- [Mailchimp](https://mailchimp.com/) integration\n\n## Features\n\n- Generates the email as a responsive HTML file. \n- Mailchimp integration\n  - Creates a Mailchimp campaign\n  - Adds the HTML email to the campaign\n  - Sends test email (will not be sent to audience, only specified tester)\n\n## Installation\n\nYou will need [Node.js](https://nodejs.org/en/) 8 or greater.\n```\ngit pull https://github.com/balena-io/balena-emails\ncd balena-emails\nnpm install\n```\n\n## Usage\n\nTo use the tool you will need to:\n  - specify which email template to use (see the templates section)\n  - provide a JSON file with the template content (see the datafile section)\n\n### Watch\n\nIf you want to develop a new template, edit an existing one or just see how the template looks like:\n\n```\nnpm run watch -- --datafile path/to/datafile.json --template <newsletter>\n```\n\nAll files except the `.json` datafile are watched so you will see the changes imediately on your browser. If you modify the datafile you will need to re-run this command.\n\n### Build\n\nIf you just want to generate the responsive email run this command. The generated output can be located on the `dist` folder:\n\n```\nnpm run build -- --datafile path/to/datafile.json --template <newsletter>\n```\n\n### Staging\n\nIf you want to generate the responsive email and publish the result to a netlify webpage you can run:\n\n```\nnpm run staging -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN>\n```\n\n[Here](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) is how you can get your Netlify token.\n\n### Publish\n\nIf you want to generate the responsive email, publish to netlify, create the mailchimp campaign and send a test email (this will not send the campaign to the end users):\n\n```\nnpm run publish -- --datafile path/to/datafile.json --template <newsletter> --netlifytoken <NETLIFY_AUTH_TOKEN> --mailchimpkey <YOUR_MAILCHIMP_API_KEY>\n```\n\n[Here](https://mailchimp.com/help/about-api-keys/) is how you can get your Mailchimp API_KEY.\n\n## Templates\n\nThis are the templates currently available:\n- newsletter\n\n## Datafile format\n\nThe datafile must be a `JSON` file with the following parameters (there is also a sample file in the `data` folder). Parameters in **bold** are required.\n\n### Global configuration\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `configuration` | **object**  | Settings for the template |\n| `configuration.mailchimp_recipients` | **string** | The target audience id. Some common ones are: `1c73cb7379` for 'Balena Users (Newsletter)', `ab92290a0b` for 'Test audience',  `79b41f7587` for 'Testing'. [Here](https://mailchimp.com/help/find-audience-id/) is how to find the recipient/audience id. Default: `ab92290a0b`|\n| `configuration.mailchimp_title` | string  | The title of the campaign. Default: `Autogenerated campaign -- Default title` |\n| `configuration.mailchimp_subject_line`  | string | The subject line for the campaign. Default: `Autogenerated campaign -- Default subject line` |\n| `configuration.mailchimp_preview_text`  | string | The preview text for the campaign. Default: `Autogenerated campaign -- Default preview text` |\n| `configuration.mailchimp_from_name`  | string | The `from` name on the campaign (not an email address). Default: `balena` |\n| `configuration.mailchimp_reply_to`  | string | The reply-to email address for the campaign. Default: `hello@balena.io` |\n| `configuration.mailchimp_test_emails`  | string array | An array of email addresses to send the test email to. Default: [] |\n| `configuration.netlify_site_name`  | string | Name of the website on netlify. The site can be accessed on https://<netlify_site_name>.netlify.com Default: `balena-default-site` |\n| `configuration.assets_folder`  | string | Path to folder with images or other media embedded on the template. Relative to root. |\n\n### Template: Newsletter settings\n| parameter | type    | description                                      |\n| --------- | ------- | ------------------------------------------------ |\n| `header`  | **object** | Settings for the email header |\n| `header.title`  | string | The title shown on the email header (top right, eg: `October 2019`) |\n| `header.image`  | url | Background image for the header. For compatibility reasons it's better if the image has a 600/380 ratio. Default: [here](https://assets.balena.io/newsletter/2019-06/hero_classic.png) |\n| `header.image_height`  | numeric | Height for the image header. Default: 380px |\n| `header.image_width`  | numeric | Width for the image header. Default: 600px |\n| `header.color`  | string | Background color for the header. Default: `rgb(41, 80, 111)` |\n| `featured`  | **object** | Settings for the featured intro section |\n| `featured.text`  | string | HTML formated content to be shown on the featured section (does not need to be escaped) |\n| `news`  | **object array** | Settings for the `News from balenaHQ` section. Each object is constructed as follows below. |\n| `[news].title`  | **string** | News card title |\n| `[news].image`  | string | Left side image on the news card. |\n| `[news].button_text`  | **string** | Text to display on the button |\n| `[news].link`  | **string** | URL if button/image are clicked |\n| `[news].text`  | **string** | HTML formated content to be shown on the news card (does not need to be escaped) |\n| `posts`  | **object array** | Settings for the `The latest from our blog` section. Each object is constructed as follows below. |\n| `[posts].title`  | **string** | Blog card title |\n| `[posts].image`  | string | Left side image on the posts card. |\n| `[posts].button_text`  | **string** | Text to display on the button |\n| `[posts].link`  | **string** | URL if button/image are clicked |\n| `[posts].text`  | **string** | HTML formated content to be shown on the blog card (does not need to be escaped) |\n| `projects`  | **object array** | Settings for the `Projects of the month` section. Each object is constructed as follows below. |\n| `[projects].title`  | **string** | Project title |\n| `[projects].link`  | string | URL if title is clicked |\n| `[projects].text`  | string | HTML formated content to be shown on the project description (does not need to be escaped) |\n| `jobs`  | **object** | Settings for the jobs section |\n| `jobs.text`  | string | Additional text to display under the jobs section. |\n| `events`  | **object array** | Settings for the `Events` section. Each object is constructed as follows below. |\n| `[events].attending`  | **string** | Whether there will be balena representation on the event or not. `yes|no` |\n| `[events].title`  | **string** | Name of the event |\n| `[events].link`  | string | URL if title is clicked |\n| `[events].location`  | **string** | Location of the event. Usually `City, Country` |\n| `[events].event_date`  | **string** | Date of the event. Usually `Month datefrom - dateto, year` |\n\n\n\n","readmeFilename":"README.md"}