diff --git a/core/service-test-runner/cli.js b/core/service-test-runner/cli.js
index 4901085d278a4493f52674bf9bb2f2dc2bf31888..da4629a0d3673b0ebd8f8c3342720fb212860eed 100644
--- a/core/service-test-runner/cli.js
+++ b/core/service-test-runner/cli.js
@@ -57,7 +57,7 @@ const readAllStdinSync = require('read-all-stdin-sync')
 const { createTestServer } = require('../server/in-process-server-test-helpers')
 const Runner = require('./runner')
 
-require('../../lib/unhandled-rejection.spec')
+require('../unhandled-rejection.spec')
 
 let baseUrl, server
 if (process.env.TESTED_SERVER_URL) {
diff --git a/lib/unhandled-rejection.spec.js b/core/unhandled-rejection.spec.js
similarity index 100%
rename from lib/unhandled-rejection.spec.js
rename to core/unhandled-rejection.spec.js
diff --git a/doc/TUTORIAL.md b/doc/TUTORIAL.md
index 64694f1017cf5a4d8feaf2831dbef62a9de00461..25491f53a238c93c69292cc37342792a65cdc3be 100644
--- a/doc/TUTORIAL.md
+++ b/doc/TUTORIAL.md
@@ -1,12 +1,10 @@
-Tutorial on how to add a badge for a service
-============================================
+# Tutorial on how to add a badge for a service
 
 This tutorial should help you add a service to shields.io in form of a badge.
 You will need to learn to use JavaScript, Git and GitHub.
 Please [improve the tutorial](https://github.com/badges/shields/edit/master/doc/TUTORIAL.md) while you read it.
 
-(1) Reading
------------
+## (1) Reading
 
 You should read [CONTRIBUTING.md](../CONTRIBUTING.md)
 
@@ -14,8 +12,7 @@ You can also read previous
 [merged pull-requests with the 'service-badge' label](https://github.com/badges/shields/pulls?utf8=%E2%9C%93&q=is%3Apr+label%3Aservice-badge+is%3Amerged)
 to see how other people implemented their badges.
 
-(2) Setup
----------
+## (2) Setup
 
 ### Pre-requisites
 
@@ -48,25 +45,24 @@ You may also want to install
 This is an optional dependency needed for generating badges in raster format,
 but you can get a dev copy running without it.
 
-(3) Open an Issue
------------------
+## (3) Open an Issue
 
 Before you want to implement your service, you may want to [open an issue](https://github.com/badges/shields/issues/new?template=2_Badge_request.md) and describe what you have in mind:
+
 - What is the badge for?
 - Which API do you want to use?
 
 You may additionally proceed to say what you want to work on.
 This information allows other humans to help and build on your work.
 
-(4) Implementing
-----------------
+## (4) Implementing
 
 ### (4.1) Structure and Layout
 
 Service badge code is stored in the [/services](https://github.com/badges/shields/tree/master/services/) directory.
 Each service has a directory for its files:
 
-* In files ending with `.service.js`, you can find the code which handles
+- In files ending with `.service.js`, you can find the code which handles
   incoming requests and generates the badges.
   Sometimes, code for a service can be re-used.
   This might be the case when you add a badge for an API which is already used
@@ -74,20 +70,21 @@ Each service has a directory for its files:
 
   Imagine a service that lives at https://img.shields.io/example/some-param-here.svg.
 
-  * For services with a single badge, the badge code will generally be stored in
+  - For services with a single badge, the badge code will generally be stored in
     `/services/example/example.service.js`.
     If you add a badge for a new API, create a new directory.
 
     Example: [wercker](https://github.com/badges/shields/tree/master/services/wercker)
 
-  * For service families with multiple badges we usually store the code for each
+  - For service families with multiple badges we usually store the code for each
     badge in its own file like this:
-    * `/services/example/example-downloads.service.js`
-    * `/services/example/example-version.service.js` etc.
+
+    - `/services/example/example-downloads.service.js`
+    - `/services/example/example-version.service.js` etc.
 
     Example: [ruby gems](https://github.com/badges/shields/tree/master/services/gem)
 
-* In files ending with `.tester.js`, you can find the code which uses
+- In files ending with `.tester.js`, you can find the code which uses
   the shields server to test if the badges are generated correctly.
   There is a [chapter on Tests][write tests].
 
@@ -96,32 +93,35 @@ Each service has a directory for its files:
 All service badge classes inherit from [BaseService] or another class which extends it.
 Other classes implement useful behavior on top of [BaseService].
 
-* [BaseJsonService](https://github.com/badges/shields/blob/master/services/base-json.js)
+- [BaseJsonService](https://github.com/badges/shields/blob/master/services/base-json.js)
   implements methods for performing requests to a JSON API and schema validation.
-* [BaseXmlService](https://github.com/badges/shields/blob/master/services/base-xml.js)
+- [BaseXmlService](https://github.com/badges/shields/blob/master/services/base-xml.js)
   implements methods for performing requests to an XML API and schema validation.
-* If you are contributing to a *service family*, you may define a common super
+- If you are contributing to a _service family_, you may define a common super
   class for the badges or one may already exist.
 
-[BaseService]: https://github.com/badges/shields/blob/master/services/base.js
+[baseservice]: https://github.com/badges/shields/blob/master/services/base.js
 
 As a first step we will look at the code for an example which generates a badge without contacting an API.
 
 ```js
-'use strict'                                         // (1)
+'use strict' // (1)
 
-const { BaseService } = require('..')                // (2)
+const { BaseService } = require('..') // (2)
 
-module.exports = class Example extends BaseService { // (3)
+module.exports = class Example extends BaseService {
+  // (3)
 
-  static get route() {                                 // (4)
+  static get route() {
+    // (4)
     return {
       base: 'example',
       pattern: ':text',
     }
   }
 
-  async handle({ text }) {                           // (5)
+  async handle({ text }) {
+    // (5)
     return {
       label: 'example',
       message: text,
@@ -137,15 +137,15 @@ Description of the code:
 2. Our service badge class will extend `BaseService` so we need to require it. Variables are declared with `const` and `let` in preference to `var`.
 3. Our module must export a class which extends `BaseService`.
 4. `route()` declares the URL path at which the service operates. It also maps components of the URL path to handler parameters.
-    * `base` defines the first part of the URL that doesn't change, e.g. `/example/`.
-    * `pattern` defines the variable part of the route, everything that comes after `/example/`. It can include any
-      number of named parameters. These are converted into
-      regular expressions by [`path-to-regexp`][path-to-regexp].
+   - `base` defines the first part of the URL that doesn't change, e.g. `/example/`.
+   - `pattern` defines the variable part of the route, everything that comes after `/example/`. It can include any
+     number of named parameters. These are converted into
+     regular expressions by [`path-to-regexp`][path-to-regexp].
 5. Because a service instance won't be created until it's time to handle a request, the route and other metadata must be obtained by examining the classes themselves. [That's why they're marked `static`.][static]
 6. All badges must implement the `async handle()` function that receives parameters to render the badge. Parameters of `handle()` will match the name defined in `route()` Because we're capturing a single variable called `text` our function signature is `async handle({ text })`. `async` is needed to let JavaScript do other things while we are waiting for result from external API. Although in this simple case, we don't make any external calls. Our `handle()` function should return an object with 3 properties:
-    * `label`: the text on the left side of the badge
-    * `message`: the text on the right side of the badge - here we are passing through the parameter we captured in the route regex
-    * `color`: the background color of the right side of the badge
+   - `label`: the text on the left side of the badge
+   - `message`: the text on the right side of the badge - here we are passing through the parameter we captured in the route regex
+   - `color`: the background color of the right side of the badge
 
 The process of turning this object into an image is handled automatically by the `BaseService` class.
 
@@ -168,56 +168,63 @@ The example above was completely static. In order to make a useful service badge
 This example is based on the [Ruby Gems version](https://github.com/badges/shields/blob/master/services/gem/gem-version.service.js) badge:
 
 ```js
-'use strict'                                                    // (1)
+'use strict' // (1)
 
-const { renderVersionBadge } = require('../../lib/version')     // (2)
-const { BaseJsonService } = require('..')                       // (3)
+const { renderVersionBadge } = require('..//version') // (2)
+const { BaseJsonService } = require('..') // (3)
 
-const Joi = require('joi')                                      // (4)
-const schema = Joi.object({                                     // (4)
-  version: Joi.string().required(),                             // (4)
-}).required()                                                   // (4)
+const Joi = require('joi') // (4)
+const schema = Joi.object({
+  // (4)
+  version: Joi.string().required(), // (4)
+}).required() // (4)
 
-module.exports = class GemVersion extends BaseJsonService {     // (5)
+module.exports = class GemVersion extends BaseJsonService {
+  // (5)
 
-  static get route() {                                          // (6)
+  static get route() {
+    // (6)
     return {
       base: 'gem/v',
       pattern: ':gem',
     }
   }
 
-  static get defaultBadgeData() {                               // (7)
+  static get defaultBadgeData() {
+    // (7)
     return { label: 'gem' }
   }
 
-  async handle({ gem }) {                                       // (8)
+  async handle({ gem }) {
+    // (8)
     const { version } = await this.fetch({ gem })
     return this.constructor.render({ version })
   }
 
-  async fetch({ gem }) {                                        // (9)
+  async fetch({ gem }) {
+    // (9)
     return this._requestJson({
       schema,
       url: `https://rubygems.org/api/v1/gems/${gem}.json`,
     })
   }
 
-  static render({ version }) {                                  // (10)
+  static render({ version }) {
+    // (10)
     return renderVersionBadge({ version })
   }
-
 }
 ```
 
 Description of the code:
+
 1. As with the first example, we declare strict mode at the start of each file.
-2. In this case we are making a version badge, which is a common pattern. Instead of directly returning an object in this badge we will use a helper function to format our data consistently. There are a variety of helper functions to help with common tasks in `/lib`. Some useful generic helpers can be found in:
-    * [build-status.js](https://github.com/badges/shields/blob/master/lib/build-status.js)
-    * [color-formatters.js](https://github.com/badges/shields/blob/master/lib/color-formatters.js)
-    * [licenses.js](https://github.com/badges/shields/blob/master/lib/licenses.js)
-    * [text-formatters.js](https://github.com/badges/shields/blob/master/lib/text-formatters.js)
-    * [version.js](https://github.com/badges/shields/blob/master/lib/version.js)
+2. In this case we are making a version badge, which is a common pattern. Instead of directly returning an object in this badge we will use a helper function to format our data consistently. There are a variety of helper functions to help with common tasks in `/services`. Some useful generic helpers can be found in:
+   - [build-status.js](https://github.com/badges/shields/blob/master/services/build-status.js)
+   - [color-formatters.js](https://github.com/badges/shields/blob/master/services/color-formatters.js)
+   - [licenses.js](https://github.com/badges/shields/blob/master/services/licenses.js)
+   - [text-formatters.js](https://github.com/badges/shields/blob/master/services/text-formatters.js)
+   - [version.js](https://github.com/badges/shields/blob/master/services/version.js)
 3. Our badge will query a JSON API so we will extend `BaseJsonService` instead of `BaseService`. This contains some helpers to reduce the need for boilerplate when calling a JSON API.
 4. We perform input validation by defining a schema which we expect the JSON we receive to conform to. This is done using [Joi](https://github.com/hapijs/joi). Defining a schema means we can ensure the JSON we receive meets our expectations and throw an error if we receive unexpected input without having to explicitly code validation checks. The schema also acts as a filter on the JSON object. Any properties we're going to reference need to be validated, otherwise they will be filtered out. In this case our schema declares that we expect to receive an object which must have a property called 'status', which is a string.
 5. Our module exports a class which extends `BaseJsonService`
@@ -225,21 +232,21 @@ Description of the code:
 7. We can use `defaultBadgeData()` to set a default `color`, `logo` and/or `label`. If `handle()` doesn't return any of these keys, we'll use the default. Instead of explicitly setting the label text when we return a badge object, we'll use `defaultBadgeData()` here to define it declaratively.
 8. Our badge must implement the `async handle()` function. Because our URL pattern captures a variable called `gem`, our function signature is `async handle({ gem })`. We usually separate the process of generating a badge into 2 stages or concerns: fetch and render. The `fetch()` function is responsible for calling an API endpoint to get data. The `render()` function formats the data for display. In a case where there is a lot of calculation or intermediate steps, this pattern may be thought of as fetch, transform, render and it might be necessary to define some helper functions to assist with the 'transform' step.
 9. The `async fetch()` method is responsible for calling an API endpoint to get data. Extending `BaseJsonService` gives us the helper function `_requestJson()`. Note here that we pass the schema we defined in step 4 as an argument. `_requestJson()` will deal with validating the response against the schema and throwing an error if necessary.
-    * `_requestJson()` automatically adds an Accept header, checks the status code, parses the response as JSON, and returns the parsed response.
-    * `_requestJson()` uses [request](https://github.com/request/request) to perform the HTTP request. Options can be passed to request, including method, query string, and headers. If headers are provided they will override the ones automatically set by `_requestJson()`. There is no need to specify json, as the JSON parsing is handled by `_requestJson()`. See the `request` docs for [supported options](https://github.com/request/request#requestoptions-callback).
-    * Error messages corresponding to each status code can be returned by passing a dictionary of status codes -> messages in `errorMessages`.
-    * A more complex call to `_requestJson()` might look like this:
-        ```js
-        return this._requestJson({
-          schema: mySchema,
-          url,
-          options: { qs: { branch: 'master' } },
-          errorMessages: {
-            401: 'private application not supported',
-            404: 'application not found',
-          },
-        })
-        ```
+   - `_requestJson()` automatically adds an Accept header, checks the status code, parses the response as JSON, and returns the parsed response.
+   - `_requestJson()` uses [request](https://github.com/request/request) to perform the HTTP request. Options can be passed to request, including method, query string, and headers. If headers are provided they will override the ones automatically set by `_requestJson()`. There is no need to specify json, as the JSON parsing is handled by `_requestJson()`. See the `request` docs for [supported options](https://github.com/request/request#requestoptions-callback).
+   - Error messages corresponding to each status code can be returned by passing a dictionary of status codes -> messages in `errorMessages`.
+   - A more complex call to `_requestJson()` might look like this:
+     ```js
+     return this._requestJson({
+       schema: mySchema,
+       url,
+       options: { qs: { branch: 'master' } },
+       errorMessages: {
+         401: 'private application not supported',
+         404: 'application not found',
+       },
+     })
+     ```
 10. The `static render()` method is responsible for formatting the data for display. `render()` is a pure function so we can make it a `static` method. By convention we declare functions which don't reference `this` as `static`. We could explicitly return an object here, as we did in the previous example. In this case, we will hand the version string off to `renderVersionBadge()` which will format it consistently and set an appropriate color. Because `renderVersionBadge()` doesn't return a `label` key, the default label we defined in `defaultBadgeData()` will be used when we generate the badge.
 
 This code allows us to call this URL <https://img.shields.io/gem/v/formatador.svg> to generate this badge: ![](https://img.shields.io/gem/v/formatador.svg)
@@ -248,10 +255,10 @@ It is also worth considering the code we _haven't_ written here. Note that our e
 
 Specifically `BaseJsonService` will handle the following errors for us:
 
-* API does not respond
-* API responds with a non-`200 OK` status code
-* API returns a response which can't be parsed as JSON
-* API returns a response which doesn't validate against our schema
+- API does not respond
+- API responds with a non-`200 OK` status code
+- API returns a response which can't be parsed as JSON
+- API returns a response which doesn't validate against our schema
 
 Sometimes it may be necessary to manually throw an exception to deal with a
 non-standard error condition. If so, there are several standard exceptions that can be used. These exceptions are defined in
@@ -268,19 +275,20 @@ throw new NotFound({ prettyMessage: 'package not found' })
 
 Once we have implemented our badge, we can add it to the index so that users can discover it. We will do this by adding a couple of additional methods to our class.
 
-
 ```js
 module.exports = class GemVersion extends BaseJsonService {
-
   // ...
 
-  static get category() {                                       // (1)
+  static get category() {
+    // (1)
     return 'version'
   }
 
-  static get examples() {                                       // (2)
+  static get examples() {
+    // (2)
     return [
-      {                                                         // (3)
+      {
+        // (3)
         title: 'Gem',
         namedParams: { gem: 'formatador' },
         staticPreview: this.render({ version: '2.1.0' }),
@@ -288,25 +296,24 @@ module.exports = class GemVersion extends BaseJsonService {
       },
     ]
   }
-
 }
 ```
 
 1. The `category()` property defines which heading in the index our example will appear under.
 2. The examples property defines an array of examples. In this case the array will contain a single object, but in some cases it is helpful to provide multiple usage examples.
 3. Our example object should contain the following properties:
-    * `title`: Descriptive text that will be shown next to the badge
-    * `namedParams`: Provide a valid example of params we can substitute into
-      the pattern. In this case we need a valid ruby gem, so we've picked [formatador](https://rubygems.org/gems/formatador).
-    * `staticPreview`: On the index page we want to show an example badge, but for performance reasons we want that example to be generated without making an API call. `staticPreview` should be populated by calling our `render()` method with some valid data.
-    * `keywords`: If we want to provide additional keywords other than the title, we can add them here. This helps users to search for relevant badges.
+   - `title`: Descriptive text that will be shown next to the badge
+   - `namedParams`: Provide a valid example of params we can substitute into
+     the pattern. In this case we need a valid ruby gem, so we've picked [formatador](https://rubygems.org/gems/formatador).
+   - `staticPreview`: On the index page we want to show an example badge, but for performance reasons we want that example to be generated without making an API call. `staticPreview` should be populated by calling our `render()` method with some valid data.
+   - `keywords`: If we want to provide additional keywords other than the title, we can add them here. This helps users to search for relevant badges.
 
 Save, run `npm start`, and you can see it [locally](http://127.0.0.1:3000/).
 
-If you update `examples`, you don't have to restart the server. Run `npm run
-defs` in another terminal window and the frontend will update.
+If you update `examples`, you don't have to restart the server. Run `npm run defs` in another terminal window and the frontend will update.
 
 ### (4.5) Write Tests <!-- Change the link below when you change the heading -->
+
 [write tests]: #45-write-tests
 
 When creating a badge for a new service or changing a badge's behavior, tests
@@ -334,12 +341,13 @@ token or credentials are for and how to obtain them.
 ## (5) Create a Pull Request
 
 Once you have implemented a new badge:
-* Before submitting your changes, please review the [coding guidelines](https://github.com/badges/shields/blob/master/CONTRIBUTING.md#coding-guidelines).
-* [Create a pull-request](https://help.github.com/articles/creating-a-pull-request/) to propose your changes.
-* CI will check the tests pass and that your code conforms to our coding standards.
-* We also use [Danger](https://danger.systems/) to check for some common problems. The first comment on your pull request will be posted by a bot. If there are any errors or warnings raised, please review them.
-* One of the
-[maintainers](https://github.com/badges/shields/blob/master/README.md#project-leaders)
-will review your contribution.
-* We'll work with you to progress your contribution suggesting improvements if necessary. Although there are some occasions where a contribution is not appropriate, if your contribution conforms to our [guidelines](https://github.com/badges/shields/blob/master/CONTRIBUTING.md#badge-guidelines) we'll aim to work towards merging it. The majority of pull requests adding a service badge are merged.
-* If your contribution is merged, the final comment on the pull request will be an automated post which you can monitor to tell when your contribution has been deployed to production.
+
+- Before submitting your changes, please review the [coding guidelines](https://github.com/badges/shields/blob/master/CONTRIBUTING.md#coding-guidelines).
+- [Create a pull-request](https://help.github.com/articles/creating-a-pull-request/) to propose your changes.
+- CI will check the tests pass and that your code conforms to our coding standards.
+- We also use [Danger](https://danger.systems/) to check for some common problems. The first comment on your pull request will be posted by a bot. If there are any errors or warnings raised, please review them.
+- One of the
+  [maintainers](https://github.com/badges/shields/blob/master/README.md#project-leaders)
+  will review your contribution.
+- We'll work with you to progress your contribution suggesting improvements if necessary. Although there are some occasions where a contribution is not appropriate, if your contribution conforms to our [guidelines](https://github.com/badges/shields/blob/master/CONTRIBUTING.md#badge-guidelines) we'll aim to work towards merging it. The majority of pull requests adding a service badge are merged.
+- If your contribution is merged, the final comment on the pull request will be an automated post which you can monitor to tell when your contribution has been deployed to production.
diff --git a/scripts/refactoring-cli.js b/scripts/refactoring-cli.js
index 357d6d0cf8cdf9152ca5d6a71c3c73726ef9ed05..c0fa06bc2f97e1dca0b5c3b6fe8794a7f7caed6d 100644
--- a/scripts/refactoring-cli.js
+++ b/scripts/refactoring-cli.js
@@ -2,7 +2,7 @@
 
 const chalk = require('chalk')
 const { namedColors } = require('../gh-badges/lib/color')
-const { floorCount } = require('../lib/color-formatters')
+const { floorCount } = require('../services/color-formatters')
 const { loadServiceClasses } = require('../core/base-service/loader')
 
 const serviceClasses = loadServiceClasses()
diff --git a/services/amo/amo-downloads.service.js b/services/amo/amo-downloads.service.js
index 356ec2a24ea6c1c8f06c636a96b14be168717f5b..9a2864cb1a36d89daf33e37b0ccd319e54fc6d86 100644
--- a/services/amo/amo-downloads.service.js
+++ b/services/amo/amo-downloads.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
-const { metric } = require('../../lib/text-formatters')
-const { downloadCount } = require('../../lib/color-formatters')
+const { metric } = require('../text-formatters')
+const { downloadCount } = require('../color-formatters')
 const { redirector } = require('..')
 const { BaseAmoService, keywords } = require('./amo-base')
 
diff --git a/services/amo/amo-rating.service.js b/services/amo/amo-rating.service.js
index 27623e2794792d195fb886118090f4c13ea92653..4a81e2820aa3b894a7a6b01e6a8f54e3a092afad 100644
--- a/services/amo/amo-rating.service.js
+++ b/services/amo/amo-rating.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
-const { starRating } = require('../../lib/text-formatters')
-const { floorCount: floorCountColor } = require('../../lib/color-formatters')
+const { starRating } = require('../text-formatters')
+const { floorCount: floorCountColor } = require('../color-formatters')
 const { BaseAmoService, keywords } = require('./amo-base')
 
 module.exports = class AmoRating extends BaseAmoService {
diff --git a/services/amo/amo-users.service.js b/services/amo/amo-users.service.js
index 8b32ab3c3dad3c40872b94af6c680ef5b8fedca4..09dfad14a138326af5d15aeafca503171eae35ec 100644
--- a/services/amo/amo-users.service.js
+++ b/services/amo/amo-users.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { metric } = require('../../lib/text-formatters')
+const { metric } = require('../text-formatters')
 const { BaseAmoService, keywords } = require('./amo-base')
 
 module.exports = class AmoUsers extends BaseAmoService {
diff --git a/services/amo/amo-version.service.js b/services/amo/amo-version.service.js
index db34d635e9df4977f54d9273b0157aa5111ea0c2..6691273523f135f14215724540626b5bca06bcda 100644
--- a/services/amo/amo-version.service.js
+++ b/services/amo/amo-version.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { renderVersionBadge } = require('../../lib/version')
+const { renderVersionBadge } = require('../version')
 const { BaseAmoService, keywords } = require('./amo-base')
 
 module.exports = class AmoVersion extends BaseAmoService {
diff --git a/services/ansible/ansible-quality.service.js b/services/ansible/ansible-quality.service.js
index 16eed6a4f8e965562954bfd2397b5d64068713ad..64eadf429abb87b8e6f675b303e4e42ad64b9704 100644
--- a/services/ansible/ansible-quality.service.js
+++ b/services/ansible/ansible-quality.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { floorCount } = require('../../lib/color-formatters')
+const { floorCount } = require('../color-formatters')
 const { BaseJsonService, InvalidResponse } = require('..')
 
 const ansibleContentSchema = Joi.object({
diff --git a/services/ansible/ansible-role.service.js b/services/ansible/ansible-role.service.js
index e987da557476404bd358537b38943ee4bafb9951..00d29ae3e1bf2fba94801e2e4a20745b964afede 100644
--- a/services/ansible/ansible-role.service.js
+++ b/services/ansible/ansible-role.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const { downloadCount } = require('../../lib/color-formatters')
-const { metric } = require('../../lib/text-formatters')
+const { downloadCount } = require('../color-formatters')
+const { metric } = require('../text-formatters')
 const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
diff --git a/services/apm/apm.service.js b/services/apm/apm.service.js
index 9844927f34e53764006173065c9231b4bf6c7d7d..91061ff6576da3dea5f9a564e5e4a4b5d836ff6e 100644
--- a/services/apm/apm.service.js
+++ b/services/apm/apm.service.js
@@ -1,9 +1,9 @@
 'use strict'
 
 const Joi = require('joi')
-const { renderLicenseBadge } = require('../../lib/licenses')
-const { renderVersionBadge } = require('../../lib/version')
-const { metric } = require('../../lib/text-formatters')
+const { renderLicenseBadge } = require('../licenses')
+const { renderVersionBadge } = require('../version')
+const { metric } = require('../text-formatters')
 const { BaseJsonService, InvalidResponse } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
diff --git a/services/appveyor/appveyor-base.js b/services/appveyor/appveyor-base.js
index e8b1902434a06ba2a0e6978f26ddada1b14e9358..6dea851976c32b1ebe80cde012ca403f913b1bf7 100644
--- a/services/appveyor/appveyor-base.js
+++ b/services/appveyor/appveyor-base.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
-const { isBuildStatus } = require('../../lib/build-status')
+const { isBuildStatus } = require('../build-status')
 
 const schema = Joi.object({
   build: Joi.object({
diff --git a/services/appveyor/appveyor-ci.service.js b/services/appveyor/appveyor-ci.service.js
index e8548afdcb14fb0d802c28613b7d9f6f4cb3374a..1e3dc87b08bdd7f7735bfc3735bce0b59c0ce78e 100644
--- a/services/appveyor/appveyor-ci.service.js
+++ b/services/appveyor/appveyor-ci.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { renderBuildStatusBadge } = require('../../lib/build-status')
+const { renderBuildStatusBadge } = require('../build-status')
 const AppVeyorBase = require('./appveyor-base')
 
 module.exports = class AppVeyorCi extends AppVeyorBase {
diff --git a/services/appveyor/appveyor-ci.tester.js b/services/appveyor/appveyor-ci.tester.js
index 8128f84af8bd6d747c9d9ab18f842b07064ca067..ae7eaea86faf4dc404150c54a66f9234303ab5d1 100644
--- a/services/appveyor/appveyor-ci.tester.js
+++ b/services/appveyor/appveyor-ci.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { isBuildStatus } = require('../../lib/build-status')
+const { isBuildStatus } = require('../build-status')
 const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('CI status')
diff --git a/services/appveyor/appveyor-tests.service.js b/services/appveyor/appveyor-tests.service.js
index 2b7f5fe740ed2160aaabe252ffc2bc62f6f240be..0f7a1fdcbff34cb8de908f5ac8675d0ee3600017 100644
--- a/services/appveyor/appveyor-tests.service.js
+++ b/services/appveyor/appveyor-tests.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { renderTestResultBadge } = require('../../lib/text-formatters')
+const { renderTestResultBadge } = require('../text-formatters')
 const AppVeyorBase = require('./appveyor-base')
 
 const documentation = `
diff --git a/services/aur/aur.service.js b/services/aur/aur.service.js
index 1b1e4d304ab09a7722dd31d2000022badb884418..4e6ebd7fab30b3d2294fd7de3bee572a89aaaa9c 100644
--- a/services/aur/aur.service.js
+++ b/services/aur/aur.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const { floorCount: floorCountColor } = require('../../lib/color-formatters')
-const { addv, metric } = require('../../lib/text-formatters')
+const { floorCount: floorCountColor } = require('../color-formatters')
+const { addv, metric } = require('../text-formatters')
 const { BaseJsonService, NotFound } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
diff --git a/services/azure-devops/azure-devops-build.service.js b/services/azure-devops/azure-devops-build.service.js
index e713638af5e5b9c3cb1df810addda7fe97c3ddc3..411657cfcc7a4761bea44396e0978327cb6a6f41 100644
--- a/services/azure-devops/azure-devops-build.service.js
+++ b/services/azure-devops/azure-devops-build.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { renderBuildStatusBadge } = require('../../lib/build-status')
+const { renderBuildStatusBadge } = require('../build-status')
 const { BaseSvgScrapingService, NotFound } = require('..')
 const { keywords, fetch } = require('./azure-devops-helpers')
 
diff --git a/services/azure-devops/azure-devops-build.tester.js b/services/azure-devops/azure-devops-build.tester.js
index 8e487895fe490f1800076d6f7d333a6b1735de1c..ff5378a98c2340662926a5c854310c62b7b94a87 100644
--- a/services/azure-devops/azure-devops-build.tester.js
+++ b/services/azure-devops/azure-devops-build.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { isBuildStatus } = require('../../lib/build-status')
+const { isBuildStatus } = require('../build-status')
 const t = (module.exports = require('../tester').createServiceTester())
 
 // https://dev.azure.com/totodem/Shields.io is a public Azure DevOps project
diff --git a/services/azure-devops/azure-devops-coverage.service.js b/services/azure-devops/azure-devops-coverage.service.js
index 04a53f930c26ac5e96b538e3ce60641155c026d8..838a52889b8c105bfe30b5d8ff43c3e99cce04af 100644
--- a/services/azure-devops/azure-devops-coverage.service.js
+++ b/services/azure-devops/azure-devops-coverage.service.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const {
   coveragePercentage: coveragePercentageColor,
-} = require('../../lib/color-formatters')
+} = require('../color-formatters')
 const AzureDevOpsBase = require('./azure-devops-base')
 const { keywords, getHeaders } = require('./azure-devops-helpers')
 
diff --git a/services/azure-devops/azure-devops-helpers.js b/services/azure-devops/azure-devops-helpers.js
index 15b80926ce2e0c5aecc118e68a14897bcb18201f..645e80a692ed907dda5be9c529bfc7f4c52682ab 100644
--- a/services/azure-devops/azure-devops-helpers.js
+++ b/services/azure-devops/azure-devops-helpers.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const serverSecrets = require('../../lib/server-secrets')
-const { isBuildStatus } = require('../../lib/build-status')
+const { isBuildStatus } = require('../build-status')
 
 const keywords = ['vso', 'vsts', 'azure-devops']
 
diff --git a/services/azure-devops/azure-devops-release.service.js b/services/azure-devops/azure-devops-release.service.js
index 88f7449e9b461796ce63f103c7b3f5e2bc712b6b..0bbc6ab41f694db12df414d810f600f9147c5be9 100644
--- a/services/azure-devops/azure-devops-release.service.js
+++ b/services/azure-devops/azure-devops-release.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { renderBuildStatusBadge } = require('../../lib/build-status')
+const { renderBuildStatusBadge } = require('../build-status')
 const { BaseSvgScrapingService } = require('..')
 const { keywords, fetch } = require('./azure-devops-helpers')
 
diff --git a/services/azure-devops/azure-devops-release.tester.js b/services/azure-devops/azure-devops-release.tester.js
index fe7b0acf6d0bb506c2516612c2c33d9db3694930..03817052d07e3586f78d686205bb3a17c1949a05 100644
--- a/services/azure-devops/azure-devops-release.tester.js
+++ b/services/azure-devops/azure-devops-release.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { isBuildStatus } = require('../../lib/build-status')
+const { isBuildStatus } = require('../build-status')
 const t = (module.exports = require('../tester').createServiceTester())
 
 // https://dev.azure.com/totodem/Shields.io is a public Azure DevOps project
diff --git a/services/azure-devops/azure-devops-tests.service.js b/services/azure-devops/azure-devops-tests.service.js
index daf5f9e24a53995cb74c40db3b145b2b679b2f19..8663da3d12a4612bdddf90a53ff10fd52bcab490 100644
--- a/services/azure-devops/azure-devops-tests.service.js
+++ b/services/azure-devops/azure-devops-tests.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { renderTestResultBadge } = require('../../lib/text-formatters')
+const { renderTestResultBadge } = require('../text-formatters')
 const AzureDevOpsBase = require('./azure-devops-base')
 const { getHeaders } = require('./azure-devops-helpers')
 
diff --git a/services/bintray/bintray.service.js b/services/bintray/bintray.service.js
index e04709868de9a919ae6baf57f4ae79b4243f1366..e3f31577ef705825a84454845436e6a08171a081 100644
--- a/services/bintray/bintray.service.js
+++ b/services/bintray/bintray.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { renderVersionBadge } = require('../../lib/version')
+const { renderVersionBadge } = require('../version')
 const serverSecrets = require('../../lib/server-secrets')
 const { BaseJsonService } = require('..')
 
diff --git a/services/bitbucket/bitbucket-issues.service.js b/services/bitbucket/bitbucket-issues.service.js
index 81f0f334aa2e9c41cf469ebeedaee887ecc79096..c781942f062e5050b5c03c34f79c74840d52e17f 100644
--- a/services/bitbucket/bitbucket-issues.service.js
+++ b/services/bitbucket/bitbucket-issues.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { metric } = require('../../lib/text-formatters')
+const { metric } = require('../text-formatters')
 const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
diff --git a/services/bitbucket/bitbucket-pipelines.service.js b/services/bitbucket/bitbucket-pipelines.service.js
index 3efee06fa830660173f8e374db87980c7cc95ce1..9de40ec2054453d38f18f2b195383c61b34d01b8 100644
--- a/services/bitbucket/bitbucket-pipelines.service.js
+++ b/services/bitbucket/bitbucket-pipelines.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { renderBuildStatusBadge } = require('../../lib/build-status')
+const { renderBuildStatusBadge } = require('../build-status')
 const { BaseJsonService } = require('..')
 
 const bitbucketPipelinesSchema = Joi.object({
diff --git a/services/bitbucket/bitbucket-pull-request.service.js b/services/bitbucket/bitbucket-pull-request.service.js
index 7e8803cb98f1b9293de1d3534b02475c56300927..0ca5a256385f58970581fcd8ac7107149109177b 100644
--- a/services/bitbucket/bitbucket-pull-request.service.js
+++ b/services/bitbucket/bitbucket-pull-request.service.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const serverSecrets = require('../../lib/server-secrets')
-const { metric } = require('../../lib/text-formatters')
+const { metric } = require('../text-formatters')
 const { nonNegativeInteger, optionalUrl } = require('../validators')
 const { BaseJsonService } = require('..')
 
diff --git a/services/bitbucket/bitbucket.tester.js b/services/bitbucket/bitbucket.tester.js
index 83eae86e2b545f70fd8b20967a8f5693d73d9707..0ce8e7f31e9e1e5c1feebdd6f89518d4d35ad474 100644
--- a/services/bitbucket/bitbucket.tester.js
+++ b/services/bitbucket/bitbucket.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { ServiceTester } = require('../tester')
 const { isMetric, isMetricOpenIssues } = require('../test-validators')
-const { isBuildStatus } = require('../../lib/build-status')
+const { isBuildStatus } = require('../build-status')
 const {
   mockBitbucketCreds,
   mockBitbucketServerCreds,
diff --git a/services/bountysource/bountysource.service.js b/services/bountysource/bountysource.service.js
index 5f8538dabd68f5e95ec9c6de08f0f74d7faf924e..9a759b1a2f0092d6d4343902016fd48ee429e64c 100644
--- a/services/bountysource/bountysource.service.js
+++ b/services/bountysource/bountysource.service.js
@@ -3,7 +3,7 @@
 const { BaseJsonService } = require('..')
 const Joi = require('joi')
 const { nonNegativeInteger } = require('../validators')
-const { metric } = require('../../lib/text-formatters')
+const { metric } = require('../text-formatters')
 
 const schema = Joi.object({ activity_total: nonNegativeInteger })
 
diff --git a/services/bower/bower-license.service.js b/services/bower/bower-license.service.js
index 3ce517833a73bb712236b0fb0e4ca0f8017dd527..e82e388704144419d6f653dc5f78ea2683ac08f9 100644
--- a/services/bower/bower-license.service.js
+++ b/services/bower/bower-license.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { renderLicenseBadge } = require('../../lib/licenses')
+const { renderLicenseBadge } = require('../licenses')
 const BaseBowerService = require('./bower-base')
 
 module.exports = class BowerLicense extends BaseBowerService {
diff --git a/services/bower/bower-version.service.js b/services/bower/bower-version.service.js
index 8b88a8c9f0dcb8fde8fc177fb49b87ba09a22190..42018f621a16afb3e23029468be7dbbf0316ffbf 100644
--- a/services/bower/bower-version.service.js
+++ b/services/bower/bower-version.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const BaseBowerService = require('./bower-base')
-const { renderVersionBadge } = require('../../lib/version')
+const { renderVersionBadge } = require('../version')
 const { InvalidResponse } = require('..')
 
 module.exports = class BowerVersion extends BaseBowerService {
diff --git a/services/bstats/bstats-players.service.js b/services/bstats/bstats-players.service.js
index 84b3ddd37e4388b6770c8893df7473669d827931..13efcdae73e45254337eebdbe390e2aabdcb3c0b 100644
--- a/services/bstats/bstats-players.service.js
+++ b/services/bstats/bstats-players.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { metric } = require('../../lib/text-formatters')
+const { metric } = require('../text-formatters')
 const { BaseJsonService } = require('..')
 
 const schema = Joi.array()
diff --git a/services/bstats/bstats-servers.service.js b/services/bstats/bstats-servers.service.js
index 6a5b71e928c7e26d3099eb728a407d852f3ef3a6..f93e899768ef1c515823be2cd30012cf7e8bcd97 100644
--- a/services/bstats/bstats-servers.service.js
+++ b/services/bstats/bstats-servers.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { metric } = require('../../lib/text-formatters')
+const { metric } = require('../text-formatters')
 const { BaseJsonService } = require('..')
 
 const schema = Joi.array()
diff --git a/lib/build-status.js b/services/build-status.js
similarity index 100%
rename from lib/build-status.js
rename to services/build-status.js
diff --git a/lib/build-status.spec.js b/services/build-status.spec.js
similarity index 100%
rename from lib/build-status.spec.js
rename to services/build-status.spec.js
diff --git a/services/buildkite/buildkite.tester.js b/services/buildkite/buildkite.tester.js
index 95c7a3a3928496512fb1e92b8a6c2ae0772b431e..de2f5069fb674d3f959fa01037158db3684941b9 100644
--- a/services/buildkite/buildkite.tester.js
+++ b/services/buildkite/buildkite.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { isBuildStatus } = require('../../lib/build-status')
+const { isBuildStatus } = require('../build-status')
 const { invalidJSON } = require('../response-fixtures')
 const { ServiceTester } = require('../tester')
 
diff --git a/services/cdnjs/cdnjs.service.js b/services/cdnjs/cdnjs.service.js
index c0754892de94ad3dbc533eba096343d275844e46..ffe4c838845d188d516e710e70ad9335aec58078 100644
--- a/services/cdnjs/cdnjs.service.js
+++ b/services/cdnjs/cdnjs.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { renderVersionBadge } = require('../../lib/version')
+const { renderVersionBadge } = require('../version')
 const { BaseJsonService, NotFound } = require('..')
 
 const cdnjsSchema = Joi.object({
diff --git a/services/chrome-web-store/chrome-web-store.service.js b/services/chrome-web-store/chrome-web-store.service.js
index 5b8c0edb30ef4f250b7759183c71b7488e8d66f3..29031f8e63eaf775b9df54f45123a467fa2c2835 100644
--- a/services/chrome-web-store/chrome-web-store.service.js
+++ b/services/chrome-web-store/chrome-web-store.service.js
@@ -5,16 +5,13 @@ const {
   makeBadgeData: getBadgeData,
   makeLabel: getLabel,
 } = require('../../lib/badge-data')
-const { metric, starRating } = require('../../lib/text-formatters')
+const { metric, starRating } = require('../text-formatters')
 const {
   downloadCount: downloadCountColor,
   floorCount: floorCountColor,
   version: versionColor,
-} = require('../../lib/color-formatters')
-const {
-  addv: versionText,
-  currencyFromCode,
-} = require('../../lib/text-formatters')
+} = require('../color-formatters')
+const { addv: versionText, currencyFromCode } = require('../text-formatters')
 
 const commonExample = {
   title: 'Chrome Web Store',
diff --git a/services/cii-best-practices/cii-best-practices.service.js b/services/cii-best-practices/cii-best-practices.service.js
index 27a35e12737f523274016a87dbc20bea4458c9c1..2cfe9d58bc6aec966f81aaef9e4d38e6042b4c76 100644
--- a/services/cii-best-practices/cii-best-practices.service.js
+++ b/services/cii-best-practices/cii-best-practices.service.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 const {
   colorScale,
   coveragePercentage: coveragePercentageColor,
-} = require('../../lib/color-formatters')
+} = require('../color-formatters')
 const { BaseJsonService } = require('..')
 
 const ciiBestPracticesSchema = Joi.object({
diff --git a/services/circleci/circleci.service.js b/services/circleci/circleci.service.js
index 5bb6c6a876584742e7be4497b4efa633dd741206..7ca7a39a9fdeffed2087e58c1d679cda6e271f3a 100644
--- a/services/circleci/circleci.service.js
+++ b/services/circleci/circleci.service.js
@@ -1,10 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const {
-  isBuildStatus,
-  renderBuildStatusBadge,
-} = require('../../lib/build-status')
+const { isBuildStatus, renderBuildStatusBadge } = require('../build-status')
 const { BaseJsonService } = require('..')
 
 const circleSchema = Joi.array()
diff --git a/services/circleci/circleci.tester.js b/services/circleci/circleci.tester.js
index c27a34f5a539fb3442b9a81d26d8ae9decb7b5f5..745cfe96329080e923f6b054c92d1b9a893a0ae3 100644
--- a/services/circleci/circleci.tester.js
+++ b/services/circleci/circleci.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { isBuildStatus } = require('../../lib/build-status')
+const { isBuildStatus } = require('../build-status')
 const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/clojars/clojars-downloads.service.js b/services/clojars/clojars-downloads.service.js
index 7cea2f15ae3cfcc03b7fced933a695aaae5dbadb..953b1d5857168f4cb61fa808de6cdbe90881f061 100644
--- a/services/clojars/clojars-downloads.service.js
+++ b/services/clojars/clojars-downloads.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const { metric } = require('../../lib/text-formatters')
-const { downloadCount: downloadsColor } = require('../../lib/color-formatters')
+const { metric } = require('../text-formatters')
+const { downloadCount: downloadsColor } = require('../color-formatters')
 const { nonNegativeInteger } = require('../validators')
 const { BaseJsonService } = require('..')
 
diff --git a/services/clojars/clojars-version.service.js b/services/clojars/clojars-version.service.js
index 0b2d99367fd7f65abd131805526d6dd8e05171e4..a3b0d2d5f9f2ec0fd208771ec5be2121184e193f 100644
--- a/services/clojars/clojars-version.service.js
+++ b/services/clojars/clojars-version.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { version: versionColor } = require('../../lib/color-formatters')
+const { version: versionColor } = require('../color-formatters')
 const { BaseJsonService, NotFound } = require('..')
 
 const clojarsSchema = Joi.object({
diff --git a/services/cocoapods/cocoapods-docs.service.js b/services/cocoapods/cocoapods-docs.service.js
index 6110b651bd41c2de38e84f0eafe1940785c9559c..30b21258639cb3681ac533bec04cf9ab461548f1 100644
--- a/services/cocoapods/cocoapods-docs.service.js
+++ b/services/cocoapods/cocoapods-docs.service.js
@@ -2,7 +2,7 @@
 
 const {
   coveragePercentage: coveragePercentageColor,
-} = require('../../lib/color-formatters')
+} = require('../color-formatters')
 const Joi = require('joi')
 const { BaseJsonService } = require('..')
 
diff --git a/services/cocoapods/cocoapods-version.service.js b/services/cocoapods/cocoapods-version.service.js
index 8ecf96f96eb34763dfd612326af4dd4fa89a020b..1b2e516c2ae2f97839d6440293a63b49185efa4d 100644
--- a/services/cocoapods/cocoapods-version.service.js
+++ b/services/cocoapods/cocoapods-version.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { renderVersionBadge } = require('../../lib/version')
+const { renderVersionBadge } = require('../version')
 const BaseCocoaPodsService = require('./cocoapods-base')
 
 module.exports = class CocoapodsVersion extends BaseCocoaPodsService {
diff --git a/services/codacy/codacy-coverage.service.js b/services/codacy/codacy-coverage.service.js
index adc9a4718b4dd2647b8687d3823d9e568e46280b..4c21ff96f4cd863e2ffe5b3e9a9ef4d1bc60f91e 100644
--- a/services/codacy/codacy-coverage.service.js
+++ b/services/codacy/codacy-coverage.service.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const {
   coveragePercentage: coveragePercentageColor,
-} = require('../../lib/color-formatters')
+} = require('../color-formatters')
 const { BaseSvgScrapingService } = require('..')
 const { NotFound } = require('..')
 
diff --git a/services/codeclimate/codeclimate.service.js b/services/codeclimate/codeclimate.service.js
index d1f0c0e7b18af6d3d6ff71be80dab7e100c35984..28184d85e972bde4e6fb79e054689eae65d017bd 100644
--- a/services/codeclimate/codeclimate.service.js
+++ b/services/codeclimate/codeclimate.service.js
@@ -6,7 +6,7 @@ const {
   coveragePercentage: coveragePercentageColor,
   letterScore: letterScoreColor,
   colorScale,
-} = require('../../lib/color-formatters')
+} = require('../color-formatters')
 
 class CodeclimateCoverage extends LegacyService {
   static get route() {
diff --git a/services/codecov/codecov.service.js b/services/codecov/codecov.service.js
index 6c5e19ffb87fd153be42d533c69c7e832f62e0ce..a2df0e7c1a52b543a30b5a208728d1d1205965ae 100644
--- a/services/codecov/codecov.service.js
+++ b/services/codecov/codecov.service.js
@@ -5,7 +5,7 @@ const LegacyService = require('../legacy-service')
 const { makeBadgeData: getBadgeData } = require('../../lib/badge-data')
 const {
   coveragePercentage: coveragePercentageColor,
-} = require('../../lib/color-formatters')
+} = require('../color-formatters')
 
 // This legacy service should be rewritten to use e.g. BaseJsonService.
 //
diff --git a/services/codeship/codeship.tester.js b/services/codeship/codeship.tester.js
index ea2009cb28c5c83b0ab54188bba2705092338800..cd61b6457aed8b8dc9c119ef6786fddd9f54d15a 100644
--- a/services/codeship/codeship.tester.js
+++ b/services/codeship/codeship.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { isBuildStatus } = require('../../lib/build-status')
+const { isBuildStatus } = require('../build-status')
 const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
diff --git a/lib/color-formatters.js b/services/color-formatters.js
similarity index 100%
rename from lib/color-formatters.js
rename to services/color-formatters.js
diff --git a/lib/color-formatters.spec.js b/services/color-formatters.spec.js
similarity index 100%
rename from lib/color-formatters.spec.js
rename to services/color-formatters.spec.js
diff --git a/services/conda/conda-downloads.service.js b/services/conda/conda-downloads.service.js
index ab381d8d7a5f0d2447dd7990048574e318b1b46b..9b02e866f7ade466b5bc6bcfda1f5a37d1c3fd59 100644
--- a/services/conda/conda-downloads.service.js
+++ b/services/conda/conda-downloads.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
-const { metric } = require('../../lib/text-formatters')
-const { downloadCount } = require('../../lib/color-formatters')
+const { metric } = require('../text-formatters')
+const { downloadCount } = require('../color-formatters')
 const BaseCondaService = require('./conda-base')
 
 module.exports = class CondaDownloads extends BaseCondaService {
diff --git a/services/conda/conda-version.service.js b/services/conda/conda-version.service.js
index c88d5a896f65944520f68ea9e3dba3e287246775..80db23a4674ef2769e7e0ce66bd79e0d61d747a5 100644
--- a/services/conda/conda-version.service.js
+++ b/services/conda/conda-version.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
-const { addv: versionText } = require('../../lib/text-formatters')
-const { version: versionColor } = require('../../lib/color-formatters')
+const { addv: versionText } = require('../text-formatters')
+const { version: versionColor } = require('../color-formatters')
 const BaseCondaService = require('./conda-base')
 
 module.exports = class CondaVersion extends BaseCondaService {
diff --git a/services/continuousphp/continuousphp.tester.js b/services/continuousphp/continuousphp.tester.js
index 59516d6efc76a499c56c81589190da3a843c6cd0..60b211f6e02721d9db7d61e65a6c471283bca071 100644
--- a/services/continuousphp/continuousphp.tester.js
+++ b/services/continuousphp/continuousphp.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { isBuildStatus } = require('../../lib/build-status')
+const { isBuildStatus } = require('../build-status')
 const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('build status on default branch')
diff --git a/lib/contributor-count.js b/services/contributor-count.js
similarity index 100%
rename from lib/contributor-count.js
rename to services/contributor-count.js
diff --git a/services/cookbook/cookbook.service.js b/services/cookbook/cookbook.service.js
index fe9828fa062bbfc0c83fe189793dd37edccfb1d9..249d8f4a922bae57f3c03312c32b540ec54d4d95 100644
--- a/services/cookbook/cookbook.service.js
+++ b/services/cookbook/cookbook.service.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { BaseJsonService } = require('..')
-const { renderVersionBadge } = require('../../lib/version')
+const { renderVersionBadge } = require('../version')
 
 const schema = Joi.object({ version: Joi.string().required() }).required()
 
diff --git a/services/coveralls/coveralls.service.js b/services/coveralls/coveralls.service.js
index 8f21f44f525d3387cb3547128566cc8266b2ba56..0abef1ae48c21a504fd03bc529121b1a92a537fd 100644
--- a/services/coveralls/coveralls.service.js
+++ b/services/coveralls/coveralls.service.js
@@ -4,7 +4,7 @@ const LegacyService = require('../legacy-service')
 const { makeBadgeData: getBadgeData } = require('../../lib/badge-data')
 const {
   coveragePercentage: coveragePercentageColor,
-} = require('../../lib/color-formatters')
+} = require('../color-formatters')
 
 // This legacy service should be rewritten to use e.g. BaseJsonService.
 //
diff --git a/services/cpan/cpan-version.service.js b/services/cpan/cpan-version.service.js
index f6800b1ef26e775e168b3f3474c956db6be260b2..57a60bda4ce160c84b0f44de01223f957f10e352 100644
--- a/services/cpan/cpan-version.service.js
+++ b/services/cpan/cpan-version.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { renderVersionBadge } = require('../../lib/version')
+const { renderVersionBadge } = require('../version')
 const BaseCpanService = require('./cpan')
 
 module.exports = class CpanVersion extends BaseCpanService {
diff --git a/services/cran/cran.service.js b/services/cran/cran.service.js
index 3a9638b73131a356d256cbf5d6cb055adb7f848a..305dc00a01c2e1ef55889a04ba8f0cfddca84792 100644
--- a/services/cran/cran.service.js
+++ b/services/cran/cran.service.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { BaseJsonService } = require('..')
-const { renderVersionBadge } = require('../../lib/version')
+const { renderVersionBadge } = require('../version')
 
 const schema = Joi.object({
   License: Joi.string().required(),
diff --git a/services/crates/crates-downloads.service.js b/services/crates/crates-downloads.service.js
index 9a5990357bf2ba85fd4251a8de04de424b090e89..0abd998ae11b5920701d762b3176c3208b293609 100644
--- a/services/crates/crates-downloads.service.js
+++ b/services/crates/crates-downloads.service.js
@@ -1,9 +1,7 @@
 'use strict'
 
-const {
-  downloadCount: downloadCountColor,
-} = require('../../lib/color-formatters')
-const { metric } = require('../../lib/text-formatters')
+const { downloadCount: downloadCountColor } = require('../color-formatters')
+const { metric } = require('../text-formatters')
 const { BaseCratesService, keywords } = require('./crates-base')
 
 module.exports = class CratesDownloads extends BaseCratesService {
diff --git a/services/crates/crates-version.service.js b/services/crates/crates-version.service.js
index a526d6fa41ffdc4a6f040f9bb5704f06cc7c7106..43119c1614755d5b9d85a298ed0593475a3d4933 100644
--- a/services/crates/crates-version.service.js
+++ b/services/crates/crates-version.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { renderVersionBadge } = require('../../lib/version')
+const { renderVersionBadge } = require('../version')
 const { BaseCratesService, keywords } = require('./crates-base')
 
 module.exports = class CratesVersion extends BaseCratesService {
diff --git a/services/ctan/ctan.service.js b/services/ctan/ctan.service.js
index 0c1deab77083924ff1ab81b9ceebf08ea89cfdbd..d647b064f1e259c0e15aab1de636a4a034bcb15b 100644
--- a/services/ctan/ctan.service.js
+++ b/services/ctan/ctan.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const { renderLicenseBadge } = require('../../lib/licenses')
-const { renderVersionBadge } = require('../../lib/version')
+const { renderLicenseBadge } = require('../licenses')
+const { renderVersionBadge } = require('../version')
 const { BaseJsonService } = require('..')
 
 const schema = Joi.object({
diff --git a/services/date/date.service.js b/services/date/date.service.js
index f3727a8e6ad5f2b4be61bc78beffcfb87e152676..1f0a3f0839712e0e384cacf312e89b1a32911e7b 100644
--- a/services/date/date.service.js
+++ b/services/date/date.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { formatRelativeDate } = require('../../lib/text-formatters')
+const { formatRelativeDate } = require('../text-formatters')
 const { BaseService } = require('..')
 
 const documentation = `
diff --git a/services/discourse/discourse.service.js b/services/discourse/discourse.service.js
index 96a8fa710e7f73b8ce14d83d72abec6e8e2ae809..ab5e38c29cd10e1740081f212b597f2741ec17e5 100644
--- a/services/discourse/discourse.service.js
+++ b/services/discourse/discourse.service.js
@@ -3,7 +3,7 @@
 const camelcase = require('camelcase')
 const Joi = require('joi')
 const { BaseJsonService } = require('..')
-const { metric } = require('../../lib/text-formatters')
+const { metric } = require('../text-formatters')
 const { nonNegativeInteger } = require('../validators')
 
 const schema = Joi.object({
diff --git a/services/docker/docker-build.tester.js b/services/docker/docker-build.tester.js
index c2515fe247cad4f1f1a731936917ca4f06e08d2b..591cea5c4564a3dfac56442a142bd2fa80980a1c 100644
--- a/services/docker/docker-build.tester.js
+++ b/services/docker/docker-build.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { isBuildStatus } = require('../../lib/build-status')
+const { isBuildStatus } = require('../build-status')
 const t = (module.exports = require('../tester').createServiceTester())
 const { dockerBlue } = require('./docker-helpers')
 
diff --git a/services/docker/docker-pulls.service.js b/services/docker/docker-pulls.service.js
index 96deddfb8afef1859ebab983c2e36e9a59e5cd7b..e01b7c4c4562693b435524698398dc5e5f5336e7 100644
--- a/services/docker/docker-pulls.service.js
+++ b/services/docker/docker-pulls.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { metric } = require('../../lib/text-formatters')
+const { metric } = require('../text-formatters')
 const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 const {
diff --git a/services/docker/docker-stars.service.js b/services/docker/docker-stars.service.js
index f17b4016327ff8f400d8eba5e4c0a525d12dea60..72bad7c408c11a80a83515d31eb84cf6bc6b5b34 100644
--- a/services/docker/docker-stars.service.js
+++ b/services/docker/docker-stars.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { metric } = require('../../lib/text-formatters')
+const { metric } = require('../text-formatters')
 const { BaseService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 const {
diff --git a/services/dub/dub-download.service.js b/services/dub/dub-download.service.js
index 0cfa3ddb19610215b852d0484f89e1c19a8edf29..ac9061a559f822798ef578931cc8591e638166f2 100644
--- a/services/dub/dub-download.service.js
+++ b/services/dub/dub-download.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const { metric } = require('../../lib/text-formatters')
-const { downloadCount } = require('../../lib/color-formatters')
+const { metric } = require('../text-formatters')
+const { downloadCount } = require('../color-formatters')
 const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
diff --git a/services/dub/dub-license.service.js b/services/dub/dub-license.service.js
index ca064350ae9802b6cc24b7f782d256f1e09ee0b9..9d58a2e647d737b3ea7ab090b38fe31690b0f40b 100644
--- a/services/dub/dub-license.service.js
+++ b/services/dub/dub-license.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { renderLicenseBadge } = require('../../lib/licenses')
+const { renderLicenseBadge } = require('../licenses')
 const { BaseJsonService } = require('..')
 
 const schema = Joi.object({
diff --git a/services/dub/dub-version.service.js b/services/dub/dub-version.service.js
index c8acc910dd1d875769de22c89a00b2498c7e6f89..bdfad6e92e8c9b392069877ee520ff1352918311 100644
--- a/services/dub/dub-version.service.js
+++ b/services/dub/dub-version.service.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { BaseJsonService } = require('..')
-const { renderVersionBadge } = require('../../lib/version')
+const { renderVersionBadge } = require('../version')
 
 const schema = Joi.string().required()
 
diff --git a/services/eclipse-marketplace/eclipse-marketplace-downloads.service.js b/services/eclipse-marketplace/eclipse-marketplace-downloads.service.js
index 991441d4f87c6f7c54e240ada5e33fbf592e93aa..5f4020f292c05bcd6343f96e7bd4ded153f0f566 100644
--- a/services/eclipse-marketplace/eclipse-marketplace-downloads.service.js
+++ b/services/eclipse-marketplace/eclipse-marketplace-downloads.service.js
@@ -1,10 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const { metric } = require('../../lib/text-formatters')
-const {
-  downloadCount: downloadCountColor,
-} = require('../../lib/color-formatters')
+const { metric } = require('../text-formatters')
+const { downloadCount: downloadCountColor } = require('../color-formatters')
 const { nonNegativeInteger } = require('../validators')
 const EclipseMarketplaceBase = require('./eclipse-marketplace-base')
 
diff --git a/services/eclipse-marketplace/eclipse-marketplace-update.service.js b/services/eclipse-marketplace/eclipse-marketplace-update.service.js
index 41ea27e2a669c97138c27140075ab3fa8c70cbf9..d4b148d6cb518038a59f7e5affc2f05261748262 100644
--- a/services/eclipse-marketplace/eclipse-marketplace-update.service.js
+++ b/services/eclipse-marketplace/eclipse-marketplace-update.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const { formatDate } = require('../../lib/text-formatters')
-const { age: ageColor } = require('../../lib/color-formatters')
+const { formatDate } = require('../text-formatters')
+const { age: ageColor } = require('../color-formatters')
 const { nonNegativeInteger } = require('../validators')
 const EclipseMarketplaceBase = require('./eclipse-marketplace-base')
 
diff --git a/services/eclipse-marketplace/eclipse-marketplace-version.service.js b/services/eclipse-marketplace/eclipse-marketplace-version.service.js
index d9b5dda00b486b0fa4ff5eaff629cbfe65f232d5..2211dcfd9da5c24f1952cc3e15fd468de863cd44 100644
--- a/services/eclipse-marketplace/eclipse-marketplace-version.service.js
+++ b/services/eclipse-marketplace/eclipse-marketplace-version.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { renderVersionBadge } = require('../../lib/version')
+const { renderVersionBadge } = require('../version')
 const EclipseMarketplaceBase = require('./eclipse-marketplace-base')
 
 const versionResponseSchema = Joi.object({
diff --git a/services/elm-package/elm-package.service.js b/services/elm-package/elm-package.service.js
index 994b697bad6455fb520e3335d0d341a126eb91f5..6b4a180e67c001bf8f79becec4faad05af839c93 100644
--- a/services/elm-package/elm-package.service.js
+++ b/services/elm-package/elm-package.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { renderVersionBadge } = require('../../lib/version')
+const { renderVersionBadge } = require('../version')
 const { BaseJsonService } = require('..')
 const { semver } = require('../validators')
 
diff --git a/services/f-droid/f-droid.service.js b/services/f-droid/f-droid.service.js
index 3f2b6279c06a207c9a9eed333311fc831fc494cf..503bd2b951709845fdbc940bdedfbc64a4f069b5 100644
--- a/services/f-droid/f-droid.service.js
+++ b/services/f-droid/f-droid.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const { addv } = require('../../lib/text-formatters')
-const { version: versionColor } = require('../../lib/color-formatters')
+const { addv } = require('../text-formatters')
+const { version: versionColor } = require('../color-formatters')
 const { BaseYamlService, InvalidResponse } = require('..')
 
 const schema = Joi.object({
diff --git a/services/gem/gem-downloads.service.js b/services/gem/gem-downloads.service.js
index 88b7fabf7058fb01b09a661f0c0f102fee9884e1..95454c81dd27369f082cb95412d579f34e0c8099 100644
--- a/services/gem/gem-downloads.service.js
+++ b/services/gem/gem-downloads.service.js
@@ -2,9 +2,9 @@
 
 const semver = require('semver')
 const Joi = require('joi')
-const { downloadCount } = require('../../lib/color-formatters')
-const { metric } = require('../../lib/text-formatters')
-const { latest: latestVersion } = require('../../lib/version')
+const { downloadCount } = require('../color-formatters')
+const { metric } = require('../text-formatters')
+const { latest: latestVersion } = require('../version')
 const { BaseJsonService, InvalidParameter, InvalidResponse } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
diff --git a/services/gem/gem-owner.service.js b/services/gem/gem-owner.service.js
index 95a8fbbc09686b90a9a84fe5d284261d8896be33..02cb4d869f4b04b5f0f194df6457cc885f60d5e8 100644
--- a/services/gem/gem-owner.service.js
+++ b/services/gem/gem-owner.service.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { BaseJsonService } = require('..')
-const { floorCount: floorCountColor } = require('../../lib/color-formatters')
+const { floorCount: floorCountColor } = require('../color-formatters')
 
 const ownerSchema = Joi.array().required()
 
diff --git a/services/gem/gem-rank.service.js b/services/gem/gem-rank.service.js
index 2e2e704fee5ccae335c082fcfa905e6e30bf1d0a..55bdf2f4639ec62d43c4d300b38e81cbb66b18bb 100644
--- a/services/gem/gem-rank.service.js
+++ b/services/gem/gem-rank.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const { floorCount } = require('../../lib/color-formatters')
-const { ordinalNumber } = require('../../lib/text-formatters')
+const { floorCount } = require('../color-formatters')
+const { ordinalNumber } = require('../text-formatters')
 const { BaseJsonService, InvalidResponse } = require('..')
 
 const keywords = ['ruby']
diff --git a/services/gem/gem-version.service.js b/services/gem/gem-version.service.js
index bb384629cd121e2d973f66833f082d8cad6eb961..a6247174e0098fcd53d30d331e6bd98e4b18cbe6 100644
--- a/services/gem/gem-version.service.js
+++ b/services/gem/gem-version.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { renderVersionBadge } = require('../../lib/version')
+const { renderVersionBadge } = require('../version')
 const { BaseJsonService } = require('..')
 
 const schema = Joi.object({
diff --git a/services/github/github-commit-activity.service.js b/services/github/github-commit-activity.service.js
index a7940c012956111b22f189a0de62adef7a9e7f32..2cde67f500b71c5e13a66f551d334aa3dc828f9b 100644
--- a/services/github/github-commit-activity.service.js
+++ b/services/github/github-commit-activity.service.js
@@ -3,7 +3,7 @@
 const LegacyService = require('../legacy-service')
 const { makeBadgeData: getBadgeData } = require('../../lib/badge-data')
 const { makeLogo: getLogo } = require('../../lib/logos')
-const { metric } = require('../../lib/text-formatters')
+const { metric } = require('../text-formatters')
 const {
   documentation,
   checkErrorResponse: githubCheckErrorResponse,
diff --git a/services/github/github-contributors.service.js b/services/github/github-contributors.service.js
index f2b376214fcc0f5a81d0a53b0af6fdb6406b0900..6e532f5378dc97dbcae238022a491d0d5c3949b4 100644
--- a/services/github/github-contributors.service.js
+++ b/services/github/github-contributors.service.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const parseLinkHeader = require('parse-link-header')
-const { renderContributorBadge } = require('../../lib/contributor-count')
+const { renderContributorBadge } = require('../contributor-count')
 const { GithubAuthService } = require('./github-auth-service')
 const { documentation, errorMessagesFor } = require('./github-helpers')
 
diff --git a/services/github/github-downloads.service.js b/services/github/github-downloads.service.js
index 2709d927bb836545b3f0cfb8703417b17e3ea6b2..4f3323b65865db1caa5cecec14b41214960d6a21 100644
--- a/services/github/github-downloads.service.js
+++ b/services/github/github-downloads.service.js
@@ -3,7 +3,7 @@
 const LegacyService = require('../legacy-service')
 const { makeBadgeData: getBadgeData } = require('../../lib/badge-data')
 const { makeLogo: getLogo } = require('../../lib/logos')
-const { metric } = require('../../lib/text-formatters')
+const { metric } = require('../text-formatters')
 const {
   documentation,
   checkErrorResponse: githubCheckErrorResponse,
diff --git a/services/github/github-helpers.js b/services/github/github-helpers.js
index 95d7f1b98834e738cec43ccd25119d804a45207e..6e31be25d0edce13a9975b78d94528ddbb9679b7 100644
--- a/services/github/github-helpers.js
+++ b/services/github/github-helpers.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const serverSecrets = require('../../lib/server-secrets')
-const { colorScale } = require('../../lib/color-formatters')
+const { colorScale } = require('../color-formatters')
 const {
   checkErrorResponse: standardCheckErrorResponse,
 } = require('../../lib/error-helper')
diff --git a/services/github/github-issue-detail.service.js b/services/github/github-issue-detail.service.js
index c1ca7fe7f0ee22f0876030f71f1087f9ed0dcf07..c4debed4f5e140ac1f4b12437b1efa16bb3b51aa 100644
--- a/services/github/github-issue-detail.service.js
+++ b/services/github/github-issue-detail.service.js
@@ -6,8 +6,8 @@ const {
   makeBadgeData: getBadgeData,
 } = require('../../lib/badge-data')
 const { makeLogo: getLogo } = require('../../lib/logos')
-const { formatDate } = require('../../lib/text-formatters')
-const { age: ageColor } = require('../../lib/color-formatters')
+const { formatDate } = require('../text-formatters')
+const { age: ageColor } = require('../color-formatters')
 const {
   documentation,
   stateColor: githubStateColor,
diff --git a/services/github/github-issues.service.js b/services/github/github-issues.service.js
index 4b9ba499203c603593c398d7efde81000b0b9815..85340a31385314abd4a84ea4aae4e75145afb2a6 100644
--- a/services/github/github-issues.service.js
+++ b/services/github/github-issues.service.js
@@ -3,7 +3,7 @@
 const LegacyService = require('../legacy-service')
 const { makeBadgeData: getBadgeData } = require('../../lib/badge-data')
 const { makeLogo: getLogo } = require('../../lib/logos')
-const { metric } = require('../../lib/text-formatters')
+const { metric } = require('../text-formatters')
 const {
   documentation,
   checkErrorResponse: githubCheckErrorResponse,
diff --git a/services/github/github-last-commit.service.js b/services/github/github-last-commit.service.js
index a72dd102c6ae987ce8e64c7e1f965f8759f5ac89..8eb5c350c464ba39527172b9360226d1dc7bccff 100644
--- a/services/github/github-last-commit.service.js
+++ b/services/github/github-last-commit.service.js
@@ -3,8 +3,8 @@
 const LegacyService = require('../legacy-service')
 const { makeBadgeData: getBadgeData } = require('../../lib/badge-data')
 const { makeLogo: getLogo } = require('../../lib/logos')
-const { formatDate } = require('../../lib/text-formatters')
-const { age: ageColor } = require('../../lib/color-formatters')
+const { formatDate } = require('../text-formatters')
+const { age: ageColor } = require('../color-formatters')
 const {
   documentation,
   checkErrorResponse: githubCheckErrorResponse,
diff --git a/services/github/github-license.service.js b/services/github/github-license.service.js
index 6f35df555eb2be975478e6b84f78eb32d7c707c0..479187742b1603a87b0623b41e3f026be42b31a2 100644
--- a/services/github/github-license.service.js
+++ b/services/github/github-license.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { renderLicenseBadge } = require('../../lib/licenses')
+const { renderLicenseBadge } = require('../licenses')
 const { GithubAuthService } = require('./github-auth-service')
 const { documentation, errorMessagesFor } = require('./github-helpers')
 
diff --git a/services/github/github-license.tester.js b/services/github/github-license.tester.js
index c482ce80f05aff3bff9d483b627eb14180455bbf..b3cf40d59a653340151b1187eac49e039e199bfb 100644
--- a/services/github/github-license.tester.js
+++ b/services/github/github-license.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { licenseToColor } = require('../../lib/licenses')
+const { licenseToColor } = require('../licenses')
 const t = (module.exports = require('../tester').createServiceTester())
 
 const publicDomainLicenseColor = licenseToColor('CC0-1.0')
diff --git a/services/github/github-manifest.service.js b/services/github/github-manifest.service.js
index c5aecb9413fa4f387a032971e5b168dc0027b115..3aaac1c90d7445fbc6e190df89c384977cd52543 100644
--- a/services/github/github-manifest.service.js
+++ b/services/github/github-manifest.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { renderVersionBadge } = require('../../lib/version')
+const { renderVersionBadge } = require('../version')
 const {
   individualValueSchema,
   transformAndValidate,
diff --git a/services/github/github-package-json.service.js b/services/github/github-package-json.service.js
index 9abf7d25b69c65d14a17521c529591df99519d63..aa239786133acd20dd2d61f27c31d98421b0f790 100644
--- a/services/github/github-package-json.service.js
+++ b/services/github/github-package-json.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { renderVersionBadge } = require('../../lib/version')
+const { renderVersionBadge } = require('../version')
 const {
   transformAndValidate,
   renderDynamicBadge,
diff --git a/services/github/github-release-date.service.js b/services/github/github-release-date.service.js
index 9a43b6f09dbe2f6ac03440b2403131b94b477684..5ebae883ac1bc6a7b995a11f1a351934f64774c5 100644
--- a/services/github/github-release-date.service.js
+++ b/services/github/github-release-date.service.js
@@ -4,8 +4,8 @@ const moment = require('moment')
 const LegacyService = require('../legacy-service')
 const { makeBadgeData: getBadgeData } = require('../../lib/badge-data')
 const { makeLogo: getLogo } = require('../../lib/logos')
-const { formatDate } = require('../../lib/text-formatters')
-const { age } = require('../../lib/color-formatters')
+const { formatDate } = require('../text-formatters')
+const { age } = require('../color-formatters')
 const { documentation } = require('./github-helpers')
 
 // This legacy service should be rewritten to use e.g. BaseJsonService.
diff --git a/services/github/github-release.service.js b/services/github/github-release.service.js
index 77eff90bf5aa61586f14a19bef2cc75be26577db..ec708376a6026633b85efa0cc4d80f4b5a4bc62d 100644
--- a/services/github/github-release.service.js
+++ b/services/github/github-release.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { addv } = require('../../lib/text-formatters')
+const { addv } = require('../text-formatters')
 const { GithubAuthService } = require('./github-auth-service')
 const { errorMessagesFor, documentation } = require('./github-helpers')
 
diff --git a/services/github/github-search.service.js b/services/github/github-search.service.js
index 4cd64cddae0fd4d0cbcfe5d8ada8b068e85ee534..0e1d65b0af6d5fd1a703b54d3ecddcc4f5c4d292 100644
--- a/services/github/github-search.service.js
+++ b/services/github/github-search.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { metric } = require('../../lib/text-formatters')
+const { metric } = require('../text-formatters')
 const { nonNegativeInteger } = require('../validators')
 const { GithubAuthService } = require('./github-auth-service')
 const { errorMessagesFor, documentation } = require('./github-helpers')
diff --git a/services/github/github-stars.service.js b/services/github/github-stars.service.js
index e3ec3088614ee2faaeb1b62cc2cd000a689e03da..d65d230340ba3e346e158209ce27c08f35d4dc20 100644
--- a/services/github/github-stars.service.js
+++ b/services/github/github-stars.service.js
@@ -3,7 +3,7 @@
 const LegacyService = require('../legacy-service')
 const { makeBadgeData: getBadgeData } = require('../../lib/badge-data')
 const { makeLogo: getLogo } = require('../../lib/logos')
-const { metric } = require('../../lib/text-formatters')
+const { metric } = require('../text-formatters')
 const {
   documentation,
   checkErrorResponse: githubCheckErrorResponse,
diff --git a/services/github/github-tag.service.js b/services/github/github-tag.service.js
index 4401933387c7f3be02b9f7ad46793965941070e9..3cb1d80a7484ef1643c713f0c7ca9015e3849753 100644
--- a/services/github/github-tag.service.js
+++ b/services/github/github-tag.service.js
@@ -3,9 +3,9 @@
 const LegacyService = require('../legacy-service')
 const { makeBadgeData: getBadgeData } = require('../../lib/badge-data')
 const { makeLogo: getLogo } = require('../../lib/logos')
-const { addv: versionText } = require('../../lib/text-formatters')
-const { version: versionColor } = require('../../lib/color-formatters')
-const { latest: latestVersion } = require('../../lib/version')
+const { addv: versionText } = require('../text-formatters')
+const { version: versionColor } = require('../color-formatters')
+const { latest: latestVersion } = require('../version')
 const {
   documentation,
   checkErrorResponse: githubCheckErrorResponse,
diff --git a/services/gitlab/gitlab-pipeline-status.service.js b/services/gitlab/gitlab-pipeline-status.service.js
index 91dedb22c03116b568c626c0f64a8bdc785e2758..f9e12aacce3429f9929ed305025c0021675f3979 100644
--- a/services/gitlab/gitlab-pipeline-status.service.js
+++ b/services/gitlab/gitlab-pipeline-status.service.js
@@ -1,10 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const {
-  isBuildStatus,
-  renderBuildStatusBadge,
-} = require('../../lib/build-status')
+const { isBuildStatus, renderBuildStatusBadge } = require('../build-status')
 const { BaseSvgScrapingService, NotFound } = require('..')
 const { optionalUrl } = require('../validators')
 
diff --git a/services/gitlab/gitlab-pipeline-status.tester.js b/services/gitlab/gitlab-pipeline-status.tester.js
index a0cdb600f46d5991dce828c33aa64186a091680a..9f93440095d54a28f168b710074f385d7a1c0f63 100644
--- a/services/gitlab/gitlab-pipeline-status.tester.js
+++ b/services/gitlab/gitlab-pipeline-status.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { isBuildStatus } = require('../../lib/build-status')
+const { isBuildStatus } = require('../build-status')
 const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Pipeline status')
diff --git a/services/hackage/hackage-version.service.js b/services/hackage/hackage-version.service.js
index ed3e85cbaad925299ca90204c8806adb025ab4c2..738b5397b9c13a8d9986846ad84c9b77ed694b82 100644
--- a/services/hackage/hackage-version.service.js
+++ b/services/hackage/hackage-version.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const { BaseService, InvalidResponse } = require('..')
-const { renderVersionBadge } = require('../../lib/version')
+const { renderVersionBadge } = require('../version')
 
 module.exports = class HackageVersion extends BaseService {
   static get category() {
diff --git a/services/hexpm/hexpm.service.js b/services/hexpm/hexpm.service.js
index 418d6c31d9ae3d9054f4a856322fbe12a22c8f2e..237772fb9ab0f22655f4c3969afa68e199332a37 100644
--- a/services/hexpm/hexpm.service.js
+++ b/services/hexpm/hexpm.service.js
@@ -1,11 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const { metric, addv, maybePluralize } = require('../../lib/text-formatters')
-const {
-  downloadCount,
-  version: versionColor,
-} = require('../../lib/color-formatters')
+const { metric, addv, maybePluralize } = require('../text-formatters')
+const { downloadCount, version: versionColor } = require('../color-formatters')
 const { BaseJsonService } = require('..')
 
 const hexSchema = Joi.object({
diff --git a/services/homebrew/homebrew.service.js b/services/homebrew/homebrew.service.js
index 5c500fbd9891243700798ca9587e0ad7a5232db5..71f4b07a07521a95ce7884cca8020905cb0bdb50 100644
--- a/services/homebrew/homebrew.service.js
+++ b/services/homebrew/homebrew.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { renderVersionBadge } = require('../../lib/version')
+const { renderVersionBadge } = require('../version')
 const { BaseJsonService } = require('..')
 
 const schema = Joi.object({
diff --git a/services/itunes/itunes.service.js b/services/itunes/itunes.service.js
index 4ab5ff24e21f1cb3c442abb9453c950891c45503..fb84c61e84d75635832ad6184722bfbc993b559c 100644
--- a/services/itunes/itunes.service.js
+++ b/services/itunes/itunes.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { renderVersionBadge } = require('../../lib/version')
+const { renderVersionBadge } = require('../version')
 const { BaseJsonService, NotFound } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
diff --git a/services/jenkins/jenkins-coverage.service.js b/services/jenkins/jenkins-coverage.service.js
index 02970666b8c66dd26e6b6e1a939b90575983852c..8b174e81242b316df929cc3acaa38f6ff5042ec6 100644
--- a/services/jenkins/jenkins-coverage.service.js
+++ b/services/jenkins/jenkins-coverage.service.js
@@ -5,7 +5,7 @@ const { BaseJsonService } = require('..')
 const serverSecrets = require('../../lib/server-secrets')
 const {
   coveragePercentage: coveragePercentageColor,
-} = require('../../lib/color-formatters')
+} = require('../color-formatters')
 
 const jacocoCoverageSchema = Joi.object({
   instructionCoverage: Joi.object({
diff --git a/services/jenkins/jenkins-plugin-installs.service.js b/services/jenkins/jenkins-plugin-installs.service.js
index 459b876a7ce0653c0641937b3c6ef0b3751812a4..a86433d54ae80ac924f5812dac3f516a6e9d432a 100644
--- a/services/jenkins/jenkins-plugin-installs.service.js
+++ b/services/jenkins/jenkins-plugin-installs.service.js
@@ -1,10 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const {
-  downloadCount: downloadCountColor,
-} = require('../../lib/color-formatters')
-const { metric } = require('../../lib/text-formatters')
+const { downloadCount: downloadCountColor } = require('../color-formatters')
+const { metric } = require('../text-formatters')
 const { BaseJsonService, NotFound } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
diff --git a/services/jenkins/jenkins-plugin-version.service.js b/services/jenkins/jenkins-plugin-version.service.js
index faf0bf7c3c13b90bae7f7211ef697d3d85a5578b..facea3e515f5377c7206846242febfe44ad59cff 100644
--- a/services/jenkins/jenkins-plugin-version.service.js
+++ b/services/jenkins/jenkins-plugin-version.service.js
@@ -3,8 +3,8 @@
 const LegacyService = require('../legacy-service')
 const { makeBadgeData: getBadgeData } = require('../../lib/badge-data')
 const { regularUpdate } = require('../../lib/regular-update')
-const { addv: versionText } = require('../../lib/text-formatters')
-const { version: versionColor } = require('../../lib/color-formatters')
+const { addv: versionText } = require('../text-formatters')
+const { version: versionColor } = require('../color-formatters')
 
 // This legacy service should be rewritten to use e.g. BaseJsonService.
 //
diff --git a/services/jetbrains/jetbrains-downloads.service.js b/services/jetbrains/jetbrains-downloads.service.js
index e08305a3b84e01c1de7ff192f06e455fe6e7e530..108767a49d2159cebb4f5b505dc5af52ec97b7f3 100644
--- a/services/jetbrains/jetbrains-downloads.service.js
+++ b/services/jetbrains/jetbrains-downloads.service.js
@@ -1,10 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const { metric } = require('../../lib/text-formatters')
-const {
-  downloadCount: downloadCountColor,
-} = require('../../lib/color-formatters')
+const { metric } = require('../text-formatters')
+const { downloadCount: downloadCountColor } = require('../color-formatters')
 const { nonNegativeInteger } = require('../validators')
 const JetbrainsBase = require('./jetbrains-base')
 
diff --git a/services/jetbrains/jetbrains-version.service.js b/services/jetbrains/jetbrains-version.service.js
index ce3643024edcfea87ebe221b5b495bdb365c7bbc..27ed1f48ed5529c2448d8543a72dee1c14d23216 100644
--- a/services/jetbrains/jetbrains-version.service.js
+++ b/services/jetbrains/jetbrains-version.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { renderVersionBadge } = require('../../lib/version')
+const { renderVersionBadge } = require('../version')
 const JetbrainsBase = require('./jetbrains-base')
 
 const schema = Joi.object({
diff --git a/services/jitpack/jitpack.service.js b/services/jitpack/jitpack.service.js
index e8fc449b1afd6505cea3186dbf702ffa8c7ab864..33429d958285f044d5a689e816e8d28ec2ed4ba7 100644
--- a/services/jitpack/jitpack.service.js
+++ b/services/jitpack/jitpack.service.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { BaseJsonService } = require('..')
-const { renderVersionBadge } = require('../../lib/version')
+const { renderVersionBadge } = require('../version')
 
 const schema = Joi.object({
   version: Joi.string().required(),
diff --git a/services/jsdelivr/jsdelivr-base.js b/services/jsdelivr/jsdelivr-base.js
index fc3002abeae80e1232b070be11a40b25d15123c0..949dbc32ac78d0993cd3351c70521e91e2f6f6ba 100644
--- a/services/jsdelivr/jsdelivr-base.js
+++ b/services/jsdelivr/jsdelivr-base.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const { downloadCount } = require('../../lib/color-formatters')
-const { metric } = require('../../lib/text-formatters')
+const { downloadCount } = require('../color-formatters')
+const { metric } = require('../text-formatters')
 const { BaseJsonService } = require('..')
 
 const schema = Joi.object({
diff --git a/services/lgtm/lgtm-alerts.service.js b/services/lgtm/lgtm-alerts.service.js
index 60460b1d320ea2dc63341e87e4f01b46913d3358..cad99dcc21df5c4e34f48beef48c49f08590f318 100644
--- a/services/lgtm/lgtm-alerts.service.js
+++ b/services/lgtm/lgtm-alerts.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { metric } = require('../../lib/text-formatters')
+const { metric } = require('../text-formatters')
 const LgtmBaseService = require('./lgtm-base')
 
 module.exports = class LgtmAlerts extends LgtmBaseService {
diff --git a/services/liberapay/liberapay-base.js b/services/liberapay/liberapay-base.js
index 97fbdf18fcbb5adf23bde1983ff397ea85c6df13..f4978f5cb4d558341cdf6570e1372252fe4a3aa1 100644
--- a/services/liberapay/liberapay-base.js
+++ b/services/liberapay/liberapay-base.js
@@ -1,9 +1,9 @@
 'use strict'
 
 const Joi = require('joi')
-const { metric } = require('../../lib/text-formatters')
+const { metric } = require('../text-formatters')
 const { BaseJsonService } = require('..')
-const { colorScale } = require('../../lib/color-formatters')
+const { colorScale } = require('../color-formatters')
 const { nonNegativeInteger } = require('../validators')
 
 const schema = Joi.object({
diff --git a/services/liberapay/liberapay-goal.service.js b/services/liberapay/liberapay-goal.service.js
index 23f0ab4f8a87c398e9d42e38f7af886c7e7925be..a2a77061bbe182b7adca69868a4f113ee9a2fd76 100644
--- a/services/liberapay/liberapay-goal.service.js
+++ b/services/liberapay/liberapay-goal.service.js
@@ -2,7 +2,7 @@
 
 const { InvalidResponse } = require('..')
 const { LiberapayBase } = require('./liberapay-base')
-const { colorScale } = require('../../lib/color-formatters')
+const { colorScale } = require('../color-formatters')
 
 module.exports = class LiberapayGoal extends LiberapayBase {
   static get route() {
diff --git a/services/liberapay/liberapay-patrons.service.js b/services/liberapay/liberapay-patrons.service.js
index 72455543a3692ff1eff2098ef610d0d403ca513e..1f8e7fc60d6f364799f4e1e5f0f7953cba9cc895 100644
--- a/services/liberapay/liberapay-patrons.service.js
+++ b/services/liberapay/liberapay-patrons.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
-const { metric } = require('../../lib/text-formatters')
-const { colorScale } = require('../../lib/color-formatters')
+const { metric } = require('../text-formatters')
+const { colorScale } = require('../color-formatters')
 const { LiberapayBase } = require('./liberapay-base')
 
 module.exports = class LiberapayPatrons extends LiberapayBase {
diff --git a/services/librariesio/librariesio-dependent-repos.service.js b/services/librariesio/librariesio-dependent-repos.service.js
index 0184b51a410d49e94a41e1c8550a154b183801aa..82537fec709de173c90725b49d27e1d81a37aee7 100644
--- a/services/librariesio/librariesio-dependent-repos.service.js
+++ b/services/librariesio/librariesio-dependent-repos.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { metric } = require('../../lib/text-formatters')
+const { metric } = require('../text-formatters')
 const LibrariesIoBase = require('./librariesio-base')
 
 // https://libraries.io/api#project-dependent-repositories
diff --git a/services/librariesio/librariesio-dependents.service.js b/services/librariesio/librariesio-dependents.service.js
index 6dbf4cc4a05c5b148c429eeabd30a60461998e38..49805f84d6284dbee30aa0f702d8c4e4ed73d4c4 100644
--- a/services/librariesio/librariesio-dependents.service.js
+++ b/services/librariesio/librariesio-dependents.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { metric } = require('../../lib/text-formatters')
+const { metric } = require('../text-formatters')
 const LibrariesIoBase = require('./librariesio-base')
 
 // https://libraries.io/api#project-dependents
diff --git a/services/librariesio/librariesio-sourcerank.service.js b/services/librariesio/librariesio-sourcerank.service.js
index 006d30048ca83c2799c7877dcbca4c62d472aff0..46009baf794f5f39474587c4e40fc0cae1f5ead5 100644
--- a/services/librariesio/librariesio-sourcerank.service.js
+++ b/services/librariesio/librariesio-sourcerank.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { colorScale } = require('../../lib/color-formatters')
+const { colorScale } = require('../color-formatters')
 const LibrariesIoBase = require('./librariesio-base')
 
 const sourceRankColor = colorScale([10, 15, 20, 25, 30])
diff --git a/lib/licenses.js b/services/licenses.js
similarity index 97%
rename from lib/licenses.js
rename to services/licenses.js
index 2ce34ad2e2f24618596d2793b14446f7c25b9102..05e8c457eabd4bf348de612263af667ce31f75f8 100644
--- a/lib/licenses.js
+++ b/services/licenses.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { toArray } = require('./badge-data')
+const { toArray } = require('../lib/badge-data')
 
 const licenseTypes = {
   // permissive licenses - not public domain and not copyleft
diff --git a/lib/licenses.spec.js b/services/licenses.spec.js
similarity index 100%
rename from lib/licenses.spec.js
rename to services/licenses.spec.js
diff --git a/services/luarocks/luarocks-version-helpers.js b/services/luarocks/luarocks-version-helpers.js
index 8ebc42d0e31b1a7ac1c9446b80ad7db7c469d7b0..66c0e0fc194fa99f9d8995708f5c403f22e663e7 100644
--- a/services/luarocks/luarocks-version-helpers.js
+++ b/services/luarocks/luarocks-version-helpers.js
@@ -5,7 +5,7 @@
  */
 'use strict'
 
-const { omitv } = require('../../lib/text-formatters')
+const { omitv } = require('../text-formatters')
 
 // Compare two arrays containing split and transformed to
 // positive/negative numbers parts of version strings,
diff --git a/services/luarocks/luarocks.service.js b/services/luarocks/luarocks.service.js
index abd97b810f142986c35d09b7ec71a82b56ed2195..6da0d91b0889ff78c99fd833a584c77d15d34d8e 100644
--- a/services/luarocks/luarocks.service.js
+++ b/services/luarocks/luarocks.service.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { BaseJsonService, NotFound } = require('..')
-const { addv } = require('../../lib/text-formatters')
+const { addv } = require('../text-formatters')
 const { latestVersion } = require('./luarocks-version-helpers')
 
 const schema = Joi.object({
diff --git a/services/maven-central/maven-central.service.js b/services/maven-central/maven-central.service.js
index 652bcac99acf97d3845b6743f2fc6f0524db9503..8007083a7c24c3b2a906625c1e9bd573f5dab1b5 100644
--- a/services/maven-central/maven-central.service.js
+++ b/services/maven-central/maven-central.service.js
@@ -3,8 +3,8 @@
 const xml2js = require('xml2js')
 const LegacyService = require('../legacy-service')
 const { makeBadgeData: getBadgeData } = require('../../lib/badge-data')
-const { addv: versionText } = require('../../lib/text-formatters')
-const { version: versionColor } = require('../../lib/color-formatters')
+const { addv: versionText } = require('../text-formatters')
+const { version: versionColor } = require('../color-formatters')
 
 // This legacy service should be rewritten to use e.g. BaseJsonService.
 //
diff --git a/services/maven-metadata/maven-metadata.service.js b/services/maven-metadata/maven-metadata.service.js
index 13b1267a8c6d5d9e675c1bc5b6c9ea8ad6344cc9..1136257adaee5a9963ccfe0e0b403a57f3a8262d 100644
--- a/services/maven-metadata/maven-metadata.service.js
+++ b/services/maven-metadata/maven-metadata.service.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { BaseXmlService } = require('..')
-const { renderVersionBadge } = require('../../lib/version')
+const { renderVersionBadge } = require('../version')
 
 const schema = Joi.object({
   metadata: Joi.object({
diff --git a/services/nexus/nexus.service.js b/services/nexus/nexus.service.js
index 367c19f46ae3f8ba6e4ce0a4d56e8c8121efc047..955899899bde8d9c10180fb7e66722a172336bec 100644
--- a/services/nexus/nexus.service.js
+++ b/services/nexus/nexus.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const { version: versionColor } = require('../../lib/color-formatters')
-const { addv } = require('../../lib/text-formatters')
+const { version: versionColor } = require('../color-formatters')
+const { addv } = require('../text-formatters')
 const serverSecrets = require('../../lib/server-secrets')
 const { BaseJsonService, InvalidResponse, NotFound } = require('..')
 const {
diff --git a/services/nodeping/nodeping-uptime.service.js b/services/nodeping/nodeping-uptime.service.js
index 3b1c8ff5108c8574175b5b2cd48ef7806ff6202c..215cb6ed59b684e6172e39a009006176cb4fd07d 100644
--- a/services/nodeping/nodeping-uptime.service.js
+++ b/services/nodeping/nodeping-uptime.service.js
@@ -2,7 +2,7 @@
 
 const { BaseJsonService } = require('..')
 const Joi = require('joi')
-const { colorScale } = require('../../lib/color-formatters')
+const { colorScale } = require('../color-formatters')
 const colorFormatter = colorScale([99, 99.5, 100])
 
 const rowSchema = Joi.object().keys({
diff --git a/services/npm/npm-collaborators.service.js b/services/npm/npm-collaborators.service.js
index ce341a60f36bce7f6a71c326fe1aa2435da70ef1..36f0c98c1132d16b7441e71b06ceb304aeb60cf4 100644
--- a/services/npm/npm-collaborators.service.js
+++ b/services/npm/npm-collaborators.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { renderContributorBadge } = require('../../lib/contributor-count')
+const { renderContributorBadge } = require('../contributor-count')
 const NpmBase = require('./npm-base')
 
 const keywords = ['node']
diff --git a/services/npm/npm-downloads.service.js b/services/npm/npm-downloads.service.js
index a4283fc803a441309ed3b87dec8ede25a904f92d..922b7248c5b3ddc603ac97da96452b5b2bb3c27c 100644
--- a/services/npm/npm-downloads.service.js
+++ b/services/npm/npm-downloads.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { metric } = require('../../lib/text-formatters')
+const { metric } = require('../text-formatters')
 const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
diff --git a/services/npm/npm-license.service.js b/services/npm/npm-license.service.js
index 9e403b58cc1205ab90cdccb4c198778db33f994e..b22250f25287ef37609a53fee4ca604d79badc04 100644
--- a/services/npm/npm-license.service.js
+++ b/services/npm/npm-license.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { renderLicenseBadge } = require('../../lib/licenses')
+const { renderLicenseBadge } = require('../licenses')
 const { toArray } = require('../../lib/badge-data')
 const NpmBase = require('./npm-base')
 
diff --git a/services/npm/npm-version.service.js b/services/npm/npm-version.service.js
index a2211826eb605b5d9506f4c40aef261b5e1e8a3e..f5e45214dbee269793d5b11d564a452ec0c6206a 100644
--- a/services/npm/npm-version.service.js
+++ b/services/npm/npm-version.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { renderVersionBadge } = require('../../lib/version')
+const { renderVersionBadge } = require('../version')
 const { NotFound } = require('..')
 const NpmBase = require('./npm-base')
 
diff --git a/services/nuget/nuget-helpers.js b/services/nuget/nuget-helpers.js
index 8fefd7291c31aac4de73cf60666fa4b192738657..849cac3ef69573d4c56dcf11a4b60bf76e0fb3b5 100644
--- a/services/nuget/nuget-helpers.js
+++ b/services/nuget/nuget-helpers.js
@@ -1,9 +1,7 @@
 'use strict'
 
-const { metric, addv } = require('../../lib/text-formatters')
-const {
-  downloadCount: downloadCountColor,
-} = require('../../lib/color-formatters')
+const { metric, addv } = require('../text-formatters')
+const { downloadCount: downloadCountColor } = require('../color-formatters')
 
 function renderVersionBadge({ version, feed }) {
   let color
diff --git a/services/packagecontrol/packagecontrol.service.js b/services/packagecontrol/packagecontrol.service.js
index 304f0b0544b739d66cd9a82ed07b89dfda5d2a19..52569efef0c75cad2e12ca18a192b08a6ec5b52e 100644
--- a/services/packagecontrol/packagecontrol.service.js
+++ b/services/packagecontrol/packagecontrol.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const { metric } = require('../../lib/text-formatters')
-const { downloadCount } = require('../../lib/color-formatters')
+const { metric } = require('../text-formatters')
+const { downloadCount } = require('../color-formatters')
 const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
diff --git a/services/packagist/packagist-downloads.service.js b/services/packagist/packagist-downloads.service.js
index 6c61a763e50b0caaa66e81a74e51dfcaf827b9ec..6f774362c8a82020bec0103cd116d8d886b07150 100644
--- a/services/packagist/packagist-downloads.service.js
+++ b/services/packagist/packagist-downloads.service.js
@@ -2,10 +2,8 @@
 
 const LegacyService = require('../legacy-service')
 const { makeBadgeData: getBadgeData } = require('../../lib/badge-data')
-const { metric } = require('../../lib/text-formatters')
-const {
-  downloadCount: downloadCountColor,
-} = require('../../lib/color-formatters')
+const { metric } = require('../text-formatters')
+const { downloadCount: downloadCountColor } = require('../color-formatters')
 
 // This legacy service should be rewritten to use e.g. BaseJsonService.
 //
diff --git a/services/packagist/packagist-version.service.js b/services/packagist/packagist-version.service.js
index ea760cd971ed142091eac2bb6933ee02cf9435b5..4e13b8169e566d39846a8c9d15d2f20d5c2c4768 100644
--- a/services/packagist/packagist-version.service.js
+++ b/services/packagist/packagist-version.service.js
@@ -2,13 +2,13 @@
 
 const LegacyService = require('../legacy-service')
 const { makeBadgeData: getBadgeData } = require('../../lib/badge-data')
-const { addv: versionText } = require('../../lib/text-formatters')
-const { version: versionColor } = require('../../lib/color-formatters')
+const { addv: versionText } = require('../text-formatters')
+const { version: versionColor } = require('../color-formatters')
 const {
   compare: phpVersionCompare,
   latest: phpLatestVersion,
   isStable: phpStableVersion,
-} = require('../../lib/php-version')
+} = require('../php-version')
 
 const keywords = ['PHP']
 
diff --git a/services/php-eye/php-eye-hhvm.service.js b/services/php-eye/php-eye-hhvm.service.js
index 7e3ae2f384f32c4f8f2129bde033642867635146..4aface7b30d5089c00d33ffbbde7dced1dd88721 100644
--- a/services/php-eye/php-eye-hhvm.service.js
+++ b/services/php-eye/php-eye-hhvm.service.js
@@ -3,7 +3,7 @@
 const LegacyService = require('../legacy-service')
 const { makeBadgeData: getBadgeData } = require('../../lib/badge-data')
 const { checkErrorResponse } = require('../../lib/error-helper')
-const { omitv } = require('../../lib/text-formatters')
+const { omitv } = require('../text-formatters')
 
 const keywords = ['php', 'runtime']
 
diff --git a/services/php-eye/php-eye-php-version.service.js b/services/php-eye/php-eye-php-version.service.js
index 7b3ac2cee058b74aef84a7e706db83675a4a9022..ed6a1b1cc518ec1710670cefb74dd3fc8a0c54d1 100644
--- a/services/php-eye/php-eye-php-version.service.js
+++ b/services/php-eye/php-eye-php-version.service.js
@@ -2,11 +2,11 @@
 
 const LegacyService = require('../legacy-service')
 const { makeBadgeData: getBadgeData } = require('../../lib/badge-data')
+const log = require('../../core/server/log')
 const {
   versionReduction: phpVersionReduction,
   getPhpReleases,
-} = require('../../lib/php-version')
-const log = require('../../core/server/log')
+} = require('../php-version')
 
 // This legacy service should be rewritten to use e.g. BaseJsonService.
 //
diff --git a/lib/php-version.js b/services/php-version.js
similarity index 99%
rename from lib/php-version.js
rename to services/php-version.js
index abb8ae73a598a3fd803aea7bcd3588fe9a0571bf..f8b4d4ecf2b074a2f33c3b65702546725030f889 100644
--- a/lib/php-version.js
+++ b/services/php-version.js
@@ -7,9 +7,9 @@
 
 const { promisify } = require('util')
 const request = require('request')
+const { regularUpdate } = require('../lib/regular-update')
 const { listCompare } = require('./version')
 const { omitv } = require('./text-formatters')
-const { regularUpdate } = require('./regular-update')
 
 // Return a negative value if v1 < v2,
 // zero if v1 = v2, a positive value otherwise.
diff --git a/lib/php-version.spec.js b/services/php-version.spec.js
similarity index 100%
rename from lib/php-version.spec.js
rename to services/php-version.spec.js
diff --git a/services/pub/pub.service.js b/services/pub/pub.service.js
index 4404aa4fd710d40447fa3666bd3ba67bc2119e99..2368c3952f5f644e13bf1f2aeb8b812f0cbd9258 100644
--- a/services/pub/pub.service.js
+++ b/services/pub/pub.service.js
@@ -2,8 +2,7 @@
 
 const Joi = require('joi')
 const { BaseJsonService } = require('..')
-const { renderVersionBadge } = require('../../lib/version')
-const { latest: latestVersion } = require('../../lib/version')
+const { latest, renderVersionBadge } = require('../version')
 
 const schema = Joi.object({
   versions: Joi.array()
@@ -57,7 +56,7 @@ module.exports = class PubVersion extends BaseJsonService {
     const data = await this.fetch({ packageName })
     const includePre = which === 'vpre'
     const versions = data.versions
-    const version = latestVersion(versions, { pre: includePre })
+    const version = latest(versions, { pre: includePre })
     return renderVersionBadge({ version })
   }
 }
diff --git a/services/puppetforge/puppetforge-modules.service.js b/services/puppetforge/puppetforge-modules.service.js
index f49c7ce93e291c79fb283ade94d19d0c5467ce8d..7ccbfe6f02f93513cb5bb4d83f8c2394edbd66a6 100644
--- a/services/puppetforge/puppetforge-modules.service.js
+++ b/services/puppetforge/puppetforge-modules.service.js
@@ -5,12 +5,12 @@ const {
   makeBadgeData: getBadgeData,
   makeLabel: getLabel,
 } = require('../../lib/badge-data')
-const { metric, addv: versionText } = require('../../lib/text-formatters')
+const { metric, addv: versionText } = require('../text-formatters')
 const {
   version: versionColor,
   coveragePercentage: coveragePercentageColor,
   downloadCount: downloadCountColor,
-} = require('../../lib/color-formatters')
+} = require('../color-formatters')
 
 class PuppetforgeModuleVersion extends LegacyService {
   static get category() {
diff --git a/services/puppetforge/puppetforge-users.service.js b/services/puppetforge/puppetforge-users.service.js
index 0b2ecb346f194d9422c2c796bb0618a56d01579c..d8d28ebc425114bd8ae1e49c30d41b46840c3ef0 100644
--- a/services/puppetforge/puppetforge-users.service.js
+++ b/services/puppetforge/puppetforge-users.service.js
@@ -5,8 +5,8 @@ const {
   makeBadgeData: getBadgeData,
   makeLabel: getLabel,
 } = require('../../lib/badge-data')
-const { metric } = require('../../lib/text-formatters')
-const { floorCount: floorCountColor } = require('../../lib/color-formatters')
+const { metric } = require('../text-formatters')
+const { floorCount: floorCountColor } = require('../color-formatters')
 
 class PuppetforgeUserReleases extends LegacyService {
   static get category() {
diff --git a/services/pypi/pypi-downloads.service.js b/services/pypi/pypi-downloads.service.js
index 1ff9f69fd6f3406bb9a959158533d73ab0883596..6cd768d69dbbe218e84aa0591ceea3cc31b15f5d 100644
--- a/services/pypi/pypi-downloads.service.js
+++ b/services/pypi/pypi-downloads.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const { downloadCount } = require('../../lib/color-formatters')
-const { metric } = require('../../lib/text-formatters')
+const { downloadCount } = require('../color-formatters')
+const { metric } = require('../text-formatters')
 const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
diff --git a/services/pypi/pypi-license.service.js b/services/pypi/pypi-license.service.js
index a9217c9dccc244bf633f1eb5e32d181891b1485d..cf65aa403ca4413a9a5ce133e77fce6d9198e0d1 100644
--- a/services/pypi/pypi-license.service.js
+++ b/services/pypi/pypi-license.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { renderLicenseBadge } = require('../../lib/licenses')
+const { renderLicenseBadge } = require('../licenses')
 const PypiBase = require('./pypi-base')
 const { getLicenses } = require('./pypi-helpers')
 
diff --git a/services/pypi/pypi-version.service.js b/services/pypi/pypi-version.service.js
index 39cc3d7f8c8bd9c4469d2242672825074e515b0e..cee37daafc2e5eeee258121f89cd564cf550fd16 100644
--- a/services/pypi/pypi-version.service.js
+++ b/services/pypi/pypi-version.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { renderVersionBadge } = require('../../lib/version')
+const { renderVersionBadge } = require('../version')
 const PypiBase = require('./pypi-base')
 
 module.exports = class PypiVersion extends PypiBase {
diff --git a/services/readthedocs/readthedocs.service.js b/services/readthedocs/readthedocs.service.js
index 1108b09a43c8b89b1dd61fb1dc47cf7846543165..a9537f108f230705c9dd1299ff57102efba9ac6d 100644
--- a/services/readthedocs/readthedocs.service.js
+++ b/services/readthedocs/readthedocs.service.js
@@ -1,10 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const {
-  isBuildStatus,
-  renderBuildStatusBadge,
-} = require('../../lib/build-status')
+const { isBuildStatus, renderBuildStatusBadge } = require('../build-status')
 const { BaseSvgScrapingService, NotFound } = require('..')
 
 const keywords = ['documentation']
diff --git a/services/readthedocs/readthedocs.tester.js b/services/readthedocs/readthedocs.tester.js
index 4ee19c06fb4010c8f9ab18fc7aae7e7989df676f..2258f34e9d88d4ca5997879eaab6f1d4156bf33d 100644
--- a/services/readthedocs/readthedocs.tester.js
+++ b/services/readthedocs/readthedocs.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { isBuildStatus } = require('../../lib/build-status')
+const { isBuildStatus } = require('../build-status')
 const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('build status')
diff --git a/services/redmine/redmine.service.js b/services/redmine/redmine.service.js
index 840edddad281085eb3c0b4dc84d08a756040441b..9f7b0974c307ea3f0ad16b2c38b020767771ad69 100644
--- a/services/redmine/redmine.service.js
+++ b/services/redmine/redmine.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
-const { starRating } = require('../../lib/text-formatters')
-const { floorCount: floorCountColor } = require('../../lib/color-formatters')
+const { starRating } = require('../text-formatters')
+const { floorCount: floorCountColor } = require('../color-formatters')
 const Joi = require('joi')
 const { BaseXmlService } = require('..')
 
diff --git a/services/scrutinizer/scrutinizer.service.js b/services/scrutinizer/scrutinizer.service.js
index 7007d4725eea7bcca37bc149670730ababf10f2b..9b433d737c9e4dc92ed37baa3893e2c5e2f30f81 100644
--- a/services/scrutinizer/scrutinizer.service.js
+++ b/services/scrutinizer/scrutinizer.service.js
@@ -5,7 +5,7 @@ const { makeBadgeData: getBadgeData } = require('../../lib/badge-data')
 const { checkErrorResponse } = require('../../lib/error-helper')
 const {
   coveragePercentage: coveragePercentageColor,
-} = require('../../lib/color-formatters')
+} = require('../color-formatters')
 
 class ScrutinizerBuild extends LegacyService {
   static get category() {
diff --git a/services/scrutinizer/scrutinizer.tester.js b/services/scrutinizer/scrutinizer.tester.js
index e81bf0e2a7a28535f388a738f00a7f78c436f5e1..38205c098c665eaf8c24e1a4ad3ae6c202c5b34c 100644
--- a/services/scrutinizer/scrutinizer.tester.js
+++ b/services/scrutinizer/scrutinizer.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { isBuildStatus } = require('../../lib/build-status')
+const { isBuildStatus } = require('../build-status')
 const { ServiceTester } = require('../tester')
 const { isIntegerPercentage } = require('../test-validators')
 
diff --git a/services/shippable/shippable.service.js b/services/shippable/shippable.service.js
index 3296022f092fa9ab3a8a1b10e272f2c784e53c11..228b75ce8953b05b2c237c55b2a76641819404e5 100644
--- a/services/shippable/shippable.service.js
+++ b/services/shippable/shippable.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { renderBuildStatusBadge } = require('../../lib/build-status')
+const { renderBuildStatusBadge } = require('../build-status')
 const { BaseJsonService, NotFound } = require('..')
 
 // source: https://github.com/badges/shields/pull/1362#discussion_r161693830
diff --git a/services/shippable/shippable.tester.js b/services/shippable/shippable.tester.js
index aa6d19699a7843c2e269c5c39be2a0f0c71c99dc..10278ae1a2c3300ef4e4d24d020571209013f3d8 100644
--- a/services/shippable/shippable.tester.js
+++ b/services/shippable/shippable.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { isBuildStatus } = require('../../lib/build-status')
+const { isBuildStatus } = require('../build-status')
 const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('build status (valid, without branch)')
diff --git a/services/sonarqube/sonarqube.service.js b/services/sonarqube/sonarqube.service.js
index 76712482754c38fa90c0e1a764375ab7ebb04218..784f81591810a53b5f58b154a579094616aadf7d 100644
--- a/services/sonarqube/sonarqube.service.js
+++ b/services/sonarqube/sonarqube.service.js
@@ -3,10 +3,10 @@
 const LegacyService = require('../legacy-service')
 const { makeBadgeData: getBadgeData } = require('../../lib/badge-data')
 const serverSecrets = require('../../lib/server-secrets')
-const { metric } = require('../../lib/text-formatters')
+const { metric } = require('../text-formatters')
 const {
   coveragePercentage: coveragePercentageColor,
-} = require('../../lib/color-formatters')
+} = require('../color-formatters')
 
 class SonarqubeCoverage extends LegacyService {
   static get category() {
diff --git a/services/sourceforge/sourceforge.service.js b/services/sourceforge/sourceforge.service.js
index f9359c0b1cb0a7bb3fa4df4a33467b795da89b5f..aad987bab6a1e70b846ba16739c696b068aa8e96 100644
--- a/services/sourceforge/sourceforge.service.js
+++ b/services/sourceforge/sourceforge.service.js
@@ -6,10 +6,8 @@ const {
   makeBadgeData: getBadgeData,
   makeLabel: getLabel,
 } = require('../../lib/badge-data')
-const { metric } = require('../../lib/text-formatters')
-const {
-  downloadCount: downloadCountColor,
-} = require('../../lib/color-formatters')
+const { metric } = require('../text-formatters')
+const { downloadCount: downloadCountColor } = require('../color-formatters')
 
 // This legacy service should be rewritten to use e.g. BaseJsonService.
 //
diff --git a/services/spiget/spiget-downloads.service.js b/services/spiget/spiget-downloads.service.js
index 62f90aeb7767e4b85e034f4329f1671935cc5586..632c8983b0fc6b81dd2970e1656edb25d353455b 100644
--- a/services/spiget/spiget-downloads.service.js
+++ b/services/spiget/spiget-downloads.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
-const { metric } = require('../../lib/text-formatters')
-const { downloadCount } = require('../../lib/color-formatters')
+const { metric } = require('../text-formatters')
+const { downloadCount } = require('../color-formatters')
 const { BaseSpigetService, documentation, keywords } = require('./spiget-base')
 
 module.exports = class SpigetDownloads extends BaseSpigetService {
diff --git a/services/spiget/spiget-latest-version.service.js b/services/spiget/spiget-latest-version.service.js
index a2371ff0e226c415d95fdfc2ab7c8eb76f8e6ed7..0749f10ef1dffa29da84ee3a057b0decefb24b00 100644
--- a/services/spiget/spiget-latest-version.service.js
+++ b/services/spiget/spiget-latest-version.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { renderVersionBadge } = require('../../lib/version')
+const { renderVersionBadge } = require('../version')
 const { BaseSpigetService, documentation, keywords } = require('./spiget-base')
 
 const versionSchema = Joi.object({
diff --git a/services/spiget/spiget-rating.service.js b/services/spiget/spiget-rating.service.js
index d2cd6b77720b14726b9cd9bd17509f460fc077a1..dc410983e493cacdf199a316151c415dedd9715c 100644
--- a/services/spiget/spiget-rating.service.js
+++ b/services/spiget/spiget-rating.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
-const { starRating, metric } = require('../../lib/text-formatters')
-const { floorCount } = require('../../lib/color-formatters')
+const { starRating, metric } = require('../text-formatters')
+const { floorCount } = require('../color-formatters')
 const { BaseSpigetService, documentation, keywords } = require('./spiget-base')
 
 module.exports = class SpigetRatings extends BaseSpigetService {
diff --git a/services/stackexchange/stackexchange-helpers.js b/services/stackexchange/stackexchange-helpers.js
index 239a91eafca4e5cfbcab3ced2aeda2e491ef6cfe..edb85404beeef1647f8dbf608b65211e27f1ad01 100644
--- a/services/stackexchange/stackexchange-helpers.js
+++ b/services/stackexchange/stackexchange-helpers.js
@@ -1,7 +1,7 @@
 'use strict'
 
-const { metric } = require('../../lib/text-formatters')
-const { floorCount: floorCountColor } = require('../../lib/color-formatters')
+const { metric } = require('../text-formatters')
+const { floorCount: floorCountColor } = require('../color-formatters')
 
 module.exports = function renderQuestionsBadge({
   suffix,
diff --git a/services/stackexchange/stackexchange-reputation.service.js b/services/stackexchange/stackexchange-reputation.service.js
index c71a1efd2199d1bec2b5cf65355b5c64f7dae30a..597fd445275882ebf6d22c94a47aef2ef3f67ba2 100644
--- a/services/stackexchange/stackexchange-reputation.service.js
+++ b/services/stackexchange/stackexchange-reputation.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const { metric } = require('../../lib/text-formatters')
-const { floorCount: floorCountColor } = require('../../lib/color-formatters')
+const { metric } = require('../text-formatters')
+const { floorCount: floorCountColor } = require('../color-formatters')
 const { BaseJsonService } = require('..')
 
 const reputationSchema = Joi.object({
diff --git a/services/steam/steam-workshop.service.js b/services/steam/steam-workshop.service.js
index 21f94cf2a02aa329e8339e28dfce54b37d11dd1d..608086159f45c2501fc0e3f6b97c52246325d149 100644
--- a/services/steam/steam-workshop.service.js
+++ b/services/steam/steam-workshop.service.js
@@ -2,8 +2,8 @@
 
 const Joi = require('joi')
 const prettyBytes = require('pretty-bytes')
-const { metric, formatDate } = require('../../lib/text-formatters')
-const { age: ageColor, downloadCount } = require('../../lib/color-formatters')
+const { metric, formatDate } = require('../text-formatters')
+const { age: ageColor, downloadCount } = require('../color-formatters')
 const { NotFound } = require('..')
 const BaseSteamAPI = require('./steam-base')
 
diff --git a/services/symfony/symfony-insight-stars.service.js b/services/symfony/symfony-insight-stars.service.js
index e2f52a739587ad34f21e274c2ea7c8a8649d8ecb..a66eac4ca2523bd064f81039414a36a030bb82b5 100644
--- a/services/symfony/symfony-insight-stars.service.js
+++ b/services/symfony/symfony-insight-stars.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { starRating } = require('../../lib/text-formatters')
+const { starRating } = require('../text-formatters')
 const {
   SymfonyInsightBase,
   keywords,
diff --git a/services/teamcity/teamcity-coverage.service.js b/services/teamcity/teamcity-coverage.service.js
index 5d27f6dc094b61a9e6fddf55779503ab41c6b50e..f89d1e81339d2f5cfa61e19375dd4d0d030adf83 100644
--- a/services/teamcity/teamcity-coverage.service.js
+++ b/services/teamcity/teamcity-coverage.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { coveragePercentage } = require('../../lib/color-formatters')
+const { coveragePercentage } = require('../color-formatters')
 const { InvalidResponse } = require('..')
 const TeamCityBase = require('./teamcity-base')
 
diff --git a/lib/text-formatters.js b/services/text-formatters.js
similarity index 100%
rename from lib/text-formatters.js
rename to services/text-formatters.js
diff --git a/lib/text-formatters.spec.js b/services/text-formatters.spec.js
similarity index 100%
rename from lib/text-formatters.spec.js
rename to services/text-formatters.spec.js
diff --git a/services/travis/travis-build.service.js b/services/travis/travis-build.service.js
index 943c6f5c12bb255fedae71cca2d33880d1f6cb35..f601031af0ad0da57a1d5db544bcad9f9a14e7e7 100644
--- a/services/travis/travis-build.service.js
+++ b/services/travis/travis-build.service.js
@@ -1,10 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const {
-  isBuildStatus,
-  renderBuildStatusBadge,
-} = require('../../lib/build-status')
+const { isBuildStatus, renderBuildStatusBadge } = require('../build-status')
 const { BaseSvgScrapingService } = require('..')
 
 const schema = Joi.object({
diff --git a/services/travis/travis-build.tester.js b/services/travis/travis-build.tester.js
index 78f05ec698df264edd06c074a7fc5696aab7904a..2182cc3588710f6d56658da0ea305247e6efb798 100644
--- a/services/travis/travis-build.tester.js
+++ b/services/travis/travis-build.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { isBuildStatus } = require('../../lib/build-status')
+const { isBuildStatus } = require('../build-status')
 const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/travis/travis-php-version.service.js b/services/travis/travis-php-version.service.js
index fa0cdc2c9f0adec4ca1339c612202c39656e5b36..63879a5e425478b10e7945f2b8cdf8b1e8d52946 100644
--- a/services/travis/travis-php-version.service.js
+++ b/services/travis/travis-php-version.service.js
@@ -7,7 +7,7 @@ const {
   minorVersion: phpMinorVersion,
   versionReduction: phpVersionReduction,
   getPhpReleases,
-} = require('../../lib/php-version')
+} = require('../php-version')
 
 // This legacy service should be rewritten to use e.g. BaseJsonService.
 //
diff --git a/services/twitter/twitter.service.js b/services/twitter/twitter.service.js
index e6b7698de1a0386880b47c269396dfd2db23148d..3aea7a00b28f5ffdb202e6c4b2795225ff348a08 100644
--- a/services/twitter/twitter.service.js
+++ b/services/twitter/twitter.service.js
@@ -3,7 +3,7 @@
 const LegacyService = require('../legacy-service')
 const { makeBadgeData: getBadgeData } = require('../../lib/badge-data')
 const { makeLogo: getLogo } = require('../../lib/logos')
-const { metric } = require('../../lib/text-formatters')
+const { metric } = require('../text-formatters')
 
 // This legacy service should be rewritten to use e.g. BaseJsonService.
 //
diff --git a/services/uptimerobot/uptimerobot-ratio.service.js b/services/uptimerobot/uptimerobot-ratio.service.js
index f15c1571af13490aa7c9a212635917b4af522466..06d4e897a2ef60dc9f783e3c3fbd3b8a33d78137 100644
--- a/services/uptimerobot/uptimerobot-ratio.service.js
+++ b/services/uptimerobot/uptimerobot-ratio.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { colorScale } = require('../../lib/color-formatters')
+const { colorScale } = require('../color-formatters')
 const UptimeRobotBase = require('./uptimerobot-base')
 
 const ratioColor = colorScale([10, 30, 50, 70])
diff --git a/services/vaadin-directory/vaadin-directory.service.js b/services/vaadin-directory/vaadin-directory.service.js
index 94855a7129e07513b482ddb4970f18be34a73a4d..08ebfc68032247b0bbd97c1c6b6dba1984a2903f 100644
--- a/services/vaadin-directory/vaadin-directory.service.js
+++ b/services/vaadin-directory/vaadin-directory.service.js
@@ -6,11 +6,11 @@ const {
   makeLabel: getLabel,
 } = require('../../lib/badge-data')
 const { checkErrorResponse } = require('../../lib/error-helper')
-const { metric, starRating, formatDate } = require('../../lib/text-formatters')
+const { metric, starRating, formatDate } = require('../text-formatters')
 const {
   floorCount: floorCountColor,
   age: ageColor,
-} = require('../../lib/color-formatters')
+} = require('../color-formatters')
 
 class VaadinDirectoryRating extends LegacyService {
   static get category() {
diff --git a/lib/version.js b/services/version.js
similarity index 100%
rename from lib/version.js
rename to services/version.js
diff --git a/lib/version.spec.js b/services/version.spec.js
similarity index 100%
rename from lib/version.spec.js
rename to services/version.spec.js
diff --git a/services/visual-studio-marketplace/visual-studio-marketplace-azure-devops-installs.service.js b/services/visual-studio-marketplace/visual-studio-marketplace-azure-devops-installs.service.js
index 212103b6a8abbb3943caf6284f2e613215ad74d0..877c139c078b77c8aecd1986310794a535b469ca 100644
--- a/services/visual-studio-marketplace/visual-studio-marketplace-azure-devops-installs.service.js
+++ b/services/visual-studio-marketplace/visual-studio-marketplace-azure-devops-installs.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
-const { metric } = require('../../lib/text-formatters')
-const { downloadCount } = require('../../lib/color-formatters')
+const { metric } = require('../text-formatters')
+const { downloadCount } = require('../color-formatters')
 const VisualStudioMarketplaceBase = require('./visual-studio-marketplace-base')
 
 const documentation = `
diff --git a/services/visual-studio-marketplace/visual-studio-marketplace-downloads.service.js b/services/visual-studio-marketplace/visual-studio-marketplace-downloads.service.js
index 3f9594c5ba9d1998a377ab0ad1b817b07e40c9c1..2317d1894abdfd43e1a534a8c47a9859e4c6a7dd 100644
--- a/services/visual-studio-marketplace/visual-studio-marketplace-downloads.service.js
+++ b/services/visual-studio-marketplace/visual-studio-marketplace-downloads.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
-const { metric } = require('../../lib/text-formatters')
-const { downloadCount } = require('../../lib/color-formatters')
+const { metric } = require('../text-formatters')
+const { downloadCount } = require('../color-formatters')
 const VisualStudioMarketplaceBase = require('./visual-studio-marketplace-base')
 
 const documentation = `
diff --git a/services/visual-studio-marketplace/visual-studio-marketplace-rating.service.js b/services/visual-studio-marketplace/visual-studio-marketplace-rating.service.js
index 158674ae97bed49532cf395b6a30878589240fe9..fe748619c2bcb5eb2d7e349cc065266eb7373a79 100644
--- a/services/visual-studio-marketplace/visual-studio-marketplace-rating.service.js
+++ b/services/visual-studio-marketplace/visual-studio-marketplace-rating.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
-const { starRating } = require('../../lib/text-formatters')
-const { floorCount } = require('../../lib/color-formatters')
+const { starRating } = require('../text-formatters')
+const { floorCount } = require('../color-formatters')
 const VisualStudioMarketplaceBase = require('./visual-studio-marketplace-base')
 
 module.exports = class VisualStudioMarketplaceRating extends VisualStudioMarketplaceBase {
diff --git a/services/visual-studio-marketplace/visual-studio-marketplace-version.service.js b/services/visual-studio-marketplace/visual-studio-marketplace-version.service.js
index c17056515a9ff0856402559575fe392669bb4625..7431fbdcd4da44cd8864db326eb1ec0ad3d1314a 100644
--- a/services/visual-studio-marketplace/visual-studio-marketplace-version.service.js
+++ b/services/visual-studio-marketplace/visual-studio-marketplace-version.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { renderVersionBadge } = require('../../lib/version')
+const { renderVersionBadge } = require('../version')
 const VisualStudioMarketplaceBase = require('./visual-studio-marketplace-base')
 
 module.exports = class VisualStudioMarketplaceVersion extends VisualStudioMarketplaceBase {
diff --git a/services/wercker/wercker.service.js b/services/wercker/wercker.service.js
index 45278d63343496da20f04dbad6643b7fedb21397..24a32c83f0ba9729165bf6134d821c93b76f5fbf 100644
--- a/services/wercker/wercker.service.js
+++ b/services/wercker/wercker.service.js
@@ -1,10 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const {
-  isBuildStatus,
-  renderBuildStatusBadge,
-} = require('../../lib/build-status')
+const { isBuildStatus, renderBuildStatusBadge } = require('../build-status')
 const { BaseJsonService } = require('..')
 
 const werckerSchema = Joi.array()
diff --git a/services/wercker/wercker.tester.js b/services/wercker/wercker.tester.js
index 2539146ed78092128a0cc4e25fa3cc423dc65f20..ebe8a38af6760d9c692eecf93fe55ee0d9fdb029 100644
--- a/services/wercker/wercker.tester.js
+++ b/services/wercker/wercker.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { isBuildStatus } = require('../../lib/build-status')
+const { isBuildStatus } = require('../build-status')
 const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Build status')
diff --git a/services/wordpress/wordpress-downloads.service.js b/services/wordpress/wordpress-downloads.service.js
index 459b77a1d658dfdcd395b259d74fc67c12e58c3d..c0151152d0e4bc40e68d939845cd1739f4be939b 100644
--- a/services/wordpress/wordpress-downloads.service.js
+++ b/services/wordpress/wordpress-downloads.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const { metric } = require('../../lib/text-formatters')
-const { downloadCount } = require('../../lib/color-formatters')
+const { metric } = require('../text-formatters')
+const { downloadCount } = require('../color-formatters')
 const { BaseJsonService, NotFound } = require('..')
 const BaseWordpress = require('./wordpress-base')
 
diff --git a/services/wordpress/wordpress-platform.service.js b/services/wordpress/wordpress-platform.service.js
index 4eb073edbd4ea77d248fc2b18e70ae1150f01c1e..18611d8f675df462075fa910e6bb922d4615266d 100644
--- a/services/wordpress/wordpress-platform.service.js
+++ b/services/wordpress/wordpress-platform.service.js
@@ -2,8 +2,8 @@
 
 const semver = require('semver')
 const Joi = require('joi')
-const { addv } = require('../../lib/text-formatters')
-const { version: versionColor } = require('../../lib/color-formatters')
+const { addv } = require('../text-formatters')
+const { version: versionColor } = require('../color-formatters')
 const { NotFound } = require('..')
 const BaseWordpress = require('./wordpress-base')
 
diff --git a/services/wordpress/wordpress-rating.service.js b/services/wordpress/wordpress-rating.service.js
index dcabd1d91418844694df77e6df44f0574600b4fc..ceb5219cc96ff7375de9b0f459d82778f9c5ffed 100644
--- a/services/wordpress/wordpress-rating.service.js
+++ b/services/wordpress/wordpress-rating.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
-const { starRating, metric } = require('../../lib/text-formatters')
-const { floorCount } = require('../../lib/color-formatters')
+const { starRating, metric } = require('../text-formatters')
+const { floorCount } = require('../color-formatters')
 const BaseWordpress = require('./wordpress-base')
 
 const extensionData = {
diff --git a/services/wordpress/wordpress-version.service.js b/services/wordpress/wordpress-version.service.js
index 259cad3f13bda1d0fb6f7e73a008b18fa4be7695..1c8ae711df366fdbf88edb685411439e185f2fcb 100644
--- a/services/wordpress/wordpress-version.service.js
+++ b/services/wordpress/wordpress-version.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
-const { addv } = require('../../lib/text-formatters')
-const { version: versionColor } = require('../../lib/color-formatters')
+const { addv } = require('../text-formatters')
+const { version: versionColor } = require('../color-formatters')
 const BaseWordpress = require('./wordpress-base')
 
 function VersionForExtensionType(extensionType) {