diff --git a/8/ecolyo.820137a1234dc80d6526.js b/8/ecolyo.441aa495831667cae2aa.js
similarity index 99%
rename from 8/ecolyo.820137a1234dc80d6526.js
rename to 8/ecolyo.441aa495831667cae2aa.js
index 445e4932d24b28c9917c2b7ee18ad1560de21b77..4b05f3111affaa58728a78cf5ea282f5cc96db21 100644
--- a/8/ecolyo.820137a1234dc80d6526.js
+++ b/8/ecolyo.441aa495831667cae2aa.js
@@ -595,6 +595,8 @@ var _I18n = __webpack_require__("buk/");
 
 __webpack_require__("bcWo");
 
+var _environment = _interopRequireDefault(__webpack_require__("X6DI"));
+
 (function () {
   var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;
   enterModule && enterModule(module);
@@ -608,6 +610,8 @@ var MatomoOptOut = function MatomoOptOut() {
   var _useI18n = (0, _I18n.useI18n)(),
       t = _useI18n.t;
 
+  var isDev = new _environment.default().isDev();
+  var baseUrl = isDev ? 'http://localhost:9800' : 'https://statweb.grandlyon.com';
   return /*#__PURE__*/_react.default.createElement("div", {
     className: "matomo-opt-out-container"
   }, /*#__PURE__*/_react.default.createElement("div", {
@@ -618,7 +622,7 @@ var MatomoOptOut = function MatomoOptOut() {
     style: {
       height: '430px'
     },
-    src: "http://localhost:9800/index.php?module=CoreAdminHome&action=optOut&language=fr&backgroundColor=121212&fontColor=e0e0e0&fontSize=&fontFamily=Lato"
+    src: "".concat(baseUrl, "/index.php?module=CoreAdminHome&action=optOut&language=fr&backgroundColor=121212&fontColor=e0e0e0&fontSize=&fontFamily=Lato")
   })));
 };
 
diff --git a/app/ecolyo.9cb6e9ee88c6fd608840.js b/app/ecolyo.fbbf1cc016e5765032d2.js
similarity index 99%
rename from app/ecolyo.9cb6e9ee88c6fd608840.js
rename to app/ecolyo.fbbf1cc016e5765032d2.js
index a304480b200cfe2a1b48ea2b32977e022591d6e2..d529818d90953b635039a24e6a9ad21cfc96a853 100644
--- a/app/ecolyo.9cb6e9ee88c6fd608840.js
+++ b/app/ecolyo.fbbf1cc016e5765032d2.js
@@ -64,7 +64,7 @@
 /******/
 /******/ 	// script path function
 /******/ 	function jsonpScriptSrc(chunkId) {
-/******/ 		return __webpack_require__.p + "" + ({}[chunkId]||chunkId) + "/ecolyo." + {"2":"93fc8a2ec6a748d89720","3":"a5046ce366de720cc2d2","4":"a5e19d9fad50251a6380","5":"a1b10ba94792ed59bca1","6":"48f6014169152fa21db1","7":"073d14598aea707536af","8":"820137a1234dc80d6526","9":"5b59416269de96b86a11","10":"fb88c15ad2d45fb10fc5"}[chunkId] + ".js"
+/******/ 		return __webpack_require__.p + "" + ({}[chunkId]||chunkId) + "/ecolyo." + {"2":"93fc8a2ec6a748d89720","3":"a5046ce366de720cc2d2","4":"a5e19d9fad50251a6380","5":"a1b10ba94792ed59bca1","6":"48f6014169152fa21db1","7":"073d14598aea707536af","8":"441aa495831667cae2aa","9":"5b59416269de96b86a11","10":"fb88c15ad2d45fb10fc5"}[chunkId] + ".js"
 /******/ 	}
 /******/
 /******/ 	// The require function
@@ -701,7 +701,7 @@ var _react = _interopRequireDefault(__webpack_require__("q1tI"));
 
 var _reactDom = __webpack_require__("i8i4");
 
-var _cozyClient = __webpack_require__("SH7X");
+var _cozyClient = _interopRequireWildcard(__webpack_require__("SH7X"));
 
 var _reactRedux = __webpack_require__("/MKj");
 
@@ -713,45 +713,82 @@ var _oauth = __webpack_require__("sDS3");
 
 var _lodash = __webpack_require__("LvDl");
 
-var _client = __webpack_require__("1L0a");
+var _manifest = _interopRequireDefault(__webpack_require__("pZg0"));
 
-var _bar = __webpack_require__("WL0o");
+var _doctypes = _interopRequireDefault(__webpack_require__("D2hQ"));
+
+var _history = __webpack_require__("LhCv");
+
+var _reactRouterDom = __webpack_require__("55Ip");
+
+var _matomoTracker = _interopRequireDefault(__webpack_require__("vMBp"));
 
 (function () {
   var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;
   enterModule && enterModule(module);
 })();
 
+function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
+
+function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
+
 var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) {
   return a;
 };
 
 var setupApp = (0, _lodash.memoize)(function () {
-  var root = document.querySelector('[role=application]');
-
-  var _getValues = (0, _bar.getValues)(root.dataset),
-      lang = _getValues.lang;
+  var history = (0, _history.createBrowserHistory)(); // eslint-disable-next-line @typescript-eslint/no-explicit-any
 
-  var polyglot = (0, _I18n.initTranslation)(lang, function (lang) {
+  var root = document.querySelector('[role=application]');
+  var data = JSON.parse(root.dataset.cozy);
+  var protocol = window.location.protocol;
+  var cozyUrl = "".concat(protocol, "//").concat(data.domain);
+  var locale = 'fr';
+  var polyglot = (0, _I18n.initTranslation)(locale, function (lang) {
     return __webpack_require__("/KVF")("./".concat(lang));
   });
-  var client = (0, _client.getClient)();
+  var client = new _cozyClient.default({
+    uri: cozyUrl,
+    token: data.token,
+    appMetadata: {
+      slug: _manifest.default.name,
+      version: _manifest.default.version
+    },
+    schema: _doctypes.default
+  });
   var persistedState = {};
   var store = (0, _store.default)(client, persistedState);
-  /** I don't know why I need to for this... But if I don't it seems that
-   * we have a race between configureStore and initBar resulting in
-   * an error from cozy-client "store is already defined"
-   */
+  cozy.bar.init({
+    appName: data.app.name,
+    appEditor: data.app.editor,
+    cozyClient: client,
+    iconPath: data.app.icon,
+    lang: data.locale,
+    replaceTitleOnMobile: false,
+    appSlug: data.app.slug,
+    appNamePrefix: data.app.prefix
+  });
+  var tracker;
+
+  if (window.Piwik) {
+    Piwik.getTracker();
+    tracker = new _matomoTracker.default({
+      cozyUrl: cozyUrl,
+      url: "https://statweb.grandlyon.com/",
+      siteId: 117,
+      history: history,
+      phpFilename: 'matomo.php'
+    });
+  }
 
-  setTimeout(function () {
-    (0, _bar.initBar)(client);
-  }, 0);
   return {
     root: root,
     store: store,
     client: client,
-    lang: lang,
-    polyglot: polyglot
+    locale: locale,
+    polyglot: polyglot,
+    history: history,
+    tracker: tracker
   };
 });
 
@@ -760,8 +797,10 @@ var init = function init() {
       root = _setupApp.root,
       store = _setupApp.store,
       client = _setupApp.client,
-      lang = _setupApp.lang,
-      polyglot = _setupApp.polyglot;
+      locale = _setupApp.locale,
+      polyglot = _setupApp.polyglot,
+      history = _setupApp.history,
+      tracker = _setupApp.tracker;
 
   if ((0, _oauth.handleOAuthResponse)()) return;
 
@@ -772,9 +811,11 @@ var init = function init() {
   }, /*#__PURE__*/_react.default.createElement(_cozyClient.CozyProvider, {
     client: client
   }, /*#__PURE__*/_react.default.createElement(_I18n.I18n, {
-    lang: lang,
+    lang: locale,
     polyglot: polyglot
-  }, /*#__PURE__*/_react.default.createElement(App, null)))), root);
+  }, /*#__PURE__*/_react.default.createElement(_reactRouterDom.HashRouter, history, /*#__PURE__*/_react.default.createElement(App, {
+    tracker: tracker
+  }))))), root);
 }; // initial rendering of the application
 
 
@@ -2517,78 +2558,6 @@ var result = _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WE
 
 /***/ }),
 
-/***/ "1L0a":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(module) {
-
-var _interopRequireDefault = __webpack_require__("TqRt");
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.getClient = void 0;
-
-var _cozyClient = _interopRequireDefault(__webpack_require__("SH7X"));
-
-var _manifest = _interopRequireDefault(__webpack_require__("pZg0"));
-
-var _doctypes = _interopRequireDefault(__webpack_require__("D2hQ"));
-
-(function () {
-  var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;
-  enterModule && enterModule(module);
-})();
-
-var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) {
-  return a;
-};
-
-/**
- * Returns cozy client instance
- * @returns {object} cozy client instance
- */
-var getClient = function getClient() {
-  // eslint-disable-next-line @typescript-eslint/no-explicit-any
-  var root = document.querySelector('[role=application]');
-  var data = root.dataset;
-  var protocol = window.location.protocol;
-  var cozyUrl = "".concat(protocol, "//").concat(data.cozyDomain);
-  return new _cozyClient.default({
-    uri: cozyUrl,
-    token: data.cozyToken,
-    appMetadata: {
-      slug: _manifest.default.name,
-      version: _manifest.default.version
-    },
-    schema: _doctypes.default
-  });
-};
-
-exports.getClient = getClient;
-;
-
-(function () {
-  var reactHotLoader = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default : undefined;
-
-  if (!reactHotLoader) {
-    return;
-  }
-
-  reactHotLoader.register(getClient, "getClient", "/home/bastien/ecolyo/src/utils/client.ts");
-})();
-
-;
-
-(function () {
-  var leaveModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.leaveModule : undefined;
-  leaveModule && leaveModule(module);
-})();
-/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__("YuTi")(module)))
-
-/***/ }),
-
 /***/ "1RIw":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -21630,8 +21599,6 @@ var _react = _interopRequireWildcard(__webpack_require__("q1tI"));
 
 __webpack_require__("Tg1I");
 
-var _App = __webpack_require__("w0Hc");
-
 var _reactRedux = __webpack_require__("/MKj");
 
 var _global = __webpack_require__("c4IZ");
@@ -21642,6 +21609,8 @@ var _screen = __webpack_require__("41Xj");
 
 var _FeedbackModal = _interopRequireDefault(__webpack_require__("ak4Y"));
 
+var _reactRouterDom = __webpack_require__("55Ip");
+
 (function () {
   var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;
   enterModule && enterModule(module);
@@ -21662,6 +21631,7 @@ var Content = function Content(_ref) {
       _ref$background = _ref.background,
       background = _ref$background === void 0 ? 'inherit' : _ref$background;
   var dispatch = (0, _reactRedux.useDispatch)();
+  var history = (0, _reactRouterDom.useHistory)();
 
   var _useSelector = (0, _reactRedux.useSelector)(function (state) {
     return state.ecolyo.global;
@@ -21684,20 +21654,18 @@ var Content = function Content(_ref) {
    * Handle Desktop scroll
    */
 
-  var handleWindowScroll = function handleWindowScroll() {
+  var handleWindowScroll = (0, _react.useCallback)(function () {
     app && app.scrollTo(0, 0);
     window.scrollTo(0, 0);
-  }; // Set listners for scroll
-
+  }, [app]); // Set listners for scroll
 
   (0, _react.useEffect)(function () {
-    var listner = _App.history.listen(handleWindowScroll);
-
+    var listner = history.listen(handleWindowScroll);
     return function () {
       // remove listner subscription
       listner();
     };
-  }, []);
+  }, [handleWindowScroll, history]);
   (0, _react.useEffect)(function () {
     function handleResize() {
       if (innerWidth <= 768) {
@@ -21729,8 +21697,8 @@ var Content = function Content(_ref) {
   }, children));
 };
 
-__signature__(Content, "useDispatch{dispatch}\nuseSelector{{ screenType }}\nuseSelector{{ isFeedbacksOpen }}\nuseCallback{handleFeedbackModalClose}\nuseEffect{}\nuseEffect{}", function () {
-  return [_reactRedux.useDispatch, _reactRedux.useSelector, _reactRedux.useSelector];
+__signature__(Content, "useDispatch{dispatch}\nuseHistory{history}\nuseSelector{{ screenType }}\nuseSelector{{ isFeedbacksOpen }}\nuseCallback{handleFeedbackModalClose}\nuseCallback{handleWindowScroll}\nuseEffect{}\nuseEffect{}", function () {
+  return [_reactRedux.useDispatch, _reactRouterDom.useHistory, _reactRedux.useSelector, _reactRedux.useSelector];
 });
 
 var _default = Content;
@@ -23117,109 +23085,6 @@ var result = _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WE
 
 /***/ }),
 
-/***/ "WL0o":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(module) {
-
-var _interopRequireDefault = __webpack_require__("TqRt");
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.initBar = exports.getValues = void 0;
-
-var _manifest = _interopRequireDefault(__webpack_require__("pZg0"));
-
-(function () {
-  var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;
-  enterModule && enterModule(module);
-})();
-
-var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) {
-  return a;
-};
-
-var getDataOrDefault = function getDataOrDefault(data, defaultData) {
-  return /^\{\{\..*\}\}$/.test(data) ? defaultData : data;
-}; //NOSONAR
-
-/**
- * default data will allow to display correctly the cozy-bar
- * in the standalone (without cozy-stack connexion)
- */
-
-
-var getValues = function getValues(_ref) {
-  var cozyAppName = _ref.cozyAppName,
-      cozyAppNamePrefix = _ref.cozyAppNamePrefix,
-      cozyIconPath = _ref.cozyIconPath;
-  var defaultValues = {
-    appIconDefault: __webpack_require__("ZAKO"),
-    appNamePrefixDefault: _manifest.default.name_prefix,
-    appNameDefault: _manifest.default.name,
-    appLocaleDefault: 'fr'
-  };
-  return {
-    appName: getDataOrDefault(cozyAppName, defaultValues.appNameDefault),
-    appNamePrefix: getDataOrDefault(cozyAppNamePrefix, defaultValues.appNamePrefixDefault),
-    iconPath: getDataOrDefault(cozyIconPath, defaultValues.appIconDefault),
-    lang: defaultValues.appLocaleDefault
-  };
-};
-/**
- * Cozy bar initialization
- * @param {object} client - cozy client
- */
-
-
-exports.getValues = getValues;
-
-var initBar = function initBar(client) {
-  var root = document.querySelector('[role=application]');
-
-  var _getValues = getValues(root.dataset),
-      appName = _getValues.appName,
-      appNamePrefix = _getValues.appNamePrefix,
-      iconPath = _getValues.iconPath,
-      lang = _getValues.lang;
-
-  cozy.bar.init({
-    appName: appName,
-    appNamePrefix: appNamePrefix,
-    cozyClient: client,
-    iconPath: iconPath,
-    lang: lang,
-    replaceTitleOnMobile: false
-  });
-};
-
-exports.initBar = initBar;
-;
-
-(function () {
-  var reactHotLoader = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default : undefined;
-
-  if (!reactHotLoader) {
-    return;
-  }
-
-  reactHotLoader.register(getDataOrDefault, "getDataOrDefault", "/home/bastien/ecolyo/src/utils/bar.ts");
-  reactHotLoader.register(getValues, "getValues", "/home/bastien/ecolyo/src/utils/bar.ts");
-  reactHotLoader.register(initBar, "initBar", "/home/bastien/ecolyo/src/utils/bar.ts");
-})();
-
-;
-
-(function () {
-  var leaveModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.leaveModule : undefined;
-  leaveModule && leaveModule(module);
-})();
-/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__("YuTi")(module)))
-
-/***/ }),
-
 /***/ "WQDB":
 /***/ (function(module) {
 
@@ -23460,6 +23325,11 @@ var EnvironmentService = /*#__PURE__*/function () {
         return 'https://ecolyo-agent-rec.grandlyon.com';
       }
     }
+  }, {
+    key: "isDev",
+    value: function isDev() {
+      return false;
+    }
   }, {
     key: "__reactstandin__regenerateByEval",
     value: // @ts-ignore
@@ -24457,13 +24327,6 @@ var result = _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WE
 
 /***/ }),
 
-/***/ "ZAKO":
-/***/ (function(module, exports) {
-
-module.exports = "/img/icon.e4891962a18ac2a487b21f0381a5513f.svg";
-
-/***/ }),
-
 /***/ "ZSA5":
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
@@ -38296,6 +38159,180 @@ var result = _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WE
 
 /***/ }),
 
+/***/ "vMBp":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* WEBPACK VAR INJECTION */(function(module) {
+
+var _interopRequireDefault = __webpack_require__("TqRt");
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+
+var _classCallCheck2 = _interopRequireDefault(__webpack_require__("lwsE"));
+
+var _createClass2 = _interopRequireDefault(__webpack_require__("W8MJ"));
+
+var _defineProperty2 = _interopRequireDefault(__webpack_require__("lSNA"));
+
+var _appDataset = __webpack_require__("uVqs");
+
+(function () {
+  var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;
+  enterModule && enterModule(module);
+})();
+
+var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) {
+  return a;
+};
+
+var MatomoTracker = /*#__PURE__*/function () {
+  function MatomoTracker(_ref) {
+    var cozyUrl = _ref.cozyUrl,
+        url = _ref.url,
+        siteId = _ref.siteId,
+        history = _ref.history,
+        _ref$phpFilename = _ref.phpFilename,
+        phpFilename = _ref$phpFilename === void 0 ? 'matomo.php' : _ref$phpFilename;
+    (0, _classCallCheck2.default)(this, MatomoTracker);
+    (0, _defineProperty2.default)(this, "cozyUrl", void 0);
+    (0, _defineProperty2.default)(this, "url", void 0);
+    (0, _defineProperty2.default)(this, "siteId", void 0);
+    (0, _defineProperty2.default)(this, "phpFilename", void 0);
+    (0, _defineProperty2.default)(this, "history", void 0);
+    (0, _defineProperty2.default)(this, "unlistenFromHistory", void 0);
+
+    if (url === undefined || siteId === undefined) {
+      throw new Error('MatomoTracker cannot be initialized! SiteId and url are mandatory.');
+    }
+
+    this.cozyUrl = cozyUrl;
+    this.url = url;
+    this.siteId = siteId;
+    this.phpFilename = phpFilename;
+    this.history = history;
+
+    this.unlistenFromHistory = function () {
+      return null;
+    };
+
+    this.init();
+  }
+
+  (0, _createClass2.default)(MatomoTracker, [{
+    key: "init",
+    value: function init() {
+      if (typeof window !== 'undefined') {
+        window._paq = window._paq || [];
+        MatomoTracker.push(['enableHeartBeatTimer', 30]);
+        MatomoTracker.push(['setSiteId', this.siteId]);
+        MatomoTracker.push(['setReferrerUrl', 'https://ecolyo.com']);
+        MatomoTracker.push(['setTrackerUrl', "".concat(this.url + this.phpFilename)]);
+        MatomoTracker.push(['enableLinkTracking']);
+      }
+
+      return {
+        push: MatomoTracker.push,
+        track: this.track,
+        connectToHistory: this.connectToHistory,
+        disconnectFromHistory: this.disconnectFromHistory
+      };
+    }
+  }, {
+    key: "configure",
+    value: function configure() {
+      var cozyDomain;
+      var userId;
+      var root = document.querySelector('[role=application]');
+
+      if (root && root.dataset) {
+        cozyDomain = (0, _appDataset.readCozyDataFromDOM)('cozyDomain');
+      }
+
+      if (cozyDomain) {
+        userId = cozyDomain;
+        var indexOfPort = cozyDomain.indexOf(':');
+
+        if (indexOfPort >= 0) {
+          userId = userId.substring(0, indexOfPort);
+        }
+      }
+    }
+  }, {
+    key: "connectToHistory",
+    value: function connectToHistory() {
+      var _this = this;
+
+      this.unlistenFromHistory = this.history.listen(function (loc) {
+        _this.track(loc);
+      });
+    }
+  }, {
+    key: "disconnectFromHistory",
+    value: function disconnectFromHistory() {
+      if (this.unlistenFromHistory) {
+        this.unlistenFromHistory();
+        return true;
+      }
+
+      return false;
+    }
+  }, {
+    key: "track",
+    value: function track(loc) {
+      console.log(loc);
+
+      if (typeof window === 'undefined') {
+        return;
+      }
+
+      var currentPath = loc.hash.substring(1);
+      MatomoTracker.push(['setDocumentTitle', currentPath.substring(1)]);
+      MatomoTracker.push(['setCustomUrl', 'https://ecolyo.com' + currentPath]);
+      MatomoTracker.push(['trackPageView']);
+    }
+  }, {
+    key: "__reactstandin__regenerateByEval",
+    value: // @ts-ignore
+    function __reactstandin__regenerateByEval(key, code) {
+      // @ts-ignore
+      this[key] = eval(code);
+    }
+  }], [{
+    key: "push",
+    value: function push(args) {
+      window._paq.push(args);
+    }
+  }]);
+  return MatomoTracker;
+}();
+
+exports.default = MatomoTracker;
+;
+
+(function () {
+  var reactHotLoader = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default : undefined;
+
+  if (!reactHotLoader) {
+    return;
+  }
+
+  reactHotLoader.register(MatomoTracker, "MatomoTracker", "/home/bastien/ecolyo/src/utils/matomoTracker.ts");
+})();
+
+;
+
+(function () {
+  var leaveModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.leaveModule : undefined;
+  leaveModule && leaveModule(module);
+})();
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__("YuTi")(module)))
+
+/***/ }),
+
 /***/ "vOAL":
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
@@ -38351,14 +38388,12 @@ var _interopRequireDefault = __webpack_require__("TqRt");
 Object.defineProperty(exports, "__esModule", {
   value: true
 });
-exports.history = exports.default = exports.App = void 0;
+exports.default = exports.App = void 0;
 
-var _react = _interopRequireDefault(__webpack_require__("q1tI"));
+var _react = _interopRequireWildcard(__webpack_require__("q1tI"));
 
 var _reactRouterDom = __webpack_require__("55Ip");
 
-var _history = __webpack_require__("LhCv");
-
 var _Layout = __webpack_require__("Bh3+");
 
 var _reactRedux = __webpack_require__("/MKj");
@@ -38375,19 +38410,24 @@ var _SplashScreenError = _interopRequireDefault(__webpack_require__("7RpM"));
 
 var _WelcomeModal = _interopRequireDefault(__webpack_require__("TabY"));
 
+var _environment = _interopRequireDefault(__webpack_require__("X6DI"));
+
 (function () {
   var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;
   enterModule && enterModule(module);
 })();
 
+function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
+
+function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
+
 var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) {
   return a;
 };
 
-var history = (0, _history.createBrowserHistory)();
-exports.history = history;
+var App = function App(_ref) {
+  var tracker = _ref.tracker;
 
-var App = function App() {
   var _useSelector = (0, _reactRedux.useSelector)(function (state) {
     return state.ecolyo.profile;
   }),
@@ -38399,6 +38439,20 @@ var App = function App() {
   }),
       termsStatus = _useSelector2.termsStatus;
 
+  var isDev = new _environment.default().isDev();
+  console.log(isDev);
+  (0, _react.useEffect)(function () {
+    if (tracker // && !isDev
+    ) {
+      if (termsStatus.accepted) {
+        tracker.connectToHistory();
+      }
+
+      return function () {
+        tracker.disconnectFromHistory();
+      };
+    }
+  }, [termsStatus.accepted, tracker]);
   return /*#__PURE__*/_react.default.createElement(_reactRouterDom.HashRouter, history, /*#__PURE__*/_react.default.createElement(_Layout.Layout, null, /*#__PURE__*/_react.default.createElement(_SplashRoot.default, {
     splashComponent: _SplashScreen.default,
     splashErrorComponent: _SplashScreenError.default
@@ -38414,7 +38468,7 @@ var App = function App() {
 
 exports.App = App;
 
-__signature__(App, "useSelector{{ onboarding, isProfileEcogestureCompleted }}\nuseSelector{{ termsStatus }}", function () {
+__signature__(App, "useSelector{{ onboarding, isProfileEcogestureCompleted }}\nuseSelector{{ termsStatus }}\nuseEffect{}", function () {
   return [_reactRedux.useSelector, _reactRedux.useSelector];
 });
 
@@ -38430,7 +38484,6 @@ exports.default = _default2;
     return;
   }
 
-  reactHotLoader.register(history, "history", "/home/bastien/ecolyo/src/components/App.tsx");
   reactHotLoader.register(App, "App", "/home/bastien/ecolyo/src/components/App.tsx");
   reactHotLoader.register(_default, "default", "/home/bastien/ecolyo/src/components/App.tsx");
 })();
diff --git a/img/icon.e4891962a18ac2a487b21f0381a5513f.svg b/img/icon.e4891962a18ac2a487b21f0381a5513f.svg
deleted file mode 100644
index 7c0e38096960afb18746a2285ee2533ede3f46ef..0000000000000000000000000000000000000000
--- a/img/icon.e4891962a18ac2a487b21f0381a5513f.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M8.01323 15.059C14.8544 12.3888 14.3227 8.59276 13.9682 2.93081C11.7705 2.8343 9.82099 2.15873 8.01323 1.03278C6.20546 2.15873 4.25592 2.8343 2.05825 2.93081C1.70378 8.59276 1.17209 12.3888 8.01323 15.059Z" fill="#1B1C22"/>
-<path d="M8.01325 0L7.54979 0.288665C5.85495 1.34429 4.05006 1.96586 2.01981 2.05502L1.23259 2.08959L1.18335 2.87604C1.16873 3.10958 1.15353 3.34193 1.13842 3.57294C0.97583 6.05878 0.823332 8.39029 1.50758 10.3994C2.29645 12.7158 4.12651 14.483 7.69452 15.8756L8.01325 16V15.059C1.44034 12.4935 1.67345 8.88869 2.01622 3.58822C2.03021 3.37192 2.04438 3.1528 2.05827 2.93081C4.25595 2.8343 6.20549 2.15873 8.01325 1.03277V0Z" fill="#FFC600"/>
-<path d="M8.01323 0L8.4767 0.288665C10.1715 1.34429 11.9764 1.96586 14.0067 2.05502L14.7939 2.08959L14.8431 2.87604C14.8578 3.10958 14.873 3.34193 14.8881 3.57294C15.0507 6.05878 15.2032 8.39029 14.5189 10.3994C13.73 12.7158 11.9 14.483 8.33197 15.8756L8.01323 16V15.059C14.5862 12.4935 14.353 8.88869 14.0103 3.58822C13.9963 3.37192 13.9821 3.1528 13.9682 2.93081C11.7705 2.8343 9.821 2.15873 8.01323 1.03277V0Z" fill="#DB8300"/>
-<path d="M5.85148 5.51416H6.16248C6.28668 5.51416 6.4058 5.56292 6.49363 5.64973C6.58146 5.73653 6.6308 5.85427 6.6308 5.97703V10.6758H5.38316V5.97703C5.38316 5.85427 5.4325 5.73653 5.52033 5.64973C5.60815 5.56292 5.72727 5.51416 5.85148 5.51416ZM8.01233 7.80214H8.32333C8.44754 7.80214 8.56666 7.85091 8.65448 7.93771C8.74231 8.02452 8.79165 8.14225 8.79165 8.26502V10.6758H7.54401V8.26502C7.54401 8.14225 7.59335 8.02452 7.68118 7.93771C7.76901 7.85091 7.88813 7.80214 8.01233 7.80214ZM10.302 6.91708H10.613C10.7372 6.91708 10.8563 6.96584 10.9441 7.05265C11.032 7.13945 11.0813 7.25719 11.0813 7.37995V10.6758H9.83366V7.37995C9.83366 7.25719 9.883 7.13945 9.97083 7.05265C10.0587 6.96584 10.1778 6.91708 10.302 6.91708Z" fill="#FFC600"/>
-</svg>
diff --git a/index.html b/index.html
index f2980e213e260ccf1979a168193b052bc1b91ca5..de62e6275364e595e2357b87917087f5e42bb72e 100644
--- a/index.html
+++ b/index.html
@@ -1 +1 @@
-<!DOCTYPE html><html lang="{{.Locale}}"><head><meta charset="utf-8"><title>Ecolyo</title><link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32"><link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16"><!-- PWA Manifest --><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#297EF2"><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,user-scalable=0,viewport-fit=cover"><!-- PWA Chrome --><link rel="icon" sizes="192x192" href="/android-chrome-192x192.png"><link rel="icon" sizes="512x512" href="/android-chrome-512x512.png"><!-- PWA iOS --><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="apple-touch-startup-image" href="/apple-touch-icon.png"><meta name="apple-mobile-web-app-title" content="Ecolyo"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><!-- PWA Colors --><meta name="theme-color" content="#343641"><meta name="background-color" content="#121212">{{.ThemeCSS}} {{.CozyBar}}</head><body><div role="application" class="application" data-cozy-token="{{.Token}}" data-cozy-domain="{{.Domain}}" data-cozy-locale="{{.Locale}}" data-cozy-app-name="{{.AppName}}" data-cozy-app-slug="{{.AppSlug}}" data-cozy-app-name-prefix="{{.AppNamePrefix}}" data-cozy-app-editor="{{.AppEditor}}" data-cozy-icon-path="{{.IconPath}}"><script src="vendors/ecolyo.c133f45a3d8ceb7c84a8.js"></script><script src="app/ecolyo.9cb6e9ee88c6fd608840.js"></script></div></body></html>
\ No newline at end of file
+<!DOCTYPE html><html lang="{{.Locale}}"><head><meta charset="utf-8"><title>Ecolyo</title><link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32"><link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16"><!-- PWA Manifest --><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#297EF2"><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,user-scalable=0,viewport-fit=cover"><!-- PWA Chrome --><link rel="icon" sizes="192x192" href="/android-chrome-192x192.png"><link rel="icon" sizes="512x512" href="/android-chrome-512x512.png"><!-- PWA iOS --><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="apple-touch-startup-image" href="/apple-touch-icon.png"><meta name="apple-mobile-web-app-title" content="Ecolyo"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><!-- PWA Colors --><meta name="theme-color" content="#343641"><meta name="background-color" content="#121212">{{.ThemeCSS}} {{.CozyBar}}<script src="//{{.Domain}}/assets/js/piwik.js"></script></head><body><div role="application" class="application" data-cozy="{{.CozyData}}"><script src="vendors/ecolyo.b9c0a2c92e4192fd1e1d.js"></script><script src="app/ecolyo.fbbf1cc016e5765032d2.js"></script></div></body></html>
\ No newline at end of file
diff --git a/services/aggregatorUsageEvents/ecolyo.js b/services/aggregatorUsageEvents/ecolyo.js
index aa313a6c380702ddfcef477154c2473831a94c97..498f5761b33229df067f1ffe72c5d8a557f2e380 100644
--- a/services/aggregatorUsageEvents/ecolyo.js
+++ b/services/aggregatorUsageEvents/ecolyo.js
@@ -94666,6 +94666,10 @@ class EnvironmentService {
     }
   }
 
+  isDev() {
+    return __DEVELOPMENT__;
+  }
+
   // @ts-ignore
   __reactstandin__regenerateByEval(key, code) {
     // @ts-ignore
diff --git a/services/consumptionAlert/ecolyo.js b/services/consumptionAlert/ecolyo.js
index 0e310ac10a21b111afe13b2a5beeb3b24078e3ee..793860c91daa728409a32b7a9684fb2681340ae3 100644
--- a/services/consumptionAlert/ecolyo.js
+++ b/services/consumptionAlert/ecolyo.js
@@ -77043,6 +77043,10 @@ class EnvironmentService {
     }
   }
 
+  isDev() {
+    return __DEVELOPMENT__;
+  }
+
   // @ts-ignore
   __reactstandin__regenerateByEval(key, code) {
     // @ts-ignore
diff --git a/services/fluidsPrices/ecolyo.js b/services/fluidsPrices/ecolyo.js
index 0afc6eb6558760f36889761edece174f496df2ed..aaa4288cd47620595d6e4c6528a62d913bc3b866 100644
--- a/services/fluidsPrices/ecolyo.js
+++ b/services/fluidsPrices/ecolyo.js
@@ -75379,6 +75379,10 @@ class EnvironmentService {
     }
   }
 
+  isDev() {
+    return __DEVELOPMENT__;
+  }
+
   // @ts-ignore
   __reactstandin__regenerateByEval(key, code) {
     // @ts-ignore
diff --git a/services/monthlyReportNotification/ecolyo.js b/services/monthlyReportNotification/ecolyo.js
index 2147d87e87381a693d91543511178d0b357ef9c2..ff73f2e97a694b6ec6d14222282c07812ab59b48 100644
--- a/services/monthlyReportNotification/ecolyo.js
+++ b/services/monthlyReportNotification/ecolyo.js
@@ -77043,6 +77043,10 @@ class EnvironmentService {
     }
   }
 
+  isDev() {
+    return __DEVELOPMENT__;
+  }
+
   // @ts-ignore
   __reactstandin__regenerateByEval(key, code) {
     // @ts-ignore
diff --git a/vendors/ecolyo.c133f45a3d8ceb7c84a8.js b/vendors/ecolyo.b9c0a2c92e4192fd1e1d.js
similarity index 99%
rename from vendors/ecolyo.c133f45a3d8ceb7c84a8.js
rename to vendors/ecolyo.b9c0a2c92e4192fd1e1d.js
index 99118756f49782db7b366fd70016a9df4c699e44..104047c3b5ed045dd9fc383a762efbd94ee24342 100644
--- a/vendors/ecolyo.c133f45a3d8ceb7c84a8.js
+++ b/vendors/ecolyo.b9c0a2c92e4192fd1e1d.js
@@ -315393,6 +315393,104 @@ __webpack_require__.r(__webpack_exports__);
 });
 
 
+/***/ }),
+
+/***/ "uVqs":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* WEBPACK VAR INJECTION */(function(module) {
+
+var _interopRequireDefault = __webpack_require__("TqRt");
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.resetCache = exports.readCozyDataFromDOM = exports.readCozyData = exports.readApplicationDataset = void 0;
+
+var _memoize = _interopRequireDefault(__webpack_require__("44Ds"));
+
+(function () {
+  var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;
+  enterModule && enterModule(module);
+})();
+
+var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) {
+  return a;
+};
+
+var readApplicationDataset = (0, _memoize.default)(function () {
+  var root = document.querySelector('[role=application]');
+  return root && root.dataset;
+});
+exports.readApplicationDataset = readApplicationDataset;
+var readCozyData = (0, _memoize.default)(function () {
+  var dataset = readApplicationDataset();
+
+  if (dataset && dataset.cozy) {
+    return JSON.parse(dataset.cozy);
+  }
+
+  return null;
+});
+/**
+ * Reads an attribute set by the stack from the DOM
+ *
+ * A cozy app must receives on data from the stack, typically on the
+ * [role=application] node. Here, we try first to read from data-cozy
+ * and we fallback on data-[attrName].
+ */
+
+exports.readCozyData = readCozyData;
+var readCozyDataFromDOM = (0, _memoize.default)(function (attrName) {
+  var data = readCozyData();
+
+  if (data && data[attrName] !== undefined) {
+    return data[attrName] === 'true' || data[attrName] === 'false' ? JSON.parse(data[attrName]) : data[attrName];
+  }
+
+  var appDataset = readApplicationDataset();
+
+  if (!appDataset) {
+    return;
+  }
+
+  var attrName2 = "cozy".concat(attrName[0].toUpperCase()).concat(attrName.substring(1));
+  var value = appDataset[attrName2];
+  return value === undefined ? undefined : value === '' || JSON.parse(value);
+});
+exports.readCozyDataFromDOM = readCozyDataFromDOM;
+
+var resetCache = function resetCache() {
+  readCozyDataFromDOM.cache = new _memoize.default.Cache();
+  readCozyData.cache = new _memoize.default.Cache();
+  readApplicationDataset.cache = new _memoize.default.Cache();
+};
+
+exports.resetCache = resetCache;
+;
+
+(function () {
+  var reactHotLoader = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default : undefined;
+
+  if (!reactHotLoader) {
+    return;
+  }
+
+  reactHotLoader.register(readApplicationDataset, "readApplicationDataset", "/home/bastien/ecolyo/node_modules/cozy-ui/transpiled/react/helpers/appDataset.js");
+  reactHotLoader.register(readCozyData, "readCozyData", "/home/bastien/ecolyo/node_modules/cozy-ui/transpiled/react/helpers/appDataset.js");
+  reactHotLoader.register(readCozyDataFromDOM, "readCozyDataFromDOM", "/home/bastien/ecolyo/node_modules/cozy-ui/transpiled/react/helpers/appDataset.js");
+  reactHotLoader.register(resetCache, "resetCache", "/home/bastien/ecolyo/node_modules/cozy-ui/transpiled/react/helpers/appDataset.js");
+})();
+
+;
+
+(function () {
+  var leaveModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.leaveModule : undefined;
+  leaveModule && leaveModule(module);
+})();
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__("YuTi")(module)))
+
 /***/ }),
 
 /***/ "uXMh":