If you want to create different outputs for different audiences, you can do all of this using a combination of Jekyll's Liquid markup and values in your configuration file.

Where to store filtering values

You can filter content based on values that you have set either in your config file or in a file in your _data folder. If you set the attribute in your config file, you need to restart the Jekyll server to see the changes. If you set the value in a file in your _data folder, you don't need to restart the server when you make changes.

Conditional logic based on config file value

Here's an example of conditional logic based on a value in the configs/config_writer.yml file. In my config_writer.yml file, I have the following:

audience: writer

On a page in my site (it can be HTML or markdown), I can conditionalize content using the following:

This uses simple if-elsif logic to determine what is shown (note the spelling of elsif). The else statement handles all other conditions not handled by the if statements.

Here's an example of if-else logic inside a list:

To bake a casserole:

1. Gather the ingredients.
{% if site.audience == "writer" %}
2. Add in a pound of meat.
{% elsif site.audience == "designer" %}
3. Add in an extra can of beans.
{% endif %}
3. Bake in oven for 45 min.

Here's an example of using conditional logic based on a value in a data file:

Here is my _data folder I have a file called options where the audience property is stored.

Or operator

You can use more advanced Liquid markup for conditional logic, such as an or command. See Shopify's Liquid documentation for more details.

For example, here's an example using or:

{% if site.audience contains "vegan" or site.audience == "vegetarian" %}
    // run this.
{% endif %}

With conditional statements, you don't need the elsif or else options.

Specifying a data source

You can also specify a data_source for your data location in your configuration file. Then you aren't limited to simply using _data to store your data.

For example, suppose you have 2 projects: alpha and beta. You might store all the data files for alpha inside data_alpha, and all the data files for beta inside data_beta.

In your configuration file, specify the data source like this:

data_source: data_alpha

Then create a folder called data_alpha.

Conditional logic based on page namespace

You can also create conditional logic based on the page namespace. For example, create a page with front matter as follows:

---
layout: page
user_plan: full
---

Now you can run logic based on the conditional property in that page's front matter:

{% if page.user_plan` == "full" %}
// run this code
{% endif %}