diff --git a/client/README.md b/client/README.md
new file mode 100644
index 0000000..34a4a1d
--- /dev/null
+++ b/client/README.md
@@ -0,0 +1,69 @@
+This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
+
+## Available Scripts
+
+In the project directory, you can run:
+
+### `npm start`
+
+Runs the app in the development mode.<br />
+Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
+
+The page will reload if you make edits.<br />
+You will also see any lint errors in the console.
+
+### `npm test`
+
+Launches the test runner in the interactive watch mode.<br />
+See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
+
+### `npm run build`
+
+Builds the app for production to the `build` folder.<br />
+It correctly bundles React in production mode and optimizes the build for the best performance.
+
+The build is minified and the filenames include the hashes.<br />
+Your app is ready to be deployed!
+
+See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
+
+### `npm run eject`
+
+**Note: this is a one-way operation. Once you `eject`, you can’t go back!**
+
+If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
+
+Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.
+
+You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.
+
+## Learn More
+
+You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
+
+To learn React, check out the [React documentation](https://reactjs.org/).
+
+### Code Splitting
+
+This section has moved here: https://facebook.github.io/create-react-app/docs/code-splitting
+
+### Analyzing the Bundle Size
+
+This section has moved here: https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size
+
+### Making a Progressive Web App
+
+This section has moved here: https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app
+
+### Advanced Configuration
+
+This section has moved here: https://facebook.github.io/create-react-app/docs/advanced-configuration
+
+### Deployment
+
+This section has moved here: https://facebook.github.io/create-react-app/docs/deployment
+
+### `npm run build` fails to minify
+
+This section has moved here: https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify
+# jaas-client
diff --git a/client/package.json b/client/package.json
new file mode 100644
index 0000000..2cc5732
--- /dev/null
+++ b/client/package.json
@@ -0,0 +1,48 @@
+{
+  "name": "jami-web-client",
+  "version": "0.1.0",
+  "private": true,
+  "dependencies": {
+    "@material-ui/core": "^4.10.2",
+    "@material-ui/icons": "^4.9.1",
+    "@material-ui/lab": "^4.0.0-alpha.56",
+    "@testing-library/jest-dom": "^4.2.4",
+    "@testing-library/react": "^9.5.0",
+    "@testing-library/user-event": "^7.2.1",
+    "react": "^16.13.1",
+    "react-dom": "^16.13.1",
+    "react-emoji-render": "^1.2.4",
+    "react-router-dom": "^5.2.0",
+    "react-sound": "^1.2.0",
+    "socket.io-client": "^2.3.0"
+  },
+  "devDependencies": {
+    "@babel/core": "^7.13.14",
+    "@babel/preset-env": "^7.13.12",
+    "@babel/preset-react": "^7.13.13",
+    "babel-loader": "^8.2.2",
+    "css-loader": "^5.2.0",
+    "html-webpack-plugin": "^5.3.1",
+    "style-loader": "^2.0.0",
+    "webpack": "^5.31.0",
+    "webpack-cli": "^4.6.0"
+  },
+  "scripts": {
+    "build": "npx webpack"
+  },
+  "eslintConfig": {
+    "extends": "react-app"
+  },
+  "browserslist": {
+    "production": [
+      ">0.2%",
+      "not dead",
+      "not op_mini all"
+    ],
+    "development": [
+      "last 1 chrome version",
+      "last 1 firefox version",
+      "last 1 safari version"
+    ]
+  }
+}
diff --git a/client/public/Jami-logo-gnu-package_rainbowHD.svg b/client/public/Jami-logo-gnu-package_rainbowHD.svg
new file mode 100644
index 0000000..89d1d04
--- /dev/null
+++ b/client/public/Jami-logo-gnu-package_rainbowHD.svg
@@ -0,0 +1 @@
+<svg id="Calque_1" data-name="Calque 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 407.75 185.09"><defs><style>.cls-1,.cls-26{fill:#000747;}.cls-2{fill:url(#linear-gradient);}.cls-3{fill:url(#linear-gradient-2);}.cls-4{fill:url(#linear-gradient-3);}.cls-5{fill:url(#linear-gradient-4);}.cls-6{fill:url(#linear-gradient-5);}.cls-7{fill:url(#linear-gradient-6);}.cls-8{opacity:0.4;fill:url(#linear-gradient-7);}.cls-18,.cls-21,.cls-24,.cls-8{isolation:isolate;}.cls-9{fill:url(#linear-gradient-8);}.cls-10{fill:url(#linear-gradient-9);}.cls-11{fill:url(#linear-gradient-10);}.cls-12{fill:url(#linear-gradient-11);}.cls-13{fill:url(#linear-gradient-12);}.cls-14{fill:url(#linear-gradient-13);}.cls-15{fill:url(#linear-gradient-14);}.cls-16{fill:url(#linear-gradient-15);}.cls-17{fill:url(#linear-gradient-16);}.cls-18,.cls-24{opacity:0.2;}.cls-18{fill:url(#linear-gradient-17);}.cls-19{fill:url(#linear-gradient-18);}.cls-20{fill:url(#linear-gradient-19);}.cls-21{opacity:0.25;fill:url(#linear-gradient-20);}.cls-22{fill:url(#linear-gradient-21);}.cls-23{fill:url(#linear-gradient-22);}.cls-24{fill:url(#linear-gradient-23);}.cls-25{fill:url(#linear-gradient-24);}.cls-26{fill-rule:evenodd;}.cls-27{fill:#e91e63;}.cls-28{fill:#9c27b0;}.cls-29{fill:#3f51b5;}.cls-30{fill:#28b1ed;}.cls-31{fill:#009688;}.cls-32{fill:#4caf50;}.cls-33{fill:#ffc107;}.cls-34{fill:#ff5722;}</style><linearGradient id="linear-gradient" x1="98.88" y1="-258.85" x2="94.29" y2="-253.49" gradientTransform="matrix(1, 0, 0, -1, -38.89, -151.66)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#2b3b6a"/><stop offset="1" stop-color="#2b3b6a"/></linearGradient><linearGradient id="linear-gradient-2" x1="138.39" y1="-261.17" x2="138.39" y2="-297.97" gradientTransform="matrix(1, 0, 0, -1, -8.09, -147.13)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#2b3b6a"/><stop offset="0.07" stop-color="#2d4576"/><stop offset="0.22" stop-color="#2e5589"/><stop offset="0.36" stop-color="#2b5e97"/><stop offset="0.5" stop-color="#29629c"/><stop offset="0.64" stop-color="#2b5e97"/><stop offset="0.78" stop-color="#2e5589"/><stop offset="0.93" stop-color="#2d4576"/><stop offset="1" stop-color="#2b3b6a"/></linearGradient><linearGradient id="linear-gradient-3" x1="56.55" y1="-300.74" x2="68.49" y2="-279.48" gradientTransform="matrix(1, 0, 0, -1, -8.09, -147.13)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#252b59"/><stop offset="0.09" stop-color="#2b3a69"/><stop offset="0.23" stop-color="#2e4a7c"/><stop offset="0.37" stop-color="#2e5487"/><stop offset="0.5" stop-color="#2d578c"/><stop offset="0.63" stop-color="#2e5487"/><stop offset="0.77" stop-color="#2e4a7c"/><stop offset="0.91" stop-color="#2b3a69"/><stop offset="1" stop-color="#252b59"/></linearGradient><linearGradient id="linear-gradient-4" x1="90.72" y1="-228.55" x2="70.95" y2="-205.5" gradientTransform="matrix(1, 0, 0, -1, -8.09, -147.13)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#181844"/><stop offset="0.03" stop-color="#1e1e4c"/><stop offset="0.14" stop-color="#283261"/><stop offset="0.25" stop-color="#2d4172"/><stop offset="0.36" stop-color="#2e4a7c"/><stop offset="0.5" stop-color="#2e4d7f"/><stop offset="0.62" stop-color="#2d4576"/><stop offset="0.81" stop-color="#273160"/><stop offset="1" stop-color="#181844"/></linearGradient><linearGradient id="linear-gradient-5" x1="129.82" y1="-303.29" x2="114.55" y2="-254.1" xlink:href="#linear-gradient-4"/><linearGradient id="linear-gradient-6" x1="61.49" y1="-261.17" x2="61.49" y2="-297.97" xlink:href="#linear-gradient-2"/><linearGradient id="linear-gradient-7" x1="81.72" y1="-225.03" x2="96.16" y2="-225.03" gradientTransform="matrix(1, 0, 0, -1, -8.09, -147.13)" xlink:href="#linear-gradient"/><linearGradient id="linear-gradient-8" x1="100.78" y1="-240.34" x2="100.78" y2="-205.63" gradientTransform="matrix(1, 0, 0, -1, -8.09, -147.13)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#252b59"/><stop offset="0.5" stop-color="#2d578c"/><stop offset="0.69" stop-color="#2d5588"/><stop offset="0.8" stop-color="#2e4f80"/><stop offset="0.89" stop-color="#2d4474"/><stop offset="0.97" stop-color="#283463"/><stop offset="1" stop-color="#252b59"/></linearGradient><linearGradient id="linear-gradient-9" x1="69.11" y1="-307.72" x2="132.52" y2="-211.87" gradientTransform="matrix(1, 0, 0, -1, -8.09, -147.13)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#2867a2"/><stop offset="0.08" stop-color="#177ebc"/><stop offset="0.17" stop-color="#0e91d1"/><stop offset="0.25" stop-color="#10a2e1"/><stop offset="0.34" stop-color="#18acea"/><stop offset="0.42" stop-color="#24b1ed"/><stop offset="0.5" stop-color="#28b1ed"/><stop offset="0.58" stop-color="#24b1ed"/><stop offset="0.66" stop-color="#18acea"/><stop offset="0.75" stop-color="#10a2e1"/><stop offset="0.83" stop-color="#0e91d1"/><stop offset="0.92" stop-color="#177ebc"/><stop offset="1" stop-color="#2867a2"/></linearGradient><linearGradient id="linear-gradient-10" x1="63.41" y1="-309.65" x2="88.53" y2="-287.16" gradientTransform="matrix(1, 0, 0, -1, -8.09, -147.13)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#2c5d95"/><stop offset="0.08" stop-color="#246eab"/><stop offset="0.18" stop-color="#1b79b9"/><stop offset="0.3" stop-color="#1080c2"/><stop offset="0.5" stop-color="#0e81c5"/><stop offset="0.7" stop-color="#1080c2"/><stop offset="0.82" stop-color="#1b79b9"/><stop offset="0.92" stop-color="#246eab"/><stop offset="1" stop-color="#2c5d95"/></linearGradient><linearGradient id="linear-gradient-11" x1="61.15" y1="-211.2" x2="119.47" y2="-308.39" gradientTransform="matrix(1, 0, 0, -1, -8.09, -147.13)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#2c5d95"/><stop offset="0.02" stop-color="#2a6199"/><stop offset="0.14" stop-color="#1c79b7"/><stop offset="0.26" stop-color="#0a8cca"/><stop offset="0.38" stop-color="#0b97d4"/><stop offset="0.5" stop-color="#0e9ad8"/><stop offset="0.62" stop-color="#0b97d4"/><stop offset="0.74" stop-color="#0a8cca"/><stop offset="0.86" stop-color="#1c79b7"/><stop offset="0.98" stop-color="#2a6199"/><stop offset="1" stop-color="#2c5d95"/></linearGradient><linearGradient id="linear-gradient-12" x1="124.21" y1="-307.82" x2="86.71" y2="-260.59" gradientTransform="matrix(1, 0, 0, -1, -8.09, -147.13)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#2c5d95"/><stop offset="0.03" stop-color="#2a6199"/><stop offset="0.21" stop-color="#1c79b7"/><stop offset="0.38" stop-color="#0a8cca"/><stop offset="0.56" stop-color="#0b97d4"/><stop offset="0.73" stop-color="#0e9ad8"/><stop offset="0.79" stop-color="#0b97d4"/><stop offset="0.86" stop-color="#0a8cca"/><stop offset="0.92" stop-color="#1c79b7"/><stop offset="0.99" stop-color="#2a6199"/><stop offset="1" stop-color="#2c5d95"/></linearGradient><linearGradient id="linear-gradient-13" x1="70.04" y1="-235.01" x2="62.74" y2="-208.73" xlink:href="#linear-gradient-10"/><linearGradient id="linear-gradient-14" x1="152.73" y1="-252.73" x2="38.98" y2="-252.73" gradientTransform="matrix(1, 0, 0, -1, -8.09, -147.13)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#2867a2"/><stop offset="0.01" stop-color="#256ba7"/><stop offset="0.11" stop-color="#0b83c3"/><stop offset="0.21" stop-color="#1797d8"/><stop offset="0.31" stop-color="#25a3e2"/><stop offset="0.41" stop-color="#27abe7"/><stop offset="0.5" stop-color="#2aaeea"/><stop offset="0.59" stop-color="#27abe7"/><stop offset="0.69" stop-color="#25a3e2"/><stop offset="0.79" stop-color="#1797d8"/><stop offset="0.89" stop-color="#0b83c3"/><stop offset="0.99" stop-color="#256ba7"/><stop offset="1" stop-color="#2867a2"/></linearGradient><linearGradient id="linear-gradient-15" x1="120.12" y1="-251.07" x2="152.64" y2="-252.82" gradientTransform="matrix(1, 0, 0, -1, -8.09, -147.13)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#2e5284"/><stop offset="0.01" stop-color="#2e5486"/><stop offset="0.09" stop-color="#29649d"/><stop offset="0.19" stop-color="#236fad"/><stop offset="0.3" stop-color="#1d77b6"/><stop offset="0.5" stop-color="#1c78b9"/><stop offset="0.7" stop-color="#1d77b6"/><stop offset="0.81" stop-color="#236fad"/><stop offset="0.91" stop-color="#29649d"/><stop offset="0.99" stop-color="#2e5486"/><stop offset="1" stop-color="#2e5284"/></linearGradient><linearGradient id="linear-gradient-16" x1="38.89" y1="-251.18" x2="97.55" y2="-251.18" gradientTransform="matrix(1, 0, 0, -1, -8.09, -147.13)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#2867a2"/><stop offset="0.02" stop-color="#256ba7"/><stop offset="0.2" stop-color="#0b83c3"/><stop offset="0.37" stop-color="#1797d8"/><stop offset="0.54" stop-color="#25a3e2"/><stop offset="0.71" stop-color="#27abe7"/><stop offset="0.88" stop-color="#2aaeea"/><stop offset="0.9" stop-color="#27abe7"/><stop offset="0.92" stop-color="#25a3e2"/><stop offset="0.95" stop-color="#1797d8"/><stop offset="0.97" stop-color="#0b83c3"/><stop offset="1" stop-color="#256ba7"/><stop offset="1" stop-color="#2867a2"/></linearGradient><linearGradient id="linear-gradient-17" x1="80.14" y1="-235.95" x2="58.09" y2="-232.85" gradientTransform="matrix(1, 0, 0, -1, -8.09, -147.13)" xlink:href="#linear-gradient"/><linearGradient id="linear-gradient-18" x1="102.57" y1="-254.85" x2="40.26" y2="-246.09" gradientTransform="matrix(1, 0, 0, -1, -8.09, -147.13)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#2867a2"/><stop offset="0.04" stop-color="#2174b1"/><stop offset="0.12" stop-color="#0b86c4"/><stop offset="0.21" stop-color="#0a94d2"/><stop offset="0.32" stop-color="#0c9bdb"/><stop offset="0.5" stop-color="#109ede"/><stop offset="0.68" stop-color="#0c9bdb"/><stop offset="0.79" stop-color="#0a94d2"/><stop offset="0.88" stop-color="#0b86c4"/><stop offset="0.96" stop-color="#2174b1"/><stop offset="1" stop-color="#2867a2"/></linearGradient><linearGradient id="linear-gradient-19" x1="131.42" y1="-211.65" x2="101.79" y2="-262.68" gradientTransform="matrix(1, 0, 0, -1, -8.09, -147.13)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#2867a2"/><stop offset="0.12" stop-color="#177ebc"/><stop offset="0.25" stop-color="#0e91d1"/><stop offset="0.38" stop-color="#10a2e1"/><stop offset="0.51" stop-color="#18acea"/><stop offset="0.63" stop-color="#24b1ed"/><stop offset="0.75" stop-color="#28b1ed"/><stop offset="0.79" stop-color="#24b1ed"/><stop offset="0.83" stop-color="#18acea"/><stop offset="0.87" stop-color="#10a2e1"/><stop offset="0.92" stop-color="#0e91d1"/><stop offset="0.96" stop-color="#177ebc"/><stop offset="1" stop-color="#2867a2"/></linearGradient><linearGradient id="linear-gradient-20" x1="135.19" y1="-237.35" x2="124.4" y2="-257.59" gradientTransform="matrix(1, 0, 0, -1, -8.09, -147.13)" xlink:href="#linear-gradient"/><linearGradient id="linear-gradient-21" x1="130.49" y1="-212.8" x2="100.77" y2="-268.58" xlink:href="#linear-gradient-18"/><linearGradient id="linear-gradient-22" x1="132.79" y1="-214.06" x2="102.81" y2="-270.32" xlink:href="#linear-gradient-18"/><linearGradient id="linear-gradient-23" x1="84.39" y1="-278.03" x2="92.08" y2="-298.86" gradientTransform="matrix(1, 0, 0, -1, -8.09, -147.13)" xlink:href="#linear-gradient"/><linearGradient id="linear-gradient-24" x1="98.99" y1="-256.6" x2="108.04" y2="-312.96" gradientTransform="matrix(1, 0, 0, -1, -8.09, -147.13)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#2e5284"/><stop offset="0.02" stop-color="#2c5c92"/><stop offset="0.09" stop-color="#2075b1"/><stop offset="0.16" stop-color="#0b86c4"/><stop offset="0.24" stop-color="#0a94d2"/><stop offset="0.34" stop-color="#0e9cda"/><stop offset="0.5" stop-color="#109ede"/><stop offset="0.67" stop-color="#0c9bdb"/><stop offset="0.78" stop-color="#0a94d2"/><stop offset="0.86" stop-color="#0b86c4"/><stop offset="0.94" stop-color="#2174b1"/><stop offset="1" stop-color="#2c5d95"/></linearGradient></defs><title>Jami-logo-gnu-package_rainbowHD</title><path class="cls-1" d="M218.6,157.7l-1.2-2.6h-5.6l-1.2,2.6H209l4.9-10.7h1.4l5,10.7Zm-6.3-3.9h4.5l-2.3-5.1Z" transform="translate(-30.8 -4.52)"/><path class="cls-1" d="M237.6,152v5a7.76,7.76,0,0,1-1.8.5,15,15,0,0,1-2.2.2,5.43,5.43,0,0,1-2.9-.7,5,5,0,0,1-1.9-1.9,7.31,7.31,0,0,1,0-5.8,5,5,0,0,1,1.9-1.9,6.44,6.44,0,0,1,2.8-.7,7.8,7.8,0,0,1,2.2.3,3.67,3.67,0,0,1,1.7,1l-.6,1.2a5.07,5.07,0,0,0-1.6-.9,4.67,4.67,0,0,0-1.7-.3,3.76,3.76,0,0,0-2.8,1.1,5.7,5.7,0,0,0,.1,6.3,3.5,3.5,0,0,0,2.9,1.1,6.37,6.37,0,0,0,2.4-.4v-3h-2.6V152Z" transform="translate(-30.8 -4.52)"/><path class="cls-1" d="M249,147h1.5v10.7h-1.2l-6.4-8.1v8.1h-1.5V147h1.2l6.4,8.1Z" transform="translate(-30.8 -4.52)"/><path class="cls-1" d="M255.6,156.7a4.13,4.13,0,0,1-1.1-3.3V147h1.6v6.5a3,3,0,0,0,5.1,2.2,3.07,3.07,0,0,0,.7-2.2V147h1.6v6.4a4.86,4.86,0,0,1-1.1,3.3,5,5,0,0,1-3.4,1.1C257.4,157.8,256.3,157.5,255.6,156.7Z" transform="translate(-30.8 -4.52)"/><path class="cls-1" d="M278.7,150.5a3.33,3.33,0,0,1,1.2,1.4,4.64,4.64,0,0,1,.4,2.1,4,4,0,0,1-.4,2,5.26,5.26,0,0,1-1.2,1.4,2.73,2.73,0,0,1-1.8.5,2.93,2.93,0,0,1-1.6-.4,2.13,2.13,0,0,1-1-1.1V161h-1.6v-8.7a13.42,13.42,0,0,0-.1-2.1h1.5l.2,1.4a2.34,2.34,0,0,1,1-1.2,3.06,3.06,0,0,1,1.7-.4A2.62,2.62,0,0,1,278.7,150.5Zm-.5,5.4a3.63,3.63,0,0,0,0-4,1.94,1.94,0,0,0-1.7-.7,2.06,2.06,0,0,0-1.7.7,3.63,3.63,0,0,0,0,4,1.94,1.94,0,0,0,1.7.7A2.06,2.06,0,0,0,278.2,155.9Z" transform="translate(-30.8 -4.52)"/><path class="cls-1" d="M290.8,150.2v7.6h-1.6v-1.3a2,2,0,0,1-1,1,4.19,4.19,0,0,1-1.6.4,3.45,3.45,0,0,1-1.8-.5,3.33,3.33,0,0,1-1.2-1.4,4.48,4.48,0,0,1-.4-2,4.64,4.64,0,0,1,.4-2.1,3.33,3.33,0,0,1,1.2-1.4,3.45,3.45,0,0,1,1.8-.5,2.93,2.93,0,0,1,1.6.4,2.41,2.41,0,0,1,1,1v-1.2Zm-2.2,5.7a3.63,3.63,0,0,0,0-4,1.94,1.94,0,0,0-1.7-.7,2.06,2.06,0,0,0-1.7.7,3.17,3.17,0,0,0-.6,2,3,3,0,0,0,.6,2,2.06,2.06,0,0,0,1.7.7A1.94,1.94,0,0,0,288.6,155.9Z" transform="translate(-30.8 -4.52)"/><path class="cls-1" d="M295.8,157.3a3,3,0,0,1-1.3-1.4,4.55,4.55,0,0,1-.5-2,4.65,4.65,0,0,1,.5-2.1,3.16,3.16,0,0,1,1.4-1.4,4.65,4.65,0,0,1,2.1-.5,4.15,4.15,0,0,1,1.6.3,3.46,3.46,0,0,1,1.2.7l-.5,1.1a3.33,3.33,0,0,0-2.2-.8,2.14,2.14,0,0,0-1.8.7,3.63,3.63,0,0,0,0,4,2.14,2.14,0,0,0,1.8.7,3.72,3.72,0,0,0,2.2-.8l.5,1.1a4,4,0,0,1-1.3.7,4.53,4.53,0,0,1-1.6.3A4.69,4.69,0,0,1,295.8,157.3Z" transform="translate(-30.8 -4.52)"/><path class="cls-1" d="M310.9,157.7h-2l-3.8-3.6v3.6h-1.6v-11h1.6v6.9l3.5-3.4h2l-3.8,3.6Z" transform="translate(-30.8 -4.52)"/><path class="cls-1" d="M320.3,150.2v7.6h-1.6v-1.3a2,2,0,0,1-1,1,4.19,4.19,0,0,1-1.6.4,3.45,3.45,0,0,1-1.8-.5,3.33,3.33,0,0,1-1.2-1.4,4.48,4.48,0,0,1-.4-2,4.64,4.64,0,0,1,.4-2.1,3.33,3.33,0,0,1,1.2-1.4,3.45,3.45,0,0,1,1.8-.5,2.93,2.93,0,0,1,1.6.4,2.41,2.41,0,0,1,1,1v-1.2Zm-2.1,5.7a3.63,3.63,0,0,0,0-4,1.94,1.94,0,0,0-1.7-.7,2.06,2.06,0,0,0-1.7.7,3.17,3.17,0,0,0-.6,2,3,3,0,0,0,.6,2,2.06,2.06,0,0,0,1.7.7A1.94,1.94,0,0,0,318.2,155.9Z" transform="translate(-30.8 -4.52)"/><path class="cls-1" d="M331.3,150.2v7.4a3.57,3.57,0,0,1-.9,2.6,3.93,3.93,0,0,1-2.8.9,5.33,5.33,0,0,1-3.1-.8l.3-1.2c.5.2,1,.4,1.4.6a6.75,6.75,0,0,0,1.4.2,1.92,1.92,0,0,0,2.2-2.2v-1.6a2.41,2.41,0,0,1-1,1,2.93,2.93,0,0,1-1.6.4,3.45,3.45,0,0,1-1.8-.5,3,3,0,0,1-1.2-1.3,5.2,5.2,0,0,1,0-4,3,3,0,0,1,1.2-1.3,3.45,3.45,0,0,1,1.8-.5,2.93,2.93,0,0,1,1.6.4,2,2,0,0,1,1,1v-1.2h1.5Zm-2.2,5.4a3.31,3.31,0,0,0,0-3.8,2.41,2.41,0,0,0-3.4,0,3.31,3.31,0,0,0,0,3.8,2.41,2.41,0,0,0,3.4,0Z" transform="translate(-30.8 -4.52)"/><path class="cls-1" d="M341.7,154H336c.1,1.8.9,2.7,2.5,2.7a4,4,0,0,0,2.5-.9l.5,1.1a5.39,5.39,0,0,1-1.3.7,4.53,4.53,0,0,1-1.6.3,4.19,4.19,0,0,1-3-1,3.5,3.5,0,0,1-1.1-2.9,4.65,4.65,0,0,1,.5-2.1,3.53,3.53,0,0,1,1.3-1.4,4.23,4.23,0,0,1,2-.5,3,3,0,0,1,2.5,1,4,4,0,0,1,.9,2.7v.3Zm-4.9-2.4a2.13,2.13,0,0,0-.7,1.5h4.2a3.39,3.39,0,0,0-.6-1.5,2,2,0,0,0-1.4-.5A2.46,2.46,0,0,0,336.8,151.6Z" transform="translate(-30.8 -4.52)"/><polygon class="cls-2" points="53.9 103.28 61 102.98 57.5 109.68 53.9 103.28"/><path class="cls-3" d="M115.4,109.4c26.1,4.2,29.8,10.7,29.8,10.7v1.2a2.54,2.54,0,0,1-.2.7c-.1.3-2.7,5.7-19.6,9.3Z" transform="translate(-30.8 -4.52)"/><path class="cls-4" d="M49.6,130.4c-5.9,15.7-2.9,20.6-2.7,21a1,1,0,0,0,.4.5,5,5,0,0,0,1.2-.2s10.7-.5,23.2-18.3Z" transform="translate(-30.8 -4.52)"/><path class="cls-5" d="M88.6,70.5C74.3,54.9,67.4,55.8,67,55.8a1.85,1.85,0,0,0-.7.2c-.5.2-1,1.8-1,1.8s-3,8.7,9.1,31.9Z" transform="translate(-30.8 -4.52)"/><path class="cls-6" d="M101.1,130.8c19.4,22.2,26.2,20.9,26.2,20.9a5.85,5.85,0,0,0,1.3.2,1,1,0,0,0,.4-.5c.3-.4,5.8-9.4-12.8-41.8Z" transform="translate(-30.8 -4.52)"/><path class="cls-7" d="M76,134.2c-40-1.7-44.8-11.7-45-12.2a1.45,1.45,0,0,1-.2-.7c.1-.7,1.5-2,1.5-2s10.6-6.5,28.3-10Z" transform="translate(-30.8 -4.52)"/><path class="cls-8" d="M87.5,69.3A162.37,162.37,0,0,0,73.7,86.5h1C77.8,82.6,85.5,72.8,88.1,70Z" transform="translate(-30.8 -4.52)"/><path class="cls-9" d="M103.6,87.3C114.1,62.6,110,57,110,57c-.1-.3-.2-.7-.3-1a6.37,6.37,0,0,0-.7-.2c-.5-.1-11.4-1.5-34.4,30.7Z" transform="translate(-30.8 -4.52)"/><path class="cls-10" d="M87.8,149.3c-14.2,15.4-21,14.5-21.4,14.5a8.86,8.86,0,0,1-1.7-.8L47.4,152c7.3-1.6,16.3-10.2,25.7-21.3Z" transform="translate(-30.8 -4.52)"/><path class="cls-11" d="M88.4,149.9c-14.2,15.4-21,14.5-21.4,14.5a8.86,8.86,0,0,1-1.7-.8L47.4,152c7.3-1.6,16.9-9.6,26.3-20.7Z" transform="translate(-30.8 -4.52)"/><path class="cls-12" d="M50.5,89.9c-6.3-16.2-3.2-21.3-3-21.6a5.26,5.26,0,0,1,1.4-1.2L66.3,56c-1.5,7.1,2.3,18,8.2,30.7Z" transform="translate(-30.8 -4.52)"/><path class="cls-13" d="M87,109.2a188.36,188.36,0,0,0-26,1.9c.3.5,4.3,7.2,7.2,11.7,27.8,42.8,40.8,41.1,41.4,41a8.86,8.86,0,0,0,1.7-.8l17.3-11C116.8,149.4,100.4,130.2,87,109.2Z" transform="translate(-30.8 -4.52)"/><path class="cls-14" d="M49.9,90.5c-6.3-16.2-3.2-21.3-3-21.6a5.26,5.26,0,0,1,1.4-1.2L66.3,56c-1.5,7.1,1.7,18.6,7.6,31.2Z" transform="translate(-30.8 -4.52)"/><path class="cls-15" d="M115.3,111.6c13.5,1.9,24.7,4.7,29.8,9.8V100.8a12.25,12.25,0,0,0-.2-1.9c-.1-.3-2.7-5.6-19-9.1Z" transform="translate(-30.8 -4.52)"/><path class="cls-16" d="M115.3,110.8c13.5,1.9,24.7,5.5,29.8,10.6V100a12.25,12.25,0,0,0-.2-1.9c-.1-.3-2.7-5.6-19-9.1Z" transform="translate(-30.8 -4.52)"/><path class="cls-17" d="M103.1,87c-3-.1-9.5-.4-15.1-.4C36.9,86.6,31.3,98.4,31,99a5.84,5.84,0,0,0-.2,1.9v20.6c5-5,15.9-7.7,29.2-9.7a203.87,203.87,0,0,1,25.9-2h4.8S106.1,87.1,103.1,87Z" transform="translate(-30.8 -4.52)"/><path class="cls-18" d="M73.9,85.4c-10.7.5-18.4,1.3-24.8,3.1l.3.8c.6-.1,1.3-.3,1.9-.4a200.75,200.75,0,0,1,23.1-2.3Z" transform="translate(-30.8 -4.52)"/><path class="cls-19" d="M103.1,86.2c-3-.1-9.5-.4-15.1-.4-51.1,0-56.7,11.8-57,12.4a5.84,5.84,0,0,0-.2,1.9v21.4c5-5,15.9-8.5,29.2-10.5a203.87,203.87,0,0,1,25.9-2h4.8C93,109,106.1,86.4,103.1,86.2Z" transform="translate(-30.8 -4.52)"/><path class="cls-20" d="M88,110.7c13.9-20.9,24.2-42.8,21.7-54.7L127,67a5.26,5.26,0,0,1,1.4,1.2c.3.5,7.1,11.7-20.7,54.5-2,3.2-3.9,6.9-4.6,7.2-4.1-4-12.6-15.6-14.7-18.5A2.77,2.77,0,0,1,88,110.7Z" transform="translate(-30.8 -4.52)"/><path class="cls-21" d="M126.5,89.1a150.56,150.56,0,0,1-11.1,22.4l1.3.2a145.91,145.91,0,0,0,10.9-22.4Z" transform="translate(-30.8 -4.52)"/><path class="cls-22" d="M108.4,123.3c27.8-42.8,21-54,20.7-54.5a5.26,5.26,0,0,0-1.4-1.2L109.7,56c2.5,11.8-7.4,34.6-21.2,55.5A182.06,182.06,0,0,0,103,131.4C104,130.3,106.5,126.2,108.4,123.3Z" transform="translate(-30.8 -4.52)"/><path class="cls-23" d="M102.5,132.1c.1-.1.2-.1.2-.2A201.58,201.58,0,0,1,88,112.2a.52.52,0,0,0-.2.4C87.7,112.6,97.4,127.9,102.5,132.1Z" transform="translate(-30.8 -4.52)"/><path class="cls-24" d="M88,150.3c-.2-.2-10.5-12.3-15.1-19.4l-.8.9A174,174,0,0,0,87.4,151Z" transform="translate(-30.8 -4.52)"/><path class="cls-25" d="M102.7,131.9A201.58,201.58,0,0,1,88,112.2c-.5-.8-1.1-1.6-1.6-2.4a188.36,188.36,0,0,0-26,1.9c.3.5,4.3,7.2,7.2,11.7,27.8,42.8,40.8,41.1,41.4,41a8.86,8.86,0,0,0,1.7-.8L128.6,152C121.3,150.4,111.9,142.6,102.7,131.9Z" transform="translate(-30.8 -4.52)"/><path class="cls-26" d="M201.1,88.5c3.2,0,5.6-.7,7.3-2.3,1.5-1.5,2.3-4,2.3-7.4,0-4-2.3-6-6.8-6q-4.8,0-7.2,2.4c-1.5,1.5-2.3,4.1-2.3,7.5C194.3,86.6,196.6,88.5,201.1,88.5Z" transform="translate(-30.8 -4.52)"/><path id="SVGID" class="cls-1" d="M232.5,122.2a6.77,6.77,0,0,1-5.1,2.3,5.73,5.73,0,0,1-4.1-1.3,3.48,3.48,0,0,1-1.2-2.5,10.31,10.31,0,0,1,.2-2l1-6.1c.7-4,3.2-6,7.3-6,2.2,0,3.6.7,4.2,2Zm-56.6,47.9c-2.7,4.8-5.1,7.2-7.3,7.1s-3.4-1.7-3.3-4.9,1.6-7.1,4.5-11.4,7.5-9,13.9-14.2Q179.8,162.9,175.9,170.1ZM336,122.3a2.77,2.77,0,0,1,.1-.9l4.5-25.5H326.8L322,123.4c0,.2-.1.3-.1.5a7.22,7.22,0,0,1-3.2.8,2.29,2.29,0,0,1-2.6-2.3,2.77,2.77,0,0,1,.1-.9l2-12.1a29.71,29.71,0,0,0,.4-5.4,9.81,9.81,0,0,0-1.6-5.5c-1.6-2.4-5.2-3.6-10.6-3.6a15.18,15.18,0,0,0-13.1,6.9q-1.35-6.9-12-6.9a15.11,15.11,0,0,0-12.4,6l.9-4.8H257l-5,28a9,9,0,0,1-3.5.8,1.86,1.86,0,0,1-2.1-2.1c0-.4.1-.7.1-1L251,96.3H238.6l-.4,2.4c-1.7-2.3-5.2-3.5-10.1-3.5s-9.1,1.4-12.2,4.4a19.89,19.89,0,0,0-5.9,11.7l-1.5,8c-2.2,1.2-4.3,2.5-6.3,3.8.1-.5.2-1,.3-1.6l4.4-25.3H193.1l-6.3,36.4C174,142,165.3,150,160.6,156.5s-7.2,12.7-7.3,18.6a13.66,13.66,0,0,0,3.7,10.3q3.75,3.9,10.2,4.2c8.9.3,16.3-5.8,22-18.1,4.4-9.4,7.9-21.3,10.8-35.9,2.9-2.2,5.8-4.4,8.6-6.4,1.5,4.8,5.7,7.2,12.7,7.2a13.2,13.2,0,0,0,12-6.6q.9,6.6,9.9,6.6a13.94,13.94,0,0,0,7.2-2l-.2,1H264l4.5-25.8a8.15,8.15,0,0,1,6-2.7c2.9,0,4.5,1.3,4.5,3.9a14.15,14.15,0,0,1-.2,2.9L275,135.4h13.8l4.5-25.1A8,8,0,0,1,300,107q4.2,0,4.2,3.9a14.15,14.15,0,0,1-.2,2.9l-1.7,10a22.56,22.56,0,0,0-.3,3.5c0,6.1,3.8,9.3,11.1,9.3a12.53,12.53,0,0,0,5.7-1.3c.1,0,.1-.1.2-.1a18.25,18.25,0,0,0,4-2.7l.3.6c1.4,2.3,4.6,3.4,9.5,3.4a13.45,13.45,0,0,0,8.7-3.1l.4-9.2a7.31,7.31,0,0,1-3.3.8C336.8,124.7,336.1,123.9,336,122.3Z" transform="translate(-30.8 -4.52)"/><path class="cls-26" d="M338,72.8q-4.8,0-7.2,2.4c-1.5,1.5-2.3,4.1-2.3,7.5,0,3.8,2.2,5.9,6.7,5.9,3.3,0,5.8-.7,7.3-2.3s2.3-4,2.3-7.4C344.8,74.9,342.4,72.8,338,72.8Z" transform="translate(-30.8 -4.52)"/><path class="cls-27" d="M336.1,12.28c50.91,0,92.2,31,92.2,69.16h10.25C438.55,39,392.66,4.52,336.1,4.52S233.65,39,233.65,81.44h10.24C243.79,43.3,285.19,12.28,336.1,12.28Z" transform="translate(-30.8 -4.52)"/><path class="cls-28" d="M336.1,20c45.16,0,82,27.59,82,61.49H428.3c0-38.22-41.29-69.16-92.2-69.16s-92.31,30.94-92.31,69.16H254C254,47.54,290.83,20,336.1,20Z" transform="translate(-30.8 -4.52)"/><path class="cls-29" d="M336.1,27.63c39.52,0,71.71,24.15,71.71,53.81h10.25c0-34-36.69-61.49-82-61.49S254,47.46,254,81.44h10.24C264.28,51.78,296.48,27.63,336.1,27.63Z" transform="translate(-30.8 -4.52)"/><path class="cls-30" d="M336.1,35.31c33.87,0,61.47,20.71,61.47,46.13h10.24c0-29.74-32.09-53.81-71.71-53.81s-71.82,24.15-71.82,53.81h10.25C274.53,56,302.12,35.31,336.1,35.31Z" transform="translate(-30.8 -4.52)"/><path class="cls-31" d="M336.1,43c28.23,0,51.22,17.27,51.22,38.46h10.25c0-25.5-27.49-46.13-61.47-46.13s-61.47,20.63-61.47,46.13h10.24C284.77,60.25,307.77,43,336.1,43Z" transform="translate(-30.8 -4.52)"/><path class="cls-32" d="M336.1,50.74c22.58,0,41,13.83,41,30.78h10.24c0-21.27-22.89-38.46-51.22-38.46s-51.23,17.19-51.23,38.46h10.25C295,64.49,313.41,50.74,336.1,50.74Z" transform="translate(-30.8 -4.52)"/><path class="cls-33" d="M336.1,58.41c16.94,0,30.73,10.32,30.73,23h10.25c0-17-18.4-30.78-41-30.78s-41,13.75-41,30.78h10.24C305.26,68.73,319.06,58.41,336.1,58.41Z" transform="translate(-30.8 -4.52)"/><path class="cls-34" d="M336.24,64.68c13,0,23.56,6.21,23.56,16.76h7.85c0-14.07-14.24-23-31.55-23s-31.28,8.89-31.28,23h7.86C312.6,70.89,323.17,64.68,336.24,64.68Z" transform="translate(-30.8 -4.52)"/></svg>
\ No newline at end of file
diff --git a/client/public/baseline_send_black_18dp.png b/client/public/baseline_send_black_18dp.png
new file mode 100644
index 0000000..ab56a83
--- /dev/null
+++ b/client/public/baseline_send_black_18dp.png
Binary files differ
diff --git a/client/public/deduction.mp3 b/client/public/deduction.mp3
new file mode 100644
index 0000000..5781101
--- /dev/null
+++ b/client/public/deduction.mp3
Binary files differ
diff --git a/client/public/favicon.ico b/client/public/favicon.ico
new file mode 100644
index 0000000..bcd5dfd
--- /dev/null
+++ b/client/public/favicon.ico
Binary files differ
diff --git a/client/public/logo192.png b/client/public/logo192.png
new file mode 100644
index 0000000..fc44b0a
--- /dev/null
+++ b/client/public/logo192.png
Binary files differ
diff --git a/client/public/logo512.png b/client/public/logo512.png
new file mode 100644
index 0000000..a4e47a6
--- /dev/null
+++ b/client/public/logo512.png
Binary files differ
diff --git a/client/public/manifest.json b/client/public/manifest.json
new file mode 100644
index 0000000..080d6c7
--- /dev/null
+++ b/client/public/manifest.json
@@ -0,0 +1,25 @@
+{
+  "short_name": "React App",
+  "name": "Create React App Sample",
+  "icons": [
+    {
+      "src": "favicon.ico",
+      "sizes": "64x64 32x32 24x24 16x16",
+      "type": "image/x-icon"
+    },
+    {
+      "src": "logo192.png",
+      "type": "image/png",
+      "sizes": "192x192"
+    },
+    {
+      "src": "logo512.png",
+      "type": "image/png",
+      "sizes": "512x512"
+    }
+  ],
+  "start_url": ".",
+  "display": "standalone",
+  "theme_color": "#000000",
+  "background_color": "#ffffff"
+}
diff --git a/client/public/robots.txt b/client/public/robots.txt
new file mode 100644
index 0000000..e9e57dc
--- /dev/null
+++ b/client/public/robots.txt
@@ -0,0 +1,3 @@
+# https://www.robotstxt.org/robotstxt.html
+User-agent: *
+Disallow:
diff --git a/client/public/stairs.mp3 b/client/public/stairs.mp3
new file mode 100644
index 0000000..a108abc
--- /dev/null
+++ b/client/public/stairs.mp3
Binary files differ
diff --git a/client/src/App.css b/client/src/App.css
new file mode 100644
index 0000000..915ab44
--- /dev/null
+++ b/client/src/App.css
@@ -0,0 +1,42 @@
+.App {
+  text-align: center;
+}
+
+.App-logo {
+  height: 40vmin;
+  pointer-events: none;
+}
+
+@media (prefers-reduced-motion: no-preference) {
+  .App-logo {
+    animation: App-logo-spin infinite 20s linear;
+  }
+}
+
+.App-header {
+  background-color: #282c34;
+  min-height: 100vh;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  font-size: calc(10px + 2vmin);
+  color: white;
+}
+
+.App-link {
+  color: #61dafb;
+}
+
+.loginCard {
+  margin-top: 2em;
+}
+
+@keyframes App-logo-spin {
+  from {
+    transform: rotate(0deg);
+  }
+  to {
+    transform: rotate(360deg);
+  }
+}
diff --git a/client/src/App.js b/client/src/App.js
new file mode 100644
index 0000000..c943b71
--- /dev/null
+++ b/client/src/App.js
@@ -0,0 +1,47 @@
+/*
+  Company: Savoir-faire Linux
+  Author: Larbi Gharib <larbi.gharib@savoirfairelinux.com>
+  License: AGPL-3
+*/
+
+import React from 'react';
+import CssBaseline from '@material-ui/core/CssBaseline';
+import authManager from './AuthManager'
+//import logo from './logo.svg';
+import './App.css';
+
+import { BrowserRouter as Router, Route, Switch, Link, Redirect } from 'react-router-dom';
+
+import SignInPage from "./pages/loginDialog.jsx";
+import JamiMessenger from "./pages/messenger.jsx"
+import AccountSettings from "./pages/accountSettings.jsx"
+import AccountSelection from "./pages/accountSelection.jsx"
+import NotFoundPage from "./pages/404.jsx"
+
+class App extends React.Component {
+  constructor(props) {
+    super(props);
+    this.state = {
+      authenticated: authManager.isAuthenticated(),
+    };
+    authManager.setOnAuthChanged(authenticated => this.setState({authenticated}))
+  }
+
+  render() {
+      return <React.Fragment>
+        <CssBaseline />
+        <Router>
+          <Switch>
+            <Route exact path="/"><Redirect to="/account" /></Route>
+            <Route path="/account/:accountId" component={AccountSettings} />
+            <Route path="/account" component={AccountSelection} />
+            <Route path="/messaging" component={JamiMessenger} />
+            <Route component={NotFoundPage} />
+          </Switch>
+        </Router>
+        {!this.state.authenticated && <SignInPage open={!this.state.authenticated}/>}
+      </React.Fragment>
+  }
+}
+
+export default App
\ No newline at end of file
diff --git a/client/src/App.test.js b/client/src/App.test.js
new file mode 100644
index 0000000..4db7ebc
--- /dev/null
+++ b/client/src/App.test.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { render } from '@testing-library/react';
+import App from './App';
+
+test('renders learn react link', () => {
+  const { getByText } = render(<App />);
+  const linkElement = getByText(/learn react/i);
+  expect(linkElement).toBeInTheDocument();
+});
diff --git a/client/src/AuthManager.js b/client/src/AuthManager.js
new file mode 100644
index 0000000..09aef64
--- /dev/null
+++ b/client/src/AuthManager.js
@@ -0,0 +1,84 @@
+/*
+ *  Copyright (c) 2017-2021 Savoir-faire Linux Inc.
+ *
+ *  Author: Adrien Béraud <adrien.beraud@savoirfairelinux.com>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+//import cookie from 'cookie';
+
+class AuthManager {
+    constructor() {
+        console.log("AuthManager()")
+        this.authenticated = true//'connect.sid' in cookie.parse(document.cookie)
+        this.authenticating = false
+        this.tasks = []
+        this.onAuthChanged = undefined
+    }
+    setOnAuthChanged(onAuthChanged) {
+        this.onAuthChanged = onAuthChanged
+    }
+
+    isAuthenticated() {
+        return this.authenticated
+    }
+
+    authenticate() {
+        if (this.authenticating)
+            return
+        console.log("Starting authentication")
+        this.authenticating = true
+        fetch('/api/localLogin?username=local&password=local', { method:"POST" })
+            .then(response => {
+                console.log(response)
+                this.authenticating = false
+                this.authenticated = response.ok && response.status === 200
+                if (this.onAuthChanged)
+                    this.onAuthChanged(this.authenticated)
+                while (this.tasks.length !== 0) {
+                    const task = this.tasks.shift()
+                    if (this.authenticated)
+                        fetch(task.url, task.init).then(res => task.resolve(res))
+                    else
+                        task.reject(new Error("Authentication failed"))
+                }
+            })
+    }
+
+    disconnect() {
+        console.log("Disconnect")
+        this.authenticated = false
+        if (this.onAuthChanged)
+            this.onAuthChanged(this.authenticated)
+    }
+
+    fetch(url, init) {
+        console.log(`get ${url}`)
+        if (!this.authenticated) {
+            return new Promise((resolve, reject) => this.tasks.push({url, init, resolve, reject}))
+        }
+        return fetch(url, init)
+            .then(response => {
+                console.log(`Got status ${response.status}`)
+                if (response.status === 401) {
+                    this.disconnect()
+                    return this.fetch(url, init)
+                }
+                return response
+            })
+    }
+}
+
+export default new AuthManager()
\ No newline at end of file
diff --git a/client/src/components/AccountList.js b/client/src/components/AccountList.js
new file mode 100644
index 0000000..6f38c3c
--- /dev/null
+++ b/client/src/components/AccountList.js
@@ -0,0 +1,29 @@
+import React from 'react';
+
+import List from '@material-ui/core/List';
+import ListItem from '@material-ui/core/ListItem';
+import ListItemText from '@material-ui/core/ListItemText';
+import ListItemAvatar from '@material-ui/core/ListItemAvatar';
+import Avatar from '@material-ui/core/Avatar';
+import PersonRoundedIcon from '@material-ui/icons/PersonRounded';
+
+class AccountList extends React.Component {
+  render() {
+    return (
+        <List>
+          {
+            this.props.accounts.map(account => <ListItem button key={account.getId()} onClick={() => this.props.onClick(account)}>
+              <ListItemAvatar>
+                <Avatar>
+                  <PersonRoundedIcon />
+                </Avatar>
+              </ListItemAvatar>
+              <ListItemText primary={account.getDisplayName()} secondary={account.getDisplayUri()} />
+            </ListItem>
+            )
+          }
+        </List>)
+  }
+}
+
+export default AccountList;
\ No newline at end of file
diff --git a/client/src/components/AccountPreferences.js b/client/src/components/AccountPreferences.js
new file mode 100644
index 0000000..5b6ae28
--- /dev/null
+++ b/client/src/components/AccountPreferences.js
@@ -0,0 +1,63 @@
+import React from 'react';
+
+import Typography from '@material-ui/core/Typography';
+
+import JamiIdCard from './JamiIdCard';
+import List from '@material-ui/core/List';
+import ListItem from '@material-ui/core/ListItem';
+import ListItemIcon from '@material-ui/core/ListItemIcon';
+import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction';
+import ListItemText from '@material-ui/core/ListItemText';
+import ListSubheader from '@material-ui/core/ListSubheader';
+import Switch from '@material-ui/core/Switch';
+import PhoneCallbackIcon from '@material-ui/icons/PhoneCallback';
+import GroupRoundedIcon from '@material-ui/icons/GroupRounded';
+import Account from '../../../model/Account';
+
+class AccountPreferences extends React.Component {
+
+  render() {
+    const account = this.props.account
+    const isJamiAccount = account.getType() === Account.TYPE_JAMI
+    return (
+      <React.Fragment>
+        <Typography variant="h2" component="h2">{isJamiAccount ? "Jami account" : "SIP account"}</Typography>
+
+        {isJamiAccount &&
+          <JamiIdCard account={account} />}
+
+        <List subheader={<ListSubheader>Settings</ListSubheader>}>
+          <ListItem>
+            <ListItemIcon>
+              <GroupRoundedIcon />
+            </ListItemIcon>
+            <ListItemText id="switch-list-label-rendezvous" primary="Rendez-Vous point" />
+            <ListItemSecondaryAction>
+              <Switch
+                edge="end"
+                /*onChange={handleToggle('wifi')}*/
+                checked={account.isRendezVous()}
+                inputProps={{ 'aria-labelledby': 'switch-list-label-wifi' }}
+              />
+            </ListItemSecondaryAction>
+          </ListItem>
+          <ListItem>
+            <ListItemIcon>
+              <PhoneCallbackIcon />
+            </ListItemIcon>
+            <ListItemText id="switch-list-label-publicin" primary="Allow connection from unkown peers" />
+            <ListItemSecondaryAction>
+              <Switch
+                edge="end"
+                /*onChange={handleToggle('bluetooth')}*/
+                checked={account.isPublicIn()}
+                inputProps={{ 'aria-labelledby': 'switch-list-label-bluetooth' }}
+              />
+            </ListItemSecondaryAction>
+          </ListItem>
+        </List>
+      </React.Fragment>)
+  }
+}
+
+export default AccountPreferences;
\ No newline at end of file
diff --git a/client/src/components/ContactList.js b/client/src/components/ContactList.js
new file mode 100644
index 0000000..af232a0
--- /dev/null
+++ b/client/src/components/ContactList.js
@@ -0,0 +1,16 @@
+import React from 'react'
+
+class ContactList extends React.Component {
+    render() {
+
+        return (
+            <div className="rooms-list">
+                <ul>
+                    <h3>Liste de contacts</h3>
+                </ul>
+            </div>
+        )
+    }
+}
+
+export default ContactList
\ No newline at end of file
diff --git a/client/src/components/Header.js b/client/src/components/Header.js
new file mode 100644
index 0000000..d245976
--- /dev/null
+++ b/client/src/components/Header.js
@@ -0,0 +1,45 @@
+import React from 'react'
+import Button from '@material-ui/core/Button';
+import Menu from '@material-ui/core/Menu';
+import MenuItem from '@material-ui/core/MenuItem';
+//import { useHistory } from "react-router-dom";
+import authManager from '../AuthManager'
+
+export default function Header() {
+    //const history = useHistory();
+
+    const [anchorEl, setAnchorEl] = React.useState(null);
+
+    const handleClick = (event) => {
+        setAnchorEl(event.currentTarget);
+    };
+
+    const handleClose = () => {
+        setAnchorEl(null);
+    };
+
+    const disconnect = () => {
+        authManager.disconnect()
+        //let path = `/`;
+        //history.push(path);
+    }
+
+    return (
+        <div>
+            <Button aria-controls="simple-menu" aria-haspopup="true" onClick={handleClick}>
+                Menu
+            </Button>
+            <Menu
+                id="simple-menu"
+                anchorEl={anchorEl}
+                keepMounted
+                open={Boolean(anchorEl)}
+                onClose={handleClose}
+            >
+                <MenuItem onClick={handleClose}>Profile</MenuItem>
+                <MenuItem onClick={handleClose}>Mon compte</MenuItem>
+                <MenuItem onClick={disconnect}>Déconnexion</MenuItem>
+            </Menu>
+        </div>
+    );
+}
\ No newline at end of file
diff --git a/client/src/components/JamiIdCard.js b/client/src/components/JamiIdCard.js
new file mode 100644
index 0000000..eb31a26
--- /dev/null
+++ b/client/src/components/JamiIdCard.js
@@ -0,0 +1,25 @@
+import React from 'react';
+
+import Card from '@material-ui/core/Card';
+import CardContent from '@material-ui/core/CardContent';
+import Typography from '@material-ui/core/Typography';
+
+class JamiIdCard extends React.Component {
+  render() {
+    const account = this.props.account
+    const registeredName = account.getRegisteredName()
+    return (
+        <Card style={{marginBottom:16}}>
+          <CardContent>
+            <Typography variant="h6">Jami key ID</Typography>
+            <Typography variant="body1">{account.getUri()}</Typography>
+            {registeredName && <div>
+                <Typography variant="h6">Jami username</Typography>
+                <Typography variant="body1">{registeredName}</Typography></div>
+            }
+          </CardContent>
+        </Card>)
+  }
+}
+
+export default JamiIdCard;
\ No newline at end of file
diff --git a/client/src/components/Message.js b/client/src/components/Message.js
new file mode 100644
index 0000000..2e1c086
--- /dev/null
+++ b/client/src/components/Message.js
@@ -0,0 +1,12 @@
+import React from 'react'
+
+function Message(props) {
+    return (
+        <div className="message">
+            <div className="message-username">{props.username}</div>
+            <div className="message-text">{props.text}</div>
+        </div>
+    )
+}
+
+export default Message
\ No newline at end of file
diff --git a/client/src/components/MessageList.js b/client/src/components/MessageList.js
new file mode 100644
index 0000000..08bdbea
--- /dev/null
+++ b/client/src/components/MessageList.js
@@ -0,0 +1,22 @@
+import React from 'react'
+import Message from './Message'
+
+
+class MessageList extends React.Component {
+    render() {
+        return (
+            <div className="message-list">
+
+                {
+                    this.props.messages.map((message, index) => {
+                        /*DUMMY_DATA.map((message, index) => {*/
+                        return (
+                            <Message key={index} username={message.senderId} text={message.text} />
+                        )
+                    })}
+            </div>
+        )
+    }
+}
+
+export default MessageList
\ No newline at end of file
diff --git a/client/src/components/NewContactForm.js b/client/src/components/NewContactForm.js
new file mode 100644
index 0000000..ef590c5
--- /dev/null
+++ b/client/src/components/NewContactForm.js
@@ -0,0 +1,19 @@
+import React from 'react'
+
+class NewContactForm extends React.Component {
+    render() {
+        return (
+            <div className="new-room-form">
+                <form>
+                    <input
+                        type="text"
+                        placeholder="Ajouter un contact"
+                        required />
+                    <button id="create-room-btn" type="submit">+</button>
+                </form>
+            </div>
+        )
+    }
+}
+
+export default NewContactForm
\ No newline at end of file
diff --git a/client/src/components/SendMessageForm.js b/client/src/components/SendMessageForm.js
new file mode 100644
index 0000000..43a4998
--- /dev/null
+++ b/client/src/components/SendMessageForm.js
@@ -0,0 +1,51 @@
+import React from 'react'
+import TextField from '@material-ui/core/TextField'
+//import InputEmoji from "react-input-emoji";
+
+class SendMessageForm extends React.Component {
+
+    constructor() {
+        super()
+        this.state = {
+            message: ''
+        }
+        this.handleChange = this.handleChange.bind(this)
+        this.handleSubmit = this.handleSubmit.bind(this)
+    }
+
+    handleChange(e) {
+        this.setState({
+            message: e
+        })
+    }
+
+    handleSubmit(e) {
+        //e.preventDefault()
+        this.props.sendMessage(this.state.message)
+        //this.props.sendMessage(this.state.message)
+        this.setState({
+            message: ''
+        })
+    }
+
+    render() {
+        return (
+            <div
+                //onSubmit={this.handleSubmit}
+                className="send-message-form">
+                <TextField
+                    disabled={this.props.disabled}
+                    onChange={this.handleChange}
+                    value={this.state.message}
+                    cleanOnEnter
+                    onEnter={this.handleSubmit}
+                    placeholder="Écris ton message et cliques sur Entrer"
+                    height="35"
+                />
+
+            </div>
+        )
+    }
+}
+
+export default SendMessageForm
\ No newline at end of file
diff --git a/client/src/index.css b/client/src/index.css
new file mode 100644
index 0000000..062ee6f
--- /dev/null
+++ b/client/src/index.css
@@ -0,0 +1,211 @@
+:root {
+  --main-color: #1F1F1F;
+  --secondary-color: white;
+  --third-color: #2F2F2F;
+  --main-text-color: #3e5869;
+  --secondary-text-color: #b0c7d6;
+  --send-message-form: #F5F5F5;
+}
+
+html, body {
+  height: 100%;
+  margin: 0;
+  padding: 0;
+  font-family: 'Open Sans', sans-serif;
+  font-weight: 200;
+  color: #3e5869; 
+}
+
+#root {
+  height: 100%;
+}
+
+.app {
+  display: grid;
+  height: 100%;
+  grid-template-columns: repeat(6, 1fr);
+  grid-template-rows: 40px 1fr 1fr 1fr 1fr 1fr 60px;
+  grid-template-areas: 
+      "h h h h h h"
+      "r m m m m m"
+      "r m m m m m"
+      "r m m m m m"
+      "r m m m m m"
+      "r m m m m m"
+      "n s s s s s";
+}
+
+.login {
+  background-color: var(--main-color);
+}
+
+.header-section {
+  grid-area: h;
+}
+
+.new-room-form {
+  grid-area: n;
+}
+
+.rooms-list {
+  grid-area: r;
+}
+
+.message-list {
+  grid-area: m;
+}
+
+.send-message-form {
+  grid-area: s;
+}
+
+/* REST OF CSS */
+
+.header-section {
+  background-color: var(--main-color);
+
+}
+
+.simple-menu {
+  color: var(--send-message-form);
+}
+
+.rooms-list {
+  box-sizing: border-box;
+  padding: 10px;
+  background-color: var(--main-color);
+  overflow: scroll;
+  height: 100%;
+}
+
+.rooms-list ul {
+  list-style-type: none;    
+  padding: 0;
+  overflow: scoll;
+}
+
+.rooms-list li {
+  margin: 10px 0;
+}
+
+.rooms-list h3 {
+  margin: 5px 0;
+  color: var(--secondary-color);
+}
+
+.rooms-list .room a {
+  color: var(--secondary-text-color);
+  font-weight: 600;
+  text-decoration: none;
+  
+}
+
+.rooms-list .room.active a {
+  color: var(--secondary-color);
+}
+
+.new-room-form {
+  padding: 0 5px;
+  background: var(--secondary-color);
+  color: var(--main-text-color);
+}
+
+.new-room-form form {
+  height: 100%;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.new-room-form input {
+  width: 135px;
+  background: var(--secondary-color);
+}
+
+.new-room-form button {
+  background: var(--secondary-color);
+  color: var(--main-text-color);
+  border: 0;
+} 
+
+.new-room-form input::placeholder {
+  color: var(--main-text-color);
+  font-weight: 200;
+}
+
+.new-room-form input:focus {
+  outline-width: 0;
+}
+
+.new-room-form input {
+  border: 0;
+}
+
+.new-room-form button {
+  border: 0;
+}
+
+.message {
+  margin: 15px 0;
+}
+
+.message .message-username {
+  font-size: 11px;
+  font-weight: bold;
+  color: var(--secondary-color);
+  opacity: 0.9;
+  margin-bottom: 6px;
+}
+.message .message-text {
+  background: var(--third-color);
+  color: var(--secondary-color);
+  display: inline;
+  padding: 4px 8px;
+  border-radius: 8px;
+}
+
+.message-list {
+  box-sizing: border-box;
+  padding-left: 6px;
+  width: 100%;
+  height: 100%;
+  overflow: scroll;
+  background: var(--third-color);
+}
+
+.message-list .join-room {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  height: 100%;
+  font-size: 34px;
+  font-weight: 300;
+}
+
+.send-message-form {
+  background: var(--send-message-form);
+  display: flex;
+}
+
+.send-message-form input {
+  width: 100%;
+  padding: 15px 10px;
+  margin: 0;
+  border-style: none;
+  background: var(--send-message-form);
+  font-weight: 200;
+
+}
+
+.send-message-form input:focus {
+  outline-width: 0;
+}
+
+.send-message-form input::placeholder {
+  color: var(--main-text-color);
+}
+
+.help-text {
+  position: absolute;
+  top: 10px;
+}
diff --git a/client/src/index.ejs b/client/src/index.ejs
new file mode 100644
index 0000000..f1cd060
--- /dev/null
+++ b/client/src/index.ejs
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="utf-8" />
+  <link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
+  <meta name="viewport" content="width=device-width, initial-scale=1" />
+  <meta name="theme-color" content="#000000" />
+  <meta name="description" content="Web site created using create-react-app" />
+  <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
+  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap" />
+  <title>Jaas Web Client App</title>
+</head>
+
+<body>
+  <div id="root"></div>
+</body>
+
+</html>
\ No newline at end of file
diff --git a/client/src/index.js b/client/src/index.js
new file mode 100644
index 0000000..42d2abd
--- /dev/null
+++ b/client/src/index.js
@@ -0,0 +1,17 @@
+import React from 'react';
+import ReactDOM from 'react-dom';
+import './index.css';
+import App from './App';
+//import * as serviceWorker from './serviceWorker';
+
+ReactDOM.render(
+  <React.StrictMode>
+    <App />
+  </React.StrictMode>,
+  document.getElementById('root')
+);
+
+// If you want your app to work offline and load faster, you can change
+// unregister() to register() below. Note this comes with some pitfalls.
+// Learn more about service workers: https://bit.ly/CRA-PWA
+//serviceWorker.unregister();
diff --git a/client/src/logo.svg b/client/src/logo.svg
new file mode 100644
index 0000000..6b60c10
--- /dev/null
+++ b/client/src/logo.svg
@@ -0,0 +1,7 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3">
+    <g fill="#61DAFB">
+        <path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/>
+        <circle cx="420.9" cy="296.5" r="45.7"/>
+        <path d="M520.5 78.1z"/>
+    </g>
+</svg>
diff --git a/client/src/pages/404.jsx b/client/src/pages/404.jsx
new file mode 100644
index 0000000..8d0dcb1
--- /dev/null
+++ b/client/src/pages/404.jsx
@@ -0,0 +1,12 @@
+import React from 'react';
+
+
+const NotFoundPage = () => {
+    return (
+        <div>
+            <h3>404 Page not found</h3>
+        </div>
+    )
+}
+
+export default NotFoundPage;
\ No newline at end of file
diff --git a/client/src/pages/accountSelection.jsx b/client/src/pages/accountSelection.jsx
new file mode 100644
index 0000000..2a4c99b
--- /dev/null
+++ b/client/src/pages/accountSelection.jsx
@@ -0,0 +1,64 @@
+import React from 'react';
+import Header from '../components/Header'
+import authManager from '../AuthManager'
+import AccountList from '../components/AccountList';
+import CircularProgress from '@material-ui/core/CircularProgress';
+import { withRouter } from 'react-router-dom';
+import Card from '@material-ui/core/Card';
+import CardHeader from '@material-ui/core/CardHeader';
+import Container from '@material-ui/core/Container';
+import Account from '../../../model/Account';
+
+class AccountSelection extends React.Component {
+
+  constructor(props) {
+    super(props)
+    this.controller = new AbortController()
+    this.state = {
+      loaded: false,
+      error: false,
+      accounts: []
+    }
+  }
+
+  componentDidMount() {
+    if (!this.state.loaded) {
+      authManager.fetch('/api/accounts', {signal: this.controller.signal})
+        .then(res => res.json())
+        .then(result => {
+          console.log(result)
+          this.setState({
+            loaded: true,
+            accounts: result.map(account => Account.from(account)),
+          })
+        }, error => {
+          console.log(`get error ${error}`)
+          this.setState({
+            loaded: true,
+            error: true
+          })
+        })
+      }
+  }
+  componentWillUnmount() {
+    this.controller.abort()
+  }
+
+  render() {
+    if (!this.state.loaded)
+      return <Container><CircularProgress /></Container>
+    return (
+      <div className="app" style={{marginBottom:32}} >
+        <Header />
+        <Container>
+          <Card style={{marginTop:32, marginBottom:32}}>
+            <CardHeader title="Choose an account" />
+            <AccountList accounts={this.state.accounts} onClick={account => this.props.history.push(`/account/${account.getId()}`)} />
+          </Card>
+        </Container>
+      </div>
+    )
+  }
+}
+
+export default withRouter(AccountSelection);
\ No newline at end of file
diff --git a/client/src/pages/accountSettings.jsx b/client/src/pages/accountSettings.jsx
new file mode 100644
index 0000000..d7f71cf
--- /dev/null
+++ b/client/src/pages/accountSettings.jsx
@@ -0,0 +1,45 @@
+import React from 'react';
+import Header from '../components/Header'
+import AccountPreferences from '../components/AccountPreferences'
+import Container from '@material-ui/core/Container';
+import CircularProgress from '@material-ui/core/CircularProgress';
+import authManager from '../AuthManager'
+import Account from '../../../model/Account'
+
+class AccountSettings extends React.Component {
+
+  constructor(props) {
+    super(props)
+    this.accountId = props.accountId || props.match.params.accountId
+    this.state = { loaded: false, account: props.account }
+    this.req = undefined
+    this.controller = new AbortController()
+  }
+
+  componentDidMount() {
+    if (this.req === undefined) {
+      this.req = authManager.fetch(`/api/accounts/${this.accountId}`, {signal: this.controller.signal})
+        .then(res => res.json())
+        .then(result => {
+          console.log(result)
+          this.setState({loaded: true, account: Account.from(result)})
+        })
+    }
+  }
+
+  componentWillUnmount() {
+    this.controller.abort()
+    this.req = undefined
+  }
+
+  render() {
+    return (
+      <Container maxWidth="sm" className="app" >
+        <Header />
+        {this.state.loaded ? <AccountPreferences account={this.state.account} /> : <CircularProgress />}
+      </Container>
+    )
+  }
+}
+
+export default AccountSettings;
\ No newline at end of file
diff --git a/client/src/pages/loginDialog.jsx b/client/src/pages/loginDialog.jsx
new file mode 100644
index 0000000..93f9f59
--- /dev/null
+++ b/client/src/pages/loginDialog.jsx
@@ -0,0 +1,245 @@
+import React from 'react';
+
+import Avatar from '@material-ui/core/Avatar';
+import Button from '@material-ui/core/Button';
+import TextField from '@material-ui/core/TextField';
+import FormControlLabel from '@material-ui/core/FormControlLabel';
+import Checkbox from '@material-ui/core/Checkbox';
+import Link from '@material-ui/core/Link';
+import Grid from '@material-ui/core/Grid';
+import Box from '@material-ui/core/Box';
+import Card from '@material-ui/core/Card';
+import CardContent from '@material-ui/core/CardContent';
+import CardActionArea from '@material-ui/core/CardActionArea';
+import CardActions from '@material-ui/core/CardActions';
+
+import LockOutlinedIcon from '@material-ui/icons/LockOutlined';
+import Typography from '@material-ui/core/Typography';
+//import { makeStyles } from '@material-ui/core/styles';
+import Container from '@material-ui/core/Container';
+import { Redirect } from 'react-router-dom';
+import CircularProgress from '@material-ui/core/CircularProgress';
+import DialogTitle from '@material-ui/core/DialogTitle';
+import Dialog from '@material-ui/core/Dialog';
+import DialogActions from '@material-ui/core/DialogActions';
+import DialogContent from '@material-ui/core/DialogContent';
+import DialogContentText from '@material-ui/core/DialogContentText';
+
+import authManager from '../AuthManager'
+
+function Copyright() {
+    return (
+        <Typography variant="body2" color="textSecondary" align="center">
+            {'Copyright © 2016-'}{new Date().getFullYear()}{' Savoir-faire Linux Inc.'}
+            <Link color="inherit" href="https://jami.net/">
+                Jami.net
+        </Link>{' '}
+            {'.'}
+        </Typography>
+    );
+}
+
+/*const useStyles = makeStyles((theme) => ({
+    paper: {
+        marginTop: theme.spacing(8),
+        display: 'flex',
+        flexDirection: 'column',
+        alignItems: 'center',
+    },
+    avatar: {
+        margin: theme.spacing(1),
+        backgroundColor: theme.palette.secondary.main,
+    },
+    form: {
+        width: '100%', // Fix IE 11 issue.
+        marginTop: theme.spacing(1),
+    },
+    submit: {
+        margin: theme.spacing(3, 0, 2),
+    },
+}));*/
+
+/*function SignIn() {
+    const classes = useStyles();
+
+
+}*/
+
+/*
+    TODO:
+    Use useState to handle username password and redirect states to render this page to
+    comply with material-ui usage of useStyles
+    Src: https://blog.logrocket.com/a-guide-to-usestate-in-react-ecb9952e406c/
+*/
+
+class SignInPage extends React.Component {
+
+    constructor(props) {
+        console.log("SignInPage " + props.open)
+        super(props)
+        this.state = {
+            /*username: '',
+            password: '',
+            redirect: false,
+            session: null,*/
+            submitted: false,
+            loading: false/*,
+            error: false,
+            open: false,
+            errorMessage: ''*/
+        }
+        this.handleSubmit = this.handleSubmit.bind(this);
+        this.localLogin = this.localLogin.bind(this);
+    }
+
+    handleusername(text) {
+        this.setState({ username: text.target.value })
+    }
+
+    handlePassword(text) {
+        this.setState({ password: text.target.value })
+    }
+
+    localLogin() {
+        this.setState({
+            submitted: true,
+            loading: true
+        })
+        authManager.authenticate()
+        /*fetch('/api/localLogin?username=none&password=none', {
+            header: { "Content-Type": "application/json" },
+            method: "POST",
+            credentials: 'same-origin'
+            //body: JSON.stringify({ obj })
+        })
+            .then((res) => {
+                if (res.status === '200') {
+                    this.setState({
+                        redirect: true
+                    });
+                } else if (res.status === '401') {
+                    this.setState({
+                        loading: false,
+                        error: true,
+                        open: true,
+                        errorMessage: "Wrong credentials! Your are not allowed to connect"
+                    })
+                }
+                //this.setState({ session: res });
+            }).catch((e) => {
+                this.setState({
+                    loading: false,
+                    error: true,
+                    open: true,
+                    errorMessage: e.toString()
+                })
+            })*/
+    }
+
+    handleSubmit(event) {
+        event.preventDefault();
+        let obj = {}
+        obj.username = this.state.username;
+        obj.password = this.state.password;
+
+        this.setState({
+            submitted: true,
+            loading: true
+        })
+
+        fetch('/api/login?username=' + obj.username + '&password=' + obj.password,
+            {
+                header: {
+                    "Content-Type": "application/json"
+                },
+                method: "POST",
+                credentials: 'same-origin'
+                //body: JSON.stringify({ obj })
+            }
+        ).then((res) => {
+            if (res.status === '200') {
+                this.setState({
+                    redirect: true
+                });
+            } else if (res.status === '401') {
+                this.setState({
+                    loading: false,
+                    error: true,
+                    open: true,
+                    errorMessage: "Wrong credentials! Your are not allowed to connect"
+                })
+            }
+            //this.setState({ session: res });
+        }).catch((e) => {
+            this.setState({
+                loading: false,
+                error: true,
+                open: true,
+                errorMessage: e.toString()
+            })
+        })
+    }
+
+    render() {
+        console.log("SignInPage render " + this.props.open)
+        return (
+            <Dialog open={this.props.open}>
+                <DialogTitle>Se connecter</DialogTitle>
+                <DialogContent>
+                    <Button
+                        type="submit"
+                        fullWidth
+                        variant="contained"
+                        color="primary"
+                        className=""/*{classes.submit}*/
+                        onClick={() => { this.localLogin() }}
+                    >
+                        Compte local
+                    </Button>
+
+                    <TextField
+                        variant="outlined"
+                        margin="normal"
+                        required
+                        fullWidth
+                        id="username"
+                        label="LDAP Savoir-faire Linux"
+                        name="username"
+                        autoComplete="email"
+                        autoFocus
+                        onChange={(text) => { this.handleusername(text) }}
+                    />
+                    <TextField
+                        variant="outlined"
+                        margin="normal"
+                        required
+                        fullWidth
+                        name="password"
+                        label="Mot de passe"
+                        type="password"
+                        id="password"
+                        autoComplete="current-password"
+                        onChange={(text) => { this.handlePassword(text) }}
+                    />
+                    <FormControlLabel
+                        control={<Checkbox value="remember" color="primary" />}
+                        label="Se rapeller de moi"
+                    />
+                </DialogContent>
+
+                <DialogActions>
+                    <Button
+                        type="submit"
+                        size="medium"
+                        onClick={this.handleSubmit}
+                    >
+                        Se connecter
+                    </Button>
+                </DialogActions>
+            </Dialog>
+        );
+    }
+}
+
+
+export default SignInPage;
\ No newline at end of file
diff --git a/client/src/pages/messenger.jsx b/client/src/pages/messenger.jsx
new file mode 100644
index 0000000..23f3935
--- /dev/null
+++ b/client/src/pages/messenger.jsx
@@ -0,0 +1,81 @@
+import React from 'react';
+import Header from '../components/Header'
+import ContactList from '../components/ContactList'
+import MessageList from '../components/MessageList'
+import SendMessageForm from '../components/SendMessageForm'
+import NewContactForm from '../components/NewContactForm'
+//import Sound from 'react-sound';
+import io from "socket.io-client";
+//const socket = io.connect('http://localhost:3000');
+
+class JamiMessenger extends React.Component {
+
+  constructor() {
+    super()
+    this.state = {
+      messages: [],
+      sound: false
+    }
+
+    /*socket.on('connect', () => {
+      console.log("Success !")
+    })*/
+
+
+    //this.socket = socketIOClient(ENDPOINT);
+    //this.socket.on("FromAPI", data => {
+    //  this.setState({
+    //    messages: [...this.state.messages, data]
+    //  })
+    //});
+    this.sendMessage = this.sendMessage.bind(this)
+  }
+
+  componentDidMount() {
+    /*socket.on('receivedMessage', (data) => {
+      const message = {
+        senderId: '65f6674b26e5af6ed0b4e92a13b80ff4bbfdf1e8',
+        text: data
+      }
+      this.setState({
+        messages: [...this.state.messages, message],
+        sound: true
+      })
+    });*/
+  }
+
+  sendMessage(text) {
+    var data = {
+      senderId: 'Me',
+      destinationId: '65f6674b26e5af6ed0b4e92a13b80ff4bbfdf1e8',
+      text: text
+    }
+    //socket.emit("SendMessage", data);
+    console.log(data.text);
+    this.setState({
+      messages: [...this.state.messages, data],
+      sound: false
+    })
+  }
+  render() {
+    return (
+      <div className="app" >
+        <Header />
+        <ContactList />
+        <MessageList messages={this.state.messages} />
+        <SendMessageForm sendMessage={this.sendMessage} />
+        <NewContactForm />
+        {this.state.sound && <Sound
+          url="stairs.mp3" /*https://notificationsounds.com/message-tones/stairs-567*/
+          playStatus={Sound.status.PLAYING}
+          playFromPosition={0 /* in milliseconds */}
+          onLoading={this.handleSongLoading}
+          onPlaying={this.handleSongPlaying}
+          onFinishedPlaying={this.handleSongFinishedPlaying}
+        />}
+      </div>
+    )
+  }
+}
+
+export default JamiMessenger;
\ No newline at end of file
diff --git a/client/src/serviceWorker.js b/client/src/serviceWorker.js
new file mode 100644
index 0000000..b04b771
--- /dev/null
+++ b/client/src/serviceWorker.js
@@ -0,0 +1,141 @@
+// This optional code is used to register a service worker.
+// register() is not called by default.
+
+// This lets the app load faster on subsequent visits in production, and gives
+// it offline capabilities. However, it also means that developers (and users)
+// will only see deployed updates on subsequent visits to a page, after all the
+// existing tabs open on the page have been closed, since previously cached
+// resources are updated in the background.
+
+// To learn more about the benefits of this model and instructions on how to
+// opt-in, read https://bit.ly/CRA-PWA
+
+const isLocalhost = Boolean(
+  window.location.hostname === 'localhost' ||
+    // [::1] is the IPv6 localhost address.
+    window.location.hostname === '[::1]' ||
+    // 127.0.0.0/8 are considered localhost for IPv4.
+    window.location.hostname.match(
+      /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
+    )
+);
+
+export function register(config) {
+  if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
+    // The URL constructor is available in all browsers that support SW.
+    const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);
+    if (publicUrl.origin !== window.location.origin) {
+      // Our service worker won't work if PUBLIC_URL is on a different origin
+      // from what our page is served on. This might happen if a CDN is used to
+      // serve assets; see https://github.com/facebook/create-react-app/issues/2374
+      return;
+    }
+
+    window.addEventListener('load', () => {
+      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;
+
+      if (isLocalhost) {
+        // This is running on localhost. Let's check if a service worker still exists or not.
+        checkValidServiceWorker(swUrl, config);
+
+        // Add some additional logging to localhost, pointing developers to the
+        // service worker/PWA documentation.
+        navigator.serviceWorker.ready.then(() => {
+          console.log(
+            'This web app is being served cache-first by a service ' +
+              'worker. To learn more, visit https://bit.ly/CRA-PWA'
+          );
+        });
+      } else {
+        // Is not localhost. Just register service worker
+        registerValidSW(swUrl, config);
+      }
+    });
+  }
+}
+
+function registerValidSW(swUrl, config) {
+  navigator.serviceWorker
+    .register(swUrl)
+    .then(registration => {
+      registration.onupdatefound = () => {
+        const installingWorker = registration.installing;
+        if (installingWorker == null) {
+          return;
+        }
+        installingWorker.onstatechange = () => {
+          if (installingWorker.state === 'installed') {
+            if (navigator.serviceWorker.controller) {
+              // At this point, the updated precached content has been fetched,
+              // but the previous service worker will still serve the older
+              // content until all client tabs are closed.
+              console.log(
+                'New content is available and will be used when all ' +
+                  'tabs for this page are closed. See https://bit.ly/CRA-PWA.'
+              );
+
+              // Execute callback
+              if (config && config.onUpdate) {
+                config.onUpdate(registration);
+              }
+            } else {
+              // At this point, everything has been precached.
+              // It's the perfect time to display a
+              // "Content is cached for offline use." message.
+              console.log('Content is cached for offline use.');
+
+              // Execute callback
+              if (config && config.onSuccess) {
+                config.onSuccess(registration);
+              }
+            }
+          }
+        };
+      };
+    })
+    .catch(error => {
+      console.error('Error during service worker registration:', error);
+    });
+}
+
+function checkValidServiceWorker(swUrl, config) {
+  // Check if the service worker can be found. If it can't reload the page.
+  fetch(swUrl, {
+    headers: { 'Service-Worker': 'script' },
+  })
+    .then(response => {
+      // Ensure service worker exists, and that we really are getting a JS file.
+      const contentType = response.headers.get('content-type');
+      if (
+        response.status === 404 ||
+        (contentType != null && contentType.indexOf('javascript') === -1)
+      ) {
+        // No service worker found. Probably a different app. Reload the page.
+        navigator.serviceWorker.ready.then(registration => {
+          registration.unregister().then(() => {
+            window.location.reload();
+          });
+        });
+      } else {
+        // Service worker found. Proceed as normal.
+        registerValidSW(swUrl, config);
+      }
+    })
+    .catch(() => {
+      console.log(
+        'No internet connection found. App is running in offline mode.'
+      );
+    });
+}
+
+export function unregister() {
+  if ('serviceWorker' in navigator) {
+    navigator.serviceWorker.ready
+      .then(registration => {
+        registration.unregister();
+      })
+      .catch(error => {
+        console.error(error.message);
+      });
+  }
+}
diff --git a/client/src/setupTests.js b/client/src/setupTests.js
new file mode 100644
index 0000000..74b1a27
--- /dev/null
+++ b/client/src/setupTests.js
@@ -0,0 +1,5 @@
+// jest-dom adds custom jest matchers for asserting on DOM nodes.
+// allows you to do things like:
+// expect(element).toHaveTextContent(/react/i)
+// learn more: https://github.com/testing-library/jest-dom
+import '@testing-library/jest-dom/extend-expect';
diff --git a/client/webpack.config.js b/client/webpack.config.js
new file mode 100644
index 0000000..84ff411
--- /dev/null
+++ b/client/webpack.config.js
@@ -0,0 +1,35 @@
+const path = require('path')
+const HtmlWebpackPlugin = require('html-webpack-plugin')
+
+module.exports = {
+    entry: path.resolve(__dirname, 'src', 'index.js'),
+    output: {
+        path: path.resolve(__dirname, 'dist'),
+        filename: 'bundle.js',
+        publicPath: '/'
+    },
+    mode: 'development',
+    module: {
+        rules: [
+            {
+                test: /\.jsx?/,
+                exclude: /node_modules/,
+                use: {
+                    loader: 'babel-loader',
+                    options: {
+                        presets: ['@babel/preset-env', '@babel/preset-react']
+                    }
+                }
+            },
+            {
+                test: /\.css$/i,
+                use: ['style-loader', 'css-loader'],
+            }
+        ]
+    },
+    plugins: [
+        new HtmlWebpackPlugin({
+            template: path.resolve(__dirname, 'src', 'index.ejs')
+        })
+    ]
+}
\ No newline at end of file
