add project description

This commit is contained in:
Bartoszkk 2024-09-26 19:18:17 +02:00
parent 508abdf9e3
commit 3328c85c7c
7 changed files with 361 additions and 30 deletions

View File

@ -9,7 +9,8 @@
"version": "0.1.0",
"dependencies": {
"core-js": "^3.8.3",
"vue": "^3.2.13"
"vue": "^3.2.13",
"vue-router": "^4.4.5"
},
"devDependencies": {
"@babel/core": "^7.12.16",
@ -2996,6 +2997,11 @@
"integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==",
"dev": true
},
"node_modules/@vue/devtools-api": {
"version": "6.6.4",
"resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
"integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g=="
},
"node_modules/@vue/reactivity": {
"version": "3.5.6",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.6.tgz",
@ -10950,6 +10956,20 @@
"node": ">=8"
}
},
"node_modules/vue-router": {
"version": "4.4.5",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.4.5.tgz",
"integrity": "sha512-4fKZygS8cH1yCyuabAXGUAsyi1b2/o/OKgu/RUb+znIYOxPRxdkytJEx+0wGcpBE1pX6vUgh5jwWOKRGvuA/7Q==",
"dependencies": {
"@vue/devtools-api": "^6.6.4"
},
"funding": {
"url": "https://github.com/sponsors/posva"
},
"peerDependencies": {
"vue": "^3.2.0"
}
},
"node_modules/vue-style-loader": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz",
@ -12021,7 +12041,8 @@
"version": "7.21.0-placeholder-for-preset-env.2",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
"integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
"dev": true
"dev": true,
"requires": {}
},
"@babel/plugin-syntax-async-generators": {
"version": "7.8.4",
@ -13581,7 +13602,8 @@
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.8.tgz",
"integrity": "sha512-HSYWPqrunRE5ZZs8kVwiY6oWcn95qf/OQabwLfprhdpFWAGtLStShjsGED2aDpSSeGAskQETrtR/5h7VqgIlBA==",
"dev": true
"dev": true,
"requires": {}
},
"@vue/cli-service": {
"version": "5.0.8",
@ -13841,6 +13863,11 @@
}
}
},
"@vue/devtools-api": {
"version": "6.6.4",
"resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
"integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g=="
},
"@vue/reactivity": {
"version": "3.5.6",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.6.tgz",
@ -14088,13 +14115,15 @@
"version": "1.9.5",
"resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
"integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
"dev": true
"dev": true,
"requires": {}
},
"acorn-jsx": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"dev": true
"dev": true,
"requires": {}
},
"acorn-walk": {
"version": "8.3.4",
@ -14156,7 +14185,8 @@
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
"dev": true
"dev": true,
"requires": {}
},
"ansi-colors": {
"version": "4.1.3",
@ -14954,7 +14984,8 @@
"version": "6.4.1",
"resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz",
"integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==",
"dev": true
"dev": true,
"requires": {}
},
"css-loader": {
"version": "6.11.0",
@ -15122,7 +15153,8 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz",
"integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==",
"dev": true
"dev": true,
"requires": {}
},
"csso": {
"version": "4.2.0",
@ -16645,7 +16677,8 @@
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
"integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
"dev": true
"dev": true,
"requires": {}
},
"ieee754": {
"version": "1.2.1",
@ -18036,25 +18069,29 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz",
"integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==",
"dev": true
"dev": true,
"requires": {}
},
"postcss-discard-duplicates": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz",
"integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==",
"dev": true
"dev": true,
"requires": {}
},
"postcss-discard-empty": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz",
"integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==",
"dev": true
"dev": true,
"requires": {}
},
"postcss-discard-overridden": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz",
"integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==",
"dev": true
"dev": true,
"requires": {}
},
"postcss-loader": {
"version": "6.2.1",
@ -18141,7 +18178,8 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz",
"integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==",
"dev": true
"dev": true,
"requires": {}
},
"postcss-modules-local-by-default": {
"version": "4.0.5",
@ -18176,7 +18214,8 @@
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz",
"integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==",
"dev": true
"dev": true,
"requires": {}
},
"postcss-normalize-display-values": {
"version": "5.1.0",
@ -19659,6 +19698,14 @@
}
}
},
"vue-router": {
"version": "4.4.5",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.4.5.tgz",
"integrity": "sha512-4fKZygS8cH1yCyuabAXGUAsyi1b2/o/OKgu/RUb+znIYOxPRxdkytJEx+0wGcpBE1pX6vUgh5jwWOKRGvuA/7Q==",
"requires": {
"@vue/devtools-api": "^6.6.4"
}
},
"vue-style-loader": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz",
@ -19940,7 +19987,8 @@
"version": "8.18.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
"integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
"dev": true
"dev": true,
"requires": {}
}
}
},
@ -20068,7 +20116,8 @@
"version": "7.5.10",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
"integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
"dev": true
"dev": true,
"requires": {}
},
"y18n": {
"version": "5.0.8",

View File

@ -9,7 +9,8 @@
},
"dependencies": {
"core-js": "^3.8.3",
"vue": "^3.2.13"
"vue": "^3.2.13",
"vue-router": "^4.4.5"
},
"devDependencies": {
"@babel/core": "^7.12.16",

View File

@ -1,7 +1,7 @@
<!-- App.vue -->
<template>
<div id="app">
<h1 class="centered">ICING</h1>
<router-view></router-view>
</div>
</template>
@ -12,14 +12,7 @@ export default {
</script>
<style>
.centered {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
font-size: 3em;
}
/* Global styles can be added here */
body {
margin: 0;
}

View File

@ -0,0 +1,36 @@
<!-- src/components/Home.vue -->
<template>
<div id="home">
<h1 class="centered">
<router-link to="/description" class="no-underline">ICING</router-link>
</h1>
</div>
</template>
<script>
export default {
name: 'HomePage',
};
</script>
<style>
.centered {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
font-size: 3em;
margin: 0;
}
.no-underline {
text-decoration: none;
color: inherit;
}
body {
margin: 0;
}
</style>

View File

@ -0,0 +1,226 @@
<!-- src/components/Description.vue -->
<template>
<div id="description" class="content">
<h1 class="title">Project Description</h1>
<div class="project-overview">
<h2 class="section-title">What is Icing?</h2>
<p>
Icing is a simple, lightweight, and efficient phone client designed to replace your daily calling application. It ensures end-to-end encryption of telephone communications by re-implementing SRTP (Secure Real-time Transport Protocol) and ECDH (Elliptic Curve Diffie-Hellman) protocols. SRTP encrypts the communication, while ECDH optimizes performance using a symmetric encryption key.
</p>
</div>
<div class="features">
<h2 class="section-title">Key Features</h2>
<ul>
<li><strong>End-to-End Encryption:</strong> Secure your calls with robust encryption protocols.</li>
<li><strong>Transparency:</strong> If the other party doesn't use Icing, the call remains normal.</li>
<li><strong>Icing Protocol:</strong> An open-source protocol including efficient data compression and an acoustic protocol for transmitting digital data over analog mediums.</li>
</ul>
</div>
<div class="how-it-works">
<h2 class="section-title">How It Works</h2>
<p>
During a call between two Icing users, voices are encrypted, compressed, and transmitted via the telephone network using the Icing Acoustic Protocol, which leverages MFSK (Multiple Frequency-Shift Keying) to transmit digital data over analog audio signals. The data is then decompressed, errors are managed and corrected, and finally decrypted before reaching the recipient.
</p>
</div>
<div class="team">
<h2 class="section-title">Our Team</h2>
<p>
We are a team of five dedicated individuals working on this solution:
</p>
<ul class="team-list">
<li>Bartosz Michalak</li>
<li>Ange Duhayon</li>
<li>Stéphane Corbière</li>
<li>Florian Griffon</li>
<li>Alexis Danlos</li>
</ul>
</div>
<!-- Optional: Link back to Home -->
<p class="back-link-container">
<router-link to="/" class="back-link">Back to Home</router-link>
</p>
</div>
</template>
<script>
export default {
name: 'ProjectDescription',
};
</script>
<style scoped>
/* Theme colors */
:root {
--primary-color: #4CAF50; /* Green accent color */
--background-color: #f5f5f5; /* Light background */
--text-color: #333; /* Dark text */
--secondary-text-color: #777; /* Secondary text color */
}
/* Base styles */
.content {
margin: 20px auto;
max-width: 900px;
padding: 40px;
background-color: var(--background-color);
color: var(--text-color);
border-radius: 8px;
font-family: 'Open Sans', Arial, sans-serif;
position: relative;
overflow: hidden;
}
.title {
font-size: 2.5em;
color: var(--primary-color);
margin-bottom: 30px;
text-align: center;
animation: fadeInDown 1s ease;
}
.section-title {
font-size: 1.8em;
color: var(--primary-color);
margin-top: 40px;
margin-bottom: 20px;
position: relative;
animation: fadeInLeft 1s ease;
}
.section-title::after {
content: '';
width: 50px;
height: 3px;
background-color: var(--primary-color);
position: absolute;
bottom: -10px;
left: 0;
}
p, li {
line-height: 1.6;
font-size: 1.1em;
animation: fadeIn 1s ease;
}
ul {
margin-left: 20px;
list-style-type: disc;
}
.features ul li {
margin-bottom: 10px;
}
.team-list {
list-style-type: none;
padding: 0;
}
.team-list li {
margin-bottom: 8px;
font-weight: bold;
color: var(--text-color);
}
.back-link-container {
text-align: center;
margin-top: 40px;
animation: fadeInUp 1s ease;
}
.back-link {
text-decoration: none;
color: var(--primary-color);
font-weight: bold;
border: 2px solid var(--primary-color);
padding: 10px 20px;
border-radius: 5px;
transition: background-color 0.3s, color 0.3s;
}
.back-link:hover {
background-color: var(--primary-color);
color: #fff;
}
@keyframes fadeInDown {
from {
opacity: 0;
transform: translateY(-20px);
} to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes fadeInLeft {
from {
opacity: 0;
transform: translateX(-20px);
} to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(20px);
} to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes fadeIn {
from {
opacity: 0;
} to {
opacity: 1;
}
}
/* Responsive Design */
@media (max-width: 768px) {
.content {
padding: 20px;
}
.title {
font-size: 2em;
}
.section-title {
font-size: 1.5em;
}
p, li {
font-size: 1em;
}
}
@media (max-width: 480px) {
.content {
padding: 15px;
}
.title {
font-size: 1.8em;
}
.section-title {
font-size: 1.2em;
}
p, li {
font-size: 0.9em;
}
}
</style>

View File

@ -1,4 +1,6 @@
import { createApp } from 'vue'
import App from './App.vue'
// src/main.js
import { createApp } from 'vue';
import App from './App.vue';
import router from './router';
createApp(App).mount('#app')
createApp(App).use(router).mount('#app');

24
my-vue-app/src/router.js Normal file
View File

@ -0,0 +1,24 @@
// src/router.js
import { createRouter, createWebHistory } from 'vue-router';
import HomePage from './components/HomePage.vue';
import ProjectDescription from './components/ProjectDescription.vue';
const routes = [
{
path: '/',
name: 'HomePage',
component: HomePage,
},
{
path: '/description',
name: 'ProjectDescription',
component: ProjectDescription,
},
];
const router = createRouter({
history: createWebHistory(),
routes,
});
export default router;