This Tutorial is written for developers who prefer a more detailed step-by-step introduction. (A less detailed introduction can be found at [Quick Start Guide](/3.0.0-alpha.x/getting-started/quick-start.html).)
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](http://localhost:8080/documentation/3.0.0-alpha.x/getting-started/install-requirements.html).
When you create a new Quick Start project in Strapi, you will download all the node modules, the Strapi files necessary and the Strapi plugin files. THIS STEP CAN TAKE SEVERAL MINUTES DEPENDING ON YOUR INTERNET CONNECTION SPEED. Please wait for the process to complete before cancelling or trying to continue.
Using the `--quickstart` flag will install Strapi using a [SQLite](https://www.sqlite.org/index.html) database. You may leave off the flag, but will need to follow the configuration steps for a different database.
:::
## 3. Create an admin user
The first user you create is the root user for your project. This user has all privileges and access rights. You will need to complete the following fields:
1.**Username**, create a username for login access to your project, eg. `paulbocuse`
2.**Password**, create a unique password for your project
3.**Email address**, this will be used for recovery
4. Check **Receive news**, this is optional but recommended
5. Click the **Ready to Start** button

---
After your admin user is registered, you will see the Strapi admin panel:
We can define a **Content Type** as 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` has a `name`, a main `image`, a `description`, maybe even a link to the `restaurant menu`.
Another example, is a **Content Type** called `menu` which is made up of `menu items`. These have a `name`, `description of the menu item`, an `image` and perhaps even a `list of ingredients`.
Content Type `name` is always **singular**. For example, `restaurant` not `restaurants`. For example, `category` not `categories`.
:::
### The Restaurant Content Type
The Restaurant Content Type will have a **String** field for the restaurant name, and a **Text** field (with a **WYSIWYG editor**) for the restaurant description.
Now enter a "Name" for your **New Content Type** (we will call this one `restaurant`), and below write a "description". We will write `Recommended Restaurants` for the description.
Then click the **Save** button.

2. Now you are ready to add the content type fields. We will add a **String** field for the Name and a **Text** field for a short Restaurant description. Click on the **+ Add New Field** button.
You should be under the **BASE SETTINGS** tab, in the **Name** field, type `Name`. This will be the name of the restaurant.

Now, click on the **ADVANCED SETTINGS** tab, check **Required field** and **Unique field**. This field is required for each restaurant and is not optional. Also, we want each restaurant to have a unique name, so we check the **Unique field** box. And then click the **Continue** button.
Now, click on the **ADVANCED SETTINGS** tab, check **Display as a WYSIWYG**. This field will provide a rich text editor. And then click the **Continue** button.

Lastly, we will save this **Content Type**. Click the **Save** button.
Wait for Strapi to restart, and then we will be able to create the `Category`**Content Type**.

### The Category Content Type
The Category Content Type will have a **String** field named `category` for categories assigned to restaurants, and a **Relation field** with a **Many to Many** relationship.
Let's now add this second content type. Click the **+ Add Content Type** menu item.

Now enter a name for this new **Content Type** (we will call this one `category`), and write a Description. We will write `Restaurant Categories` for the description. Then click the **Save** button.

Now you are ready to add the content type fields. We will add a **String** field for the Name and a **Relation Field** for creating a **Many to Many** relation between the Category Content Type and Restaurant Content Type. Click on the **+ Add New Field** button.

You should be under the **BASE SETTINGS** tab, in the **Name** field, type `Name`. This will be the name of the category.

Now, click on the **ADVANCED SETTINGS** tab, check **Required field** and **Unique field**. This field is required for each category and is not optional. Also, we want each category to have a unique name, so we check the **Unique field** box. And then click the **Continue** button.

We are now ready to add the second field, the **Relation** field for the **Many to Many relation** setting between Categories and Restaurants. Click the **+ Add New Field** button.


The second element to change is to click the **Many to Many** icon (in the middle). It should now read, **"Categories has and belongs to many Restaurants"**. Then click the **Continue** button.

Lastly, we will save this **Content Type**. Click the **Save** button.

Wait for Strapi to restart.

Verify in the left menu under **CONTENT TYPES**, that you see **Categories**, **Restaurants** and **Users**.
A new directory has been created in the `Project/cms/` folder of your application which contains all the needed files related to your `restaurant` and `category` Content Types. Take a look at the [API structure documentation](../concepts/concepts.md#files-structure) for more information.
---
## 5. Manage and add data to Content Type
After creating the **Content Types**, we now need to manage and add data to the new Content Types.
We will create an entry of a restaurant called, `Strapi Restaurant` 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.`
We will then assign two Categories, `Italian` and `Contemporary` to this restaurant.
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, and type the content (above) into the **Description** field. Then press the **Save** button (in the top right corner).


We have **NOT** added a **Category** to the **Restaurant** we created. We first have to add the actual Category items to the **Categories** content type.
We will next assign two Categories, `Italian` and `Contemporary` to this restaurant.
Click on **Categories** under the **CONTENT TYPES** menu on the left.

Now we will add each of the categories. Click the **+ Add New Category** button to add the first category **Italian**. Type `Italian` 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, will change to **Restaurants (1)** (see below). And then press the **Save** button.

You now see the Category listed. Click the **+ Add New Category** button to add the second category `Contemporary`.

Now let's add **Contemporary**. Type `Contemporary` into the **Name** field. You will see **Restaurants (0)** to the right. You will see **Restaurants** to the right. Select **Strapi Restaurant** to add this category to the restaurant.
After selecting, **Restaurants (0)** to the right, will change to **Restaurants (1)** (see below). And then press the **Save** button.

You return to the **Category** Content Type page. You see both categories listed. Both have been assigned to the **Restaurant** we 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 we did above.

:::
---
## 6. 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. We are going to give **Public** (any web browser with the correct link) access to the **Restaurant** Content Type.
Locate and click on the **Roles & Permission** menu item under **PLUGINS** on the left menu. (The **Roles & Permission** plugin can accomplish many tasks related to permissions. For now we will focus on the **Public** role.)
Next, click on the **pencil** edit icon to the right of the **Public** Role.

From here, scroll down under **Permissions** and find **Restaurant**. Click the checkbox next to **find**. To the right, you will see the URL route. It should say, `/restaurants`. Scroll back to the top, and click the **Save** button.

You are returned to the **Roles and Permission** panel.

---
## 7. Consume the Content Type API
The project is accessible by following the `http://localhost:1337/` link. You will see the **'Welcome'** screen.
👏 Congratulations, you have now completed the Strapi Quick Start. Where to go next?
- 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.