diff --git a/index.html b/index.html
index ed05606bb817dc00d2566b5f12785014153e0ac7..c13efb24fdb94dd10fac84954f5ea896acfdedda 100644
--- a/index.html
+++ b/index.html
@@ -17,47 +17,115 @@
 </head>
 <body>
   <div id="app">
-    <b-container>
-        <button @click="fetchRepoData">Fetch!</button>
-    </b-container>
     <b-container fluid>
-      <b-row>
-        <b-card v-for="repo in repos"
-                :title="repo.org_plus_name"
-                tag="article"
-                style="max-width: 20rem;"
-                class="mb-2"
-                >
-                <b-tabs card>
-                  <b-tab title="Git">
-                    <b-card-text>
-                      <b-card-text>
-                        <p>
-                          <a href="`https://pypi.org/project/${ repo.python.name }/`">             <img :src="`https://img.shields.io/pypi/v/${ repo.python.name }.svg`"                                     /> </a>
-                          <a href="`https://travis-ci.org/${ repo.org_plus_name }`">               <img :src="`https://travis-ci.org/${ repo.org_plus_name }.svg?branch=master`"                             /> </a>
-                          <a href="`https://circleci.com/gh/${ repo.org_plus_name }`">             <img :src="`https://circleci.com/gh/${ repo.org_plus_name }.svg?style=svg`"                               /> </a>
-                          <a href="`https://hub.docker.com/r/ocrd/core/tags/`">                     <img :src="`https://img.shields.io/docker/automated/ocrd/core.svg`"                                        /> </a>
-                          <a href="`https://codecov.io/gh/${ repo.org_plus_name }`">               <img :src="`https://codecov.io/gh/${ repo.org_plus_name }/branch/master/graph/badge.svg`"                 /> </a>
-                          <a href="`https://scrutinizer-ci.com/g/${ repo.org_plus_name }`">        <img :src="`https://scrutinizer-ci.com/g/${ repo.org_plus_name }/badges/quality-score.png?b=master`"      /> </a>
-                          <a href="`https://lgtm.com/projects/g/${ repo.org_plus_name }/alerts/`"> <img :src="`https://img.shields.io/lgtm/alerts/g/${ repo.org_plus_name }.svg?logo=lgtm&amp;logoWidth=18`" /> </a>
-                        </p>
-                      </b-card-text>
-                      <b-table v-if="repo.git" :items="[repo.git]"></b-table>
-                    </b-card-text>
-                  </b-tab>
-                  <b-tab title="Tools">
-                    <b-card-text>
-                      <b-table v-if="repo.ocrd_tool" :items="[repo.ocrd_tool]"></b-table>
-                    </b-card-text>
+
+      <b-tabs>
+
+        <b-tab title="Processors">
+          <b-row>
+            Filter by category:
+            <b-badge
+              v-for="category in categories"
+              :variant="category_filter.indexOf(category) != -1 ? 'primary' : 'secondary'"
+              @click="category_filter.indexOf(category) != -1 ? category_filter.splice(category_filter.indexOf(category), 1) : category_filter.push(category)"
+              >
+              {{ category }}
+            </b-badge>
+          </b-row>
+          <b-row>
+            Filter by step:
+            <b-badge
+              v-for="step in steps"
+              :variant="step_filter.indexOf(step) != -1 ? 'primary' : 'secondary'"
+              @click="step_filter.indexOf(step) != -1 ? step_filter.splice(step_filter.indexOf(step), 1) : step_filter.push(step)"
+              >
+              {{ step }}
+            </b-badge>
+          </b-row>
+          <b-row>
+            <b-card
+              v-for="processor in processors"
+              :title="processor.executable.replace('ocrd-', '')"
+              tag="article"
+              style="max-width: 20rem;"
+              class="mb-2"
+              >
+              <b-card-text>
+
+                <b-tabs>
+                <b-tabs>
+                  <b-tab title="Description">
+                    <blockquote>
+                      {{ processor.description }}
+                      <b-badge variant="info" v-for="step in processor.steps">{{ step }}</b-badge>
+                      <b-badge variant="success" v-for="category in processor.categories">{{ category }}</b-badge>
+                    </blockquote>
+                    <p>
+                      Part of <a href="">{{ processor.part_of }}</a>
+                    </p>
+                    <p>
+                      <a href="">Read the Documentation!</a>
+                    </p>
                   </b-tab>
-                  <b-tab title="Python">
-                    <b-card-text>
-                      <b-table v-if="repo.python" :items="[repo.python]"></b-table>
-                    </b-card-text>
+
+                  <b-tab title="Parameters">
+                    <ul>
+                      <li v-for="param, name in processor.parameters">
+                        <strong>{{ name }}</strong> {{ param }}
+                      </li>
+                    </ul>
                   </b-tab>
+
                 </b-tabs>
-        </b-card>
-      </b-row>
+
+              </b-card-text>
+            </b-card>
+          </b-row>
+        </b-tab>
+
+        <b-tab title="Projects">
+          <b-row>
+            <button @click="fetchRepoData">Fetch!</button>
+          </b-row>
+          <b-row>
+            <b-card
+              v-for="repo in repos"
+              :title="repo.org_plus_name"
+              tag="article"
+              style="max-width: 20rem;"
+              class="mb-2"
+              >
+              <b-tabs card>
+                <b-tab title="Git">
+                  <b-card-text>
+                    <p>
+                      <a href="`https://pypi.org/project/${ repo.python.name }/`">             <img :src="`https://img.shields.io/pypi/v/${ repo.python.name }.svg`"                                     /> </a>
+                      <!-- <a href="`https://travis-ci.org/${ repo.org_plus_name }`">               <img :src="`https://travis-ci.org/${ repo.org_plus_name }.svg?branch=master`"                             /> </a> -->
+                      <!-- <a href="`https://circleci.com/gh/${ repo.org_plus_name }`">             <img :src="`https://circleci.com/gh/${ repo.org_plus_name }.svg?style=svg`"                               /> </a> -->
+                      <!-- <a href="`https://hub.docker.com/r/ocrd/core/tags/`">                     <img :src="`https://img.shields.io/docker/automated/ocrd/core.svg`"                                        /> </a> -->
+                      <!-- <a href="`https://codecov.io/gh/${ repo.org_plus_name }`">               <img :src="`https://codecov.io/gh/${ repo.org_plus_name }/branch/master/graph/badge.svg`"                 /> </a> -->
+                      <!-- <a href="`https://scrutinizer-ci.com/g/${ repo.org_plus_name }`">        <img :src="`https://scrutinizer-ci.com/g/${ repo.org_plus_name }/badges/quality-score.png?b=master`"      /> </a> -->
+                      <!-- <a href="`https://lgtm.com/projects/g/${ repo.org_plus_name }/alerts/`"> <img :src="`https://img.shields.io/lgtm/alerts/g/${ repo.org_plus_name }.svg?logo=lgtm&amp;logoWidth=18`" /> </a> -->
+                    </p>
+                    <b-table v-if="repo.git" :items="[repo.git]"></b-table>
+                  </b-card-text>
+                </b-tab>
+                <b-tab title="Tools">
+                  <b-card-text>
+                    <b-table v-if="repo.ocrd_tool" :items="[repo.ocrd_tool]"></b-table>
+                  </b-card-text>
+                </b-tab>
+                <b-tab title="Python">
+                  <b-card-text>
+                    <b-table v-if="repo.python" :items="[repo.python]"></b-table>
+                  </b-card-text>
+                </b-tab>
+              </b-tabs>
+            </b-card>
+          </b-row>
+        </b-tab>
+      </b-tabs>
+
     </b-container>
   </div>
 
diff --git a/script.js b/script.js
index 7b1ad3c7b72a1f250de9c38aa5e8a3ebfe284ebd..96142b5d5dbf4dc548c5ed2a32723a25f14f6a13 100644
--- a/script.js
+++ b/script.js
@@ -2,11 +2,48 @@
 window.app = new Vue({
   el: '#app',
   data: {
-    repos_raw: []
+    repos_raw: [],
+    category_filter: [],
+    step_filter: [],
   },
   computed: {
     repos() {
       return this.repos_raw
+    },
+    steps() {
+      return this.all_processors.reduce((all, processor) => {
+        all.push(...processor.steps.filter(step => all.indexOf(step) == -1))
+        return all
+      }, [])
+    },
+    categories() {
+      return this.all_processors.reduce((all, processor) => {
+        all.push(...processor.categories.filter(category => all.indexOf(category) == -1))
+        return all
+      }, [])
+    },
+    all_processors() {
+      return this.repos_raw.reduce((all, repo) => {
+        if (repo.ocrd_tool)
+          all.push(...Object.values(repo.ocrd_tool.tools).map(tool => {
+            tool.part_of = repo.org_plus_name
+            return tool
+          }))
+        return all
+      }, [])
+    },
+    processors() {
+      return this.all_processors.filter(tool => {
+        for (let step_filter of this.step_filter) {
+          if (tool.steps.indexOf(step_filter) == -1)
+            return false
+        }
+        for (let category_filter of this.category_filter) {
+          if (tool.categories.indexOf(category_filter) == -1)
+            return false
+        }
+        return true
+      })
     }
   },
   mounted() {
@@ -16,6 +53,13 @@ window.app = new Vue({
     fetchRepoData() {
       fetch('repos.json').then(resp => resp.json()).then(repos => this.repos.push(...repos))
     },
+    toggleStepFilter(v) {
+      if (v in this.step_filter) {
+        this.step_filter = this.step_filter.splice(this.step_filter.indexOf(v), 1)
+      } else {
+        this.step_filter.push(v)
+      }
+    }
   }
 })