commit b5136b819adb84514dfa15023a988b37281b8969 Author: julien Date: Tue Jan 14 17:57:40 2025 +0100 first commit diff --git a/.env b/.env new file mode 100644 index 0000000..ee666e7 --- /dev/null +++ b/.env @@ -0,0 +1,4 @@ +ALLOW_ORIGIN=netig.net +#DSN= +RECIPIENT=contact@netig.net +SENDER=contact@netig.net diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..290dfb7 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,9 @@ +FROM ghcr.io/getzola/zola:v0.19.2 AS zola + +COPY ./src /project +WORKDIR /project +RUN ["zola", "build"] + +FROM ghcr.io/static-web-server/static-web-server:2 +WORKDIR / +COPY --from=zola /project/public /public diff --git a/README.md b/README.md new file mode 100755 index 0000000..f7f4698 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# netig.net diff --git a/compose.yml b/compose.yml new file mode 100644 index 0000000..ad72dbb --- /dev/null +++ b/compose.yml @@ -0,0 +1,27 @@ +services: + post-to-email: + image: matthiasmullie/post-to-email + container_name: p2enetignet_post-to-email + networks: + - mailserver + env_file: + - .env + - ../passwords/p2enetignet.pass + ports: + - "127.0.0.1:9007:80" + healthcheck: + test: 'curl --fail http://localhost:80/?SENDER=test@example.com' + interval: 1m + timeout: 10s + retries: 3 + start_period: 20s + restart: unless-stopped + zola: + build: . + container_name: netignet_zola + ports: + - "127.0.0.1:8000:80" + restart: unless-stopped +networks: + mailserver: + external: true diff --git a/src/config.toml b/src/config.toml new file mode 100644 index 0000000..1cf89d7 --- /dev/null +++ b/src/config.toml @@ -0,0 +1,16 @@ +# The URL the site will be built for +base_url = "https://netig.net" + +# Whether to automatically compile all Sass files in the sass directory +compile_sass = true + +# Whether to build a search index to be used later on by a JavaScript library +build_search_index = false + +[markdown] +# Whether to do syntax highlighting +# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola +highlight_code = false + +[extra] +# Put all your custom variables here diff --git a/src/content/contact.md b/src/content/contact.md new file mode 100644 index 0000000..fb2fd4b --- /dev/null +++ b/src/content/contact.md @@ -0,0 +1,4 @@ ++++ +title = "Contact" +template = "contact.html" ++++ diff --git a/src/content/legal.md b/src/content/legal.md new file mode 100644 index 0000000..2f74aa2 --- /dev/null +++ b/src/content/legal.md @@ -0,0 +1,47 @@ ++++ +title = "Mention légales" +template = "page.html" ++++ + +NETig
Julien Debrousse
Siren : 799 900 907 + +### Contact +Il est possible de prendre contact par courriel à : contact@netig.net. + +### Hébergement des données +Toutes les données collectées dans le cadre de la mise à disposition des services sont conservées exclusivement sur des serveurs gérés par moi chez HostUp en Suède et Hetzner en Allemagne. + +## Conditions Générales d’Utilisation +### Disponibilité +Malgré les efforts faits pour assurer la meilleure disponibilité possible, un accès permanent aux services n’est pas garanti. Vous pouvez consulter l’état des services en temps réel depuis un outil de surveillance mis à disposition. Vous pouvez aussi vous inscrire à la liste de diffusion de maintenance, afin d’être informé des interruptions de service. + +### Données personnelles +#### Responsabilité +Vous êtes responsables des contenus diffusés et êtes tenus de respecter la législation en vigueur. Le non respect des conditions d’utilisation ou des lois en vigueur peut entraîner une suppression de vos données et comptes. + +#### Confidentialité +Les données confiées ne seront en aucun cas divulguées ou utilisée dans un but autre que de fournir les services liés. + +#### Conservation +Les données personnelles sont conservées pour la durée de provision des services. Elles peuvent persister dans les sauvegardes quelques semaines après la clôture des services. + +#### Récupération +Vous pouvez à tout moment récupérer vos données personnelles, soit à l’aide d’une fonctionnalité intégrée à un service ou bien sur demande. + +#### Suppression +Vous pouvez à tout moment supprimer vos données personnelles, soit à l’aide d’une fonctionnalité intégrée à un service ou bien sur demande écrite. + +### Services en libre accès +Ces services sont accessibles à tous afin de proposer une alternative aux produits des GAFAM ou « Géants du web », respectueuse des données de chacun. Les ressources matérielles ne sont pas sans limites donc utilisez les avec bon sens, en cas d’abus et après un premier avertissement votre adresse IP pourra être bannie. + +### Hébergement et services +#### Souscription +Vous pouvez souscrire à tout moment à une offre pour une durée minimale d’un mois en prenant contact à : contact@netig.net. + +#### Paiement +Les paiements s’effectuent par virement bancaire. Les hébergements sont facturés mensuellement un mois après la mise à disposition du service. + +#### Suspension et Résiliation +Toute facture impayée de plus de deux mois pourra entraîner une suspension du service concerné. Toute facture impayée de plus de six mois pourra entraîner une suppression définitive des données. +Si vous souhaitez résilier un service en cours avant échéance, aucun remboursement ne sera fait mais à votre demande le service pourra être désactivé et les données supprimées. + diff --git a/src/content/maintenance.md b/src/content/maintenance.md new file mode 100644 index 0000000..8f5c2d6 --- /dev/null +++ b/src/content/maintenance.md @@ -0,0 +1,4 @@ ++++ +title = "Maintenance et incidents" +template = "maintenance.html" ++++ diff --git a/src/content/success.md b/src/content/success.md new file mode 100644 index 0000000..7b65526 --- /dev/null +++ b/src/content/success.md @@ -0,0 +1,4 @@ ++++ +title = "Success" +template = "success.html" ++++ diff --git a/src/sass/css/style.scss b/src/sass/css/style.scss new file mode 100644 index 0000000..020f7c4 --- /dev/null +++ b/src/sass/css/style.scss @@ -0,0 +1,565 @@ +/* Fonts + ------------------------------------------------------------------------ */ +@font-face { + font-family: 'TitilliumWeb'; + src: url('/fonts/TitilliumWeb-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'TitilliumWeb'; + src: url('/fonts/TitilliumWeb-Bold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; + font-display: swap; +} + +/* Reset + ------------------------------------------------------------------------ */ +body { + margin: 0px; +} + +/* Variables + ------------------------------------------------------------------------ */ + +$color__primary: #00c8be; +$color__secondary: rgb(15 25 50/var(--tw-bg-opacity, 1)); +$color__ternary: rgb(30 40 85/var(--tw-bg-opacity, 1)); +$color__neutral: #010101; +$color__white: #fff; +$cover__home: url(/images/background.webp); + +/* Layout + ------------------------------------------------------------------------ */ +body, +html { + font-family: TitilliumWeb, sans-serif; + font-size: 1.2rem; + color: $color__white; + scroll-behavior: smooth; +} + +main { + min-height: calc(100vh - 142.4px); +} + +article { + padding-bottom: 100px; +} + +.anchor { + height: 40px; +} + + +.content { + padding: 20px; +} + +/* Lists + ------------------------------------------------------------------------ */ + +li { + color: $color__white; +} + +/* Background + ------------------------------------------------------------------------ */ + +body { + background: $color__secondary; +} + +/* Links + ------------------------------------------------------------------------ */ + +a { + color: $color__primary; + text-decoration: none; + + &:hover { + color: $color__primary; + } +} + +/* Titles + ------------------------------------------------------------------------ */ +h1, +h2, +h3, +h4 { + font-family: 'TitilliumWeb', sans-serif; + font-weight: bold; + text-align: left; + color: $color__white; +} + +h1 { + font-size: 2.8rem; + line-height: 2.8rem; +} + +h2 { + font-size: 2.6rem; + line-height: 2.6rem; + margin-bottom: 100px; +} + +h3 { + font-size: 2rem; + line-height: 2rem; +} + +h4 { + font-size: 1.8rem; + line-height: 1.8rem; +} + +/* Animations + ------------------------------------------------------------------------ */ + +.from-left { + position: relative; + animation-name: from-left; + animation-duration: 1s; +} + +@keyframes from-left { + 0% { + left: -500px; + } + + 100% { + left: 0; + } +} + +.from-right { + position: relative; + animation-name: from-right; + animation-duration: 1s; +} + +@keyframes from-right { + 0% { + right: -500px; + } + + 100% { + right: 0; + } +} + +/* Topnav + ------------------------------------------------------------------------ */ + +.topbar { + text-align: left; + background: $color__ternary; + padding-left: 20px; + + a { + padding: 20px; + } +} + +/* Sidenav + ------------------------------------------------------------------------ */ +.menu_icon_sidenav { + z-index: 2; + width: fit-content; + height: auto; + background-color: #FC970B; + padding: 10px; + margin: 10px; + cursor: pointer; + position: fixed; + top: 0; + right: 0; + box-shadow: 0 0 10px $color__neutral; + border-radius: 100%; +} + +.line1, +.line2, +.line3 { + width: 40px; + height: 4px; + margin: 10px 8px; + background-color: $color__white; + border-radius: 50px; + transition: 0.2s; +} + +.active { + .line1 { + transform: translate(0px, 15px) rotate(45deg); + } + + .line2 { + opacity: 0; + } + + .line3 { + transform: translate(0px, -15px) rotate(-45deg); + } +} + +.sidenav { + width: fit-content; + background-color: $color__neutral; + position: fixed; + text-align: center; + z-index: 1; + right: -500px; + pointer-events: none; + transition: 0.3s; + top: 0; + box-shadow: 0 0 10px $color__neutral; + overflow: scroll; + + nav { + padding-top: 80px; + margin-right: 40px; + + ul li { + list-style: none; + margin-bottom: 20px; + transition: 0.2s; + + &:hover { + background-color: $color__secondary; + border-radius: 50px; + } + + a { + font-size: 1.2rem; + padding: 10px 30px; + display: block; + text-decoration: none; + text-align: center; + } + } + } +} + +.active_sidenav { + right: 0px; + pointer-events: fill; + position: fixed; + top: 0; + height: 100vh; + max-width: 100%; +} + + +/* Gaps + ------------------------------------------------------------------------ */ + +.gap__20 { + height: 20px; +} + +.gap__40 { + height: 40px; +} + +.gap__80 { + height: 80px; +} + +/* Boxes + ------------------------------------------------------------------------ */ + +.box { + display: flex; + margin-top: 80px; + padding: 20px; + padding-bottom: 40px; + border: 2px solid $color__white; + box-shadow: 0 0 5px rgba(255, 255, 255, .2), 0 4px 4px rgba(0, 0, 0, .08); + flex-direction: column; + justify-content: space-between; + + img { + max-width: 96px; + margin-left: auto; + margin-right: auto; + display: block; + } + + &__title { + width: fit-content; + padding: 10px; + margin-top: 0; + margin-bottom: 0; + background: $color__secondary; + border: 0px solid $color__white; + translate: 0px -55px; + text-align: left; + } + + &__link { + text-align: center; + padding: 20px; + display: flex; + flex-direction: column; + justify-content: center; + + @media screen and (min-width: 1080px) and (max-resolution: 1x) { + &:hover { + transform: scale(1.1); + transition: all .2s; + } + } + } +} + +/* Logo + ------------------------------------------------------------------------ */ + +.logo { + img { + width: 100%; + max-width: 500px; + + @media screen and (min-width: 1080px) and (max-resolution: 1x) { + &:hover { + transform: scale(1.02); + transition: all .4s; + } + } + } +} + +/* Header + ------------------------------------------------------------------------ */ + +header { + position: relative; + color: $color__white; + text-align: left; + + p { + font-size: 1.6rem; + } +} + +header::before { + content: ""; + position: absolute; + top: 0px; + right: 0px; + bottom: 0px; + left: 0px; + background: $color__ternary; + z-index: -1; +} + + + +header { + h1 { + text-align: left; + font-size: 4rem; + } +} + +/* Services + ------------------------------------------------------------------------ */ + +.article-services { + position: relative; + color: $color__white; + text-align: center; +} + +.article-services::before { + content: ""; + position: absolute; + top: 0px; + right: 0px; + bottom: 0px; + left: 0px; + background: $color__secondary; + z-index: -1; +} + +/* Footer + ------------------------------------------------------------------------ */ + +footer { + background-color: $color__neutral; + padding: 40px; + box-shadow: 0 0 20px $color__neutral; +} + +.botbar { + width: 100%; + display: flex; + font-size: 1rem; + justify-content: space-between; + flex-wrap: wrap; + text-align: center; + color: $color__white; + + p { + margin-left: auto; + margin-right: auto; + } +} + +/* About article + ------------------------------------------------------------------------ */ + +.article-about { + position: relative; + color: $color__white; + text-align: center; + + ::before { + content: ""; + position: absolute; + top: 0px; + right: 0px; + bottom: 0px; + left: 0px; + background: rgb(5 100 115/var(--tw-bg-opacity, 1)); + z-index: -1; + } + + h3 { + text-align: center; + } +} + +/* hosting article + ------------------------------------------------------------------------ */ + +.article-hosting { + position: relative; + color: $color__white; + text-align: left; + + ::before { + content: ""; + position: absolute; + top: 0px; + right: 0px; + bottom: 0px; + left: 0px; + background: $color__secondary; + z-index: -1; + } +} + +/* Contact + ------------------------------------------------------------------------ */ + +.contact-form { + margin-right: 20px; + font-size: 0.8rem; + font-weight: bold; + + input, + select, + textarea { + width: 100%; + font-size: 1rem; + padding: 10px; + border: 0; + flex: 1 1 auto; + margin: 10px 0; + } + + &>* { + display: flex; + font-family: TitilliumWeb, sans-serif; + } + + textarea { + min-height: 150px; + max-width: 100%; + box-shadow: 0 0 10px $color__neutral; + } +} + +input:focus, +textarea:focus { + outline: none; +} + +.submit { + width: calc(100% + 22px) !important; + color: $color__white; + background-color: $color__primary; + + &:hover { + cursor: pointer; + } +} + +svg { + display: flex; + align-items: center; + justify-content: left; + height: 64px; + width: auto; +} + +/* Success + ------------------------------------------------------------------------ */ + +.success { + padding: 20px; + background-color: #185833; +} + + +/* Responsive 1080px + ------------------------------------------------------------------------ */ + +@media screen and (min-width: 1080px) and (max-resolution: 1x) { + .col--1-1 { + display: grid; + gap: 40px; + grid-template-columns: 1fr 1fr; + align-items: normal; + } + + .col--1-2 { + display: grid; + gap: 40px; + grid-template-columns: 1fr 2fr; + align-items: normal; + } + + .col--1-1-1 { + display: grid; + gap: 40px; + grid-template-columns: 1fr 1fr 1fr; + align-items: normal; + } + + .col--1-1-2 { + display: grid; + gap: 40px; + grid-template-columns: 1fr 1fr 2fr; + align-items: normal; + } + +} + +/* Responsive 1200px + ------------------------------------------------------------------------ */ + +@media screen and (min-width: 1200px) and (max-resolution: 1x) { + .content { + width: 1200px; + margin-left: auto; + margin-right: auto; + } +} \ No newline at end of file diff --git a/src/static/fonts/TitilliumWeb-Bold.woff2 b/src/static/fonts/TitilliumWeb-Bold.woff2 new file mode 100644 index 0000000..c34f134 Binary files /dev/null and b/src/static/fonts/TitilliumWeb-Bold.woff2 differ diff --git a/src/static/fonts/TitilliumWeb-Regular.woff2 b/src/static/fonts/TitilliumWeb-Regular.woff2 new file mode 100644 index 0000000..82b27bc Binary files /dev/null and b/src/static/fonts/TitilliumWeb-Regular.woff2 differ diff --git a/src/static/images/calc.svg b/src/static/images/calc.svg new file mode 100644 index 0000000..778c192 --- /dev/null +++ b/src/static/images/calc.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/static/images/cloud.svg b/src/static/images/cloud.svg new file mode 100644 index 0000000..cf3db6a --- /dev/null +++ b/src/static/images/cloud.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/static/images/clouds.svg b/src/static/images/clouds.svg new file mode 100644 index 0000000..37a25e8 --- /dev/null +++ b/src/static/images/clouds.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/src/static/images/drop.svg b/src/static/images/drop.svg new file mode 100644 index 0000000..873e387 --- /dev/null +++ b/src/static/images/drop.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/static/images/favicon.webp b/src/static/images/favicon.webp new file mode 100644 index 0000000..008d47b Binary files /dev/null and b/src/static/images/favicon.webp differ diff --git a/src/static/images/git.svg b/src/static/images/git.svg new file mode 100644 index 0000000..4409b5a --- /dev/null +++ b/src/static/images/git.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/static/images/list.svg b/src/static/images/list.svg new file mode 100644 index 0000000..d4598c6 --- /dev/null +++ b/src/static/images/list.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/src/static/images/mail.svg b/src/static/images/mail.svg new file mode 100644 index 0000000..2e400bf --- /dev/null +++ b/src/static/images/mail.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/static/images/netmail.webp b/src/static/images/netmail.webp new file mode 100644 index 0000000..4823258 Binary files /dev/null and b/src/static/images/netmail.webp differ diff --git a/src/static/images/other.svg b/src/static/images/other.svg new file mode 100644 index 0000000..c7a5488 --- /dev/null +++ b/src/static/images/other.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/src/static/images/pad.svg b/src/static/images/pad.svg new file mode 100644 index 0000000..c0d79df --- /dev/null +++ b/src/static/images/pad.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/static/js/sidenav.js b/src/static/js/sidenav.js new file mode 100644 index 0000000..029bfc7 --- /dev/null +++ b/src/static/js/sidenav.js @@ -0,0 +1,14 @@ +let menu_icon_sidenav = document.querySelector(".menu_icon_sidenav"); +let sidenav = document.querySelector(".sidenav"); + +menu_icon_sidenav.onclick = function () { + menu_icon_sidenav.classList.toggle("active"); + sidenav.classList.toggle("active_sidenav"); +} + +document.onclick = function (e) { + if (!menu_icon_sidenav.contains(e.target) && !sidenav.contains(e.target)) { + menu_icon_sidenav.classList.remove("active"); + sidenav.classList.remove("active_sidenav"); + } +} diff --git a/src/templates/base.html b/src/templates/base.html new file mode 100644 index 0000000..8dbbc4c --- /dev/null +++ b/src/templates/base.html @@ -0,0 +1,81 @@ + + + + + + + + + NETig + + + + + + + +
+
+ NETmail + NETcloud + NETgit + +
+ + +
+
+ +
+
+

NETig

+

Vous cherchez des services en ligne mais vous ne souhaitez pas confier vos + données aux GAFAM ? Vous êtes au bon endroit !

+
+
+
+
+
+ {% block content %} {% endblock %} +
+
+ + + + \ No newline at end of file diff --git a/src/templates/contact.html b/src/templates/contact.html new file mode 100644 index 0000000..fb624cb --- /dev/null +++ b/src/templates/contact.html @@ -0,0 +1,27 @@ +{% extends "base.html" %} + +{% block content %} +
+

{{ page.title }}

+
+
+
+

Vous avez un projet en tête ? Un service vous intéresse ? Ou simplement une question ? Ce formulaire + est + là pour ça !

+
+
+ + + + + + + +
+
+
+
+{% endblock content %} \ No newline at end of file diff --git a/src/templates/index.html b/src/templates/index.html new file mode 100644 index 0000000..04c4ee0 --- /dev/null +++ b/src/templates/index.html @@ -0,0 +1,176 @@ +{% extends "base.html" %} + +{% block content %} + +
+
+ +
+ +
+
+
+
+

Quoi ?

+

Tous les outils numérique dont vous pouriez avoir besoin en tant que particulier, association ou petite + entreprise : des boîtes mail, du stockage en ligne, des outils de travail collaboratif, un service de + partage de fichiers volumineux, une forge logicielle, des listes de diffusion... et plus encore ! +

+
+
+

Comment ?

+

L'ensemble des services sont fournis depuis un VPS chez HostUp en Suède et conteneurisés, c'est à dire isolés les uns des autres + pour améliorer la sécurité, la reproductibilité et l'automatisation. Le stockage est redondant sur deux + disques en cas de défaillance matérielle. Les données sont sauvegardées automatiquement une fois par + semaine et stockées sur le serveur ainsi qu'en Allemagne chez Hetzner. Utilisation exclusive de logiciels sous licences libres.

+
+
+

Pourquoi ?

+

Je suis un petit hébergeur, en utilisant mes services vous gardez le contrôle sur vos données et + participez à un internet libre et décentralisé. Ici vos données ne seront en aucun cas marchandées ni + utilisées à toute autre fin que de fournir le service demandé. Je participe également à ma mesure à la + distribution Linux utilisée en mettant à disposition un mirroir.

+
+
+
+ +
+
+
+

Offres d'hébergement

+

Si un service vous intéresse contactez-moi, vous + avez un mois d'essai à compter de la mise à disposition avant le premier paiement.

+
+
+

NETmail - Adresse mail

+
+
+ +
+
+
    +
  • 2€/mois 5Go
  • +
+
+
+

Adresse mail en @netig.net ou votre nom de domaine (12€ de frais de mise en place + supplémentaire), consultable depuis un webmail ou depuis votre client mail habituel.

+
+
+
+
+

NETcloud - Compte Nextcloud

+
+
+ +
+
+
    +
  • 1€/mois 1Go
  • +
  • 2€/mois 5Go
  • +
  • 2€/mois + 5Go
  • +
  • 2€/mois option Collabora
  • +
+
+
+

Un compte Nextcloud pour stocker vos fichiers, photos, et agendas en ligne. Suite bureautique + complète en option avec Collabora.

+
+
+
+
+

NETcloud - Instance Nextcloud

+
+
+ +
+
+
    +
  • 20€/mois 5Go
  • +
  • 2€/mois + 5Go
  • +
  • 8€/mois option Collabora
  • +
+
+
+

Votre propre instance Nextcloud privée pour plusieurs comptes.

+
+
+
+
+

NETgit - Compte Gitea

+
+
+ +
+
+
    +
  • 2€/mois
  • +
+
+
+

Forge logicielle.

+
+
+ +
+
+

NETlist - Instance Listmonk

+
+
+ +
+
+
    +
  • 8€/mois
  • +
+
+
+

Listes de diffusion avec page d'inscription et d'archives publiques. Pas de limite sur le + nombre d’abonnés ni sur le nombre de listes. Possibilité d’utiliser une ou plusieurs + adresses mail d’expédition @netig.net ou tout autre fournisseur. Conforme RGPD. +

+
+
+
+
+

Autre

+
+
+ +
+
+
    +
  • Sur devis
  • +
+
+
+

Vous avez autre chose en tête ? Un site ou une application web à héberger ? Demandez-moi ! +

+
+
+
+
+
+
+ +{% endblock content %} \ No newline at end of file diff --git a/src/templates/maintenance.html b/src/templates/maintenance.html new file mode 100644 index 0000000..e20cb56 --- /dev/null +++ b/src/templates/maintenance.html @@ -0,0 +1,23 @@ +{% extends "base.html" %} + +{% block content %} +
+

{{ page.title }}

+ +
+{% endblock content %} \ No newline at end of file diff --git a/src/templates/page.html b/src/templates/page.html new file mode 100644 index 0000000..3676bcf --- /dev/null +++ b/src/templates/page.html @@ -0,0 +1,8 @@ +{% extends "base.html" %} + +{% block content %} +
+

{{ page.title }}

+ {{ page.content | safe }} +
+{% endblock content %} \ No newline at end of file diff --git a/src/templates/success.html b/src/templates/success.html new file mode 100644 index 0000000..c58ba2a --- /dev/null +++ b/src/templates/success.html @@ -0,0 +1,8 @@ +{% extends "base.html" %} + +{% block content %} +
+

Message envoyé, retourner à la page d'accueil !

+ +
+{% endblock content %} \ No newline at end of file