This **tutorial** is written for developers to **teach and explain** the step-by-step introduction to Strapi. (A more concise **How-to** version can be found in the [Quick Start Guide](/3.0.0-beta.x/getting-started/quick-start.html).) This tutorial will take you through the beginning steps of how you start a project like **"FoodAdvisor"** ([Github](https://github.com/strapi/foodadvisor/))([Demo](https://foodadvisor.strapi.io/)). You will get a good overview of the features developers love about using Strapi.
You need to have **_Node.js and npm_** installed on your system prior to following these steps. If you do not have Node.js and npm installed (or are not sure), please visit our [Installation Requirements](/3.0.0-beta.x/getting-started/install-requirements.html).
3. [Create a new Content Type called, "Restaurant"](/3.0.0-beta.x/getting-started/quick-start-tutorial.html#_3-create-a-new-content-type-called-restaurant)
4. [Create a new Content Type called, "Category"](/3.0.0-beta.x/getting-started/quick-start-tutorial.html#_4-create-a-new-content-type-called-category)
5. [Create a new Group and Repeatable Field called, "Hours of Operations"](/3.0.0-beta.x/getting-started/quick-start-tutorial.html#_5-create-a-new-group-and-repeatable-field-called-hours-of-operations)
6. [Manage and add content to the "Restaurant" Content Type](/3.0.0-beta.x/getting-started/quick-start-tutorial.html#_6-manage-and-add-content-to-restaurant-content-type)
When you create a new Quick Start(`--quickstart`) project, Strapi will download the node modules and the Strapi files needed. Using `--quickstart`, automatically completes an **additional** step of **building the administration panel** for Strapi and then **starting** Strapi for you.
You can replace the `my-project` name with any name you want. E.g. `yarn create strapi-app my-foodadvisor-project --quickstart`, will create a folder `./Projects/my-foodadvisor-project`.
success Installed "create-strapi-app@3.0.0-beta.14" with binaries:
- create-strapi-app
[#####################################################################] 71/71Creating a new Strapi application at /Users/paulbocuse/Desktop/Projects/my-project.
Using the `--quickstart` flag will install Strapi using a [SQLite](https://www.sqlite.org/index.html) database. You may always leave off the **--flag**, but you will simply need to follow a few configuration steps for a your database. **You will need to have your database choice installed and running locally, prior to creating your project.**
**Note:** An **SQLite** database is an excellent database to use for prototyping and _developing_ Strapi projects. **SQLite** is a light database that ports effortlessly to the other relational databases (**MySQL**, **PostgreSQL** and **MariaDB**). It is recommended to **develop** with SQLite and to use another relational database (MySQL, PostgreSQL or MariaDB) in production.
**Note:** If you would like to use **MongoDB** in production, you will need to [install, run and use MongoDB on your development machine](/3.0.0-beta.x/guides/databases.html#mongodb-installation).
The first step is to create an **Administrator** (or "root user") for your project. An **Administrator** has all administrator privileges and access rights. You will need to complete the following fields:
**A.** An **Administrator** has access and rights to the Administration Dashboard (or backend) of Strapi. **Administrators** have the ability to add content, add plugins, upload images, etc.
**B.** A front-end **User** is someone who interacts with your project through the front-end. A front-end **User** is someone who is the "Author" of an article, makes a purchase, has an account, leaves a review, leaves a comment, etc.
**Content Types** are a collection of entered data represented by fields. For example, a **Content Type** called `restaurant` may be intended to display information regarding restaurants. A `restaurant`**Content Type** could have fields that includes a `name`, a main `image`, and a `description` - _at a minimum_. But a `restaurant` could also have a `category` or mulitple `categories`, and a `restaurant` could perhaps need to show `hoursOfOperation`.
Go to the **Content Type Builder** plugin, located in the left menu: **PLUGINS** --> **Content Type Builder**. You are now able to see the three available **Content Types**.
You are now ready to add the second field, a **Relation** field for creating a **Many to Many** relationship between the **Category** and **Restaurant** Content Types.
( The `Restaurant` Content Type will have a **Group** field named `Hoursofoperation`. This Group will be repeatable for displaying the **Opening hours** and **Closing Hours** of a **Restaurant**.)

In order to access the **Hoursofoperation** Group from within the **Restaurant** Content Type, you need to **edit** the **Restaurant** Content Type in the **Content Type Builder**.

- Click on the `Group` field

- Ensure `hoursofoperation` is displayed in the **Select a group** dropdown.
- Provide a **name** for this group in the **Restaurant** Content Type. E.g. `RestaurantHours`
- Check the `Repeatable field` box

- Click on the `ADVANCED SETTINGS` tab
- Check the `Required field` checkbox
- Click the `Done` button

- Click the `Save` button

- Wait for Strapi to restart.

After Strapi has restarted, you are ready to continue to the next section where you will customize the user-interface your **Restaurant** Content Type.
4. Next you will edit the **View Settings** for the new **Hoursofoperation** Group from within the **Content Manager**.
You have the ability to _drag and drop_ fields into a different layout, as well as, _rename the labels_ as two examples of how you can customize the user interface for your **Content Types**.
- Click on the `Content Manager`, under **PLUGINS** in the left-hand menu

- Click the `Save` button, and then the `Confirm` button to save your settings.
Your settings have now been saved. You are ready to start inputting actual content.
## 6. Manage and add content to, "Restaurant" Content Type
## 7. Set Roles and Permissions
By default, Strapi publishes all **Content Types** with restricted permissions. Which means you have to explicitly give permissions to each **Content Type** you create. You are going to give **Public** API (or URL) access to both the **Restaurant** Content Type and **Category** Content Type.
- Click on the `Roles & Permissions` menu item, under **PLUGINS** in the left-hand-menu.
Locate and click on the **Roles & Permissions** menu item under **PLUGINS** on the left menu.

- Next, click on the **Public** Role.

- From here, scroll down to under **Permissions** and locate the **Restaurant** and **Category** Content Types
- Click the checkbox for **find** and **findone** in the **Restaurant** Content Type.
- Click the checkbox for **find** and **findone** in the **Category** Content Type.

- Scroll back to the top, and click the **Save** button.

You have now opened the API and are ready to consume your content.
## 8. Consume the Content Type API
Each of your **Content Types** are accessible by following their automatically generated routes.
Both your **Restaurant** and **Category** Content Types can now be accessed:
- In your browser, follow `http://localhost:1337/restaurants` to return the data for the allowed **Find** value for your **Restaurant** Content Type.
** TO DO ADD PHOTO **
- In your browser, follow `http://localhost:1337/categories` to return the data for the allowed **Find** value for your **Category** Content Type.

:::
::: tip NOTE
If you would like to see the route of any specific **Content Type**, you will need to navigate to the **Content Type** under the **Roles and Permissions** plugin and click the ⚙️ next to the value. On the right, you will see the route:
- Learn how to use Strapi with React ([Gatsby](https://blog.strapi.io/building-a-static-website-using-gatsby-and-strapi) or [Next.js](https://blog.strapi.io/strapi-next-setup/)) or Vue.js ([Nuxt.js](https://blog.strapi.io/cooking-a-deliveroo-clone-with-nuxt-vue-js-graphql-strapi-and-stripe-setup-part-1-7/)).
- Read the [concepts](../concepts/concepts.html) and [articles](../articles/) to deep dive into Strapi.
- Get help on [StackOverflow](https://stackoverflow.com/questions/tagged/strapi).
- Read the [source code](https://github.com/strapi/strapi), [contribute](https://github.com/strapi/strapi/blob/master/CONTRIBUTING.md) or [give a star](https://github.com/strapi/strapi) on GitHub.
- Follow us on [Twitter](https://twitter.com/strapijs) to get the latest news.
- [Join the vibrant and active Strapi community](https://slack.strapi.io) on Slack.
Click on **Restaurants** under the **CONTENT TYPES** menu in order to **Add New Restaurant**.

Next click on the **+ Add New Restaurant** button (in the top right corner). Go ahead and type `Strapi Restaurant` in the **Name** field, with a description saying, `Strapi restaurant is a cosy restaurant delivering one of the very fastest and nicest dining experiences in the world, combining nods to tradition with fierce modernity, warmth with daring.` into the **Description** field. Then press the **Save** button..

When it is saved, you will see your restaurant listed in the entries. From here you can edit it or add a new restaurant.

You have **NOT** yet added a **Category** to the **Restaurant** that was created. You first have to add the actual Category items to the **Categories** content type.
You will then assign two Categories, `Convenient` and `Time Saving` to this restaurant.
Click on **Categories** under the **CONTENT TYPES** menu on the left.

Click the **+ Add New Category** button to add the first category **Convenient**. Type `Convenient` into the **Name** field. Next, you will see **Restaurants (0)** to the right. Select **Strapi Restaurant**, to add this category to the restaurant.
After selecting, **Restaurants (0)** to the right, it will change to **Restaurants (1)**. And then press the **Save** button.

You now see the Category listed. Click the **+ Add New Category** button to add the second category `Time Saving`.
Now let's add **Time Saving**. Type `Time Saving` into the **Category** field. Go ahead and save it **WITHOUT** adding it to the **Strapi Restaurant** field.

You return to the **Category** Content Type page. You see both categories listed. Both have been assigned to the **Restaurant** you created earlier.
If you want to add Categories directly from the **Restaurants** Content Type, you simply click on the Restaurant and add, edit or change **EXISTING** categories. Otherwise, you can create and add new **Categories** from the **Category Content Type** as you did above.
Go ahead and add `Time Saving`, the `Strapi Restaurant`.
