diff --git a/services/amo/amo.service.js b/services/amo/amo.service.js
index 685449be5ff8750305a2be1c6d61d06f6d6696d3..93e126fcd479a48cc6285a3b7bbb0d690d24e26c 100644
--- a/services/amo/amo.service.js
+++ b/services/amo/amo.service.js
@@ -17,6 +17,8 @@ const {
   floorCount: floorCountColor,
 } = require('../../lib/color-formatters')
 
+const keywords = ['amo', 'firefox']
+
 class AmoDownloads extends LegacyService {
   static get category() {
     return 'downloads'
@@ -25,6 +27,7 @@ class AmoDownloads extends LegacyService {
   static get route() {
     return {
       base: 'amo/d',
+      pattern: ':addonId',
     }
   }
 
@@ -32,8 +35,9 @@ class AmoDownloads extends LegacyService {
     return [
       {
         title: 'Mozilla Add-on',
-        previewUrl: 'dustman',
-        keywords: ['amo', 'firefox'],
+        namedParams: { addonId: 'dustman' },
+        staticExample: { message: '12k', color: 'brightgreen' },
+        keywords,
       },
     ]
   }
@@ -49,6 +53,7 @@ class AmoVersion extends LegacyService {
   static get route() {
     return {
       base: 'amo/v',
+      pattern: ':addonId',
     }
   }
 
@@ -56,12 +61,19 @@ class AmoVersion extends LegacyService {
     return [
       {
         title: 'Mozilla Add-on',
-        previewUrl: 'dustman',
-        keywords: ['amo', 'firefox'],
+        namedParams: { addonId: 'dustman' },
+        staticExample: { message: 'v2.1.0', color: 'blue' },
+        keywords,
       },
     ]
   }
 
+  static get defaultBadgeData() {
+    return {
+      label: 'mozilla add-on',
+    }
+  }
+
   static registerLegacyRouteHandler() {}
 }
 
@@ -80,13 +92,25 @@ class AmoRating extends LegacyService {
     return [
       {
         title: 'Mozilla Add-on',
-        previewUrl: 'rating/dustman',
-        keywords: ['amo', 'firefox'],
+        pattern: 'rating/:addonId',
+        namedParams: { addonId: 'dustman' },
+        staticExample: {
+          label: 'rating',
+          message: '4/5',
+          color: 'brightgreen',
+        },
+        keywords,
       },
       {
         title: 'Mozilla Add-on',
-        previewUrl: 'stars/dustman',
-        keywords: ['amo', 'firefox'],
+        pattern: 'stars/:addonId',
+        namedParams: { addonId: 'dustman' },
+        staticExample: {
+          label: 'rating',
+          message: starRating(4),
+          color: 'brightgreen',
+        },
+        keywords,
       },
     ]
   }
@@ -102,6 +126,7 @@ class AmoUsers extends LegacyService {
   static get route() {
     return {
       base: 'amo/users',
+      pattern: ':addonId',
     }
   }
 
@@ -109,12 +134,19 @@ class AmoUsers extends LegacyService {
     return [
       {
         title: 'Mozilla Add-on',
-        previewUrl: 'dustman',
-        keywords: ['amo', 'firefox'],
+        namedParams: { addonId: 'dustman' },
+        staticExample: { message: '706', color: 'brightgreen' },
+        keywords,
       },
     ]
   }
 
+  static get defaultBadgeData() {
+    return {
+      label: 'users',
+    }
+  }
+
   static registerLegacyRouteHandler() {}
 }
 
diff --git a/services/coveralls/coveralls.service.js b/services/coveralls/coveralls.service.js
index 31cced912e6ce43d66c63ec64478a259be28f82b..7bff7774fb4f10bd5d1af4440ca849a037d4c337 100644
--- a/services/coveralls/coveralls.service.js
+++ b/services/coveralls/coveralls.service.js
@@ -18,26 +18,55 @@ module.exports = class Coveralls extends LegacyService {
   }
 
   static get examples() {
+    const { staticExample } = this
     return [
       {
         title: 'Coveralls github',
-        previewUrl: 'github/jekyll/jekyll',
+        pattern: ':vcsType/:user/:repo',
+        namedParams: { vcsType: 'github', user: 'jekyll', repo: 'jekyll' },
+        staticExample,
       },
       {
         title: 'Coveralls github branch',
-        previewUrl: 'github/jekyll/jekyll/master',
+        pattern: ':vcsType/:user/:repo/:branch',
+        namedParams: {
+          vcsType: 'github',
+          user: 'jekyll',
+          repo: 'jekyll',
+          branch: 'master',
+        },
+        staticExample,
       },
       {
         title: 'Coveralls bitbucket',
-        previewUrl: 'bitbucket/pyKLIP/pyklip',
+        pattern: ':vcsType/:user/:repo',
+        namedParams: { vcsType: 'bitbucket', user: 'pyKLIP', repo: 'pyklip' },
+        staticExample,
       },
       {
         title: 'Coveralls bitbucket branch',
-        previewUrl: 'bitbucket/pyKLIP/pyklip/master',
+        pattern: ':vcsType/:user/:repo/:branch',
+        namedParams: {
+          vcsType: 'bitbucket',
+          user: 'pyKLIP',
+          repo: 'pyklip',
+          branch: 'master',
+        },
+        staticExample,
       },
     ]
   }
 
+  static get staticExample() {
+    return { message: '83%', color: 'yellowgreen' }
+  }
+
+  static get defaultBadgeData() {
+    return {
+      label: 'coverage',
+    }
+  }
+
   static registerLegacyRouteHandler({ camp, cache }) {
     camp.route(
       /^\/coveralls\/(?:(bitbucket|github)\/)?([^/]+\/[^/]+)(?:\/(.+))?\.(svg|png|gif|jpg|json)$/,
diff --git a/services/david/david.service.js b/services/david/david.service.js
index fd93c6d2ad7667874e2ca22be5907866a1342812..6c9a5a15076ff95a187ef64ca693fe0f90320f44 100644
--- a/services/david/david.service.js
+++ b/services/david/david.service.js
@@ -18,28 +18,50 @@ module.exports = class David extends LegacyService {
     return [
       {
         title: 'David',
-        previewUrl: 'expressjs/express',
+        pattern: ':user/:repo',
+        namedParams: { user: 'expressjs', repo: 'express' },
+        staticExample: this.renderStaticExample(),
       },
       {
         title: 'David',
-        previewUrl: 'dev/expressjs/express',
+        pattern: 'dev/:user/:repo',
+        namedParams: { user: 'expressjs', repo: 'express' },
+        staticExample: this.renderStaticExample({ label: 'dev dependencies' }),
       },
       {
         title: 'David',
-        previewUrl: 'optional/elnounch/byebye',
+        pattern: 'optional/:user/:repo',
+        namedParams: { user: 'elnounch', repo: 'byebye' },
+        staticExample: this.renderStaticExample({
+          label: 'optional dependencies',
+        }),
       },
       {
         title: 'David',
-        previewUrl: 'peer/webcomponents/generator-element',
+        pattern: 'peer/:user/:repo',
+        namedParams: { user: 'webcomponents', repo: 'generator-element' },
+        staticExample: this.renderStaticExample({ label: 'peer dependencies' }),
       },
       {
         title: 'David (path)',
-        previewUrl: 'babel/babel',
+        pattern: ':user/:repo',
+        namedParams: { user: 'babel', repo: 'babel' },
         query: { path: 'packages/babel-core' },
+        staticExample: this.renderStaticExample(),
       },
     ]
   }
 
+  static get defaultBadgeData() {
+    return {
+      label: 'dependencies',
+    }
+  }
+
+  static renderStaticExample({ label } = {}) {
+    return { label, message: 'up to date', color: 'brightgreen' }
+  }
+
   static registerLegacyRouteHandler({ camp, cache }) {
     camp.route(
       /^\/david\/(dev\/|optional\/|peer\/)?(.+?)\.(svg|png|gif|jpg|json)$/,
diff --git a/services/travis/travis-build.service.js b/services/travis/travis-build.service.js
index ceb919afaf517ae97497501cf9ef3afa578c2cac..6cd06b8b34b33cad9d3934c444ba08be9e657533 100644
--- a/services/travis/travis-build.service.js
+++ b/services/travis/travis-build.service.js
@@ -18,34 +18,43 @@ module.exports = class TravisBuild extends LegacyService {
   }
 
   static get examples() {
+    const { staticExample } = this
     return [
       {
         title: 'Travis (.org)',
-        previewUrl: 'rust-lang/rust',
         pattern: ':user/:repo',
-        exampleUrl: 'rust-lang/rust',
+        namedParams: { user: 'rust-lang', repo: 'rust' },
+        staticExample,
       },
       {
         title: 'Travis (.org) branch',
-        previewUrl: 'rust-lang/rust/master',
         pattern: ':user/:repo/:branch',
-        exampleUrl: 'rust-lang/rust/master',
+        namedParams: { user: 'rust-lang', repo: 'rust', branch: 'master' },
+        staticExample,
       },
       {
         title: 'Travis (.com)',
-        previewUrl: 'com/ivandelabeldad/rackian-gateway',
         pattern: 'com/:user/:repo',
-        exampleUrl: 'com/ivandelabeldad/rackian-gateway',
+        namedParams: { user: 'ivandelabeldad', repo: 'rackian-gateway' },
+        staticExample,
       },
       {
         title: 'Travis (.com) branch',
-        previewUrl: 'com/ivandelabeldad/rackian-gateway/master',
         pattern: 'com/:user/:repo/:branch',
-        exampleUrl: 'com/ivandelabeldad/rackian-gateway/master',
+        namedParams: {
+          user: 'ivandelabeldad',
+          repo: 'rackian-gateway',
+          branch: 'master',
+        },
+        staticExample,
       },
     ]
   }
 
+  static staticExample() {
+    return { message: 'passing', color: 'brightgreen' }
+  }
+
   static registerLegacyRouteHandler({ camp, cache }) {
     camp.route(
       /^\/travis(-ci)?\/(?:(com)\/)?(?!php-v)([^/]+\/[^/]+)(?:\/(.+))?\.(svg|png|gif|jpg|json)$/,