Coder Social home page Coder Social logo

impactco2's Introduction

Impact CO₂

Application web sous Next.js permettant de comparer la consommation en CO₂e de divers équivalents.

https://impactco2.fr

Installation 💾

yarn pour installer l'application

yarn dev pour lancer un serveur de développement sur http://localhost:3000

yarn build pour build l'application

yarn start pour lancer un serveur de production

Déploiement 🚀

Le site est hébergé sur Scalingo via des serveurs en France. Aucune donnée ne transite en dehors de l’UE.

Développement ⚙️

  • yarn dev lance le serveur web local

  • yarn testa:local lance les tests de l'API en continu (avec Jest)

  • yarn testu:local lance les tests unitaires en continu (avec Jest)

  • yarn teste:local lance les tests de bout en bout ("end-to-end") en continu (avec Playwright)

Lors du premier lancement des tests end-to-end, une installation de Playwright peut être demandée.

Les tests end-to-end nécessitent que le serveur web local soit lancé.

Variable d'environnement

Il vous faut un fichier .env dont les valeurs sont documentées dans .env.dist

Couverture de test

Vous pouvez calculer la couverture de test sur votre machine locale.

Si vous n'avez jamais lancé de tests e2e avant, vous devrez installez Playwright en local avec yarn install playwright.

Assurez-vous d'avoir les bonnes variables d'environnement dans le fichier .env, puis installez les dépendances avec la commande yarn, puis lancez le serveur local avec yarn dev.

Ouvrez un autre terminal et lancez les commandes suivantes dans l'ordre :

1 - yarn cov:clean : Supprime le répertoire "coverage" pour partir d'un état propre. 2 - yarn cov:pw : Lance les tests Playwright avec la couverture. Le répertoire "coverage" est alors créé, et contient des fichiers de couverture au format JSON. 3 - yarn cov:jest : Lance les tests Jest, couverture incluse. Le répertoire "coverage" s'enrichit du fichier de couverture des tests Jest, au format JSON. 4 - yarn cov:report : Merge tous les rapports JSON précédents, calcule la couverture finale, et créé un rapport facilement lisible. Le répertoire coverage/summary est alors créé, le fichier index.html contenant le rapport final. 5 - yarn cov:show : Affiche dans votre navigateur le rapport de couverture final (sous coverage/summary/index.html)

La commande yarn cov:full permet de réaliser toutes les étapes de 1 à 5 en une seule fois.

Workflow Git ⚙️

L’organisation du développement suit le workflow Gitflow :

  • La branche de production est main. Seule develop peut être mergée directement dans main.
  • Les hotfix, comme les features (ou tout autre type de fonctionnalité) sont créés sur des branches dédiées issues de develop.
  • Une fois que le code est revu par un pair, et la fonctionnalité recettée par le métier depuis la review app dédiée, il est possible de merger la branche dans develop.
  • La branche du travail validé et recetté est donc develop. Elle possède sa propre review app. Elle est visible ici.
  • Chaque mise en production consiste à merger develop dans main.

Les commits sont conventionnés. Les types suivants sont acceptés :

  • build
  • docs
  • feat
  • fix
  • perf
  • refactor
  • style
  • test
  • chore

Connexion à Agribalyse

Parfois les données sont extraites par API.

Parfois les données sont codées en dur.

Il y a un cas de figure entre les deux : un fichier batch se connecte à une API et modifie un fichier .json (qui sera considéré comme "en dur" par l'appli une fois lancée). C'est le cas d'Agribalyse.

Pour mettre à jour ce fichier,

  • lancer yarn build:fruit pour les fruits et légumes,
  • lancer yarn build:boisson pour les boissons.

Architecture 🏛️

Le projet utilise React avec (entre autre) Nextjs et React Query. Le state est simplement géré par Context.

Le repo est architecturé avec les dossiers suivants :

  • pages avec l'ensemble des pages du site.
  • testu contient les tests unitaires (au sens strict, c'est-à-dire les tests d'une fonction)
  • testa contient les tests de l'API (toutes les fonction sous le répertoire /api)
  • testc contient les tests de composants front
  • teste contient les tests end-to-end
  • src avec tout le reste du code.
    • components avec l'ensemble des composants
      • base avec les composants simple réutilisés partout (un peu comme les atomes pour l'atomic design)
      • charts avec les différents graphique utilisés sur le site
      • layout avec les composants de structure globale (header, footer, etc.)
      • misc avec les composants qui ne rentrent pas dans les autres dossier
      • modals avec les différentes modals utilisées sur le site (elles sont déclaré sur le site site via leur provider)
      • providers (qui pourrait être renommé context) avec les contexts et leur provider (dans le même fichier, ce sont les seuls composants qui ont deux exports)
      • screenshot avec tous les composants spécifiques à la prise de screenshots (boutons, signature, etc.)
      • views avec les composants spécifiques à une page
      • [categorie] certains dossiers portent le nom d’une catégorie. Ils contiennent tous l’affichage et la logique spécifique à cette catégorie (et ses équivalents). Ce qui inclue composants et context/provider. Seules les modals restent centralisées dans le dossier modals
    • data avec l'ensemble des données locales importées au build
    • hooks avec ...les hooks
    • utils avec quelques fonctions et les bases du css

Les composants (en dehors des providers et des modals) sont regroupés par feature. Chaque composant enfant est dans un dossier du nom du composant parent, à la racine du composant parent. Si un enfant à plusieurs parents, il migre dans le dossier misc. Si un groupe de composants dans le dossier misc devient suffisamment important pour mériter son propre dossier, il migre à la racine du dossier components, dans un dossier au nom approprié.

Chaque fichier de composant (sauf les providers) n'a qu'un seul export : le composant. L'intérieur de ce fichier est structuré comme suit :

  • Import de librairie externes (React, Styled Components, etc.)
  • Import de librairie interne (d'autres composants que l'on a créé)
  • Déclaration et export du composant

Les fonctions appelées dans le jsx ne sont pas nommées, afin de simplifier la lecture. On essaie de maintenir les fichiers de composants bien en dessous de 100 lignes

Les iframes

Le contenu peut être intégré par nos utilisateurs directement dans leur propre site web grâce aux iframes.

Le contenu des iframes est disponible dans le code dans le répertoire pages/iframes.

Ce contenu est donc disponible en ligne à l'URL /iframes/... comme par exemple l'habillement ou la livraison.

Mais ces pages ne sont pas faites pour être lues "telles quelles" dans notre site, mais pour être intégrées dans un autre site.

Ces pages deviennent disponibles à nos utilisateurs grâce à un script qui construit une iframe et l'insère dans le DOM de leur site web.

le script est generé via :

  • iframe/index.js

Ce script est minifié, renommé et placé dans le répertoire /public à chaque build du projet NextJS, grâce au fichier webpack.config.js. Ainsi,

  • iframe/index.js devient accessible publiquement sous l'URL /iframe.js,

Les utilisateurs qui veulent cette iframe dans leur projet n'ont plus qu'à copier/coller le code suivant dans la page web de leur choix (exemple pour la livraison) :

<script
  name="impact-co2"
  src="https://impactco2.fr/iframe.js"
  data-type="livraison"
  data-search="?theme=default"></script>

Les attributs "data" permettant de paramétrer cette iframe.

API

Une API du site est actuellement disponible, sa documentation publique est en cours de construction.

Toutefois, pour les développeurs, afin de comprendre son utilisation et les retours attendus, le répertoire testa regroupe les tests automatisés concernant l'API uniquement.

impactco2's People

Contributors

antoineaugusti avatar bdavidxyz avatar clem-mrtn avatar clemog avatar desoindx avatar emilerolley avatar florianpanchout avatar legau avatar lsagetlethias avatar martinregner avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

impactco2's Issues

Comparaison par rapport à 2 tonnes

Plus j'essaie des choses pour la v2, moins je suis convaincu par l'idée de lier les valeurs aux 2 tonnes dans ce simulateur.

Si l'on reprend la comparaison de Maël avec le budget d'un foyer, c'est l'équivalent de dire aux gens :

Dans 28 ans, il faudra que tu utilises 2000€ max par mois pour vivre. Ce qui représente 956.9 Twix, 772.2 éponges ou 1550.4 kg de pâtes.

La notion de budget est importante, comme la notion de prix. Mais je doute de l'impact si on les présente comme ça.

Pour continuer dans la comparaison, j'ai l'impression que quand je vais faire mes courses alimentaires, je n'ai pas mon salaire en tête (et encore moins celui que j'aurai dans 28 ans), mais soit mon budget spécifique à l'alimentation, soit une vague idée de s'il faut que je fasse attention ou non.

Si je veux calculer ce budget spécifique à l'alimentation, c'est la que mon salaire m'est utile. C'est la que je dois voir dans quoi il part, et pouvoir ajuster si besoin. Mais pour moi ça c'est le rôle de NGC, pas MCC.

Si je pars du principe que je dois faire attention, je vais essayer de choisir pour chaque catégorie indispensable le moins cher, et me passer des catégories couteuses et dispensables. Je suis aidé pour ça par les prix affichés sur les produits qui me permet de les comparer les uns aux autres.

C'est à mes yeux le but de MCC : afficher la valeur des choses, pour aider les gens à faire leur choix. Comme un comparateur de prix aiderait à faire le meilleur achat. C'est une mission limitée qui ne répond pas à toutes les problématiques, mais je pense qu'elle a son utilité et qu'elle est complémentaire de Nos Gestes Climat.

8 tonnes à perdre et pas 10

Avec la màj des chiffres du CGDD, on est désormais à 10 tonnes par personnes et plus 12

Il faudrait donc remplacer le :

10 TONNES À PERDRE
Aujourd'hui, un français émet en moyenne 12 tonnes de CO2e

...par :

8 TONNES À PERDRE
Aujourd'hui, un français émet en moyenne 10 tonnes de CO2e

Je te laisse faire pour pas casser les anim ;)

Emojis

Il s'avère que la liste des emojis disponibles est un peu légère quand on chercher des trucs tel que "Four encastrable", "Armoire", ou "Robot multifonction"...

Est ce qu'on réutilise des emojis plus random pour ceux qui n'existent pas ? Ou est ce qu'on enlève totalement les emojis ?

Retours figma

Retours de l'atelier MCCO2 du 10.02 :

  • Homepage / affichage de l'iframe : page produit + vignettes de comparaison d'autres catégories. Sélection aléatoire / Type carroussel pour avoir divers produits qui s'affichent
  • Rentrer dans le détail de la catégorie -comparaison avec objets de la même catégorie
  • Possibilité de comparer plusieurs catégories entre elles
  • Rajouter l'unité Kg de CO2e
  • Rajouter une entrée pour convertir des chiffres en objet tangible du quotidien (cibles : collectivité, comex etc. qui veulent traduire des chiffres.)
  • Pousser la page catégorie numérique comme " v1 du simulateur Mon Impact Numérique"
  • Mise en place d'une API

Questions :

  • Garde t-on initialement la page d'accueil avec toutes les catégories sous forme de vignette ?

Nom du calculateur

Calculateur C02 inversé => pas très parlant ?

  • mon équivalence C02
  • équivalenceC02
  • mon équivalence carbone
    -..............

Décrire et afficher les hypothèses

Pour les équivalents où un « recalcul » a été nécessaire, et qu’il ne s’agit pas directement de l’application d’un FE de la Base Carbone, il serait utile d’expliciter le calcul (ou a minima les hypothèses pour que les utilisateurs s’y retrouvent).
C'est le cas par ex. pour « jour de chauffage » , « feuille de papier », ...

Serait-il possible d'avoir un texte visible au clic / au survol sur la case en question sur le calculateur ?

Retour utilisateur

J'ai testé rapidement le site avec un collègue. Il me dit :

je sais pas à quoi ça me servira. 1000kg de CO2e, je ne sais pas à quoi ça correspond, donc je sais pas interprêter le message du site. Moi c'est 12 tonnes ma conso en tant que français, et il faut descendre à 2t, c'est ça non ? Eh bien il faut comparer la saisie du site avec ce point d'ancrage."

Définition CO2e

Pour moi il faudrait rajouter la définition du C02e directement sur le simulateur (Même si aujourd'hui on redirige l'utilisateur sur la définition du C02e du Gitbook) :
ex: CO2e*
* définition

=> plus pédagogue (c'est le but du simulateur) / on perd moins l'utilisateur ?

chiffre avion

On utilise le facteur sans traînées, ce qui n'est pas cohérent avec MIC et NGC.

Retour utilisateur, suite à de nombreuses fresques du climat.

@fjg

Séparateur de millier pour les chiffres

Ex. sur l’écran d’accueil des 2000 kgCO2e, on a : 1156069 kms de TGV.
Ce serait plus facile à lire si on avait 1 156 069 kms de TGV ... si possible facilement 😄

Refonte graphique

  • Le choix des couleurs
  • Inversion bloc / équivalence tonnes de CO2e
  • Les définitions du CO2e : trop complexe, surtout l’exemple
  • Remplir directement dans les cases les ordres de grandeur (surtout sur ordinateur) => peu intuitif
  • En cliquant sur le (?) s’attend à avoir le FE unitaire
  • Textes trop long et pas toujours clair
    - 2 tonnes : « dommage de devoir scroller pour comprendre »
    - 8 tonnes à perdre : « je croyais que c’était la somme de toutes les tuiles »
  • La pomme comme émoji pour le repas végé est confusant (kg de pommes)
  • Le clic sur « notre configurateur » dans « comment intégrer… » ne remonte pas au configurateur

Mettre + en évidence la fonctionnalité "inversée"

Des retours utilisateurs (même aguerris) montrent qu'il n'apparait pas intuitif de modifier la valeur dans une carte pour que tout se recalcule autour.
(des stats sur le sujet ? :))

Sans doute déjà que laisser le cadre (pas seulement au survol) pourrait souligner la fonctionnalité ? autre idée ?

Créer des liens entre nos simulateurs : NGC & ICO2

Créer plus de ponts entre nos différents simulateurs pour qu'il y ait une logique de simulation
Ce ticket pour commencer à réfléchir comment on pourrait construire cette logique de dépendance

=> Valoriser davantage "mon convertisseur CO2" sur MIT pour donner du sens aux données et au Kg/CO2/transport

Bug affichage sur safari

  • Sur la zone de saisie du montant en kgCO2
  • Sur la bulle info : les chiffres des cases objets se mettent par dessus la bulle
  • Sur iPad : ne s'affiche pas du tout ; le site appairait 1 seconde puis l'écran devient intégralement blanc

Capture d’écran 2021-02-06 à 10 17 13

Retour test utilisateur

Sur iPhone

  • pas possible de mettre à 0 les cases
  • nombres à 6 chiffres coupés à droite
  • bug affichage, cf #27

Ajouter des usages numérique

Retour LinkedIn

Quand disponible dans la Base Carbone, ajouter des "usages numériques en particulier le visionnage de vidéos en streaming".

Infographies

(suite de #53)

Je suis un peu perplexe de cet écran...
Afficher des emojis pour mieux illustrer les équivalences et avoir quelque chose de plus visuel je trouve ça bien mais je trouve le message pas très clair avec les voitures

Est ce que cet écran ne pourrait pas être juste des équivalences "toutes faites" ? Ce ne serait plus un simulateur interactif mais une liste d'infographie. Ça nous permettrait d'avoir un bien meilleur contrôle de la pertinence de ce que l'on affiche et d'en rajouter au fur et à mesure.

Dans tous les cas, je propose en attendant de mettre l'écran "Catégories" par défaut à la place de celui ci.

Wording

J'ai beaucoup de mal à trouver des noms pertinents pour les catégories ("Équivalents", "Catégories" et "Poids") et pour les CTA ("Voir le détail").

Si vous avez mieux, je suis preneur

Affichage cartes - Catégories

Dans la partie des équivalences on a beaucoup beaucoup de petites cartes : est-ce qu'on ne ferait pas comme ce qui existe déjà aujourd'hui dans la version actuelle : on mettrait un "+" pour rajouter des objets ?

Impact Numérique

Lancement de la campagne : 11 janvier

Produit :

  • S'agissant d'un simulateur numérique, ajouter les comparaisons sur la fabrication des smartphone / ordi / télé au même niveau que les usages
  • modifier les cases usages pour inclure des données d'usages : elles seraient pré-remplies avec les moyennes annuelles ou sur la vie d'un équipement façon MCC (hypothèse en attente) et pourraient être modifiées par l'utilisateur : ex. 256 mails, 129h de streaming ...
  • Le fait de pré cocher un usage n'est pas forcément évident pour certains ; les cartes pourraient être triées par impact ?
  • Préciser que l'utilisation du terminal lui-même est inclus dans les chiffres
  • Ajouter :
    • Téléchargement/upload de fichier (en attente données)
    • Stockage de données dans le cloud (en attente données)
  • Wording
    • Streaming -> 1h de streaming (sauf si on peut faire varier le nombre d'heure)
    • Conférence -> 1h de conférence (sauf si on peut faire varier le nombre d'heure)
    • Préciser le poids de la PJ du mail 1Mo
    • emplacements --> participants

Données :
Toujours pas dispo… une réunion le 6/12 pour relancer

Équivalents par défaut (slider et tuiles)

Vous avez une idée des équivalents à afficher dans le slider et ceux à mettre par défaut dans la liste de tuiles ?

J'ai pris le parti de ne mettre que des objets dans le slider (plus simple à comprendre que les équivalents en km ou en litres), et à ne pas les afficher en dessous (pour que la liste de tuile reste fixe)

Retours Figma v2

  • Barre de recherche : quand on tape un objet qui n'est pas dans la base rien ne se passe. Peut-être permettre de cliquer sur "entrer" et afficher un message d'erreur
    Ex : Recherche ipad => "cet objet n'est pas dans la base. Retrouvez l'impact des objets de la catégories Numériques"
    Aussi l'auto-remplissage bug un peu
    Ex : Télévision - aux première lettres il m'affiche manteau, canapé textile etc.
    image

  • Emojis : Pour les objets dont on a pas forcément d'emoji adéquate, tenter de se rapprocher de la description
    Ex : Table en bois - est-ce qu'on a un emoji bois plutôt qu'un carton ?
    C'est un détail mais je me dis

  • Ce serait pas mal aussi de mettre un bouton "Partager" sur les infographies, pour permettre aux utilisateurs de ne partager que l'image sur les RS par ex

  • Quelques idées d'infographie supplémentaires qui pourraient être intéressantes :

  • Impact vêtement / consommation d'eau. Ex : un Jean équivaut à 53 bouteilles d'eau équivaut à une grosse goutte d'eau du robinet

  • Impact alcool / eau. Ex : 1 Litre de vin / bière équivaut à 3 litres d'eau bouteille équivaut à une grosse goutte d'eau du robinet

  • Impact poisson gras / poisson blanc / viandes (notamment pour aller dans le sens que de manger du saumon tous les jours pas ouf)

  • Et après on pourra en créer d'autres au fur et à mesure

  • Il faudrait remplacer la vignette de MCCO2 (je sais + si on parle de métatag ?) pour afficher la nouvelle version lors du partage sur les RS + nouveau texte (l'ancien texte n'est p-t + adapté)

  • Juste une réflexion que je me faisais : pour la catégorie "Déplacements" c'est vraiment Mon Impact Transport... On se retrouve un peu avec un doublon entre les deux simulateurs.
    Aussi dans cette version on ne prend toujours pas encore l'impact de la fabrication c'est ça ?

  • Partie Intégration : on parle de widget. Juste cohérence avec les autres sites ou ne parle que de "simulateurs" (à intégrer en iframe) ?

Changer wording

Mettre : "c’est autant d’émissions que pour fabriquer, consommer ou parcourir :"

Afin de prendre en compte l'affichage des distances

Changement titre

Le titre actuel ne représente pas le simulateur (on n'explique pas comment perdre une tonne de CO2).

Changer pour un wording plus adapté :

"Une tonne de CO2, ça représente quoi ?"

Barre de recherche

Suite de #60

Quand on tape un objet qui n'est pas dans la base rien ne se passe. Peut-être permettre de cliquer sur "entrer" et afficher un message d'erreur
Ex : Recherche ipad => "cet objet n'est pas dans la base. Retrouvez l'impact des objets de la catégories Numériques"
Aussi l'auto-remplissage bug un peu
Ex : Télévision - aux première lettres il m'affiche manteau, canapé textile etc.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.