Merged PR 84: Profile into main

This commit is contained in:
Dominic Villemure
2024-06-30 00:47:24 +00:00
64 changed files with 4087 additions and 11214 deletions

View File

@@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en" class="dark">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">

20
package-lock.json generated
View File

@@ -1286,11 +1286,11 @@
} }
}, },
"node_modules/braces": { "node_modules/braces": {
"version": "3.0.2", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dependencies": { "dependencies": {
"fill-range": "^7.0.1" "fill-range": "^7.1.1"
}, },
"engines": { "engines": {
"node": ">=8" "node": ">=8"
@@ -2013,9 +2013,9 @@
} }
}, },
"node_modules/fill-range": { "node_modules/fill-range": {
"version": "7.0.1", "version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dependencies": { "dependencies": {
"to-regex-range": "^5.0.1" "to-regex-range": "^5.0.1"
}, },
@@ -2060,9 +2060,9 @@
"dev": true "dev": true
}, },
"node_modules/follow-redirects": { "node_modules/follow-redirects": {
"version": "1.15.5", "version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
"integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
"funding": [ "funding": [
{ {
"type": "individual", "type": "individual",

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
public/medias/hutopy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

View File

@@ -1,11 +1,101 @@
<template> <template>
<v-app> <v-app>
<RouterView> <div class="m-0 flex flex-column h-screen">
<Header @toggle-sidebar="toggleSidebar" class="fixed w-full z-50 top-0 p-2"></Header>
<div class="flex flex-row relative">
<div
@mouseenter="openSidebar"
class="fixed h-full w-2 z-20"
style="background: transparent;"
></div>
<transition name="slide-fade">
<div v-show="!hideSideBar"
@mouseleave="startCloseSidebarTimer"
@mouseenter="clearCloseSidebarTimer"
class=" fixed h-full min-w-60 border-r-2 bg-white z-30 transition-transform duration-700">
<SideBar></SideBar>
</div>
</transition>
</RouterView> <div class="flex flex-col w-full md:ml-1 mt-16" style="background-color: #f4f4f4">
<RouterView></RouterView>
<Footer></Footer>
</div>
</div>
</div>
</v-app> </v-app>
</template> </template>
<script setup> <script setup>
import Header from "@/views/main/Header.vue";
import Footer from "@/views/main/Footer.vue";
import SideBar from "@/views/main/SideBar.vue";
import {ref, onMounted, onUnmounted} from 'vue';
import StripePayment from "@/views/StripePayment.vue";
import {eventBus} from '@/eventBus.js';
const hideSideBar = ref(false);
const showPopup = ref(false);
const popup = ref(null);
const popupButton = ref(null);
let closeSidebarTimer = null;
const toggleSidebar = () => {
hideSideBar.value = !hideSideBar.value;
};
const openSidebar = () => {
clearCloseSidebarTimer();
hideSideBar.value = false;
};
const startCloseSidebarTimer = () => {
closeSidebarTimer = setTimeout(() => {
hideSideBar.value = true;
}, 500);
};
const clearCloseSidebarTimer = () => {
clearTimeout(closeSidebarTimer);
};
const handleClickOutside = (event) => {
if (
popup.value &&
!popup.value.contains(event.target) &&
!popupButton.value.contains(event.target) &&
!event.target.closest('.bg-purple')
) {
showPopup.value = false;
}
if (
!event.target.closest('.w-48') &&
!event.target.closest('.v-app-bar-nav-icon')
) {
hideSideBar.value = true;
}
};
onMounted(() => {
document.addEventListener('click', handleClickOutside);
eventBus.value.toggleSidebar = toggleSidebar;
});
onUnmounted(() => {
document.removeEventListener('click', handleClickOutside);
eventBus.value.toggleSidebar = null;
});
</script> </script>
<style scoped>
/* Do not remove. Used for animation */
.slide-fade-enter-active, .slide-fade-leave-active {
transition: transform 0.7s ease, opacity 0.7s ease;
}
.slide-fade-enter, .slide-fade-leave-to {
transform: translateX(-100%);
opacity: 0;
}
</style>

3
src/eventBus.js Normal file
View File

@@ -0,0 +1,3 @@
import { ref } from 'vue';
export const eventBus = ref({});

View File

@@ -1,265 +0,0 @@
<template>
<body style="background-color: #f4f4f4;">
<!-- PC Version -->
<v-card style="z-index: 1000; background-color: #ffff;" class="hidden-sm-and-down" elevation="5">
<v-container style="z-index: 2000; margin-bottom: .8%; margin-top: -.3%; margin-right: 1%;">
<v-row justify="end" style="margin-top: .2%; margin-bottom: -1.2%;">
<v-menu>
<template v-slot:activator="{ props }">
<v-row>
<!-- Colonne de droite -->
<v-col class="text-right d-flex align-center justify-end">
<div class="d-flex align-center">
<img src="/images/usersmedia/anonyme/profilepictures/profileAnonymeSquare.png"
class="header-profile-icon mr-2" alt="Logo">
<v-btn flat style="min-width: 200px; font-size: 1.3rem;" dark v-bind="props" ref="walletActivator">
{{ currentUserName }}
</v-btn>
</div>
</v-col>
</v-row>
</template>
<!-- Dropdown Menu Profile/Connection -->
<v-list style="padding: 0;">
<v-list-item v-if="!currentUser">
<router-link :to="{ name: 'contact' }">
<v-btn class="full-width-btn" flat>Inscription</v-btn>
</router-link>
</v-list-item>
<v-list-item v-if="currentUser">
<v-btn @click="openWalletDialog" class="full-width-btn" flat>
<v-icon left class="mr-4">mdi-wallet</v-icon>
<p>Bourse</p>
</v-btn>
</v-list-item>
<v-list-item v-if="currentUser">
<router-link :to="{ name: 'yourprofile' }">
<v-btn class="full-width-btn" flat>
<v-icon left class="mr-4">mdi-account-details</v-icon>
<p>Mon profil</p>
</v-btn>
</router-link>
</v-list-item>
<v-list-item v-if="currentUser">
<v-btn @click="logout" class="full-width-btn" flat>Déconnecter</v-btn>
</v-list-item>
</v-list>
</v-menu>
</v-row>
</v-container>
</v-card>
<!-- Mobile version -->
<v-card style="z-index: 2000; background-color: #f4f4f4;" class="hidden-md-and-up">
<v-app-bar app>
<v-app-bar-nav-icon @click.stop="drawer = !drawer"></v-app-bar-nav-icon>
<v-row>
<v-col cols="11" class="d-flex align-center justify-center">
<!-- Logo Top bar -->
<img src="/images/hutopymedia/banners/hutopy.png" class="mobile-header" alt="Logo">
</v-col>
</v-row>
</v-app-bar>
<!-- Left-side Menu -->
<v-navigation-drawer v-model="drawer" temporary>
<v-list>
<v-list-item :title="currentUserName">
<template v-slot:prepend>
<img src="/images/usersmedia/anonyme/profilepictures/profileAnonymeSquare.png"
class="mobile-profile-picture mini-profile-picture" alt="Avatar">
</template>
</v-list-item>
</v-list>
<!-- Left-side Button -->
<v-divider></v-divider>
<v-list density="compact" nav>
<h1 class="h1-navigation">Navigation</h1>
<router-link :to="{ name: 'home' }">
<v-list-item prepend-icon="mdi-home" title="Accueil" value="home"></v-list-item>
</router-link>
<router-link :to="{ name: 'userbrowser' }">
<v-list-item prepend-icon="mdi-account-multiple" title="Créateurs" value="friends"></v-list-item>
</router-link>
<router-link :to="{ name: 'contact' }">
<v-list-item prepend-icon="mdi-handshake" title="Aidez-nous" value="friends"></v-list-item>
</router-link>
<router-link :to="{ name: 'yourprofile' }">
<v-list-item prepend-icon="mdi-account-details" title="Mon profil" value="friends"> </v-list-item>
</router-link>
<v-list-item v-if="currentUser" @click="openWalletDialog" prepend-icon="mdi-wallet" title="Bourse"
value="wallet"></v-list-item>
<v-list-item v-if="currentUser" @click="logout" style="margin-top: 110%;" prepend-icon="mdi-logout"
title="Déconnecter" value="logout"></v-list-item>
</v-list>
</v-navigation-drawer>
</v-card>
<!-- Wallet Modal -->
<v-dialog v-model="walletDialog" transition="dialog-top-transition" width="auto">
<v-card style="border-radius: 30px;">
<div class="text-center" style="margin-top: 2%; margin-bottom: 2%;">
<v-icon left size="48">mdi-wallet</v-icon>
<v-toolbar title="Portefeuille"
style="color: white; width: 750px; background-color: #a30e79; margin-bottom: -6%;"></v-toolbar>
</div>
<v-card-text class="text-h1 pa-12">
<v-row>
<v-col>
<v-row>
<v-col class="text-center">
<h1 style="margin-bottom: -4px; font-size: 1.3rem;">Balance actuelle</h1>
<h1 style=" margin-bottom: -45px; font-size: 3.5rem;">{{ currentUser.totalBalance }}$</h1>
</v-col>
</v-row>
</v-col>
</v-row>
</v-card-text>
<v-data-table-virtual fixed-header :headers="headers" :items="currentUser.userTransactions" height="250"
item-value="name">
</v-data-table-virtual>
<v-dialog activator="#activator-target" max-width="650">
<template v-slot:default="{ isActive }">
<v-card prepend-icon="mdi-file-document-edit" text="Découvrez Hutopy, l'endroit où la valorisation de votre travail atteint son apogée. Avec une commission réduite à seulement 9 %, notre engagement envers votre succès est palpable. Chaque pourcentage prélevé est réinvesti avec soin pour catalyser votre croissance : du développement de fonctionnalités innovantes à la maintenance d'une infrastructure technologique de pointe, en passant par un support utilisateur de premier ordre. Notre objectif ? Amplifier votre expansion et garantir une expérience utilisateur sans précédent.
Pour chaque transaction, un frais minime assure la sécurité et la fiabilité de vos paiements, grâce à un partenaire de confiance à la renommée mondiale. Ce dernier sécurise pour des milliards en transactionchaque année pour une diversité d'entreprises, allant des startups dynamiques aux conglomerats établis. Ce gage de sécurité est disponible pour une modique somme : 2,9 % plus 0,30 $ par transaction, une petite contribution pour la tranquillité d'esprit et la protection de vos revenus.
Notre modèle tarifaire a été pensé dans un esprit de simplicité et de transparence, avec l'ambition ultime d'optimiser vos gains. Chez Hutopy, la notion de partenariat prend tout son sens : votre épanouissement est au cœur de nos préoccupations. Bénéficiez d'une plateforme qui élargit votre horizon créatif et entrepreneurial, tout en vous assurant que vos intérêts sont précieusement gardés.
Hutopy est plus qu'une plateforme ; c'est une communauté où la transformation de la passion en profit devient réalité, grâce au soutien indéfectible d'une équipe dévouée à enrichir votre parcours. Nous vous invitons à nous rejoindre pour explorer ensemble les avenues de succès que nous pouvons emprunter ensemble, tout en vous garantissant une part conséquente de vos revenus. Embarquez dans une aventure où votre présence en ligne ne connaît pas de limites, soutenue par Hutopy, votre allié dans la quête du succès.
" title="Comission">
<template v-slot:actions>
<v-btn class="ml-auto" text="Close" @click="isActive.value = false"></v-btn>
</template>
</v-card>
</template>
</v-dialog>
<v-card-actions class="justify-center">
<v-row justify="center">
<v-btn id="activator-target">
Comisssion
</v-btn>
<v-btn @click="walletDialog = false" text="Fermer"></v-btn>
</v-row>
</v-card-actions>
</v-card>
</v-dialog>
</body>
</template>
<script async setup>
import MyUserModel from "@/models/myUserModel.js";
import { useClient } from "@/plugins/api.js";
import { onBeforeMount, ref } from 'vue';
import { useRouter } from 'vue-router';
const client = useClient();
const router = useRouter();
const drawer = ref(false);
const currentUserName = ref("INVITÉ");
const walletDialog = ref(false);
let currentUser = null;
const headers = ref([
{ title: 'Montant', value: 'amount', width: '20%', key: "amount" },
{ title: 'Date', value: 'created', width: '20%', key: "created" },
{ title: 'Message', value: 'tipMessage', width: '60%' }
]);
onBeforeMount(async () => {
try {
const myUser = await client.get("/api/GetMyUser");
const currentUserModel = MyUserModel.createFromApiResult(myUser.data);
currentUser = currentUserModel;
currentUserName.value = currentUserModel.firstName + " " + currentUserModel.lastName;
} catch (error) {
console.log("User not logged");
}
});
function logout() {
localStorage.removeItem('jwt');
currentUser = null;
currentUserName.value = "INVITÉ";
router.push('/');
}
function openWalletDialog() {
walletDialog.value = true;
}
</script>
<style scoped>
.full-width-btn {
width: 100%;
text-align: left;
padding-left: 24px;
padding-right: 24px;
z-index: 1001;
}
.mini-profile-picture {
border-radius: 100px;
}
.header-profile-icon {
height: 60px;
width: 60px;
border-radius: 50px;
border: 2px solid #a30e79;
}
.mobile-profile-picture {
height: 40px;
border-radius: 50px;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2);
border: 2px solid #a30e79;
margin-right: 10px;
}
.header-banner {
border-top: 5px solid rgba(107, 0, 101, 1);
margin-top: 15%;
}
.social-container {
background-color: #006d77;
margin-top: -20%;
font-size: 1.4rem;
font-weight: 800;
color: white;
}
.social-container2 {
background-color: #0baab2;
font-size: 1.4rem;
font-weight: 800;
color: white;
}
.mobile-header {
height: 50px;
width: auto;
border-radius: 10px;
}
.mobile-navigation-container {
background-color: #a30e79;
}
.h1-navigation {
padding-left: 20%;
font-size: 1.4rem;
font-weight: 800;
}
</style>

View File

@@ -1,155 +0,0 @@
<template>
<body style="background-color: #f4f4f4;">
<v-container style="background-color: #f4f4f4;">
<div style="background-color: #f4f4f4; min-height: 10vh; display: flex; flex-direction: column;"
class="footer-align">
<!-- Hutopy footer logo -->
<v-container style="background-color: #f4f4f4">
<v-row justify="center" style="margin-top: 30px;">
<v-col cols="5" lg="5" md="5" sm="12" xs="7">
<router-link :to="{ name: 'home' }">
<v-img src="/images/hutopymedia/banners/hutopy.png" class="hutopy-footer-picture"></v-img>
</router-link>
</v-col>
</v-row>
</v-container>
<!-- Hutopy Social network links -->
<v-container>
<!-- Facebook link -->
<v-row justify="center">
<v-col cols="auto">
<a href="https://www.facebook.com/profile.php?id=61556819217561">
<img class="icons" src="/images/hutopymedia/icons/pink/facebookpink.png" alt="Description image 2">
</a>
</v-col>
<!-- Instagram link -->
<v-col cols="auto">
<a href="https://www.instagram.com/hutopy.inc/">
<img src="/images/hutopymedia/icons/pink/instagrampink.png" alt="Description image 3" class="icons">
</a>
</v-col>
<!-- Need X Account -->
<v-col cols="auto">
<a href="https://twitter.com/Hutopyinc">
<img src="/images/hutopymedia/icons/pink/xpink.png" alt="Description image 1" class="icons">
</a>
</v-col>
</v-row>
</v-container>
<!-- Loop for social network links -->
<v-container class="text-center" style="flex-grow: 1;">
<router-link v-for="link in links" :key="link" :to="getLinkUrl(link)"
class="mx-2 text-decoration-none text-black">
<v-btn class="black--text" rounded="xl" variant="text">{{ link }}</v-btn>
</router-link>
</v-container>
<v-container class="text-black text-center ">
{{ new Date().getFullYear() }} <strong>Hutopy v.01</strong>
</v-container>
</div>
</v-container>
</body>
</template>
<script setup>
const links = [
'Aide & Contact',
'FAQ',
'Guide pour les créateurs',
'Conditions générales',
'Politique de Contenu',
'À Propos',
'Frais'
];
const linkRoutes = {
'Aide & Contact': { name: 'helpandcontact' },
'FAQ': { name: 'FAQ' },
'Guide pour les créateurs': { name: 'guideforcreators' },
'Conditions générales': { name: 'termsandconditions' },
'Politique de Contenu': { name: 'contentpolicy' },
'À Propos': { name: 'about' },
'Frais': { name: 'frais' }
};
// If broken link, redirect to home page.
const getLinkUrl = (link) => linkRoutes[link] || { name: 'home' };
</script>
<style>
.icons {
width: 50px;
height: auto;
}
.hutopy-footer-picture {
height: 70px;
margin-bottom: 3%;
min-height: 70px;
min-width: auto;
}
.custom-footer {
padding: 10px;
}
.no-margin {
margin: 0 !important;
}
footer {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
background-color: rgba(107, 0, 101, 1);
}
footer a:not(:last-child) {
margin-right: 20px;
}
.footertextcolor {
margin-top: 5px;
margin-bottom: 40px;
color: azure;
}
.socialiconspacer {
margin-top: 25px;
}
.custom-color-button {
background-color: rgb(255, 0, 0);
color: white;
font-size: 1.5rem;
margin-top: 40px;
margin-bottom: 40px;
}
.background {
background-color: rgba(107, 0, 101, 1);
}
@media (min-width: 150px) and (max-width: 598px) {
.hutopy-footer-picture {
min-width: 200px;
margin-left: -15px;
}
}
</style>

View File

@@ -1,964 +0,0 @@
<template>
<DefaultLayout style="margin-bottom: 30px"></DefaultLayout>
<!-- Router Info and user informations
<v-container style="margin-top: -1%; margin-bottom: 2%;">
<v-row>
<v-col align="center">
<div>
<p>Router : {{ selectedUsername }}</p>
<div v-if="PublicCreatorData">
<h1>{{ PublicCreatorData.userName }}</h1>
<h1>{{ PublicCreatorData.firstName }} {{ PublicCreatorData.lastName }}</h1>
</div>
<div v-else>
<p v-if="errorMessage">{{ errorMessage }}</p>
</div>
<form @submit.prevent="manualFetch">
<input v-model="manualUsername" placeholder="Enter username" />
<button type="submit">Fetch User</button>
</form>
</div>
</v-col>
</v-row>
</v-container>
-->
<div style="background-color: #f4f4f4;">
<!-- Mobile -->
<v-row class="fluid hidden-md-and-up social-mobile-container"
style="margin-top: -10px; position: relative; z-index: 0;" hidden-md-and-down>
<v-col cols="12" class="pa-0" style="width: 100vw; overflow: hidden;">
<v-img class="profile-banner" max-height="375" :src="imageSrc" cover
style="box-shadow: 0 4px 6px rgba(0, 0, 0, 0.8);"></v-img>
</v-col>
</v-row>
<!-- PurpleLine -->
<v-row style="background-color: #6b0065; height: 5px; box-shadow: rgba(0, 0, 0, 0.7);"></v-row>
<!-- Profile picture -->
<v-row class="d-flex justify-center align-center d-sm-none" style="margin-top: 50px; margin-bottom: -10px">
<v-img :src="profilePicture" class="elevation-4 mobile-profile-picture-creator"></v-img>
</v-row>
<!-- User Social Network Links -->
<v-container style="margin-top: -70px; padding: 0;" class="hidden-md-and-up social-container-mobile-icons"
hidden-md-and-down>
<!-- Facebook -->
<v-row no-gutters class="d-flex justify-space-between align-center"
style="margin-left: 3%; margin-right: 3%;">
<v-col cols="2" sm="2" xs="3" style="margin-top: 60px; z-index: 50;"
class="d-flex justify-center align-center">
<a href="https://www.facebook.com/GuillaumeMousseau222">
<v-img class="socialicons-mobile" src="/images/hutopymedia/icons/black/facebookblack.png"
alt="Facebook"></v-img>
</a>
</v-col>
<!-- Instagram -->
<v-col cols="2" sm="2" xs="3" style="margin-top: 60px; z-index: 50;"
class="d-flex justify-center align-center">
<a href="https://www.instagram.com/guillaumeaime/">
<v-img class="socialicons-mobile" src="/images/hutopymedia/icons/black/instagramblack.png"
alt="Instagram"></v-img>
</a>
</v-col>
<!-- Profile picture - Small -->
<v-col cols="4" sm="4" xs="0" class="hidden-xs">
<v-row class="d-flex justify-center align-center">
<v-img :src="profilePicture" class="elevation-4 mobile-profile-picture-creator"></v-img>
</v-row>
</v-col>
<!-- TikTok -->
<v-col cols="2" sm="2" xs="3" style="margin-top: 60px; z-index: 50;"
class="d-flex justify-center align-center">
<a href="https://www.tiktok.com/@guillaumeaime">
<v-img class="socialicons-mobile invert-color"
src="/images/hutopymedia/icons/white/tiktokwhite.png" alt="TikTok"></v-img>
</a>
</v-col>
<v-spacer class="hidden-xs"> </v-spacer>
</v-row>
<!-- User informations Name title and description -->
<v-row class="social-container-mobile">
<v-col cols="12" xs="12" sm="4" class="d-flex justify-center">
<v-row class="d-flex justify-center">
{{ name }}
</v-row>
</v-col>
<v-spacer xs="12" sm="4"></v-spacer>
<v-col cols="12" xs="12" sm="4" class="d-flex justify-center">
<v-row class="d-flex justify-center">
{{ title }}
</v-row>
</v-col>
</v-row>
<v-row>
<v-container
style="border-bottom-left-radius: 15px; margin-top: -12px; border-bottom-right-radius: 15px;"
class="social-icon-group-mobile">
<v-expansion-panels style="min-width: 320px;">
<v-col cols="12" offset="-1">
<v-expansion-panel class="background-pink text-justify" style="color: white;"
text="Mettre en lumière le côté humain des entrepreneurs. Chaque service, chaque produit est porteur dune histoire, dune passion, dune vision unique. Mon objectif est de faire rayonner cette unicité, de créer des connexions authentiques entre ces entrepreneurs et leurs clients potentiels. Parce que derrière chaque entreprise, il y a des personnes inspirantes qui méritent dêtre entendues et comprises. Et toi, quel est ton objectif pour cette année?"
title="À propos : Ma mission est claire :"></v-expansion-panel>
</v-col>
</v-expansion-panels>
</v-container>
</v-row>
</v-container>
<!-- Bannière Pc -->
<v-row class="fluid hidden-sm-and-down" style="margin-top: -65px; position: relative; z-index: 0;"
hidden-sm-and-up>
<v-col cols="12" class="pa-0" style="width: 100vw; overflow: hidden;">
<v-img class="profile-banner" max-height="375" :src="imageSrc" cover
style="box-shadow: 0 4px 6px rgba(0, 0, 0, 0.8);"></v-img>
</v-col>
</v-row>
<v-row class="hidden-sm-and-down"
style="background-color: #6b0065; height: 5px; box-shadow: rgba(0, 0, 0, 0.7);" hidden-sm-and-up></v-row>
<!-- Core (Menu / Center / Donation) -->
<v-row>
<!-- Menu -->
<v-col cols="2" md="3" lg="3" xl="3" xxl="2" class="hidden-sm-and-down menu-col" hidden-sm-and-down>
<v-col style="margin: 0;">
<v-row class="Hutopy-menu-sticky-mobile">
<v-spacer></v-spacer>
<v-col>
<v-container style=" overflow-y: hidden;">
<!-- Nav-Btn -->
<v-col cols="12" class="px-0">
<v-img src="/images/hutopymedia/banners/hutopy.png" alt="Description de l'image"
style="height: 150px; width: 300px;" class="mx-auto" :elevation="10"></v-img>
<v-list dense class="main-background">
<v-list-item v-for="item in navigationItems" :key="item.link">
<router-link :to="item.link">
<v-btn text class="d-flex align-start align-center main-background"
elevation="0" outlined="false">
<v-icon left class="mr-4">{{ item.icon }}</v-icon>
{{ item.text }}
</v-btn>
</router-link>
</v-list-item>
</v-list>
</v-col>
</v-container>
</v-col>
</v-row>
<v-row style="height: 300px;"></v-row>
</v-col>
</v-col>
<!-- Profile Info Picture name title & description -->
<v-col class="middle-col" style="z-index: 5;" cols="12" xs="12" sm="12" md="6" lg="6" xl="6" xxl="8">
<div v-if="PublicCreatorData">
<v-row class="d-flex justify-center align-center">
<v-col xl="10" xxl="8">
<v-container class="profile-container hidden-sm-and-down" hidden-md-and-up>
<v-container>
<v-img :src="profilePicture"
class="elevation-4 mobile-profile-picture-creator"></v-img>
<!-- User informations Name & title -->
<v-container class="background-profile-container" style="margin-top: -8%;">
<v-row>
<v-col style="height: 50px;" cols="7" offset="2" class="social-container">
<h1 class="name-info">{{ PublicCreatorData.userName }}</h1>
</v-col>
<v-col></v-col>
</v-row>
<v-row>
<v-col style="height: 50px;" cols="6" offset="2" class="social-container2">
<h1 class="occupation-info">{{ title }}</h1>
</v-col>
<v-col></v-col>
</v-row>
<!-- User Social Network Links -->
<v-row>
<v-spacer></v-spacer>
<v-col cols="7" style="margin-top: 1%; margin-bottom: -2%;">
<v-row>
<a href="https://www.facebook.com/GuillaumeMousseau222">
<img class="socialicons"
src="/images/hutopymedia/icons/black/facebookblack.png"
alt="Description image 2">
</a>
<a href="https://www.instagram.com/p/C2f-3UnNdfX/">
<img class="socialicons"
src="/images/hutopymedia/icons/black/instagramblack.png"
alt="Description image 2">
</a>
<a href="https://www.tiktok.com/@guillaumeaime">
<img class="socialicons invert-color"
src="/images/hutopymedia/icons/white/tiktokwhite.png"
alt="Description image 2">
</a>
</v-row>
</v-col>
<v-col background-color="primary"></v-col>
</v-row>
<!-- Description -->
<v-row>
<v-container
style="border-bottom-left-radius: 15px; border-bottom-right-radius: 15px; margin-top: 15px;">
<v-expansion-panels style="min-width: 320px;">
<v-col cols="12" offset="-1">
<v-expansion-panel class="background-pink text-justify"
style="color: white;"
text="Mettre en lumière le côté humain des entrepreneurs. Chaque service, chaque produit est porteur dune histoire, dune passion, dune vision unique. Mon objectif est de faire rayonner cette unicité, de créer des connexions authentiques entre ces entrepreneurs et leurs clients potentiels. Parce que derrière chaque entreprise, il y a des personnes inspirantes qui méritent dêtre entendues et comprises. Et toi, quel est ton objectif pour cette année?"
title="À propos : Ma mission est claire :">
</v-expansion-panel>
</v-col>
</v-expansion-panels>
</v-container>
</v-row>
</v-container>
</v-container>
</v-container>
</v-col>
</v-row>
<v-row class="d-flex justify-center align-center">
<v-col xl="10" xxl="8">
<PostContentMenu style="margin-top: -30px;"></PostContentMenu>
</v-col>
</v-row>
</div>
<div v-else>
<v-row class="d-flex justify-center align-center">
<v-col xl="10" xxl="8" align="center">
<v-card class="pa-5" elevation="2" style="max-width: 400px;">
<v-row class="d-flex justify-center align-center">
<v-icon size="128" color="grey">mdi-magnify</v-icon>
</v-row>
<v-row class="d-flex justify-center align-center">
<p>L'utilisateur <span style="color: red;">{{ selectedUsername }}</span> n'a pas
été trouvé</p>
</v-row>
</v-card>
</v-col>
</v-row>
</div>
</v-col>
<!-- Large-Monitor-RightCol Donation -->
<v-col cols="2" md="3" lg="3" xl="2" xxl="2" class="hidden-sm-and-down" hidden-sm-and-up>
<v-row>
<v-col>
<v-container class="sticky-bottom-label Je-soutien-container"
style="max-width: 400px ; bottom: 0;">
<!-- Donnation -->
<v-card style="border-radius: 20px;">
<v-container>
<v-row class="mb-0"
style="background-color: #6b0065; margin-left: -24px; margin-right: -24px; margin-top: -20px; justify-content: center;">
<v-card-title class="text-soutiens" style="margin-top: 15px;">
JE SOUTIENS!
</v-card-title>
</v-row>
<StripePayment></StripePayment>
</v-container>
</v-card>
</v-container>
<v-container style="height: 300px;">
</v-container>
</v-col>
<v-spacer>
</v-spacer>
</v-row>
</v-col>
</v-row>
<v-snackbar v-model="errorSnackBar">
{{ snackBarMessage }}
<template v-slot:actions>
<v-btn color="red" variant="text" @click="errorSnackBar = false">Fermer</v-btn>
</template>
</v-snackbar>
<!-- Mobile Donation -->
<v-col class="hidden-md-and-up sticky-bottom-label" hidden-sm-and-down
style="background-color: #6b0065; margin-top: 30px; text-align: center;">
<!-- Barre cliquable pour ouvrir le drawer -->
<v-btn @click="drawerbottom = !drawerbottom" elevation="0"
style="background-color: #6b0065; color: white; text-align: center;" class="text-soutiens ">
JE SOUTIENS
</v-btn>
</v-col>
<!-- Drawer du bas -->
<template>
<div>
<v-bottom-sheet v-model="drawerbottom" class="sticky-bottom-label" hide-overlay>
<v-container style="background-color: #6b0065; color: white; padding: 20px; text-align: center;">
<h1 class="text-soutiens">JE SOUTIENS</h1>
<StripePayment></StripePayment>
</v-container>
</v-bottom-sheet>
</div>
</template>
</div>
<FooterLayout></FooterLayout>
</template>
<script setup>
import DefaultLayout from '@/layouts/DefaultLayout.vue';
import FooterLayout from '@/layouts/FooterLayout.vue';
import { useClient } from "@/plugins/api.js";
import { computed, onMounted, ref, watch } from 'vue';
import { useRoute } from 'vue-router';
import StripePayment from '../views/StripePayment.vue';
const PublicCreatorData = ref(null);
const selectedUsername = ref('');
const route = useRoute();
const client = useClient();
let errorSnackBar = ref(false);
let snackBarMessage = ref('');
const errorMessage = ref('');
let imageSrc = '/images/usersmedia/guillaumeMousseau/banners/bannerGuillaumeMousseau01.png';
let profilePicture = '/images/usersmedia/guillaumeMousseau/profilepictures/profileGuillaumeMousseau01.png';
let drawerbottom = ref(false);
const name = computed(() => {
return PublicCreatorData.value ? PublicCreatorData.value.userName : '';
});
const title = 'Créateur de contenus';
let navigationItems = [
{ icon: 'mdi-home', text: 'Accueil', link: 'home' },
{ icon: 'mdi-account-group', text: 'Utilisateur', link: '/userbrowser' },
{ icon: 'mdi-handshake', text: 'Aidez-nous', link: '/contact' },
];
const fetchUser = async (username) => {
console.log(`Fetching user: ${username}`);
try {
const response = await client.get(`/api/Users`, {
params: {
UserName: username
}
});
const data = response.data;
console.log(`Data received: `, data);
if (data && Object.keys(data).length > 0 && (data.userName || data.firstName || data.lastName)) {
PublicCreatorData.value = data; // Met à jour la référence réactive
errorMessage.value = '';
errorSnackBar.value = false;
} else {
PublicCreatorData.value = null; // Réinitialise la référence si l'utilisateur n'est pas trouvé
errorMessage.value = "Utilisateur non trouvé";
snackBarMessage.value = "Utilisateur non trouvé";
errorSnackBar.value = true;
}
} catch (error) {
console.error(`Error fetching user: ${error}`);
PublicCreatorData.value = null;
errorMessage.value = "Erreur lors de la récupération des données";
snackBarMessage.value = "Erreur lors de la récupération des données";
errorSnackBar.value = true;
}
};
const updateUser = () => {
selectedUsername.value = route.params.username;
console.log(`Route username: ${selectedUsername.value}`);
if (selectedUsername.value) {
fetchUser(selectedUsername.value);
}
};
onMounted(updateUser);
watch(() => route.params.username, updateUser);
</script>
<style scoped>
.invert-color {
filter: invert(1);
}
.Hutopy-menu-sticky-mobile {
position: sticky;
top: 0;
bottom: 0;
left: 0;
width: 100%;
z-index: 1000;
margin-top: -40px;
}
.sticky-bottom-label {
position: sticky;
top: 0;
bottom: 0;
left: 0;
width: 100%;
z-index: 1000;
margin-top: 20px;
}
.sticky-top-label {
position: sticky;
bottom: 0;
right: 10%;
width: 100%;
z-index: 1000;
}
.text-soutiens {
margin-bottom: 15px;
color: white;
font-size: 1.5rem;
letter-spacing: 7px;
text-align: center;
}
.name-info {
margin-top: -10px;
margin-left: 15%;
}
.occupation-info {
margin-left: 15%;
font-size: large;
}
.name-info-mobile {
margin-left: 22px;
font-size: 1.3rem
}
.main-background {
background-color: #f4f4f4;
}
.profile-container {
margin-top: -16%;
}
.btn-custom {
width: 100%;
background-color: transparent;
}
.background-profile-container {
background-color: #ececec;
color: white;
border-top: 3px solid #a30e79;
border-right: 3px solid #a30e79;
font-weight: 700;
font-size: 1.15rem;
border-radius: 25px;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.3)
}
.background-pink {
background-color: #cc6f91;
color: white;
font-weight: 400;
}
.label-text {
font-weight: 400;
margin-left: 3%;
font-size: 1rem;
}
.profile-name {
margin-top: -15%;
}
.socialicons {
width: 35px;
max-width: 100px;
margin-top: 3px;
margin-left: 40px;
}
.socialicons-mobile {
width: 35px;
max-width: 100px;
margin-top: 27px;
margin-left: 20px;
}
.youtube-card {
margin-left: 2%;
margin-right: 2%;
border-radius: 15px;
background-color: #f4f4f4;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.4)
}
.card-title {
font-size: 1.4rem;
margin-top: 10px;
}
.card-date {
margin-left: 10px;
margin-top: -18px;
margin-bottom: -20px;
font-size: .8rem;
}
.social-container {
background-color: #006d77;
border-top-right-radius: 30px;
border-bottom-right-radius: 30px;
font-size: 1.7rem;
font-weight: 600;
color: white;
}
.social-container2 {
background-color: #0baab2;
border-bottom-right-radius: 30px;
font-size: 1.4rem;
font-weight: 500;
color: white;
}
.social-container-mobile {
background-color: #006d77;
font-size: 1.4rem;
font-weight: 600;
color: white;
z-index: 1000;
margin: auto;
text-align: center;
}
.social-container2-mobile {
background-color: #0baab2;
z-index: 1000;
font-size: 1.2rem;
font-weight: 500;
color: white;
}
.social-icon-group-mobile {
background-color: #0baab2;
}
.mini-profile-picture {
border-radius: 100px;
}
.btn-card-options {
background-color: #f4f4f4;
width: 50px;
margin-left: -12px;
margin-top: 10px;
}
.mobile-profile-picture-creator {
border-radius: 100px;
height: 150px;
width: 150px;
border-radius: 50%;
max-width: 150px;
border: 4px solid white;
z-index: 1000;
}
.mobile-header {
height: 50px;
margin-left: -13%;
margin-top: 6%;
}
.h1-navigation {
text-align: center;
font-weight: 600;
margin-bottom: 10%;
}
.mobile-profile-picture {
height: 40px;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2);
border: 2px solid #a30e79;
margin-right: 10px
}
.profile-banner {
margin-top: 25px;
min-height: 200px
}
.v-navigation-drawer {
max-height: 100vh;
}
@media (min-width: 150px) and (max-width: 474px) {
.mobile-profile-picture-creator {
transform: scale(1.5) translateY(-30%) translateX(0%);
}
.socialicons-mobile {
width: 35px;
max-width: 100px;
margin-top: 0px;
margin-left: 20px;
}
}
@media (min-width: 475px) and (max-width: 599px) {
.socialicons-mobile {
width: 35px;
max-width: 100px;
margin-top: 0px;
margin-left: px;
}
.mobile-profile-picture-creator {
transform: scale(1.5) translateY(-30%) translateX(0%);
}
.profile-container-mobile {
width: 110%;
margin-left: -3%;
margin-top: -112px;
}
.occupation-info {
font-size: 1rem;
}
.card-youtube {
min-height: 250px;
}
.name-info-mobile {
font-size: 1.6rem;
}
}
@media (min-width: 599px) and (max-width: 749px) {
.mobile-profile-picture-creator {
transform: scale(1.5) translateY(25%) translateX(0%);
}
.profile-container {
width: 110%;
margin-left: -3%;
}
.profile-container-mobile {
width: 110%;
margin-left: -3%;
margin-top: -110px;
}
.name-info {
font-size: 1.2rem;
}
.occupation-info {
font-size: 1rem;
}
.card-youtube {
min-height: 330px;
}
}
@media (min-width: 750px) and (max-width: 960px) {
.mobile-profile-picture-creator {
transform: scale(1.8) translateY(25%) translateX(0%);
}
.profile-container {
width: 110%;
margin-left: -3%;
}
.profile-container-mobile {
width: 110%;
margin-left: -3%;
margin-top: -110px;
}
.name-info {
font-size: 1.2rem;
}
.occupation-info {
font-size: 1rem;
}
.card-youtube {
min-height: 425px;
}
}
@media (min-width: 960px) and (max-width: 1280px) {
.middle-col {
margin-left: -30px;
}
.text-soutiens {
font-size: 1.2rem;
letter-spacing: 5px;
}
.profile-container {
margin-top: -185px;
min-width: 480px
}
.card-youtube {
min-height: 270px;
}
.Je-soutien-container {
min-width: 325px;
margin-left: -35px;
}
.mobile-profile-picture-creator {
transform: scale(1.3) translateY(25%) translateX(-50px);
}
.name-info {
font-size: 1.2rem;
margin-left: 20px;
margin-top: -6px
}
.occupation-info {
margin-left: 40px;
margin-top: -8px
}
.social-container {
margin-left: 80px;
min-width: 270px;
max-height: 40px
}
.social-container2 {
margin-left: 50px;
min-width: 250px;
max-height: 35px
}
.socialicons {
width: 34px;
max-width: 100px;
margin-top: 15px;
margin-left: 25px;
}
}
@media (min-width: 1280px) and (max-width: 1600px) {
.text-soutiens {
font-size: 1.3rem;
letter-spacing: 8px;
}
.mobile-profile-picture-creator {
transform: scale(1.3) translateY(25%) translateX(-50px);
}
.profile-container {
margin-top: -180px;
}
.card-youtube {
min-height: 290px;
}
.menu-col {
margin-left: -4%;
}
.Je-soutien-container {
min-width: 350px;
}
.name-info {
font-size: 1.2rem;
margin-left: 20px;
margin-top: -6px
}
.social-container {
margin-left: 90px;
min-width: 350;
max-height: 40px
}
.occupation-info {
margin-left: 70px;
margin-top: -8px
}
.social-container2 {
margin-left: 40px;
min-width: 290px;
max-height: 35px
}
.socialicons {
width: 34px;
max-width: 100px;
margin-top: 15px;
margin-left: 25px;
}
}
@media (min-width: 1600px) and (max-width: 1919px) {
.text-soutiens {
font-size: 1.3rem;
}
.mobile-profile-picture-creator {
transform: scale(1.4) translateY(25%) translateX(-40px);
}
.profile-container {
margin-top: -171px;
}
.card-youtube {
min-height: 355px;
}
.menu-col {
margin-left: -4%;
}
.Je-soutien-container {
min-width: 400px;
}
.name-info {
font-size: 1.5rem;
margin-top: -4px;
margin-left: 35px;
}
.occupation-info {
font-size: 1.3rem;
margin-left: 75px;
margin-top: -2px
}
.social-container2 {
margin-left: 70px;
min-width: 300px;
}
}
@media (min-width: 1920px) and (max-width: 2559px) {
.text-soutiens {
font-size: 1.3rem;
}
.profile-container {
margin-top: -160px;
}
.card-youtube {
min-height: 380px;
}
.Je-soutien-container {
min-width: 400px;
}
.mobile-profile-picture-creator {
transform: scale(1.4) translateY(25%) translateX(-40px);
}
.name-info {
font-size: 1.5rem;
margin-left: 35px;
margin-top: -4px;
}
.social-container {
margin-left: 100px;
}
.occupation-info {
font-size: 1.3rem;
margin-left: 110px;
margin-top: -4px
}
.social-container2 {
margin-left: 30px;
min-width: 360px;
}
.socialicons {
width: 38px;
max-width: 100px;
margin-top: 13px;
margin-left: 40px;
}
}
@media (min-width: 2560px) {
.mobile-profile-picture-creator {
transform: scale(1.5) translateY(25%) translateX(-20px);
}
.card-youtube {
min-height: 380px;
}
.text-soutiens {
font-size: 1.5rem;
}
.name-info {
font-size: 2rem;
}
.social-container {
margin-left: 140px;
}
.social-container2 {
margin-left: 130px;
}
.occupation-info {
font-size: 1.5rem;
margin-left: 65px;
margin-top: -6px
}
.socialicons {
width: 45px;
max-width: 100px;
margin-top: 15px;
margin-left: 40px;
}
}
</style>

View File

@@ -1,32 +1,27 @@
import './assets/main.css' import {createApp} from 'vue'
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue' import App from './App.vue'
import router from './router' import router from './router'
import './assets/main.css'
import {createPinia} from 'pinia'
import '@mdi/font/css/materialdesignicons.css' import '@mdi/font/css/materialdesignicons.css'
import 'vuetify/styles' import 'vuetify/styles'
import { createVuetify } from 'vuetify' import {createVuetify} from 'vuetify'
import * as components from 'vuetify/components' import * as components from 'vuetify/components'
import * as directives from 'vuetify/directives' import * as directives from 'vuetify/directives'
import clientPlugin from './plugins/api.js' import clientPlugin from './plugins/api.js'
import vueGoogleOauth from 'vue3-google-login' import vueGoogleOauth from 'vue3-google-login'
const vuetify = createVuetify({ const vuetify = createVuetify({
components, components,
directives directives
}); });
const app = createApp(App); createApp(App)
.use(clientPlugin)
// Create an axios client preconfigured to the Hutopy API. .use(createPinia())
app.use(clientPlugin); .use(vuetify)
.use(router)
app.use(vueGoogleOauth, { .use(vueGoogleOauth, {
clientId: import.meta.env.VITE_GOOGLE_CLIENT_ID, clientId: import.meta.env.VITE_GOOGLE_CLIENT_ID,
}); })
.mount('#app');
app.use(createPinia());
app.use(vuetify);
app.use(router);
app.mount('#app')

View File

@@ -1,158 +1,143 @@
import {createRouter, createWebHistory} from 'vue-router'
import ARPS from '@/views/manualusers/ARPS.vue' import ARPS from '@/views/manualusers/ARPS.vue'
import GuillaumeAime from '@/views/manualusers/GuillaumeAime.vue' import GuillaumeAime from '@/views/manualusers/GuillaumeAime.vue'
import About from '@/views/tos/About.vue' import About from '@/views/documentation/About.vue'
import ContentPolicy from '@/views/tos/ContentPolicy.vue' import ContentPolicy from '@/views/documentation/ContentPolicy.vue'
import FAQ from '@/views/tos/FAQ.vue' import FAQ from '@/views/documentation/FAQ.vue'
import Frais from '@/views/tos/Frais.vue' import Pricing from '@/views/documentation/Pricing.vue'
import GuideForCreators from '@/views/tos/GuideForCreators.vue' import CreatorGuide from '@/views/documentation/CreatorGuide.vue'
import HelpAndContact from '@/views/tos/HelpAndContact.vue' import HelpAndContact from '@/views/documentation/HelpAndContact.vue'
import TermsAndConditions from '@/views/tos/TermsAndConditions.vue' import TermsAndConditions from '@/views/documentation/TermsAndConditions.vue'
import { createRouter, createWebHistory } from 'vue-router'
import MainPage from '../layouts/MainPage.vue'
import LoginView from '../views/LoginView.vue' import LoginView from '../views/LoginView.vue'
import PaymentCompleted from '../views/PayementCompleted.vue' import PaymentCompleted from '../views/PayementCompleted.vue'
import SignupView from '../views/SignupView.vue' import SignupView from '../views/SignupView.vue'
import ContactView from '../views/main/ContactView.vue' import Join from '../views/main/Join.vue'
import CreatorFolio from '../views/main/CreatorFolio.vue' import Home from '../views/main/Home.vue'
import HomeView from '../views/main/HomeView.vue' import Browse from '../views/main/Browse.vue'
import UserBrowser from '../views/main/UsersBrowser.vue' import Wallet from '../views/main/Wallet.vue'
import YourProfile from '../views/main/YourProfile.vue' import Profile from '../views/main/Profile.vue'
import ChloeBeaugrand from '../views/manualusers/ChloeProfile.vue' import ChloeBeaugrand from '../views/manualusers/ChloeProfile.vue'
import Hutopy from '../views/manualusers/HutopyProfile.vue'
import Leffet from '../views/manualusers/LeffetProfile.vue' import Leffet from '../views/manualusers/LeffetProfile.vue'
import MathieuCaron from '../views/manualusers/MathieuCaron.vue' import MathieuCaron from '../views/manualusers/MathieuCaron.vue'
import Creator from "@/views/main/Creator.vue";
const routes = [ const routes = [
{ {
path: '/', path: '/',
name: 'main', component: Home,
component: HomeView meta: {hideSideBar: true}
}, },
{ {
path: '/creatorfolio', path: '/browse',
name: 'creatorfolio', component: Browse
component: CreatorFolio },
},
{ {
path: '/paymentcompleted', path: '/@leffet',
name: 'PayementCompleted', component: Leffet
component: PaymentCompleted },
}, {
{ path: '/@chloebeaugrand',
path: '/yourprofile', component: ChloeBeaugrand
name: 'yourprofile', },
component: YourProfile {
}, path: '/@guillaumeaime',
{ component: GuillaumeAime
path: '/contact', },
name: 'contact', {
component: ContactView path: '/@mathieucaron',
}, component: MathieuCaron
{ },
path: '/signup', {
name: 'signup', path: '/@arps',
component: SignupView component: ARPS
}, },
{
path: '/login', {
name: 'login', path: '/@:creator',
component: LoginView component: Creator
}, },
{
path: '/home', {
name: 'home', path: '/helpandcontact',
component: HomeView component: HelpAndContact,
}, meta: {hideSideBar: true}
{ },
path: '/helpandcontact', {
name: 'helpandcontact', path: '/termsandconditions',
component: HelpAndContact name: 'termsandconditions',
}, component: TermsAndConditions,
{ meta: {hideSideBar: true}
path: '/termsandconditions', },
name: 'termsandconditions', {
component: TermsAndConditions path: '/contentpolicy',
}, name: 'contentpolicy',
{ component: ContentPolicy,
path: '/contentpolicy', meta: {hideSideBar: true}
name: 'contentpolicy', },
component: ContentPolicy {
}, path: '/faq',
{ name: 'FAQ',
path: '/faq', component: FAQ,
name: 'FAQ', meta: {hideSideBar: true}
component: FAQ },
}, {
{ path: '/guideforcreators',
path: '/guideforcreators', name: 'guideforcreators',
name: 'guideforcreators', component: CreatorGuide,
component: GuideForCreators meta: {hideSideBar: true}
}, },
{ {
path: '/about', path: '/about',
name: 'about', name: 'about',
component: About component: About,
}, meta: {hideSideBar: true}
{ },
path: '/frais', {
name: 'frais', path: '/pricing',
component: Frais name: 'pricing',
}, component: Pricing,
{ meta: {hideSideBar: true}
path: '/Hutopy', },
name: 'Hutopy', {
component: Hutopy path: '/join',
}, name: 'join',
{ component: Join,
path: '/Leffet', meta: {hideSideBar: true}
name: 'Leffet', },
component: Leffet
}, {
{ path: '/paymentcompleted',
path: '/userbrowser', name: 'PayementCompleted',
name: 'userbrowser', component: PaymentCompleted
component: UserBrowser },
}, {
{ path: '/profile',
path: '/chloebeaugrand', name: 'profile',
name: 'chloebeaugrand', component: Profile
component: ChloeBeaugrand },
}, {
{ path: '/signup',
path: '/guillaumeaime', name: 'signup',
name: 'guillaumeaime', component: SignupView
component: GuillaumeAime },
}, {
{ path: '/login',
path: '/mathieucaron', name: 'login',
name: 'mathieucaron', component: LoginView
component: MathieuCaron },
}, {
{ path: '/wallet',
path: '/arps', name: 'wallet',
name: 'arps', component: Wallet
component: ARPS },
},
{
path: '/:username',
name: 'user-profile',
component: MainPage
},
{
path: '/creatorFolio',
name: 'creatorFolio',
component: CreatorFolio
}
] ]
const router = createRouter({ const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL), history: createWebHistory(import.meta.env.BASE_URL),
routes, routes
scrollBehavior(to, from, savedPosition) {
return { top: 0 };
}
}) })
export default router export default router

View File

@@ -15,12 +15,13 @@ export const auth = defineStore({
async login(client, email, password) { async login(client, email, password) {
const requestBody = { const requestBody = {
emailAddress: email, email: email,
password: password password: password
}; };
const response = await client.post(`${baseUrl}/users/login`, requestBody) const response = await client.post(`${baseUrl}/users/login`, requestBody)
this.user = { this.user = {
accessToken: response.data, accessToken: response.data.accessToken,
refreshToken: response.data.refreshToken,
} }
localStorage.setItem('jwt', this.user.accessToken); localStorage.setItem('jwt', this.user.accessToken);

View File

@@ -1,111 +1,113 @@
<template> <template>
<v-app style="background-color: #f4f4f4;"> <div class="min-h-screen flex items-center justify-center">
<div class="sm:flex hidden items-center justify-between flex-col" <!-- Desktop View -->
style="background-color: #f4f4f4; margin-top: 3%;"> <div class="hidden sm:flex items-center justify-center w-full">
<div class="container mx-auto px-4 flex items-center justify-center">
<div style="background-color: #f4f4f4;"> <!-- Header -->
<v-container style=" background-color: #f4f4f4;"> <div class="w-full lg:w-6/12 md:w-6/12 sm:w-6/12 xs:w-6/12 flex items-center justify-center">
<v-row align="center" justify="center"> <img class="rounded-2xl mr-8" src="/images/hutopymedia/loginpage/loginhutopy.png" alt="hutopy login">
<!-- Header -->
<v-col cols="8" lg="8" md="10" sm="10" xs="10" style=" align-items: center; ">
<img class="login-picture" src="/images/hutopymedia/loginpage/loginhutopy.png" alt="">
</v-col>
<!-- Connexion-objects -->
<v-col cols="3" lg="4" md="10" sm="10" xs="10" class="connexion-container">
<h1 class="text-center display-6 h1-connexion">Connexion</h1>
<h2 class="text-center display-3 h2-connexion">Comment souhaitez-vous vous connecter à votre
compte?</h2>
<v-card-text>
<v-form class="label-mail-password">
<v-text-field prepend-icon="mdi-email" type="text" v-model="user.email"
label="Nom d'utilisateur" class="text-start"></v-text-field>
<v-text-field prepend-icon="mdi-lock" type="password" v-model="user.password"
label="Mot de passe" class="text-start"></v-text-field>
</v-form>
<v-snackbar v-model="errorSnackBar">
Nom d'utilisateur ou mot de passe invalide.
<template v-slot:actions>
<v-btn color="red" variant="text" @click="errorSnackBar = false">Fermer</v-btn>
</template>
</v-snackbar>
</v-card-text>
<v-card-actions>
<div class="flex-grow-1"></div>
<router-link :to="{ name: 'home' }">
<v-btn color="#6b0065" class="ma-2 btnhome">Accueil</v-btn>
</router-link>
<v-btn color="primary" class="ma-2 btnhome" @click="login">Login</v-btn>
<GoogleLogin :callback="googleCallback" popup-type="TOKEN">
<v-btn color="primary" class="ma-2 btnhome">Google Login</v-btn>
</GoogleLogin>
<!-- <FacebookAuth :appId="facebookAppId" @on-submit="facebookCallback">-->
<!-- <v-btn color="primary" class="ma-2 btnhome">Facebook Login</v-btn>-->
<!-- </FacebookAuth>-->
</v-card-actions>
<div class="text-center">
<h2 class="text-center display-3 h2pasinscrit">Pas encore inscrit?</h2>
<router-link :to="{ name: 'contact' }">
<v-btn color="#6b0065" class="inscriptionbtn"
style="height: 50px; width: 200px; border-radius: 30px; font-size: 1.2rem;">Inscriptions</v-btn>
</router-link>
</div>
</v-col>
</v-row>
</v-container>
</div>
<FooterLayout></FooterLayout>
</div> </div>
<!-- Connexion-objects -->
<div class="lg:w-4/12 md:w-6/12 sm:w-6/12 xs:w-6/12 rounded-lg p-8">
<div class="sm:hidden flex flex-col items-center justify-start" <h1 class="text-center text-2xl font-bold mb-6">Connexion</h1>
style="background-color: #f4f4f4; height: 100vh;"> <div class="mb-4">
<img style="margin-top: 10%; width: 350px; box-shadow: 0 4px 6px rgba(0, 0, 0, .5); border-radius: 25px; " <!-- TODO: Fix input box overflowing when screen it too small -->
src="/images/hutopymedia/loginpage/loginhutopy.png"> <form class="mb-4">
<div class="mb-4">
<h1 class="h1-connexion">Connexion</h1> <input type="text" v-model="user.email" placeholder="Nom d'utilisateur" class="w-full px-4 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-purple-800">
<h2 class="h2-connexion">Comment souhaitez-vous </div>
vous connecter à votre compte?</h2> <div class="mb-4">
<input type="password" v-model="user.password" placeholder="Mot de passe" class="w-full px-4 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-purple-800">
<v-form style="max-width: 400px; width: 350px;"> </div>
<v-text-field prepend-icon="mdi-email" type="text" v-model="user.email" label="Nom d'utilisateur"></v-text-field> </form>
<v-text-field prepend-icon="mdi-lock" type="password" v-model="user.password" </div>
label="Mot de passe"></v-text-field> <div v-if="errorSnackBar" class="mb-4 text-red-600">
</v-form> Nom d'utilisateur ou mot de passe invalide.
<button class="text-red-600 ml-4" @click="errorSnackBar = false">Fermer</button>
<v-card-actions> </div>
<div class="flex-grow-1"></div> <div class="flex justify-center mb-4">
<router-link :to="{ name: 'home' }"> <button class="bg-blue-500 text-white px-8 py-2 rounded-lg shadow-md hover:bg-blue-400 transition-colors duration-300 ease-in-out" @click="login">Login</button>
<v-btn color="#6b0065" class="ma-2">Accueil</v-btn> </div>
</router-link> <div class="flex justify-center mb-4">
<v-btn color="primary" class="ma-2" @click="login">Login</v-btn> <!-- TODO: Remove custom elements -->
</v-card-actions> <google-login :callback="googleCallback" popup-type="TOKEN">
<div class="text-center"> <button class="bg-blue-600 text-white px-4 py-2 rounded-lg shadow-md hover:bg-blue-500 transition-colors duration-300 ease-in-out mr-2 flex items-center">
<h2 class="h2pasinscrit"> <svg class="w-5 h-5 mr-2" viewBox="0 0 512 512">
Pas encore <path xmlns="http://www.w3.org/2000/svg" d="M473.16,221.48l-2.26-9.59H262.46v88.22H387c-12.93,61.4-72.93,93.72-121.94,93.72-35.66,0-73.25-15-98.13-39.11a140.08,140.08,0,0,1-41.8-98.88c0-37.16,16.7-74.33,41-98.78s61-38.13,97.49-38.13c41.79,0,71.74,22.19,82.94,32.31l62.69-62.36C390.86,72.72,340.34,32,261.6,32h0c-60.75,0-119,23.27-161.58,65.71C58,139.5,36.25,199.93,36.25,256S56.83,369.48,97.55,411.6C141.06,456.52,202.68,480,266.13,480c57.73,0,112.45-22.62,151.45-63.66,38.34-40.4,58.17-96.3,58.17-154.9C475.75,236.77,473.27,222.12,473.16,221.48Z"/>
inscrit?</h2> </svg>
<router-link :to="{ name: 'contact' }"> Google
<v-btn color="#6b0065" class="inscriptionbtn" </button>
style="height: 50px; width: 200px; border-radius: 30px; font-size: 1.2rem;">Inscriptions</v-btn> </google-login>
</router-link> <facebook-auth :appId="facebookAppId" @on-submit="facebookCallback">
</div> <button class="bg-blue-700 text-white px-4 py-2 rounded-lg shadow-md hover:bg-blue-600 transition-colors duration-300 ease-in-out flex items-center">
<svg class="w-5 h-5 mr-2" viewBox="0 0 24 24">
<path fill="#ffffff" d="M22.675 0H1.325C.593 0 0 .593 0 1.325v21.351C0 23.406.593 24 1.325 24H12.82v-9.294H9.692v-3.622h3.128V8.413c0-3.1 1.893-4.788 4.659-4.788 1.325 0 2.464.099 2.796.143v3.24l-1.918.001c-1.504 0-1.794.714-1.794 1.763v2.313h3.587l-.467 3.622h-3.12V24h6.116C23.407 24 24 23.406 24 22.676V1.325C24 .593 23.407 0 22.675 0z"></path>
</svg>
Facebook
</button>
</facebook-auth>
</div>
<div class="text-center">
<h2 class="text-xl mb-4">Pas de compte ?</h2>
<router-link :to="{ name: 'join' }">
<button class="bg-purple-800 text-white px-4 py-2 rounded-full shadow-md hover:bg-purple-600 transition-colors duration-300 ease-in-out" style="width: 200px;">Inscriptions</button>
</router-link>
</div>
</div> </div>
</v-app> </div>
</div>
<!-- Mobile View -->
<div class="sm:hidden flex flex-col items-center justify-center w-full">
<img class="w-72 shadow-lg rounded-lg mb-6" src="/images/hutopymedia/loginpage/loginhutopy.png" alt="hutopy login">
<h1 class="text-center text-2xl font-bold mb-4">Connexion</h1>
<h2 class="text-center text-xl mb-4">Comment souhaitez-vous vous connecter à votre compte?</h2>
<form class="w-72 mb-4">
<div class="mb-4">
<input type="text" v-model="user.email" placeholder="Nom d'utilisateur" class="w-full px-4 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-purple-800">
</div>
<div class="mb-4">
<input type="password" v-model="user.password" placeholder="Mot de passe" class="w-full px-4 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-purple-800">
</div>
</form>
<div class="flex justify-end w-72 mb-4">
<router-link to="/">
<button class="bg-purple-800 text-white px-4 py-2 rounded-lg shadow-md hover:bg-purple-600 transition-colors duration-300 ease-in-out mr-2">Accueil</button>
</router-link>
<button class="bg-blue-500 text-white px-4 py-2 rounded-lg shadow-md hover:bg-blue-400 transition-colors duration-300 ease-in-out" @click="login">Login</button>
</div>
<div class="flex justify-center mb-4">
<google-login :callback="googleCallback" popup-type="TOKEN">
<button class="bg-blue-600 text-white px-4 py-2 rounded-lg shadow-md hover:bg-blue-500 transition-colors duration-300 ease-in-out mr-2 flex items-center">
<svg xmlns="http://www.w3.org/2000/svg" width="800px" height="800px" viewBox="-3 0 262 262" preserveAspectRatio="xMidYMid"><path d="M255.878 133.451c0-10.734-.871-18.567-2.756-26.69H130.55v48.448h71.947c-1.45 12.04-9.283 30.172-26.69 42.356l-.244 1.622 38.755 30.023 2.685.268c24.659-22.774 38.875-56.282 38.875-96.027" fill="#4285F4"/><path d="M130.55 261.1c35.248 0 64.839-11.605 86.453-31.622l-41.196-31.913c-11.024 7.688-25.82 13.055-45.257 13.055-34.523 0-63.824-22.773-74.269-54.25l-1.531.13-40.298 31.187-.527 1.465C35.393 231.798 79.49 261.1 130.55 261.1" fill="#34A853"/><path d="M56.281 156.37c-2.756-8.123-4.351-16.827-4.351-25.82 0-8.994 1.595-17.697 4.206-25.82l-.073-1.73L15.26 71.312l-1.335.635C5.077 89.644 0 109.517 0 130.55s5.077 40.905 13.925 58.602l42.356-32.782" fill="#FBBC05"/><path d="M130.55 50.479c24.514 0 41.05 10.589 50.479 19.438l36.844-35.974C195.245 12.91 165.798 0 130.55 0 79.49 0 35.393 29.301 13.925 71.947l42.211 32.783c10.59-31.477 39.891-54.251 74.414-54.251" fill="#EB4335"/></svg>
</button>
</google-login>
<facebook-auth :appId="facebookAppId" @on-submit="facebookCallback">
<button class="bg-blue-700 text-white px-4 py-2 rounded-lg shadow-md hover:bg-blue-600 transition-colors duration-300 ease-in-out flex items-center">
<svg class="w-5 h-5 mr-2" viewBox="0 0 24 24">
<path fill="#ffffff" d="M22.675 0H1.325C.593 0 0 .593 0 1.325v21.351C0 23.406.593 24 1.325 24H12.82v-9.294H9.692v-3.622h3.128V8.413c0-3.1 1.893-4.788 4.659-4.788 1.325 0 2.464.099 2.796.143v3.24l-1.918.001c-1.504 0-1.794.714-1.794 1.763v2.313h3.587l-.467 3.622h-3.12V24h6.116C23.407 24 24 23.406 24 22.676V1.325C24 .593 23.407 0 22.675 0z"></path>
</svg>
Facebook Login
</button>
</facebook-auth>
</div>
<div class="text-center">
<h2 class="text-xl mb-4">Pas encore inscrit?</h2>
<router-link :to="{ name: 'join' }">
<button class="bg-purple-800 text-white px-4 py-2 rounded-full shadow-md hover:bg-purple-600 transition-colors duration-300 ease-in-out" style="width: 200px;">Inscriptions</button>
</router-link>
</div>
</div>
</div>
</template> </template>
<script setup> <script setup>
import FooterLayout from '@/layouts/FooterLayout.vue';
import {auth} from '@/stores/auth.js'; import {auth} from '@/stores/auth.js';
import {ref} from 'vue'; import {ref} from 'vue';
import {useRouter} from 'vue-router'; import {useRouter} from 'vue-router';
import {useClient} from "@/plugins/api.js"; import {useClient} from "@/plugins/api.js";
import {GoogleLogin} from "vue3-google-login"; import {GoogleLogin} from "vue3-google-login";
import { FacebookAuth } from '@xtiannyeto/vue-auth-social'; import {FacebookAuth} from '@xtiannyeto/vue-auth-social';
const api = useClient() const api = useClient()
@@ -116,13 +118,14 @@ let user = ref({});
let errorSnackBar = ref(false); let errorSnackBar = ref(false);
async function login() { async function login() {
// TODO: Make the store handle errors // TODO: Make the store handle errors
try { try {
await store.login(api, user.value.email, user.value.password) await store.login(api, user.value.email, user.value.password)
await router.push('/'); await router.push('/');
} catch (error) { } catch (error) {
errorSnackBar.value = true; errorSnackBar.value = true;
} }
window.location.reload();
} }
const googleCallback = async (response) => { const googleCallback = async (response) => {
@@ -134,273 +137,7 @@ const googleCallback = async (response) => {
const facebookAppId = import.meta.env.VITE_FACEBOOK_APP_ID; const facebookAppId = import.meta.env.VITE_FACEBOOK_APP_ID;
const facebookCallback = async (response) => { const facebookCallback = async (response) => {
console.log("User Successfully Logged In" , response) console.log("User Successfully Logged In", response)
} }
</script> </script>
<style scoped>
.h1-connexion {
font-size: 0.55em;
}
.h2-connexion {
font-size: 0.55em;
}
.label-mail-password {
margin-bottom: -10%;
}
@media (min-width: 300px) {
.h1-connexion {
font-size: 2em;
margin-bottom: 5%;
}
.h2-connexion {
font-size: 1.1em;
margin-bottom: 5%;
text-align: center;
}
.h2pasinscrit {
margin-bottom: 6%;
font-size: 1.1em;
}
.inscriptionbtn {
transform: scale(.7);
}
}
@media (min-width: 450px) and (max-width: 670px) {
.h1-connexion {
font-size: 2em;
margin-bottom: 5%;
}
.h2-connexion {
font-size: 1.1em;
margin-bottom: 5%;
text-align: center;
}
.h2pasinscrit {
margin-bottom: 6%;
font-size: 1.1em;
}
.inscriptionbtn {
transform: scale(.7);
}
.login-picture {
width: auto;
border-radius: 30px;
box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.5);
}
}
@media (min-width: 641px) and (max-width: 770px) {
.h1-connexion {
font-size: 2.5em;
}
.h2-connexion {
font-size: 1.1em;
margin-bottom: 5%;
}
.h2pasinscrit {
margin-bottom: 5%;
font-size: 1.1em;
}
.label-mail-password {
margin-bottom: -3%;
width: 425px;
margin-left: 6%;
}
.btnhome {
font-size: 1em;
justify-content: center;
transform: matrix(1, 0, 0, 1, -160, 0);
}
.login-picture {
width: auto;
border-radius: 30px;
box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.5);
}
.inscriptionbtn {
transform: scale(.8);
}
}
@media (min-width: 769px) and (max-width: 1280px) {
.h1-connexion {
font-size: 3em;
}
.h2-connexion {
font-size: 1.2em;
margin-bottom: 5%;
}
.h2pasinscrit {
margin-bottom: 5%;
font-size: 1.7em;
}
.label-mail-password {
margin-bottom: -3%;
width: 550px;
margin-left: 9%;
}
.inscriptionbtn {
transform: scale(.8);
}
.login-picture {
width: auto;
border-radius: 30px;
box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.5);
}
.btnhome {
font-size: 1em;
justify-content: center;
}
}
@media (min-width: 1279px) and (max-width: 1920px) {
.h1-connexion {
font-size: 2em;
margin-top: 4%;
font-weight: 600;
}
.h2-connexion {
font-size: 1em;
margin-bottom: 5%;
font-weight: 500;
}
.h2pasinscrit {
margin-bottom: 5%;
font-size: 1.3em;
}
.label-mail-password {
margin-bottom: -10%;
margin-top: -4%;
}
.inscriptionbtn {
transform: scale(.6);
margin-top: -5%;
}
.login-picture {
width: auto;
border-radius: 30px;
box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.5);
margin-left: -5%;
}
}
@media (min-width: 1921px) {
.h1-connexion {
font-size: 4.2em;
}
.h2-connexion {
font-size: 1.3em;
margin-bottom: 5%;
margin-left: 6%;
}
.h2pasinscrit {
margin-bottom: 5%;
font-size: 1.7em;
}
.label-mail-password {
margin-left: 5%;
margin-bottom: 0%;
width: auto;
}
.connexion-container {
margin-left: -7%;
}
.login-picture {
width: auto;
border-radius: 30px;
box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.5);
margin-left: -10%;
}
}
@media (min-width: 2500px) and (max-width: 4000px) {
.h1-connexion {
font-size: 6.2em;
}
.h2-connexion {
font-size: 1.7em;
margin-bottom: 5%;
}
.h2pasinscrit {
margin-bottom: 5%;
font-size: 1.7em;
}
.label-mail-password {
margin-bottom: 0%;
margin-left: 10%;
width: auto;
}
.inscriptionbtn {
transform: scale(1);
}
.connexion-container {
margin-left: -3%;
}
.login-picture {
width: auto;
border-radius: 30px;
box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.5);
margin-left: -5%;
}
}
</style>

View File

@@ -1,8 +1,5 @@
<template> <template>
<body style="background-color: #f4f4f4;">
<DefaultLayout></DefaultLayout>
<v-container> <v-container>
<div class="margin-top-mobile"> <div class="margin-top-mobile">
<v-row style="margin-top: 4%; margin-bottom: 2%" class="d-flex justify-center align-center"> <v-row style="margin-top: 4%; margin-bottom: 2%" class="d-flex justify-center align-center">
@@ -60,14 +57,10 @@
</template> </template>
</v-snackbar> </v-snackbar>
</v-container> </v-container>
<FooterLayout></FooterLayout>
</body>
</template> </template>
<script async setup> <script async setup>
import DefaultLayout from '@/layouts/DefaultLayout.vue';
import FooterLayout from '@/layouts/FooterLayout.vue';
import { useClient } from '@/plugins/api.js'; import { useClient } from '@/plugins/api.js';
import { onBeforeMount, ref } from 'vue'; import { onBeforeMount, ref } from 'vue';
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';

View File

@@ -1,7 +1,5 @@
<template> <template>
<v-app style="background-color: #f4f4f4;"> <v-app style="background-color: #f4f4f4;">
<DefaultLayout></DefaultLayout>
<v-row> <v-row>
<v-col cols=6 align="center"> <v-col cols=6 align="center">
<v-img class="login-picture" max-width="500" src="/images/hutopymedia/loginpage/loginhutopy.png" <v-img class="login-picture" max-width="500" src="/images/hutopymedia/loginpage/loginhutopy.png"
@@ -58,15 +56,10 @@
</div> </div>
</v-col> </v-col>
</v-row> </v-row>
<FooterLayout></FooterLayout>
</v-app> </v-app>
</template> </template>
<script setup> <script setup>
import DefaultLayout from '@/layouts/DefaultLayout.vue';
import FooterLayout from '@/layouts/FooterLayout.vue';
import { RouterLink } from "vue-router"; import { RouterLink } from "vue-router";
</script> </script>

View File

@@ -0,0 +1,224 @@
<template>
<div class="document">
<h1>À propos</h1>
<p>
Bienvenue sur la page "À Propos" dHutopy, nous partageons notre histoire, notre mission,
notre vision, et vous présentons l'équipe passionnée qui rend tout cela possible. Hutopy
n'est pas seulement une plateforme ; c'est une communauté, un mouvement, un lieu où la
créativité rencontre la technologie pour créer des expériences inoubliables.
</p>
<h2>
Notre Histoire
</h2>
<p>
Hutopy a été fondée en 2024, née de l'idée simple mais puissante que chaque créateur qu'il
soit grand ou petit, novice ou expérimenté, devrait avoir accès aux outils et au soutien
nécessaires pour partager sa passion avec le monde.
</p>
<h2>
Notre Mission
</h2>
<p>
Notre mission est de démocratiser la création de contenu numérique, en offrant une
plateforme accessible, intuitive et puissante qui permet aux créateurs de tout horizon de
s'exprimer, d'innover et de connecter avec une audience mondiale. Nous nous engageons à
fournir les outils, les ressources et le soutien nécessaires pour que chaque voix puisse
être entendue.
</p>
<h2>
Notre Vision
</h2>
<p>
Nous envisageons un monde où la barrière entre les créateurs et leur audience est réduite au
minimum, où les idées, l'expertise et les histoires peuvent circuler librement et sans
entrave. Hutopy aspire à être au cœur de cet écosystème créatif et professionnel, en étant
une source d'inspiration, une plateforme de lancement et un foyer pour tous.
</p>
<h2>
Notre Équipe
</h2>
<p>
Derrière Hutopy, il y a une équipe de penseurs innovants, de créatifs passionnés et de
technologues dévoués, tous unis par le désir de soutenir la communauté des créateurs de
contenu. Notre équipe est notre plus grande force, chaque membre apportant une expertise
unique et une perspective fraîche à notre mission commune.
</p>
<br>
<v-row justify="center">
<v-card max-width="250px" style="margin: 10px;">
<img class="member-profile-picture"
src="/images/hutopymedia/tospage/membersPictures/profileMarco.png"
alt="Marc-Olivier Hébert">
<div style="margin: 10px;">
<v-typography class="name"
style="font-size: 1.5rem; font-weight: bold;">Marc-Olivier
</v-typography>
<br>
<v-typography class="name"
style="font-size: 1.5rem; font-weight: bold;">
Hébert
</v-typography>
<br>
<v-typography class="task" style="font-size: 1rem;">Fondateur</v-typography>
<br><br>
<p class="text" style="hyphens: auto; font-size: 0.8rem; text-align: justify;">Avec
une
vision claire et un engagement sans faille, il a lancé Hutopy pour changer la
manière dont le contenu est créé et partagé.</p>
</div>
</v-card>
<v-card max-width="250px" style="margin: 10px;">
<img class="member-profile-picture"
src="/images/hutopymedia/tospage/membersPictures/profileDominique.png"
alt="Dominic Villemure">
<div style="margin: 10px;">
<v-typography class="name" style="font-size: 1.5rem; font-weight: bold;">Dominic
</v-typography>
<br>
<v-typography class="name" style="font-size: 1.5rem; font-weight: bold;">
Villemure
</v-typography>
<br>
<v-typography class="task" style="font-size: 1rem;">Responsable
Technique
</v-typography>
<br><br>
<p class="text" style="hyphens: auto; font-size: 0.8rem; text-align: justify;">À la
tête de notre équipe de développement, il assure quHutopy reste à la pointe de
la technologie.
</p>
</div>
</v-card>
<v-card max-width="250px" style="margin: 10px;">
<img class="member-profile-picture"
src="/images/hutopymedia/tospage/membersPictures/profilePascal.png"
alt="Pascal Marchesseault">
<div style="margin: 10px;">
<v-typography class="name" style="font-size: 1.5rem; font-weight: bold;">Pascal
</v-typography>
<br>
<v-typography class="name" style="font-size: 1.5rem; font-weight: bold;">
Marchesseault
</v-typography>
<br>
<v-typography class="task" style="font-size: 1rem;">Expérience
utilisateur
</v-typography>
<br>
<br>
<p class="text" style="hyphens: auto; font-size: 0.8rem; text-align: justify;">Le
champion
de l'expérience utilisateur, il veille à ce que chaque interaction avec Hutopy
soit
positive et enrichissante pour tous les utilisateurs.</p>
</div>
</v-card>
<v-card max-width="250px" style="margin: 10px;">
<img class="member-profile-picture"
src="/images/hutopymedia/tospage/membersPictures/profileChloe.png"
alt="Chloé Beaugrand">
<div style="margin: 10px;">
<v-typography class="name" style="font-size: 1.5rem; font-weight: bold;">Chloé
</v-typography>
<br>
<v-typography class="name" style="font-size: 1.5rem; font-weight: bold;">
Beaugrand
</v-typography>
<br>
<v-typography class="task" style="font-size: 1rem;">Responsable
Marketing
</v-typography>
<br>
<br>
<p class="text" style="hyphens: auto; font-size: 0.8rem; text-align: justify;">Elle
façonne
l'image dHutopy et engage notre communauté à travers des campagnes innovantes
et
impactantes.</p>
</div>
</v-card>
<v-card max-width="250px" style="margin: 10px;">
<img class="member-profile-picture"
src="/images/hutopymedia/tospage/membersPictures/profileEdouard.png"
alt="Édouard Letarte">
<div style="margin: 10px;">
<v-typography class="name" style="font-size: 1.5rem; font-weight: bold;">Édouard
</v-typography>
<br>
<v-typography class="name" style="font-size: 1.5rem; font-weight: bold;">
Letarte
</v-typography>
<br>
<v-typography class="task" style="font-size: 1rem;">Intégrateur
</v-typography>
<br><br>
<p class="text" style="hyphens: auto; font-size: 0.8rem; text-align: justify;">Son
expertise nous permet d'intégrer des fonctionnalités qui permettent à Hutopy de
devenir réalité.</p>
</div>
</v-card>
</v-row>
<p>
Chez Hutopy, nous sommes plus qu'une plateforme ; nous sommes une famille dédiée à la
réussite de nos créateurs. Nous vous invitons à nous joindre dans cette aventure
passionnante, à partager votre créativité et votre expertise avec le monde et à faire
dHutopy votre utopie. Merci de faire partie de notre histoire.
</p>
</div>
</template>
<style scoped>
.important {
@apply m-2 text-red-500 my-4
}
.document {
@apply flex flex-col mx-10 space-y-4
}
h1 {
@apply self-center my-20 text-6xl font-bold
}
h2 {
@apply text-lg font-normal font-semibold font-sans
}
p {
@apply text-base font-normal font-sans
}
.member-profile-picture {
width: 250px;
height: auto;
}
</style>
<script setup lang="ts">
</script>

View File

@@ -0,0 +1,324 @@
<template>
<div class="document">
<h1>
Politique de Contenu
</h1>
<h2>
Introduction
</h2>
<p>
Hutopy vise à offrir une plateforme sécurisée, inclusive et respectueuse les créateurs
peuvent partager leur travail et interagir avec une communauté engagée. Pour maintenir cet
environnement, nous avons établi des lignes directrices claires concernant le type de
contenu autorisé sur notre plateforme. En utilisant Hutopy, vous acceptez de respecter cette
politique de contenu.
</p>
<h2>
Contenu Autorisé
</h2>
<ul>
<li>
Hutopy encourage la publication de contenu créatif, éducatif et inspirant dans divers
formats, y compris :
</li>
<li>Arts visuels et design : Illustrations, photographies, designs graphiques respectant le
droit d'auteur.
</li>
<li>Éducation et apprentissage : Tutoriels, cours en ligne, webinaires qui favorisent
l'apprentissage et le développement personnel.
</li>
<li>Contenu écrit : Articles, blogs, poésies qui enrichissent les discussions et partagent
des connaissances.
</li>
<li>Multimédia : Vidéos, podcasts et musique originales qui respectent les droits d'auteur
et encouragent l'expression créative.
</li>
</ul>
<h2>
Contenu Interdit
</h2>
<ul>
<li>
Pour protéger notre communauté, certains types de contenu ne sont pas autorisés sur Hutopy,
incluant mais non limité à :
</li>
<li>
Contenu illégal : Tout contenu promouvant des activités illégales ou fournissant des
instructions pour commettre des actes illégaux.
</li>
<li>
Harcèlement et discours de haine : Contenu visant à harceler, menacer, ou promouvoir la
haine contre des individus ou des groupes basés sur la race, l'ethnie, la religion, le
genre, l'orientation sexuelle, l'identité de genre ou tout autre caractéristique
distinctive.
</li>
<li>
Contenu pour adultes : Matériel pornographique ou explicitement sexuel.
</li>
<li>
Violence et contenu graphique : Images ou descriptions de violence excessive, gore ou
choquantes.
</li>
<li>
Publicité mensongère et spam : Contenu trompeur, frauduleux ou spammy.
</li>
</ul>
<h2>
Droits d'Auteur et Propriété Intellectuelle
</h2>
<p>
Respect des Droits : Vous devez posséder les droits sur le contenu que vous publiez sur
Hutopy ou avoir l'autorisation expresse du détenteur des droits pour utiliser ce contenu.
</p>
<p>
Attribution : Lorsque vous utilisez ou adaptez le contenu protégé par des droits d'auteur
appartenant à autrui, une attribution claire et correcte doit être fournie.
</p>
<h2>
Modération et Signalement
</h2>
<p>
Modération : Hutopy utilise à la fois des modérateurs humains et des outils automatisés pour
surveiller et évaluer le contenu publié, garantissant le respect de cette politique.
</p>
<p>
Signalement : Les utilisateurs de Hutopy sont encouragés à signaler tout contenu qu'ils
considèrent comme enfreignant notre politique de contenu via les outils de signalement
disponibles sur la plateforme.
</p>
<h2>
Conséquences des Violations
</h2>
<p>
La violation de notre politique de contenu peut entraîner des actions allant de
l'avertissement à la suppression du contenu ou à la suspension, voire à la résiliation du
compte utilisateur.
</p>
<h2>
Révisions de la Politique
</h2>
<p>
Hutopy se réserve le droit de modifier cette politique de contenu à tout moment pour
refléter les changements dans nos pratiques ou pour se conformer à de nouvelles
réglementations légales.
</p>
<h2>
Dans le cas dune non conformité aux politiques de contenus :
</h2>
<p>
1. Suspension des Fonds : Les montants accumulés sur le compte de l'utilisateur en question
seront suspendus temporairement le temps de l'évaluation.
</p>
<p>
2. Redistribution à des Œuvres de Charité : Si, après évaluation, le contenu est
définitivement jugé non conforme à nos clauses de conformité, les fonds suspendus seront
redistribués à des œuvres de charité choisies par Hutopy. L'utilisateur concerné sera
informé de cette décision et des raisons de la non-conformité de son contenu.
</p>
<p>
Cette mesure vise à renforcer la responsabilité des créateurs quant au type de contenu
partagé sur Hutopy, tout en soutenant des causes bénéfiques en cas de violation de nos
directives.
</p>
<h2>
Section Anti-Exploitation dHutopy
</h2>
<h2 style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Engagement dHutopy
</h2>
<p>
Hutopy s'engage fermement à maintenir une plateforme sûre et respectueuse pour tous ses
utilisateurs. Nous prenons une position intransigeante contre toute forme d'exploitation
humaine et nous travaillons activement pour prévenir, identifier et combattre les
comportements et contenus exploitants. Notre mission est de créer un environnement où la
créativité et l'expression personnelle peuvent s'épanouir sans crainte d'exploitation ou
d'abus.
</p>
<h2>
Politique de Tolérance Zéro
</h2>
<p>
Nous appliquons une politique de tolérance zéro à l'égard de :
</p>
<ul>
<li>
Exploitation sexuelle : Cela inclut, mais n'est pas limité à, la pornographie infantile,
le trafic sexuel, et le harcèlement sexuel.
</li>
<li>
Travail forcé : Nous nous opposons à toute forme de travail forcé ou de servitude, y
compris le travail des enfants.
</li>
<li>
Exploitation financière : Cela comprend les arnaques, la fraude et tout autre type
d'exploitation financière.
</li>
</ul>
<h2>
Politique de Tolérance Zéro
</h2>
<p>
Signalement et Actions
</p>
<ul>
<li>Mécanismes de Signalement : Hutopy fournit des outils faciles à utiliser pour signaler
rapidement tout contenu ou comportement suspect d'exploitation. Nous encourageons
vivement les utilisateurs à utiliser ces outils s'ils rencontrent ou soupçonnent des cas
d'exploitation.
</li>
<li>Réponse Rapide : Notre équipe dédiée examine tous les signalements avec la plus grande
attention et prend des mesures immédiates pour adresser les problèmes signalés. Cela
peut inclure la suppression de contenu, la suspension de comptes, et, si nécessaire, le
signalement aux autorités compétentes.
</li>
</ul>
<h2>
Collaboration avec les Autorités
</h2>
<p>
Nous collaborons étroitement avec les autorités et les organisations spécialisées pour
combattre l'exploitation sous toutes ses formes. Hutopy est déterminé à respecter toutes les
lois applicables et à coopérer avec les autorités dans leurs efforts de lutte contre
l'exploitation et l'abus.
</p>
<h2>
Engagements des Utilisateurs
</h2>
<p>
En rejoignant Hutopy, les utilisateurs s'engagent à respecter nos principes
anti-exploitation et à contribuer à la création d'un espace sûr pour tous. Tout manquement à
ces engagements entraînera des conséquences sérieuses, conformément à notre politique de
tolérance zéro.
</p>
<h2>
Modération et Signalement
</h2>
<ul>
<li>
Modération : Hutopy utilise à la fois des modérateurs humains et des outils automatisés
pour surveiller et évaluer le contenu publié, garantissant le respect de cette
politique.
</li>
<li>
Signalement : Les utilisateurs dHutopy sont encouragés à signaler tout contenu qu'ils
considèrent comme enfreignant notre politique de contenu via les outils de signalement
disponibles sur la plateforme.
</li>
</ul>
<h2>
Conséquences des Violations
</h2>
<p>
La violation de notre politique de contenu peut entraîner des actions allant de
l'avertissement à la suppression du contenu ou à la suspension, voire à la résiliation du
compte utilisateur.
</p>
<h2>
Révisions de la Politique
</h2>
<p>
Hutopy se réserve le droit de modifier cette politique de contenu à tout moment pour
refléter les changements dans nos pratiques ou pour se conformer à de nouvelles
réglementations légales.
</p>
<h2>
Contact
</h2>
<p>
Si vous avez des questions sur cette politique de contenu ou sur la manière dont nous
l'appliquons, veuillez contacter notre équipe d'assistance à <a
href="mailto:support@hutopy.com">support@hutopy.com</a>
</p>
</div>
</template>
<style scoped>
.document {
@apply flex flex-col mx-10 space-y-4
}
h1 {
@apply self-center my-20 text-6xl font-bold
}
h2 {
@apply text-lg font-normal font-semibold font-sans
}
p {
@apply text-base font-normal font-sans
}
</style>
<script setup lang="ts">
</script>

View File

@@ -0,0 +1,108 @@
<template>
<div class="document">
<h1>Guide pour les Créateurs</h1>
<h2>
Bienvenue dans la Communauté de Créateurs dHutopy
</h2>
<p>
Félicitations pour avoir choisi Hutopy pour partager votre créativité et votre savoir ! Ce
guide est conçu pour vous aider à maximiser votre présence sur la plateforme, à engager
votre audience et à tirer le meilleur parti des outils à votre disposition.
</p>
<h2>
1. Création de Votre Profil de Créateur :
</h2>
<ul>
<li>Personnalisez Votre Profil : Ajoutez une photo de profil, une bannière et une bio
qui
reflète votre personnalité et votre marque de créateur.
</li>
<li> Liens et Contacts : Intégrez des liens vers vos autres plateformes sociales</li>
</ul>
<h2>
2. Publication de Contenu :
</h2>
<ul>
<li>Diversifiez Votre Contenu : Explorez différents formats vidéos, articles, podcasts
pour captiver divers segments d'audience.
</li>
<li> Planification et Consistance : Publiez régulièrement pour garder votre audience
engagée. Utilisez l'outil de planification dHutopy pour organiser vos publications à
l'avance.
</li>
</ul>
<h2>
3. Engagement avec Votre Audience :
</h2>
<ul>
<li>Interagissez : Répondez aux commentaires, participez à des discussions et créez des
sondages pour encourager l'interaction.
</li>
<li> Analysez Vos Performances : Utilisez les outils d'analyse dHutopy pour comprendre ce
qui résonne avec votre audience et ajustez votre stratégie en conséquence.
</li>
</ul>
<h2>
4. Monétisation :
</h2>
<ul>
<li>Explorez les Options : Hutopy offre plusieurs voies de monétisation, y compris les
abonnements payants, les dons et le programme d'ambassadeur. Choisissez ce qui convient
le mieux à votre contenu et à votre audience.
</li>
</ul>
<h2>
5. Croissance et Développement :
</h2>
<ul>
<li>
Continuez à Apprendre : Utilisez le Centre de Ressources Éducatives dHutopy pour
améliorer vos compétences et rester à jour sur les tendances du secteur. ( À venir )
</li>
</ul>
</div>
</template>
<style scoped>
.document {
@apply flex flex-col mx-10 space-y-4
}
h1 {
@apply self-center my-20 text-6xl font-bold
}
h2 {
@apply text-lg font-normal font-semibold font-sans
}
p {
@apply text-base font-normal font-sans
}
</style>
<script setup lang="ts">
</script>

View File

@@ -0,0 +1,193 @@
<template>
<div class="content">
<h1>FAQ</h1>
<blockquote class="important">
Certaines fonctionnalités ne sont pas encore implémentées, donc certains libellés sont
prévus pour la v1.0.
</blockquote>
<h2>
Foire Aux Questions
</h2>
<p>
La section FAQ de Hutopy est votre ressource essentielle pour trouver des réponses rapides
aux questions les plus fréquemment posées sur notre plateforme. Explorez nos réponses
détaillées pour optimiser votre utilisation de Hutopy et résoudre vos problèmes en un
instant. Consultez régulièrement notre FAQ pour rester informé des dernières
fonctionnalités.
</p>
<h2>
1. Comment puis-je créer un compte sur Hutopy ?
</h2>
<p>
Créer un compte est
simple !
Visitez notre page
d'inscription, remplissez les
informations requises, et suivez les instructions pour confirmer votre adresse e-mail ou
vous connecter via les partenaires de connexion. Vous pourrez commencer à explorer et à
interagir avec la communauté Hutopy immédiatement après.
</p>
<h2>
2. Quels types de contenu puis-je publier sur Hutopy ?
</h2>
<p>
Hutopy accueille une
large
variété de contenus créatifs, incluant mais non limité à des vidéos, articles, podcasts, et
illustrations. Nous encourageons la diversité et l'originalité, tant que le contenu respecte
nos valeurs.
</p>
<h2>
3. Comment Hutopy rémunère-t-il les créateurs de contenu ?
</h2>
<p>
Les créateurs peuvent monétiser leur
contenu de plusieurs façons, notamment via des abonnements payants et des dons de la part
des utilisateurs.
</p>
<h2>
4. Comment puis-je modifier mon profil ?
</h2>
<p>
Connectez-vous à votre compte, accédez à
votre profil, puis cliquez sur "Éditer le profil" pour modifier vos informations, ajouter
une bio, changer votre photo de profil, et plus encore.
</p>
<h2>
5. Est-il possible de supprimer mon compte ?
</h2>
<p>
Oui, vous pouvez faire la suppression de
votre compte sur votre profil dans la section plus. Notez que cette action est irréversible.
</p>
<h2>
6. Que faire si j'oublie mon mot de passe ?
</h2>
<p>
Sur la page de connexion, cliquez sur "Mot
de passe oublié ?" et suivez les instructions pour réinitialiser votre mot de passe via
votre adresse courriel.
</p>
<h2>
7. Comment signaler un contenu inapproprié ?
</h2>
<p>
Si vous rencontrez du contenu qui viole nos
directives, cliquer sur les trois petits points en haut de la publication et cliqué sur le
bouton "Signaler" associé au contenu en question pour alerter notre équipe de modération.
</p>
<h2>
8. Comment puis-je contacter le support Hutopy ?
</h2>
<p>
Pour toute assistance, vous pouvez nous
contacter via notre formulaire en ligne ou par e-mail à support@hutopy.com, ou via nos
réseaux sociaux. Notre équipe s'efforce de répondre rapidement à toutes les demandes.
</p>
<h2>
9. Quels sont les frais pour les créateurs sur Hutopy ?
</h2>
<p>
Hutopy prélève une commission de 12% +
0,30$ sur chaque transaction réalisée sur la plateforme, que ce soit pour les abonnements,
les dons ou tout autre revenu généré par les créateurs. Cette commission nous aide à couvrir
les coûts de maintenance de la plateforme, de la bande passante, d'assistance utilisateur,
des frais de transaction de Stripe et le développement continu pour améliorer votre
expérience sur Hutopy.
</p>
<h2>
10. Y a-t-il des frais pour s'inscrire ou pour maintenir mon compte sur Hutopy ?
</h2>
<p>
Non, l'inscription sur Hutopy est gratuite,
et il n'y a pas de frais mensuels ou annuels pour maintenir votre compte. Vous pouvez
commencer à utiliser Hutopy et à partager votre contenu sans aucun coût initial.
</p>
<h2>
11. Les utilisateurs doivent-ils payer pour accéder au contenu sur Hutopy ?
</h2>
<p>
Hutopy offre à la fois du contenu gratuit
et du contenu premium. Les utilisateurs peuvent accéder gratuitement à une partie du contenu
sur la plateforme. Cependant, certains créateurs peuvent choisir de rendre leur contenu
accessible uniquement via un abonnement payant ou un achat unique pour soutenir leur
travail.
</p>
<h2>
12. Existe-t-il des frais pour retirer mes gains de la plateforme ?
</h2>
<p>
Les créateurs peuvent retirer leurs gains
sans frais supplémentaires de la part dHutopy. Cependant, les transactions bancaires ou les
transferts vers des portefeuilles électroniques peuvent être soumis aux frais standards
imposés par ces services ou institutions financières, mais pas par Hutopy.
</p>
<h2>
13. Les frais Hutopy sont-ils les mêmes pour tous les types de contenu ?
</h2>
<p>
Oui, les frais de commission dHutopy sont
uniformément appliqués à tous les types de contenu et de transactions sur la plateforme pour
maintenir la simplicité et la transparence et ce peut importe le montant.
</p>
</div>
</template>
<style scoped>
.important {
@apply m-2 text-red-500 my-4
}
.document {
@apply flex flex-col mx-10 space-y-4
}
h1 {
@apply self-center my-20 text-6xl font-bold
}
h2 {
@apply text-lg font-normal font-semibold font-sans
}
p {
@apply text-base font-normal font-sans
}
</style>
<script setup lang="ts">
</script>

View File

@@ -0,0 +1,86 @@
<template>
<div class="content">
<h1>Aide et Contact</h1>
<p>
Bienvenue dans notre espace d'assistance ! Que vous soyez un créateur à la recherche de
conseils pour optimiser votre présence sur Hutopy, ou un utilisateur curieux d'en apprendre
plus sur notre plateforme, vous êtes au bon endroit. Notre objectif est de vous fournir tout
le soutien nécessaire pour que votre expérience sur Hutopy soit aussi enrichissante et
agréable que possible.
</p>
<h2>
FAQ (Foire Aux Questions)
</h2>
<p>
Retrouvez les réponses aux questions les plus fréquemment posées concernant l'utilisation
dHutopy, les fonctionnalités de la plateforme, les options de monétisation, et plus encore.
Consulter la FAQ
</p>
<h2>Contactez-Nous</h2>
<p>Nous sommes toujours ravis d'entendre nos utilisateurs ! Que ce
soit pour partager vos retours, poser une question spécifique, ou demander des
renseignements sur des partenariats, n'hésitez pas à nous contacter.</p>
<p>
- Par E-mail : <a href="mailto:info@hutopy.com" style="color: #a30e79;">info@hutopy.com</a>
<br>
- Réseaux Sociaux : Nous sommes actifs sur <a href="https://www.facebook.com/Hutopy"
style="color: #a30e79;">Facebook</a>, et <a
href="https://www.instagram.com/hutopy.inc"
style="color: #a30e79;">Instagram</a> <br>
- Suivez-nous pour rester informé et interagir avec notre communauté.
</p>
<h2>Assistance Technique</h2>
<p>
Rencontrez-vous un problème technique ? <br>
Notre équipe d'assistance est pour vous aider :
<a href="mailto:support@hutopy.com" style="color: #a30e79;">support@hutopy.com</a>
</p>
<p>Nous sommes pour rendre votre expérience sur Hutopy aussi fluide
et positive que possible. N'hésitez pas à nous contacter pour toute aide supplémentaire !
</p>
</div>
</template>
<style scoped>
.important {
@apply m-2 text-red-500 my-4
}
.document {
@apply flex flex-col mx-10 space-y-4
}
h1 {
@apply self-center my-20 text-6xl font-bold
}
h2 {
@apply text-lg font-normal font-semibold font-sans
}
p {
@apply text-base font-normal font-sans
}
.member-profile-picture {
width: 250px;
height: auto;
}
</style>
<script setup lang="ts">
</script>

View File

@@ -0,0 +1,68 @@
<template>
<div class="document">
<h1>Frais</h1>
<h2>
Frais
</h2>
<p>
Découvrez Hutopy, l'endroit où la valorisation de votre travail atteint son apogée. Avec une
commission réduite à seulement 9 %, notre engagement envers votre succès est palpable.
Chaque pourcentage prélevé est réinvesti avec soin pour catalyser votre croissance afin de
développer des fonctionnalités innovantes, maintenir une infrastructure technologique de
pointe, et un support utilisateur de premier ordre. Notre objectif ? Amplifier votre
expansion et garantir une expérience utilisateur sans précédent.
</p>
<p>
Pour chaque transaction, un frais minime assure la sécurité et la fiabilité des paiements,
grâce à un partenaire de confiance mondialement reconnu. Ce dernier sécurise des milliards
en transactions chaque année pour une diversité d'entreprises, à des entreprises en
démarrage aux conglomérats établis. Ce gage de sécurité est disponible pour une somme de 2,9
% plus un 0,30 $ par transaction, une petite contribution pour la tranquillité d'esprit et
la protection de vos revenus.
</p>
<p>
Notre modèle tarifaire, pensé pour la simplicité et la transparence, a pour ambition ultime
d'optimiser vos gains. Chez Hutopy, la notion de partenariat prend tout son sens : votre
épanouissement est au cœur de nos préoccupations. Bénéficiez d'une plateforme qui élargit
votre horizon créatif et entrepreneurial, tout en vous assurant que vos intérêts et ceux de
vos donnateurs sont précieusement gardés.
</p>
<p>
Hutopy est plus qu'une plateforme ; c'est une communauté où la transformation de la passion
en profit devient réalité, grâce au soutien indéfectible d'une équipe dévouée à enrichir
votre parcours. Nous vous invitons à nous rejoindre pour explorer ensemble les avenues de
succès, tout en vous garantissant une part conséquente de vos revenus. Embarquez dans une
aventure votre présence en ligne ne connaît pas de limites, soutenue par Hutopy, votre
allié dans la quête du succès.
</p>
</div>
</template>
<style scoped>
.document {
@apply flex flex-col mx-10 space-y-4
}
h1 {
@apply self-center my-20 text-6xl font-bold
}
h2 {
@apply text-lg font-normal font-semibold font-sans
}
p {
@apply text-base font-normal font-sans
}
</style>
<script setup lang="ts">
</script>

View File

@@ -0,0 +1,151 @@
<template>
<div class="document">
<h1>Conditions générales</h1>
<h2>
Bienvenue sur Hutopy
</h2>
<p>
En accédant à la plateforme Hutopy et en l'utilisant, vous acceptez de vous conformer aux
conditions générales d'utilisation suivantes, qui sont conçues pour assurer une expérience
sûre, respectueuse et positive pour tous les utilisateurs. Ces conditions s'appliquent à
tous les visiteurs, utilisateurs et autres personnes qui accèdent ou utilisent le
service.
</p>
<h2>
Utilisation Acceptable
</h2>
<p>
1. Contenu : Vous vous engagez à ne pas publier de contenu illégal, diffamatoire,
abusif, pornographique, haineux, raciste ou de toute autre nature susceptible de causer
du tort. Tout contenu publié reste sous votre responsabilité.
</p>
<p>
2. Comportement : Tout comportement visant à nuire à d'autres utilisateurs, à la
plateforme ou à ses opérations est strictement interdit. Cela inclut le piratage, la
diffusion de logiciels malveillants et les tentatives d'hameçonnage.
</p>
<h2>
Droits de Propriété Intellectuelle
</h2>
<p>
Le contenu publié sur Hutopy par les utilisateurs reste la propriété de leurs créateurs
respectifs. En publiant du contenu sur Hutopy, vous accordez à la plateforme une licence non
exclusive, transférable, libre de droits et mondiale pour utiliser, reproduire, modifier,
publier, traduire et distribuer ce contenu dans tout média.
</p>
<h2>
Confidentialité
</h2>
<p>
La protection de vos données personnelles est de la plus haute importance pour Hutopy. Votre
information est collectée et utilisée conformément à notre politique de confidentialité.
</p>
<h2>
Limitation de Responsabilité
</h2>
<p>
Hutopy et ses affiliés ne seront pas responsables des dommages indirects, accidentels,
spéciaux, consécutifs ou punitifs, y compris sans limitation, la perte de profits, de
données ou d'usage, que ce soit dans une action contractuelle, délictuelle y compris la
négligence ou autre, découlant de ou en relation avec l'accès ou l'utilisation de la
plateforme Hutopy.
</p>
<h2>
Clause de Non-Poursuite
</h2>
<p>
En acceptant ces conditions générales d'utilisation, vous convenez qu'en aucun cas Hutopy,
ses dirigeants, employés, partenaires, agents, fournisseurs ou affiliés ne pourront être
tenus responsables de dommages directs, indirects, accidentels, spéciaux, consécutifs ou
exemplaires résultant de votre utilisation de la plateforme Hutopy. Par conséquent, vous
renoncez expressément à tout droit de poursuivre Hutopy et ses affiliés pour toute
réclamation liée à votre utilisation de la plateforme.
</p>
<h2>
Gestion du Contenu Inapproprié et Sanctions Financières
</h2>
<p>
Hutopy s'engage à maintenir un environnement sûr et respectueux pour tous ses utilisateurs.
Ainsi, tout contenu publié sur la plateforme est sujet à une évaluation de conformité avec
nos directives et nos standards éthiques. Dans l'éventualité le contenu d'un utilisateur
est jugé inapproprié, offensant ou en violation avec nos Acceptation des Conditions<br>
<br>
Votre accès et votre utilisation continue de la plateforme Hutopy constituent votre
acceptation des présentes conditions générales et de toutes les modifications futures. Il
est de votre responsabilité de vous tenir informé des mises à jour de ces conditions. <br>
<br>
Nous vous encourageons à utiliser Hutopy de manière responsable et conforme à nos
directives, afin de contribuer à une communauté positive et enrichissante pour tous.
</p>
<h2>
Modifications des Conditions
</h2>
<p>
Hutopy se réserve le droit de modifier ou de remplacer ces conditions à tout moment. Il est
de votre responsabilité de revoir régulièrement ces conditions pour vous tenir informé des
mises à jour.
</p>
<h2>
Résiliation
</h2>
<p>
Hutopy peut résilier ou suspendre votre accès à la plateforme immédiatement, sans préavis ni
responsabilité, pour quelque raison que ce soit, y compris, sans limitation, si vous violez
les conditions.
</p>
<h2>
Loi Applicable
</h2>
<p>
Ces conditions seront régies et interprétées conformément aux lois du pays/juridiction
est basée la plateforme, sans égard à ses conflits de dispositions légales.
</p>
</div>
</template>
<style scoped>
.document {
@apply flex flex-col mx-10 space-y-4
}
h1 {
@apply self-center my-20 text-6xl font-bold
}
h2 {
@apply text-lg font-normal font-semibold font-sans
}
p {
@apply text-base font-normal font-sans
}
</style>
<script setup lang="ts">
</script>

111
src/views/main/Aboutyou.vue Normal file
View File

@@ -0,0 +1,111 @@
<template>
<div class="py-8" ref="container">
<div class="text-center text-2xl py-4 border-t-4">À propos de vous</div>
<div class="px-5 relative">
<div class="flex flex-col space-y-4">
<div>
<div class="flex justify-between items-center mb-2">
<label class="text-lg">Prénom</label>
</div>
<v-text-field v-model="firstName" label="Prénom" variant="outlined"></v-text-field>
</div>
<div>
<div class="flex justify-between items-center mb-2">
<label class="text-lg">Nom</label>
</div>
<v-text-field v-model="lastName" label="Nom" variant="outlined"></v-text-field>
</div>
<div>
<div class="flex justify-between items-center mb-2">
<label class="text-lg">Occupation</label>
</div>
<v-text-field v-model="occupation" label="Occupation" variant="outlined"></v-text-field>
</div>
<div>
<div class="flex justify-between items-center mb-2">
<label class="text-lg">Courriel</label>
</div>
<v-text-field v-model="email" label="Courriel" variant="outlined"></v-text-field>
</div>
<div>
<div class="flex justify-between items-center mb-2">
<label class="text-lg">Téléphone</label>
</div>
<v-text-field v-model="phone" label="Téléphone" variant="outlined"></v-text-field>
</div>
<div>
<div class="flex justify-between items-center mb-2">
<label class="text-lg">Date de naissance (JJ/MM/AAAA)</label>
</div>
<v-text-field v-model="birthDate" label="Date de naissance" variant="outlined"
:rules="[dateRule]"></v-text-field>
</div>
<div>
<div class="flex justify-between items-center mb-2">
<label class="text-lg">Pays</label>
</div>
<v-text-field v-model="country" label="Pays" variant="outlined"></v-text-field>
</div>
<div>
<div class="flex justify-between items-center mb-2">
<label class="text-lg">Ville</label>
</div>
<v-text-field v-model="city" label="Ville" variant="outlined"></v-text-field>
</div>
<div>
<div class="flex justify-between items-center mb-2">
<label class="text-lg">Adresse</label>
</div>
<v-text-field v-model="address" label="Adresse" variant="outlined"></v-text-field>
</div>
<div>
<div class="flex justify-between items-center mb-2">
<label class="text-lg">Titre A propos</label>
</div>
<v-text-field v-model="titre" label="Titre A propos" variant="outlined"></v-text-field>
</div>
<div>
<div class="flex justify-between items-center mb-2">
<label class="text-lg">Description</label>
</div>
<v-textarea v-model="description" label="Description" variant="outlined"></v-textarea>
</div>
</div>
</div>
</div>
</template>
<script setup>
import { ref } from 'vue';
const firstName = ref('');
const lastName = ref('');
const occupation = ref('');
const email = ref('');
const phone = ref('');
const birthDate = ref('');
const country = ref('');
const city = ref('');
const address = ref('');
const titre = ref('');
const description = ref('');
const dateRule = value => {
const datePattern = /^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[0-2])\/(19|20)\d{2}$/;
return datePattern.test(value) || 'Format de date invalide (JJ/MM/AAAA)';
};
</script>
<style scoped>
/* Votre style ici */
</style>

36
src/views/main/Browse.vue Normal file
View File

@@ -0,0 +1,36 @@
<template>
<div>
<v-img max-height="375"
src="images/usersmedia/HutopyProfile/banners/banner01.png"
cover>
</v-img>
<div class="text-5xl font-semibold text-center py-10">
CRÉATEURS
</div>
<div class="grid grid-cols-2">
<RouterLink v-for="(creator, index) in creators"
:key="index"
:to="creator.routerLink">
<CreatorCard :creator="creator"
class="m-2">
</CreatorCard>
</RouterLink>
</div>
</div>
</template>
<script setup>
import CreatorCard from "@/views/main/CreatorCard.vue";
import creators from "@/views/main/creators.json"; // Import the JSON file
</script>
<style scoped>
</style>

View File

@@ -0,0 +1,43 @@
<template>
<div>
<v-img cover
max-height="375"
:src="imageSrc">
</v-img>
<div class="w-full border-b-2 p-6">
<PostMessage content-id="00000001-0000-0000-0000-000000000001"></PostMessage>
</div>
<div class="w-full border-b-2 p-6">
<h2 class="font-sans font-semibold">Commentaires</h2>
<MessageList content-id="00000001-0000-0000-0000-000000000001"></MessageList>
</div>
<PostContentMenu></PostContentMenu>
<div class="flex">
<PostCard v-for="post in posts"
:post="post"
class="m-2 bg-red w-full">
</PostCard>
</div>
</div>
</template>
<script setup>
import PostContentMenu from '@/views/main/PostContentMenu.vue'
import PostCard from "@/views/main/PostCard.vue"
import posts from "@/views/main/posts.json"
import PostMessage from "@/views/messages/PostMessage.vue";
import MessageList from "@/views/messages/MessageList.vue";
let imageSrc = '/images/usersmedia/guillaumeMousseau/banners/bannerGuillaumeMousseau01.png';
</script>
<style scoped>
</style>

View File

@@ -0,0 +1,22 @@
<template>
<v-card class="shadow-lg rounded-lg overflow-hidden max-w-sm">
<v-img :src="creator.imageUrl" class="w-full h-48 object-cover"></v-img>
<v-card-title class="text-lg font-bold">{{ creator.name }}</v-card-title>
<v-card-subtitle class="text-sm text-gray-500">{{ creator.title }}</v-card-subtitle>
<v-card-text class="text-base text-gray-700">{{ creator.description }}</v-card-text>
</v-card>
</template>
<script setup>
import { defineProps } from 'vue';
defineProps({
creator: {
type: Object,
required: true,
validator: (profile) => {
return 'image' in profile && 'name' in profile && 'title' in profile && 'description' in profile;
}
}
});
</script>

View File

@@ -0,0 +1,50 @@
<template>
<div class="mt-28">
<div class="max-w-md mx-auto bg-white rounded-xl shadow-md overflow-hidden md:max-w-4xl mb-4">
<div class="md:flex">
<div class="md:flex-shrink-0">
<img class="h-48 w-full object-cover md:h-full md:w-48" src="/images/usersmedia/HutopyProfile/banners/banner01.png" alt="Image">
</div>
<div class="p-8">
<div class="uppercase tracking-wide text-sm text-indigo-500 font-semibold">Nom du réseau social</div>
<p class="mt-2 text-gray-500">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam.</p>
<p class="mt-2 text-gray-500">Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum.</p>
</div>
</div>
</div>
<div class="max-w-md mx-auto bg-white rounded-xl shadow-md overflow-hidden md:max-w-4xl mb-4">
<div class="md:flex">
<div class="md:flex-shrink-0">
<img class="h-48 w-full object-cover md:h-full md:w-48" src="/images/usersmedia/HutopyProfile/banners/banner01.png" alt="Image">
</div>
<div class="p-8">
<div class="uppercase tracking-wide text-sm text-indigo-500 font-semibold">Nom du réseau social</div>
<p class="mt-2 text-gray-500">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam.</p>
<p class="mt-2 text-gray-500">Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum.</p>
</div>
</div>
</div>
<div class="max-w-md mx-auto bg-white rounded-xl shadow-md overflow-hidden md:max-w-4xl mb-4">
<div class="md:flex">
<div class="md:flex-shrink-0">
<img class="h-48 w-full object-cover md:h-full md:w-48" src="/images/usersmedia/HutopyProfile/banners/banner01.png" alt="Image">
</div>
<div class="p-8">
<div class="uppercase tracking-wide text-sm text-indigo-500 font-semibold">Nom du réseau social</div>
<p class="mt-2 text-gray-500">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam.</p>
<p class="mt-2 text-gray-500">Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum.</p>
</div>
</div>
</div>
</div>
</template>
<script setup lang="ts">
</script>

View File

@@ -1,941 +0,0 @@
<template>
<div style="background-color: #f4f4f4;">
<DefaultLayout style="margin-bottom: 30px"></DefaultLayout>
<!-- "Mobile -->
<v-row class="fluid hidden-md-and-up social-mobile-container"
style="margin-top: -10px; position: relative; z-index: 0; " hidden-md-and-down>
<v-col cols="12" class="pa-0" style="width: 100vw; overflow: hidden;">
<v-img class="profile-banner" max-height="375" :src="imageSrc" cover
style="box-shadow: 0 4px 6px rgba(0, 0, 0, 0.8);"></v-img>
</v-col>
</v-row>
<!-- "PurpleLine" -->
<v-row style="background-color: #6b0065; height: 5px; box-shadow: rgba(0, 0, 0, 0.7);">
</v-row>
<!-- "Mobile-Profile" -->
<!-- "Profile picture" -->
<v-row class="d-flex justify-center align-center d-sm-none" style="margin-top: 50px; margin-bottom: -10px">
<v-img :src="profilePicture" class="elevation-4 mobile-profile-picture-creator"></v-img>
</v-row>
<!-- User Social Network Links -->
<v-container style="margin-top: -70px; padding: 0;" class="hidden-md-and-up social-container-mobile-icons"
hidden-md-and-down>
<!-- Facebook -->
<v-row no-gutters class="d-flex justify-space-between align-center" style="margin-left: 3%; margin-right: 3%;">
<v-col cols="2" sm="2" xs="3" style="margin-top: 60px; z-index: 50;" class="d-flex justify-center align-center">
<a href="https://www.facebook.com/GuillaumeMousseau222">
<v-img class="socialicons-mobile" src="/images/hutopymedia/icons/black/facebookblack.png"
alt="Facebook"></v-img>
</a>
</v-col>
<!-- Instagram -->
<v-col cols="2" sm="2" xs="3" style="margin-top: 60px; z-index: 50;" class="d-flex justify-center align-center">
<a href="https://www.instagram.com/guillaumeaime/">
<v-img class="socialicons-mobile" src="/images/hutopymedia/icons/black/instagramblack.png"
alt="Instagram"></v-img>
</a>
</v-col>
<!-- Profile picture - Small -->
<v-col cols="4" sm="4" xs="0" class="hidden-xs">
<v-row class="d-flex justify-center align-center">
<v-img :src="profilePicture" class="elevation-4 mobile-profile-picture-creator"></v-img>
</v-row>
</v-col>
<!-- TikTok -->
<v-col cols="2" sm="2" xs="3" style="margin-top: 60px; z-index: 50;" class="d-flex justify-center align-center">
<a href="https://www.tiktok.com/@guillaumeaime">
<v-img class="socialicons-mobile invert-color" src="/images/hutopymedia/icons/white/tiktokwhite.png"
alt="TikTok"></v-img>
</a>
</v-col>
<v-spacer class="hidden-xs"> </v-spacer>
</v-row>
<!-- User informations Name title and description -->
<v-row class="social-container-mobile">
<v-col cols="12" xs="12" sm="4" class="d-flex justify-center">
<v-row class="d-flex justify-center">
{{ name }}
</v-row>
</v-col>
<v-spacer xs="12" sm="4"></v-spacer>
<v-col cols="12" xs="12" sm="4" class="d-flex justify-center">
<v-row class="d-flex justify-center">
{{ title }}
</v-row>
</v-col>
</v-row>
<v-row>
<v-container style="border-bottom-left-radius: 15px; margin-top: -12px; border-bottom-right-radius: 15px;"
class="social-icon-group-mobile">
<v-expansion-panels style="min-width: 320px;">
<v-col cols="12" offset="-1">
<v-expansion-panel class="background-pink text-justify" style="color: white;"
text="Mettre en lumière le côté humain des entrepreneurs. Chaque service, chaque produit est porteur dune histoire, dune passion, dune vision unique. Mon objectif est de faire rayonner cette unicité, de créer des connexions authentiques entre ces entrepreneurs et leurs clients potentiels. Parce que derrière chaque entreprise, il y a des personnes inspirantes qui méritent dêtre entendues et comprises. Et toi, quel est ton objectif pour cette année?"
title="À propos : Ma mission est claire :">
</v-expansion-panel>
</v-col>
</v-expansion-panels>
</v-container>
</v-row>
</v-container>
<!-- Bannière Pc -->
<v-row class="fluid hidden-sm-and-down" style="margin-top: -65px; position: relative; z-index: 0; "
hidden-sm-and-up>
<v-col cols="12" class="pa-0" style="width: 100vw; overflow: hidden;">
<v-img class="profile-banner" max-height="375" :src="imageSrc" cover
style="box-shadow: 0 4px 6px rgba(0, 0, 0, 0.8);"></v-img>
</v-col>
</v-row>
<v-row class="hidden-sm-and-down" style="background-color: #6b0065; height: 5px; box-shadow: rgba(0, 0, 0, 0.7);"
hidden-sm-and-up>
</v-row>
<!-- "Core (Menu / Center / Donation)" -->
<v-row>
<!-- "Menu" -->
<v-col cols="2" md="3" lg="3" xl="3" xxl="2" class="hidden-sm-and-down menu-col" hidden-sm-and-down>
<v-col style="margin: 0;">
<v-row class="Hutopy-menu-sticky-mobile">
<v-spacer></v-spacer>
<v-col>
<v-container style=" overflow-y: hidden;">
<!-- Nav-Btn -->
<v-col cols="12" class="px-0">
<v-img src="/images/hutopymedia/banners/hutopy.png" alt="Description de l'image"
style="height: 150px; width: 300px;" class="mx-auto" :elevation="10"></v-img>
<v-list dense class="main-background">
<v-list-item v-for="item in navigationItems" :key="item.link">
<router-link :to="item.link">
<v-btn text class="d-flex align-start align-center main-background" elevation="0"
outlined="false">
<v-icon left class="mr-4">{{ item.icon }}</v-icon>
{{ item.text }}
</v-btn>
</router-link>
</v-list-item>
</v-list>
</v-col>
</v-container>
</v-col>
</v-row>
<v-row style="height: 3000px;"></v-row>
</v-col>
</v-col>
<!-- Profile Info Picture name title & description -->
<v-col class="middle-col" style="z-index: 5;" cols="12" xs="12" sm="12" md="6" lg="6" xl="6" xxl="8">
<v-row class="d-flex justify-center align-center">
<v-col xl="10" xxl="8">
<v-container class="profile-container hidden-sm-and-down" hidden-md-and-up>
<v-container>
<v-img :src="profilePicture" class="elevation-4 mobile-profile-picture-creator"></v-img>
<!-- User informations Name & title -->
<v-container class="background-profile-container" style="margin-top: -8%;">
<v-row>
<v-col style="height: 50px;" cols="7" offset="2" class="social-container">
<h1 class="name-info">{{ name }}</h1>
</v-col>
<v-col></v-col>
</v-row>
<v-row>
<v-col style="height: 50px;" cols="6" offset="2" class="social-container2">
<h1 class="occupation-info">{{ title }}</h1>
</v-col>
<v-col></v-col>
</v-row>
<!-- User Social Network Links -->
<v-row>
<v-spacer></v-spacer>
<v-col cols="7" style="margin-top: 1%; margin-bottom: -2%;">
<v-row>
<a href="https://www.facebook.com/GuillaumeMousseau222">
<img class="socialicons" src="/images/hutopymedia/icons/black/facebookblack.png"
alt="Description image 2">
</a>
<a href="https://www.instagram.com/p/C2f-3UnNdfX/">
<img class="socialicons" src="/images/hutopymedia/icons/black/instagramblack.png"
alt="Description image 2">
</a>
<a href="https://www.tiktok.com/@guillaumeaime">
<img class="socialicons invert-color" src="/images/hutopymedia/icons/white/tiktokwhite.png"
alt="Description image 2">
</a>
</v-row>
</v-col>
<v-col background-color="primary"></v-col>
</v-row>
<!-- Description -->
<v-row>
<v-container
style="border-bottom-left-radius: 15px; border-bottom-right-radius: 15px; margin-top: 15px;">
<v-expansion-panels style="min-width: 320px;">
<v-col cols="12" offset="-1">
<v-expansion-panel class="background-pink text-justify" style="color: white;"
text="Mettre en lumière le côté humain des entrepreneurs. Chaque service, chaque produit est porteur dune histoire, dune passion, dune vision unique. Mon objectif est de faire rayonner cette unicité, de créer des connexions authentiques entre ces entrepreneurs et leurs clients potentiels. Parce que derrière chaque entreprise, il y a des personnes inspirantes qui méritent dêtre entendues et comprises. Et toi, quel est ton objectif pour cette année?"
title="À propos : Ma mission est claire :">
</v-expansion-panel>
</v-col>
</v-expansion-panels>
</v-container>
</v-row>
</v-container>
</v-container>
</v-container>
</v-col>
</v-row>
<v-row class="d-flex justify-center align-center">
<v-col xl="10" xxl="8">
<PostContentMenu style="margin-top: -30px;"></PostContentMenu>
</v-col>
</v-row>
<!-- Card youtube balado -->
<v-row class="d-flex justify-center align-center">
<v-col xl="10" xxl="8">
<v-container>
<v-card class="flow-menu m-0 youtube-card">
<!-- Title, date and btn -->
<v-col>
<v-row>
<v-col class="text-center">
<h1 class="card-title">
MON PREMIER BALADO</h1>
</v-col>
<!--<v-col class="text-right">
<v-btn class="btn-card-options" flat tile elevation="0">
<v-icon style="color: #6e6e6e; font-size: 24px;">mdi-dots-vertical</v-icon>
</v-btn> (a intégrer)
</v-col> -->
</v-row>
</v-col>
<!-- Card core Video/image & text -->
<div style="background-color: rgba(255, 255, 255, 0.1); margin-left: -5%; margin-right: -5%">
<v-container>
<iframe class="card-youtube" style="margin-left: 2.1%; width: 96%;"
src="https://www.youtube.com/embed/pf95whtA_xs?start=0" title="Guillaumem" frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowfullscreen></iframe>
<!-- Date -->
<v-row class="text-right">
<v-col>
<h1 style=" margin-right: 40px; margin-top: 10px" class="card-date">
24-04-2024
</h1>
</v-col>
</v-row>
<p class="text-justify pa-10" style="margin-bottom: -50px; font-size: 1em">Cest un honneur de vous
présenter
mon tout premier balado. Dans ce premier épisode, les passionnés de cinéma et de gadgets seront
particulièrement gâtés, car je dévoile les gadgets que j'utilise professionnellement. Par la
suite,
je
partage mon itinéraire professionnel peu conventionnel : de mes débuts dans le secteur bovin à
travers
le
Canada, à mon poste actuel comme directeur marketing chez Journal Mobile, jusqu'à la direction de
mon
agence
créative, Alliés. Enfin, je vous invite à découvrir un autre aspect de ma vie à travers ma page
personnelle,
"Guillaume aime", je partage tout ce qui me passionne.</p>
<!-- Like dislike commment Section -->
<div style="height: 20px;"></div>
<div
style="z-index: 500; margin-bottom: 2%; background-color: rgba(0, 0, 0, 1); height: 3px; width: 100%; margin-top: 20px;">
</div>
<div style="background-color: rgba(0, 0, 0, 1); height: 3px; width: 100%; margin-top: 20px;">
</div>
<!-- Comments -->
<v-text-field style="margin-left: 2%; margin-bottom: 15px; margin-bottom: -20px"
placeholder="Commentaire (Arrive bientôt)"></v-text-field>
</v-container>
</div>
</v-card>
</v-container>
</v-col>
</v-row>
</v-col>
<!-- "Large-Monitor-RightCol" Donation -->
<v-col cols="2" md="3" lg="3" xl="2" xxl="2" class="hidden-sm-and-down" hidden-sm-and-up>
<v-row>
<v-col>
<v-container class="sticky-bottom-label Je-soutien-container" style="max-width: 400px ; bottom: 0;">
<!-- Donnation -->
<v-card style="border-radius: 20px;">
<v-container>
<v-row class="mb-0"
style="background-color: #6b0065; margin-left: -24px; margin-right: -24px; margin-top: -20px; justify-content: center;">
<v-card-title class="text-soutiens" style="margin-top: 15px;">
JE SOUTIENS!
</v-card-title>
</v-row>
<StripePayment></StripePayment>
</v-container>
</v-card>
</v-container>
<v-container style="height: 3000px;">
</v-container>
</v-col>
<v-spacer>
</v-spacer>
</v-row>
</v-col>
</v-row>
<!-- "Mobile" Donation -->
<v-col class="hidden-md-and-up sticky-bottom-label" hidden-sm-and-down
style="background-color: #6b0065; margin-top: 30px; text-align: center;">
<!-- Barre cliquable pour ouvrir le drawer -->
<v-btn @click="drawerbottom = !drawerbottom" elevation="0"
style="background-color: #6b0065; color: white; text-align: center;" class="text-soutiens ">
JE SOUTIENS
</v-btn>
</v-col>
<!-- Drawer du bas -->
<template>
<div>
<v-bottom-sheet v-model="drawerbottom" class="sticky-bottom-label" hide-overlay>
<v-container style="background-color: #6b0065; color: white; padding: 20px; text-align: center;">
<h1 class="text-soutiens">JE SOUTIENS</h1>
<StripePayment></StripePayment>
</v-container>
</v-bottom-sheet>
</div>
</template>
<FooterLayout></FooterLayout>
</div>
</template>
<script setup>
import DefaultLayout from '@/layouts/DefaultLayout.vue';
import FooterLayout from '@/layouts/FooterLayout.vue';
import PostContentMenu from '@/layouts/PostContentMenu.vue';
import { ref } from 'vue';
import StripePayment from '../StripePayment.vue';
let imageSrc = '/images/usersmedia/guillaumeMousseau/banners/bannerGuillaumeMousseau01.png';
let profilePicture = '/images/usersmedia/guillaumeMousseau/profilepictures/profileGuillaumeMousseau01.png';
let name = 'Guillaume Mousseau'
let title = 'Créateur de contenus'
let drawerbottom = ref(false)
let navigationItems = [
{ icon: 'mdi-home', text: 'Accueil', link: 'home' },
{ icon: 'mdi-account-group', text: 'Utilisateur', link: '/userbrowser' },
{ icon: 'mdi-handshake', text: 'Aidez-nous', link: '/contact' },
];
</script>
<style scoped>
.invert-color {
filter: invert(1);
}
.Hutopy-menu-sticky-mobile {
position: sticky;
top: 0;
bottom: 0;
left: 0;
width: 100%;
z-index: 1000;
margin-top: -40px;
}
.sticky-bottom-label {
position: sticky;
top: 0;
bottom: 0;
left: 0;
width: 100%;
z-index: 1000;
margin-top: 20px;
}
.sticky-top-label {
position: sticky;
bottom: 0;
right: 10%;
width: 100%;
z-index: 1000;
}
.text-soutiens {
margin-bottom: 15px;
color: white;
font-size: 1.5rem;
letter-spacing: 7px;
text-align: center;
}
.name-info {
margin-top: -10px;
margin-left: 15%;
}
.occupation-info {
margin-left: 15%;
font-size: large;
}
.name-info-mobile {
margin-left: 22px;
font-size: 1.3rem
}
.main-background {
background-color: #f4f4f4;
}
.profile-container {
margin-top: -16%;
}
.btn-custom {
width: 100%;
background-color: transparent;
}
.background-profile-container {
background-color: #ececec;
color: white;
border-top: 3px solid #a30e79;
border-right: 3px solid #a30e79;
font-weight: 700;
font-size: 1.15rem;
border-radius: 25px;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.3)
}
.background-pink {
background-color: #cc6f91;
color: white;
font-weight: 400;
}
.label-text {
font-weight: 400;
margin-left: 3%;
font-size: 1rem;
}
.profile-name {
margin-top: -15%;
}
.socialicons {
width: 35px;
max-width: 100px;
margin-top: 3px;
margin-left: 40px;
}
.socialicons-mobile {
width: 35px;
max-width: 100px;
margin-top: 27px;
margin-left: 20px;
}
.youtube-card {
margin-left: 2%;
margin-right: 2%;
border-radius: 15px;
background-color: #f4f4f4;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.4)
}
.card-title {
font-size: 1.4rem;
margin-top: 10px;
}
.card-date {
margin-left: 10px;
margin-top: -18px;
margin-bottom: -20px;
font-size: .8rem;
}
.social-container {
background-color: #006d77;
border-top-right-radius: 30px;
border-bottom-right-radius: 30px;
font-size: 1.7rem;
font-weight: 600;
color: white;
}
.social-container2 {
background-color: #0baab2;
border-bottom-right-radius: 30px;
font-size: 1.4rem;
font-weight: 500;
color: white;
}
.social-container-mobile {
background-color: #006d77;
font-size: 1.4rem;
font-weight: 600;
color: white;
z-index: 1000;
margin: auto;
text-align: center;
}
.social-container2-mobile {
background-color: #0baab2;
z-index: 1000;
font-size: 1.2rem;
font-weight: 500;
color: white;
}
.social-icon-group-mobile {
background-color: #0baab2;
}
.mini-profile-picture {
border-radius: 100px;
}
.btn-card-options {
background-color: #f4f4f4;
width: 50px;
margin-left: -12px;
margin-top: 10px;
}
.mobile-profile-picture-creator {
border-radius: 100px;
height: 150px;
width: 150px;
border-radius: 50%;
max-width: 150px;
border: 4px solid white;
z-index: 1000;
}
.mobile-header {
height: 50px;
margin-left: -13%;
margin-top: 6%;
}
.h1-navigation {
text-align: center;
font-weight: 600;
margin-bottom: 10%;
}
.mobile-profile-picture {
height: 40px;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2);
border: 2px solid #a30e79;
margin-right: 10px
}
.profile-banner {
margin-top: 25px;
min-height: 200px
}
.v-navigation-drawer {
max-height: 100vh;
}
@media (min-width: 150px) and (max-width: 474px) {
.mobile-profile-picture-creator {
transform: scale(1.5) translateY(-30%) translateX(0%);
}
.socialicons-mobile {
width: 35px;
max-width: 100px;
margin-top: 0px;
margin-left: 20px;
}
}
@media (min-width: 475px) and (max-width: 599px) {
.socialicons-mobile {
width: 35px;
max-width: 100px;
margin-top: 0px;
margin-left: px;
}
.mobile-profile-picture-creator {
transform: scale(1.5) translateY(-30%) translateX(0%);
}
.profile-container-mobile {
width: 110%;
margin-left: -3%;
margin-top: -112px;
}
.occupation-info {
font-size: 1rem;
}
.card-youtube {
min-height: 250px;
}
.name-info-mobile {
font-size: 1.6rem;
}
}
@media (min-width: 599px) and (max-width: 749px) {
.mobile-profile-picture-creator {
transform: scale(1.5) translateY(25%) translateX(0%);
}
.profile-container {
width: 110%;
margin-left: -3%;
}
.profile-container-mobile {
width: 110%;
margin-left: -3%;
margin-top: -110px;
}
.name-info {
font-size: 1.2rem;
}
.occupation-info {
font-size: 1rem;
}
.card-youtube {
min-height: 330px;
}
}
@media (min-width: 750px) and (max-width: 960px) {
.mobile-profile-picture-creator {
transform: scale(1.8) translateY(25%) translateX(0%);
}
.profile-container {
width: 110%;
margin-left: -3%;
}
.profile-container-mobile {
width: 110%;
margin-left: -3%;
margin-top: -110px;
}
.name-info {
font-size: 1.2rem;
}
.occupation-info {
font-size: 1rem;
}
.card-youtube {
min-height: 425px;
}
}
@media (min-width: 960px) and (max-width: 1280px) {
.middle-col {
margin-left: -30px;
}
.text-soutiens {
font-size: 1.2rem;
letter-spacing: 5px;
}
.profile-container {
margin-top: -185px;
min-width: 480px
}
.card-youtube {
min-height: 270px;
}
.Je-soutien-container {
min-width: 325px;
margin-left: -35px;
}
.mobile-profile-picture-creator {
transform: scale(1.3) translateY(25%) translateX(-50px);
}
.name-info {
font-size: 1.2rem;
margin-left: 20px;
margin-top: -6px
}
.occupation-info {
margin-left: 40px;
margin-top: -8px
}
.social-container {
margin-left: 80px;
min-width: 270px;
max-height: 40px
}
.social-container2 {
margin-left: 50px;
min-width: 250px;
max-height: 35px
}
.socialicons {
width: 34px;
max-width: 100px;
margin-top: 15px;
margin-left: 25px;
}
}
@media (min-width: 1280px) and (max-width: 1600px) {
.text-soutiens {
font-size: 1.3rem;
letter-spacing: 8px;
}
.mobile-profile-picture-creator {
transform: scale(1.3) translateY(25%) translateX(-50px);
}
.profile-container {
margin-top: -180px;
}
.card-youtube {
min-height: 290px;
}
.menu-col {
margin-left: -4%;
}
.Je-soutien-container {
min-width: 350px;
}
.name-info {
font-size: 1.2rem;
margin-left: 20px;
margin-top: -6px
}
.social-container {
margin-left: 90px;
min-width: 350;
max-height: 40px
}
.occupation-info {
margin-left: 70px;
margin-top: -8px
}
.social-container2 {
margin-left: 40px;
min-width: 290px;
max-height: 35px
}
.socialicons {
width: 34px;
max-width: 100px;
margin-top: 15px;
margin-left: 25px;
}
}
@media (min-width: 1600px) and (max-width: 1919px) {
.text-soutiens {
font-size: 1.3rem;
}
.mobile-profile-picture-creator {
transform: scale(1.4) translateY(25%) translateX(-40px);
}
.profile-container {
margin-top: -171px;
}
.card-youtube {
min-height: 355px;
}
.menu-col {
margin-left: -4%;
}
.Je-soutien-container {
min-width: 400px;
}
.name-info {
font-size: 1.5rem;
margin-top: -4px;
margin-left: 35px;
}
.occupation-info {
font-size: 1.3rem;
margin-left: 75px;
margin-top: -2px
}
.social-container2 {
margin-left: 70px;
min-width: 300px;
}
}
@media (min-width: 1920px) and (max-width: 2559px) {
.text-soutiens {
font-size: 1.3rem;
}
.profile-container {
margin-top: -160px;
}
.card-youtube {
min-height: 380px;
}
.Je-soutien-container {
min-width: 400px;
}
.mobile-profile-picture-creator {
transform: scale(1.4) translateY(25%) translateX(-40px);
}
.name-info {
font-size: 1.5rem;
margin-left: 35px;
margin-top: -4px;
}
.social-container {
margin-left: 100px;
}
.occupation-info {
font-size: 1.3rem;
margin-left: 110px;
margin-top: -4px
}
.social-container2 {
margin-left: 30px;
min-width: 360px;
}
.socialicons {
width: 38px;
max-width: 100px;
margin-top: 13px;
margin-left: 40px;
}
}
@media (min-width: 2560px) {
.mobile-profile-picture-creator {
transform: scale(1.5) translateY(25%) translateX(-20px);
}
.card-youtube {
min-height: 380px;
}
.text-soutiens {
font-size: 1.5rem;
}
.name-info {
font-size: 2rem;
}
.social-container {
margin-left: 140px;
}
.social-container2 {
margin-left: 130px;
}
.occupation-info {
font-size: 1.5rem;
margin-left: 65px;
margin-top: -6px
}
.socialicons {
width: 45px;
max-width: 100px;
margin-top: 15px;
margin-left: 40px;
}
}
</style>

View File

@@ -0,0 +1,73 @@
<template>
<div class="fixed z-50 bottom-10 right-10 flex flex-column">
<div
v-if="showPopup"
ref="popup"
class="z-50 shadow-md shadow-gray-500 rounded-2xl"
>
<div class="bg-fuchsia-900 p-4 rounded-t-2xl font-semibold self-center text-white text-center">
Je Soutiens!
</div>
<div class="bg-gray-100 rounded-b-2xl p-4">
<div class="mx-2">
<StripePayment></StripePayment>
</div>
</div>
</div>
<div
@click="togglePopup"
ref="popupButton"
class="bg-purple rounded-full w-16 h-16 flex justify-center items-center self-end mt-4 cursor-pointer"
style="background: radial-gradient(circle, rgba(163,14,121,1) 50%, rgba(107,0,101,1) 100%); border: 2px solid white;"
>
<v-icon class="text-2xl">mdi-gift-outline</v-icon>
</div>
</div>
</template>
<script setup>
import { ref, onMounted, onUnmounted } from 'vue';
import StripePayment from "@/views/StripePayment.vue";
const showPopup = ref(false);
const popup = ref(null);
const popupButton = ref(null);
const togglePopup = () => {
showPopup.value = !showPopup.value;
};
const handleClickOutside = (event) => {
if (
popup.value &&
!popup.value.contains(event.target) &&
!popupButton.value.contains(event.target) &&
!event.target.closest('.bg-purple')
) {
showPopup.value = false;
}
};
onMounted(() => {
document.addEventListener('click', handleClickOutside);
});
onUnmounted(() => {
document.removeEventListener('click', handleClickOutside);
});
</script>
<style scoped>
.bg-fuchsia-900 {
background-color: #9c27b0;
}
.bg-gray-100 {
background-color: #f5f5f5;
}
.bg-purple {
background-color: #9c27b0;
}
</style>

10
src/views/main/Footer.vue Normal file
View File

@@ -0,0 +1,10 @@
<template>
<footer>
<div class="bg-black/5 p-6 text-center">
{{ new Date().getFullYear() }} <strong>Hutopy v.01</strong>
</div>
</footer>
</template>
<script setup lang="ts">
</script>

181
src/views/main/Header.vue Normal file
View File

@@ -0,0 +1,181 @@
<template>
<header
class="py-1 flex items-center justify-between bg-white shadow-md shadow-gray-700 z-20"
@click.stop
>
<div class="flex items-center">
<v-app-bar-nav-icon @click.stop="toggleSidebar">
</v-app-bar-nav-icon>
<RouterLink to="/" class="hidden md:block">
<v-img
src="/medias/hutopy.png"
ref="popupButtonRef"
alt="Hutopy Logo"
class="mr-2 h-10 w-20"
></v-img>
</RouterLink>
<RouterLink to="/" class="block md:hidden">
<v-img
src="/images/hutopymedia/icons/logohutopy.png"
ref="popupButtonRef"
alt="Hutopy Logo"
class="mr-2 h-10 w-10"
></v-img>
</RouterLink>
</div>
<div class="flex items-center ml-auto space-x-4 search-container">
<template v-if="showSearch">
<v-text-field
density="compact"
rounded
variant="outlined"
v-model="searchQuery"
placeholder="Recherche"
hide-details
clearable
class="rounded-full w-32 md:w-64 lg:w-96 mx-2"
append-inner-icon="mdi-magnify"
@click.stop
@click:append-inner="onSearch">
</v-text-field>
</template>
<template v-else>
<v-icon class="mx-2 cursor-pointer" @click.stop="toggleSearch">mdi-magnify</v-icon>
</template>
<v-icon class="mx-2">mdi-bell-outline</v-icon>
<div class="text-center">
<v-menu open-on-hover>
<template v-slot:activator="{ props }">
<v-btn variant="plain" v-bind="props" class=" d-flex align-center text-capital-none">
<span class="normal-case max-w-xs hidden md:block">
{{ currentUserName }}
</span>
<img src="/images/usersmedia/anonyme/profilepictures/profileAnonymeSquare.png" alt="Profile Image"
class="ml-2 rounded-full" style="width: 32px; height: 32px;">
</v-btn>
</template>
<v-list min-width="200px" class=" align-center mt-3 left-3">
<div v-if="!currentUser">
<v-list-item class="nav-button">
<v-list-item-title>
<v-btn to="/login" class="w-100 " variant="plain">Connexion</v-btn>
</v-list-item-title>
</v-list-item>
</div>
<div v-if="currentUser">
<v-list-item class="nav-button">
<router-link :to="`/${currentUserName}`">
<v-btn class="w-100 " variant="plain"> {{ currentUserName }}</v-btn>
</router-link>
</v-list-item>
<v-list-item class="nav-button">
<v-list-item-title >
<v-btn to="/profile" class="w-100 " variant="plain">Mon profil</v-btn>
</v-list-item-title>
</v-list-item>
<v-list-item class="nav-button">
<v-list-item-title>
<v-btn to="/wallet" class="w-100 " variant="plain"> Portefeuille</v-btn>
</v-list-item-title>
</v-list-item>
<v-list-item class="nav-button">
<v-list-item-title>
<v-btn @click="logout" to="/wallet" class="w-100 " variant="plain"> Déconnexion</v-btn>
</v-list-item-title>
</v-list-item>
</div>
</v-list>
</v-menu>
</div>
</div>
</header>
</template>
<script setup>
import MyUserModel from "@/models/myUserModel.js";
import {useClient} from "@/plugins/api.js";
import {ref, onMounted, onBeforeUnmount} from "vue";
import {eventBus} from '@/eventBus.js';
import {useRouter} from 'vue-router';
const router = useRouter();
const currentUserName = ref("Anonyme");
const searchQuery = ref("");
const showSearch = ref(false);
let currentUser = null;
const client = useClient();
const toggleSidebar = () => {
eventBus.value.toggleSidebar();
};
const onSearch = () => {
const query = searchQuery.value.trim();
if (!query) {
router.push("/browse");
} else {
const words = query.split(" ");
if (words.length === 1) {
router.push(`/@${words[0]}`);
} else {
router.push({name: "browse", query: {q: query}});
}
}
};
const toggleSearch = () => {
showSearch.value = !showSearch.value;
};
const handleClickOutside = (event) => {
if (!event.target.closest('.search-container')) {
showSearch.value = false;
}
};
const navigateToMessages = () => {
router.push('/messages');
};
const logout = () => {
localStorage.removeItem('jwt');
window.location.reload();
};
onMounted(async () => {
try {
const myUser = await client.get("/api/GetMyUser");
const currentUserModel = MyUserModel.createFromApiResult(myUser.data);
currentUser = currentUserModel;
currentUserName.value = currentUserModel.userName;
} catch (error) {
console.log("User not logged");
}
document.addEventListener('click', handleClickOutside);
});
onBeforeUnmount(() => {
document.removeEventListener('click', handleClickOutside);
});
</script>
<style scoped>
.search-container {
position: relative;
}
.nav-button:hover {
@apply bg-[#903175] text-gray-200;
}
</style>

104
src/views/main/Home.vue Normal file
View File

@@ -0,0 +1,104 @@
<template>
<div class="bg-gray-100 min-h-screen">
<!-- Header Section -->
<div class="px-6 py-12">
<div class="max-w-4xl mx-auto flex items-center justify-center">
<img src="/images/hutopymedia/banners/hutopy.png" alt="Hutopy Logo" class="h-24">
</div>
</div>
<!-- Banner Section -->
<div class="relative">
<img src="/images/hutopymedia/homepage/bannierehomepage.png" alt="Hutopy Banner" class="w-full rounded-xl shadow-lg">
</div>
<!-- Call-to-Action Section -->
<div class="flex justify-center py-8 space-x-4 overflow-auto">
<img src="/images/hutopymedia/homepage/creer.png" alt="Create CallToAction" class="rounded-xl shadow-lg w-1/4 sm:w-1/6 md:w-1/8 lg:w-1/12">
<img src="/images/hutopymedia/homepage/partager.png" alt="Share CallToAction" class="rounded-xl shadow-lg w-1/4 sm:w-1/6 md:w-1/8 lg:w-1/12">
<img src="/images/hutopymedia/homepage/inspirer.png" alt="Inspire CallToAction" class="rounded-xl shadow-lg w-1/4 sm:w-1/6 md:w-1/8 lg:w-1/12">
</div>
<!-- Main Content Section -->
<div class="max-w-4xl mx-auto px-6 py-8 space-y-6">
<img src="/images/hutopymedia/homepage/votrehutopy.png" alt="YourHutopy" class="mx-auto mb-8">
<div class="grid grid-cols-1 md:grid-cols-2 gap-8">
<div class="space-y-4">
<p class="text-lg leading-relaxed text-gray-800">
Bienvenue sur Hutopy, votre nouvelle frontière de création, de connexion et d'innovation. Au
cœur de notre mission réside une ambition audacieuse : transformer l'espace numérique en un
écosystème chaque créateur, chaque rêveur, chaque professionnel, peut non seulement imaginer,
mais concrétiser son utopie personnelle. Hutopy est plus qu'une simple plateforme c'est une
communauté vibrante qui défie les conventions de léducation, encourage l'originalité et célèbre
la créativité.
</p>
<p class="text-lg leading-relaxed text-gray-800">
Chez Hutopy, nous croyons en la puissance de la créativité sans limites. Notre environnement est
conçu pour inspirer, soutenir et propulser chaque membre vers de nouveaux sommets de
réalisation. Qu'il s'agisse de vidéo, d'art, de musique, d'écriture, de formation ou de toute
autre forme d'expression, Hutopy offre les outils nécessaires pour que chaque vision puisse
prendre vie.
</p>
</div>
<div class="grid grid-cols-2 md:grid-cols-2 gap-4">
<img src="/images/hutopymedia/homepage/grinding.png" alt="Grinding" class="rounded-lg shadow-lg">
<img src="/images/hutopymedia/homepage/microphone.png" alt="Microphone" class="rounded-lg shadow-lg">
<img src="/images/hutopymedia/homepage/girlarmy.png" alt="Girl Army" class="rounded-lg shadow-lg">
<img src="/images/hutopymedia/homepage/girlvr.png" alt="Girl VR" class="rounded-lg shadow-lg">
</div>
</div>
</div>
<!-- Profile Section -->
<div class="bg-white py-12">
<div class="max-w-4xl mx-auto px-6 space-y-8">
<h1 class="text-4xl font-bold text-center text-purple-900">Ils sont sur Hutopy.</h1>
<div class="grid grid-cols-1 md:grid-cols-3 gap-4">
<div class="flex justify-center items-center">
<RouterLink to="/">
<img src="/images/usersmedia/HutopyProfile/profilepictures/profileHutopyProfile02.png" alt="Profile Image" class="rounded-2xl shadow-lg">
</RouterLink>
</div>
<div class="flex justify-center items-center">
<RouterLink to="/@guillaumeaime">
<img src="/images/usersmedia/guillaumeMousseau/profilepictures/profileGuillaumeMousseau01.jpg" alt="Profile Image" class="rounded-2xl shadow-lg">
</RouterLink>
</div>
<div class="flex justify-center items-center">
<RouterLink to="/@chloebeaugrand">
<img src="/images/usersmedia/chloebeaugrand/profilepictures/profileChloeBeaugrand02.png" alt="Profile Image" class="rounded-2xl shadow-lg">
</RouterLink>
</div>
</div>
<div class="flex justify-center">
<RouterLink to="/browse">
<button class="px-6 py-3 bg-purple-700 text-white rounded-lg hover:bg-purple-600 focus:outline-none focus:ring-2 focus:ring-purple-500 transition duration-300 ease-in-out">Découvre les autres créateurs</button>
</RouterLink>
</div>
</div>
</div>
</div>
</template>
<script setup>
</script>
<style scoped>
.overlay p {
color: white;
font-size: 1.5rem;
text-align: center;
}
body {
background-color: #F4F4F4;
}
</style>

View File

@@ -1,672 +0,0 @@
<template>
<div style="background-color: #F4F4F4;">
<DefaultLayout></DefaultLayout>
<!--PC ---------------------------------------------------------------------------------------------->
<div class="md:flex hidden items-center justify-between flex-col" style=" margin-top: 3%;">
<!--Logo & bouttons -->
<v-container class="d-flex justify-center align-center container-spacer header-container">
<v-row justify="center" align="center">
<v-col></v-col>
<v-col cols="5" xl="4" xxl="4">
<v-img class="profile-banner" src="/images/hutopymedia/banners/hutopy.png"></v-img>
</v-col>
<v-col>
<v-row>
<RouterLink :to="{ name: 'contact' }">
<v-btn size="large" style="border-radius: 40px;" color="rgb(107, 0, 101)" outlined elevation="0">
Inscription
</v-btn>
</RouterLink>
</v-row>
</v-col>
</v-row>
</v-container>
<!--Header -->
<v-container class="container-spacer">
<v-row>
<v-spacer></v-spacer>
<v-col cols="7" xs="12" sm="10" md="12" lg="10" xl="7" xxl="6">
<v-img class="profile-banner banner-homepage" src="/images/hutopymedia/homepage/bannierehomepage.png"
style="border-radius: 20px;"></v-img>
</v-col>
<v-spacer></v-spacer>
</v-row>
</v-container>
<!-- Créer Profiter Inspirer -->
<v-container class="container-spacer">
<v-row class="d-flex justify-center creer-profiter-inspirer-row">
<v-col cols="10" xs="12" sm="10" md="12" lg="10" xl="7" xxl="6">
<v-row justify="center" align="center" class="créer-profiter-inspirer-row">
<v-col cols="4" sm="4" md="4">
<v-hover v-slot="{ isHovering, props }">
<v-card style="border-radius: 20px; min-width: 325px;" class="mx-auto card-size" v-bind="props">
<v-img src="/images/hutopymedia/homepage/creer.png"
style="min-width: 325px; border-radius: 20px; width: 80vw;"></v-img>
<v-overlay :model-value="isHovering" class="align-center justify-center" scrim="#6b0065" contained>
<v-container>
<v-card class="mx-auto" :max-width="600" v-bind="props" color="#a30e79">
<h3 class="white--text" style="text-align: center; margin-top: 10%; font-size: 1.5em;">CRÉER
</h3>
<p class="text-justify pa-4" style="font-size: 1.2em;">Libérez votre créativité sur Hutopy,
chaque idée trouve sa place et chaque créateur détient la clé d'un monde rempli de
possibilités infinies. Rejoignez-nous et transformez votre passion en réalité.</p>
</v-card>
</v-container>
</v-overlay>
</v-card>
</v-hover>
</v-col>
<v-col cols="4" sm="4" md="4">
<v-hover v-slot="{ isHovering, props }">
<v-card style="min-width: 325px; border-radius: 20px;" class="mx-auto card-size " v-bind="props">
<v-img src="/images/hutopymedia/homepage/partager.png"
style="min-width: 325px; border-radius: 20px; width: 80vw;"></v-img>
<v-overlay :model-value="isHovering" class="align-center justify-center" scrim="#6b0065" contained>
<v-container>
<v-card class="mx-auto" :max-width="600" v-bind="props" color="#a30e79">
<h3 class="white--text" style="text-align: center; margin-top: 10%; font-size: 1.5em;">
PROFITER
</h3>
<p class="text-justify pa-4" style="font-size: 1.2em;">Plongez dans l'univers Hutopy et
découvrez un espace profiter rime avec s'enrichir. Savourez des contenus uniques, des
interactions authentiques et une expérience personnalisée conçue pour éveiller vos sens et
enrichir votre quotidien.</p>
</v-card>
</v-container>
</v-overlay>
</v-card>
</v-hover>
</v-col>
<v-col cols="4" sm="4" md="4">
<v-hover v-slot="{ isHovering, props }">
<v-card style="min-width: 325px; border-radius: 20px;" class="mx-auto card-size" v-bind="props">
<v-img src="/images/hutopymedia/homepage/inspirer.png"
style="border-radius: 20px; width: 80vw;"></v-img>
<v-overlay :model-value="isHovering" class="align-center justify-center" scrim="#6b0065" contained>
<v-container>
<v-card class="mx-auto" :max-width="600" v-bind="props" color="#a30e79">
<h3 class="white--text" style="text-align: center; margin-top: 10%; font-size: 1.5em;">
INSPIRER
</h3>
<p class="text-justify pa-4" style="font-size: 1.2em;">Devenez une source d'inspiration sur
Hutopy, en partageant votre vision, votre talent et vos histoires. Influencez positivement
la
communauté, éveillez la curiosité et inspirez les autres à poursuivre leurs rêves dans un
cercle vertueux de créativité et d'inspiration.</p>
</v-card>
</v-container>
</v-overlay>
</v-card>
</v-hover>
</v-col>
</v-row>
</v-col>
</v-row>
</v-container>
<!-- Votre Hutopy -->
<v-container class="container-spacer">
<v-row justify="center">
<v-col cols="7" xs="12" sm="11" md="12" lg="10" xl="7" xxl="6">
<v-row justify="center">
<v-col cols="6" md="7" lg="6">
<!-- Subtitle : Votre Hutopy -->
<v-img cols="12" style="margin-top: -5%; min-width: 350px;"
src="/images/hutopymedia/homepage/votrehutopy.png"></v-img>
<!-- Your Hutopy text-->
<p class="text-center text-justify votre_hutopy_fontsize"
style="margin-top: 3%; margin-bottom: 5%; max-width: 900px;">
Bienvenue sur Hutopy, votre nouvelle frontière de création, de connexion et d'innovation. Au
cœur de notre mission réside une ambition audacieuse : transformer l'espace numérique en un
écosystème où chaque créateur, chaque rêveur, chaque professionnel, peut non seulement imaginer,
mais concrétiser son utopie personnelle. Hutopy est plus qu'une simple plateforme c'est une
communauté vibrante qui défie les conventions de léducation, encourage l'originalité et célèbre
la créativité.
</p>
<p class="text-center text-justify votre_hutopy_fontsize"
style="margin-top: 3%; margin-bottom: 5%; max-width: 900px;">
Chez Hutopy, nous croyons en la puissance de la créativité sans limites. Notre environnement est
conçu pour inspirer, soutenir et propulser chaque membre vers de nouveaux sommets de
réalisation. Qu'il s'agisse de vidéo, d'art, de musique, d'écriture, de formation ou de toute
autre forme d'expression, Hutopy offre les outils nécessaires pour que chaque vision puisse
prendre vie.
</p>
<v-col cols="12" class="text-center">
<RouterLink style="width: 450px;" :to="{ name: 'contact' }">
<v-btn size="x-large" style="width: 300px; border-radius: 40px;" color="rgb(107, 0, 101)" outlined
elevation="0">
Inscription
</v-btn>
</RouterLink>
</v-col>
</v-col>
<!-- 4 pictures -->
<v-col cols="6" md="5" lg="6">
<v-row justify="center" class="votre-hutopy-img">
<v-col cols="6" sm="12" md="12" lg="6">
<v-img style="border-radius: 30px;" src="/images/hutopymedia/homepage/grinding.png"
class="hidden-md-and-down" hidden-and-down></v-img>
</v-col>
<v-col cols="6" sm="12" md="12" lg="6">
<v-img style="border-radius: 30px;" src="/images/hutopymedia/homepage/microphone.png"></v-img>
</v-col>
<v-col cols="6" sm="12" md="6" lg="6">
<v-img style="border-radius: 30px;" src="/images/hutopymedia/homepage/girlarmy.png"></v-img>
</v-col>
<v-col cols="6" sm="6" md="6" lg="6">
<v-img style="border-radius: 30px;" class="d-none d-md-block"
src="/images/hutopymedia/homepage/girlvr.png"></v-img>
</v-col>
</v-row>
</v-col>
</v-row>
</v-col>
</v-row>
</v-container>
<!-- They are on the Hutopy section -->
<v-row style="margin-top: 20px; margin-bottom: 10px;">
<v-spacer></v-spacer>
<!-- Subtitle :Ils sont sur Hutopy -->
<v-col cols="9" xs="12" sm="12" md="12" lg="10" xl="8" xxl="7">
<h1 style=" margin-bottom: 20px; text-align: center; font-size: 4rem; font-weight: bold; color: #24393c">
Ils sont sur Hutopy.</h1>
<v-spacer></v-spacer>
<v-col>
<!-- Account links -->
<v-row justify="center" class="profile-images">
<v-col>
<router-link :to="{ name: 'Hutopy' }">
<img src="/images/usersmedia/HutopyProfile/profilepictures/profileHutopyProfile02.png"
alt="Profile Image" class="profile-image ">
</router-link>
</v-col>
<v-col>
<router-link :to="{ name: 'guillaumeaime' }">
<img src="/images/usersmedia/guillaumeMousseau/profilepictures/profileGuillaumeMousseau01.jpg"
alt="Profile Image" class="profile-image">
</router-link>
</v-col>
<v-col>
<router-link :to="{ name: 'chloebeaugrand' }">
<img src="/images/usersmedia/chloebeaugrand/profilepictures/profileChloeBeaugrand02.png"
alt="Profile Image" class="profile-image">
</router-link>
</v-col>
</v-row>
</v-col>
<v-row justify='center'>
<router-link :to="{ name: 'userbrowser' }">
<v-btn style="border-radius:10px; background-color:#a30e79; color:white">Découvre les autres créateurs
</v-btn>
</router-link>
</v-row>
<v-spacer></v-spacer>
</v-col>
<v-spacer></v-spacer>
</v-row>
</div>
<!-- Mobile ---------------------------------------------------------------------------------------->
<div class="md:hidden flex flex-col items-center justify-center">
<div>
<!--Banner -->
<img src="/images/hutopymedia/homepage/bannierehomepage.png" class="banner-image" alt="Bannière">
<!-- Créer -->
<v-row style="margin-top: 30px;" align="center">
<v-col cols="6">
<v-img style="margin-left: 25px; border-radius: 20px; width: 85%;"
src="/images/hutopymedia/homepage/creer.png"></v-img>
</v-col>
<v-col>
<p style="margin: 20px; text-align: justify;" class="center-vertical">Libérez votre créativité sur Hutopy,
où chaque idée trouve sa
place et chaque
créateur détient la clé
d'un monde rempli de possibilités infinies. Rejoignez-nous et transformez votre passion en réalité.</p>
</v-col>
</v-row>
<!-- Partager -->
<v-row align="center">
<v-col>
<p style=" margin: 20px; text-align: justify;" class="center-vertical">Devenez une source d'inspiration sur
Hutopy, en partageant
votre vision, votre
talent et vos histoires.
Influencez positivement la communauté, éveillez la curiosité et inspirez les autres à poursuivre leurs
rêves dans un cercle vertueux de créativité et d'inspiration.</p>
</v-col>
<v-col cols="6">
<v-img style="margin-right: 25px; border-radius: 20px; width: 85%;"
src="/images/hutopymedia/homepage/partager.png"></v-img>
</v-col>
</v-row>
<!-- Inspirer -->
<v-row align="center">
<v-col cols="6">
<v-img style="margin-left: 25px; border-radius: 20px; width: 85%;"
src="/images/hutopymedia/homepage/inspirer.png"></v-img>
</v-col>
<v-col>
<p style="margin: 20px; text-align: justify;" class="center-vertical">Devenez une source d'inspiration sur
Hutopy, en partageant
votre vision, votre
talent et vos histoires.
Influencez positivement la communauté, éveillez la curiosité et inspirez les autres à poursuivre leurs
rêves dans un cercle vertueux de créativité et d'inspiration.</p>
</v-col>
</v-row>
<!-- Votre Hutopy : Title -->
<v-img style="margin-top: 50px; margin-bottom: 25px; min-width: 350px;"
src="/images/hutopymedia/homepage/votrehutopy.png"></v-img>
<!-- Votre Hutopy : Text -->
<v-row align="center">
<v-col cols="11" style="margin: 4%;">
<p style="margin-top: 3%; margin-bottom: 5%; text-align: justify;" class="center-vertical">
Bienvenue sur Hutopy, votre nouvelle frontière de création, de connexion et d'innovation. Au
cœur de notre mission réside une ambition audacieuse : transformer l'espace numérique en un
écosystème chaque créateur, chaque rêveur, chaque professionnel, peut non seulement imaginer,
mais concrétiser son utopie personnelle. Hutopy est plus qu'une simple plateforme c'est une
communauté vibrante qui défie les conventions de léducation, encourage l'originalité et célèbre
la créativité.
</p>
<p style="margin-top: 3%; margin-bottom: 5%; text-align: justify;" class="center-vertical">
Chez Hutopy, nous croyons en la puissance de la créativité sans limites. Notre environnement est
conçu pour inspirer, soutenir et propulser chaque membre vers de nouveaux sommets de
réalisation. Qu'il s'agisse de vidéo, d'art, de musique, d'écriture, de formation ou de toute
autre forme d'expression, Hutopy offre les outils nécessaires pour que chaque vision puisse
prendre vie.
</p>
</v-col>
</v-row>
<!-- 4 pictures -->
<v-row style="margin-left: 15px; margin-right: 15px;">
<v-col cols="6" style="padding-left: 15px; padding-right: 15px;">
<v-img style="border-radius: 30px; width: 100%;" src="/images/hutopymedia/homepage/microphone.png"></v-img>
</v-col>
<v-col cols="6" style="padding-left: 15px; padding-right: 15px;">
<v-img style="border-radius: 30px; width: 100%;" src="/images/hutopymedia/homepage/grinding.png"></v-img>
</v-col>
</v-row>
<v-row style="margin-left: 15px; margin-right: 15px;">
<v-col style="padding-left: 15px; padding-right: 15px;">
<v-img style="border-radius: 30px; width: 100%;" src="/images/hutopymedia/homepage/girlarmy.png"></v-img>
</v-col>
<v-col style="padding-left: 15px; padding-right: 15px;">
<v-img style="border-radius: 30px; width: 100%;" src="/images/hutopymedia/homepage/girlvr.png"></v-img>
</v-col>
</v-row>
<!-- Inscription Btn -->
<v-container align="center">
<RouterLink :to="{ name: 'contact' }">
<v-btn block size="x-large" style="margin-top: 60px; border-radius: 10px;" color="rgb(107, 0, 101)" outlined
elevation="4">
Inscription
</v-btn>
</RouterLink>
</v-container>
<!-- They are on the Hutopy section -->
<h1
style="margin-top: 50px; margin-bottom: 50px; text-align: center; font-size: 3rem; font-weight: bold; color: #24393c">
Ils sont sur Hutopy.</h1>
<v-col>
<v-row justify="center" class="profile-images">
<v-col cols="8">
<router-link :to="{ name: 'Hutopy' }">
<img src="/images/usersmedia/HutopyProfile/profilepictures/profileHutopyProfile02.png"
alt="Profile Image" class="profile-image ">
</router-link>
</v-col>
<v-col cols="8">
<router-link :to="{ name: 'guillaumeaime' }">
<img src="/images/usersmedia/guillaumeMousseau/profilepictures/profileGuillaumeMousseau01.jpg"
alt="Profile Image" class="profile-image">
</router-link>
</v-col>
<v-col cols="8">
<router-link :to="{ name: 'chloebeaugrand' }">
<img src="/images/usersmedia/chloebeaugrand/profilepictures/profileChloeBeaugrand02.png"
alt="Profile Image" class="profile-image">
</router-link>
</v-col>
<v-row justify='center'>
<router-link :to="{ name: 'userbrowser' }">
<v-btn style="margin-top:30px; border-radius:10px; background-color:#a30e79; color:white">Découvre les autres créateurs
</v-btn>
</router-link>
</v-row>
</v-row>
</v-col>
</div>
</div>
<v-snackbar v-model="errorNoAccessSnackBar">
Vous n'etes pas connecter !
<template v-slot:actions>
<v-btn color="red" variant="text" @click="errorNoAccessSnackBar = false">
Fermer
</v-btn>
<v-btn color="green" variant="text" @click="goToLoginPage()">
Se connecter
</v-btn>
</template>
</v-snackbar>
<v-list style="background-color: #F4F4F4;" lines="one">
<v-list-item v-for=" item in itemList " :key="item" :title="item.firstName"
:subtitle="item.lastName"></v-list-item>
</v-list>
<FooterLayout></FooterLayout>
</div>
</template>
<script async setup>
import DefaultLayout from '@/layouts/DefaultLayout.vue';
import FooterLayout from '@/layouts/FooterLayout.vue';
import { ref } from 'vue';
import { useRouter } from 'vue-router';
const router = useRouter()
let itemList = ref([]);
let errorNoAccessSnackBar = ref(false);
const goToLoginPage = () => {
router.push('/login');
}
</script>
<style scoped>
.center-vertical {
display: flex;
justify-content: center;
align-items: center;
height: 100%;
}
.layer1-backgroundmobile {
background-color: rgba(163, 14, 121, 0.1);
border-radius: 20px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3);
}
.layer2-backgroundmobile {
border-radius: 20px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3);
}
.container-spacer {
margin-bottom: 50px;
}
.profile-images {
gap: 15px;
transform: scale(.92);
}
.profile-image {
width: auto;
border-radius: 35px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.4);
}
.image {
width: 100%;
height: auto;
border-radius: 8px;
}
.overlay {
position: absolute;
border-radius: 8px;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(163, 14, 121, 0.80);
display: flex;
text-align: left;
font-size: 1.5rem;
align-items: center;
opacity: 0;
transition: opacity 0.3s ease-in-out;
}
.banner-image {
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.4);
margin-top: 60px;
}
.image-container:hover .overlay {
opacity: 1;
}
.overlay p {
color: white;
font-size: 1.5rem;
text-align: center;
}
.custom-container {
position: relative;
max-width: 100vw;
}
.v-card {
max-width: calc(100% - 20px);
}
.v-card-imagecontainerpos {
margin-top: 55px;
border-radius: 8px;
}
body {
background-color: #F4F4F4;
}
@media (max-width: 600px) {
.votre_hutopy_fontsize {
font-size: 0.55em;
}
}
@media (min-width: 601px) and (max-width: 889px) {
.votre_hutopy_fontsize {
font-size: 1.06em;
}
.créer-profiter-inspirer-row {
margin-left: -120px;
margin-top: -120px
}
.card-size {
transform: scale(.7);
}
.banner-homepage {
transform: scale(1.19)
}
.votre-hutopy-img {
margin-top: -30px;
}
.header-container {
margin-top: 30px;
}
}
@media (min-width: 890px) and (max-width: 960px) {
.header-container {
margin-top: 30px;
}
.votre_hutopy_fontsize {
font-size: 1.2em;
}
.card-size {
transform: scale(.75);
}
.créer-profiter-inspirer-row {
margin-left: -80px;
margin-top: -130px
}
.banner-homepage {
transform: scale(1.07)
}
.votre-hutopy-img {
margin-top: -40px;
}
}
@media (min-width: 961px) and (max-width: 1280px) {
.votre_hutopy_fontsize {
font-size: 1.1em;
}
.banner-homepage {
transform: scale(1.06)
}
.card-size {
transform: scale(.90);
}
.créer-profiter-inspirer-row {
margin-left: -55px;
margin-top: -90px
}
.in-between-image {
margin-left: -100px;
}
.profile-images {
gap: 15px;
transform: scale(.72);
}
.votre-hutopy-img {
margin-top: -30px;
}
}
@media (min-width: 1281px) and (max-width: 1920px) {
.votre_hutopy_fontsize {
font-size: 1.2em;
}
.card-size {
transform: scale(1);
}
.banner-homepage {
transform: scale(1.03)
}
.créer-profiter-inspirer-row {
margin-left: -25px;
margin-top: -70px
}
.profile-images {
gap: 15px;
transform: scale(.64);
}
.votre-hutopy-img {
margin-top: 65px;
}
}
@media (min-width: 1921px) and (max-width: 2560px) {
.votre_hutopy_fontsize {
font-size: 1.2em;
}
.créer-profiter-inspirer-row {
margin-top: -60px;
}
.banner-homepage {
transform: scale(1.0)
}
.profile-images {
gap: 15px;
transform: scale(.90);
}
.votre-hutopy-img {
margin-top: 65px;
}
}
@media (min-width: 2561px) {
.votre_hutopy_fontsize {
font-size: 1.2em;
}
.créer-profiter-inspirer-row {
margin-top: -50px;
}
.card-size {
transform: scale(.98);
}
.banner-homepage {
transform: scale(.98)
}
.profile-images {
gap: 15px;
transform: scale(.978);
}
.votre-hutopy-img {
margin-top: -10px;
}
}
</style>

View File

@@ -1,24 +1,12 @@
<template> <template>
<DefaultLayout></DefaultLayout>
<!--PC --> <!--PC -->
<div class="hutopy-backgroud-color"> <div class="hutopy-backgroud-color">
<div class="hidden-xs flex-col items-center page-margin">
<v-container> <div class="flex hidden-xs flex-col items-center page-margin">
<!-- Banner --> <img class="h-20"
<v-row class="text-center align-center row-between-logo-text home-row"> src="/images/hutopymedia/banners/hutopy.png" />
<v-col xl="7" lg="9" md="11" sm="12" xs="12"> </v-col>
<img class="hutopy-header-image" src="/images/hutopymedia/banners/hutopy.png">
<v-col class="ml-0 text-left ">
<!-- Home btn -->
<RouterLink :to="{ name: 'home' }">
<v-btn class="home-btn" size="large" color="rgb(107, 0, 101)" outlined elevation="0"> Accueil</v-btn>
</RouterLink>
</v-col>
</v-row>
</v-container>
<!-- Home btn -->
<v-container class="row-between-logo-text"> <v-container class="row-between-logo-text">
<v-row> <v-row>
<v-spacer></v-spacer> <v-spacer></v-spacer>
@@ -152,10 +140,6 @@
dans le ciel de notre utopie partagée. dans le ciel de notre utopie partagée.
</p> </p>
</div> </div>
<FooterLayout></FooterLayout>
</div> </div>
@@ -185,8 +169,6 @@
<script setup> <script setup>
import DefaultLayout from '@/layouts/DefaultLayout.vue';
import FooterLayout from '@/layouts/FooterLayout.vue';
import { useClient } from "@/plugins/api.js"; import { useClient } from "@/plugins/api.js";
import { ref } from 'vue'; import { ref } from 'vue';

View File

@@ -0,0 +1,44 @@
<template>
<div class=" shadow-lg rounded-lg max-w-sm">
<div class="h-48 object-cover bg-purple">
<v-img :src="props.post.banner"
v-if="!isHttpUrl">
</v-img>
<iframe v-if="isHttpUrl"
:src="props.post.banner"
title="YouTube video player"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
referrerpolicy="strict-origin-when-cross-origin"
allowfullscreen>
</iframe>
</div>
<div class="text-lg font-bold">{{ props.post.title }}</div>
<div class="text-sm text-gray-500">{{ props.post.title }}</div>
<div class="text-base text-gray-700">{{ props.post.content }}</div>
</div>
</template>
<script setup>
import {defineProps, computed} from 'vue';
const isHttpUrl = computed(() => props.post.banner.startsWith('http'))
const props = defineProps({
post: {
type: Object,
required: true,
}
});
</script>

View File

@@ -0,0 +1,38 @@
<template>
<div class="px-2">
<div class="flex flex-col max-w-2xl mx-auto rounded-3xl shadow-2xl mt-2 mb-16">
<H1 class="text-center text-4xl bg-fuchsia-900 p-3 rounded-t-3xl border-b-4 border-b-gray-200 font-sans text-white">
Personnaliser votre profil
</H1>
<ProfileBanner></ProfileBanner>
<Aboutyou></Aboutyou>
<SocialLinks></SocialLinks>
<div class="sticky inset-x-0 bottom-0 flex justify-center px-4 pb-4">
<div class="flex space-x-2">
<v-btn class="save-btn" @click="saveAll">Enregistrer</v-btn>
<router-link :to="`/${currentUserName}`">
<v-btn class="save-btn">Retour</v-btn>
</router-link>
</div>
</div>
</div>
</div>
</template>
<script async setup>
import Aboutyou from "@/views/main/Aboutyou.vue";
import SocialLinks from "@/views/main/SocialLinks.vue";
import ProfileBanner from "@/views/main/ProfileBanner.vue";
import DonationPopup from "@/views/main/DonationPopup.vue";
</script>
<style scoped>
.save-btn {
z-index: 10;
}
</style>

View File

@@ -0,0 +1,171 @@
<template>
<div>
<div>
<div class="px-5 py-2 bg-fuchsia-800 text-white" :style="{ backgroundColor: accent2Color }" >
<div class="flex justify-center text-2xl">Photo de couverture</div>
</div>
<div>
<div :style="{ backgroundColor: topColor }" class="flex h-4"></div>
<img :src="bannerImageUrl" alt="Banner Image" class="w-full object-cover">
<div :style="{ backgroundColor: bottomColor }" class="h-4">
</div>
<div>
<div class="space-x-4 flex justify-center py-2">
<v-btn @click="openColorPicker('top')"
:style="{ backgroundColor: topColor, color: getTextColor(topColor) }">Haut
</v-btn>
<v-btn @click="openColorPicker('bottom')"
:style="{ backgroundColor: bottomColor, color: getTextColor(bottomColor) }">Bas
</v-btn>
<v-btn @click="openColorPicker('accent')"
:style="{ backgroundColor: accentColor, color: getTextColor(accentColor) }">Accent1
</v-btn>
<v-btn @click="openColorPicker('accent2')"
:style="{ backgroundColor: accent2Color, color: getTextColor(accent2Color) }">Menu
</v-btn>
</div>
</div>
</div>
</div>
<div class="px-3 py-3">
<v-file-input v-model="bannerImage" label="Téléverser une nouvelle bannière"
@change="onBannerFileChange"></v-file-input>
</div>
<!-- Profile -->
<div>
<div class="border-t-4 items-center px-5 py-4">
<div class="flex justify-center text-2xl ">Photo de profil</div>
</div>
<div class="flex justify-center py-4">
<img :src="profilePictureUrl"
:style="{ borderColor: accentColor, borderWidth: '3px', borderStyle: 'solid' }"
class="rounded-full max-w-48 max-w-48"
alt="Profile Image">
</div>
<div class="px-3">
<v-file-input v-model="profilePicture" label="Téléverser une nouvelle photo de profil"
@change="onProfileFileChange"></v-file-input>
</div>
</div>
<!-- Color Picker Dialog -->
<v-dialog v-model="showColorPicker" max-width="400px" class="d-flex justify-center align-center">
<v-card>
<v-card-title class="justify-center text-center">Choisir une couleur</v-card-title>
<v-card-text class="d-flex justify-center">
<v-color-picker v-model="selectedColor"></v-color-picker>
</v-card-text>
<v-card-actions class="justify-center">
<v-spacer></v-spacer>
<v-btn color="primary" @click="applyColor">OK</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
</div>
</template>
<script>
import {ref} from 'vue';
export default {
props: {
initialTopColor: {type: String, default: '#6B0065'},
initialBottomColor: {type: String, default: '#A30E79'},
initialAccentColor: {type: String, default: '#282286'},
initialAccent2Color: {type: String, default: '#A526B6'},
initialBannerImageUrl: {type: String, default: '/images/usersmedia/HutopyProfile/banners/banner01.png'},
initialProfilePictureUrl: {
type: String,
default: '/images/usersmedia/HutopyProfile/profilepictures/profileHutopyProfile01.png'
},
},
setup(props) {
const topColor = ref(props.initialTopColor);
const bottomColor = ref(props.initialBottomColor);
const accentColor = ref(props.initialAccentColor);
const accent2Color = ref(props.initialAccent2Color);
const bannerImageUrl = ref(props.initialBannerImageUrl);
const profilePictureUrl = ref(props.initialProfilePictureUrl);
const bannerImage = ref(null);
const profilePicture = ref(null);
const showColorPicker = ref(false);
const selectedColor = ref('#F4F4F4');
const colorTarget = ref('');
const onBannerFileChange = (event) => {
const file = event.target.files[0];
if (file) {
const reader = new FileReader();
reader.onload = (e) => {
bannerImageUrl.value = e.target.result;
};
reader.readAsDataURL(file);
}
};
const onProfileFileChange = (event) => {
const file = event.target.files[0];
if (file) {
const reader = new FileReader();
reader.onload = (e) => {
profilePictureUrl.value = e.target.result;
};
reader.readAsDataURL(file);
}
};
const openColorPicker = (target) => {
colorTarget.value = target;
showColorPicker.value = true;
};
const applyColor = () => {
if (colorTarget.value === 'top') {
topColor.value = selectedColor.value;
} else if (colorTarget.value === 'bottom') {
bottomColor.value = selectedColor.value;
} else if (colorTarget.value === 'accent') {
accentColor.value = selectedColor.value;
} else if (colorTarget.value === 'accent2') {
accent2Color.value = selectedColor.value; // Appliquer la nouvelle couleur
}
showColorPicker.value = false;
};
const getTextColor = (bgColor) => {
// Simple function to determine if the text should be white or black based on the background color
const color = bgColor.replace('#', '');
const r = parseInt(color.substr(0, 2), 16);
const g = parseInt(color.substr(2, 2), 16);
const b = parseInt(color.substr(4, 2), 16);
const brightness = (r * 299 + g * 587 + b * 114) / 1000;
return brightness > 155 ? '#000' : '#fff';
};
return {
topColor,
bottomColor,
accentColor,
accent2Color,
bannerImageUrl,
profilePictureUrl,
bannerImage,
profilePicture,
showColorPicker,
selectedColor,
colorTarget,
onBannerFileChange,
onProfileFileChange,
openColorPicker,
applyColor,
getTextColor,
};
},
};
</script>

View File

@@ -0,0 +1,88 @@
<template>
<aside class="relative h-full overflow-y-auto custom-scrollbar">
<nav class="h-full grid grid-rows-[60px_1fr_auto]">
<div></div>
<div class="pt-4 px-4">
<h2>Subscriptions</h2>
<ul class="space-y">
<li>
<RouterLink to="/@hutopy">
<div class="nav-button">
<v-icon class="mx-2">mdi-account</v-icon>
Hutopy
</div>
</RouterLink>
<RouterLink to="/@leffet">
<div class="nav-button">
<v-icon class="mx-2">mdi-account</v-icon>
L'Effet
</div>
</RouterLink>
<RouterLink to="/@chloebeaugrand">
<div class="nav-button">
<v-icon class="mx-2">mdi-account</v-icon>
Chloe Beaugrand
</div>
</RouterLink>
<RouterLink to="/@guillaumeaime">
<div class="nav-button">
<v-icon class="mx-2">mdi-account</v-icon>
Guillaume Aime
</div>
</RouterLink>
<RouterLink to="/@mathieucaron">
<div class="nav-button">
<v-icon class="mx-2">mdi-account</v-icon>
Mathieu Caron
</div>
</RouterLink>
<RouterLink to="/@arps">
<div class="nav-button">
<v-icon class="mx-2">mdi-account</v-icon>
ARPS
</div>
</RouterLink>
</li>
</ul>
</div>
<div class="border-t w-full py-10">
<SiteMenu></SiteMenu>
</div>
</nav>
</aside>
</template>
<style scoped>
.nav-button {
@apply rounded p-1 m-1 text-gray-800 font-sans;
}
.nav-button:hover {
@apply bg-[#903175] text-gray-200;
}
h2 {
@apply font-sans font-bold ml-2;
}
aside {
@apply relative;
}
.custom-scrollbar {
scrollbar-width: thin;
scrollbar-color: #903175 #f1f1f1;
}
</style>
<script setup lang="ts">
import SiteMenu from "@/views/main/SiteMenu.vue";
</script>

View File

@@ -0,0 +1,51 @@
<template>
<div class="flex flex-col">
<div class="flex flex-row justify-center pb-4 pt-2 py-4">
<!-- Facebook -->
<a href="https://www.facebook.com/profile.php?id=61556819217561">
<img src="/images/hutopymedia/icons/pink/facebookpink.png" alt="Facebook Logo">
</a>
<!-- Instagram -->
<a href="https://www.instagram.com/hutopy.inc/">
<img src="/images/hutopymedia/icons/pink/instagrampink.png" alt="Instagram Logo">
</a>
<!-- X / Twitter -->
<a href="https://twitter.com/Hutopyinc">
<img src="/images/hutopymedia/icons/pink/xpink.png" alt="X Logo">
</a>
</div>
<div class="py-4">
<RouterLink class="nav-button font-weight-bold" to="/join">Aidez-nous</RouterLink>
</div>
<div class="text-center ">
<RouterLink class="nav-button" to="/helpandcontact">Aide & Contact</RouterLink>
<RouterLink class="nav-button" to="/faq">FAQ</RouterLink>
<RouterLink class="nav-button" to="/guideforcreators">Guide pour les créateurs</RouterLink>
<RouterLink class="nav-button" to="/termsandconditions">Conditions générales</RouterLink>
<RouterLink class="nav-button" to="/contentpolicy">Politique de Contenu</RouterLink>
<RouterLink class="nav-button" to="/about">À Propos</RouterLink>
<RouterLink class="nav-button" to="/pricing">Frais</RouterLink>
</div>
</div>
</template>
<style scoped>
.nav-button {
@apply rounded flex justify-center font-sans py-1;
}
.nav-button:hover {
@apply text-purple-800 bg-gray-50;
}
img {
@apply m-2 w-10 h-10;
}
</style>
<script setup lang="ts">
</script>

View File

@@ -0,0 +1,56 @@
<template>
<div ref="container">
<div class="text-center text-2xl py-4 border-t-4">Liens des réseaux sociaux et de votre site</div>
<div class="px-5 py-2 flex flex-col space-y-4">
<div v-for="network in socialNetworks" :key="network.field">
<div class="flex justify-between items-center mb-2">
<label class="text-lg">{{ network.label }}</label>
</div>
<v-text-field v-model="network.value" :label="network.label" variant="outlined"></v-text-field>
</div>
<div class="flex flex-col space-y-4">
<div class="flex items-center mb-2">
<label class="text-lg mr-4">Icône pour votre site web *svg</label>
<v-file-input v-model="iconFile" label="Téléverser une icône" @change="onFileChange"></v-file-input>
</div>
<div v-if="iconUrl" class="flex justify-center">
<img :src="iconUrl" alt="Icon" class="icon-preview">
</div>
</div>
</div>
</div>
</template>
<script setup>
import { ref } from 'vue';
const socialNetworks = ref([
{ label: 'Instagram', field: 'instagram', value: '' },
{ label: 'TikTok', field: 'tiktok', value: '' },
{ label: 'Facebook', field: 'facebook', value: '' },
{ label: 'X', field: 'X', value: '' },
{ label: 'LinkedIn', field: 'linkedin', value: '' },
{ label: 'Site Web', field: 'website', value: '' }
]);
const iconUrl = ref('');
const iconFile = ref(null);
const onFileChange = (event) => {
const file = event.target.files[0];
if (file) {
const reader = new FileReader();
reader.onload = (e) => {
iconUrl.value = e.target.result;
};
reader.readAsDataURL(file);
}
};
</script>
<style scoped>
.icon-preview {
max-width: 250px;
max-height: 250px;
}
</style>

View File

@@ -1,883 +0,0 @@
<template>
<div style="background-color: #f4f4f4;">
<DefaultLayout style="margin-bottom: 30px"></DefaultLayout>
<!-- "Mobile -->
<v-row class="fluid hidden-md-and-up social-mobile-container"
style="margin-top: -10px; position: relative; z-index: 0; " hidden-md-and-down>
<v-col cols="12" class="pa-0" style="width: 100vw; overflow: hidden;">
<v-img class="profile-banner" max-height="375" :src="imageSrc" cover
style="box-shadow: 0 4px 6px rgba(0, 0, 0, 0.8);"></v-img>
</v-col>
</v-row>
<!-- "PurpleLine" -->
<v-row style="background-color: #6b0065; height: 5px; box-shadow: rgba(0, 0, 0, 0.7);">
</v-row>
<!-- "Mobile-Profile" -->
<!-- "Profile picture" -->
<v-row class="d-flex justify-center align-center d-sm-none" style="margin-top: 50px; margin-bottom: -10px">
<v-img :src="profilePicture" class="elevation-4 mobile-profile-picture-creator"></v-img>
</v-row>
<!-- User Social Network Links -->
<v-container style="margin-top: -70px; padding: 0;" class="hidden-md-and-up social-container-mobile-icons"
hidden-md-and-down>
<!-- Facebook -->
<v-row no-gutters class="d-flex justify-space-between align-center"
style="margin-left: 3%; margin-right: 3%;">
<v-col cols="2" sm="2" xs="3" style="margin-top: 60px; z-index: 50;"
class="d-flex justify-center align-center">
<a href="https://www.facebook.com/Hutopy">
<v-img class="socialicons-mobile" src="/images/hutopymedia/icons/black/facebookblack.png"
alt="Facebook"></v-img>
</a>
</v-col>
<!-- Instagram -->
<v-col cols="2" sm="2" xs="3" style="margin-top: 60px; z-index: 50;"
class="d-flex justify-center align-center">
<a href="https://www.instagram.com/hutopy.inc/">
<v-img class="socialicons-mobile" src="/images/hutopymedia/icons/black/instagramblack.png"
alt="Instagram"></v-img>
</a>
</v-col>
<!-- Profile picture - Small -->
<v-col cols="4" sm="4" xs="0" class="hidden-xs">
<v-row class="d-flex justify-center align-center">
<v-img :src="profilePicture" class="elevation-4 mobile-profile-picture-creator"></v-img>
</v-row>
</v-col>
<v-col cols="2" sm="2" xs="3" style="margin-top: 60px; z-index: 50;"
class="d-flex justify-center align-center">
<a href="https://twitter.com/Hutopyinc">
<v-img class="socialicons-mobile" src="/images/hutopymedia/icons/black/xblack.png"
alt="X"></v-img>
</a>
</v-col>
<v-spacer class="hidden-xs"> </v-spacer>
</v-row>
<!-- User informations Name title and description -->
<v-row class="social-container-mobile">
<v-col cols="12" xs="12" sm="4" class="d-flex justify-center">
<v-row class="d-flex justify-center">
{{ name }}
</v-row>
</v-col>
<v-spacer xs="12" sm="4"></v-spacer>
<v-col cols="12" xs="12" sm="4" class="d-flex justify-center">
<v-row class="d-flex justify-center">
{{ title }}
</v-row>
</v-col>
</v-row>
<v-row>
<v-container
style="border-bottom-left-radius: 15px; margin-top: -12px; border-bottom-right-radius: 15px;"
class="social-icon-group-mobile">
<v-expansion-panels style="min-width: 320px;">
<v-col cols="12" offset="-1">
<v-expansion-panel class="background-pink text-justify" style="color: white;"
text="Notre mission chez Hutopy est d'aider les gens à s'épanouir en leur proposant un environnement de partage unique qui va leur permettre de se surpasser. Nous travaillons étroitement avec la communauté d'Hutopy afin de concentrer notre développement sur ce que vous demandez et sur vos besoins, afin d'offrir les meilleurs outils. Le tout en gardant à l'esprit l'aspect humain de chacun. Il est important pour nous de contribuer à créer un monde meilleur."
title="À propos d'Hutopy :">
</v-expansion-panel>
</v-col>
</v-expansion-panels>
</v-container>
</v-row>
</v-container>
<!-- Bannière Pc -->
<v-row class="fluid hidden-sm-and-down" style="margin-top: -65px; position: relative; z-index: 0; "
hidden-sm-and-up>
<v-col cols="12" class="pa-0" style="width: 100vw; overflow: hidden;">
<v-img class="profile-banner" max-height="375" :src="imageSrc" cover
style="box-shadow: 0 4px 6px rgba(0, 0, 0, 0.8);"></v-img>
</v-col>
</v-row>
<v-row class="hidden-sm-and-down"
style="background-color: #6b0065; height: 5px; box-shadow: rgba(0, 0, 0, 0.7);" hidden-sm-and-up>
</v-row>
<!-- "Core (Menu / Center / Donation)" -->
<v-row>
<!-- "Menu" -->
<v-col cols="2" md="3" lg="3" xl="3" xxl="2" class="hidden-sm-and-down menu-col" hidden-sm-and-down>
<v-col style="margin: 0;">
<v-row class="Hutopy-menu-sticky-mobile">
<v-spacer></v-spacer>
<v-col>
<v-container style=" overflow-y: hidden;">
<!-- Nav-Btn -->
<v-col cols="12" class="px-0">
<v-img src="/images/hutopymedia/banners/hutopy.png" alt="Description de l'image"
style="height: 150px; width: 300px;" class="mx-auto" :elevation="10"></v-img>
<v-list dense class="main-background">
<v-list-item v-for="item in navigationItems" :key="item.link">
<router-link :to="item.link">
<v-btn text class="d-flex align-start align-center main-background"
elevation="0" outlined="false">
<v-icon left class="mr-4">{{ item.icon }}</v-icon>
{{ item.text }}
</v-btn>
</router-link>
</v-list-item>
</v-list>
</v-col>
</v-container>
</v-col>
</v-row>
<v-row style="height: 400px;"></v-row>
</v-col>
</v-col>
<!-- creators -->
<v-col class="middle-col" style="z-index: 5;" cols="12" xs="12" sm="12" md="6" lg="6" xl="6" xxl="8">
<v-container fluid style="margin-bottom: -40px; font-size: 3rem;">
<v-row justify="center" class="text-center">
<v-row justify="center">
<v-col cols="12" class="text-left d-flex justify-center ">
<div class="headline font-weight-bold">CRÉATEURS</div>
</v-col>
</v-row>
</v-row>
</v-container>
<v-container>
<v-row justify="center">
<v-col cols="12">
<v-container class="mt-10">
<v-row justify="center">
<router-link v-for="(profile, index) in profiles" :key="index"
:to="profile.routerLink" class="text-decoration-none">
<v-col>
<v-card class="mb-4 card-equal-width"
style="max-width: 250px; height: 300px;">
<v-img :src="profile.imageUrl" height="200px" width="300px"
style="margin-top: 10px;"></v-img>
<v-card-title style="font-weight: 600;" class="text-center">{{
profile.name
}}</v-card-title>
<v-card-text class="text-center">{{ profile.description }}</v-card-text>
</v-card>
</v-col>
</router-link>
</v-row>
</v-container>
</v-col>
</v-row>
</v-container>
</v-col>
<!-- "Large-Monitor-RightCol" Donation -->
<v-col cols="2" md="3" lg="3" xl="2" xxl="2" class="hidden-sm-and-down" hidden-sm-and-up>
<v-row>
<v-col>
<v-container class="sticky-bottom-label Je-soutien-container"
style="max-width: 400px ; bottom: 0;">
<!-- Donnation -->
<v-card style="border-radius: 20px;">
<v-container>
<v-row class="mb-0"
style="background-color: #6b0065; margin-left: -24px; margin-right: -24px; margin-top: -20px; justify-content: center;">
<v-card-title class="text-soutiens" style="margin-top: 15px;">
JE SOUTIENS!
</v-card-title>
</v-row>
<StripePayment creator-id="3c4317c6-af4d-475a-a382-6d0a675cc67f"></StripePayment>
</v-container>
</v-card>
</v-container>
<v-container style="height: 400px;">
</v-container>
</v-col>
<v-spacer>
</v-spacer>
</v-row>
</v-col>
</v-row>
<!-- "Mobile" Donation -->
<v-col class="hidden-md-and-up sticky-bottom-label" hidden-sm-and-down
style="background-color: #6b0065; margin-top: 30px; text-align: center;">
<!-- Barre cliquable pour ouvrir le drawer -->
<v-btn @click="drawerbottom = !drawerbottom" elevation="0"
style="background-color: #6b0065; color: white; text-align: center;" class="text-soutiens ">
JE SOUTIENS
</v-btn>
</v-col>
<!-- Drawer du bas -->
<template>
<div>
<v-bottom-sheet v-model="drawerbottom" class="sticky-bottom-label" hide-overlay>
<v-container style="background-color: #6b0065; color: white; padding: 20px; text-align: center;">
<h1 class="text-soutiens">JE SOUTIENS</h1>
<StripePayment creator-id="3c4317c6-af4d-475a-a382-6d0a675cc67f"></StripePayment>
</v-container>
</v-bottom-sheet>
</div>
</template>
<FooterLayout></FooterLayout>
</div>
</template>
<script setup>
import DefaultLayout from '@/layouts/DefaultLayout.vue';
import FooterLayout from '@/layouts/FooterLayout.vue';
import { ref } from 'vue';
import StripePayment from '../StripePayment.vue';
let imageSrc = '/images/usersmedia/HutopyProfile/banners/banner01.png';
let profilePicture = '/images/usersmedia/HutopyProfile/profilepictures/profileHutopyProfile01.png';
let name = 'Hutopy'
let title = 'Page officiel'
let drawerbottom = ref(false)
let navigationItems = [
{ icon: 'mdi-home', text: 'Accueil', link: 'home' },
{ icon: 'mdi-account-group', text: 'Créateurs', link: '/userbrowser' },
{ icon: 'mdi-handshake', text: 'Aidez-nous', link: '/contact' },
];
const profiles = ref([
{
id: 1,
name: "Hutopy",
description: "Page officielle",
imageUrl: '/images/usersmedia/HutopyProfile/profilepictures/profileHutopyProfile01.png',
routerLink: 'Hutopy'
},
{
id: 2,
name: "L'effet",
description: "Fondation",
imageUrl: '/images/usersmedia/leffet/profilepictures/leffetProfile01.png',
routerLink: 'leffet'
},
{
id: 3,
name: "Guillaume M",
description: "Créateur de contenus",
imageUrl: '/images/usersmedia/guillaumeMousseau/profilepictures/profileGuillaumeMousseau01.png',
routerLink: 'guillaumeaime'
},
{
id: 4,
name: "Chloé Beaugrand",
description: "Spécialiste en médias sociaux",
imageUrl: '/images/usersmedia/chloebeaugrand/profilepictures/profileChloeBeaugrand01.png',
routerLink: 'chloebeaugrand'
},
{
id: 5,
name: "Mathieu Caron",
description: "Entrevue Atypique",
imageUrl: '/images/usersmedia/mathieuCaron/profilepictures/profileMathieuCaron01.png',
routerLink: 'mathieuCaron'
},
{
id: 6,
name: "ARPS",
description: "Agence créative",
imageUrl: '/images/usersmedia/ARPS/profilepictures/profileARPS.png',
routerLink: 'ARPS'
}
]);
</script>
<style scoped>
.invert-color {
filter: invert(1);
}
.Hutopy-menu-sticky-mobile {
position: sticky;
top: 0;
bottom: 0;
left: 0;
width: 100%;
z-index: 1000;
margin-top: -40px;
}
.sticky-bottom-label {
position: sticky;
top: 0;
bottom: 0;
left: 0;
width: 100%;
z-index: 1000;
margin-top: 20px;
}
.sticky-top-label {
position: sticky;
bottom: 0;
right: 10%;
width: 100%;
z-index: 1000;
}
.text-soutiens {
margin-bottom: 15px;
color: white;
font-size: 1.5rem;
letter-spacing: 7px;
text-align: center;
}
.name-info {
margin-top: -10px;
margin-left: 15%;
}
.occupation-info {
margin-left: 15%;
font-size: large;
}
.name-info-mobile {
margin-left: 22px;
font-size: 1.3rem
}
.main-background {
background-color: #f4f4f4;
}
.profile-container {
margin-top: -16%;
}
.btn-custom {
width: 100%;
background-color: transparent;
}
.background-profile-container {
background-color: #ececec;
color: white;
border-top: 3px solid #a30e79;
border-right: 3px solid #a30e79;
font-weight: 700;
font-size: 1.15rem;
border-radius: 25px;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.3)
}
.background-pink {
background-color: #23393b;
color: white;
font-weight: 400;
}
.label-text {
font-weight: 400;
margin-left: 3%;
font-size: 1rem;
}
.profile-name {
margin-top: -15%;
}
.socialicons {
width: 35px;
max-width: 100px;
margin-top: 3px;
margin-left: 40px;
}
.socialicons-mobile {
width: 35px;
max-width: 100px;
margin-top: 27px;
margin-left: 20px;
}
.youtube-card {
margin-left: 2%;
margin-right: 2%;
border-radius: 15px;
background-color: #f4f4f4;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.4)
}
.card-title {
font-size: 1.4rem;
margin-top: 10px;
}
.card-date {
margin-left: 10px;
margin-top: -18px;
margin-bottom: -20px;
font-size: .8rem;
}
.social-container {
background-color: #6b0065;
border-top-right-radius: 30px;
border-bottom-right-radius: 30px;
font-size: 1.7rem;
font-weight: 600;
color: white;
}
.social-container2 {
background-color: #a30e79;
border-bottom-right-radius: 30px;
font-size: 1.4rem;
font-weight: 500;
color: white;
}
.social-container-mobile {
background-color: #a30e79;
font-size: 1.4rem;
font-weight: 600;
color: white;
z-index: 1000;
margin: auto;
text-align: center;
}
.social-container2-mobile {
background-color: #0baab2;
z-index: 1000;
font-size: 1.2rem;
font-weight: 500;
color: white;
}
.social-icon-group-mobile {
background-color: #6b0065;
}
.mini-profile-picture {
border-radius: 100px;
}
.btn-card-options {
background-color: #f4f4f4;
width: 50px;
margin-left: -12px;
margin-top: 10px;
}
.mobile-profile-picture-creator {
border-radius: 100px;
height: 150px;
width: 150px;
border-radius: 50%;
max-width: 150px;
border: 4px solid white;
z-index: 1000;
}
.mobile-header {
height: 50px;
margin-left: -13%;
margin-top: 6%;
}
.h1-navigation {
text-align: center;
font-weight: 600;
margin-bottom: 10%;
}
.mobile-profile-picture {
height: 40px;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2);
border: 2px solid #a30e79;
margin-right: 10px
}
.profile-banner {
margin-top: 25px;
min-height: 200px
}
.v-navigation-drawer {
max-height: 100vh;
}
@media (min-width: 150px) and (max-width: 474px) {
.mobile-profile-picture-creator {
transform: scale(1.5) translateY(-30%) translateX(0%);
}
.socialicons-mobile {
width: 35px;
max-width: 100px;
margin-top: 0px;
margin-left: 20px;
}
}
@media (min-width: 475px) and (max-width: 599px) {
.socialicons-mobile {
width: 35px;
max-width: 100px;
margin-top: 0px;
margin-left: px;
}
.mobile-profile-picture-creator {
transform: scale(1.5) translateY(-30%) translateX(0%);
}
.profile-container-mobile {
width: 110%;
margin-left: -3%;
margin-top: -112px;
}
.occupation-info {
font-size: 1rem;
}
.card-youtube {
min-height: 250px;
}
.name-info-mobile {
font-size: 1.6rem;
}
}
@media (min-width: 599px) and (max-width: 749px) {
.mobile-profile-picture-creator {
transform: scale(1.5) translateY(25%) translateX(0%);
}
.profile-container {
width: 110%;
margin-left: -3%;
}
.profile-container-mobile {
width: 110%;
margin-left: -3%;
margin-top: -110px;
}
.name-info {
font-size: 1.2rem;
}
.occupation-info {
font-size: 1rem;
}
.card-youtube {
min-height: 330px;
}
}
@media (min-width: 750px) and (max-width: 960px) {
.mobile-profile-picture-creator {
transform: scale(1.8) translateY(25%) translateX(0%);
}
.profile-container {
width: 110%;
margin-left: -3%;
}
.profile-container-mobile {
width: 110%;
margin-left: -3%;
margin-top: -110px;
}
.name-info {
font-size: 1.2rem;
}
.occupation-info {
font-size: 1rem;
}
.card-youtube {
min-height: 425px;
}
}
@media (min-width: 960px) and (max-width: 1280px) {
.middle-col {
margin-left: -30px;
}
.text-soutiens {
font-size: 1.2rem;
letter-spacing: 5px;
}
.profile-container {
margin-top: -185px;
min-width: 480px
}
.card-youtube {
min-height: 270px;
}
.Je-soutien-container {
min-width: 325px;
margin-left: -35px;
}
.mobile-profile-picture-creator {
transform: scale(1.3) translateY(25%) translateX(-50px);
}
.name-info {
font-size: 1.2rem;
margin-left: 20px;
margin-top: -6px
}
.occupation-info {
margin-left: 40px;
margin-top: -8px
}
.social-container {
margin-left: 80px;
min-width: 270px;
max-height: 40px
}
.social-container2 {
margin-left: 50px;
min-width: 250px;
max-height: 35px
}
.socialicons {
width: 34px;
max-width: 100px;
margin-top: 15px;
margin-left: 25px;
}
}
@media (min-width: 1280px) and (max-width: 1600px) {
.text-soutiens {
font-size: 1.3rem;
letter-spacing: 8px;
}
.mobile-profile-picture-creator {
transform: scale(1.3) translateY(25%) translateX(-50px);
}
.profile-container {
margin-top: -180px;
}
.card-youtube {
min-height: 290px;
}
.menu-col {
margin-left: -4%;
}
.Je-soutien-container {
min-width: 350px;
}
.name-info {
font-size: 1.2rem;
margin-left: 20px;
margin-top: -6px
}
.social-container {
margin-left: 90px;
min-width: 350;
max-height: 40px
}
.occupation-info {
margin-left: 70px;
margin-top: -8px
}
.social-container2 {
margin-left: 40px;
min-width: 290px;
max-height: 35px
}
.socialicons {
width: 34px;
max-width: 100px;
margin-top: 15px;
margin-left: 25px;
}
}
@media (min-width: 1600px) and (max-width: 1919px) {
.text-soutiens {
font-size: 1.3rem;
}
.mobile-profile-picture-creator {
transform: scale(1.4) translateY(25%) translateX(-40px);
}
.profile-container {
margin-top: -171px;
}
.card-youtube {
min-height: 355px;
}
.menu-col {
margin-left: -4%;
}
.Je-soutien-container {
min-width: 400px;
}
.name-info {
font-size: 1.5rem;
margin-top: -4px;
margin-left: 35px;
}
.occupation-info {
font-size: 1.3rem;
margin-left: 75px;
margin-top: -2px
}
.social-container2 {
margin-left: 70px;
min-width: 300px;
}
}
@media (min-width: 1920px) and (max-width: 2559px) {
.text-soutiens {
font-size: 1.3rem;
}
.profile-container {
margin-top: -160px;
}
.card-youtube {
min-height: 380px;
}
.Je-soutien-container {
min-width: 400px;
}
.mobile-profile-picture-creator {
transform: scale(1.4) translateY(25%) translateX(-40px);
}
.name-info {
font-size: 1.5rem;
margin-left: 35px;
margin-top: -4px;
}
.social-container {
margin-left: 100px;
}
.occupation-info {
font-size: 1.3rem;
margin-left: 110px;
margin-top: -4px
}
.social-container2 {
margin-left: 30px;
min-width: 360px;
}
.socialicons {
width: 38px;
max-width: 100px;
margin-top: 13px;
margin-left: 40px;
}
}
@media (min-width: 2560px) {
.mobile-profile-picture-creator {
transform: scale(1.5) translateY(25%) translateX(-20px);
}
.profile-container {
margin-top: -150px
}
.profile-banner {
margin-top: 25px;
min-height: 450px;
}
.card-youtube {
min-height: 380px;
}
.text-soutiens {
font-size: 1.5rem;
}
.name-info {
font-size: 2rem;
}
.social-container {
margin-left: 140px;
}
.social-container2 {
margin-left: 130px;
}
.occupation-info {
font-size: 1.5rem;
margin-left: 65px;
margin-top: -6px
}
.socialicons {
width: 45px;
max-width: 100px;
margin-top: 15px;
margin-left: 40px;
}
}
</style>

57
src/views/main/Wallet.vue Normal file
View File

@@ -0,0 +1,57 @@
<template>
<v-container class="mt-10 bg-gray-100 py-10 rounded-lg shadow-lg border border-fuchsia-500 mb-15">
<div class="flex justify-center text-6xl mb-4 font-sans font-weight-bold">Portefeuille</div>
<div class="flex justify-between mb-4">
<div class="text-left">
<span class="font-bold">Montant Total : </span>
</div>
<div class="text-center">
<span class="font-bold">Nombre total de transactions : </span>
</div>
</div>
<v-data-table
:headers="headers"
:items="transactions"
class="elevation-1 text-black"
:items-per-page="5"
show-group-by
>
</v-data-table>
</v-container>
</template>
<script async setup>
import { onBeforeMount, ref } from 'vue';
import {useClient} from "@/plugins/api.js";
import MyUserModel from "@/models/myUserModel.js";
const client = useClient();
const total = ref(false);
const drawer = ref(false);
const currentUserName = ref("INVITÉ");
let currentUser = null;
onBeforeMount(async () => {
try {
const myUser = await client.get("/api/GetMyUser");
const currentUserModel = MyUserModel.createFromApiResult(myUser.data);
currentUser = currentUserModel;
currentUserName.value = currentUserModel.firstName + " " + currentUserModel.lastName
} catch(error) {
console.log("User not logged")
}
})
function logout(){
localStorage.removeItem('jwt');
window.location.reload();
}
</script>
<style scoped>
</style>

View File

@@ -1,118 +0,0 @@
<template>
<body style="background-color:#f4f4f4">
<DefaultLayout></DefaultLayout>
<v-row style="background-color: #6b0065; height: 100px; margin-top: -50px; margin-bottom: -25px;">
</v-row>
<v-row justify="center">
<v-col cols="12">
<v-img class="profile-banner" max-height="375" :src="bannerImageUrl" cover
style="box-shadow: 0 4px 6px rgba(0, 0, 0, 0.8);"></v-img>
</v-col>
</v-row>
<v-row style="background-color: #6b0065; height: 100px; margin-top: 0;" align="center">
<v-col cols="12" class="text-right">
<v-btn style="margin-right: 3%;"> <v-icon>mdi-pencil</v-icon></v-btn>
</v-col>
</v-row>
<v-container style="max-width: 800px; margin-top: -100px" class="d-flex justify-center align-center">
<v-container>
<v-row justify="center">
<v-col style="background-color: white; border-radius: 30px;" class="col-shadow" cols="12">
<v-row justify="center" style="margin-bottom: 20px;">
<v-col cols="auto" class="d-flex justify-center">
<v-img class="your-profile-picture" :src="profilePictureUrl"></v-img>
</v-col>
<v-col cols="auto" class="d-flex justify-center align-center">
<v-btn style="margin-top: -30px;">
<v-icon>mdi-pencil</v-icon>
</v-btn>
</v-col>
</v-row>
<p class="text-center" style="margin-bottom: 10px; font-size: 2.5rem; font-weight: 600;">
{{ userName }}
</p>
<p class="text-center" style="margin-bottom: 50px; font-size: 1.2rem">
{{ firstName }} {{ lastName }}
</p>
<v-form>
<v-text-field variant="solo" v-model="firstName" label="Prénom" :readonly="!isEditing"></v-text-field>
<v-text-field variant="solo" v-model="lastName" label="Nom" :readonly="!isEditing"></v-text-field>
<v-text-field variant="solo" v-model="titre" label="Titre" :readonly="!isEditing"></v-text-field>
<v-text-field variant="solo" v-model="description" label="Description"
:readonly="!isEditing"></v-text-field>
</v-form>
<v-col class="text-right">
<router-link :to="{ name: 'creatorfolio' }" class="">
<v-btn style="margin-right: 20px;">Retour</v-btn>
</router-link>
<v-btn @click="toggleEdit">{{ isEditing ? 'Sauvegarder' : 'Éditer' }}</v-btn>
</v-col>
</v-col>
</v-row>
</v-container>
</v-container>
<FooterLayout></FooterLayout>
</body>
</template>
<script async setup>
import DefaultLayout from '@/layouts/DefaultLayout.vue';
import FooterLayout from '@/layouts/FooterLayout.vue';
import MyUserModel from "@/models/myUserModel.js";
import { useClient } from "@/plugins/api.js";
import { onBeforeMount, ref } from 'vue';
const client = useClient();
const profilePictureUrl = ref('/images/usersmedia/guillaumeMousseau/profilepictures/profileGuillaumeMousseau01.png');
const bannerImageUrl = ref('/images/usersmedia/guillaumeMousseau/banners/bannerGuillaumeMousseau01.png');
const firstName = ref('');
const lastName = ref('');
const userName = ref('');
const titre = ref('');
const description = ref('');
const isEditing = ref(false);
const fetchUserData = async () => {
try {
const myUser = await client.get("/api/GetMyUser");
const currentUserModel = MyUserModel.createFromApiResult(myUser.data);
firstName.value = currentUserModel.firstName;
lastName.value = currentUserModel.lastName;
userName.value = currentUserModel.userName;
// Assignez d'autres champs si nécessaire
} catch (error) {
console.error('Error fetching user data:', error);
}
};
const toggleEdit = () => {
isEditing.value = !isEditing.value;
};
onBeforeMount(fetchUserData);
</script>
<style>
.your-profile-picture {
width: 300px;
border-radius: 40px;
box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.6);
}
.row-shadow {
box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.6);
}
.col-shadow {
box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.2);
}
</style>

View File

@@ -0,0 +1,51 @@
[
{
"ìd": 1,
"name": "Hutopy",
"title": "Page officielle",
"description": "Site officiel pour Hutopy. Venez-nous-y retrouver avec tous vos fans!",
"imageUrl": "/images/usersmedia/HutopyProfile/profilepictures/profileHutopyProfile01.png",
"routerLink": "@hutopy",
"about": "Notre mission chez Hutopy est d'aider les gens à s'épanouir en leur proposant un environnement de partage unique qui va leur permettre de se surpasser. Nous travaillons étroitement avec la communauté d'Hutopy afin de concentrer notre développement sur ce que vous demandez et sur vos besoins, afin d'offrir les meilleurs outils. Le tout en gardant à l'esprit l'aspect humain de chacun. Il est important pour nous de contribuer à créer un monde meilleur.",
"contacts": {
"twitter": "https://twitter.com/Hutopyinc",
"facebook": "https://www.facebook.com/Hutopy",
"instagram": "https://www.instagram.com/hutopy.inc/"
}
},
{
"id": 2,
"name": "L'effet",
"description": "Fondation",
"imageUrl": "/images/usersmedia/leffet/profilepictures/leffetProfile01.png",
"routerLink": "@leffet"
},
{
"id": 3,
"name": "Guillaume M",
"description": "Créateur de contenus",
"imageUrl": "/images/usersmedia/guillaumeMousseau/profilepictures/profileGuillaumeMousseau01.png",
"routerLink": "@guillaumeaime"
},
{
"id": 4,
"name": "Chloé Beaugrand",
"description": "Spécialiste en médias sociaux",
"imageUrl": "/images/usersmedia/chloebeaugrand/profilepictures/profileChloeBeaugrand01.png",
"routerLink": "@chloebeaugrand"
},
{
"id": 5,
"name": "Mathieu Caron",
"description": "Entrevue Atypique",
"imageUrl": "/images/usersmedia/mathieuCaron/profilepictures/profileMathieuCaron01.png",
"routerLink": "@mathieuCaron"
},
{
"id": 6,
"name": "ARPS",
"description": "Agence créative",
"imageUrl": "/images/usersmedia/ARPS/profilepictures/profileARPS.png",
"routerLink": "@ARPS"
}
]

34
src/views/main/posts.json Normal file
View File

@@ -0,0 +1,34 @@
[
{
"id": 1,
"creatorId": 1,
"title": "Déploiement de la version 0.10 d'Hutopy",
"date": "24-04-2024",
"banner": "https://www.youtube.com/embed/neKWqjE0eSs?si=Bo7xbYaw9-56w3lU",
"content": "Bonjour, Nous sommes fiers de vous présenter la version 0.10 d'Hutopy. Nous sommes au début d'une aventure visant à transformer la sphère des médias sociaux. Notre objectif est d'apporter un souffle de fraîcheur en favorisant des interactions plus constructives entre les individus. Dans cette première version, seuls nos utilisateurs testeurs ont accès à la plateforme comme créateur. Dans un futur proche, avec le déploiement de la version 0.2, nous contacterons les personnes qui se sont inscrites via l'onglet d'inscription et ont rempli quelques questions. Si vous souhaitez soutenir le développement de la plateforme, deux options s'offrent à vous. La première consiste à nous apporter un soutien financier, tandis que la seconde est de nous contacter pour faire partie de l'équipe de développement. Nous recherchons actuellement un programmeur supplémentaire pour faire progresser certaines fonctionnalités. Merci de visiter Hutopy."
},
{
"id": 1,
"creatorId": 1,
"title": "Déploiement de la version 0.10 d'Hutopy",
"date": "24-04-2024",
"banner": "/images/usersmedia/HutopyProfile/pictures/version.png",
"content": "Bonjour, Nous sommes fiers de vous présenter la version 0.10 d'Hutopy. Nous sommes au début d'une aventure visant à transformer la sphère des médias sociaux. Notre objectif est d'apporter un souffle de fraîcheur en favorisant des interactions plus constructives entre les individus. Dans cette première version, seuls nos utilisateurs testeurs ont accès à la plateforme comme créateur. Dans un futur proche, avec le déploiement de la version 0.2, nous contacterons les personnes qui se sont inscrites via l'onglet d'inscription et ont rempli quelques questions. Si vous souhaitez soutenir le développement de la plateforme, deux options s'offrent à vous. La première consiste à nous apporter un soutien financier, tandis que la seconde est de nous contacter pour faire partie de l'équipe de développement. Nous recherchons actuellement un programmeur supplémentaire pour faire progresser certaines fonctionnalités. Merci de visiter Hutopy."
},
{
"id": 1,
"creatorId": 1,
"title": "Déploiement de la version 0.10 d'Hutopy",
"date": "24-04-2024",
"banner": "/images/usersmedia/HutopyProfile/pictures/version.png",
"content": "Bonjour, Nous sommes fiers de vous présenter la version 0.10 d'Hutopy. Nous sommes au début d'une aventure visant à transformer la sphère des médias sociaux. Notre objectif est d'apporter un souffle de fraîcheur en favorisant des interactions plus constructives entre les individus. Dans cette première version, seuls nos utilisateurs testeurs ont accès à la plateforme comme créateur. Dans un futur proche, avec le déploiement de la version 0.2, nous contacterons les personnes qui se sont inscrites via l'onglet d'inscription et ont rempli quelques questions. Si vous souhaitez soutenir le développement de la plateforme, deux options s'offrent à vous. La première consiste à nous apporter un soutien financier, tandis que la seconde est de nous contacter pour faire partie de l'équipe de développement. Nous recherchons actuellement un programmeur supplémentaire pour faire progresser certaines fonctionnalités. Merci de visiter Hutopy."
},
{
"id": 1,
"creatorId": 1,
"title": "Déploiement de la version 0.10 d'Hutopy",
"date": "24-04-2024",
"banner": "/images/usersmedia/HutopyProfile/pictures/version.png",
"content": "Bonjour, Nous sommes fiers de vous présenter la version 0.10 d'Hutopy. Nous sommes au début d'une aventure visant à transformer la sphère des médias sociaux. Notre objectif est d'apporter un souffle de fraîcheur en favorisant des interactions plus constructives entre les individus. Dans cette première version, seuls nos utilisateurs testeurs ont accès à la plateforme comme créateur. Dans un futur proche, avec le déploiement de la version 0.2, nous contacterons les personnes qui se sont inscrites via l'onglet d'inscription et ont rempli quelques questions. Si vous souhaitez soutenir le développement de la plateforme, deux options s'offrent à vous. La première consiste à nous apporter un soutien financier, tandis que la seconde est de nous contacter pour faire partie de l'équipe de développement. Nous recherchons actuellement un programmeur supplémentaire pour faire progresser certaines fonctionnalités. Merci de visiter Hutopy."
}
]

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,936 +0,0 @@
<template>
<div style="background-color: #f4f4f4;">
<DefaultLayout style="margin-bottom: 30px"></DefaultLayout>
<!-- "Mobile -->
<v-row class="fluid hidden-md-and-up social-mobile-container"
style="margin-top: -10px; position: relative; z-index: 0; " hidden-md-and-down>
<v-col cols="12" class="pa-0" style="width: 100vw; overflow: hidden;">
<v-img class="profile-banner" max-height="375" :src="imageSrc" cover
style="box-shadow: 0 4px 6px rgba(0, 0, 0, 0.8);"></v-img>
</v-col>
</v-row>
<!-- "PurpleLine" -->
<v-row style="background-color: #6b0065; height: 5px; box-shadow: rgba(0, 0, 0, 0.7);">
</v-row>
<!-- "Mobile-Profile" -->
<!-- "Profile picture" -->
<v-row class="d-flex justify-center align-center d-sm-none" style="margin-top: 50px; margin-bottom: -10px">
<v-img :src="profilePicture" class="elevation-4 mobile-profile-picture-creator"></v-img>
</v-row>
<!-- User Social Network Links -->
<v-container style="margin-top: -70px; padding: 0;" class="hidden-md-and-up social-container-mobile-icons"
hidden-md-and-down>
<!-- Facebook -->
<v-row no-gutters class="d-flex justify-space-between align-center" style="margin-left: 3%; margin-right: 3%;">
<v-col cols="2" sm="2" xs="3" style="margin-top: 60px; z-index: 50;" class="d-flex justify-center align-center">
<a href="https://www.facebook.com/Hutopy">
<v-img class="socialicons-mobile" src="/images/hutopymedia/icons/black/facebookblack.png"
alt="Facebook"></v-img>
</a>
</v-col>
<!-- Instagram -->
<v-col cols="2" sm="2" xs="3" style="margin-top: 60px; z-index: 50;" class="d-flex justify-center align-center">
<a href="https://www.instagram.com/hutopy.inc/">
<v-img class="socialicons-mobile" src="/images/hutopymedia/icons/black/instagramblack.png"
alt="Instagram"></v-img>
</a>
</v-col>
<!-- Profile picture - Small -->
<v-col cols="4" sm="4" xs="0" class="hidden-xs">
<v-row class="d-flex justify-center align-center">
<v-img :src="profilePicture" class="elevation-4 mobile-profile-picture-creator"></v-img>
</v-row>
</v-col>
<v-col cols="2" sm="2" xs="3" style="margin-top: 60px; z-index: 50;" class="d-flex justify-center align-center">
<a href="https://twitter.com/Hutopyinc">
<v-img class="socialicons-mobile" src="/images/hutopymedia/icons/black/xblack.png" alt="X"></v-img>
</a>
</v-col>
<v-spacer class="hidden-xs"> </v-spacer>
</v-row>
<!-- User informations Name title and description -->
<v-row class="social-container-mobile">
<v-col cols="12" xs="12" sm="4" class="d-flex justify-center">
<v-row class="d-flex justify-center">
{{ name }}
</v-row>
</v-col>
<v-spacer xs="12" sm="4"></v-spacer>
<v-col cols="12" xs="12" sm="4" class="d-flex justify-center">
<v-row class="d-flex justify-center">
{{ title }}
</v-row>
</v-col>
</v-row>
<v-row>
<v-container style="border-bottom-left-radius: 15px; margin-top: -12px; border-bottom-right-radius: 15px;"
class="social-icon-group-mobile">
<v-expansion-panels style="min-width: 320px;">
<v-col cols="12" offset="-1">
<v-expansion-panel class="background-pink text-justify" style="color: white;"
text="Notre mission chez Hutopy est d'aider les gens à s'épanouir en leur proposant un environnement de partage unique qui va leur permettre de se surpasser. Nous travaillons étroitement avec la communauté d'Hutopy afin de concentrer notre développement sur ce que vous demandez et sur vos besoins, afin d'offrir les meilleurs outils. Le tout en gardant à l'esprit l'aspect humain de chacun. Il est important pour nous de contribuer à créer un monde meilleur."
title="À propos d'Hutopy :">
</v-expansion-panel>
</v-col>
</v-expansion-panels>
</v-container>
</v-row>
</v-container>
<!-- Bannière Pc -->
<v-row class="fluid hidden-sm-and-down" style="margin-top: -65px; position: relative; z-index: 0; "
hidden-sm-and-up>
<v-col cols="12" class="pa-0" style="width: 100vw; overflow: hidden;">
<v-img class="profile-banner" max-height="375" :src="imageSrc" cover
style="box-shadow: 0 4px 6px rgba(0, 0, 0, 0.8);"></v-img>
</v-col>
</v-row>
<v-row class="hidden-sm-and-down" style="background-color: #6b0065; height: 5px; box-shadow: rgba(0, 0, 0, 0.7);"
hidden-sm-and-up>
</v-row>
<!-- "Core (Menu / Center / Donation)" -->
<v-row>
<!-- "Menu" -->
<v-col cols="2" md="3" lg="4" xl="4" xxl="4" class="hidden-sm-and-down menu-col" hidden-sm-and-down>
<v-col style="margin: 0;">
<v-row class="Hutopy-menu-sticky-mobile">
<v-spacer></v-spacer>
<v-col>
<v-container style=" overflow-y: hidden;">
<!-- Nav-Btn -->
<v-col cols="12" class="px-0">
<v-img src="/images/hutopymedia/banners/hutopy.png" alt="Description de l'image"
style="height: 150px; width: 300px;" class="mx-auto" :elevation="10"></v-img>
<v-list dense class="main-background">
<v-list-item v-for="item in navigationItems" :key="item.link">
<router-link :to="item.link">
<v-btn text class="d-flex align-start align-center main-background" elevation="0"
outlined="false">
<v-icon left class="mr-4">{{ item.icon }}</v-icon>
{{ item.text }}
</v-btn>
</router-link>
</v-list-item>
</v-list>
</v-col>
</v-container>
</v-col>
</v-row>
<v-row style="height: 1000px;"></v-row>
</v-col>
</v-col>
<!-- Profile Info Picture name title & description -->
<v-col class="middle-col" style="z-index: 5;" cols="12" xs="12" sm="12" md="6" lg="5" xl="4" xxl="4">
<v-container class="profile-container hidden-sm-and-down" hidden-md-and-up>
<v-container>
<v-img :src="profilePicture" class="elevation-4 mobile-profile-picture-creator"></v-img>
<!-- User informations Name & title -->
<v-container class="background-profile-container" style="margin-top: -8%;">
<v-row>
<v-col style="height: 50px;" cols="7" offset="2" class="social-container">
<h1 class="name-info">{{ name }}</h1>
</v-col>
<v-col></v-col>
</v-row>
<v-row>
<v-col style="height: 50px;" cols="6" offset="2" class="social-container2">
<h1 class="occupation-info">{{ title }}</h1>
</v-col>
<v-col></v-col>
</v-row>
<!-- User Social Network Links -->
<v-row>
<v-spacer></v-spacer>
<v-col cols="7" style="margin-top: 1%; margin-bottom: -2%;">
<v-row>
<a href="https://www.facebook.com/Hutopy">
<img class="socialicons" src="/images/hutopymedia/icons/black/facebookblack.png"
alt="Description image 2">
</a>
<a href="https://www.instagram.com/hutopy.inc/">
<img class="socialicons" src="/images/hutopymedia/icons/black/instagramblack.png"
alt="Description image 2">
</a>
<a href="https://twitter.com/Hutopyinc">
<img class="socialicons" src="/images/hutopymedia/icons/black/xblack.png"
alt="Description image 2">
</a>
</v-row>
</v-col>
<v-col background-color="primary"></v-col>
</v-row>
<!-- Description -->
<v-row>
<v-container
style="border-bottom-left-radius: 15px; border-bottom-right-radius: 15px; margin-top: 15px;">
<v-expansion-panels style="min-width: 320px;">
<v-col cols="12" offset="-1">
<v-expansion-panel class="background-pink text-justify" style="color: white;"
text="Notre mission chez Hutopy est d'aider les gens à s'épanouir en leur proposant un environnement de partage unique qui va leur permettre de se surpasser. Nous travaillons étroitement avec la communauté d'Hutopy afin de concentrer notre développement sur ce que vous demandez et sur vos besoins, afin d'offrir les meilleurs outils. Le tout en gardant à l'esprit l'aspect humain de chacun. Il est important pour nous de contribuer à créer un monde meilleur."
title="À propos d'Hutopy :">
</v-expansion-panel>
</v-col>
</v-expansion-panels>
</v-container>
</v-row>
</v-container>
</v-container>
</v-container>
<!-- <PostContentMenu style="margin-top: -30px;"></PostContentMenu> Post -->
<!-- Release v0.1 -->
<v-container>
<v-card class="flow-menu m-0 youtube-card">
<!-- Title, date and btn -->
<v-col>
<v-row>
<v-col class="text-center">
<h1 class="card-title">
Déploiement de la version 0.10 d'Hutopy</h1>
</v-col>
<!--<v-col class="text-right">
<v-btn class="btn-card-options" flat tile elevation="0">
<v-icon style="color: #6e6e6e; font-size: 24px;">mdi-dots-vertical</v-icon>
</v-btn> (a intégrer)
</v-col> -->
</v-row>
</v-col>
<!-- Card core Video/image & text -->
<div style="background-color: rgba(255, 255, 255, 0.1); margin-left: -5%; margin-right: -5%">
<v-container>
<v-img src="images/usersmedia/HutopyProfile/pictures/version.png" title="Release v0.1"></v-img>
<!-- Date -->
<v-row class="text-right">
<v-col>
<h1 style=" margin-right: 40px; margin-top: 10px" class="card-date">
24-04-2024
</h1>
</v-col>
</v-row>
<p class="text-justify pa-10" style="margin-bottom: -6%; font-size: 1em">
Bonjour, Nous sommes fiers de vous présenter la version 0.10 d'Hutopy. Nous sommes au début d'une
aventure
visant à transformer la sphère des médias sociaux. Notre objectif est d'apporter un souffle de
fraîcheur en
favorisant des interactions plus constructives entre les individus.
Dans cette première version, seuls nos utilisateurs testeurs ont accès à la plateforme comme créateur.
Dans
un futur
proche, avec le déploiement de la version 0.2, nous contacterons les personnes qui se sont inscrites
via
l'onglet d'inscription et ont rempli quelques questions.
Si vous souhaitez soutenir le développement de la plateforme, deux options s'offrent à vous. La
première
consiste à nous apporter un soutien financier, tandis que la seconde est de nous contacter pour faire
partie
de l'équipe de développement. Nous recherchons actuellement un programmeur supplémentaire pour faire
progresser certaines fonctionnalités.
Merci de visiter Hutopy.</p>
<!-- Like dislike commment Section -->
<div style="height: 20px;"></div>
<div
style="z-index: 500; margin-bottom: 2%; background-color: rgba(0, 0, 0, 1); height: 3px; width: 100%; margin-top: 20px;">
</div>
<div style="background-color: rgba(0, 0, 0, 1); height: 3px; width: 100%; margin-top: 20px;">
</div>
<!-- Comments -->
<v-text-field style="margin-left: 2%; margin-bottom: 15px; margin-bottom: -20px"
placeholder="Commentaire (Arrive bientôt)"></v-text-field>
</v-container>
</div>
</v-card>
</v-container>
</v-col>
<!-- "Large-Monitor-RightCol" Donation -->
<v-col cols="2" md="3" lg="3" xl="4" xxl="4" class="hidden-sm-and-down" hidden-sm-and-up>
<v-row>
<v-col>
<v-container class="sticky-bottom-label Je-soutien-container" style="max-width: 400px ; bottom: 0;">
<!-- Donnation -->
<v-card style="border-radius: 20px;">
<v-container>
<v-row class="mb-0"
style="background-color: #6b0065; margin-left: -24px; margin-right: -24px; margin-top: -20px; justify-content: center;">
<v-card-title class="text-soutiens" style="margin-top: 15px;">
JE SOUTIENS!
</v-card-title>
</v-row>
<StripePayment creator-id="3c4317c6-af4d-475a-a382-6d0a675cc67f"></StripePayment>
</v-container>
</v-card>
</v-container>
<v-container style="height: 1000px;">
</v-container>
</v-col>
<v-spacer>
</v-spacer>
</v-row>
</v-col>
</v-row>
<!-- "Mobile" Donation -->
<v-col class="hidden-md-and-up sticky-bottom-label" hidden-sm-and-down
style="background-color: #6b0065; margin-top: 30px; text-align: center;">
<!-- Barre cliquable pour ouvrir le drawer -->
<v-btn @click="drawerbottom = !drawerbottom" elevation="0"
style="background-color: #6b0065; color: white; text-align: center;" class="text-soutiens ">
JE SOUTIENS
</v-btn>
</v-col>
<!-- Drawer du bas -->
<template>
<div>
<v-bottom-sheet v-model="drawerbottom" class="sticky-bottom-label" hide-overlay>
<v-container style="background-color: #6b0065; color: white; padding: 20px; text-align: center;">
<h1 class="text-soutiens">JE SOUTIENS</h1>
<StripePayment creator-id="3c4317c6-af4d-475a-a382-6d0a675cc67f"></StripePayment>
</v-container>
</v-bottom-sheet>
</div>
</template>
<FooterLayout></FooterLayout>
</div>
</template>
<script setup>
import DefaultLayout from '@/layouts/DefaultLayout.vue';
import FooterLayout from '@/layouts/FooterLayout.vue';
import { ref } from 'vue';
import StripePayment from '../StripePayment.vue';
let imageSrc = '/images/usersmedia/HutopyProfile/banners/banner01.png';
let profilePicture = '/images/usersmedia/HutopyProfile/profilepictures/profileHutopyProfile01.png';
let name = 'Hutopy'
let title = 'Page officiel'
let drawerbottom = ref(false)
let navigationItems = [
{ icon: 'mdi-home', text: 'Accueil', link: 'home' },
{ icon: 'mdi-account-group', text: 'Créateurs', link: '/userbrowser' },
{ icon: 'mdi-handshake', text: 'Aidez-nous', link: '/contact' },
];
</script>
<style scoped>
.invert-color {
filter: invert(1);
}
.Hutopy-menu-sticky-mobile {
position: sticky;
top: 0;
bottom: 0;
left: 0;
width: 100%;
z-index: 1000;
margin-top: -40px;
}
.sticky-bottom-label {
position: sticky;
top: 0;
bottom: 0;
left: 0;
width: 100%;
z-index: 1000;
margin-top: 20px;
}
.sticky-top-label {
position: sticky;
bottom: 0;
right: 10%;
width: 100%;
z-index: 1000;
}
.text-soutiens {
margin-bottom: 15px;
color: white;
font-size: 1.5rem;
letter-spacing: 7px;
text-align: center;
}
.name-info {
margin-top: -10px;
margin-left: 15%;
}
.occupation-info {
margin-left: 15%;
font-size: large;
}
.name-info-mobile {
margin-left: 22px;
font-size: 1.3rem
}
.main-background {
background-color: #f4f4f4;
}
.profile-container {
margin-top: -16%;
}
.btn-custom {
width: 100%;
background-color: transparent;
}
.background-profile-container {
background-color: #ececec;
color: white;
border-top: 3px solid #a30e79;
border-right: 3px solid #a30e79;
font-weight: 700;
font-size: 1.15rem;
border-radius: 25px;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.3)
}
.background-pink {
background-color: #23393b;
color: white;
font-weight: 400;
}
.label-text {
font-weight: 400;
margin-left: 3%;
font-size: 1rem;
}
.profile-name {
margin-top: -15%;
}
.socialicons {
width: 35px;
max-width: 100px;
margin-top: 3px;
margin-left: 40px;
}
.socialicons-mobile {
width: 35px;
max-width: 100px;
margin-top: 27px;
margin-left: 20px;
}
.youtube-card {
margin-left: 2%;
margin-right: 2%;
border-radius: 15px;
background-color: #f4f4f4;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.4)
}
.card-title {
font-size: 1.4rem;
margin-top: 10px;
}
.card-date {
margin-left: 10px;
margin-top: -18px;
margin-bottom: -20px;
font-size: .8rem;
}
.social-container {
background-color: #6b0065;
border-top-right-radius: 30px;
border-bottom-right-radius: 30px;
font-size: 1.7rem;
font-weight: 600;
color: white;
}
.social-container2 {
background-color: #a30e79;
border-bottom-right-radius: 30px;
font-size: 1.4rem;
font-weight: 500;
color: white;
}
.social-container-mobile {
background-color: #a30e79;
font-size: 1.4rem;
font-weight: 600;
color: white;
z-index: 1000;
margin: auto;
text-align: center;
}
.social-container2-mobile {
background-color: #0baab2;
z-index: 1000;
font-size: 1.2rem;
font-weight: 500;
color: white;
}
.social-icon-group-mobile {
background-color: #6b0065;
}
.mini-profile-picture {
border-radius: 100px;
}
.btn-card-options {
background-color: #f4f4f4;
width: 50px;
margin-left: -12px;
margin-top: 10px;
}
.mobile-profile-picture-creator {
border-radius: 100px;
height: 150px;
width: 150px;
border-radius: 50%;
max-width: 150px;
border: 4px solid white;
z-index: 1000;
}
.mobile-header {
height: 50px;
margin-left: -13%;
margin-top: 6%;
}
.h1-navigation {
text-align: center;
font-weight: 600;
margin-bottom: 10%;
}
.mobile-profile-picture {
height: 40px;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2);
border: 2px solid #a30e79;
margin-right: 10px
}
.profile-banner {
margin-top: 25px;
min-height: 200px
}
.v-navigation-drawer {
max-height: 100vh;
}
@media (min-width: 150px) and (max-width: 474px) {
.mobile-profile-picture-creator {
transform: scale(1.5) translateY(-30%) translateX(0%);
}
.socialicons-mobile {
width: 35px;
max-width: 100px;
margin-top: 0px;
margin-left: 20px;
}
}
@media (min-width: 475px) and (max-width: 599px) {
.socialicons-mobile {
width: 35px;
max-width: 100px;
margin-top: 0px;
margin-left: px;
}
.mobile-profile-picture-creator {
transform: scale(1.5) translateY(-30%) translateX(0%);
}
.profile-container-mobile {
width: 110%;
margin-left: -3%;
margin-top: -112px;
}
.occupation-info {
font-size: 1rem;
}
.card-youtube {
min-height: 250px;
}
.name-info-mobile {
font-size: 1.6rem;
}
}
@media (min-width: 599px) and (max-width: 749px) {
.mobile-profile-picture-creator {
transform: scale(1.5) translateY(25%) translateX(0%);
}
.profile-container {
width: 110%;
margin-left: -3%;
}
.profile-container-mobile {
width: 110%;
margin-left: -3%;
margin-top: -110px;
}
.name-info {
font-size: 1.2rem;
}
.occupation-info {
font-size: 1rem;
}
.card-youtube {
min-height: 330px;
}
}
@media (min-width: 750px) and (max-width: 960px) {
.mobile-profile-picture-creator {
transform: scale(1.8) translateY(25%) translateX(0%);
}
.profile-container {
width: 110%;
margin-left: -3%;
}
.profile-container-mobile {
width: 110%;
margin-left: -3%;
margin-top: -110px;
}
.name-info {
font-size: 1.2rem;
}
.occupation-info {
font-size: 1rem;
}
.card-youtube {
min-height: 425px;
}
}
@media (min-width: 960px) and (max-width: 1280px) {
.middle-col {
margin-left: -30px;
}
.text-soutiens {
font-size: 1.2rem;
letter-spacing: 5px;
}
.profile-container {
margin-top: -185px;
min-width: 480px
}
.card-youtube {
min-height: 270px;
}
.Je-soutien-container {
min-width: 325px;
margin-left: -35px;
}
.mobile-profile-picture-creator {
transform: scale(1.3) translateY(25%) translateX(-50px);
}
.name-info {
font-size: 1.2rem;
margin-left: 20px;
margin-top: -6px
}
.occupation-info {
margin-left: 40px;
margin-top: -8px
}
.social-container {
margin-left: 80px;
min-width: 270px;
max-height: 40px
}
.social-container2 {
margin-left: 50px;
min-width: 250px;
max-height: 35px
}
.socialicons {
width: 34px;
max-width: 100px;
margin-top: 15px;
margin-left: 25px;
}
}
@media (min-width: 1280px) and (max-width: 1600px) {
.text-soutiens {
font-size: 1.3rem;
letter-spacing: 8px;
}
.mobile-profile-picture-creator {
transform: scale(1.3) translateY(25%) translateX(-50px);
}
.profile-container {
margin-top: -180px;
}
.card-youtube {
min-height: 290px;
}
.menu-col {
margin-left: -4%;
}
.Je-soutien-container {
min-width: 350px;
}
.name-info {
font-size: 1.2rem;
margin-left: 20px;
margin-top: -6px
}
.social-container {
margin-left: 90px;
min-width: 350;
max-height: 40px
}
.occupation-info {
margin-left: 70px;
margin-top: -8px
}
.social-container2 {
margin-left: 40px;
min-width: 290px;
max-height: 35px
}
.socialicons {
width: 34px;
max-width: 100px;
margin-top: 15px;
margin-left: 25px;
}
}
@media (min-width: 1600px) and (max-width: 1919px) {
.text-soutiens {
font-size: 1.3rem;
}
.mobile-profile-picture-creator {
transform: scale(1.4) translateY(25%) translateX(-40px);
}
.profile-container {
margin-top: -171px;
}
.card-youtube {
min-height: 355px;
}
.menu-col {
margin-left: -4%;
}
.Je-soutien-container {
min-width: 400px;
}
.name-info {
font-size: 1.5rem;
margin-top: -4px;
margin-left: 35px;
}
.occupation-info {
font-size: 1.3rem;
margin-left: 75px;
margin-top: -2px
}
.social-container2 {
margin-left: 70px;
min-width: 300px;
}
}
@media (min-width: 1920px) and (max-width: 2559px) {
.text-soutiens {
font-size: 1.3rem;
}
.profile-container {
margin-top: -160px;
}
.card-youtube {
min-height: 380px;
}
.Je-soutien-container {
min-width: 400px;
}
.mobile-profile-picture-creator {
transform: scale(1.4) translateY(25%) translateX(-40px);
}
.name-info {
font-size: 1.5rem;
margin-left: 35px;
margin-top: -4px;
}
.social-container {
margin-left: 100px;
}
.occupation-info {
font-size: 1.3rem;
margin-left: 110px;
margin-top: -4px
}
.social-container2 {
margin-left: 30px;
min-width: 360px;
}
.socialicons {
width: 38px;
max-width: 100px;
margin-top: 13px;
margin-left: 40px;
}
}
@media (min-width: 2560px) {
.mobile-profile-picture-creator {
transform: scale(1.5) translateY(25%) translateX(-20px);
}
.profile-container {
margin-top: -150px
}
.profile-banner {
margin-top: 25px;
min-height: 450px;
}
.card-youtube {
min-height: 380px;
}
.text-soutiens {
font-size: 1.5rem;
}
.name-info {
font-size: 2rem;
}
.social-container {
margin-left: 140px;
}
.social-container2 {
margin-left: 130px;
}
.occupation-info {
font-size: 1.5rem;
margin-left: 65px;
margin-top: -6px
}
.socialicons {
width: 45px;
max-width: 100px;
margin-top: 15px;
margin-left: 40px;
}
}
</style>

View File

@@ -1,478 +1,264 @@
<template> <template>
<div style="background-color: #f4f4f4;">
<DefaultLayout style="margin-bottom: 30px"></DefaultLayout>
<!-- "Mobile --> <v-row class="fluid" style="margin-top: -65px; position: relative; z-index: 0; ">
<v-row class="fluid hidden-md-and-up social-mobile-container" <v-col cols="12" class="pa-0" style="width: 100vw; overflow: hidden;">
style="margin-top: -10px; position: relative; z-index: 0; " hidden-md-and-down> <v-img class="profile-banner" max-height="375" :src="imageSrc" cover
<v-col cols="12" class="pa-0" style="width: 100vw; overflow: hidden;"> style="box-shadow: 0 4px 6px rgba(0, 0, 0, 0.8);"></v-img>
<v-img class="profile-banner" max-height="375" :src="imageSrc" cover
style="box-shadow: 0 4px 6px rgba(0, 0, 0, 0.8);"></v-img>
</v-col>
</v-row>
<!-- "PurpleLine" -->
<v-row style="background-color: #6b0065; height: 5px; box-shadow: rgba(0, 0, 0, 0.7);">
</v-row>
<!-- "Mobile-Profile" -->
<!-- "Profile picture" -->
<v-row class="d-flex justify-center align-center d-sm-none" style="margin-top: 50px; margin-bottom: -10px">
<v-img :src="profilePicture" class="elevation-4 mobile-profile-picture-creator"></v-img>
</v-row>
<!-- User Social Network Links -->
<v-container style="margin-top: -70px; padding: 0;" class="hidden-md-and-up social-container-mobile-icons"
hidden-md-and-down>
<!-- Facebook -->
<v-row no-gutters class="d-flex justify-space-between align-center" style="margin-left: 3%; margin-right: 3%;">
<v-col cols="6" sm="2" xs="3" style="margin-top: 60px; z-index: 50;" class="d-flex justify-center align-center">
<a href="https://www.facebook.com/Hutopy">
<v-img class="socialicons-mobile" src="/images/hutopymedia/icons/black/facebookblack.png"
alt="Facebook"></v-img>
</a>
</v-col>
<!-- Profile picture - Small -->
<v-col cols="4" sm="4" xs="0" class="hidden-xs">
<v-row class="d-flex justify-center align-center">
<v-img :src="profilePicture" class="elevation-4 mobile-profile-picture-creator"></v-img>
</v-row>
</v-col>
<!-- L'effet -->
<v-col cols="6" sm="2" xs="3" style="margin-top: 60px; z-index: 50;" class="d-flex justify-center align-center">
<a href="https://fondationleffet.ca/">
<v-img class="socialicons-mobile" src="/images/hutopymedia/icons/black/leffetblack.png"
alt="Instagram"></v-img>
</a>
</v-col>
</v-row>
<!-- User informations Name title and description -->
<v-row class="social-container-mobile">
<v-col cols="12" xs="12" sm="4" class="d-flex justify-center">
<v-row class="d-flex justify-center" style="font-size: 2rem">
{{ name }}
</v-row>
</v-col>
<v-spacer xs="12" sm="4"></v-spacer>
<v-col cols="12" xs="12" sm="4" class="d-flex justify-center ">
<v-row class="d-flex justify-center">
{{ title }}
</v-row>
</v-col>
</v-row>
<v-row>
<v-container style="border-bottom-left-radius: 15px; margin-top: -12px; border-bottom-right-radius: 15px;"
class="social-icon-group-mobile">
<v-expansion-panels style="min-width: 320px;">
<v-col cols="12" offset="-1">
<v-expansion-panel class="background-pink text-justify" style="color: white;"
text="La Fondation L'effet est un organisme de bienfaisance qui a trois fins principales, toutes pour prendre soin de son prochain. Notre principal objectif est de promouvoir léducation, en fournissant les ressources nécessaires et en donnant des conférences afin dencourager la persévérance scolaire. Nous soulageons également les conditions des personnes atteintes d'un handicap en offrant des programmes récréatifs et dautres services de soutien visant à appuyer leur mieux-être physique, mental et émotif afin quils deviennent et demeurent des acteurs importants au sein de la collectivité. La Fondation Leffet encourage aussi les autres organismes et aide les initiatives individuelles ou corporatives à faire une différence positive dans leur communauté."
title="Notre mission">
</v-expansion-panel>
</v-col>
</v-expansion-panels>
</v-container>
</v-row>
</v-container>
<!-- Bannière Pc -->
<v-row class="fluid hidden-sm-and-down" style="margin-top: -65px; position: relative; z-index: 0; "
hidden-sm-and-up>
<v-col cols="12" class="pa-0" style="width: 100vw; overflow: hidden;">
<v-img class="profile-banner" max-height="375" :src="imageSrc" cover
style="box-shadow: 0 4px 6px rgba(0, 0, 0, 0.8);"></v-img>
</v-col>
</v-row>
<v-row class="hidden-sm-and-down" style="background-color: #6b0065; height: 5px; box-shadow: rgba(0, 0, 0, 0.7);"
hidden-sm-and-up>
</v-row>
<!-- "Core (Menu / Center / Donation)" -->
<v-row>
<!-- "Menu" -->
<v-col cols="2" md="3" lg="4" xl="4" xxl="4" class="hidden-sm-and-down menu-col" hidden-sm-and-down>
<v-col style="margin: 0;">
<v-row class="Hutopy-menu-sticky-mobile">
<v-spacer></v-spacer>
<v-col>
<v-container style=" overflow-y: hidden;">
<!-- Nav-Btn -->
<v-col cols="12" class="px-0">
<v-img src="/images/hutopymedia/banners/hutopy.png" alt="Description de l'image"
style="height: 150px; width: 300px;" class="mx-auto" :elevation="10"></v-img>
<v-list dense class="main-background">
<v-list-item v-for="item in navigationItems" :key="item.link">
<router-link :to="item.link">
<v-btn text class="d-flex align-start align-center main-background" elevation="0"
outlined="false">
<v-icon left class="mr-4">{{ item.icon }}</v-icon>
{{ item.text }}
</v-btn>
</router-link>
</v-list-item>
</v-list>
</v-col>
</v-container>
</v-col>
</v-row>
<v-row style="height: 3000px;"></v-row>
</v-col>
</v-col>
<!-- Profile Info Picture name title & description -->
<v-col class="middle-col" style="z-index: 5;" cols="12" xs="12" sm="12" md="6" lg="5" xl="4" xxl="4">
<v-container class="profile-container hidden-sm-and-down" hidden-md-and-up>
<v-container>
<v-img :src="profilePicture" class="elevation-4 mobile-profile-picture-creator"></v-img>
<!-- User informations Name & title -->
<v-container class="background-profile-container" style="margin-top: -8%;">
<v-row>
<v-col style="height: 50px;" cols="7" offset="2" class="social-container">
<h1 class="name-info">{{ name }}</h1>
</v-col>
<v-col></v-col>
</v-row>
<v-row>
<v-col style="height: 50px;" cols="6" offset="2" class="social-container2">
<h1 class="occupation-info">{{ title }}</h1>
</v-col>
<v-col></v-col>
</v-row>
<!-- User Social Network Links -->
<v-row>
<v-spacer></v-spacer>
<v-col cols="7" style="margin-top: 1%; margin-bottom: -2%;">
<v-row>
<a href="https://www.facebook.com/Hutopy">
<img class="socialicons" src="/images/hutopymedia/icons/black/facebookblack.png"
alt="Description image 2">
</a>
<a href="https://fondationleffet.ca/">
<img class="socialicons" src="/images/hutopymedia/icons/black/leffetblack.png"
alt="Description image 2">
</a>
</v-row>
</v-col>
<v-col background-color="primary"></v-col>
</v-row>
<!-- Description -->
<v-row>
<v-container
style="border-bottom-left-radius: 15px; border-bottom-right-radius: 15px; margin-top: 15px;">
<v-expansion-panels style="min-width: 320px;">
<v-col cols="12" offset="-1">
<v-expansion-panel class="background-pink text-justify" style="color: white;"
text="La Fondation L'effet est un organisme de bienfaisance qui a trois fins principales, toutes pour prendre soin de son prochain. Notre principal objectif est de promouvoir léducation, en fournissant les ressources nécessaires et en donnant des conférences afin dencourager la persévérance scolaire. Nous soulageons également les conditions des personnes atteintes d'un handicap en offrant des programmes récréatifs et dautres services de soutien visant à appuyer leur mieux-être physique, mental et émotif afin quils deviennent et demeurent des acteurs importants au sein de la collectivité. La Fondation Leffet encourage aussi les autres organismes et aide les initiatives individuelles ou corporatives à faire une différence positive dans leur communauté."
title="Notre mission">
</v-expansion-panel>
</v-col>
</v-expansion-panels>
</v-container>
</v-row>
</v-container>
</v-container>
</v-container>
<v-container>
</v-container>
<v-container style="margin-top: -30px"> <v-card class="flow-menu m-0 youtube-card">
<!-- Title, date and btn -->
<v-col>
<v-row>
<v-col class="text-center">
<h1 class="card-title">
DOCU-PODCAST</h1>
</v-col>
<!--<v-col class="text-right">
<v-btn class="btn-card-options" flat tile elevation="0">
<v-icon style="color: #6e6e6e; font-size: 24px;">mdi-dots-vertical</v-icon>
</v-btn> (a intégrer)
</v-col> -->
</v-row>
</v-col>
<!-- Card core Video/image & text -->
<div style="background-color: rgba(255, 255, 255, 0.1); margin-left: -5%; margin-right: -5%;">
<v-container>
<iframe class="card-youtube" style="margin-left: 2.1%; width: 96%;"
src="https://www.youtube.com/embed/3MqKVf1CEIQ?si=aV03Xq2ZNwlv1DWu" title="Guillaumem" frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowfullscreen></iframe>
<!-- Date -->
<v-row class="text-right">
<v-col>
<h1 style=" margin-right: 40px; margin-top: 10px">
24-04-2024
</h1>
</v-col>
</v-row>
<p class="text-justify pa-10" style="margin-bottom: -6%; font-size: 1em">
Cest un honneur de vous
En exclusivité : Voici l'Épisode 8 de la Saison 2 du Docu-Podcast de Cédieu Léveillé avec le Fondateur
de la
Fondation l'Effet, Marc-Olivier Hébert. Cette homme est un Ange sur 2 pattes et un Master de
l'Introspection :
'' Quand j'ai Compris que Mon Seul Obstacle Était Moi-même '' ! Merci de continuer à faire partie de
cette
AVENTURE et à être les PIONNIERS de mon Docu-Podcast. Seuls vous, Fidèles PIADINS avez le DROIT à
l'ENTIÈRETÉ
de ces images !!!
Marc-Olivier
Marc-Olivier Hébert
Le nom de la Fondation vient de l'origine du phénomène que lon nomme Leffet Papillon. Cette
théorie
implique que le battement dailes dun papillon au Brésil peut provoquer une tempête au Texas.
Selon lexpression, inventée par le météorologue Edward Lorenz, il suffit de modifier de façon infime
un
paramètre dans un modèle météo pour que celui-ci samplifie progressivement et provoque, à long terme,
des
changements colossaux. Cette notion ne concerne plus seulement la météo, mais sapplique également aux
sciences humaines et à lenvironnement. <br><br>
L'effet papillon est matérialisé par une chaîne d'événements qui se suivent les uns les autres et dont
le
précédent influe sur le suivant. Ainsi, on part d'un événement minuscule au début de la chaîne pour
arriver à
une chose gigantesque.
<br><br>
Chaque action que nous entreprenons crée automatiquement un résultat. Il est à nous de choisir quil
soit
toujours positif.
<br><br>
Donc, voici toute lessence de la nature de cette fondation. Que de petites actions et gestes positifs
créeront automatiquement de grandes et merveilleuses différences positives dans la vie des
participants
et des
bénéficiaires.
</p>
<!-- Like dislike commment Section -->
<div style="height: 20px;"></div>
<div
style="z-index: 500; margin-bottom: 2%; background-color: rgba(0, 0, 0, 1); height: 3px; width: 100%; margin-top: 20px;">
</div>
<div style="background-color: rgba(0, 0, 0, 1); height: 3px; width: 100%; margin-top: 20px;">
</div>
<!-- Comments -->
<v-text-field style="margin-left: 2%; margin-bottom: 15px; margin-bottom: -20px"
placeholder="Commentaire (Arrive bientôt)"></v-text-field>
</v-container>
</div>
</v-card></v-container>
<!-- Le nom -->
<v-container>
<v-card class="flow-menu m-0 youtube-card">
<!-- Title, date and btn -->
<v-col>
<v-row>
<v-col class="text-center">
<h1 class="card-title">
C'EST PARTI POUR 2024!</h1>
</v-col>
<!--
<v-col class="text-right">
<v-btn class="btn-card-options" flat tile elevation="0">
<v-icon style="color: #6e6e6e; font-size: 24px;">mdi-dots-vertical</v-icon>
</v-btn> (a intégrer)
</v-col> -->
</v-row>
</v-col>
<!-- Card core Video/image & text -->
<div style="background-color: rgba(255, 255, 255, 0.1); margin-left: -5%; margin-right: -5%;">
<v-container>
<v-img src="images/usersmedia/leffet/profilepictures/leffetProfile01.png" title="Guillaumem"></v-img>
<!-- Date -->
<v-row class="text-right">
<v-col>
<h1 style=" margin-right: 40px; margin-top: 10px">
22-04-2024
</h1>
</v-col>
</v-row>
<p class="text-justify pa-10" style="margin-bottom: -6%; font-size: 1em">Le nom de la Fondation vient de
l'origine du phénomène que lon nomme Leffet Papillon. Cette théorie implique que le battement
dailes dun papillon au Brésil peut provoquer une tempête au Texas.<br><br>
Selon lexpression, inventée par le météorologue Edward Lorenz, il suffit de modifier de façon infime
un paramètre dans un modèle météo pour que celui-ci samplifie progressivement et provoque, à long
terme,
des changements colossaux. Cette notion ne concerne plus seulement la météo, mais sapplique également
aux
sciences humaines et à lenvironnement.<br>
<br>
L'effet papillon est matérialisé par une chaîne d'événements qui se suivent les uns les autres et dont
le précédent influe sur le suivant. Ainsi, on part d'un événement minuscule au début de la chaîne pour
arriver à une chose gigantesque.<br>
<br>
Chaque action que nous entreprenons crée automatiquement un résultat. Il est à nous de choisir quil
soit toujours positif.
Donc, voici toute lessence de la nature de cette fondation. Que de petites actions et gestes positifs
créeront automatiquement de grandes et merveilleuses différences positives dans la vie des
participants et
des bénéficiaires.
</p>
<!-- Like dislike commment Section -->
<div style="height: 20px;"></div>
<div
style="z-index: 500; margin-bottom: 2%; background-color: rgba(0, 0, 0, 1); height: 3px; width: 100%; margin-top: 20px;">
</div>
<div style="background-color: rgba(0, 0, 0, 1); height: 3px; width: 100%; margin-top: 20px;">
</div>
<!-- Comments -->
<v-text-field style="margin-left: 2%; margin-bottom: 15px; margin-bottom: -20px"
placeholder="Commentaire (Arrive bientôt)"></v-text-field>
</v-container>
</div>
</v-card>
</v-container>
</v-col>
<!-- "Large-Monitor-RightCol" Donation -->
<v-col cols="2" md="3" lg="3" xl="4" xxl="4" class="hidden-sm-and-down" hidden-sm-and-up>
<v-row>
<v-col>
<v-container class="sticky-bottom-label Je-soutien-container" style="max-width: 400px ; bottom: 0;">
<!-- Donnation -->
<v-card style="border-radius: 20px;">
<v-container>
<v-row class="mb-0"
style="background-color: #6b0065; margin-left: -24px; margin-right: -24px; margin-top: -20px; justify-content: center;">
<v-card-title class="text-soutiens" style="margin-top: 15px;">
JE SOUTIENS!
</v-card-title>
</v-row>
<StripePayment creator-id="1578f5ee-6cd0-42ac-9959-249cd10b6bfb"></StripePayment>
</v-container>
</v-card>
</v-container>
<v-container style="height: 3000px;">
</v-container>
</v-col>
<v-spacer>
</v-spacer>
</v-row>
</v-col>
</v-row>
<!-- "Mobile" Donation -->
<v-col class="hidden-md-and-up sticky-bottom-label" hidden-sm-and-down
style="background-color: #6b0065; margin-top: 30px; text-align: center;">
<!-- Barre cliquable pour ouvrir le drawer -->
<v-btn @click="drawerbottom = !drawerbottom" elevation="0"
style="background-color: #6b0065; color: white; text-align: center;" class="text-soutiens ">
JE SOUTIENS
</v-btn>
</v-col> </v-col>
</v-row>
<v-row style="background-color: #6b0065; height: 5px; box-shadow: rgba(0, 0, 0, 0.7);">
</v-row>
<!-- Drawer du bas --> <!-- "Core (Menu / Center / Donation)" -->
<template> <v-row>
<div>
<v-bottom-sheet v-model="drawerbottom" class="sticky-bottom-label" hide-overlay> <!-- Profile Info Picture name title & description -->
<v-container style="background-color: #6b0065; color: white; padding: 20px; text-align: center;"> <v-col class="middle-col" style="z-index: 5;" cols="12" xs="12" sm="12" md="6" lg="5" xl="4" xxl="4">
<h1 class="text-soutiens">JE SOUTIENS</h1> <v-container class="profile-container">
<StripePayment creator-id="1578f5ee-6cd0-42ac-9959-249cd10b6bfb"></StripePayment> <v-container>
<v-img :src="profilePicture" class="elevation-4 mobile-profile-picture-creator"></v-img>
<!-- User informations Name & title -->
<v-container class="background-profile-container" style="margin-top: -8%;">
<v-row>
<v-col style="height: 50px;" cols="7" offset="2" class="social-container">
<h1 class="name-info">{{ name }}</h1>
</v-col>
<v-col></v-col>
</v-row>
<v-row>
<v-col style="height: 50px;" cols="6" offset="2" class="social-container2">
<h1 class="occupation-info">{{ title }}</h1>
</v-col>
<v-col></v-col>
</v-row>
<!-- User Social Network Links -->
<v-row>
<v-spacer></v-spacer>
<v-col cols="7" style="margin-top: 1%; margin-bottom: -2%;">
<v-row>
<a href="https://www.facebook.com/Hutopy">
<img class="socialicons" src="/images/hutopymedia/icons/black/facebookblack.png"
alt="Description image 2">
</a>
<a href="https://fondationleffet.ca/">
<img class="socialicons" src="/images/hutopymedia/icons/black/leffetblack.png"
alt="Description image 2">
</a>
</v-row>
</v-col>
<v-col background-color="primary"></v-col>
</v-row>
<!-- Description -->
<v-row>
<v-container
style="border-bottom-left-radius: 15px; border-bottom-right-radius: 15px; margin-top: 15px;">
<v-expansion-panels style="min-width: 320px;">
<v-col cols="12" offset="-1">
<v-expansion-panel class="background-pink text-justify" style="color: white;"
text="La Fondation L'effet est un organisme de bienfaisance qui a trois fins principales, toutes pour prendre soin de son prochain. Notre principal objectif est de promouvoir léducation, en fournissant les ressources nécessaires et en donnant des conférences afin dencourager la persévérance scolaire. Nous soulageons également les conditions des personnes atteintes d'un handicap en offrant des programmes récréatifs et dautres services de soutien visant à appuyer leur mieux-être physique, mental et émotif afin quils deviennent et demeurent des acteurs importants au sein de la collectivité. La Fondation Leffet encourage aussi les autres organismes et aide les initiatives individuelles ou corporatives à faire une différence positive dans leur communauté."
title="Notre mission">
</v-expansion-panel>
</v-col>
</v-expansion-panels>
</v-container>
</v-row>
</v-container> </v-container>
</v-bottom-sheet> </v-container>
</v-container>
<v-container>
</v-container>
</div> <v-container style="margin-top: -30px">
</template> <v-card class="flow-menu m-0 youtube-card">
<!-- Title, date and btn -->
<v-col>
<v-row>
<v-col class="text-center">
<h1 class="card-title">
DOCU-PODCAST</h1>
</v-col>
<FooterLayout></FooterLayout> <!--<v-col class="text-right">
</div> <v-btn class="btn-card-options" flat tile elevation="0">
<v-icon style="color: #6e6e6e; font-size: 24px;">mdi-dots-vertical</v-icon>
</v-btn> (a intégrer)
</v-col> -->
</v-row>
</v-col>
<!-- Card core Video/image & text -->
<div style="background-color: rgba(255, 255, 255, 0.1); margin-left: -5%; margin-right: -5%;">
<v-container>
<iframe class="card-youtube" style="margin-left: 2.1%; width: 96%;"
src="https://www.youtube.com/embed/3MqKVf1CEIQ?si=aV03Xq2ZNwlv1DWu" title="Guillaumem"
frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowfullscreen></iframe>
<!-- Date -->
<v-row class="text-right">
<v-col>
<h1 style=" margin-right: 40px; margin-top: 10px">
24-04-2024
</h1>
</v-col>
</v-row>
<p class="text-justify pa-10" style="margin-bottom: -6%; font-size: 1em">
Cest un honneur de vous
En exclusivité : Voici l'Épisode 8 de la Saison 2 du Docu-Podcast de Cédieu Léveillé avec le Fondateur
de la
Fondation l'Effet, Marc-Olivier Hébert. Cette homme est un Ange sur 2 pattes et un Master de
l'Introspection :
'' Quand j'ai Compris que Mon Seul Obstacle Était Moi-même '' ! Merci de continuer à faire partie de
cette
AVENTURE et à être les PIONNIERS de mon Docu-Podcast. Seuls vous, Fidèles PIADINS avez le DROIT à
l'ENTIÈRETÉ
de ces images !!!
Marc-Olivier
Marc-Olivier Hébert
Le nom de la Fondation vient de l'origine du phénomène que lon nomme Leffet Papillon. Cette
théorie
implique que le battement dailes dun papillon au Brésil peut provoquer une tempête au Texas.
Selon lexpression, inventée par le météorologue Edward Lorenz, il suffit de modifier de façon infime
un
paramètre dans un modèle météo pour que celui-ci samplifie progressivement et provoque, à long terme,
des
changements colossaux. Cette notion ne concerne plus seulement la météo, mais sapplique également aux
sciences humaines et à lenvironnement. <br><br>
L'effet papillon est matérialisé par une chaîne d'événements qui se suivent les uns les autres et dont
le
précédent influe sur le suivant. Ainsi, on part d'un événement minuscule au début de la chaîne pour
arriver à
une chose gigantesque.
<br><br>
Chaque action que nous entreprenons crée automatiquement un résultat. Il est à nous de choisir quil
soit
toujours positif.
<br><br>
Donc, voici toute lessence de la nature de cette fondation. Que de petites actions et gestes positifs
créeront automatiquement de grandes et merveilleuses différences positives dans la vie des
participants
et des
bénéficiaires.
</p>
<!-- Like dislike commment Section -->
<div style="height: 20px;"></div>
<div
style="z-index: 500; margin-bottom: 2%; background-color: rgba(0, 0, 0, 1); height: 3px; width: 100%; margin-top: 20px;">
</div>
<div style="background-color: rgba(0, 0, 0, 1); height: 3px; width: 100%; margin-top: 20px;">
</div>
<!-- Comments -->
<v-text-field style="margin-left: 2%; margin-bottom: 15px; margin-bottom: -20px"
placeholder="Commentaire (Arrive bientôt)"></v-text-field>
</v-container>
</div>
</v-card>
</v-container>
<!-- Le nom -->
<v-container>
<v-card class="flow-menu m-0 youtube-card">
<!-- Title, date and btn -->
<v-col>
<v-row>
<v-col class="text-center">
<h1 class="card-title">
C'EST PARTI POUR 2024!</h1>
</v-col>
<!--
<v-col class="text-right">
<v-btn class="btn-card-options" flat tile elevation="0">
<v-icon style="color: #6e6e6e; font-size: 24px;">mdi-dots-vertical</v-icon>
</v-btn> (a intégrer)
</v-col> -->
</v-row>
</v-col>
<!-- Card core Video/image & text -->
<div style="background-color: rgba(255, 255, 255, 0.1); margin-left: -5%; margin-right: -5%;">
<v-container>
<v-img src="images/usersmedia/leffet/profilepictures/leffetProfile01.png" title="Guillaumem"></v-img>
<!-- Date -->
<v-row class="text-right">
<v-col>
<h1 style=" margin-right: 40px; margin-top: 10px">
22-04-2024
</h1>
</v-col>
</v-row>
<p class="text-justify pa-10" style="margin-bottom: -6%; font-size: 1em">Le nom de la Fondation vient de
l'origine du phénomène que lon nomme Leffet Papillon. Cette théorie implique que le battement
dailes dun papillon au Brésil peut provoquer une tempête au Texas.<br><br>
Selon lexpression, inventée par le météorologue Edward Lorenz, il suffit de modifier de façon infime
un paramètre dans un modèle météo pour que celui-ci samplifie progressivement et provoque, à long
terme,
des changements colossaux. Cette notion ne concerne plus seulement la météo, mais sapplique également
aux
sciences humaines et à lenvironnement.<br>
<br>
L'effet papillon est matérialisé par une chaîne d'événements qui se suivent les uns les autres et dont
le précédent influe sur le suivant. Ainsi, on part d'un événement minuscule au début de la chaîne pour
arriver à une chose gigantesque.<br>
<br>
Chaque action que nous entreprenons crée automatiquement un résultat. Il est à nous de choisir quil
soit toujours positif.
Donc, voici toute lessence de la nature de cette fondation. Que de petites actions et gestes positifs
créeront automatiquement de grandes et merveilleuses différences positives dans la vie des
participants et
des bénéficiaires.
</p>
<!-- Like dislike commment Section -->
<div style="height: 20px;"></div>
<div
style="z-index: 500; margin-bottom: 2%; background-color: rgba(0, 0, 0, 1); height: 3px; width: 100%; margin-top: 20px;">
</div>
<div style="background-color: rgba(0, 0, 0, 1); height: 3px; width: 100%; margin-top: 20px;">
</div>
<!-- Comments -->
<v-text-field style="margin-left: 2%; margin-bottom: 15px; margin-bottom: -20px"
placeholder="Commentaire (Arrive bientôt)"></v-text-field>
</v-container>
</div>
</v-card>
</v-container>
</v-col>
</v-row>
</template> </template>
<script setup> <script setup>
import DefaultLayout from '@/layouts/DefaultLayout.vue';
import FooterLayout from '@/layouts/FooterLayout.vue';
import { ref } from 'vue';
import StripePayment from '../StripePayment.vue';
let imageSrc = '/images/usersmedia/leffet/banners/banner02.png'; let imageSrc = '/images/usersmedia/leffet/banners/banner02.png';
let profilePicture = '/images/usersmedia/leffet/profilepictures/leffetProfile01.png'; let profilePicture = '/images/usersmedia/leffet/profilepictures/leffetProfile01.png';
let name = 'L\'EFFET' let name = 'L\'EFFET'
let title = 'Page officiel' let title = 'Page officiel'
let drawerbottom = ref(false)
let navigationItems = [
{ icon: 'mdi-home', text: 'Accueil', link: 'home' },
{ icon: 'mdi-account-group', text: 'Créateurs', link: '/userbrowser' },
{ icon: 'mdi-handshake', text: 'Aidez-nous', link: '/contact' },
];
</script> </script>
<style scoped> <style scoped>
.invert-color {
filter: invert(1);
}
.Hutopy-menu-sticky-mobile {
position: sticky;
top: 0;
bottom: 0;
left: 0;
width: 100%;
z-index: 1000;
margin-top: -40px;
}
.sticky-bottom-label {
position: sticky;
top: 0;
bottom: 0;
left: 0;
width: 100%;
z-index: 1000;
margin-top: 20px;
}
.sticky-top-label {
position: sticky;
bottom: 0;
right: 10%;
width: 100%;
z-index: 1000;
}
.text-soutiens {
margin-bottom: 15px;
color: white;
font-size: 1.5rem;
letter-spacing: 7px;
text-align: center;
}
.name-info { .name-info {
margin-top: -10px; margin-top: -10px;
@@ -484,24 +270,10 @@ let navigationItems = [
font-size: large; font-size: large;
} }
.name-info-mobile {
margin-left: 22px;
font-size: 1.3rem
}
.main-background {
background-color: #f4f4f4;
}
.profile-container { .profile-container {
margin-top: -16%; margin-top: -16%;
} }
.btn-custom {
width: 100%;
background-color: transparent;
}
.background-profile-container { .background-profile-container {
background-color: #ececec; background-color: #ececec;
color: white; color: white;
@@ -519,16 +291,6 @@ let navigationItems = [
font-weight: 400; font-weight: 400;
} }
.label-text {
font-weight: 400;
margin-left: 3%;
font-size: 1rem;
}
.profile-name {
margin-top: -15%;
}
.socialicons { .socialicons {
width: 35px; width: 35px;
max-width: 100px; max-width: 100px;
@@ -556,13 +318,6 @@ let navigationItems = [
margin-top: 10px; margin-top: 10px;
} }
.card-date {
margin-left: 10px;
margin-top: -18px;
margin-bottom: -20px;
font-size: .8rem;
}
.social-container { .social-container {
background-color: #79cc02; background-color: #79cc02;
border-top-right-radius: 30px; border-top-right-radius: 30px;
@@ -590,29 +345,10 @@ let navigationItems = [
text-align: center; text-align: center;
} }
.social-container2-mobile {
background-color: #fcc602;
z-index: 1000;
font-size: 1.2rem;
font-weight: 500;
color: white;
}
.social-icon-group-mobile { .social-icon-group-mobile {
background-color: #588801; background-color: #588801;
} }
.mini-profile-picture {
border-radius: 100px;
}
.btn-card-options {
background-color: #f4f4f4;
width: 50px;
margin-left: -12px;
margin-top: 10px;
}
.mobile-profile-picture-creator { .mobile-profile-picture-creator {
height: 150px; height: 150px;
width: 150px; width: 150px;
@@ -622,34 +358,11 @@ let navigationItems = [
z-index: 1000; z-index: 1000;
} }
.mobile-header {
height: 50px;
margin-left: -13%;
margin-top: 6%;
}
.h1-navigation {
text-align: center;
font-weight: 600;
margin-bottom: 10%;
}
.mobile-profile-picture {
height: 40px;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2);
border: 2px solid #a30e79;
margin-right: 10px
}
.profile-banner { .profile-banner {
margin-top: 25px; margin-top: 25px;
min-height: 200px min-height: 200px
} }
.v-navigation-drawer {
max-height: 100vh;
}
@media (min-width: 150px) and (max-width: 474px) { @media (min-width: 150px) and (max-width: 474px) {
.mobile-profile-picture-creator { .mobile-profile-picture-creator {
transform: scale(1.5) translateY(-30%) translateX(0%); transform: scale(1.5) translateY(-30%) translateX(0%);
@@ -676,12 +389,6 @@ let navigationItems = [
transform: scale(1.5) translateY(-30%) translateX(0%); transform: scale(1.5) translateY(-30%) translateX(0%);
} }
.profile-container-mobile {
width: 110%;
margin-left: -3%;
margin-top: -112px;
}
.occupation-info { .occupation-info {
font-size: 1rem; font-size: 1rem;
} }
@@ -689,10 +396,6 @@ let navigationItems = [
.card-youtube { .card-youtube {
min-height: 250px; min-height: 250px;
} }
.name-info-mobile {
font-size: 1.6rem;
}
} }
@media (min-width: 599px) and (max-width: 749px) { @media (min-width: 599px) and (max-width: 749px) {
@@ -706,13 +409,6 @@ let navigationItems = [
margin-left: -3%; margin-left: -3%;
} }
.profile-container-mobile {
width: 110%;
margin-left: -3%;
margin-top: -110px;
}
.name-info { .name-info {
font-size: 1.2rem; font-size: 1.2rem;
} }
@@ -736,12 +432,6 @@ let navigationItems = [
margin-left: -3%; margin-left: -3%;
} }
.profile-container-mobile {
width: 110%;
margin-left: -3%;
margin-top: -110px;
}
.name-info { .name-info {
font-size: 1.2rem; font-size: 1.2rem;
} }
@@ -760,11 +450,6 @@ let navigationItems = [
margin-left: -30px; margin-left: -30px;
} }
.text-soutiens {
font-size: 1.2rem;
letter-spacing: 5px;
}
.profile-container { .profile-container {
margin-top: -185px; margin-top: -185px;
min-width: 480px min-width: 480px
@@ -774,11 +459,6 @@ let navigationItems = [
min-height: 270px; min-height: 270px;
} }
.Je-soutien-container {
min-width: 325px;
margin-left: -35px;
}
.mobile-profile-picture-creator { .mobile-profile-picture-creator {
transform: scale(1.3) translateY(25%) translateX(-50px); transform: scale(1.3) translateY(25%) translateX(-50px);
} }
@@ -815,10 +495,6 @@ let navigationItems = [
} }
@media (min-width: 1280px) and (max-width: 1600px) { @media (min-width: 1280px) and (max-width: 1600px) {
.text-soutiens {
font-size: 1.3rem;
letter-spacing: 8px;
}
.mobile-profile-picture-creator { .mobile-profile-picture-creator {
transform: scale(1.3) translateY(25%) translateX(-50px); transform: scale(1.3) translateY(25%) translateX(-50px);
@@ -832,14 +508,6 @@ let navigationItems = [
min-height: 290px; min-height: 290px;
} }
.menu-col {
margin-left: -4%;
}
.Je-soutien-container {
min-width: 350px;
}
.name-info { .name-info {
font-size: 1.2rem; font-size: 1.2rem;
margin-left: 20px; margin-left: 20px;
@@ -848,7 +516,7 @@ let navigationItems = [
.social-container { .social-container {
margin-left: 90px; margin-left: 90px;
min-width: 350; min-width: 350px;
max-height: 40px max-height: 40px
} }
@@ -873,11 +541,6 @@ let navigationItems = [
} }
@media (min-width: 1600px) and (max-width: 1919px) { @media (min-width: 1600px) and (max-width: 1919px) {
.text-soutiens {
font-size: 1.3rem;
}
.mobile-profile-picture-creator { .mobile-profile-picture-creator {
transform: scale(1.4) translateY(25%) translateX(-40px); transform: scale(1.4) translateY(25%) translateX(-40px);
} }
@@ -890,14 +553,6 @@ let navigationItems = [
min-height: 355px; min-height: 355px;
} }
.menu-col {
margin-left: -4%;
}
.Je-soutien-container {
min-width: 400px;
}
.name-info { .name-info {
font-size: 1.5rem; font-size: 1.5rem;
margin-top: -4px; margin-top: -4px;
@@ -917,9 +572,6 @@ let navigationItems = [
} }
@media (min-width: 1920px) and (max-width: 2559px) { @media (min-width: 1920px) and (max-width: 2559px) {
.text-soutiens {
font-size: 1.3rem;
}
.profile-container { .profile-container {
margin-top: -160px; margin-top: -160px;
@@ -929,10 +581,6 @@ let navigationItems = [
min-height: 380px; min-height: 380px;
} }
.Je-soutien-container {
min-width: 400px;
}
.mobile-profile-picture-creator { .mobile-profile-picture-creator {
transform: scale(1.4) translateY(25%) translateX(-40px); transform: scale(1.4) translateY(25%) translateX(-40px);
} }
@@ -979,10 +627,6 @@ let navigationItems = [
min-height: 380px; min-height: 380px;
} }
.text-soutiens {
font-size: 1.5rem;
}
.name-info { .name-info {
font-size: 2rem; font-size: 2rem;

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,65 @@
<template>
<div class="flex flex-column">
<div class="flex flex-row p-1">
<div class="px-2 content-center">
<img :src="message.portrait"
alt="Profile Image"
class="rounded-full"
width="32px"
height="32px">
</div>
<div class="p-2">
<div>
<span class="font-semibold font-sans mr-2">{{ message.created_by }}</span>
<span class="text-sm font-sans text-gray-700">il y a 3 heures</span>
</div>
<div class="font-sans">
{{ message.value }}
</div>
<div class="flex px-4">
<div>
<v-icon>mdi-thumb-up-outline</v-icon>
{{ message.thumb_up_count }}
</div>
<div>
<v-icon>mdi-thumb-down-outline</v-icon>
{{ message.thumb_down_count }}
</div>
<div>
<v-btn variant="flat">Reply</v-btn>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup>
import {defineProps} from 'vue';
defineProps({
message: {
type: Object,
required: true
}
});
</script>

View File

@@ -0,0 +1,36 @@
<template>
<div v-for="(message, index) in messages" :key="index">
<Message :message="message"></Message>
</div>
</template>
<script setup>
import Message from "@/views/messages/Message.vue";
// import posts from "@/views/posts/posts.json";
import {useClient} from '@/plugins/api.js';
import {defineProps, onBeforeMount, ref} from 'vue';
const props = defineProps({
contentId: {
type: String,
required: true
}
});
const client = useClient();
const messages = ref();
onBeforeMount(async () => {
try {
const response = await client.get(`/api/messages/${props.contentId}`)
messages.value = response.data
} catch (error) {
console.error("Failed to fetch posts", error);
}
})
</script>

View File

@@ -0,0 +1,61 @@
<template>
<div class="flex flex-column">
<div class="flex flex-row">
<div class="px-1 content-center">
<img src="/images/usersmedia/anonyme/profilepictures/profileAnonymeSquare.png"
alt="Profile Image"
class="rounded-full"
width="32px"
height="32px">
</div>
<v-text-field
v-model="message"
density="compact"
variant="solo-inverted"
placeholder="Votre commentaire..."
hide-details
clearable>
</v-text-field>
</div>
<div class="flex flex-row gap-2 p-2 justify-end">
<v-btn style="border-radius: 20px" variant="text">Canceller</v-btn>
<v-btn style="border-radius: 20px" @click="publish">Publier</v-btn>
</div>
</div>
</template>
<script setup>
// import posts from "@/views/posts/posts.json";
import {useClient} from '@/plugins/api.js';
import {defineProps, ref} from 'vue';
const props = defineProps({
contentId: {
type: String,
required: true
}
});
const client = useClient();
const message = ref("");
const publish = async () => {
await client.post(
`/api/messages/`,
{
"contentId": props.contentId,
"message": message.value
});
}
</script>

View File

@@ -0,0 +1,29 @@
[
{
"content": "40C28A05-2262-43F4-862A-09A4246A8DDE",
"portrait": "/images/usersmedia/anonyme/profilepictures/profileAnonymeSquare.png",
"created_by": "@marchy",
"created_at": "",
"message": "Hello World!",
"thumb_up_count": 0,
"thumb_down_count": 0
},
{
"content": "40C28A05-2262-43F4-862A-09A4246A8DDE",
"portrait": "/images/usersmedia/anonyme/profilepictures/profileAnonymeSquare.png",
"created_by": "@marchy",
"created_at": "",
"message": "Welcome to life!",
"thumb_up_count": 0,
"thumb_down_count": 3
},
{
"content": "40C28A05-2262-43F4-862A-09A4246A8DDE",
"portrait": "/images/usersmedia/anonyme/profilepictures/profileAnonymeSquare.png",
"created_by": "@marchy",
"created_at": "",
"message": "We love you!",
"thumb_up_count": 1,
"thumb_down_count": 0
}
]

View File

@@ -1,259 +0,0 @@
<template>
<body style="background-color: #f4f4f4;">
<DefaultLayout></DefaultLayout>
<div>
<v-row class="fluid" style="margin-top: -30px; position: relative; z-index: 0;" hidden-md-and-down>
<v-col cols="12" class="pa-0" style="width: 100vw; overflow: hidden;">
<v-img class="profile-banner" max-height="375"
src="/images/hutopymedia/tospage/headerbackground.png" cover
style="box-shadow: 0 4px 6px rgba(0, 0, 0, 0.8);"></v-img>
</v-col>
</v-row>
<v-container style="z-index: 100; position: relative;">
<v-row justify="center" align="center" style="color:white; margin-top: -250px;"
class="header-text-size">
<v-typography class="headline text-center">À propos</v-typography>
</v-row>
</v-container>
<v-row class="fluid d-flex justify-center" style="margin-bottom: 25px; margin-top: 25px;">
<v-col cols="auto">
<router-link :to="{ name: 'home' }">
<v-btn flat style="background-color: #f4f4f4;">
<v-icon left style="margin-right: 10px;">mdi-home</v-icon> Accueil
</v-btn>
</router-link>
</v-col>
</v-row>
<v-container style="z-index: 100; position: relative;">
<v-row justify="center" align="center">
<v-spacer></v-spacer>
<v-col cols="7">
<p style="font-weight: 600; font-size: 2rem; margin-bottom: 25px;">
À propos
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Bienvenue sur la page "À Propos" dHutopy, nous partageons notre histoire, notre mission,
notre vision, et vous présentons l'équipe passionnée qui rend tout cela possible. Hutopy
n'est pas seulement une plateforme ; c'est une communauté, un mouvement, un lieu où la
créativité rencontre la technologie pour créer des expériences inoubliables.
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Notre Histoire
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Hutopy a été fondée en 2024, née de l'idée simple mais puissante que chaque créateur qu'il
soit grand ou petit, novice ou expérimenté, devrait avoir accès aux outils et au soutien
nécessaires pour partager sa passion avec le monde.
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Notre Mission
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Notre mission est de démocratiser la création de contenu numérique, en offrant une
plateforme accessible, intuitive et puissante qui permet aux créateurs de tout horizon de
s'exprimer, d'innover et de connecter avec une audience mondiale. Nous nous engageons à
fournir les outils, les ressources et le soutien nécessaires pour que chaque voix puisse
être entendue.
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Notre Vision
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Nous envisageons un monde où la barrière entre les créateurs et leur audience est réduite au
minimum, où les idées, l'expertise et les histoires peuvent circuler librement et sans
entrave. Hutopy aspire à être au cœur de cet écosystème créatif et professionnel, en étant
une source d'inspiration, une plateforme de lancement et un foyer pour tous.
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Notre Équipe
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Derrière Hutopy, il y a une équipe de penseurs innovants, de créatifs passionnés et de
technologues dévoués, tous unis par le désir de soutenir la communauté des créateurs de
contenu. Notre équipe est notre plus grande force, chaque membre apportant une expertise
unique et une perspective fraîche à notre mission commune.
</p>
<br>
<v-row justify="center">
<v-card max-width="250px" style="margin: 10px;">
<img class="member-profile-picture"
src="/images/hutopymedia/tospage/membersPictures/profileMarco.png"
alt="Marc-Olivier Hébert">
<div style="margin: 10px;">
<v-typography class="name"
style="font-size: 1.5rem; font-weight: bold;">Marc-Olivier
</v-typography><br> <v-typography class="name"
style="font-size: 1.5rem; font-weight: bold;">
Hébert</v-typography><br>
<v-typography class="task" style="font-size: 1rem;">Fondateur</v-typography><br><br>
<p class="text" style="hyphens: auto; font-size: 0.8rem; text-align: justify;">Avec
une
vision claire et un engagement sans faille, il a lancé Hutopy pour changer la
manière dont le contenu est créé et partagé.</p>
</div>
</v-card>
<v-card max-width="250px" style="margin: 10px;">
<img class="member-profile-picture"
src="/images/hutopymedia/tospage/membersPictures/profileDominique.png"
alt="Dominic Villemure">
<div style="margin: 10px;">
<v-typography class="name" style="font-size: 1.5rem; font-weight: bold;">Dominic
</v-typography><br>
<v-typography class="name" style="font-size: 1.5rem; font-weight: bold;">
Villemure</v-typography><br>
<v-typography class="task" style="font-size: 1rem;">Responsable
Technique</v-typography><br><br>
<p class="text" style="hyphens: auto; font-size: 0.8rem; text-align: justify;">À la
tête de notre équipe de développement, il assure quHutopy reste à la pointe de
la technologie.
</p>
</div>
</v-card>
<v-card max-width="250px" style="margin: 10px;">
<img class="member-profile-picture"
src="/images/hutopymedia/tospage/membersPictures/profilePascal.png"
alt="Pascal Marchesseault">
<div style="margin: 10px;">
<v-typography class="name" style="font-size: 1.5rem; font-weight: bold;">Pascal
</v-typography><br>
<v-typography class="name" style="font-size: 1.5rem; font-weight: bold;">
Marchesseault</v-typography><br>
<v-typography class="task" style="font-size: 1rem;">Expérience
utilisateur</v-typography><br>
<br>
<p class="text" style="hyphens: auto; font-size: 0.8rem; text-align: justify;">Le
champion
de l'expérience utilisateur, il veille à ce que chaque interaction avec Hutopy
soit
positive et enrichissante pour tous les utilisateurs.</p>
</div>
</v-card>
<v-card max-width="250px" style="margin: 10px;">
<img class="member-profile-picture"
src="/images/hutopymedia/tospage/membersPictures/profileChloe.png"
alt="Chloé Beaugrand">
<div style="margin: 10px;">
<v-typography class="name" style="font-size: 1.5rem; font-weight: bold;">Chloé
</v-typography><br>
<v-typography class="name" style="font-size: 1.5rem; font-weight: bold;">
Beaugrand</v-typography><br>
<v-typography class="task" style="font-size: 1rem;">Responsable
Marketing</v-typography><br>
<br>
<p class="text" style="hyphens: auto; font-size: 0.8rem; text-align: justify;">Elle
façonne
l'image dHutopy et engage notre communauté à travers des campagnes innovantes
et
impactantes.</p>
</div>
</v-card>
<v-card max-width="250px" style="margin: 10px;">
<img class="member-profile-picture"
src="/images/hutopymedia/tospage/membersPictures/profileEdouard.png"
alt="Édouard Letarte">
<div style="margin: 10px;">
<v-typography class="name" style="font-size: 1.5rem; font-weight: bold;">Édouard
</v-typography><br>
<v-typography class="name" style="font-size: 1.5rem; font-weight: bold;">
Letarte</v-typography><br>
<v-typography class="task" style="font-size: 1rem;">Intégrateur
</v-typography><br><br>
<p class="text" style="hyphens: auto; font-size: 0.8rem; text-align: justify;">Son
expertise nous permet d'intégrer des fonctionnalités qui permettent à Hutopy de
devenir réalité.</p>
</div>
</v-card>
</v-row>
<br>
<p style="margin-top: 25px; margin-bottom: 25px;">
Chez Hutopy, nous sommes plus qu'une plateforme ; nous sommes une famille dédiée à la
réussite de nos créateurs. Nous vous invitons à nous joindre dans cette aventure
passionnante, à partager votre créativité et votre expertise avec le monde et à faire
dHutopy votre utopie. Merci de faire partie de notre histoire.
</p>
</v-col>
<v-spacer></v-spacer>
</v-row>
</v-container>
</div>
<FooterLayout></FooterLayout>
</body>
</template>
<script setup>
import DefaultLayout from '@/layouts/DefaultLayout.vue';
import FooterLayout from '@/layouts/FooterLayout.vue';
</script>
<style>
.header-text-size {
font-size: 4rem;
}
.member-profile-picture {
width: 250px;
height: auto;
}
</style>

View File

@@ -1,336 +0,0 @@
<template>
<body style="background-color: #f4f4f4;">
<DefaultLayout></DefaultLayout>
<div>
<v-row class="fluid" style="margin-top: -30px; position: relative; z-index: 0;" hidden-md-and-down>
<v-col cols="12" class="pa-0" style="width: 100vw; overflow: hidden;">
<v-img class="profile-banner" max-height="375"
src="/images/hutopymedia/tospage/headerbackground.png" cover
style="box-shadow: 0 4px 6px rgba(0, 0, 0, 0.8);"></v-img>
</v-col>
</v-row>
<v-container style="z-index: 100; position: relative;">
<v-row justify="center" align="center" style="color:white; margin-top: -250px;"
class="header-text-size">
<v-typography class="headline text-center">Politique de Contenu</v-typography>
</v-row>
</v-container>
<v-row class="fluid d-flex justify-center" style="margin-bottom: 25px; margin-top: 25px;">
<v-col cols="auto">
<router-link :to="{ name: 'home' }">
<v-btn flat style="background-color: #f4f4f4;">
<v-icon left style="margin-right: 10px;">mdi-home</v-icon> Accueil
</v-btn>
</router-link>
</v-col>
</v-row>
<v-container style="z-index: 100; position: relative;">
<v-row justify="center" align="center">
<v-spacer></v-spacer>
<v-col cols="7">
<p style="font-weight: 600; font-size: 2rem; margin-bottom: 25px;">
Politique de Contenu dHutopy
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Introduction
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Hutopy vise à offrir une plateforme sécurisée, inclusive et respectueuse les créateurs
peuvent partager leur travail et interagir avec une communauté engagée. Pour maintenir cet
environnement, nous avons établi des lignes directrices claires concernant le type de
contenu autorisé sur notre plateforme. En utilisant Hutopy, vous acceptez de respecter cette
politique de contenu.
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Contenu Autorisé
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Hutopy encourage la publication de contenu créatif, éducatif et inspirant dans divers
formats, y compris :<br>
<br>
<li>Arts visuels et design : Illustrations, photographies, designs graphiques respectant le
droit d'auteur.</li>
<br>
<li>Éducation et apprentissage : Tutoriels, cours en ligne, webinaires qui favorisent
l'apprentissage et le développement personnel.</li>
<br>
<li>Contenu écrit : Articles, blogs, poésies qui enrichissent les discussions et partagent
des connaissances.</li>
<br>
<li>Multimédia : Vidéos, podcasts et musique originales qui respectent les droits d'auteur
et encouragent l'expression créative.</li>
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Contenu Interdit
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Pour protéger notre communauté, certains types de contenu ne sont pas autorisés sur Hutopy,
incluant mais non limité à : <br>
<br>
<li>Contenu illégal : Tout contenu promouvant des activités illégales ou fournissant des
instructions pour commettre des actes illégaux.</li>
<br>
<li>Harcèlement et discours de haine : Contenu visant à harceler, menacer, ou promouvoir la
haine contre des individus ou des groupes basés sur la race, l'ethnie, la religion, le
genre, l'orientation sexuelle, l'identité de genre ou tout autre caractéristique
distinctive.
</li>
<br>
<li>Contenu pour adultes : Matériel pornographique ou explicitement sexuel.
</li>
<br>
<li>Violence et contenu graphique : Images ou descriptions de violence excessive, gore ou
choquantes.</li>
<br>
<li>Publicité mensongère et spam : Contenu trompeur, frauduleux ou spammy.
</li>
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Droits d'Auteur et Propriété Intellectuelle
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Respect des Droits : Vous devez posséder les droits sur le contenu que vous publiez sur
Hutopy ou avoir l'autorisation expresse du détenteur des droits pour utiliser ce contenu.
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Attribution : Lorsque vous utilisez ou adaptez le contenu protégé par des droits d'auteur
appartenant à autrui, une attribution claire et correcte doit être fournie.
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Modération et Signalement
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Modération : Hutopy utilise à la fois des modérateurs humains et des outils automatisés pour
surveiller et évaluer le contenu publié, garantissant le respect de cette politique.
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Signalement : Les utilisateurs de Hutopy sont encouragés à signaler tout contenu qu'ils
considèrent comme enfreignant notre politique de contenu via les outils de signalement
disponibles sur la plateforme.
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Conséquences des Violations
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
La violation de notre politique de contenu peut entraîner des actions allant de
l'avertissement à la suppression du contenu ou à la suspension, voire à la résiliation du
compte utilisateur.
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Révisions de la Politique
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Hutopy se réserve le droit de modifier cette politique de contenu à tout moment pour
refléter les changements dans nos pratiques ou pour se conformer à de nouvelles
réglementations légales.
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Dans le cas dune non conformité aux politiques de contenus :
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
1. Suspension des Fonds : Les montants accumulés sur le compte de l'utilisateur en question
seront suspendus temporairement le temps de l'évaluation.<br>
<br>
2. Redistribution à des Œuvres de Charité : Si, après évaluation, le contenu est
définitivement jugé non conforme à nos clauses de conformité, les fonds suspendus seront
redistribués à des œuvres de charité choisies par Hutopy. L'utilisateur concerné sera
informé de cette décision et des raisons de la non-conformité de son contenu.
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Cette mesure vise à renforcer la responsabilité des créateurs quant au type de contenu
partagé sur Hutopy, tout en soutenant des causes bénéfiques en cas de violation de nos
directives.
</p>
<p style="font-weight: 600; font-size: 2rem; margin-bottom: 25px;">
Section Anti-Exploitation dHutopy
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Engagement dHutopy
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Hutopy s'engage fermement à maintenir une plateforme sûre et respectueuse pour tous ses
utilisateurs. Nous prenons une position intransigeante contre toute forme d'exploitation
humaine et nous travaillons activement pour prévenir, identifier et combattre les
comportements et contenus exploitants. Notre mission est de créer un environnement où la
créativité et l'expression personnelle peuvent s'épanouir sans crainte d'exploitation ou
d'abus.
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Politique de Tolérance Zéro
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Nous appliquons une politique de tolérance zéro à l'égard de :<br>
<br>
<li>Exploitation sexuelle : Cela inclut, mais n'est pas limité à, la pornographie infantile,
le trafic sexuel, et le harcèlement sexuel.
</li>
<br>
<li>Travail forcé : Nous nous opposons à toute forme de travail forcé ou de servitude, y
compris le travail des enfants.
</li>
<br>
<li>Exploitation financière : Cela comprend les arnaques, la fraude et tout autre type
d'exploitation financière.</li>
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Politique de Tolérance Zéro
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Signalement et Actions<br>
<br>
<li>Mécanismes de Signalement : Hutopy fournit des outils faciles à utiliser pour signaler
rapidement tout contenu ou comportement suspect d'exploitation. Nous encourageons
vivement les utilisateurs à utiliser ces outils s'ils rencontrent ou soupçonnent des cas
d'exploitation.
</li>
<br>
<li>Réponse Rapide : Notre équipe dédiée examine tous les signalements avec la plus grande
attention et prend des mesures immédiates pour adresser les problèmes signalés. Cela
peut inclure la suppression de contenu, la suspension de comptes, et, si nécessaire, le
signalement aux autorités compétentes.
</li>
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Collaboration avec les Autorités
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Nous collaborons étroitement avec les autorités et les organisations spécialisées pour
combattre l'exploitation sous toutes ses formes. Hutopy est déterminé à respecter toutes les
lois applicables et à coopérer avec les autorités dans leurs efforts de lutte contre
l'exploitation et l'abus.
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Engagements des Utilisateurs
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
En rejoignant Hutopy, les utilisateurs s'engagent à respecter nos principes
anti-exploitation et à contribuer à la création d'un espace sûr pour tous. Tout manquement à
ces engagements entraînera des conséquences sérieuses, conformément à notre politique de
tolérance zéro.
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Modération et Signalement
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
<li>Modération : Hutopy utilise à la fois des modérateurs humains et des outils automatisés
pour surveiller et évaluer le contenu publié, garantissant le respect de cette
politique.</li>
<br>
<li>Signalement : Les utilisateurs dHutopy sont encouragés à signaler tout contenu qu'ils
considèrent comme enfreignant notre politique de contenu via les outils de signalement
disponibles sur la plateforme.</li>
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Conséquences des Violations
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
La violation de notre politique de contenu peut entraîner des actions allant de
l'avertissement à la suppression du contenu ou à la suspension, voire à la résiliation du
compte utilisateur.
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Révisions de la Politique
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Hutopy se réserve le droit de modifier cette politique de contenu à tout moment pour
refléter les changements dans nos pratiques ou pour se conformer à de nouvelles
réglementations légales.
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Contact
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Si vous avez des questions sur cette politique de contenu ou sur la manière dont nous
l'appliquons, veuillez contacter notre équipe d'assistance à <a
href="mailto:support@hutopy.com" style="color: #a30e79;">support@hutopy.com</a>
</p>
</v-col>
<v-spacer></v-spacer>
</v-row>
</v-container>
</div>
<FooterLayout></FooterLayout>
</body>
</template>
<script setup>
import DefaultLayout from '@/layouts/DefaultLayout.vue';
import FooterLayout from '@/layouts/FooterLayout.vue';
</script>
<style>
.header-text-size {
font-size: 4rem;
}
</style>

View File

@@ -1,244 +0,0 @@
<template>
<body style="background-color: #f4f4f4;">
<DefaultLayout></DefaultLayout>
<div>
<v-row class="fluid" style="margin-top: -30px; position: relative; z-index: 0;">
<v-col cols="12" class="pa-0" style="width: 100vw; overflow: hidden;">
<v-img class="profile-banner" max-height="375"
src="/images/hutopymedia/tospage/headerbackground.png" cover
style="box-shadow: 0 4px 6px rgba(0, 0, 0, 0.8);"></v-img>
</v-col>
</v-row>
<v-container style="z-index: 100; position: relative;">
<v-row justify="center" style="color:white;">
<h1 class="header-text-size text-center">FAQ
</h1>
</v-row>
</v-container>
<v-row class="fluid d-flex justify-center" style="margin-bottom: 25px; margin-top: 25px;">
<v-col cols="auto">
<router-link :to="{ name: 'home' }">
<v-btn flat style="background-color: #f4f4f4;">
<v-icon left style="margin-right: 10px;">mdi-home</v-icon> Accueil
</v-btn>
</router-link>
</v-col>
</v-row>
<v-container style="z-index: 100; position: relative;">
<v-row justify="center" align="center">
<v-spacer></v-spacer>
<v-col cols="7">
<p style="font-weight: 600; font-size: 1rem; margin-bottom: 25px; color: red;">
Certaines fonctionnalités ne sont pas encore implémentées, donc certains libellés sont
prévus pour la v1.0.
</p>
<p style="font-weight: 600; font-size: 2rem; margin-bottom: 25px;">
Foire Aux Questions
</p>
<p class="text-start text-left" style="margin-bottom: 25px;">
La section FAQ de Hutopy est votre ressource essentielle pour trouver des réponses rapides
aux questions les plus fréquemment posées sur notre plateforme. Explorez nos réponses
détaillées pour optimiser votre utilisation de Hutopy et résoudre vos problèmes en un
instant. Consultez régulièrement notre FAQ pour rester informé des dernières
fonctionnalités.
</p>
<p style="font-weight: 600; font-size: 1.4rem;">
1. Comment puis-je créer un compte sur Hutopy ?
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
<span style="font-weight: 600;">Réponse :</span> Créer un compte est
simple !
Visitez notre page
d'inscription, remplissez les
informations requises, et suivez les instructions pour confirmer votre adresse e-mail ou
vous connecter via les partenaires de connexion. Vous pourrez commencer à explorer et à
interagir avec la communauté Hutopy immédiatement après.
</p>
<p style="font-weight: 600; font-size: 1.4rem;">
2. Quels types de contenu puis-je publier sur Hutopy ?
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
<span style="font-weight: 600;">Réponse :</span> Hutopy accueille une
large
variété de contenus créatifs, incluant mais non limité à des vidéos, articles, podcasts, et
illustrations. Nous encourageons la diversité et l'originalité, tant que le contenu respecte
nos valeurs.
</p>
<p style="font-weight: 600; font-size: 1.4rem;">
3. Comment Hutopy rémunère-t-il les créateurs de contenu ?
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
<span style="font-weight: 600;">Réponse :</span> Les créateurs peuvent monétiser leur
contenu de plusieurs façons, notamment via des abonnements payants et des dons de la part
des utilisateurs.
</p>
<p style="font-weight: 600; font-size: 1.4rem;">
4. Comment puis-je modifier mon profil ?
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
<span style="font-weight: 600;">Réponse :</span> Connectez-vous à votre compte, accédez à
votre profil, puis cliquez sur "Éditer le profil" pour modifier vos informations, ajouter
une bio, changer votre photo de profil, et plus encore.
</p>
<p style="font-weight: 600; font-size: 1.4rem;">
5. Est-il possible de supprimer mon compte ?
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
<span style="font-weight: 600;">Réponse :</span> Oui, vous pouvez faire la suppression de
votre compte sur votre profil dans la section plus. Notez que cette action est irréversible.
</p>
<p style="font-weight: 600; font-size: 1.4rem;">
6. Que faire si j'oublie mon mot de passe ?
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
<span style="font-weight: 600;">Réponse :</span> Sur la page de connexion, cliquez sur "Mot
de passe oublié ?" et suivez les instructions pour réinitialiser votre mot de passe via
votre adresse courriel.
</p>
<p style="font-weight: 600; font-size: 1.4rem;">
7. Comment signaler un contenu inapproprié ?
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
<span style="font-weight: 600;">Réponse :</span> Si vous rencontrez du contenu qui viole nos
directives, cliquer sur les trois petits points en haut de la publication et cliqué sur le
bouton "Signaler" associé au contenu en question pour alerter notre équipe de modération.
</p>
<p style="font-weight: 600; font-size: 1.4rem;">
8. Comment puis-je contacter le support Hutopy ?
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
<span style="font-weight: 600;">Réponse :</span> Pour toute assistance, vous pouvez nous
contacter via notre formulaire en ligne ou par e-mail à support@hutopy.com, ou via nos
réseaux sociaux. Notre équipe s'efforce de répondre rapidement à toutes les demandes.
</p>
<p style="font-weight: 600; font-size: 1.4rem;">
9. Quels sont les frais pour les créateurs sur Hutopy ?
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
<span style="font-weight: 600;">Réponse :</span> Hutopy prélève une commission de 12% +
0,30$ sur chaque transaction réalisée sur la plateforme, que ce soit pour les abonnements,
les dons ou tout autre revenu généré par les créateurs. Cette commission nous aide à couvrir
les coûts de maintenance de la plateforme, de la bande passante, d'assistance utilisateur,
des frais de transaction de Stripe et le développement continu pour améliorer votre
expérience sur Hutopy.
</p>
<p style="font-weight: 600; font-size: 1.4rem;">
10. Y a-t-il des frais pour s'inscrire ou pour maintenir mon compte sur Hutopy ?
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
<span style="font-weight: 600;">Réponse :</span> Non, l'inscription sur Hutopy est gratuite,
et il n'y a pas de frais mensuels ou annuels pour maintenir votre compte. Vous pouvez
commencer à utiliser Hutopy et à partager votre contenu sans aucun coût initial.
</p>
<p style="font-weight: 600; font-size: 1.4rem;">
11. Les utilisateurs doivent-ils payer pour accéder au contenu sur Hutopy ?
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
<span style="font-weight: 600;">Réponse :</span> Hutopy offre à la fois du contenu gratuit
et du contenu premium. Les utilisateurs peuvent accéder gratuitement à une partie du contenu
sur la plateforme. Cependant, certains créateurs peuvent choisir de rendre leur contenu
accessible uniquement via un abonnement payant ou un achat unique pour soutenir leur
travail.
</p>
<p style="font-weight: 600; font-size: 1.4rem;">
12. Existe-t-il des frais pour retirer mes gains de la plateforme ?
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
<span style="font-weight: 600;">Réponse :</span> Les créateurs peuvent retirer leurs gains
sans frais supplémentaires de la part dHutopy. Cependant, les transactions bancaires ou les
transferts vers des portefeuilles électroniques peuvent être soumis aux frais standards
imposés par ces services ou institutions financières, mais pas par Hutopy.
</p>
<p style="font-weight: 600; font-size: 1.4rem;">
13. Les frais Hutopy sont-ils les mêmes pour tous les types de contenu ?
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
<span style="font-weight: 600;">Réponse :</span> Oui, les frais de commission dHutopy sont
uniformément appliqués à tous les types de contenu et de transactions sur la plateforme pour
maintenir la simplicité et la transparence et ce peut importe le montant.
</p>
</v-col>
<v-spacer></v-spacer>
</v-row>
</v-container>
</div>
<FooterLayout></FooterLayout>
</body>
</template>
<script setup>
import DefaultLayout from '@/layouts/DefaultLayout.vue';
import FooterLayout from '@/layouts/FooterLayout.vue';
</script>
<style scoped>
.header-text-size {
font-size: 4rem;
margin-top: -230px;
}
@media (min-width: 650px) and (max-width: 960px) {
.header-text-size {
margin-top: -200px;
}
}
@media (min-width: 100px) and (max-width: 649px) {
.header-text-size {
margin-top: -155px;
}
}
</style>

View File

@@ -1,107 +0,0 @@
<template>
<body style="background-color: #f4f4f4;">
<DefaultLayout></DefaultLayout>
<div>
<v-row class="fluid" style="margin-top: -30px; position: relative; z-index: 0;" hidden-md-and-down>
<v-col cols="12" class="pa-0" style="width: 100vw; overflow: hidden;">
<v-img class="profile-banner" max-height="375"
src="/images/hutopymedia/tospage/headerbackground.png" cover
style="box-shadow: 0 4px 6px rgba(0, 0, 0, 0.8);"></v-img>
</v-col>
</v-row>
<v-container style="z-index: 100; position: relative;">
<v-row justify="center" align="center" style="color:white; margin-top: -250px;"
class="header-text-size">
<v-typography class="headline text-center">Frais</v-typography>
</v-row>
</v-container>
<v-row class="fluid d-flex justify-center" style="margin-bottom: 25px; margin-top: 25px;">
<v-col cols="auto">
<router-link :to="{ name: 'home' }">
<v-btn flat style="background-color: #f4f4f4;">
<v-icon left style="margin-right: 10px;">mdi-home</v-icon> Accueil
</v-btn>
</router-link>
</v-col>
</v-row>
<v-container style="z-index: 100; position: relative;">
<v-row justify="center" align="center">
<v-spacer></v-spacer>
<v-col cols="7">
<p style="font-weight: 600; font-size: 2rem; margin-bottom: 25px;">
Frais
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Découvrez Hutopy, l'endroit où la valorisation de votre travail atteint son apogée. Avec une
commission réduite à seulement 9 %, notre engagement envers votre succès est palpable.
Chaque pourcentage prélevé est réinvesti avec soin pour catalyser votre croissance afin de
développer des fonctionnalités innovantes, maintenir une infrastructure technologique de
pointe, et un support utilisateur de premier ordre. Notre objectif ? Amplifier votre
expansion et garantir une expérience utilisateur sans précédent.
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Pour chaque transaction, un frais minime assure la sécurité et la fiabilité des paiements,
grâce à un partenaire de confiance mondialement reconnu. Ce dernier sécurise des milliards
en transactions chaque année pour une diversité d'entreprises, à des entreprises en
démarrage aux conglomérats établis. Ce gage de sécurité est disponible pour une somme de 2,9
% plus un 0,30 $ par transaction, une petite contribution pour la tranquillité d'esprit et
la protection de vos revenus.
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Notre modèle tarifaire, pensé pour la simplicité et la transparence, a pour ambition ultime
d'optimiser vos gains. Chez Hutopy, la notion de partenariat prend tout son sens : votre
épanouissement est au cœur de nos préoccupations. Bénéficiez d'une plateforme qui élargit
votre horizon créatif et entrepreneurial, tout en vous assurant que vos intérêts et ceux de
vos donnateurs sont précieusement gardés.
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Hutopy est plus qu'une plateforme ; c'est une communauté où la transformation de la passion
en profit devient réalité, grâce au soutien indéfectible d'une équipe dévouée à enrichir
votre parcours. Nous vous invitons à nous rejoindre pour explorer ensemble les avenues de
succès, tout en vous garantissant une part conséquente de vos revenus. Embarquez dans une
aventure votre présence en ligne ne connaît pas de limites, soutenue par Hutopy, votre
allié dans la quête du succès.
</p>
</v-col>
<v-spacer></v-spacer>
</v-row>
</v-container>
</div>
<FooterLayout></FooterLayout>
</body>
</template>
<script setup>
import DefaultLayout from '@/layouts/DefaultLayout.vue';
import FooterLayout from '@/layouts/FooterLayout.vue';
</script>
<style>
.header-text-size {
font-size: 4rem;
}
.member-profile-picture {
width: 250px;
height: auto;
}
</style>

View File

@@ -1,141 +0,0 @@
<template>
<body style="background-color: #f4f4f4;">
<DefaultLayout></DefaultLayout>
<div>
<v-row class="fluid" style="margin-top: -30px; position: relative; z-index: 0;">
<v-col cols="12" class="pa-0" style="width: 100vw; overflow: hidden;">
<v-img class="profile-banner" max-height="375"
src="/images/hutopymedia/tospage/headerbackground.png" cover
style="box-shadow: 0 4px 6px rgba(0, 0, 0, 0.8);"></v-img>
</v-col>
</v-row>
<v-container style="z-index: 100; position: relative;">
<v-row justify="center" style="color:white;">
<h1 class="header-text-size text-center">Guide pour les Créateurs</h1>
</v-row>
</v-container>
<v-row class="fluid d-flex justify-center" style="margin-bottom: 25px; margin-top: 25px;">
<v-col cols="auto">
<router-link :to="{ name: 'home' }">
<v-btn flat style="background-color: #f4f4f4;">
<v-icon left style="margin-right: 10px;">mdi-home</v-icon> Accueil
</v-btn>
</router-link>
</v-col>
</v-row>
<v-container style="z-index: 100; position: relative;">
<v-row justify="center" align="center">
<v-spacer></v-spacer>
<v-col cols="7">
<p style="font-weight: 600; font-size: 2rem; margin-bottom: 25px;">
Guide pour les Créateurs sur Hutopy
</p>
<p class="text-start text-left" style="margin-bottom: 25px;">
Bienvenue dans la Communauté de Créateurs dHutopy
</p>
<p style="margin-bottom: 25px;">
Félicitations pour avoir choisi Hutopy pour partager votre créativité et votre savoir ! Ce
guide est conçu pour vous aider à maximiser votre présence sur la plateforme, à engager
votre audience et à tirer le meilleur parti des outils à votre disposition.
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
1. Création de Votre Profil de Créateur :
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
<li>Personnalisez Votre Profil : Ajoutez une photo de profil, une bannière et une bio
qui
reflète votre personnalité et votre marque de créateur.</li> <br>
<li> Liens et Contacts : Intégrez des liens vers vos autres plateformes sociales</li>
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
2. Publication de Contenu :
</p>
<p style="margin-top: 25px; margin-bottom: 25px; ">
<li>Diversifiez Votre Contenu : Explorez différents formats vidéos, articles, podcasts
pour captiver divers segments d'audience.
</li> <br>
<li> Planification et Consistance : Publiez régulièrement pour garder votre audience
engagée. Utilisez l'outil de planification dHutopy pour organiser vos publications à
l'avance.</li>
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
3. Engagement avec Votre Audience :
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
<li>Interagissez : Répondez aux commentaires, participez à des discussions et créez des
sondages pour encourager l'interaction.
</li> <br>
<li> Analysez Vos Performances : Utilisez les outils d'analyse dHutopy pour comprendre ce
qui résonne avec votre audience et ajustez votre stratégie en conséquence.</li>
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
4. Monétisation :
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
<li>Explorez les Options : Hutopy offre plusieurs voies de monétisation, y compris les
abonnements payants, les dons et le programme d'ambassadeur. Choisissez ce qui convient
le mieux à votre contenu et à votre audience.
</li>
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
5. Croissance et Développement :
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
<li>Continuez à Apprendre : Utilisez le Centre de Ressources Éducatives dHutopy pour
améliorer vos compétences et rester à jour sur les tendances du secteur. ( À venir )
</li> <br>
</p>
</v-col>
<v-spacer></v-spacer>
</v-row>
</v-container>
</div>
<FooterLayout></FooterLayout>
</body>
</template>
<script setup>
import DefaultLayout from '@/layouts/DefaultLayout.vue';
import FooterLayout from '@/layouts/FooterLayout.vue';
</script>
<style scoped>
.header-text-size {
font-size: 4rem;
margin-top: -230px;
}
@media (min-width: 650px) and (max-width: 960px) {
.header-text-size {
margin-top: -200px;
font-size: 3rem;
}
}
@media (min-width: 100px) and (max-width: 649px) {
.header-text-size {
margin-top: -135px;
font-size: 2.5rem;
}
}
</style>

View File

@@ -1,122 +0,0 @@
<template>
<body style="background-color: #f4f4f4;">
<DefaultLayout></DefaultLayout>
<div>
<v-row class="fluid" style="margin-top: -30px; position: relative; z-index: 0;">
<v-col cols="12" class="pa-0" style="width: 100vw; overflow: hidden;">
<v-img class="profile-banner" max-height="375"
src="/images/hutopymedia/tospage/headerbackground.png" cover
style="box-shadow: 0 4px 6px rgba(0, 0, 0, 0.8);"></v-img>
</v-col>
</v-row>
<v-container style="z-index: 100; position: relative;">
<v-row justify="center" style="color:white;">
<h1 class="header-text-size text-center">Aide et Contact</h1>
</v-row>
</v-container>
<v-row class="fluid d-flex justify-center" style="margin-bottom: 25px; margin-top: 25px;">
<v-col cols="auto">
<router-link :to="{ name: 'home' }">
<v-btn flat style="background-color: #f4f4f4;">
<v-icon left style="margin-right: 10px;">mdi-home</v-icon> Accueil
</v-btn>
</router-link>
</v-col>
</v-row>
<v-container style="z-index: 100; position: relative;">
<v-row justify="center" align="center">
<v-spacer></v-spacer>
<v-col cols="7">
<p style="font-weight: 600; font-size: 2rem; margin-bottom: 25px;">
Aide et contact
</p>
<p class="text-start text-left" style="margin-bottom: 25px;">
Bienvenue dans notre espace d'assistance ! Que vous soyez un créateur à la recherche de
conseils pour optimiser votre présence sur Hutopy, ou un utilisateur curieux d'en apprendre
plus sur notre plateforme, vous êtes au bon endroit. Notre objectif est de vous fournir tout
le soutien nécessaire pour que votre expérience sur Hutopy soit aussi enrichissante et
agréable que possible.
</p>
<p style="font-weight: 600; font-size: 1.4rem;">
FAQ (Foire Aux Questions)
</p>
<p style="margin-top: 25px; ">
Retrouvez les réponses aux questions les plus fréquemment posées concernant l'utilisation
dHutopy, les fonctionnalités de la plateforme, les options de monétisation, et plus encore.
Consulter la FAQ
</p>
<p style="margin-top: 25px; font-weight: 600; font-size: 1.4rem;">Contactez-Nous</p>
<p style="margin-top: 25px;">Nous sommes toujours ravis d'entendre nos utilisateurs ! Que ce
soit pour partager vos retours, poser une question spécifique, ou demander des
renseignements sur des partenariats, n'hésitez pas à nous contacter.</p>
<p style="margin-top: 25px; color: black;">
- Par E-mail : <a href="mailto:info@hutopy.com" style="color: #a30e79;">info@hutopy.com</a>
<br>
- Réseaux Sociaux : Nous sommes actifs sur <a href="https://www.facebook.com/Hutopy"
style="color: #a30e79;">Facebook</a>, et <a href="https://www.instagram.com/hutopy.inc"
style="color: #a30e79;">Instagram</a> <br>
- Suivez-nous pour rester informé et interagir avec notre communauté.
</p>
<p style="margin-top: 25px; font-weight: 600; font-size: 1.4rem;">Assistance Technique</p>
<p style="margin-top: 25px; color: black;">
Rencontrez-vous un problème technique ? <br>
Notre équipe d'assistance est pour vous aider :
<a href="mailto:support@hutopy.com" style="color: #a30e79;">support@hutopy.com</a>
</p>
<p style="margin-top: 25px;">Nous sommes pour rendre votre expérience sur Hutopy aussi fluide
et positive que possible. N'hésitez pas à nous contacter pour toute aide supplémentaire !
</p>
</v-col>
<v-spacer></v-spacer>
</v-row>
</v-container>
</div>
<FooterLayout></FooterLayout>
</body>
</template>
<script setup>
import DefaultLayout from '@/layouts/DefaultLayout.vue';
import FooterLayout from '@/layouts/FooterLayout.vue';
</script>
<style scoped>
.header-text-size {
font-size: 4rem;
margin-top: -230px;
}
@media (min-width: 650px) and (max-width: 960px) {
.header-text-size {
margin-top: -200px;
}
}
@media (min-width: 100px) and (max-width: 649px) {
.header-text-size {
margin-top: -155px;
}
}
</style>

View File

@@ -1,185 +0,0 @@
<template>
<body style="background-color: #f4f4f4;">
<DefaultLayout></DefaultLayout>
<div>
<v-row class="fluid" style="margin-top: -30px; position: relative; z-index: 0;" hidden-md-and-down>
<v-col cols="12" class="pa-0" style="width: 100vw; overflow: hidden;">
<v-img class="profile-banner" max-height="375"
src="/images/hutopymedia/tospage/headerbackground.png" cover
style="box-shadow: 0 4px 6px rgba(0, 0, 0, 0.8);"></v-img>
</v-col>
</v-row>
<v-container style="z-index: 100; position: relative;">
<v-row justify="center" align="center" style="color:white; margin-top: -250px;"
class="header-text-size">
<v-typography class="headline text-center">Conditions générales</v-typography>
</v-row>
</v-container>
<v-row class="fluid d-flex justify-center" style="margin-bottom: 25px; margin-top: 25px;">
<v-col cols="auto">
<router-link :to="{ name: 'home' }">
<v-btn flat style="background-color: #f4f4f4;">
<v-icon left style="margin-right: 10px;">mdi-home</v-icon> Accueil
</v-btn>
</router-link>
</v-col>
</v-row>
<v-container style="z-index: 100; position: relative;">
<v-row justify="center" align="center">
<v-spacer></v-spacer>
<v-col cols="7">
<p style="font-weight: 600; font-size: 2rem; margin-bottom: 25px;">
Conditions Générales d'Utilisation dHutopy
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Bienvenue sur Hutopy
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
En accédant à la plateforme Hutopy et en l'utilisant, vous acceptez de vous conformer aux
conditions générales d'utilisation suivantes, qui sont conçues pour assurer une expérience
sûre, respectueuse et positive pour tous les utilisateurs. Ces conditions s'appliquent à
tous les visiteurs, utilisateurs et autres personnes qui accèdent ou utilisent le
service.
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Utilisation Acceptable
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
1. Contenu : Vous vous engagez à ne pas publier de contenu illégal, diffamatoire,
abusif, pornographique, haineux, raciste ou de toute autre nature susceptible de causer
du tort. Tout contenu publié reste sous votre responsabilité.
<br>
<br>
2. Comportement : Tout comportement visant à nuire à d'autres utilisateurs, à la
plateforme ou à ses opérations est strictement interdit. Cela inclut le piratage, la
diffusion de logiciels malveillants et les tentatives d'hameçonnage.
<br>
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Droits de Propriété Intellectuelle
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Le contenu publié sur Hutopy par les utilisateurs reste la propriété de leurs créateurs
respectifs. En publiant du contenu sur Hutopy, vous accordez à la plateforme une licence non
exclusive, transférable, libre de droits et mondiale pour utiliser, reproduire, modifier,
publier, traduire et distribuer ce contenu dans tout média.
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Confidentialité
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
La protection de vos données personnelles est de la plus haute importance pour Hutopy. Votre
information est collectée et utilisée conformément à notre politique de confidentialité.
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Limitation de Responsabilité
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Hutopy et ses affiliés ne seront pas responsables des dommages indirects, accidentels,
spéciaux, consécutifs ou punitifs, y compris sans limitation, la perte de profits, de
données ou d'usage, que ce soit dans une action contractuelle, délictuelle y compris la
négligence ou autre, découlant de ou en relation avec l'accès ou l'utilisation de la
plateforme Hutopy.
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Clause de Non-Poursuite
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
En acceptant ces conditions générales d'utilisation, vous convenez qu'en aucun cas Hutopy,
ses dirigeants, employés, partenaires, agents, fournisseurs ou affiliés ne pourront être
tenus responsables de dommages directs, indirects, accidentels, spéciaux, consécutifs ou
exemplaires résultant de votre utilisation de la plateforme Hutopy. Par conséquent, vous
renoncez expressément à tout droit de poursuivre Hutopy et ses affiliés pour toute
réclamation liée à votre utilisation de la plateforme.
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Gestion du Contenu Inapproprié et Sanctions Financières
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Hutopy s'engage à maintenir un environnement sûr et respectueux pour tous ses utilisateurs.
Ainsi, tout contenu publié sur la plateforme est sujet à une évaluation de conformité avec
nos directives et nos standards éthiques. Dans l'éventualité où le contenu d'un utilisateur
est jugé inapproprié, offensant ou en violation avec nos Acceptation des Conditions<br>
<br>
Votre accès et votre utilisation continue de la plateforme Hutopy constituent votre
acceptation des présentes conditions générales et de toutes les modifications futures. Il
est de votre responsabilité de vous tenir informé des mises à jour de ces conditions. <br>
<br>
Nous vous encourageons à utiliser Hutopy de manière responsable et conforme à nos
directives, afin de contribuer à une communauté positive et enrichissante pour tous.
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Modifications des Conditions
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Hutopy se réserve le droit de modifier ou de remplacer ces conditions à tout moment. Il est
de votre responsabilité de revoir régulièrement ces conditions pour vous tenir informé des
mises à jour.
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Résiliation
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Hutopy peut résilier ou suspendre votre accès à la plateforme immédiatement, sans préavis ni
responsabilité, pour quelque raison que ce soit, y compris, sans limitation, si vous violez
les conditions.
</p>
<p style="margin-top: 25px; margin-bottom: 25px; font-weight: 600; font-size: 1.3rem;">
Loi Applicable
</p>
<p style="margin-top: 25px; margin-bottom: 25px;">
Ces conditions seront régies et interprétées conformément aux lois du pays/juridiction
est basée la plateforme, sans égard à ses conflits de dispositions légales.
</p>
</v-col>
<v-spacer></v-spacer>
</v-row>
</v-container>
</div>
<FooterLayout></FooterLayout>
</body>
</template>
<script setup>
import DefaultLayout from '@/layouts/DefaultLayout.vue';
import FooterLayout from '@/layouts/FooterLayout.vue';
</script>
<style>
.header-text-size {
font-size: 4rem;
}
</style>