Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rspective/contentful-emails
A tool for automating content creation for email campaigns, built with Contentful.
https://github.com/rspective/contentful-emails
contentful email email-template gulp javascript swig
Last synced: 4 months ago
JSON representation
A tool for automating content creation for email campaigns, built with Contentful.
- Host: GitHub
- URL: https://github.com/rspective/contentful-emails
- Owner: rspective
- License: mit
- Created: 2016-11-23T20:48:53.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2018-05-19T17:31:27.000Z (over 6 years ago)
- Last Synced: 2024-10-01T03:23:55.975Z (4 months ago)
- Topics: contentful, email, email-template, gulp, javascript, swig
- Language: JavaScript
- Homepage: https://www.voucherify.io/blog/coding-free-iterating-on-email-content
- Size: 354 KB
- Stars: 55
- Watchers: 20
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Coding-free iterating on email
## License
[MIT](/LICENSE.md)
## Business aspects
Business ascepts have been presented in deatils [here](https://www.voucherify.io/blog/2016/12/14/coding-free-iterating-on-email-content).
In short: it's a sample application using [Contentful](https://www.contentful.com/) SaaS to fastly build a coding-free tool for emails' content management.
**NOTICE**: We are using this in production on daily basis and it works just perfect. It's giving us a possibility to work on Ops emails with almost no need for commiting/deploying, we only do that when there is a breaking change in the layout or new features are going to be released ;)
## Technical aspects
### Configuration
To setup your integration with Contentful you will have to modify `config/base.js` file. You should change two places:
- Contentful Service (`contentful/draft` and `contentful/published` keys); you should obtains the keys in your Contentful settings.
- Authorization configuration (`autorization/contentful` key), the value should be sent in Authorization header with Contentful Webhook request, it's configured in Contentful along with the webhook.**NOTICE**: The config pattern in the app allows you to have multiple configuration files - environment or locale based - but at the beggining you can use it in a simple way:
```js
var config = require("./../config").current;
```### General Desing
#### Contentful restrictions
There is a hardcoded value of content type's name that shuld be called `email` so that you have to name you content type in Contentful this way or change it in the code, it's up to you.
#### Email Container Engine
To use the email container in your system you should do the following:
```js
var EmailContainer = require("./../services/email-container");
var emailContainer = new EmailContainer({ container: "backup" });
```The types of container are as follows:
- `backup`, data will be read from previously generated backup file stored as: `contentful-emails-backup.json`
- `cache`, data will be read from Memory Cached version. Cache is initialized on application start and refreshed when Contentful webhook reach the api endpoint.
- `contentful`, here you can additonally pass `type` attribute (`published` or `draft`) depends from which source you want to render. In this case data will be read directly from Contentful.Then to render the file:
```js
emailContainer.render(util.format("welcome", customer.language), payload)
.then((emailEntry) => {
// emailEntry: { body: ... , subject: ..., etc. }
});
```To configure mapping between Contentful and available properties please look into `/service/email-container/index.js` file and check the `render` method.
#### Layouts
We decided to use [Swig](https://github.com/paularmstrong/swig) templating engine, because we had many good experiences with it in the past. For email rendering we use files stored in `front-end/views/emails` folder and you should store there all email related content to easily extend your layouts in the future.
The variables available during rendering can be configured in the `util/html.js`. As you can notice we have already preapred some basic useful variables and methods.
#### Parser
The parser class you can find here: `/services/email-container/parser`. It's a place where you can define spacial placehoders and thier transformations so that Content Manager can display dynamic data (undestand as payload used for rendering) inside the content, e.g.:
```
Hi [[customer-name]]
```The list of needed placeholder should be discussed between developers and Content Managers.
#### Cache & Webhook
The application provides simple Memory Cache mechanism. When application is started then published data is read from Contentful and stored in the memory. Whenever there is a publish/unpublish done in Contenful the Cache will be updated accordingly by configured webhook or after application is restarted.
### Tasks
In the project for running maintanance tasks we use [Gulp](http://gulpjs.com/).
#### Backup Contentful
Running the below command will endup downloading the published versions from Contentful and storing them in the file system: `files/contentful-emails-backup.json`. This file is used by `backup` email container to render the tempaltes.
```js
gulp contentful-backup
```### Run the app
To run the app simple run the following command:
```js
npm install
node server.js
```The simply open in your browser: `http://localhost:3000` and then you can see content of your containers:
![Application Overview](/ApplicationOverview.png "Application Overview")
## Basic usage
**Developer**:
- setup environment
- create and maintain layouts
- prepare new placeholders and partials views**Content Manager**:
- define entries in Contentful
- define placeholders for developer (e.g. "we need a button that allows to confirm registration")
- fix typos
- preapre the content (check always in draft mode how email looks like)
- publish ready emails so they are avaiaible in production right away