<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Thomas Singerlé-Florus</title>
    <description>The latest articles on Forem by Thomas Singerlé-Florus (@tsflorus).</description>
    <link>https://forem.com/tsflorus</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F378704%2Fa934a92e-c60a-4f92-b596-36448f61e287.jpg</url>
      <title>Forem: Thomas Singerlé-Florus</title>
      <link>https://forem.com/tsflorus</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/tsflorus"/>
    <language>en</language>
    <item>
      <title>How important is it to make conventions ?</title>
      <dc:creator>Thomas Singerlé-Florus</dc:creator>
      <pubDate>Fri, 11 Sep 2020 13:25:26 +0000</pubDate>
      <link>https://forem.com/tsflorus/how-important-is-it-to-make-conventions-3h9o</link>
      <guid>https://forem.com/tsflorus/how-important-is-it-to-make-conventions-3h9o</guid>
      <description>&lt;p&gt;For the past 2 years, I've been developing with the same team. And during those two years, we've spent a lot of time setting up conventions. It can be Code conventions, git conventions, or just a kind of a charter of good practices.&lt;/p&gt;

&lt;p&gt;When I began this job, I couldn't understand why it was so important to make those conventions and to stick to them. For me, as a newbie, it was a complete waste of time. &lt;/p&gt;

&lt;p&gt;Why would you spend so much time writing a readme? Why would you spend so much time to code like the other devs? why is it so f**king important to remove this semicolon? To add your PHP doc? To add spaces before you write the parameters of your function?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2kil0hzerpq9vix37l6f.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2kil0hzerpq9vix37l6f.gif" alt="whyyyy" width="250" height="142"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And I have to admit it, I understand why a lot of people think that way and why they are seeing that as a huuuuge waste of time.&lt;/p&gt;

&lt;p&gt;But one week ago, things have changed in my mind.&lt;br&gt;
I had a new job and a new team.&lt;/p&gt;

&lt;p&gt;So as I have spent 2 years on the extreme side of code trying to make every single line as clean as possible and stick to already set guidelines, I was thinking that I will have to learn completely different guidelines and conventions, but I was wrong.&lt;/p&gt;

&lt;p&gt;My first tasks were to add features on an old project that haven't change a lot since its creation 3 years ago. But as devs, we all know things kind of project that seems like a "no-rule zone".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwn9vgw81fpugkvizte38.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwn9vgw81fpugkvizte38.gif" alt="any-key" width="500" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But before that day, I wasn't realizing how frustrating it can be to have to work on this kind of project when you are new on it. &lt;/p&gt;

&lt;p&gt;I realize how important it is to have rules and guidelines that you must stick to when you code. However, I do think that you can't realize that before you had to work on this kind of "no-rule-zone-projects".&lt;/p&gt;

&lt;p&gt;I also have to say that it was highly exciting because I had the permission to demonstrate to my colleagues the power of conventions and what I've learned in the past 2 years.&lt;/p&gt;

&lt;p&gt;But as everyone has a different vision of what is perfect and what is not, you have to set rules with your team! &lt;br&gt;
These rules aren't necessarily fixed, you can change them through days, weeks, years. The only important thing is to have everyone contributing!&lt;br&gt;
Every developer has a different approach to his work. And it is extremely rare to find someone that has the same one that you. And by "rare" I mean "impossible".&lt;/p&gt;

&lt;p&gt;If you want a well running and beautiful project, you have to discuss with all the members of your team and try to find, together, a perfect way of doing what you want to do. Everyone has good ideas. The perfection that I am talking about is the moment when you find rules that suits the need of all your team.&lt;/p&gt;

&lt;p&gt;Even if it can seem like a loss of time when you are starting your project, it is not. You will earn a lot of time when you will return on this project after a 3 months break or when you will have to add a feature to an old piece of code.&lt;br&gt;
We all know that refactor isn't the most pleasable thing to do in our job (even if I like it a lot).&lt;br&gt;
And when a new team member will start to work on this project. He will be very happy to have rules and conventions that will guide him in his work.&lt;/p&gt;

&lt;p&gt;As I love clean code, I will soon upload articles on examples of guidelines that you can follow if you want to start to make beautiful and clean code.&lt;/p&gt;

&lt;p&gt;However, here is a list of incredible links that I use, and that you can already read and try. (you will see, it is magic !!!!)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/airbnb/javascript" rel="noopener noreferrer"&gt;https://github.com/airbnb/javascript&lt;/a&gt; -&amp;gt; Airbnb's javascript guidelines&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://guides.github.com/features/wikis/" rel="noopener noreferrer"&gt;https://guides.github.com/features/wikis/&lt;/a&gt; -&amp;gt; Github guide on how to make a perfect readme&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://buzut.net/cours/versioning-avec-git/bien-nommer-ses-commits" rel="noopener noreferrer"&gt;https://buzut.net/cours/versioning-avec-git/bien-nommer-ses-commits&lt;/a&gt; -&amp;gt; A perfect commit guide ( in french )&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.trello.com/trello-board-best-practices" rel="noopener noreferrer"&gt;https://blog.trello.com/trello-board-best-practices&lt;/a&gt; -&amp;gt; An amazing guide to master Trello boards&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See you soon and keep coding (well)!&lt;br&gt;
Thomas.&lt;/p&gt;

</description>
      <category>git</category>
      <category>codenewbie</category>
      <category>javascript</category>
      <category>conventions</category>
    </item>
    <item>
      <title>I want to build rockets….. with you !</title>
      <dc:creator>Thomas Singerlé-Florus</dc:creator>
      <pubDate>Fri, 04 Sep 2020 13:43:36 +0000</pubDate>
      <link>https://forem.com/tsflorus/i-want-to-build-rockets-with-you-4eki</link>
      <guid>https://forem.com/tsflorus/i-want-to-build-rockets-with-you-4eki</guid>
      <description>&lt;p&gt;Okay so right now you think that I am a weirdo…. And you’re right but it isn’t the point of this article.&lt;/p&gt;

&lt;p&gt;I’ve always been fascinated and passionate by space exploration and rockets and everything that has something to do with space or our universe exploration. But sadly, because of my studies, I’ve had to let this passion go away from me… &lt;/p&gt;

&lt;p&gt;But during the COVID-19 lockdown, I’ve returned to this old passion thanks to all the YouTubers that exist in this field.&lt;/p&gt;

&lt;p&gt;And here comes this beautiful day of quarantine, when I found this video: &lt;a href="https://www.youtube.com/watch?v=xvtzKox3QYg" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=xvtzKox3QYg&lt;/a&gt;&lt;br&gt;
I just said to myself “ Thomas, this guy is building outstanding rockets with no engineering background at all, you could totally do it too”.&lt;br&gt;
And with a lot of research, I found that yeah, I can do it too.&lt;/p&gt;

&lt;p&gt;But I found this boring. And as a full-stack developer, I don’t have any engineering background either, I’ve only built websites, APIs and apps. &lt;/p&gt;

&lt;p&gt;So I’ve figured out a way to build some model rockets.&lt;/p&gt;

&lt;p&gt;What if I wasn't the only one on this project?&lt;br&gt;
The fact is that anyone on this platform has his specialty. I just think that if we all try to build this project together, we could create something amazing. Moreover, anyone could learn something from others. &lt;/p&gt;

&lt;p&gt;The project will be to develop features of the launchpad/rocket and accessories together from all around the world. The assembly of the rocket will be done at my place in France.&lt;br&gt;
All steps of the project will be documented on the website and in youtube videos. The goal is that anyone will have the exact same importance in the project. Anyone will be able to talk about the project, or even build another rocket at his own place.&lt;/p&gt;

&lt;p&gt;The most important part is that it will be a project done from all around the world and in which everyone will collaborate and learn things. &lt;/p&gt;

&lt;p&gt;I am, at this time, initiating contact with brands, creators, bloggers, etc. To help us with this project. &lt;/p&gt;

&lt;p&gt;The goal of the first part of the project is to create a custom model rocket based on the SpaceX Falcon 9 and launch it near the french coast and try to recover the first stage on a precised landing zone ( just like the real one ). Everything will be fully autonomous.&lt;br&gt;
I am actually writing a complete description of this project and building a website to explain everything. But you can already contact me if you are interested or if you want more information about it.&lt;/p&gt;

&lt;p&gt;You can contact me in the comment section, on my website (tsflorus.me), or even by email: &lt;a href="mailto:tsflorus@gmail.com"&gt;tsflorus@gmail.com&lt;/a&gt; ( I check everything multiple time a day )&lt;/p&gt;

&lt;p&gt;I will be back very soon for a complete description!&lt;/p&gt;

&lt;p&gt;See you,&lt;br&gt;
Thomas&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Feedback / advices on my portfolio/blog</title>
      <dc:creator>Thomas Singerlé-Florus</dc:creator>
      <pubDate>Thu, 04 Jun 2020 13:43:16 +0000</pubDate>
      <link>https://forem.com/tsflorus/feedback-advices-on-my-portfolio-blog-35dg</link>
      <guid>https://forem.com/tsflorus/feedback-advices-on-my-portfolio-blog-35dg</guid>
      <description>&lt;p&gt;Hi everyone !&lt;br&gt;
Today, I have a special question to ask you.&lt;br&gt;
About a month ago I have developed my personal blog / portfolio in three days. ( &lt;a href="https://tsflorus.me" rel="noopener noreferrer"&gt;https://tsflorus.me&lt;/a&gt; ) The problem is that I am a perfectionist and I always want to do more. &lt;/p&gt;

&lt;p&gt;Can you, please, give me your feedback about this website or even advices. Let me know if something is missing or if you see better design possibilities.&lt;br&gt;
&lt;a href="https://tsflorus.me" rel="noopener noreferrer"&gt;https://tsflorus.me&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you dear friends ! &lt;/p&gt;

</description>
      <category>gatsby</category>
      <category>react</category>
      <category>design</category>
      <category>ux</category>
    </item>
    <item>
      <title>Build a website with Gatsby and Strapi - Part 1: 12 steps to install and deploy Strapi</title>
      <dc:creator>Thomas Singerlé-Florus</dc:creator>
      <pubDate>Sun, 10 May 2020 19:14:45 +0000</pubDate>
      <link>https://forem.com/tsflorus/build-a-website-with-gatsby-and-strapi-part-1-12-steps-to-install-and-deploy-strapi-43m9</link>
      <guid>https://forem.com/tsflorus/build-a-website-with-gatsby-and-strapi-part-1-12-steps-to-install-and-deploy-strapi-43m9</guid>
      <description>&lt;p&gt;For the first part of this tutorial serie, we will see how to install, configure and deploy Strapi.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Info : This tutorial serie is also available on &lt;a href="https://tsflorus.me" rel="noopener noreferrer"&gt;my website&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you have any problems or struggle with this tutorial, let me know in the comment section (I check the comments very often)&lt;/p&gt;

&lt;p&gt;Also, let me know what you think of this tuto and if there is stuff that can be added.&lt;/p&gt;

&lt;p&gt;As said in the &lt;a href="https://tsflorus.me/blog/build-website-gatsby-strapi-introduction" rel="noopener noreferrer"&gt;introduction article&lt;/a&gt;, Strapi is a powerful headless CMS that allows a lot of flexibility.&lt;/p&gt;

&lt;p&gt;In this tutorial we will set both development and production environment.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Production : on heroku with a postgresql database&lt;/li&gt;
&lt;li&gt;Development : on our local machine with the standard sqlite3 database&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1 - Install Strapi on our machine
&lt;/h2&gt;

&lt;p&gt;Be sure to match all the requirements before continue.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Node.js - 12.X minimum

- npm - 6.X minimum
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Our strapi project will be named "strapi-cms"&lt;/p&gt;

&lt;p&gt;To create it, open a new terminal window and type the following line :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn create strapi-app strapi-cms &lt;span class="nt"&gt;--quickstart&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Strapi is going to install all required dependencies, setup all needed files and an sqlite3 database for our local environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2 - Create an admin user
&lt;/h2&gt;

&lt;p&gt;Now that Strapi is installed, a browser window will open. If it does not open, navigate to &lt;strong&gt;&lt;a href="http://localhost:1337/admin" rel="noopener noreferrer"&gt;localhost:1337/admin&lt;/a&gt;&lt;/strong&gt; and here is what you should see :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg5aaccmqymr5h27c4m8s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg5aaccmqymr5h27c4m8s.png" alt="create-admin-user" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We are now going to fill the form and click the "Ready to start" button.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Warning : This user will only be saved in our local sqlite3 database, we willl have to recreate it in production&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 3 - Create our first collection type for our articles
&lt;/h2&gt;

&lt;p&gt;Strapi works with objects named "Collection types". If you have already worked with an MVC structure, a collection type is the equivalent of a model.&lt;/p&gt;

&lt;p&gt;In a collection we define :&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;* Name

* Fields

* Relations with other collection types
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;To create one, let's take a look to the left sidebar&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6lrpfjemt6b47emttlkk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6lrpfjemt6b47emttlkk.png" alt="sidebar" width="480" height="916"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on &lt;strong&gt;Content-Types Builder&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd9yul1jcwr8pgnrwesha.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd9yul1jcwr8pgnrwesha.png" alt="CTbuilder" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can see that we already have 3 collection types :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Permission&lt;/li&gt;
&lt;li&gt;Role&lt;/li&gt;
&lt;li&gt;User&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They have been generated by strapi when we have created the project.&lt;/p&gt;

&lt;p&gt;Now we are going to click on &lt;strong&gt;Create new collection type.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The display name of this new CT will be &lt;strong&gt;article.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnvtohl1094mf850uccxe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnvtohl1094mf850uccxe.png" alt="article-ct" width="800" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We are asked to select the different fields of this CT.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxb3tyocxy3ezhy56gk10.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxb3tyocxy3ezhy56gk10.png" alt="list-of-fields" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the list of the different fields we need with their names and types. After adding a field, click on &lt;strong&gt;Add another field&lt;/strong&gt; until you reach the end of the list.&lt;/p&gt;

&lt;p&gt;For our article we will select :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Text&lt;/strong&gt; for the title → &lt;strong&gt;Short text named title&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Date&lt;/strong&gt; for the publication date → &lt;strong&gt;Date named date&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Text&lt;/strong&gt; for the description → &lt;strong&gt;Long text named description&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Media&lt;/strong&gt; for a cover picture → &lt;strong&gt;Single media named cover&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rich Text&lt;/strong&gt; for the content → &lt;strong&gt;named content&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We have now created our article collection type. Let's now hit the &lt;strong&gt;save&lt;/strong&gt; button on the top right corner of the page.&lt;/p&gt;

&lt;h3&gt;
  
  
  What have we done ?
&lt;/h3&gt;

&lt;p&gt;If we think in an MVC way, we have set up our database and our models. We have specified that we have a table named "article" in which we will find different fields called : title, date, description, cover and content.&lt;/p&gt;

&lt;p&gt;This model is directly saved in our project as a json file (Which we will see a little bit later)&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4 - Create other collection types
&lt;/h2&gt;

&lt;p&gt;We already have an article CT. But we need to add some extra fields. &lt;/p&gt;

&lt;p&gt;As we are building a blog, it would be awesome to also have tags on each of our articles. It will allow us to create a search function and list every articles of a specified tag.&lt;/p&gt;

&lt;p&gt;Let's add a CT named &lt;strong&gt;tag&lt;/strong&gt;. To do that, just follow the steps of the article CT creation and specify these fields:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Text&lt;/strong&gt; for the name → &lt;strong&gt;Short text named name&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's all. We don't need anything else.&lt;/p&gt;

&lt;p&gt;As this CT is created, let's link it to our article CT so we will be able to add tags to each articles.&lt;/p&gt;

&lt;p&gt;Go on the article CT and click &lt;strong&gt;Add another field&lt;/strong&gt; then add a &lt;strong&gt;relation&lt;/strong&gt; field and on the right side, select the &lt;strong&gt;Tag&lt;/strong&gt; CT.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Let's speak about cardinality. If you ever worked with databases and created one, you will know that cardinality are very important. They allow us to know how much &lt;strong&gt;A&lt;/strong&gt; have and/or belongs to &lt;strong&gt;B.&lt;/strong&gt; Thanks to this result, the database creator will know if he has to create a new table or just a simple field.&lt;/p&gt;

&lt;p&gt;In our case &lt;strong&gt;Articles has and belongs to many Tags,&lt;/strong&gt; We have a cardinality of 1-1 (or * - * ) so we have to create a table, which is what we have done creating a new CT.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As I said, &lt;strong&gt;Articles has and belongs to many Tags.&lt;/strong&gt; We now have to specify it by selecting this icon:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft63w3nef0p8e4xkyohra.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft63w3nef0p8e4xkyohra.png" alt="cardinality" width="800" height="137"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Finish&lt;/strong&gt;, then &lt;strong&gt;Save&lt;/strong&gt; and we are all set.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We will certainly add other fields or CT during this tutorial serie. When it will be the case, I will give you the list of fields and types you have to create.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 5 - Create an app on &lt;a href="https://heroku.com" rel="noopener noreferrer"&gt;Heroku&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Our Strapi app is now all set but we can access it only via localhost. We now have to put this app in production in order to access it from anywhere.&lt;/p&gt;

&lt;p&gt;We will use &lt;strong&gt;&lt;a href="https://heroku.com" rel="noopener noreferrer"&gt;Heroku&lt;/a&gt;.&lt;/strong&gt; which is a Cloud application platform that allows you to host, deploy and serve web-apps.&lt;/p&gt;

&lt;p&gt;You can get a free dyno here (not a sponsored link)&lt;/p&gt;

&lt;p&gt;Personally, I have free a Hobby dev thanks to github education pack.&lt;/p&gt;

&lt;p&gt;Once your account is created, we will add a new app. For me, this app is called &lt;strong&gt;tsflorus-strapi-tutorial&lt;/strong&gt; and I have choose &lt;strong&gt;Europe&lt;/strong&gt; for the region as I am in France.&lt;/p&gt;

&lt;p&gt;Our heroku app is now created.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fste7r04q7kzg7oew9l5w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fste7r04q7kzg7oew9l5w.png" alt="heroku-created" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6 - Add the postgres add-on to our Heroku app
&lt;/h2&gt;

&lt;p&gt;As said at the beginning of this tuto, we need to setup a database along with our strapi instance.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why ?
&lt;/h3&gt;

&lt;p&gt;As Heroku is a cloud platform, when you will not be using your dyno, it will go into a sleep. Annd every-time the dyno will start, you will loose your data including articles, tags etc.&lt;/p&gt;

&lt;p&gt;We will be using a postgreSQL database with the &lt;strong&gt;Heroku-postgres&lt;/strong&gt; add-on.&lt;/p&gt;

&lt;p&gt;To add this add-on, click on &lt;strong&gt;Ressources&lt;/strong&gt; on the top navbar then search for &lt;strong&gt;Postgres&lt;/strong&gt; in the Add-ons section.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7mk2khfknlubufsd2lj8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7mk2khfknlubufsd2lj8.png" alt="postgres-addon" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on the right add-on then select your plan. For this tutorial we will go one a Hobby Dev plan.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7jurtq4rhs8oal86mui2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7jurtq4rhs8oal86mui2.png" alt="hobby-dev-plan" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7 - Add our database information in the config vars
&lt;/h2&gt;

&lt;p&gt;In order to secure our Strapi app, we will not put our database information directly in our config file but we will use environment variables.&lt;/p&gt;

&lt;p&gt;To set environment variables inside of our Heroku app, go to &lt;strong&gt;Settings&lt;/strong&gt; on the top navbar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw2ntdua0h8f1j1ceupai.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw2ntdua0h8f1j1ceupai.png" alt="settings" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's click on &lt;strong&gt;Reveal Config Vars&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We now see a var called &lt;strong&gt;Database URL&lt;/strong&gt; and its value is a very long string such as this one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;postgres://fisojprjbmfmpl:e94f1e76a464632410d8246b47eca1e3f0f78e817165c9a7e5a22013f5499025@ec2-176-34-97-213.eu-west-1.compute.amazonaws.com:5432/da2n7sjsnqblr5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This URL contains every information of our database, Name, Username, Password, Host, Port.&lt;/p&gt;

&lt;p&gt;In this case we have :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DATABASE_HOST =  ec2-176-34-97-213.eu-west-1.compute.amazonaws.com&lt;/li&gt;
&lt;li&gt;DATABASE_NAME = da2n7sjsnqblr5&lt;/li&gt;
&lt;li&gt;DATABASE_USERNAME = fisojprjbmfmpl&lt;/li&gt;
&lt;li&gt;DATABASE_PORT = 5432&lt;/li&gt;
&lt;li&gt;DATABASE_PASSWORD = e94f1e76a464632410d8246b47eca1e3f0f78e817165c9a7e5a22013f5499025&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For each info, we have to create a new var. Once its done, your page will look like this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3oe3lzp2quque7nac0kj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3oe3lzp2quque7nac0kj.png" alt="env-vats" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Great.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 8 - Configure your strapi database connection
&lt;/h2&gt;

&lt;p&gt;The last step for setting up the database is to update the strapi configuration.&lt;/p&gt;

&lt;p&gt;Let's open your favorite code editor on the root directory of your strapi project and go to &lt;strong&gt;config/environments/production/database.json&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Make modifications in order to have exactly this file :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"defaultConnection"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"default"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"connections"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"default"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"connector"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"bookshelf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"settings"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"client"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"postgres"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"host"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${process.env.DATABASE_HOST}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"port"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${process.env.DATABASE_PORT}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"database"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${process.env.DATABASE_NAME}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"username"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${process.env.DATABASE_USERNAME}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"password"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${process.env.DATABASE_PASSWORD}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What we are telling to strapi here is to use our environment variables to get the database information. It will use the few vars we have created on the last step.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 9 - Deploy your strapi app on heroku
&lt;/h2&gt;

&lt;p&gt;Deploy an app to heroku is very easy. There are few ways to do it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Github hook → The app will rebuild every-time you update the default branch (master for example)&lt;/li&gt;
&lt;li&gt;Container registry → If you are using Docker you will be able to deploy your docker-based app to heroku from its CLI&lt;/li&gt;
&lt;li&gt;Heroku Git → Deploy an app directly with CLI by making it a Heroku repository&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In out case, we will use the third method.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Heroku git and github can be used in parallel.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;First of all let's add a line to the .gitignore file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package-lock.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you don't add package-lock.json in the gitignore file, it may cause problems on heroku.&lt;/p&gt;

&lt;p&gt;Now, we will need to install a package named &lt;strong&gt;pg&lt;/strong&gt;  which is a postgres package. If you forgot to install it, your build will be marked as succeeded but you will get an eroor when opening the app&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0f3i9rbsenfofbr4y3wm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0f3i9rbsenfofbr4y3wm.png" alt="heroku-error" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If it was your case, just install pg package and redeploy your app. &lt;/p&gt;

&lt;p&gt;If you have already install &lt;strong&gt;pg&lt;/strong&gt; go on your app with terminal and type&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;heroku logs &lt;span class="nt"&gt;--tail&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That will tell you where the problem is.&lt;/p&gt;

&lt;p&gt;To install &lt;strong&gt;pg&lt;/strong&gt; open a terminal window on the root directory of your Strapi project and enter the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;pg &lt;span class="nt"&gt;--save&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To deploy our application we need to go to the root folder of our Strapi app and follow theses steps :&lt;/p&gt;

&lt;p&gt;1 - &lt;strong&gt;Login with heroku&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;heroku login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will open a webpage so you can log in with your heroku crendentials&lt;/p&gt;

&lt;p&gt;2 - &lt;strong&gt;Initialize the git repository&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If  you are using an existing git repository, skip this step&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3 - &lt;strong&gt;Set the remote branch for our app&lt;/strong&gt; (here, tsflorus-strapi-tutorial has to be replaced with your heroku app's name)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;heroku git:remote &lt;span class="nt"&gt;-a&lt;/span&gt; tsflorus-strapi-tutorial
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;4 - &lt;strong&gt;Add all of our changes&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;5 - &lt;strong&gt;Make a commit message&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Initialize my Strapi app"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;6 - &lt;strong&gt;Then, push to the master branch&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push heroku master
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Heroku will now build your Strapi app into your Dyno. You can see the build logs by clicking on &lt;strong&gt;Overview&lt;/strong&gt; in the top navbar.&lt;/p&gt;

&lt;p&gt;Once the build is noted as succeeded you will be able to see your app by clicking the &lt;strong&gt;Open app&lt;/strong&gt; button on the top-right corner of your screen.&lt;/p&gt;

&lt;p&gt;And you will see that your app is now running in production !&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxf1g2d4ecskbx093xz45.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxf1g2d4ecskbx093xz45.png" alt="app-in-production" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We will now need to recreate an admin user. To do that, go on &lt;strong&gt;&lt;a href="http://yourproject.herokuapp.com/admin" rel="noopener noreferrer"&gt;yourproject.herokuapp.com/admin&lt;/a&gt;&lt;/strong&gt; replacing &lt;strong&gt;yourproject&lt;/strong&gt; with your app name.&lt;/p&gt;

&lt;p&gt;Exactly like we have done on the beginning, complete the admin user creation form then log in.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjo22j0f3kxaeygccaeip.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjo22j0f3kxaeygccaeip.png" alt="strapi-dashboard" width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congrats ! You now have an instance of strapi running in production.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Keep in mind that every-time you will make changes in development mode (locally) you will need to redeploy your strapi app to see them production. Plus, the entry you will add on development mode will not be added in the production mode as we are not using the same database. If you want, you can setup the same database for both dev and prod environments.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 10 - Create our first tag and article
&lt;/h2&gt;

&lt;p&gt;We are now going to create our first tag and article.&lt;/p&gt;

&lt;p&gt;Let's click on the &lt;strong&gt;Tags&lt;/strong&gt; CT on the left navbar, then click on &lt;strong&gt;Add new Tag&lt;/strong&gt;. **** Our first tag will be named hello-world. Enter this name when you are asked to and click save.&lt;/p&gt;

&lt;p&gt;Now that we have our tag, let's add an article.&lt;/p&gt;

&lt;p&gt;Click on &lt;strong&gt;Articles&lt;/strong&gt; on the left navbar and you should see this window:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqszvui5gfzfark4p3jpo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqszvui5gfzfark4p3jpo.png" alt="create-article" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add the content of your choice for each fields and save your new entry.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The content field is a markdown editor. If you don't now about markdown yet, check &lt;strong&gt;&lt;a href="https://www.markdownguide.org/cheat-sheet/" rel="noopener noreferrer"&gt;this link&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7uoc63dotx32236433o6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7uoc63dotx32236433o6.png" alt="article-content" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, click on save and your article is saved !&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 11 - Adjust permissions
&lt;/h2&gt;

&lt;p&gt;As an headless CMS, Strapi render content via an API (I will upload very soon an article on APIs). For short, it means that we will not fetch data with a database connection but directly via a URL.&lt;/p&gt;

&lt;p&gt;By default, Strapi's API is secure so that anyone cannot query our data. For this tutorial, we will allow every public user to query data of our Strapi API.&lt;/p&gt;

&lt;p&gt;!! &lt;strong&gt;Disclaimer&lt;/strong&gt; !! Never do this for a real serious project ! We are going to remove user protection jsut for the needs of this tutorial. &lt;strong&gt;Always secure your APIs !&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On the left navbar of Strapi's dashboard, click on &lt;strong&gt;Roles &amp;amp; Permissions.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can see that we have two different user roles. An Authenticated and a Public user.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Both roles are empty of user because we haven't add one. Your admin user isn't in the user table but just allow you to access this Admin Dashboard&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgtwy9u6n4nd21nql71qf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgtwy9u6n4nd21nql71qf.png" alt="permissions" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We will edit permissions for the Public user.&lt;/p&gt;

&lt;p&gt;Once you have clicked on &lt;strong&gt;Public&lt;/strong&gt;, you will see under Permissions our two CT : Article and Tag.&lt;/p&gt;

&lt;p&gt;For both of them we are going to check &lt;strong&gt;find&lt;/strong&gt; and &lt;strong&gt;findone&lt;/strong&gt; checkbox.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note that on the right side you see a URL. In this case it is &lt;strong&gt;/tags/:id.&lt;/strong&gt; This is the path we will have to use to fetch a specified tag.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1nzggebgbpyf1lng1xb0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1nzggebgbpyf1lng1xb0.png" alt="set-permissions" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We will also need to set this &lt;strong&gt;find&lt;/strong&gt; and &lt;strong&gt;findone&lt;/strong&gt; permissions for the &lt;strong&gt;Users-Permissions&lt;/strong&gt; on the bottom of the page&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fduf3ssc74em4rx9jlnxa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fduf3ssc74em4rx9jlnxa.png" alt="users-permissions" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's click on save.&lt;/p&gt;

&lt;p&gt;Now we are ready to fetch our first article !&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 12 - Fetch our first article
&lt;/h2&gt;

&lt;p&gt;The default route for fetching your collection-types will be &lt;strong&gt;&lt;a href="http://yourproject.herokuapp.com/collection-type" rel="noopener noreferrer"&gt;yourproject.herokuapp.com/collection-type&lt;/a&gt;&lt;/strong&gt; where &lt;strong&gt;yourproject&lt;/strong&gt; is the name of your app and &lt;strong&gt;collection-type&lt;/strong&gt; the name of the CT you want to fetch.&lt;/p&gt;

&lt;p&gt;You can fetch this data from anywhere just entering this URL. Personally, when I work with APIs I prefer to use a software named &lt;strong&gt;Insomnia&lt;/strong&gt; which is a powerful tool for REST APIs.&lt;/p&gt;

&lt;p&gt;If I fetch the CT &lt;strong&gt;articles&lt;/strong&gt;, we will have this response:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Always add an extra "s" at the end of your CT name in the URL. To fetch our &lt;strong&gt;Article&lt;/strong&gt; CT, I have to enter this URL : &lt;a href="https://tsflorus-strapi-tutorial.herokuapp.com/articles" rel="noopener noreferrer"&gt;https://tsflorus-strapi-tutorial.herokuapp.com/articles&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Hello world"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2020-05-10"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Just want to say hello to the entire world"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"# Oppugnant deus ficta fulva oculis manent lupis&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;## Undis meminisse tum pariterque uterque iras lupum&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;Lorem markdownum Antiphatae moto, sis nuper, habuit coniunx, rursus. Volvens&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;examina, enim Medea, non stant me vocis ignarus! **Rector** aras omnia possis&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;domo querellis nullis, per verba, est ponti militia.&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;Posset inquit. Vero ferarum offensi umorque; **ille Cereri**, vertitur hoc.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;Vitalesque superba, inde suos **di iuxta**. *Ipsa formam*: agnus nec fluentum&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;dextera Thetidis et Aurora pedumque: et.&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;1. Et pulsa fovit me decorem sonantia strigis&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;2. Succedit pastor&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;3. Furta poteras est pulsus lenis Helenum origine&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;4. Celebratior ferunt gravi&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;5. Succurritis miseram opera spectacula aris violata signum&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;6. Quem nudae genu vulnus&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;## Muris quisquis&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;Traiecit iactarique; eadem si pererrat orbis, hinc victor est fusum digitos&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;bipenni ad altismunera. Pectora est placent, qui muris, ille nexu nomenque&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;fidas, portus tonsa parentis, et nec.&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;1. Ignorat verum illa videt volatu puer&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;2. Lupi fugientis fures&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;3. Sub octonis volitare herbas natasque opacas&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;4. Silva Poeantia fueramque grande confluat&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;5. Quae sit eodem circum audiat quid&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;Gramina Achaica multaque tepebat pede: iusserat, et esse, miserrima agebat&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;stirpe, fateor lumina tabulas! Mortisque tigres sopistis Arethusae novit&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;**turbida**: at Latiis vellet morsibus: *flamma*.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;[E](http://www.armanullum.org/timidum.html) Peleus pompas spectans erigitur&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;penetratque tremensque parce. Vellera omnes; ulla absit sustinuit corque, denos&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;cum templa Placatus animi.&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;- Mea ensem adnuit&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- Aspicit ora Lucina&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- In equi florent&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;Digna intrarant o vindice faciem, deinde, me nomen! Me fata quodque, iunxisse&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;strictique maximus et cantus ecquem vestrumque reliquit membra cum mediis omnia,&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;admissi? Medio arvum timuit obsequio aperti! Aspera pendeat ausus ad declinat&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;ter adhuc si cibis venabula *meos ibi*."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"created_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2020-05-10T14:52:24.883Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"updated_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2020-05-10T14:52:24.883Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"cover"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"bermuda-searching"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"alternativeText"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"caption"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"width"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;876&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"height"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;912&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"formats"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"small"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"ext"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;".png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/uploads/small_bermuda-searching_ff94e074d2.png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"hash"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"small_bermuda-searching_ff94e074d2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"mime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"image/png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"size"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;110.39&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"width"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;480&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"height"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"medium"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"ext"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;".png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/uploads/medium_bermuda-searching_ff94e074d2.png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"hash"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"medium_bermuda-searching_ff94e074d2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"mime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"image/png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"size"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;181.99&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"width"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;720&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"height"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;750&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"thumbnail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"ext"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;".png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/uploads/thumbnail_bermuda-searching_ff94e074d2.png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"hash"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"thumbnail_bermuda-searching_ff94e074d2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"mime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"image/png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"size"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;27.26&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"width"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"height"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;156&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"hash"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"bermuda-searching_ff94e074d2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"ext"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;".png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"mime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"image/png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"size"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;58.74&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/uploads/bermuda-searching_ff94e074d2.png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"previewUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"provider"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"local"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"provider_metadata"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"created_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2020-05-10T14:52:12.395Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"updated_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2020-05-10T14:52:12.395Z"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"tags"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"hello-world"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"created_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2020-05-10T14:47:32.091Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"updated_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2020-05-10T14:47:32.091Z"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Perfect !&lt;/strong&gt; We have just fetch our first article ! Looks amazing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion:
&lt;/h2&gt;

&lt;p&gt;It is pretty easy to setup strapi, only 12 steps on you are ready to go.&lt;/p&gt;

&lt;p&gt;But, you will see that we will quickly have a problem with our images. Images  you will upload will only be saved on the cache of your dyno. &lt;/p&gt;

&lt;p&gt;In the next tutorial, we will learn how to setup Cloudinary with Strapi in order to save your images even when the dyno will fall asleep.&lt;/p&gt;

&lt;p&gt;Don't forget to follow me on twitter : &lt;a class="mentioned-user" href="https://dev.to/tsflorus"&gt;@tsflorus&lt;/a&gt; and to check my website &lt;a href="http://tsflorus.me" rel="noopener noreferrer"&gt;tsflorus.me&lt;/a&gt; where I post all of my articles.&lt;/p&gt;

&lt;p&gt;If you don't want to miss the next tutorial, don't forget to subscribe to my dev profile and to &lt;strong&gt;&lt;a href="https://tsflorus.us8.list-manage.com/subscribe/post?u=7fcf47a51912ee5106710fe48&amp;amp;id=b90dc69a3f" rel="noopener noreferrer"&gt;my newsletter here&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;See you soon and keep codinng !&lt;/p&gt;

&lt;p&gt;Thomas&lt;/p&gt;

</description>
      <category>gatsby</category>
      <category>react</category>
      <category>webdev</category>
      <category>strapi</category>
    </item>
    <item>
      <title>Build a website with Gatsby and Strapi - Introduction</title>
      <dc:creator>Thomas Singerlé-Florus</dc:creator>
      <pubDate>Fri, 08 May 2020 22:18:25 +0000</pubDate>
      <link>https://forem.com/tsflorus/build-a-website-with-gatsby-and-strapi-introduction-583h</link>
      <guid>https://forem.com/tsflorus/build-a-website-with-gatsby-and-strapi-introduction-583h</guid>
      <description>&lt;p&gt;Imagine that you want to build a powerful and fast website. A website for your company for example, including a blog. What would you use ? Wordpress ? Laravel ? Drupal ?&lt;/p&gt;

&lt;p&gt;Well, those are pretty good choices.&lt;/p&gt;

&lt;p&gt;If we look at this chart of the most used CMS on the web (according to Wappalyzer), Wordpress is clearly the most used CMS&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3nw5emf9kxsv9bbmksri.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3nw5emf9kxsv9bbmksri.png" alt="most used CMS" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And if we take a look at the most used web frameworks, we have a lot of things we can play with.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6zcz4ppt861pcm71qrut.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6zcz4ppt861pcm71qrut.png" alt="most used Web Framework" width="800" height="489"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  But what if we think different ?
&lt;/h3&gt;

&lt;p&gt;I mean, the last time someone has done that, he created an apple that worth 1.3 trillion.&lt;/p&gt;

&lt;p&gt;Well, in this tutorial we will learn to think different.&lt;/p&gt;

&lt;h2&gt;
  
  
  Another way of managing data
&lt;/h2&gt;

&lt;p&gt;If you take a look at the CMS charts, we see Wordpress and Drupal. And what does they have in common ?&lt;/p&gt;

&lt;p&gt;They both managing content of a front-end. For now, nothing new they are just random CMS.&lt;/p&gt;

&lt;p&gt;The fact is that Wordpress and Drupal both have a Front and a Back-end.&lt;/p&gt;

&lt;p&gt;The keywords for our project will be flexibility and power.&lt;/p&gt;

&lt;h3&gt;
  
  
  Here comes Headless CMS
&lt;/h3&gt;

&lt;p&gt;A headless CMS is a CMS without presentational layer. This is just a backend.&lt;/p&gt;

&lt;p&gt;I will not explain you in details what are headless CMS because it exist a lot of great article about it. &lt;a href="https://medium.com/tribalscale/headless-vs-traditional-cms-which-is-better-3388bd6311b1" rel="noopener noreferrer"&gt;You can check this one if you want&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Headless CMS are perfect for front-end developers because they allow a lot more flexibility on designing the UI.&lt;/p&gt;

&lt;p&gt;I am not a front-end developer but when I was building &lt;a href="https://tsflorus.me" rel="noopener noreferrer"&gt;my website&lt;/a&gt; I wanted something simple and powerful.&lt;/p&gt;

&lt;p&gt;The data we will be building (articles and pages) will be accessible via an API. We will just have to fetched this data using API query with GraphQL.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which CMS should we use ?
&lt;/h3&gt;

&lt;p&gt;There are a lot of Headless CMS, Netlify, Ghost, Contentful etc. But the CMS we will be using is called &lt;a href="https://strapi.io" rel="noopener noreferrer"&gt;Strapi&lt;/a&gt;. Strapi is a new powerful headless CMS build in France.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://tsflorus.me/blog/discovery-gatsby-reactjs" rel="noopener noreferrer"&gt;You can check my article on my discovery of Gatsby and Strapi here&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I've choose Strapi because it is new and very easy to use.&lt;/p&gt;

&lt;p&gt;Right, Now we have our headless CMS. But what is a website with just a backend ?&lt;/p&gt;

&lt;p&gt;We now need a way to build our front-end. And for that, it exist something called &lt;strong&gt;static site generator.&lt;/strong&gt; Did you already heard about them ?&lt;/p&gt;

&lt;p&gt;Let's take a quick look to wappalyzer charts for most used Static site generator  :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fieb4m8jmf54dr60fbfee.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fieb4m8jmf54dr60fbfee.png" alt="most used satin site generator" width="800" height="467"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Take a look at the first result. It is called &lt;strong&gt;&lt;a href="https://gatsby.org" rel="noopener noreferrer"&gt;Gatsby&lt;/a&gt;&lt;/strong&gt; and this is what we will use for this website.&lt;/p&gt;

&lt;p&gt;I invite you to check the website of Gatsby to learn about this very powerful tool.&lt;/p&gt;

&lt;p&gt;Gatsby is based on Javascript and more specifically it is a Reactjs based framework.&lt;/p&gt;

&lt;p&gt;This is perfect for us, Reactjs will allow us to build a powerful web app (PWA → Progressive Web App). React js is also perfect for UX design. Again, I will not write a lot about react and I encouraged you to check others blog posts about react.&lt;/p&gt;

&lt;p&gt;React also allows us to implement logic in the same file than the UI.&lt;/p&gt;

&lt;p&gt;Now we know that we will use &lt;strong&gt;Gatsby&lt;/strong&gt; and &lt;strong&gt;Strapi&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deployment and production
&lt;/h3&gt;

&lt;p&gt;When we will have build our website we will need to deploy it in order to be accessible on the web.&lt;/p&gt;

&lt;p&gt;To do that, we will see how to deploy our CMS on heroku and our website on Vercel (Formerly ZEIT) using Now servers.&lt;/p&gt;

&lt;p&gt;For this serie of tutorials, I will upload at least an article a week. We will see everything we need to get started with a simple website. Along with these articles, I will upload videos as soon as possible to complete it and to have a perfect look on this project.&lt;/p&gt;

&lt;p&gt;Tutorials will be available on my &lt;a href="https://tsflorus.me" rel="noopener noreferrer"&gt;website&lt;/a&gt; (mainlly) and on this account.&lt;/p&gt;

&lt;p&gt;See you very soon and keep coding !&lt;/p&gt;

&lt;p&gt;Thomas&lt;/p&gt;

</description>
      <category>gatsby</category>
      <category>react</category>
      <category>webdev</category>
      <category>strapi</category>
    </item>
    <item>
      <title>My discovery of Gatsby and ReactJs</title>
      <dc:creator>Thomas Singerlé-Florus</dc:creator>
      <pubDate>Thu, 07 May 2020 14:49:51 +0000</pubDate>
      <link>https://forem.com/tsflorus/my-discovery-of-gatsby-and-reactjs-1nan</link>
      <guid>https://forem.com/tsflorus/my-discovery-of-gatsby-and-reactjs-1nan</guid>
      <description>&lt;h3&gt;
  
  
  A quick check on why and how I developed my &lt;a href="https://tsflorus.me" rel="noopener noreferrer"&gt;portfolio/blog&lt;/a&gt; using ReactJs and Gatsby.
&lt;/h3&gt;

&lt;p&gt;!! Disclaimer !! This article isn't Tech oriented. It is a simple feedback on my experience with Gatsby and React.&lt;/p&gt;

&lt;p&gt;I've been making websites and applications for 4 years now, including 2 in a company.&lt;br&gt;
After these 4 years of development, I absolutely needed a portfolio. Moreover, I always wanted to have a personal blog in order to clarify shadowy areas I encountered during my early career, answer the questions I had as a young developer and transmit my feedback, feeling and skills. &lt;/p&gt;

&lt;p&gt;My starting point was : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A minimalist design -&amp;gt; simple and clear, to keep the important content forward.&lt;/li&gt;
&lt;li&gt;Several pages :

&lt;ul&gt;
&lt;li&gt;About -&amp;gt; in order to present myself and make my resume available.&lt;/li&gt;
&lt;li&gt;Projects -&amp;gt; This is the portfolio part of the site, including all my achievements whether they are experimental or not.&lt;/li&gt;
&lt;li&gt;Blog -&amp;gt; This is the part I wanted so much to be able to post all of my articles&lt;/li&gt;
&lt;li&gt;Contact -&amp;gt; To keep a simple way to contact me directly from my website&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;As little logic as possible -&amp;gt; Usage of external services for forms, newsletter, storing images, PDFs etc.&lt;/li&gt;

&lt;li&gt;The use of a headless CMS -&amp;gt; In order to maintain a lightweight website and be able to publish my articles without coding.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Well, although simple, my basic idea was well thought out.&lt;/p&gt;

&lt;p&gt;However, I also had constraints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Last year, I haven't done a lot of front-end development.&lt;/li&gt;
&lt;li&gt;I'm a perfectionist (huge contradiction with the first point...).&lt;/li&gt;
&lt;li&gt;I wanted to do &lt;strong&gt;something new&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This desire of novelty led me to think about something I ha used in early 2018 : &lt;strong&gt;React-js&lt;/strong&gt;&lt;br&gt;
And as far as I remember, React equal &lt;strong&gt;Power&lt;/strong&gt;, &lt;strong&gt;Flexibility&lt;/strong&gt;, &lt;strong&gt;Lightweight&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Seemed pretty perfect to me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing tool for website
&lt;/h2&gt;

&lt;p&gt;Going with "vanilla" react seemed to me rather complicated and unsuitable. So I decided to make my own research and I came with this solution:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs87e0nmrjanl6yvr8lqb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs87e0nmrjanl6yvr8lqb.jpg" alt="1G9aVAI3aezHLw_JsiCfB1Q" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.gatsbyjs.org" rel="noopener noreferrer"&gt;&lt;strong&gt;Gatsby&lt;/strong&gt;&lt;/a&gt; is a framework based on react that allows you to generate static sites from your react code.&lt;br&gt;
To make it more explicit, I made a small diagram :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnxajd1ws13jzqpqrx3sq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnxajd1ws13jzqpqrx3sq.png" alt="Untitled_Diagram" width="671" height="631"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Explanation:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
You just have to develop your site in Reactjs and fetch your data from the sources of your choice (Wordpress, Ghost, Strapi, Netlify, Json, Markdown), Gatsby will build your code and transform it into HTML, CSS and Javascript.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/tsflorus/image/upload/v1588855401/Harry-Potter-Main-Article-1_a6261dd1f0.webp" rel="noopener noreferrer"&gt;Harry-Potter-Main-Article-1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yes yes yes it's magic !!!!!&lt;/p&gt;

&lt;p&gt;And this is the (simple) structure of a Gatsby project:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fydr88jy0zrl2lckddodg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fydr88jy0zrl2lckddodg.png" alt="Capture_decran_2020-05-07_a_13.46.25" width="800" height="326"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Complicated to make it simpler.&lt;/p&gt;

&lt;p&gt;Using gatsby has been very simple for me, the documentation is very complete and the community is very active. I was able to build my site in 1 week by working 4 hours a day. I couldn't have dreamed of anything better.&lt;/p&gt;

&lt;h2&gt;
  
  
  Content management
&lt;/h2&gt;

&lt;p&gt;I have made the choice to couple Gatsby with a headless CMS (only backend interface) and for that I decided to use &lt;strong&gt;&lt;a href="https://strapi.io" rel="noopener noreferrer"&gt;Strapi&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Strapi is a very recent CMS which is flexible, fast ad lightning etc... It's like the Role Royce of headless CMS.&lt;/p&gt;

&lt;p&gt;And if you are not convinced, I invite you to &lt;strong&gt;&lt;a href="https://strapi.io/wordpress-alternative" rel="noopener noreferrer"&gt;read this Strapi vs Wordpress article&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Aaaaaand ?! Take your two-star jersey and add one because Strapi is French ! (Sorry I love my country)&lt;/p&gt;

&lt;p&gt;Using Strapi has been a pure joy for me. It makes you feel like you have no limits. You can customize it in the way you want from A to Z and the list of possibilities is very long.&lt;/p&gt;

&lt;p&gt;To have an idea of the Strapi interface, here is an example:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F24it343mlii4w77j07bd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F24it343mlii4w77j07bd.png" alt="strapi-content-type-builder" width="800" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The data is then sent via an API (fully customizable) like this:&lt;br&gt;
! &lt;a href="https://res.cloudinary.com/tsflorus/image/upload/v1588855520/strapi-json_b0a5ea2427.png" rel="noopener noreferrer"&gt;strapi-json&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And now, to get along with the Gatsby side of thing, we use &lt;strong&gt;&lt;a href="https://graphql.org/" rel="noopener noreferrer"&gt;GraphQL&lt;/a&gt;&lt;/strong&gt; (open-source query language for APIs). And our query will look like this:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8h5ekll0lvy14rycsde6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8h5ekll0lvy14rycsde6.png" alt="ArticleQuery" width="800" height="953"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To display it, simply insert the information like this : &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr3s9irgdo6lgfh54f931.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr3s9irgdo6lgfh54f931.png" alt="react-article-title" width="800" height="288"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The title of our article is displayed, you just have to do the same with every fetched data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Like I said, Gatsby and Strapi is the perfect alliance for creating a powerful and modern website very quickly.&lt;/p&gt;

&lt;p&gt;I will make a tutorial ASAP to teach how to make a website with Gatsby and Strapi in record time.&lt;/p&gt;

&lt;p&gt;For now, keep coding !&lt;/p&gt;

&lt;p&gt;Thomas&lt;/p&gt;

</description>
      <category>gatsby</category>
      <category>react</category>
      <category>strapi</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
