diff --git a/build.js b/build.js
index 616d21b8e3810200e7f02cf40f077146dc598f8b..2d553917ab6b7308bd95992a87b9a94ea8e3c1f7 100644
--- a/build.js
+++ b/build.js
@@ -3,7 +3,7 @@
 "use strict";
 
 const build_conf = {
-    protected_dirs: ["assets", "style", "news-articles", "game-articles", "software-articles"],
+    protected_dirs: ["assets", "style", "news-articles", "game-articles", "software-articles", "articles"],
 };
 
 const fs = require("fs");
diff --git a/constants.js b/constants.js
index f8bd7698b6cd53b9222fac41700c796e8f29ee8f..6d0ce287a31b694e43c646747957d3e09213b56c 100644
--- a/constants.js
+++ b/constants.js
@@ -2,7 +2,5 @@ const { server_url } = require("./config");
 
 module.exports = {
     images_url: `${server_url}assets/images`,
-    news_articles_url: `${server_url}news-articles`,
-    game_articles_url: `${server_url}game-articles`,
-    software_articles_url: `${server_url}software-articles`,
+    articles_url: `${server_url}articles/`,
 };
diff --git a/public/game-articles/fantom_quest/fantom_quest.json b/public/articles/games/fantom_quest/fantom_quest.json
similarity index 97%
rename from public/game-articles/fantom_quest/fantom_quest.json
rename to public/articles/games/fantom_quest/fantom_quest.json
index 62c6e4a4721414a9b5f139c8c6e623847d42c990..6aeadaa769160f39a5e7d7067324e2b06e536bc8 100755
--- a/public/game-articles/fantom_quest/fantom_quest.json
+++ b/public/articles/games/fantom_quest/fantom_quest.json
@@ -2,6 +2,7 @@
     "title": "Fantom Quest",
     "subtitle": "Le labyrinthe de la quête d'identité",
     "tags": ["jeu web", "pixelart", "javascript", "labyrinthe"],
+    "status": "wip",
     "body": "<file>fantom_quest.txt",
     "images": [
         "screen_fantom_quest_1.jpg",
diff --git a/public/game-articles/fantom_quest/fantom_quest.txt b/public/articles/games/fantom_quest/fantom_quest.txt
similarity index 100%
rename from public/game-articles/fantom_quest/fantom_quest.txt
rename to public/articles/games/fantom_quest/fantom_quest.txt
diff --git a/public/game-articles/fantom_quest/images/lucipix.png b/public/articles/games/fantom_quest/images/lucipix.png
similarity index 100%
rename from public/game-articles/fantom_quest/images/lucipix.png
rename to public/articles/games/fantom_quest/images/lucipix.png
diff --git a/public/game-articles/fantom_quest/images/pijarpix.png b/public/articles/games/fantom_quest/images/pijarpix.png
similarity index 100%
rename from public/game-articles/fantom_quest/images/pijarpix.png
rename to public/articles/games/fantom_quest/images/pijarpix.png
diff --git a/public/game-articles/fantom_quest/images/screen_fantom_quest_1.jpg b/public/articles/games/fantom_quest/images/screen_fantom_quest_1.jpg
similarity index 100%
rename from public/game-articles/fantom_quest/images/screen_fantom_quest_1.jpg
rename to public/articles/games/fantom_quest/images/screen_fantom_quest_1.jpg
diff --git a/public/game-articles/fantom_quest/images/screen_fantom_quest_2.jpg b/public/articles/games/fantom_quest/images/screen_fantom_quest_2.jpg
similarity index 100%
rename from public/game-articles/fantom_quest/images/screen_fantom_quest_2.jpg
rename to public/articles/games/fantom_quest/images/screen_fantom_quest_2.jpg
diff --git a/public/game-articles/fantom_quest/images/screen_fantom_quest_3.jpg b/public/articles/games/fantom_quest/images/screen_fantom_quest_3.jpg
similarity index 100%
rename from public/game-articles/fantom_quest/images/screen_fantom_quest_3.jpg
rename to public/articles/games/fantom_quest/images/screen_fantom_quest_3.jpg
diff --git a/public/game-articles/fantom_quest/images/screen_fantom_quest_4.jpg b/public/articles/games/fantom_quest/images/screen_fantom_quest_4.jpg
similarity index 100%
rename from public/game-articles/fantom_quest/images/screen_fantom_quest_4.jpg
rename to public/articles/games/fantom_quest/images/screen_fantom_quest_4.jpg
diff --git a/public/game-articles/fantom_quest/images/screen_fantom_quest_5.jpg b/public/articles/games/fantom_quest/images/screen_fantom_quest_5.jpg
similarity index 100%
rename from public/game-articles/fantom_quest/images/screen_fantom_quest_5.jpg
rename to public/articles/games/fantom_quest/images/screen_fantom_quest_5.jpg
diff --git a/public/game-articles/fantom_quest/lucie_ventadour.txt b/public/articles/games/fantom_quest/lucie_ventadour.txt
similarity index 63%
rename from public/game-articles/fantom_quest/lucie_ventadour.txt
rename to public/articles/games/fantom_quest/lucie_ventadour.txt
index 33d4e8f317120f143d89948b71a6aa830ba067fb..c0c017ad741c6e11fb8aec53932ea63bae53a39b 100755
--- a/public/game-articles/fantom_quest/lucie_ventadour.txt
+++ b/public/articles/games/fantom_quest/lucie_ventadour.txt
@@ -1,2 +1,2 @@
 Salut moi c'est Lu7, je suis une geek et je vois la vie en pixels >< !
-<a href="https://www.lucieventadour.com/" target="_blank">Site web</a> -- <a href="http://lucipix.canalblog.com/" target="_blank">Blog pix</a>
\ No newline at end of file
+<a href="https://www.lucieventadour.com/" target="_blank">Site web</a> | <a href="http://lucipix.canalblog.com/" target="_blank">Blog pix</a>
\ No newline at end of file
diff --git a/public/game-articles/fantom_quest/pijar.txt b/public/articles/games/fantom_quest/pijar.txt
similarity index 55%
rename from public/game-articles/fantom_quest/pijar.txt
rename to public/articles/games/fantom_quest/pijar.txt
index e301b6bcffef369e9c6e958f4471dbea4e8e1811..e9b1b474a772a9fe507326dac1a14c8bdf41cf34 100755
--- a/public/game-articles/fantom_quest/pijar.txt
+++ b/public/articles/games/fantom_quest/pijar.txt
@@ -1,5 +1,5 @@
 Salut moi c'est pijar. Je fais des trucs.
 J'aime bien le code et je fais du dessin et tout.
 
-<a href="https://pierrejarriges-dessins.blogspot.com" target="_blank">Blog Dessin</a> -- <a href="https://soundcloud.com/abstractobject" target="_blank">Soundcloud</a>
-<a href="https://gitlab.com/peter_rabbit" target="_blank">Gitlab</a> -- <a href=" https://github.com/codnpix" target="_blank">Github</a>
\ No newline at end of file
+<a href="https://pierrejarriges-dessins.blogspot.com" target="_blank">Blog Dessin</a> | <a href="https://soundcloud.com/abstractobject" target="_blank">Soundcloud</a>
+<a href="https://gitlab.com/peter_rabbit" target="_blank">Gitlab</a> | <a href=" https://github.com/codnpix" target="_blank">Github</a>
\ No newline at end of file
diff --git a/public/articles/games/index.json b/public/articles/games/index.json
new file mode 100755
index 0000000000000000000000000000000000000000..a9d294c4f48cce33b6436c5970e02b71723453d4
--- /dev/null
+++ b/public/articles/games/index.json
@@ -0,0 +1,3 @@
+{
+    "articles": ["fantom_quest"]
+}
diff --git a/public/articles/news/index.json b/public/articles/news/index.json
new file mode 100755
index 0000000000000000000000000000000000000000..0f654c8a8b88dc64a50c56a9175db9c2e20c792a
--- /dev/null
+++ b/public/articles/news/index.json
@@ -0,0 +1,3 @@
+{
+    "articles": ["installation-kuadrado"]
+}
diff --git a/public/news-articles/installation-kuadrado/images/atelier_bureau.jpg b/public/articles/news/installation-kuadrado/images/atelier_bureau.jpg
similarity index 100%
rename from public/news-articles/installation-kuadrado/images/atelier_bureau.jpg
rename to public/articles/news/installation-kuadrado/images/atelier_bureau.jpg
diff --git a/public/news-articles/installation-kuadrado/images/local_entree.jpg b/public/articles/news/installation-kuadrado/images/local_entree.jpg
similarity index 100%
rename from public/news-articles/installation-kuadrado/images/local_entree.jpg
rename to public/articles/news/installation-kuadrado/images/local_entree.jpg
diff --git a/public/news-articles/installation-kuadrado/installation-kuadrado.json b/public/articles/news/installation-kuadrado/installation-kuadrado.json
similarity index 100%
rename from public/news-articles/installation-kuadrado/installation-kuadrado.json
rename to public/articles/news/installation-kuadrado/installation-kuadrado.json
diff --git a/public/news-articles/installation-kuadrado/installation-kuadrado.txt b/public/articles/news/installation-kuadrado/installation-kuadrado.txt
similarity index 100%
rename from public/news-articles/installation-kuadrado/installation-kuadrado.txt
rename to public/articles/news/installation-kuadrado/installation-kuadrado.txt
diff --git a/public/articles/software/index.json b/public/articles/software/index.json
new file mode 100755
index 0000000000000000000000000000000000000000..b2212f7ce92cb2213681b9ee53b11c52d02a7c84
--- /dev/null
+++ b/public/articles/software/index.json
@@ -0,0 +1,3 @@
+{
+    "articles": ["watergun"]
+}
diff --git a/public/software-articles/watergun/images/watergun-overview-light.jpg b/public/articles/software/watergun/images/watergun-overview-light.jpg
similarity index 100%
rename from public/software-articles/watergun/images/watergun-overview-light.jpg
rename to public/articles/software/watergun/images/watergun-overview-light.jpg
diff --git a/public/software-articles/watergun/watergun.json b/public/articles/software/watergun/watergun.json
similarity index 92%
rename from public/software-articles/watergun/watergun.json
rename to public/articles/software/watergun/watergun.json
index 03034ea64fce93bec8bb329b69b9cbedf3c6559b..f87ffaea744975a29d2ded14a21abca91d166a52 100755
--- a/public/software-articles/watergun/watergun.json
+++ b/public/articles/software/watergun/watergun.json
@@ -1,7 +1,7 @@
 {
     "title": "Watergun",
     "date": "2021/01/23",
-    "status": "Work in progress",
+    "status": "wip",
     "subtitle": "Un éditeur de site web ultra-light",
     "body": "<file>watergun.txt",
     "technical": {
diff --git a/public/software-articles/watergun/watergun.txt b/public/articles/software/watergun/watergun.txt
similarity index 100%
rename from public/software-articles/watergun/watergun.txt
rename to public/articles/software/watergun/watergun.txt
diff --git a/public/education/education.js b/public/education/education.js
index 00e5947caf0aec98751414a4291be4522f15a6df..056d1e0441efd81600e604b6226d64f5377cf8c9 100644
--- a/public/education/education.js
+++ b/public/education/education.js
@@ -11,9 +11,7 @@ const { server_url } = require("./config");
 
 module.exports = {
     images_url: `${server_url}assets/images`,
-    news_articles_url: `${server_url}news-articles`,
-    game_articles_url: `${server_url}game-articles`,
-    software_articles_url: `${server_url}software-articles`,
+    articles_url: `${server_url}articles/`,
 };
 
 },{"./config":1}],3:[function(require,module,exports){
diff --git a/public/game-articles/index.json b/public/game-articles/index.json
deleted file mode 100755
index e1e7267f4a6916f25b1c2ab5967acb4e4d7c62a8..0000000000000000000000000000000000000000
--- a/public/game-articles/index.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-    "articles": ["fantom_quest/fantom_quest.json"]
-}
diff --git a/public/games/games.js b/public/games/games.js
index 8daf77ab783450ebe5e24079e3213395169c4baf..93f44593c6868a1cd6bc1973efb45b382f19c5d0 100644
--- a/public/games/games.js
+++ b/public/games/games.js
@@ -11,9 +11,7 @@ const { server_url } = require("./config");
 
 module.exports = {
     images_url: `${server_url}assets/images`,
-    news_articles_url: `${server_url}news-articles`,
-    game_articles_url: `${server_url}game-articles`,
-    software_articles_url: `${server_url}software-articles`,
+    articles_url: `${server_url}articles/`,
 };
 
 },{"./config":1}],3:[function(require,module,exports){
@@ -98,14 +96,24 @@ function getArticleDate(date) {
     return `${date.getDate()}-${date.getMonth() + 1}-${date.getFullYear()}`;
 }
 
+function getArticleStatus(status) {
+    switch (status) {
+        case "wip":
+            return "En développement";
+        case "released":
+            return "En production";
+    }
+}
+
 function loadArticles(dir_url) {
     return new Promise((resolve, reject) => {
         fetchjson(`${dir_url}/index.json`)
             .then(json => {
                 Promise.all(
-                    json.articles.map(async articlePath => {
-                        const art = await fetchjson(`${dir_url}/${articlePath}`);
-                        const tmpSplit = articlePath.split("/");
+                    json.articles.map(async artDir => {
+                        const artPath = `${artDir}/${artDir}.json`;
+                        const art = await fetchjson(`${dir_url}/${artPath}`);
+                        const tmpSplit = artPath.split("/");
                         tmpSplit.pop();
                         const absArtPath = `${dir_url}/${tmpSplit.join("/")}`;
                         return Object.assign(art, { path: absArtPath });
@@ -145,6 +153,7 @@ module.exports = {
     getArticleBody,
     getArticleDate,
     populateArticles,
+    getArticleStatus,
 };
 
 },{"./fetch":5}],5:[function(require,module,exports){
@@ -263,7 +272,7 @@ module.exports = {
 "use strict";
 
 const ImageCarousel = require("../../../generic-components/image-carousel");
-const { getArticleBody } = require("../../../lib/article-utils");
+const { getArticleBody, getArticleStatus } = require("../../../lib/article-utils");
 
 class TeamMember {
     constructor(props) {
@@ -313,7 +322,7 @@ class GameArticle {
     }
 
     render() {
-        const { title, tags, body, subtitle, images, path, team_subarticles } = this.props;
+        const { title, tags, body, subtitle, images, path, team_subarticles, status } = this.props;
         return {
             tag: "article",
             class: "game-article",
@@ -325,11 +334,29 @@ class GameArticle {
                 },
                 {
                     tag: "div",
-                    class: "game-tags",
-                    contents: tags.map(tag => {
-                        return { tag: "span", contents: tag };
-                    }),
+                    class: "game-infos",
+                    contents: [
+                        {
+                            tag: "div",
+                            class: "game-tags",
+                            contents: tags.map(tag => {
+                                return { tag: "span", contents: tag };
+                            }),
+                        },
+                        {
+                            tag: "div",
+                            class: "game-status",
+                            contents: [
+                                {
+                                    tag: "span",
+                                    class: `project-status ${status}`,
+                                    contents: getArticleStatus(status),
+                                },
+                            ],
+                        },
+                    ],
                 },
+
                 {
                     tag: "h3",
                     class: "game-subtitle",
@@ -368,7 +395,7 @@ module.exports = GameArticle;
 },{"../../../generic-components/image-carousel":3,"../../../lib/article-utils":4}],8:[function(require,module,exports){
 "use strict";
 
-const { game_articles_url } = require("../../../../constants");
+const { articles_url } = require("../../../../constants");
 const { loadArticles, populateArticles } = require("../../../lib/article-utils");
 const objectHtmlRenderer = require("../../../lib/object-html-renderer");
 const GameArticle = require("./game-article");
@@ -384,7 +411,7 @@ class GameArticles {
     }
 
     loadArticles() {
-        loadArticles(game_articles_url)
+        loadArticles(`${articles_url}/games`)
             .then(articles => {
                 Promise.all(
                     articles.map(async a => {
diff --git a/public/main.js b/public/main.js
index 26dba74dae114ee4b89f3763de7b4237434dc7de..dcc30fb845ef96a38d8b0e9ce85e6f54713c750f 100644
--- a/public/main.js
+++ b/public/main.js
@@ -11,9 +11,7 @@ const { server_url } = require("./config");
 
 module.exports = {
     images_url: `${server_url}assets/images`,
-    news_articles_url: `${server_url}news-articles`,
-    game_articles_url: `${server_url}game-articles`,
-    software_articles_url: `${server_url}software-articles`,
+    articles_url: `${server_url}articles/`,
 };
 
 },{"./config":1}],3:[function(require,module,exports){
@@ -88,7 +86,7 @@ module.exports = ImageCarousel;
 },{"../lib/object-html-renderer":9}],4:[function(require,module,exports){
 "use strict";
 
-const { news_articles_url } = require("../../constants");
+const { articles_url } = require("../../constants");
 const objectHtmlRenderer = require("../lib/object-html-renderer");
 const ImageCarousel = require("../generic-components/image-carousel");
 const { loadArticles, getArticleDate, getArticleBody } = require("../lib/article-utils");
@@ -105,7 +103,7 @@ class NewsArticles {
     }
 
     loadArticles() {
-        loadArticles(news_articles_url).then(articles => {
+        loadArticles(`${articles_url}/news`).then(articles => {
             this.state.articles = articles;
             this.state.showArticleIndex = this.state.articles.length - 1;
             this.refresh();
@@ -383,14 +381,24 @@ function getArticleDate(date) {
     return `${date.getDate()}-${date.getMonth() + 1}-${date.getFullYear()}`;
 }
 
+function getArticleStatus(status) {
+    switch (status) {
+        case "wip":
+            return "En développement";
+        case "released":
+            return "En production";
+    }
+}
+
 function loadArticles(dir_url) {
     return new Promise((resolve, reject) => {
         fetchjson(`${dir_url}/index.json`)
             .then(json => {
                 Promise.all(
-                    json.articles.map(async articlePath => {
-                        const art = await fetchjson(`${dir_url}/${articlePath}`);
-                        const tmpSplit = articlePath.split("/");
+                    json.articles.map(async artDir => {
+                        const artPath = `${artDir}/${artDir}.json`;
+                        const art = await fetchjson(`${dir_url}/${artPath}`);
+                        const tmpSplit = artPath.split("/");
                         tmpSplit.pop();
                         const absArtPath = `${dir_url}/${tmpSplit.join("/")}`;
                         return Object.assign(art, { path: absArtPath });
@@ -430,6 +438,7 @@ module.exports = {
     getArticleBody,
     getArticleDate,
     populateArticles,
+    getArticleStatus,
 };
 
 },{"./fetch":8}],8:[function(require,module,exports){
diff --git a/public/news-articles/index.json b/public/news-articles/index.json
deleted file mode 100755
index 42c50f04227b700ae4b22efbca8a0e75cf471812..0000000000000000000000000000000000000000
--- a/public/news-articles/index.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-    "articles": ["installation-kuadrado/installation-kuadrado.json"]
-}
diff --git a/public/software-articles/index.json b/public/software-articles/index.json
deleted file mode 100755
index b5f5003a38e6f198a059ad35adb148adfe5aaf4a..0000000000000000000000000000000000000000
--- a/public/software-articles/index.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-    "articles": ["watergun/watergun.json"]
-}
diff --git a/public/software-development/software-development.js b/public/software-development/software-development.js
index 6af223eef707fa0be144ef3863b66d5ec0cde8a5..3ecadce594bf6fa1b1f8fc38f9af292a4d947299 100644
--- a/public/software-development/software-development.js
+++ b/public/software-development/software-development.js
@@ -11,9 +11,7 @@ const { server_url } = require("./config");
 
 module.exports = {
     images_url: `${server_url}assets/images`,
-    news_articles_url: `${server_url}news-articles`,
-    game_articles_url: `${server_url}game-articles`,
-    software_articles_url: `${server_url}software-articles`,
+    articles_url: `${server_url}articles/`,
 };
 
 },{"./config":1}],3:[function(require,module,exports){
@@ -98,14 +96,24 @@ function getArticleDate(date) {
     return `${date.getDate()}-${date.getMonth() + 1}-${date.getFullYear()}`;
 }
 
+function getArticleStatus(status) {
+    switch (status) {
+        case "wip":
+            return "En développement";
+        case "released":
+            return "En production";
+    }
+}
+
 function loadArticles(dir_url) {
     return new Promise((resolve, reject) => {
         fetchjson(`${dir_url}/index.json`)
             .then(json => {
                 Promise.all(
-                    json.articles.map(async articlePath => {
-                        const art = await fetchjson(`${dir_url}/${articlePath}`);
-                        const tmpSplit = articlePath.split("/");
+                    json.articles.map(async artDir => {
+                        const artPath = `${artDir}/${artDir}.json`;
+                        const art = await fetchjson(`${dir_url}/${artPath}`);
+                        const tmpSplit = artPath.split("/");
                         tmpSplit.pop();
                         const absArtPath = `${dir_url}/${tmpSplit.join("/")}`;
                         return Object.assign(art, { path: absArtPath });
@@ -145,6 +153,7 @@ module.exports = {
     getArticleBody,
     getArticleDate,
     populateArticles,
+    getArticleStatus,
 };
 
 },{"./fetch":5}],5:[function(require,module,exports){
@@ -262,9 +271,9 @@ module.exports = {
 },{}],7:[function(require,module,exports){
 "use strict";
 
-const { software_articles_url } = require("../../../../constants");
+const { articles_url } = require("../../../../constants");
 const ImageCarousel = require("../../../generic-components/image-carousel");
-const { loadArticles, getArticleBody, getArticleDate } = require("../../../lib/article-utils");
+const { loadArticles, getArticleBody, getArticleDate, getArticleStatus } = require("../../../lib/article-utils");
 const objectHtmlRenderer = require("../../../lib/object-html-renderer");
 
 class SoftwareArticle {
@@ -299,8 +308,8 @@ class SoftwareArticle {
                         },
                         {
                             tag: "span",
-                            class: "software-status",
-                            contents: status,
+                            class: `project-status ${status}`,
+                            contents: getArticleStatus(status),
                         },
                     ],
                 },
@@ -391,7 +400,7 @@ class SoftwareArticles {
     }
 
     loadArticles() {
-        loadArticles(software_articles_url)
+        loadArticles(`${articles_url}/software`)
             .then(articles => {
                 this.state.articles = articles;
                 this.refresh();
diff --git a/public/style/style.css b/public/style/style.css
index e4c3310b0622faaaa885027af55e0e6987d9ec49..e39219686d73643fe582676422cede7ffc32b789 100644
--- a/public/style/style.css
+++ b/public/style/style.css
@@ -337,6 +337,19 @@ main #page-container .page-contents-center {
   max-width: 100%;
   margin: 0 auto;
 }
+main #page-container .project-status {
+  margin: 0 20px;
+  color: #3c4144;
+  padding: 10px 20px;
+  font-weight: bold;
+  border-radius: 20px;
+}
+main #page-container .project-status.wip {
+  background-color: #e5a002;
+}
+main #page-container .project-status.prod {
+  background-color: #368736;
+}
 main #page-container #home-page {
   display: flex;
   flex-direction: column;
@@ -849,7 +862,7 @@ main #page-container #games-page .game-articles article.game-article {
   grid-template-rows: repeat(6, auto);
   background-color: #3c4144;
 }
-main #page-container #games-page .game-articles article.game-article *:not(a) {
+main #page-container #games-page .game-articles article.game-article *:not(a, .project-status) {
   color: #d4d9dd;
 }
 main #page-container #games-page .game-articles article.game-article .game-title {
@@ -861,14 +874,19 @@ main #page-container #games-page .game-articles article.game-article .game-title
   font-size: 35px;
   font-style: italic;
 }
-main #page-container #games-page .game-articles article.game-article .game-tags {
+main #page-container #games-page .game-articles article.game-article .game-infos {
+  font-size: 13px;
   grid-column: 1;
+  display: grid;
+  grid-template-columns: auto auto;
+}
+main #page-container #games-page .game-articles article.game-article .game-infos .game-tags {
   display: flex;
   gap: 10px;
   flex-wrap: wrap;
   margin: 10px 20px;
 }
-main #page-container #games-page .game-articles article.game-article .game-tags span {
+main #page-container #games-page .game-articles article.game-article .game-infos .game-tags span {
   font-size: 12px;
   padding: 6px;
   background-color: #6b7880;
@@ -876,6 +894,12 @@ main #page-container #games-page .game-articles article.game-article .game-tags
   border-radius: 5px;
   font-weight: 600;
 }
+main #page-container #games-page .game-articles article.game-article .game-infos .game-status {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  flex-direction: row;
+}
 main #page-container #games-page .game-articles article.game-article .game-subtitle {
   grid-column: 1;
   margin: 10px 20px 30px;
@@ -952,6 +976,9 @@ main #page-container #games-page .game-articles article.placeholder * {
     padding: 20px;
     font-size: 25px;
   }
+  main #page-container #games-page .game-articles article.game-article .game-infos {
+    grid-template-columns: 1fr;
+  }
   main #page-container #games-page .game-articles article.game-article .image-carousel {
     grid-column: 1;
     grid-row: 2;
@@ -1000,14 +1027,6 @@ main #page-container #software-page .software-articles article.software-article
   color: #96a5ae;
   font-style: italic;
 }
-main #page-container #software-page .software-articles article.software-article .software-infos .software-status {
-  margin: 0 20px;
-  background-color: #e5a002;
-  color: #3c4144;
-  padding: 10px 20px;
-  font-weight: bold;
-  border-radius: 20px;
-}
 main #page-container #software-page .software-articles article.software-article .software-subtitle {
   grid-column: 1;
   margin: 20px;
diff --git a/src/home-page-components/news-articles.js b/src/home-page-components/news-articles.js
index 57eacfb7a5a7b5f7192fed5538fff1e5d23cf9d4..9ec021914f6d21657f752f8d1e415ed5d823ae2f 100644
--- a/src/home-page-components/news-articles.js
+++ b/src/home-page-components/news-articles.js
@@ -1,6 +1,6 @@
 "use strict";
 
-const { news_articles_url } = require("../../constants");
+const { articles_url } = require("../../constants");
 const objectHtmlRenderer = require("../lib/object-html-renderer");
 const ImageCarousel = require("../generic-components/image-carousel");
 const { loadArticles, getArticleDate, getArticleBody } = require("../lib/article-utils");
@@ -17,7 +17,7 @@ class NewsArticles {
     }
 
     loadArticles() {
-        loadArticles(news_articles_url).then(articles => {
+        loadArticles(`${articles_url}/news`).then(articles => {
             this.state.articles = articles;
             this.state.showArticleIndex = this.state.articles.length - 1;
             this.refresh();
diff --git a/src/lib/article-utils.js b/src/lib/article-utils.js
index 29ac1e1b995486056115d5b72746352cc1f05a0f..efde108f655fbd59e918b05a3777bf9930b55f9c 100644
--- a/src/lib/article-utils.js
+++ b/src/lib/article-utils.js
@@ -10,14 +10,24 @@ function getArticleDate(date) {
     return `${date.getDate()}-${date.getMonth() + 1}-${date.getFullYear()}`;
 }
 
+function getArticleStatus(status) {
+    switch (status) {
+        case "wip":
+            return "En développement";
+        case "released":
+            return "En production";
+    }
+}
+
 function loadArticles(dir_url) {
     return new Promise((resolve, reject) => {
         fetchjson(`${dir_url}/index.json`)
             .then(json => {
                 Promise.all(
-                    json.articles.map(async articlePath => {
-                        const art = await fetchjson(`${dir_url}/${articlePath}`);
-                        const tmpSplit = articlePath.split("/");
+                    json.articles.map(async artDir => {
+                        const artPath = `${artDir}/${artDir}.json`;
+                        const art = await fetchjson(`${dir_url}/${artPath}`);
+                        const tmpSplit = artPath.split("/");
                         tmpSplit.pop();
                         const absArtPath = `${dir_url}/${tmpSplit.join("/")}`;
                         return Object.assign(art, { path: absArtPath });
@@ -57,4 +67,5 @@ module.exports = {
     getArticleBody,
     getArticleDate,
     populateArticles,
+    getArticleStatus,
 };
diff --git a/src/pages/games/components/game-article.js b/src/pages/games/components/game-article.js
index edd332ab7c4c897aa1978b326fbc56722dd06920..afca661f9a875a78bbd1985546fc0749fe985a1b 100644
--- a/src/pages/games/components/game-article.js
+++ b/src/pages/games/components/game-article.js
@@ -1,7 +1,7 @@
 "use strict";
 
 const ImageCarousel = require("../../../generic-components/image-carousel");
-const { getArticleBody } = require("../../../lib/article-utils");
+const { getArticleBody, getArticleStatus } = require("../../../lib/article-utils");
 
 class TeamMember {
     constructor(props) {
@@ -51,7 +51,7 @@ class GameArticle {
     }
 
     render() {
-        const { title, tags, body, subtitle, images, path, team_subarticles } = this.props;
+        const { title, tags, body, subtitle, images, path, team_subarticles, status } = this.props;
         return {
             tag: "article",
             class: "game-article",
@@ -63,11 +63,29 @@ class GameArticle {
                 },
                 {
                     tag: "div",
-                    class: "game-tags",
-                    contents: tags.map(tag => {
-                        return { tag: "span", contents: tag };
-                    }),
+                    class: "game-infos",
+                    contents: [
+                        {
+                            tag: "div",
+                            class: "game-tags",
+                            contents: tags.map(tag => {
+                                return { tag: "span", contents: tag };
+                            }),
+                        },
+                        {
+                            tag: "div",
+                            class: "game-status",
+                            contents: [
+                                {
+                                    tag: "span",
+                                    class: `project-status ${status}`,
+                                    contents: getArticleStatus(status),
+                                },
+                            ],
+                        },
+                    ],
                 },
+
                 {
                     tag: "h3",
                     class: "game-subtitle",
diff --git a/src/pages/games/components/game-articles.js b/src/pages/games/components/game-articles.js
index 6f7fb8541a6a899e83e07738c9c81b8b5de96c23..e80d8c709e5b274bca672e6dbb24cb0ed578ba35 100644
--- a/src/pages/games/components/game-articles.js
+++ b/src/pages/games/components/game-articles.js
@@ -1,6 +1,6 @@
 "use strict";
 
-const { game_articles_url } = require("../../../../constants");
+const { articles_url } = require("../../../../constants");
 const { loadArticles, populateArticles } = require("../../../lib/article-utils");
 const objectHtmlRenderer = require("../../../lib/object-html-renderer");
 const GameArticle = require("./game-article");
@@ -16,7 +16,7 @@ class GameArticles {
     }
 
     loadArticles() {
-        loadArticles(game_articles_url)
+        loadArticles(`${articles_url}/games`)
             .then(articles => {
                 Promise.all(
                     articles.map(async a => {
diff --git a/src/pages/games/games.scss b/src/pages/games/games.scss
index 341bf603273843810b8f61dc2fce5407f7c66680..2355abfb9768fe3ff985bffec1cbde601655d97f 100644
--- a/src/pages/games/games.scss
+++ b/src/pages/games/games.scss
@@ -8,7 +8,7 @@
             &.game-article {
                 grid-template-rows: repeat(6, auto);
                 background-color: $dark_2;
-                *:not(a) {
+                *:not(a, .project-status) {
                     color: $light_0;
                 }
                 .game-title {
@@ -20,21 +20,30 @@
                     font-size: 35px;
                     font-style: italic;
                 }
-                .game-tags {
+                .game-infos {
+                    font-size: 13px;
                     grid-column: 1;
-                    display: flex;
-                    gap: 10px;
-                    flex-wrap: wrap;
-                    margin: 10px 20px;
-                    span {
-                        font-size: 12px;
-                        padding: 6px;
-                        background-color: $medium_grey;
-                        color: $light_0;
-                        border-radius: 5px;
-                        font-weight: 600;
+                    display: grid;
+                    grid-template-columns: auto auto;
+                    .game-tags {
+                        display: flex;
+                        gap: 10px;
+                        flex-wrap: wrap;
+                        margin: 10px 20px;
+                        span {
+                            font-size: 12px;
+                            padding: 6px;
+                            background-color: $medium_grey;
+                            color: $light_0;
+                            border-radius: 5px;
+                            font-weight: 600;
+                        }
+                    }
+                    .game-status {
+                        @include flex-center;
                     }
                 }
+
                 .game-subtitle {
                     grid-column: 1;
                     margin: 10px 20px 30px;
@@ -110,6 +119,9 @@
                         padding: 20px;
                         font-size: 25px;
                     }
+                    .game-infos {
+                        grid-template-columns: 1fr;
+                    }
 
                     .image-carousel {
                         grid-column: 1;
diff --git a/src/pages/software-development/components/software-articles.js b/src/pages/software-development/components/software-articles.js
index 15cb37c0e1f9a6e636565a5afb0d4600ff140301..0d0254d1598becd7d6ac488fadb65acc3893d225 100644
--- a/src/pages/software-development/components/software-articles.js
+++ b/src/pages/software-development/components/software-articles.js
@@ -1,8 +1,8 @@
 "use strict";
 
-const { software_articles_url } = require("../../../../constants");
+const { articles_url } = require("../../../../constants");
 const ImageCarousel = require("../../../generic-components/image-carousel");
-const { loadArticles, getArticleBody, getArticleDate } = require("../../../lib/article-utils");
+const { loadArticles, getArticleBody, getArticleDate, getArticleStatus } = require("../../../lib/article-utils");
 const objectHtmlRenderer = require("../../../lib/object-html-renderer");
 
 class SoftwareArticle {
@@ -37,8 +37,8 @@ class SoftwareArticle {
                         },
                         {
                             tag: "span",
-                            class: "software-status",
-                            contents: status,
+                            class: `project-status ${status}`,
+                            contents: getArticleStatus(status),
                         },
                     ],
                 },
@@ -129,7 +129,7 @@ class SoftwareArticles {
     }
 
     loadArticles() {
-        loadArticles(software_articles_url)
+        loadArticles(`${articles_url}/software`)
             .then(articles => {
                 this.state.articles = articles;
                 this.refresh();
diff --git a/src/pages/software-development/software-development.scss b/src/pages/software-development/software-development.scss
index e5a78861ea0b35d8d707eebbb08942d9f3e5e07b..d5549a322054bd99cdcb7eb8f3e139ba755dced1 100644
--- a/src/pages/software-development/software-development.scss
+++ b/src/pages/software-development/software-development.scss
@@ -27,14 +27,6 @@
                     color: $light_1;
                     font-style: italic;
                 }
-                .software-status {
-                    margin: 0 20px;
-                    background-color: $yellow_1;
-                    color: $dark_2;
-                    padding: 10px 20px;
-                    font-weight: bold;
-                    border-radius: 20px;
-                }
             }
 
             .software-subtitle {
diff --git a/src/style.scss b/src/style.scss
index 2bc18e6f88dcf7befd8a9ce5d573299c9c9a19bd..79e008eb9e430f69dc88526adb8ed4db8962ef78 100644
--- a/src/style.scss
+++ b/src/style.scss
@@ -251,6 +251,9 @@ main {
         .page-contents-center {
             @include page-contents-center;
         }
+        .project-status {
+            @include project-status
+        }
         @import "./homepage.scss";
         @import "./pages/education/education.scss";
         @import "./pages/games/games.scss";
diff --git a/src/theme.scss b/src/theme.scss
index 5d4d057dfaef8f1f794b5a93861d925b161ff41a..627be8433d5c0aa19cd3ffad72899ac5fc13d776 100644
--- a/src/theme.scss
+++ b/src/theme.scss
@@ -134,6 +134,20 @@ $page_contents_center_width: 1300px;
     }
 }
 
+@mixin project-status {
+    margin: 0 20px;
+    color: $dark_2;
+    padding: 10px 20px;
+    font-weight: bold;
+    border-radius: 20px;
+    &.wip {
+        background-color: $yellow_1;
+    }
+    &.prod {
+        background-color: $kaki;
+    }
+}
+
 @mixin flex-center {
     display: flex;
     justify-content: center;