# Getting Started with 11ty
This integration guide is following the [Getting started guide](../getting-started/quick-start.html). We assume that you have completed [Step 8](../getting-started/quick-start.html#_8-consume-the-content-type-s-api) and therefore can consume the API by browsing this [url](http://localhost:1337/restaurants).
If you haven't gone through the getting started guide, the way you request a Strapi API with [11ty](https://www.11ty.dev/) remains the same except that you will not fetch the same content.
### Create an 11ty app
Create a `package.json` file, install and save Eleventy into your project.
:::: tabs
::: tab npm
```bash
npm init -y
npm install @11ty/eleventy
```
:::
::: tab yarn
```bash
yarn init -y
yarn add @11ty/eleventy
```
:::
::::
Make sure installation went ok:
```bash
npx @11ty/eleventy
# Wrote 0 files in 0.02 seconds (v0.11.0)
```
### Configure 11ty
11ty do not create any file structure for you. It's up to you to do it.
- Create a `./src/_data` folder containing a `categories.js` and a `restaurants.js` file. They will be used to fetch your content from Strapi.
- Create a `./src/_templates` folder containing a `default.liquid` file. It will be the default template of your project.
```html
{{ renderData.title }}
Home
{{ content }}
```
- Create a `./src/index.md`, `./src/restaurant.md` and a `./src/categorie.md` file. They will define how you'll present the data.
- Create a `.eleventy.js` file containing the following (make sure to prefix the file's name with the dot):
```js
const HtmlMin = require('html-minifier');
const ErrorOverlay = require('eleventy-plugin-error-overlay');
module.exports = eleventyConfig => {
eleventyConfig.setTemplateFormats(['md']);
eleventyConfig.addPlugin(ErrorOverlay);
eleventyConfig.addTransform('htmlmin', (content, outputPath) => {
if (outputPath.endsWith('.html')) {
let minified = HtmlMin.minify(content, {
useShortDoctype: true,
removeComments: true,
collapseWhitespace: true,
});
return minified;
}
return content;
});
return {
dir: {
input: 'src',
output: 'dist',
includes: '_templates',
data: '_data',
},
jsDataFileSuffix: '.data',
};
};
```
- Finally, add the following packages to your application:
:::: tabs
::: tab npm
```bash
npm install axios eleventy-plugin-error-overlay html-minifier
```
:::
::: tab yarn
```bash
yarn add axios eleventy-plugin-error-overlay html-minifier
```
:::
::::
### GET Request your collection type
Execute a `GET` request on the `restaurant` Collection Type in order to fetch all your restaurants.
Be sure that you activated the `find` permission for the `restaurant` Collection Type.
_Request_
```js
const { default: axios } = require('axios');
module.exports = async () => {
try {
const res = await axios.get('http://localhost:1337/restaurants');
return res.data;
} catch (error) {
console.error(error);
}
};
```
_Response_
```json
[
{
"id": 1,
"name": "Biscotte Restaurant",
"description": "Welcome to Biscotte restaurant! Restaurant Biscotte offers a cuisine based on fresh, quality products, often local, organic when possible, and always produced by passionate producers.",
"created_by": {
"id": 1,
"firstname": "Paul",
"lastname": "Bocuse",
"username": null
},
"updated_by": {
"id": 1,
"firstname": "Paul",
"lastname": "Bocuse",
"username": null
},
"created_at": "2020-07-31T11:37:16.964Z",
"updated_at": "2020-07-31T11:37:16.975Z",
"categories": [
{
"id": 1,
"name": "French Food",
"created_by": 1,
"updated_by": 1,
"created_at": "2020-07-31T11:36:23.164Z",
"updated_at": "2020-07-31T11:36:23.172Z"
}
]
}
]
```
### Example
`./src/_data/restaurants.js`
```js
const { default: axios } = require('axios');
module.exports = async () => {
try {
const res = await axios.get('http://localhost:1337/restaurants');
return res.data;
} catch (error) {
console.error(error);
}
};
```
`./src/index.md`
```md
---
title: Restaurants
layout: default.liquid
pagination:
data: restaurants
size: 100
alias: restaurants
---
# Restaurants
```
`./src/restaurant.md`
```md
---
title: Restaurant
layout: default.liquid
pagination:
data: restaurants
size: 1
alias: restaurant
permalink: 'restaurants/{{ restaurant.id }}/'
---
# {{ restaurant.name }}
{{ restaurant.description }}
## Categories
{% for category in restaurant.categories %}
{{ category.name }}
{% endfor %}
```
Execute a `GET` request on the `category` Collection Type in order to fetch a specific category with all the associated restaurants.
Be sure that you activated the `find` permission for the `category` Collection Type.
_Request_
```js
const { default: axios } = require('axios');
module.exports = async () => {
try {
const res = await axios.get('http://localhost:1337/categories');
return res.data;
} catch (error) {
console.error(error);
}
};
```
_Response_
```json
[
{
"id": 1,
"name": "French Food",
"created_by": {
"id": 1,
"firstname": "Paul",
"lastname": "Bocuse",
"username": null
},
"updated_by": {
"id": 1,
"firstname": "Paul",
"lastname": "Bocuse",
"username": null
},
"created_at": "2020-08-28T11:43:23.578Z",
"updated_at": "2020-08-28T11:43:23.589Z",
"restaurants": [
{
"id": 1,
"name": "Biscotte Restaurant",
"description": "Welcome to Biscotte restaurant! Restaurant Biscotte offers a cuisine based on fresh, quality products, often local, organic when possible, and always produced by passionate producers.",
"created_by": {
"id": 1,
"firstname": "Paul",
"lastname": "Bocuse",
"username": null
},
"updated_by": {
"id": 1,
"firstname": "Paul",
"lastname": "Bocuse",
"username": null
},
"created_at": "2020-08-28T13:43:21.786Z",
"updated_at": "2020-08-28T13:43:21.786Z"
}
]
}
]
```
### Example
`./src/_data/categories.js`
```js
const { default: axios } = require('axios');
module.exports = async () => {
try {
const res = await axios.get('http://localhost:1337/categories');
return res.data;
} catch (error) {
console.error(error);
}
};
```
`./src/category.md`
```md
---
title: Category
layout: default.liquid
pagination:
data: categories
size: 1
alias: category
permalink: 'categories/{{ category.id }}/'
---
# {{ category.name }}
## Restaurants
{% for restaurant in category.restaurants %}
{{ restaurant.name }}
{% endfor %}
```
You can find your restaurants and categories by browsing `http://localhost:8081/restaurants/` and `http://localhost:8081/categories/`.
## User Stories
- How [Paradigma Digital](https://strapi.io/user-stories/paradigma-digital-brand) switched from Wordpress to Strapi and Eleventy.
## Conclusion
Here is how to request your Collection Types in Strapi using 11ty.
Learn more about [11ty](https://www.11ty.dev/).