diff --git a/src/App.js b/src/App.js
index c6f620eca6bac1e4eb2901a54e885b654f21c2b3..d5887f2806641157e1ebbbd696a565f241ec7bca 100644
--- a/src/App.js
+++ b/src/App.js
@@ -11,15 +11,16 @@ class App extends React.Component {
     super(props);
     this.state = {
       fetchFailed: false,
-      suites: []
+      suites: [],
+      dashboard: null,
     };
   }
 
   render() {
-    const { fetchFailed, suites } = this.state;
+    const { fetchFailed, dashboard, suites } = this.state;
     return (
       <React.Fragment>
-        <Header fetchFailed={fetchFailed} suites={suites}/>
+        <Header fetchFailed={fetchFailed} dashboard={dashboard}/>
         <Body fetchFailed={fetchFailed} suites={suites}/>
       </React.Fragment>
     );
@@ -39,7 +40,26 @@ class App extends React.Component {
     }
   }
 
+  loadDashboard() {
+    const url = '/api/v0/dashboard';
+
+    fetch(url).then((response) => {
+      if (!response.ok) {
+        this.setState({fetchFailed: true});
+        throw new Error(response.statusText);
+      }
+      return response.json();
+    }).then((data) => {
+      this.setState({dashboard: data});
+    }).catch((error) => {
+      console.log(error);
+      this.setState({fetchFailed: true});
+    });
+  }
+
   componentDidMount() {
+    this.loadDashboard()
+
     const url = '/api/v0/pkgs/list';
 
     fetch(url).then((response) => {
@@ -76,3 +96,5 @@ class App extends React.Component {
 }
 
 module.exports = {App};
+
+// vim: ts=2 sw=2 et:
diff --git a/src/Header.js b/src/Header.js
index 233d86b6fdaa074e8aed81986c38377ff62151ba..9a52179bc61af6ee35b88390bb4b094e37ba4a8c 100644
--- a/src/Header.js
+++ b/src/Header.js
@@ -6,38 +6,46 @@ import ArchLinuxNavbar from './navbar';
 
 class Header extends React.Component {
   calculateSuiteStats(data) {
-    let good = 0;
-    let bad = 0;
-    let unknown = 0;
+    let good = data['good'];
+    let bad = data['bad'];
+    let unknown = data['unknown'];
 
-    for (let pkg of data) {
-      switch (pkg.status) {
-        case 'GOOD':
-          good++;
-          break
-        case 'BAD':
-          bad++;
-          break
-        case 'UNKWN':
-          unknown++;
-          break
-      }
-    }
-
-    const percentage = (good / data.length * 100).toFixed(1);
+    const percentage = (good / (good + bad + unknown) * 100).toFixed(1);
     return {good, bad, unknown, percentage};
   }
 
+  // TODO: this is duplciated code from App.js
+  compareSuites(a, b) {
+    if (a.name == 'core') {
+      return -1;
+    } else if (a.name == 'core' && b.name != 'core') {
+      return -1;
+    } else if (a.name == 'extra' && b.name == 'core') {
+      return 1;
+    } else if (a.name == 'extra' && b.name != 'core') {
+      return -1;
+    } else {
+      return 1;
+    }
+  }
+
   render() {
-    const {fetchFailed, suites } = this.props;
+    const {fetchFailed, dashboard, suites } = this.props;
+    const overall = {good: 0, unknown: 0, bad: 0};
     const suitesStats = [];
 
-    for (let suite of suites) {
-      const {good, bad, unknown, percentage} = this.calculateSuiteStats(suite.pkgs);
-      suitesStats.push({name: suite.name, good, bad, unknown, percentage});
+    if (dashboard) {
+      for (const [key, value] of Object.entries(dashboard.suites)) {
+        const {good, bad, unknown, percentage} = this.calculateSuiteStats(value);
+        overall['good'] += good;
+        overall['bad'] += bad;
+        overall['unknown'] += unknown;
+        suitesStats.push({name: key, good, bad, unknown, percentage});
+      }
+      suitesStats.sort(this.compareSuites);
     }
 
-    const {good, bad, unknown, percentage} = this.calculateSuiteStats(suites.flatMap(suite => suite.pkgs));
+    const {good, bad, unknown, percentage} = this.calculateSuiteStats(overall);
     const overallStats = {name: 'overall', good, bad, unknown, percentage};
 
     return (
@@ -50,10 +58,10 @@ class Header extends React.Component {
             <p>For more information read the <a href="https://reproducible-builds.org/">Reproducible Builds website</a> or join the <a href="ircs://libera.chat/archlinux-reproducible">#archlinux-reproducible</a> IRC channel on <a href="https://libera.chat/">libera.chat</a>.</p>
             <br/>
             <ul className="repo-summary">
-            {!fetchFailed && suites.length == 0 &&
+            {!fetchFailed && !dashboard &&
             <p><b>Loading...</b></p>
             }
-            {!fetchFailed && suites.length > 0 &&
+            {!fetchFailed && dashboard &&
             <li key="overall">Arch Linux is <span className="has-text-weight-bold">{ overallStats.percentage }%</span> reproducible with <span className="bad has-text-weight-bold">{ overallStats.bad } bad</span>  <span className="unknown has-text-weight-bold">{ overallStats.unknown } unknown</span> and <span className="good has-text-weight-bold">{ overallStats.good } good</span> packages.</li>
             }
             {!fetchFailed && suitesStats.map(function(repo, index) {
@@ -68,3 +76,5 @@ class Header extends React.Component {
 }
 
 module.exports = {Header};
+
+// vim: ts=2 sw=2 et: