diff --git a/assets/css/_bootstrap.scss b/assets/css/_bootstrap.scss
index 80d81238936104d4cc74b54e71ce4a49d572df85..fdfe56ef9f29a1a642142d0c25d1b4c59c4b4830 100644
--- a/assets/css/_bootstrap.scss
+++ b/assets/css/_bootstrap.scss
@@ -23,7 +23,7 @@
 //  @import "~bootstrap/scss/pagination";
  @import "~bootstrap/scss/badge";
 //  @import "~bootstrap/scss/jumbotron";
-//  @import "~bootstrap/scss/alert";
+ @import "~bootstrap/scss/alert";
 //  @import "~bootstrap/scss/progress";
 //  @import "~bootstrap/scss/media";
  @import "~bootstrap/scss/list-group";
diff --git a/layouts/default.vue b/layouts/default.vue
index e4697c1341ac39b59c7f48d32eb57391cf3e3dee..c8745e74cc58366ea35348056a091c6788b5fba4 100644
--- a/layouts/default.vue
+++ b/layouts/default.vue
@@ -14,6 +14,7 @@ export default {
           {
             title: 'Toile de confiance',
             items : [
+              {path: '/previsions',title: 'Prévisions'},
               {path: '/inout',title: 'Entrées et sorties'},
               {path: '/membres',title: 'Membres'}
           ]},
diff --git a/pages/inout.vue b/pages/inout.vue
index 63ed00b0eed18fc99c5ac42c23aa14c9a818a1a9..30f284838259f76bdfad9802e75e46d78a62d80c 100644
--- a/pages/inout.vue
+++ b/pages/inout.vue
@@ -2,12 +2,10 @@
 <main class="container">
   <h2 class="text-center mb-5 font-weight-light">Entrées et sorties de la toile de confiance des 2 derniers jours</h2>
   <NavigationLoader :isLoading="$apollo.queries.newMembers.loading" class="d-block mx-auto" />
-  <div class="row text-center" v-if="!$apollo.queries.newMembers.loading">
+  <div class="row text-center" v-if="!$apollo.queries.newMembers.loading && newMembers">
     <div class="col-lg-6">
-      <div>
-        <h2 class="h4 text-success">Bienvenue à</h2>
-        <MemberList :members="newMembers['entrees']" :displayPubkey="false" :displayHead="false" />
-      </div>
+      <h2 class="h4 text-success">Bienvenue à</h2>
+      <MemberList :members="newMembers['entrees']" :displayPubkey="false" :displayHead="false" />
     </div>
     <div class="col-lg-6">
       <h2 class="h4 text-danger">Au revoir à</h2>
diff --git a/pages/membres/index.vue b/pages/membres/index.vue
index 8b544c7122d3bb8a853eec788d1c61f726e6b469..937b2e25237f524a6032e97e025faebf373aee43 100644
--- a/pages/membres/index.vue
+++ b/pages/membres/index.vue
@@ -1,6 +1,6 @@
 <template>
 <main class="content">
-  <h2 class="display-2 text-center mb-5">Membres</h2>
+  <h2 class="text-center mb-5 font-weight-light">Membres</h2>
   <div class="row mb-4">
     <div class="col-6 m-auto text-center">
       <label for="rech" class="form-label">Votre recherche</label>
diff --git a/pages/previsions.vue b/pages/previsions.vue
new file mode 100644
index 0000000000000000000000000000000000000000..ec417fde1e3b257cfd1cfd1efdfc987199873843
--- /dev/null
+++ b/pages/previsions.vue
@@ -0,0 +1,189 @@
+<template>
+<main class="container">
+  <NavigationLoader :isLoading="$apollo.queries.wwResult.loading" class="d-block mx-auto" />
+  <div v-if="!$apollo.queries.wwResult.loading">
+    <h2 class="text-center mb-5 font-weight-light">Prévisions <small><span class="badge badge-secondary">{{ wwResult.dossiers_nb }} dossiers en attente</span></small></h2>
+    <div class="alert alert-info" role="alert">
+      <ul class="list-unstyled m-0">
+        <li>{{ wwResult.certifs_nb }} certifications internes</li>
+        <li>{{ wwResult.permutations_nb }} permutations</li>
+      </ul>
+    </div>
+    <div class="row mb-4">
+      <div class="col">
+        <div class="form-check form-check-inline">
+          <input class="form-check-input" type="radio" id="forecastsByNames" value="forecastsByNames" checked v-model="display">
+          <label class="form-check-label" for="forecastsByNames">
+            Tri par membres
+          </label>
+        </div>
+        <div class="form-check form-check-inline">
+          <input class="form-check-input" type="radio" id="forecastsByDates" value="forecastsByDates" v-model="display">
+          <label class="form-check-label" for="forecastsByDates">
+            Tri par dates
+          </label>
+        </div>
+      </div>
+    </div>
+    <div class="row">
+      <div class="col-lg-6">
+        <div v-if="display=='forecastsByNames'">
+          <h3>Prévisions par membres</h3>
+          <div class="table-responsive">
+            <table class="table previsions">
+              <tbody>
+                <tr v-for="forecast in wwResult.forecastsByNames" :key="forecast.member.uid">
+                  <th scope="row">{{ forecast.member.uid }}</th>
+                  <td class="p-0">
+                    <table class="table table-borderless mb-0">
+                      <tr class="d-flex justify-content-between" v-for="date in forecast.forecasts" :key="date.date">
+                        <td>{{ date.date | formatDateHeure }}</td>
+                        <td>{{ date.proba * 100 }} %</td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </tbody>
+            </table>
+          </div>
+        </div>
+        <div v-if="display=='forecastsByDates'">
+          <h3>Prévisions par dates</h3>
+          <div class="table-responsive">
+            <table class="table previsions">
+              <tbody>
+                <tr v-for="forecast in wwResult.forecastsByDates" :key="forecast.date">
+                  <th scope="row">{{ forecast.date | formatDateHeure }}</th>
+                  <td class="p-0">
+                    <table class="table table-borderless mb-0">
+                      <tr class="d-flex justify-content-between" v-for="member in forecast.forecasts" :key="member.member.uid">
+                        <td>{{ member.member.uid }}</td>
+                        <td>{{ member.proba * 100 }} %</td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </tbody>
+            </table>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</main>
+</template>
+
+<script>
+import gql from 'graphql-tag'
+
+export default {
+  data() {
+    // Variables locales
+    return {
+      // Fil d'ariane
+      breadcrumb: [
+        {
+          text: 'Accueil',
+          to: '/'
+        },
+        {
+          text: 'Prévisions',
+          active: true
+        }
+      ],
+      display: 'forecastsByNames'
+    }
+  },
+  // Fonctions locales
+  methods: {
+
+  },
+  apollo: {
+    wwResult : {
+      query: gql`query {
+        wwResult {
+          permutations_nb
+          dossiers_nb
+          certifs_nb
+          forecastsByNames {
+            id {
+              pubkey
+              uid
+              status
+              hash
+              limitDate
+              received_certifications {
+                limit
+              }
+            }
+            date
+            after
+            proba
+          }
+        }
+      } `,
+      update (data) {
+        console.log(data)
+        let result = {'byName':[],'byDate':[]}
+        let forecasts = data.wwResult.forecastsByNames
+
+        for (let i = 0; i < forecasts.length; i++) {
+          let member = forecasts[i].id
+
+          // On traite les forecasts par nom
+          if (result['byName'].filter(function(e) { return e.member && e.member.uid === member.uid; }).length == 0) {
+            result['byName'].push({
+              member: member,
+              forecasts: [{
+                date: forecasts[i].date,
+                after: forecasts[i].after,
+                proba: forecasts[i].proba
+              }]
+            })
+          } else {
+            result['byName'].filter(function(e) { return e.member && e.member.uid === member.uid; })[0].forecasts.push({
+              date: forecasts[i].date,
+              after: forecasts[i].after,
+              proba: forecasts[i].proba
+            })
+          }
+
+          // On traite les forecasts par date
+          if (result['byDate'].filter(function(e) { return e.date === forecasts[i].date }).length == 0) {
+            result['byDate'].push({
+              date: forecasts[i].date,
+              forecasts: [{
+                member: member,
+                after: forecasts[i].after,
+                proba: forecasts[i].proba
+              }]
+            })
+          } else {
+            result['byDate'].filter(function(e) { return e.date === forecasts[i].date })[0].forecasts.push({
+              member: member,
+              after: forecasts[i].after,
+              proba: forecasts[i].proba
+            })
+          }
+        }
+
+        // On tri les résultats pour être sûr
+        // result['byName'].sort((a, b) => (a.member.uid.toLowerCase() > b.member.uid.toLowerCase()) ? 1 : -1)
+        // result['byDate'].sort((a, b) => (a.date > b.date) ? 1 : -1)
+
+        return {
+          permutations_nb: data.wwResult.permutations_nb,
+          dossiers_nb: data.wwResult.dossiers_nb,
+          certifs_nb: data.wwResult.certifs_nb,
+          forecastsByNames: result['byName'],
+          forecastsByDates: result['byDate']
+        }
+      }
+    }
+  },
+  mounted () {
+    // Mise à jour du fil d'ariane au chargement
+    $nuxt.$emit('changeRoute',this.breadcrumb)
+  }
+}
+</script>
\ No newline at end of file
diff --git a/plugins/filters.js b/plugins/filters.js
index e6b2487883eaeb7863d810cb44c213fd92b14f39..e586ee3b1074b848950e3757961d3516148b97a5 100644
--- a/plugins/filters.js
+++ b/plugins/filters.js
@@ -8,6 +8,10 @@ Vue.filter('formatDate', (val) => {
     return dayjs(val*1000).format('D MMMM YYYY')
 })
 
+Vue.filter('formatDateHeure', (val) => {
+    return dayjs(val*1000).format('D MMMM YYYY [à] H[h]')
+})
+
 Vue.filter('dateStatus', (val) => {
     const diff = val - dayjs().unix()
     switch (true) {