From 68275a42fbcc8b520acd7303313f44a73a67d3ab Mon Sep 17 00:00:00 2001
From: Pierre Jarriges <pierre.jarriges@tutanota.com>
Date: Thu, 27 May 2021 13:08:02 +0200
Subject: [PATCH] education: stage linux

---
 config.js                                     |   6 +-
 public/assets/images/learning_theme_linux.png | Bin 3852 -> 4064 bytes
 public/education/education.js                 |  22 +-
 public/games/games.js                         |   2 +-
 public/main.js                                |   2 +-
 .../software-development.js                   |   2 +-
 public/story-logic-app/index.html             |  35 ++
 public/story-logic-app/story-logic-app.js     | 380 ++++++++++++++++++
 .../pages/story-logic-app/story-logic-app.css |   3 +
 public/style/style.css                        |   2 +-
 src/pages/education/education.js              |  20 +-
 src/pages/education/education.scss            |   2 +-
 src/pages/story-logic-app/index.js            |   4 +
 src/pages/story-logic-app/meta.json           |  20 +
 src/pages/story-logic-app/story-logic-app.js  |  19 +
 .../story-logic-app/story-logic-app.scss      |   0
 16 files changed, 503 insertions(+), 16 deletions(-)
 create mode 100644 public/story-logic-app/index.html
 create mode 100644 public/story-logic-app/story-logic-app.js
 create mode 100644 public/style/pages/story-logic-app/story-logic-app.css
 create mode 100644 src/pages/story-logic-app/index.js
 create mode 100644 src/pages/story-logic-app/meta.json
 create mode 100644 src/pages/story-logic-app/story-logic-app.js
 create mode 100644 src/pages/story-logic-app/story-logic-app.scss

diff --git a/config.js b/config.js
index 6f9f8c6..17760e7 100644
--- a/config.js
+++ b/config.js
@@ -1,12 +1,10 @@
 function getServerUrl() {
-    return `${location.origin}${
-        location.origin.charAt(location.origin.length - 1) !== "/" ? "/" : ""
-    }`;
+    return `${location.origin}${location.origin.charAt(location.origin.length - 1) !== "/" ? "/" : ""
+        }`;
 }
 
 module.exports = {
     getServerUrl,
-    website_title: "Kuadrado website template",
     build: {
         protected_dirs: ["assets", "style", "articles"],
         default_meta_keys: ["title", "description", "image", "open_graph", "json_ld"],
diff --git a/public/assets/images/learning_theme_linux.png b/public/assets/images/learning_theme_linux.png
index dd16fa85266a9c4433576ed6eef7d46e53be1f85..cebfbf120831c2e66bc217158db173a4443cba84 100755
GIT binary patch
literal 4064
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

delta 3818
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

diff --git a/public/education/education.js b/public/education/education.js
index c32aa79..9eeb43d 100644
--- a/public/education/education.js
+++ b/public/education/education.js
@@ -7,7 +7,7 @@ function getServerUrl() {
 
 module.exports = {
     getServerUrl,
-    website_title: "Kuadrado website template",
+    website_title: "Kuadrado website",
     build: {
         protected_dirs: ["assets", "style", "articles"],
         default_meta_keys: ["title", "description", "image", "open_graph", "json_ld"],
@@ -146,7 +146,7 @@ const EDU_THEMES = [
         // pageUrl: "2d",
     },
     {
-        title: "Maths et physiques",
+        title: "Maths et physique",
         description: "Abordez les notions fondamentales de façon décontractée pour le plaisir de comprendre.",
         image: "learning_theme_math.png",
         // pageUrl: "math",
@@ -162,6 +162,13 @@ const EDU_THEMES = [
         description: "Perdu avec votre ordinateur ou votre smartphone, les logiciels, internet ? Je vous aide pas à pas à comprendre les fondamentaux et à utiliser sereinement la technologie.",
         image: "learning_theme_pc.png",
         // pageUrl: "popularization"
+    },
+    {
+        title: "Stage GNU/Linux",
+        description: `<b>Passez le cap du libre ! </b><br/>
+        Stage de 4 séances pour installer Linux, faire ses premiers pas avec les logiciels libres et acquérir une autonomie suffisante pour une utilisation basique.
+        `,
+        image: "learning_theme_linux.png"
     }
 ];
 
@@ -249,7 +256,7 @@ class EducationPage extends WebPage {
                                             tag: "p",
                                             class: "info-body",
                                             contents: `Les ateliers sont accessibles aux adultes comme aux enfants, plutôt à partir de 12 ans.<br/>
-                                            Les séances ont lieu en groupes mixtes.
+                                            Les séances ont lieu en groupes mixtes. Capacité limitée à 5 personnes.
                                             `
                                         }
                                     ]
@@ -332,7 +339,7 @@ class EducationPage extends WebPage {
                                                     tag: "li",
                                                     contents: [
                                                         { tag: "span", contents: "Inscription au mois" },
-                                                        { tag: "span", contents: "50€" },
+                                                        { tag: "span", contents: "50€, accès à toutes les plages horaires." },
                                                     ]
                                                 },
                                                 {
@@ -348,6 +355,13 @@ class EducationPage extends WebPage {
                                                         { tag: "span", contents: "Cours particuliers" },
                                                         { tag: "span", contents: "30€/h, sur place ou en visio. Horaires à définir." },
                                                     ]
+                                                },
+                                                {
+                                                    tag: "li",
+                                                    contents: [
+                                                        { tag: "span", contents: "Stage 4 séances de 2h" },
+                                                        { tag: "span", contents: "40€ par personne, horaires et dates à définir selon la demande." },
+                                                    ]
                                                 }
                                             ]
                                         }
diff --git a/public/games/games.js b/public/games/games.js
index f7a742b..bad4aa7 100644
--- a/public/games/games.js
+++ b/public/games/games.js
@@ -7,7 +7,7 @@ function getServerUrl() {
 
 module.exports = {
     getServerUrl,
-    website_title: "Kuadrado website template",
+    website_title: "Kuadrado website",
     build: {
         protected_dirs: ["assets", "style", "articles"],
         default_meta_keys: ["title", "description", "image", "open_graph", "json_ld"],
diff --git a/public/main.js b/public/main.js
index cdb3d0f..f599a14 100644
--- a/public/main.js
+++ b/public/main.js
@@ -7,7 +7,7 @@ function getServerUrl() {
 
 module.exports = {
     getServerUrl,
-    website_title: "Kuadrado website template",
+    website_title: "Kuadrado website",
     build: {
         protected_dirs: ["assets", "style", "articles"],
         default_meta_keys: ["title", "description", "image", "open_graph", "json_ld"],
diff --git a/public/software-development/software-development.js b/public/software-development/software-development.js
index c78fd15..6fb1912 100644
--- a/public/software-development/software-development.js
+++ b/public/software-development/software-development.js
@@ -7,7 +7,7 @@ function getServerUrl() {
 
 module.exports = {
     getServerUrl,
-    website_title: "Kuadrado website template",
+    website_title: "Kuadrado website",
     build: {
         protected_dirs: ["assets", "style", "articles"],
         default_meta_keys: ["title", "description", "image", "open_graph", "json_ld"],
diff --git a/public/story-logic-app/index.html b/public/story-logic-app/index.html
new file mode 100644
index 0000000..8faa083
--- /dev/null
+++ b/public/story-logic-app/index.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang="fr" prefix="og: https://ogp.me/ns#">
+    <head>
+        <meta charset="utf-8" />
+        <title>Kuadrado Software | Story Logic</title>
+        <meta name="description" content="appli pour faire des jeux old school"/>
+        <meta name="author" content="Kuadrado Software" />
+        <meta name="image" content="https://kuadrado-software.fr/assets/images/brain.png"/>
+
+        <!-- Open Graph Protocol meta data -->
+        <meta property="og:title" content="Kuadrado Software | Story Logic"/>
+        <meta property="og:description" content="appli pour faire des jeux old school"/>
+        <meta property="og:type" content="website" />
+        <meta property="og:url" content="https://kuadrado-software.fr/story-logic-app"/>
+        <meta property="og:image" content="https://kuadrado-software.fr/assets/images/brain.png"/>
+        <meta property="twitter:image" content="https://kuadrado-software.fr/assets/images/brain.png"/>
+        <meta property="og:locale" content="fr_FR"/>
+        <meta property="og:site_name" content="Kuadrado Software" />
+
+        <!-- English translation not ready yet -->
+        <!-- <meta property="og:locale:alternate" content="en_GB" /> -->
+
+        <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
+        <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
+        <link href="/style/style.css" rel="stylesheet" />
+        <script type="application/ld+json">{"@context":"https://schema.org","type":"WebPage","description":"appli pour faire des jeux old school","image":["https://kuadrado-software.fr/assets/images/brain.svg"],"keywords":"","name":"Kuadrado Software - Story Logic","url":"https://kuadrado-software.fr/story-logic-app/"}</script>
+    </head>
+    <!-- The vocab attribute defines the standard vocabulary used for RDFa standard.
+    The DOM may contain properties such as "typeof" and "property" accordinly to the schema.org vocabulary -->
+    <body vocab="https://schema.org/">
+        <!-- The H1 tag will be never seen but it's necessary for SEO -->
+        <main><h1 style="visibility: hidden">Kuadrado Software | Story Logic</h1></main>
+    </body>
+    <script type="text/javascript" src="./story-logic-app.js"></script>
+</html>
diff --git a/public/story-logic-app/story-logic-app.js b/public/story-logic-app/story-logic-app.js
new file mode 100644
index 0000000..b69681d
--- /dev/null
+++ b/public/story-logic-app/story-logic-app.js
@@ -0,0 +1,380 @@
+(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
+function getServerUrl() {
+    return `${location.origin}${
+        location.origin.charAt(location.origin.length - 1) !== "/" ? "/" : ""
+    }`;
+}
+
+module.exports = {
+    getServerUrl,
+    website_title: "Kuadrado website",
+    build: {
+        protected_dirs: ["assets", "style", "articles"],
+        default_meta_keys: ["title", "description", "image", "open_graph", "json_ld"],
+    },
+};
+
+},{}],2:[function(require,module,exports){
+const { getServerUrl } = require("./config");
+
+module.exports = {
+    images_url: `${getServerUrl()}assets/images/`,
+    articles_url: `${getServerUrl()}articles/`,
+};
+
+},{"./config":1}],3:[function(require,module,exports){
+"use strict";
+
+module.exports = {
+    setRenderCycleRoot(renderCycleRoot) {
+        this.renderCycleRoot = renderCycleRoot;
+    },
+    objectToHtml: function objectToHtml(obj) {
+        const { tag } = obj;
+
+        const node = document.createElement(tag);
+        const excludeKeys = ["tag", "contents", "style_rules", "state"];
+
+        Object.keys(obj)
+            .filter(attr => !excludeKeys.includes(attr))
+            .forEach(attr => {
+                if (attr === "class") {
+                    node.classList.add(...obj[attr].split(" ").filter(s => s !== ""));
+                } else {
+                    node[attr] = obj[attr];
+                }
+            });
+        if (obj.contents && typeof obj.contents === "string") {
+            node.innerHTML = obj.contents;
+        } else {
+            obj.contents &&
+                obj.contents.length > 0 &&
+                obj.contents.forEach(el => {
+                    switch (typeof el) {
+                        case "string":
+                            node.innerHTML = el;
+                            break;
+                        case "object":
+                            node.appendChild(objectToHtml(el));
+                            break;
+                    }
+                });
+        }
+
+        if (obj.style_rules) {
+            Object.keys(obj.style_rules).forEach(rule => {
+                node.style[rule] = obj.style_rules[rule];
+            });
+        }
+
+        return node;
+    },
+    renderCycle: function () {
+        this.subRender(this.renderCycleRoot.render(), document.getElementsByTagName("main")[0], {
+            mode: "replace",
+        });
+    },
+    subRender(object, htmlNode, options = { mode: "append" }) {
+        const insert = this.objectToHtml(object);
+        switch (options.mode) {
+            case "append":
+                htmlNode.appendChild(insert);
+                break;
+            case "override":
+                htmlNode.innerHTML = "";
+                htmlNode.appendChild(insert);
+                break;
+            case "insert-before":
+                htmlNode.insertBefore(insert, htmlNode.childNodes[options.insertIndex]);
+                break;
+            case "adjacent":
+                /**
+                 * options.insertLocation must be one of:
+                 *
+                 * afterbegin
+                 * afterend
+                 * beforebegin
+                 * beforeend
+                 */
+                htmlNode.insertAdjacentHTML(options.insertLocation, insert);
+                break;
+            case "replace":
+                htmlNode.parentNode.replaceChild(insert, htmlNode);
+                break;
+            case "remove":
+                htmlNode.remove();
+                break;
+        }
+    },
+};
+
+},{}],4:[function(require,module,exports){
+"use strict";
+
+class WebPage {
+    constructor(args) {
+        Object.assign(this, args);
+    }
+}
+
+module.exports = WebPage;
+},{}],5:[function(require,module,exports){
+"use strict";
+
+// const { images_url } = require("../../../constants");
+const WebPage = require("../../lib/web-page");
+
+
+class StoryLogicApp extends WebPage {
+    render() {
+        return {
+            tag: "div",
+            id: "story-logic-app",
+            contents: [
+                { tag: "strong", contents: "yup" }
+            ],
+        };
+    }
+}
+
+module.exports = StoryLogicApp;
+
+},{"../../lib/web-page":4}],6:[function(require,module,exports){
+"use strict";
+const runPage = require("../../run-page");
+const StoryLogicApp = require("./story-logic-app");
+runPage(StoryLogicApp);
+
+},{"../../run-page":7,"./story-logic-app":5}],7:[function(require,module,exports){
+"use strict";
+
+const objectHtmlRenderer = require("object-to-html-renderer")
+const Template = require("./template/template");
+
+module.exports = function runPage(PageComponent) {
+    const template = new Template({ page: new PageComponent() });
+    objectHtmlRenderer.setRenderCycleRoot(template);
+    objectHtmlRenderer.renderCycle();
+};
+
+},{"./template/template":9,"object-to-html-renderer":3}],8:[function(require,module,exports){
+"use strict";
+
+const { images_url } = require("../../../constants");
+
+const NAV_MENU_ITEMS = [
+    { url: "/games/", text: "Jeux" },
+    {
+        url: "/education/",
+        text: "Pédagogie",
+        // submenu: [
+        //     { url: "/gamedev", text: "Création de jeux vidéo" },
+        // ]
+    },
+    { url: "/software-development/", text: "Software" }
+];
+
+class NavBar {
+    constructor() {
+        this.initEventHandlers();
+    }
+
+    handleBurgerClick() {
+        document.getElementById("nav-menu-list").classList.toggle("responsive-show");
+    }
+
+    initEventHandlers() {
+        window.addEventListener("click", event => {
+            if (
+                event.target.id !== "nav-menu-list" &&
+                !event.target.classList.contains("burger") &&
+                !event.target.parentNode.classList.contains("burger")
+            ) {
+                document.getElementById("nav-menu-list").classList.remove("responsive-show");
+            }
+        });
+    }
+
+    renderHome() {
+        return {
+            tag: "div",
+            class: "home",
+            contents: [
+                {
+                    tag: "a",
+                    href: "/",
+                    contents: [
+                        {
+                            tag: "img",
+                            alt: "Logo Kuadrado",
+                            src: `${images_url}logo_kuadrado.svg`,
+                        },
+                        {
+                            tag: "img",
+                            alt: "Kuadrado Software",
+                            class: "logo-text",
+                            src: `${images_url}logo_kuadrado_txt.svg`,
+                        },
+                    ],
+                },
+            ],
+        };
+    }
+
+    renderMenu(menuItemsArray, isSubmenu = false, parentUrl = "") {
+        return {
+            tag: "ul",
+            id: "nav-menu-list",
+            class: isSubmenu ? "submenu" : "",
+            contents: menuItemsArray.map(item => {
+                const { url, text, submenu } = item;
+                const href = `${parentUrl}${url}`;
+                return {
+                    tag: "li",
+                    class: !isSubmenu && window.location.pathname === href ? "active" : "",
+                    contents: [
+                        {
+                            tag: "a",
+                            href,
+                            contents: text,
+                        },
+                    ].concat(submenu ? [this.renderMenu(submenu, true, url)] : []),
+                };
+            }),
+        };
+    }
+
+    renderResponsiveBurger() {
+        return {
+            tag: "div",
+            class: "burger",
+            onclick: this.handleBurgerClick.bind(this),
+            contents: [{ tag: "span", contents: "···" }],
+        };
+    }
+
+    render() {
+        return {
+            tag: "nav",
+            contents: [
+                this.renderHome(),
+                this.renderResponsiveBurger(),
+                this.renderMenu(NAV_MENU_ITEMS),
+            ],
+        };
+    }
+}
+
+module.exports = NavBar;
+
+},{"../../../constants":2}],9:[function(require,module,exports){
+"use strict";
+
+const { in_construction } = require("../../config");
+const { images_url } = require("../../constants");
+const NavBar = require("./components/navbar");
+
+class Template {
+    constructor(props) {
+        this.props = props;
+    }
+    render() {
+        return {
+            tag: "main",
+            contents: [
+                {
+                    tag: "header",
+                    contents: [new NavBar().render()],
+                },
+                in_construction && {
+                    tag: "section",
+                    class: "warning-banner",
+                    contents: [
+                        {
+                            tag: "strong",
+                            class: "page-contents-center",
+                            contents: "Site en construction ...",
+                        },
+                    ],
+                },
+                {
+                    tag: "section",
+                    id: "page-container",
+                    contents: [this.props.page.render()],
+                },
+                {
+                    tag: "footer",
+                    contents: [
+                        {
+                            tag: "div",
+                            class: "logo",
+                            contents: [
+                                {
+                                    tag: "img",
+                                    alt: `logo Kuadrado`,
+                                    src: `${images_url}logo_kuadrado.svg`,
+                                },
+                                {
+                                    tag: "img",
+                                    class: "text-logo",
+                                    alt: "Kuadrado Software",
+                                    src: `${images_url}logo_kuadrado_txt.svg`,
+                                },
+                            ],
+                        },
+                        {
+                            tag: "span",
+                            contents: "32 rue Simon Vialet, 07240 Vernoux en Vivarais. Ardèche, France",
+                        },
+                        {
+                            tag: "div",
+                            contents: [
+                                { tag: "strong", contents: "<blue>Contact : </blue>" },
+                                {
+                                    tag: "a",
+                                    href: "mailto:contact@kuadrado-software.fr",
+                                    contents: "contact@kuadrado-software.fr",
+                                },
+                            ],
+                        },
+                        {
+                            tag: "div",
+                            class: "social",
+                            contents: [
+                                {
+                                    tag: "strong",
+                                    contents: "<blue>Sur les réseaux : </blue>",
+                                },
+                                {
+                                    tag: "a",
+                                    href: "https://www.linkedin.com/company/kuadrado-software",
+                                    target: "_blank",
+                                    contents: "in",
+                                    title: "Linkedin",
+                                },
+                                {
+                                    tag: "a",
+                                    href: "https://twitter.com/KuadradoSoft",
+                                    target: "_blank",
+                                    contents: "t",
+                                    title: "Twitter",
+                                    style_rules: { fontFamily: "serif" },
+                                },
+                            ],
+                        },
+                        {
+                            tag: "span",
+                            contents: `Copyright © ${new Date()
+                                .getFullYear()} Kuadrado Software | 
+                                Toutes les images du site ont été réalisées par mes soins et peuvent être réutilisées pour un usage personnel.`,
+                        },
+                    ],
+                },
+            ],
+        };
+    }
+}
+
+module.exports = Template;
+
+},{"../../config":1,"../../constants":2,"./components/navbar":8}]},{},[6]);
diff --git a/public/style/pages/story-logic-app/story-logic-app.css b/public/style/pages/story-logic-app/story-logic-app.css
new file mode 100644
index 0000000..23d770b
--- /dev/null
+++ b/public/style/pages/story-logic-app/story-logic-app.css
@@ -0,0 +1,3 @@
+
+
+/*# sourceMappingURL=story-logic-app.css.map */
diff --git a/public/style/style.css b/public/style/style.css
index abc4eae..f50842c 100644
--- a/public/style/style.css
+++ b/public/style/style.css
@@ -854,7 +854,7 @@ main #page-container #education-page .edu-themes .edu-theme h3 {
   color: #00ff00;
   grid-row: 1;
   margin: 0;
-  padding: 0 10px;
+  padding: 10px;
   display: flex;
   align-items: center;
   border-width: 0 0 0 1px;
diff --git a/src/pages/education/education.js b/src/pages/education/education.js
index 53c9ac3..8fe9161 100644
--- a/src/pages/education/education.js
+++ b/src/pages/education/education.js
@@ -25,7 +25,7 @@ const EDU_THEMES = [
         // pageUrl: "2d",
     },
     {
-        title: "Maths et physiques",
+        title: "Maths et physique",
         description: "Abordez les notions fondamentales de façon décontractée pour le plaisir de comprendre.",
         image: "learning_theme_math.png",
         // pageUrl: "math",
@@ -41,6 +41,13 @@ const EDU_THEMES = [
         description: "Perdu avec votre ordinateur ou votre smartphone, les logiciels, internet ? Je vous aide pas à pas à comprendre les fondamentaux et à utiliser sereinement la technologie.",
         image: "learning_theme_pc.png",
         // pageUrl: "popularization"
+    },
+    {
+        title: "Stage GNU/Linux",
+        description: `<b>Passez le cap du libre ! </b><br/>
+        Stage de 4 séances pour installer Linux, faire ses premiers pas avec les logiciels libres et acquérir une autonomie suffisante pour une utilisation basique.
+        `,
+        image: "learning_theme_linux.png"
     }
 ];
 
@@ -128,7 +135,7 @@ class EducationPage extends WebPage {
                                             tag: "p",
                                             class: "info-body",
                                             contents: `Les ateliers sont accessibles aux adultes comme aux enfants, plutôt à partir de 12 ans.<br/>
-                                            Les séances ont lieu en groupes mixtes.
+                                            Les séances ont lieu en groupes mixtes. Capacité limitée à 5 personnes.
                                             `
                                         }
                                     ]
@@ -211,7 +218,7 @@ class EducationPage extends WebPage {
                                                     tag: "li",
                                                     contents: [
                                                         { tag: "span", contents: "Inscription au mois" },
-                                                        { tag: "span", contents: "50€" },
+                                                        { tag: "span", contents: "50€, accès à toutes les plages horaires." },
                                                     ]
                                                 },
                                                 {
@@ -227,6 +234,13 @@ class EducationPage extends WebPage {
                                                         { tag: "span", contents: "Cours particuliers" },
                                                         { tag: "span", contents: "30€/h, sur place ou en visio. Horaires à définir." },
                                                     ]
+                                                },
+                                                {
+                                                    tag: "li",
+                                                    contents: [
+                                                        { tag: "span", contents: "Stage 4 séances de 2h" },
+                                                        { tag: "span", contents: "40€ par personne, horaires et dates à définir selon la demande." },
+                                                    ]
                                                 }
                                             ]
                                         }
diff --git a/src/pages/education/education.scss b/src/pages/education/education.scss
index c18b3b3..d284dfc 100644
--- a/src/pages/education/education.scss
+++ b/src/pages/education/education.scss
@@ -54,7 +54,7 @@
                 color: $green;
                 grid-row: 1;
                 margin: 0;
-                padding: 0 10px;
+                padding: 10px;
                 display: flex;
                 align-items: center;
                 border-width: 0 0 0 1px;
diff --git a/src/pages/story-logic-app/index.js b/src/pages/story-logic-app/index.js
new file mode 100644
index 0000000..8873a8a
--- /dev/null
+++ b/src/pages/story-logic-app/index.js
@@ -0,0 +1,4 @@
+"use strict";
+const runPage = require("../../run-page");
+const StoryLogicApp = require("./story-logic-app");
+runPage(StoryLogicApp);
diff --git a/src/pages/story-logic-app/meta.json b/src/pages/story-logic-app/meta.json
new file mode 100644
index 0000000..cfbb965
--- /dev/null
+++ b/src/pages/story-logic-app/meta.json
@@ -0,0 +1,20 @@
+{
+    "title": "Kuadrado Software | Story Logic",
+    "description": "appli pour faire des jeux old school",
+    "image": "https://kuadrado-software.fr/assets/images/brain.png",
+    "open_graph": {
+        "title": "Kuadrado Software | Story Logic",
+        "description": "appli pour faire des jeux old school"
+    },
+    "json_ld": {
+        "@context": "https://schema.org",
+        "type": "WebPage",
+        "description": "appli pour faire des jeux old school",
+        "image": [
+            "https://kuadrado-software.fr/assets/images/brain.svg"
+        ],
+        "keywords": "",
+        "name": "Kuadrado Software - Story Logic",
+        "url": "https://kuadrado-software.fr/story-logic-app/"
+    }
+}
\ No newline at end of file
diff --git a/src/pages/story-logic-app/story-logic-app.js b/src/pages/story-logic-app/story-logic-app.js
new file mode 100644
index 0000000..e2c2c92
--- /dev/null
+++ b/src/pages/story-logic-app/story-logic-app.js
@@ -0,0 +1,19 @@
+"use strict";
+
+// const { images_url } = require("../../../constants");
+const WebPage = require("../../lib/web-page");
+
+
+class StoryLogicApp extends WebPage {
+    render() {
+        return {
+            tag: "div",
+            id: "story-logic-app",
+            contents: [
+                { tag: "strong", contents: "yup" }
+            ],
+        };
+    }
+}
+
+module.exports = StoryLogicApp;
diff --git a/src/pages/story-logic-app/story-logic-app.scss b/src/pages/story-logic-app/story-logic-app.scss
new file mode 100644
index 0000000..e69de29
-- 
GitLab