diff --git a/.eslintrc.yml b/.eslintrc.yml
index 0614f9a0134aff5c9e857e66a02f2091641c9134..3415ce2c84e11a9e9be4c9c87005b101a0d0243e 100644
--- a/.eslintrc.yml
+++ b/.eslintrc.yml
@@ -144,6 +144,8 @@ rules:
   func-style: ['error', 'declaration', { 'allowArrowFunctions': true }]
   new-cap: ['error', { 'capIsNew': true }]
   import/order: ['error', { 'newlines-between': 'never' }]
+  quotes:
+    ['error', 'single', { 'avoidEscape': true, 'allowTemplateLiterals': false }]
 
   # Account for destructuring responses from upstream services,
   # many of which do not follow camelcase
diff --git a/.github/actions/close-bot/index.js b/.github/actions/close-bot/index.js
index 81e530ef60240e3ef1c2ca44a34f0d446615d9d0..f815d93777b6a88865794175057518329584db48 100644
--- a/.github/actions/close-bot/index.js
+++ b/.github/actions/close-bot/index.js
@@ -27,7 +27,7 @@ async function run() {
           state: 'closed',
         })
 
-        core.debug(`Done.`)
+        core.debug('Done.')
       }
     }
   } catch (error) {
diff --git a/dangerfile.js b/dangerfile.js
index f59f587886e72a66ef75aee1c0707c6b38442337..930030dc9ad9956eb5f8ae191a14e03d61f14c81 100644
--- a/dangerfile.js
+++ b/dangerfile.js
@@ -114,7 +114,7 @@ if (allFiles.length > 100) {
       if (diff.includes('authHelper') && !secretsDocs.modified) {
         warn(
           [
-            `:books: Remember to ensure any changes to \`config.private\` `,
+            ':books: Remember to ensure any changes to `config.private` ',
             `in \`${file}\` are reflected in the [server secrets documentation]`,
             '(https://github.com/badges/shields/blob/master/doc/server-secrets.md)',
           ].join('')
diff --git a/lib/load-simple-icons.js b/lib/load-simple-icons.js
index 6f9590f261da87c9d2fe82add4a166f25a04e286..b2fa89b1c457b63aba6772609ed21098a067ae36 100644
--- a/lib/load-simple-icons.js
+++ b/lib/load-simple-icons.js
@@ -18,8 +18,8 @@ function loadSimpleIcons() {
 
     icon.base64 = {
       default: svg2base64(icon.svg.replace('<svg', `<svg fill="#${hex}"`)),
-      light: svg2base64(icon.svg.replace('<svg', `<svg fill="whitesmoke"`)),
-      dark: svg2base64(icon.svg.replace('<svg', `<svg fill="#333"`)),
+      light: svg2base64(icon.svg.replace('<svg', '<svg fill="whitesmoke"')),
+      dark: svg2base64(icon.svg.replace('<svg', '<svg fill="#333"')),
     }
 
     // There are a few instances where multiple icons have the same title
diff --git a/scripts/capture-timings.js b/scripts/capture-timings.js
index 4b60fa89259b64b6f35e3ed5c6f67a88e0b9ac9d..f68daed7e632c752d77488a5d1ee21d95f690fc8 100644
--- a/scripts/capture-timings.js
+++ b/scripts/capture-timings.js
@@ -29,7 +29,7 @@ async function captureTimings(warmupIterations) {
 function logResults({ times, iterations, warmupIterations }) {
   if (isNaN(iterations)) {
     console.log(
-      `No timings captured. Have you included console.time statements in the badge creation code path?`
+      'No timings captured. Have you included console.time statements in the badge creation code path?'
     )
   } else {
     const timedIterations = iterations - warmupIterations
diff --git a/services/azure-devops/azure-devops-tests.tester.js b/services/azure-devops/azure-devops-tests.tester.js
index 000720328cd075d996442a4eff80c590f1628296..01b75c617e1aa0d0e0e35161e720395f07fbb215 100644
--- a/services/azure-devops/azure-devops-tests.tester.js
+++ b/services/azure-devops/azure-devops-tests.tester.js
@@ -8,7 +8,7 @@ import { createServiceTester } from '../tester.js'
 export const t = await createServiceTester()
 
 t.create('unknown build definition')
-  .get(`/swellaby/opensource/99999999.json`)
+  .get('/swellaby/opensource/99999999.json')
   .expectBadge({ label: 'tests', message: 'build pipeline not found' })
 
 t.create('404 latest build error response')
@@ -51,7 +51,7 @@ t.create('no test result summary response')
   })
 
 t.create('no build response')
-  .get(`/swellaby/opensource/174.json`)
+  .get('/swellaby/opensource/174.json')
   .expectBadge({ label: 'tests', message: 'build pipeline not found' })
 
 t.create('no tests in test result summary response')
diff --git a/services/bitbucket/bitbucket-pull-request.service.js b/services/bitbucket/bitbucket-pull-request.service.js
index e1ad1a8117e91aaad99d404e0532eed033acbecd..b885109fb5736ac0176baaa813d9324865312d47 100644
--- a/services/bitbucket/bitbucket-pull-request.service.js
+++ b/services/bitbucket/bitbucket-pull-request.service.js
@@ -27,7 +27,7 @@ function pullRequestClassGenerator(raw) {
     static category = 'issue-tracking'
     static route = {
       base: `bitbucket/${routePrefix}`,
-      pattern: `:user/:repo`,
+      pattern: ':user/:repo',
       queryParamSchema,
     }
 
diff --git a/services/cii-best-practices/cii-best-practices.tester.js b/services/cii-best-practices/cii-best-practices.tester.js
index ba62ffaa11fa103cedc96b2ea44ceca0764ad398..6367902b022844b060e82563a6f0c27a4e1d6372 100644
--- a/services/cii-best-practices/cii-best-practices.tester.js
+++ b/services/cii-best-practices/cii-best-practices.tester.js
@@ -3,32 +3,32 @@ import { createServiceTester } from '../tester.js'
 export const t = await createServiceTester()
 
 t.create('level known project')
-  .get(`/level/1.json`)
+  .get('/level/1.json')
   .expectBadge({
     label: 'cii',
     message: withRegex(/in progress|passing|silver|gold/),
   })
 
 t.create('percentage known project')
-  .get(`/percentage/29.json`)
+  .get('/percentage/29.json')
   .expectBadge({
     label: 'cii',
     message: withRegex(/([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9]|300)%/),
   })
 
 t.create('summary known project')
-  .get(`/summary/33.json`)
+  .get('/summary/33.json')
   .expectBadge({
     label: 'cii',
     message: withRegex(/(in progress [0-9]|[1-9][0-9]%)|passing|silver|gold/),
   })
 
 t.create('unknown project')
-  .get(`/level/abc.json`)
+  .get('/level/abc.json')
   .expectBadge({ label: 'cii', message: 'project not found' })
 
 t.create('level: gold project')
-  .get(`/level/1.json`)
+  .get('/level/1.json')
   .intercept(nock =>
     nock('https://bestpractices.coreinfrastructure.org/projects')
       .get('/1/badge.json')
@@ -43,7 +43,7 @@ t.create('level: gold project')
   })
 
 t.create('level: silver project')
-  .get(`/level/34.json`)
+  .get('/level/34.json')
   .intercept(nock =>
     nock('https://bestpractices.coreinfrastructure.org/projects')
       .get('/34/badge.json')
@@ -58,7 +58,7 @@ t.create('level: silver project')
   })
 
 t.create('level: passing project')
-  .get(`/level/29.json`)
+  .get('/level/29.json')
   .intercept(nock =>
     nock('https://bestpractices.coreinfrastructure.org/projects')
       .get('/29/badge.json')
@@ -73,7 +73,7 @@ t.create('level: passing project')
   })
 
 t.create('level: in progress project')
-  .get(`/level/33.json`)
+  .get('/level/33.json')
   .intercept(nock =>
     nock('https://bestpractices.coreinfrastructure.org/projects')
       .get('/33/badge.json')
@@ -88,7 +88,7 @@ t.create('level: in progress project')
   })
 
 t.create('percentage: gold project')
-  .get(`/percentage/1.json`)
+  .get('/percentage/1.json')
   .intercept(nock =>
     nock('https://bestpractices.coreinfrastructure.org/projects')
       .get('/1/badge.json')
@@ -103,7 +103,7 @@ t.create('percentage: gold project')
   })
 
 t.create('percentage: silver project')
-  .get(`/percentage/34.json`)
+  .get('/percentage/34.json')
   .intercept(nock =>
     nock('https://bestpractices.coreinfrastructure.org/projects')
       .get('/34/badge.json')
@@ -118,7 +118,7 @@ t.create('percentage: silver project')
   })
 
 t.create('percentage: passing project')
-  .get(`/percentage/29.json`)
+  .get('/percentage/29.json')
   .intercept(nock =>
     nock('https://bestpractices.coreinfrastructure.org/projects')
       .get('/29/badge.json')
@@ -133,7 +133,7 @@ t.create('percentage: passing project')
   })
 
 t.create('percentage: in progress project')
-  .get(`/percentage/33.json`)
+  .get('/percentage/33.json')
   .intercept(nock =>
     nock('https://bestpractices.coreinfrastructure.org/projects')
       .get('/33/badge.json')
@@ -148,7 +148,7 @@ t.create('percentage: in progress project')
   })
 
 t.create('summary: gold project')
-  .get(`/summary/1.json`)
+  .get('/summary/1.json')
   .intercept(nock =>
     nock('https://bestpractices.coreinfrastructure.org/projects')
       .get('/1/badge.json')
@@ -163,7 +163,7 @@ t.create('summary: gold project')
   })
 
 t.create('summary: silver project')
-  .get(`/summary/34.json`)
+  .get('/summary/34.json')
   .intercept(nock =>
     nock('https://bestpractices.coreinfrastructure.org/projects')
       .get('/34/badge.json')
@@ -178,7 +178,7 @@ t.create('summary: silver project')
   })
 
 t.create('summary: passing project')
-  .get(`/summary/29.json`)
+  .get('/summary/29.json')
   .intercept(nock =>
     nock('https://bestpractices.coreinfrastructure.org/projects')
       .get('/29/badge.json')
@@ -193,7 +193,7 @@ t.create('summary: passing project')
   })
 
 t.create('summary: in progress project')
-  .get(`/summary/33.json`)
+  .get('/summary/33.json')
   .intercept(nock =>
     nock('https://bestpractices.coreinfrastructure.org/projects')
       .get('/33/badge.json')
diff --git a/services/codecov/codecov.tester.js b/services/codecov/codecov.tester.js
index 4eeea1c609c43177f5a03b4722ad1c9f917b1b53..d9f5225f08719f7819bdf63cdb27bee57f29c2da 100644
--- a/services/codecov/codecov.tester.js
+++ b/services/codecov/codecov.tester.js
@@ -60,7 +60,7 @@ t.create('handles unauthorized private repository')
   .intercept(nock =>
     nock('https://codecov.io')
       .get('/github/codecov/private-example-python/graph/badge.svg')
-      .reply(200, `<g><text x="105.5" y="14">unknown</text></g>`, {
+      .reply(200, '<g><text x="105.5" y="14">unknown</text></g>', {
         'Content-Type': 'image/svg+xml',
       })
   )
@@ -110,7 +110,7 @@ t.create('gets coverage for private repository')
       .get(
         '/gh/codecov/private-example-python/graph/badge.svg?token=a1b2c3d4e5'
       )
-      .reply(200, `<g><text x="105.5" y="14">100%</text></g>`, {
+      .reply(200, '<g><text x="105.5" y="14">100%</text></g>', {
         'Content-Type': 'image/svg+xml',
       })
   )
diff --git a/services/discord/discord.spec.js b/services/discord/discord.spec.js
index 4dbbeae36b8581ff9c825084fc9c388d649259e2..d787711df54c297932e45b51278aa79f1ec2c7e9 100644
--- a/services/discord/discord.spec.js
+++ b/services/discord/discord.spec.js
@@ -14,12 +14,12 @@ describe('Discord', function () {
       },
     }
 
-    const scope = nock(`https://discord.com`, {
+    const scope = nock('https://discord.com', {
       // This ensures that the expected credential is actually being sent with the HTTP request.
       // Without this the request wouldn't match and the test would fail.
-      reqheaders: { Authorization: `Bot password` },
+      reqheaders: { Authorization: 'Bot password' },
     })
-      .get(`/api/v6/guilds/12345/widget.json`)
+      .get('/api/v6/guilds/12345/widget.json')
       .reply(200, {
         presence_count: 125,
       })
diff --git a/services/discourse/discourse.service.js b/services/discourse/discourse.service.js
index e6c1322c38300ad40107a756c9840b77d38147eb..210acde8ee7e9dcfb67fd5e2e3f828ad5e3ee5cb 100644
--- a/services/discourse/discourse.service.js
+++ b/services/discourse/discourse.service.js
@@ -72,7 +72,7 @@ class DiscourseStatus extends DiscourseBase {
   static route = this.buildRoute('status')
   static examples = [
     {
-      title: `Discourse status`,
+      title: 'Discourse status',
       namedParams: {},
       queryParams: {
         server: 'https://meta.discourse.org',
diff --git a/services/docker/docker-cloud-automated.tester.js b/services/docker/docker-cloud-automated.tester.js
index 25e3614876b276ee3e962e2adf6195b498c53ca5..d68175bc96a5f57a1be617c388009bca6138c50f 100644
--- a/services/docker/docker-cloud-automated.tester.js
+++ b/services/docker/docker-cloud-automated.tester.js
@@ -16,16 +16,16 @@ t.create('docker cloud automated build status (invalid, nonexisting user)')
   .get('/pavicsssss/magpie.json')
   .expectBadge({
     label: 'docker build',
-    message: `manual`,
+    message: 'manual',
   })
 
 t.create(
-  `docker cloud build status (valid user, but the 'objects' array from the response is empty)`
+  "docker cloud build status (valid user, but the 'objects' array from the response is empty)"
 )
   .get('/pavics/weaver.json')
   .expectBadge({
     label: 'docker build',
-    message: `manual`,
+    message: 'manual',
   })
 
 t.create('docker cloud automated build (not found)')
diff --git a/services/docker/docker-cloud-build.service.js b/services/docker/docker-cloud-build.service.js
index 22ec6f5d4fba8ae2dd779f549ea110f0828c566a..3435dbf3e6adceb83fe56ddfc1f42269b2cd779b 100644
--- a/services/docker/docker-cloud-build.service.js
+++ b/services/docker/docker-cloud-build.service.js
@@ -34,7 +34,7 @@ export default class DockerCloudBuild extends BaseJsonService {
 
     if (data.objects.length === 0) {
       throw new NotFound({
-        prettyMessage: `automated builds not set up`,
+        prettyMessage: 'automated builds not set up',
       })
     }
     return this.constructor.render({ state: data.objects[0].state })
diff --git a/services/docker/docker-cloud-build.tester.js b/services/docker/docker-cloud-build.tester.js
index 1f874d5879c3a69fc030e39d674aceda420ca885..9d63a7e0ebb49bb03a2b879b4ab75f79ee45f936 100644
--- a/services/docker/docker-cloud-build.tester.js
+++ b/services/docker/docker-cloud-build.tester.js
@@ -14,16 +14,16 @@ t.create('docker cloud build status (invalid, nonexisting user)')
   .get('/pavicsssss/magpie.json')
   .expectBadge({
     label: 'docker build',
-    message: `automated builds not set up`,
+    message: 'automated builds not set up',
   })
 
 t.create(
-  `docker cloud build status (valid user, but the 'objects' array from the response is empty)`
+  "docker cloud build status (valid user, but the 'objects' array from the response is empty)"
 )
   .get('/pavics/weaver.json')
   .expectBadge({
     label: 'docker build',
-    message: `automated builds not set up`,
+    message: 'automated builds not set up',
   })
 
 t.create('docker cloud build status (not found)')
diff --git a/services/docker/docker-cloud-common-fetch.js b/services/docker/docker-cloud-common-fetch.js
index 26204daee502c371bf9808b89bf69a589878e642..51d763261e24858083bb7a98205168dd98e86a8f 100644
--- a/services/docker/docker-cloud-common-fetch.js
+++ b/services/docker/docker-cloud-common-fetch.js
@@ -14,7 +14,7 @@ const cloudBuildSchema = Joi.object({
 async function fetchBuild(serviceInstance, { user, repo }) {
   return serviceInstance._requestJson({
     schema: cloudBuildSchema,
-    url: `https://cloud.docker.com/api/build/v1/source`,
+    url: 'https://cloud.docker.com/api/build/v1/source',
     options: { searchParams: { image: `${user}/${repo}` } },
     errorMessages: { 404: 'repo not found' },
   })
diff --git a/services/drone/drone-build.spec.js b/services/drone/drone-build.spec.js
index 0cb15273618a23434323d7c6b6bcd51451f41d62..966e952f054ffe95b215012cb76796b4ce972532 100644
--- a/services/drone/drone-build.spec.js
+++ b/services/drone/drone-build.spec.js
@@ -10,7 +10,7 @@ describe('DroneBuild', function () {
     const token = 'abc123'
 
     const scope = nock('https://cloud.drone.io', {
-      reqheaders: { Authorization: `Bearer abc123` },
+      reqheaders: { Authorization: 'Bearer abc123' },
     })
       .get(/.*/)
       .reply(200, { status: 'passing' })
diff --git a/services/freecodecamp/freecodecamp-points.service.js b/services/freecodecamp/freecodecamp-points.service.js
index 898ec7e5594b3c379fda6c455350dfa2640c5ceb..26b36dea743476846629652c9bdb8c9d2ed2515e 100644
--- a/services/freecodecamp/freecodecamp-points.service.js
+++ b/services/freecodecamp/freecodecamp-points.service.js
@@ -46,7 +46,7 @@ export default class FreeCodeCampPoints extends BaseJsonService {
   async fetch({ username }) {
     return this._requestJson({
       schema,
-      url: `https://api.freecodecamp.org/api/users/get-public-profile`,
+      url: 'https://api.freecodecamp.org/api/users/get-public-profile',
       options: {
         searchParams: {
           username,
diff --git a/services/github/github-auth-service.js b/services/github/github-auth-service.js
index 857fee2bca0f595bfc25efac4b969f60f332a434..3fd0fd269c7835dcbbddebf673f97fe8d27299ec 100644
--- a/services/github/github-auth-service.js
+++ b/services/github/github-auth-service.js
@@ -40,7 +40,7 @@ class GithubAuthV4Service extends BaseGraphqlService {
   }
 
   async _requestGraphql(attrs) {
-    const url = `/graphql`
+    const url = '/graphql'
 
     /*
     The Github v4 API requires us to query the rateLimit object to return
diff --git a/services/github/github-hacktoberfest.service.js b/services/github/github-hacktoberfest.service.js
index 46299fb1c59724c1fa917d2676251f648c26ba29..5da00e3edb54566d62e70c5b85108fe0238b9140 100644
--- a/services/github/github-hacktoberfest.service.js
+++ b/services/github/github-hacktoberfest.service.js
@@ -160,7 +160,7 @@ export default class GithubHacktoberfestCombinedStatus extends GithubAuthV4Servi
       `repo:${user}/${repo}`,
       'is:pr',
       `created:${year}-10-01..${year}-10-31`,
-      `-label:invalid`,
+      '-label:invalid',
     ]
       .filter(Boolean)
       .join(' ')
diff --git a/services/github/github-labels.service.js b/services/github/github-labels.service.js
index 70176517bf507a7117401f448632f4da05a3bad8..b65af30073c71fdfb8de1bd9ecfda536a6739575 100644
--- a/services/github/github-labels.service.js
+++ b/services/github/github-labels.service.js
@@ -35,7 +35,7 @@ export default class GithubLabels extends GithubAuthV3Service {
     return this._requestJson({
       url: `/repos/${user}/${repo}/labels/${name}`,
       schema,
-      errorMessages: errorMessagesFor(`repo or label not found`),
+      errorMessages: errorMessagesFor('repo or label not found'),
     })
   }
 
diff --git a/services/github/github-milestone-detail.service.js b/services/github/github-milestone-detail.service.js
index 22552a1f3c800c085ac1e7e9e9729aacecc3b711..aef9845e3fd57bcd2a73487ba938845efaa4bf43 100644
--- a/services/github/github-milestone-detail.service.js
+++ b/services/github/github-milestone-detail.service.js
@@ -85,7 +85,7 @@ export default class GithubMilestoneDetail extends GithubAuthV3Service {
     return this._requestJson({
       url: `/repos/${user}/${repo}/milestones/${number}`,
       schema,
-      errorMessages: errorMessagesFor(`repo or milestone not found`),
+      errorMessages: errorMessagesFor('repo or milestone not found'),
     })
   }
 
diff --git a/services/github/github-milestone.service.js b/services/github/github-milestone.service.js
index 2f69beb96fad1496c40b524690fb2e59d5e0c932..5d16bc8d8f4f13335190fc198626ece82b0213ae 100644
--- a/services/github/github-milestone.service.js
+++ b/services/github/github-milestone.service.js
@@ -70,7 +70,7 @@ export default class GithubMilestone extends GithubAuthV3Service {
     return this._requestJson({
       url: `/repos/${user}/${repo}/milestones?state=${variant}`,
       schema,
-      errorMessages: errorMessagesFor(`repo not found`),
+      errorMessages: errorMessagesFor('repo not found'),
     })
   }
 
diff --git a/services/github/github-total-star.service.js b/services/github/github-total-star.service.js
index 70461fe72c64f406cffafc10ab323135cd662369..a53e0ff4a4892d3c2ddb156f5a48f62729562a05 100644
--- a/services/github/github-total-star.service.js
+++ b/services/github/github-total-star.service.js
@@ -108,7 +108,7 @@ const query = gql`
 
 const affiliationsAllowedValues = [
   'OWNER',
-  `COLLABORATOR`,
+  'COLLABORATOR',
   'ORGANIZATION_MEMBER',
 ]
 /**
diff --git a/services/gradle-plugin-portal/gradle-plugin-portal.service.js b/services/gradle-plugin-portal/gradle-plugin-portal.service.js
index c1602647f25e23e59a91379a82a5ec1d0cb120f9..47c23e089800c91e4f55544e35aad37b7992388f 100644
--- a/services/gradle-plugin-portal/gradle-plugin-portal.service.js
+++ b/services/gradle-plugin-portal/gradle-plugin-portal.service.js
@@ -26,7 +26,7 @@ export default redirector({
       documentation,
     },
   ],
-  transformPath: () => `/maven-metadata/v`,
+  transformPath: () => '/maven-metadata/v',
   transformQueryParams: ({ pluginId }) => {
     const groupPath = pluginId.replace(/\./g, '/')
     const artifactId = `${pluginId}.gradle.plugin`
diff --git a/services/hsts/hsts.service.js b/services/hsts/hsts.service.js
index ddeae98cfc5cac178e24f434a20da97a5707536c..e0700cbdb8195727312349b2a52ccbf097588e40 100644
--- a/services/hsts/hsts.service.js
+++ b/services/hsts/hsts.service.js
@@ -55,7 +55,7 @@ export default class HSTS extends BaseJsonService {
   async fetch({ domain }) {
     return this._requestJson({
       schema,
-      url: `https://hstspreload.org/api/v2/status`,
+      url: 'https://hstspreload.org/api/v2/status',
       options: { searchParams: { domain } },
     })
   }
diff --git a/services/maintenance/maintenance.service.js b/services/maintenance/maintenance.service.js
index c38bc236318ff65c124b3f5ca54654f0b7a09c72..e974e0ddc4e7e1e72db85e8e9122885d5c2773aa 100644
--- a/services/maintenance/maintenance.service.js
+++ b/services/maintenance/maintenance.service.js
@@ -34,7 +34,7 @@ export default class Maintenance extends BaseService {
     }
 
     return {
-      message: `${isStale ? `stale` : 'no!'} (as of ${targetYear})`,
+      message: `${isStale ? 'stale' : 'no!'} (as of ${targetYear})`,
       color: isStale ? undefined : 'red',
     }
   }
diff --git a/services/maven-central/maven-central.service.js b/services/maven-central/maven-central.service.js
index feccfe07d39a10e3fded68f801355a4eec1ab83c..9b8de2451327b392a24dc706bde0820cc8b4184f 100644
--- a/services/maven-central/maven-central.service.js
+++ b/services/maven-central/maven-central.service.js
@@ -28,7 +28,7 @@ export default redirector({
       documentation,
     },
   ],
-  transformPath: () => `/maven-metadata/v`,
+  transformPath: () => '/maven-metadata/v',
   transformQueryParams: ({ groupId, artifactId, versionPrefix }) => {
     const group = encodeURIComponent(groupId).replace(/\./g, '/')
     const artifact = encodeURIComponent(artifactId)
diff --git a/services/mozilla-observatory/mozilla-observatory.service.js b/services/mozilla-observatory/mozilla-observatory.service.js
index 4b83a059a35fe6809101712cf774ae1f435b9b5e..352089388032d5ec5a54f80f1d41104556dc596a 100644
--- a/services/mozilla-observatory/mozilla-observatory.service.js
+++ b/services/mozilla-observatory/mozilla-observatory.service.js
@@ -99,7 +99,7 @@ export default class MozillaObservatory extends BaseJsonService {
   async fetch({ host, publish }) {
     return this._requestJson({
       schema,
-      url: `https://http-observatory.security.mozilla.org/api/v1/analyze`,
+      url: 'https://http-observatory.security.mozilla.org/api/v1/analyze',
       options: {
         method: 'POST',
         searchParams: { host },
diff --git a/services/node/node-current.service.js b/services/node/node-current.service.js
index 4494641fc1f759ea9184d85db59b9a3998026b7a..919b36d00951ca4d552388422152b82fe999db52 100644
--- a/services/node/node-current.service.js
+++ b/services/node/node-current.service.js
@@ -12,5 +12,6 @@ export default class NodeCurrentVersion extends NodeVersionBase {
 
   static colorResolver = versionColorForRangeCurrent
 
-  static documentation = `This badge indicates whether the package supports the <b>latest</b> release of node`
+  static documentation =
+    'This badge indicates whether the package supports the <b>latest</b> release of node'
 }
diff --git a/services/node/node-current.tester.js b/services/node/node-current.tester.js
index 7d50fa272df0a182b62438e8dfb963f0b5d3a2ae..4734070c28f4f83d3c83d1fddfb91324ce88c348 100644
--- a/services/node/node-current.tester.js
+++ b/services/node/node-current.tester.js
@@ -25,7 +25,7 @@ t.create('engines satisfies current node version')
     })
   )
   .intercept(mockCurrentSha(13))
-  .expectBadge({ label: 'node', message: `>=0.4.0`, color: `brightgreen` })
+  .expectBadge({ label: 'node', message: '>=0.4.0', color: 'brightgreen' })
 
 t.create('engines does not satisfy current node version')
   .get('/passport.json')
@@ -36,7 +36,7 @@ t.create('engines does not satisfy current node version')
     })
   )
   .intercept(mockCurrentSha(13))
-  .expectBadge({ label: 'node', message: `12`, color: `yellow` })
+  .expectBadge({ label: 'node', message: '12', color: 'yellow' })
 
 t.create('gets the node version of @stdlib/stdlib')
   .get('/@stdlib/stdlib.json')
@@ -57,7 +57,7 @@ t.create('engines satisfies current node version - scoped')
     })
   )
   .intercept(mockCurrentSha(13))
-  .expectBadge({ label: 'node', message: `>=0.4.0`, color: `brightgreen` })
+  .expectBadge({ label: 'node', message: '>=0.4.0', color: 'brightgreen' })
 
 t.create('engines does not satisfy current node version - scoped')
   .get('/@stdlib/stdlib.json')
@@ -71,7 +71,7 @@ t.create('engines does not satisfy current node version - scoped')
     })
   )
   .intercept(mockCurrentSha(13))
-  .expectBadge({ label: 'node', message: `12`, color: `yellow` })
+  .expectBadge({ label: 'node', message: '12', color: 'yellow' })
 
 t.create("gets the tagged release's node version version of ionic")
   .get('/ionic/testing.json')
@@ -92,8 +92,8 @@ t.create('engines satisfies current node version - tagged')
   .intercept(mockCurrentSha(13))
   .expectBadge({
     label: 'node@testing',
-    message: `>=0.4.0`,
-    color: `brightgreen`,
+    message: '>=0.4.0',
+    color: 'brightgreen',
   })
 
 t.create('engines does not satisfy current node version - tagged')
@@ -106,7 +106,7 @@ t.create('engines does not satisfy current node version - tagged')
     })
   )
   .intercept(mockCurrentSha(13))
-  .expectBadge({ label: 'node@testing', message: `12`, color: `yellow` })
+  .expectBadge({ label: 'node@testing', message: '12', color: 'yellow' })
 
 t.create("gets the tagged release's node version of @cycle/core")
   .get('/@cycle/core/canary.json')
@@ -128,8 +128,8 @@ t.create('engines satisfies current node version - scoped and tagged')
   .intercept(mockCurrentSha(13))
   .expectBadge({
     label: 'node@canary',
-    message: `>=0.4.0`,
-    color: `brightgreen`,
+    message: '>=0.4.0',
+    color: 'brightgreen',
   })
 
 t.create('engines does not satisfy current node version - scoped and tagged')
@@ -143,7 +143,7 @@ t.create('engines does not satisfy current node version - scoped and tagged')
     })
   )
   .intercept(mockCurrentSha(13))
-  .expectBadge({ label: 'node@canary', message: `12`, color: `yellow` })
+  .expectBadge({ label: 'node@canary', message: '12', color: 'yellow' })
 
 t.create('gets the node version of passport from a custom registry')
   .get('/passport.json?registry_uri=https://registry.npmjs.com')
diff --git a/services/node/node-lts.service.js b/services/node/node-lts.service.js
index 934e2ff71912dcabeff75f773d653c770c21dda5..3021c746aee9773209abff4af9451a532f3f0f8b 100644
--- a/services/node/node-lts.service.js
+++ b/services/node/node-lts.service.js
@@ -12,5 +12,6 @@ export default class NodeLtsVersion extends NodeVersionBase {
 
   static colorResolver = versionColorForRangeLts
 
-  static documentation = `This badge indicates whether the package supports <b>all</b> LTS node versions`
+  static documentation =
+    'This badge indicates whether the package supports <b>all</b> LTS node versions'
 }
diff --git a/services/node/node-lts.tester.js b/services/node/node-lts.tester.js
index 016604c21df7962b3ade63089b00de2bb137c2f3..e4d55ba84107e99ddca2d93774cb937cf6055a26 100644
--- a/services/node/node-lts.tester.js
+++ b/services/node/node-lts.tester.js
@@ -30,7 +30,7 @@ t.create('engines satisfies all lts node versions')
     })
   )
   .intercept(mockVersionsSha())
-  .expectBadge({ label: 'node-lts', message: `10 - 12`, color: `brightgreen` })
+  .expectBadge({ label: 'node-lts', message: '10 - 12', color: 'brightgreen' })
 
 t.create('engines does not satisfy all lts node versions')
   .get('/passport.json')
@@ -42,7 +42,7 @@ t.create('engines does not satisfy all lts node versions')
     })
   )
   .intercept(mockVersionsSha())
-  .expectBadge({ label: 'node-lts', message: `8`, color: `orange` })
+  .expectBadge({ label: 'node-lts', message: '8', color: 'orange' })
 
 t.create('engines satisfies some lts node versions')
   .get('/passport.json')
@@ -54,7 +54,7 @@ t.create('engines satisfies some lts node versions')
     })
   )
   .intercept(mockVersionsSha())
-  .expectBadge({ label: 'node-lts', message: `10`, color: `yellow` })
+  .expectBadge({ label: 'node-lts', message: '10', color: 'yellow' })
 
 t.create('gets the node version of @stdlib/stdlib')
   .get('/@stdlib/stdlib.json')
@@ -74,7 +74,7 @@ t.create('engines satisfies all lts node versions - scoped')
     })
   )
   .intercept(mockVersionsSha())
-  .expectBadge({ label: 'node-lts', message: `10 - 12`, color: `brightgreen` })
+  .expectBadge({ label: 'node-lts', message: '10 - 12', color: 'brightgreen' })
 
 t.create('engines does not satisfy all lts node versions - scoped')
   .get('/@stdlib/stdlib.json')
@@ -87,7 +87,7 @@ t.create('engines does not satisfy all lts node versions - scoped')
     })
   )
   .intercept(mockVersionsSha())
-  .expectBadge({ label: 'node-lts', message: `8`, color: `orange` })
+  .expectBadge({ label: 'node-lts', message: '8', color: 'orange' })
 
 t.create('engines satisfies some lts node versions - scoped')
   .get('/@stdlib/stdlib.json')
@@ -100,7 +100,7 @@ t.create('engines satisfies some lts node versions - scoped')
     })
   )
   .intercept(mockVersionsSha())
-  .expectBadge({ label: 'node-lts', message: `10`, color: `yellow` })
+  .expectBadge({ label: 'node-lts', message: '10', color: 'yellow' })
 
 t.create("gets the tagged release's node version version of ionic")
   .get('/ionic/testing.json')
@@ -122,8 +122,8 @@ t.create('engines satisfies all lts node versions - tagged')
   .intercept(mockVersionsSha())
   .expectBadge({
     label: 'node-lts@testing',
-    message: `10 - 12`,
-    color: `brightgreen`,
+    message: '10 - 12',
+    color: 'brightgreen',
   })
 
 t.create('engines does not satisfy all lts node versions - tagged')
@@ -137,7 +137,7 @@ t.create('engines does not satisfy all lts node versions - tagged')
     })
   )
   .intercept(mockVersionsSha())
-  .expectBadge({ label: 'node-lts@testing', message: `8`, color: `orange` })
+  .expectBadge({ label: 'node-lts@testing', message: '8', color: 'orange' })
 
 t.create('engines satisfies some lts node versions - tagged')
   .get('/ionic/testing.json')
@@ -150,7 +150,7 @@ t.create('engines satisfies some lts node versions - tagged')
     })
   )
   .intercept(mockVersionsSha())
-  .expectBadge({ label: 'node-lts@testing', message: `10`, color: `yellow` })
+  .expectBadge({ label: 'node-lts@testing', message: '10', color: 'yellow' })
 
 t.create("gets the tagged release's node version of @cycle/core")
   .get('/@cycle/core/canary.json')
@@ -173,8 +173,8 @@ t.create('engines satisfies all lts node versions - scoped and tagged')
   .intercept(mockVersionsSha())
   .expectBadge({
     label: 'node-lts@canary',
-    message: `10 - 12`,
-    color: `brightgreen`,
+    message: '10 - 12',
+    color: 'brightgreen',
   })
 
 t.create('engines does not satisfy all lts node versions - scoped and tagged')
@@ -189,7 +189,7 @@ t.create('engines does not satisfy all lts node versions - scoped and tagged')
     })
   )
   .intercept(mockVersionsSha())
-  .expectBadge({ label: 'node-lts@canary', message: `8`, color: `orange` })
+  .expectBadge({ label: 'node-lts@canary', message: '8', color: 'orange' })
 
 t.create('engines satisfies some lts node versions - scoped and tagged')
   .get('/@cycle/core/canary.json')
@@ -203,7 +203,7 @@ t.create('engines satisfies some lts node versions - scoped and tagged')
     })
   )
   .intercept(mockVersionsSha())
-  .expectBadge({ label: 'node-lts@canary', message: `10`, color: `yellow` })
+  .expectBadge({ label: 'node-lts@canary', message: '10', color: 'yellow' })
 
 t.create('gets the node version of passport from a custom registry')
   .get('/passport.json?registry_uri=https://registry.npmjs.com')
diff --git a/services/node/node-version-color.js b/services/node/node-version-color.js
index 675c9f00b947c6f5119aa376a4fb3090507f9103..78f50f2fa3d1eb5af54aa6e28dde2caeabdac4bc 100644
--- a/services/node/node-version-color.js
+++ b/services/node/node-version-color.js
@@ -5,7 +5,7 @@ import { getCachedResource } from '../../core/base-service/resource-cache.js'
 const dateFormat = 'YYYY-MM-DD'
 
 async function getVersion(version) {
-  let semver = ``
+  let semver = ''
   if (version) {
     semver = `-${version}.x`
   }
diff --git a/services/node/testUtils/test-utils.js b/services/node/testUtils/test-utils.js
index 4a3b7c4b4324c90b7b7c6f551dd073c0634849af..b1a904856469650d938d158e1e4067b0791ebbe5 100644
--- a/services/node/testUtils/test-utils.js
+++ b/services/node/testUtils/test-utils.js
@@ -9,14 +9,14 @@ const templates = {
   packageJsonVersionsTemplate: fs.readFileSync(
     path.join(
       path.dirname(fileURLToPath(import.meta.url)),
-      `packageJsonVersionsTemplate.json`
+      'packageJsonVersionsTemplate.json'
     ),
     'utf-8'
   ),
   packageJsonTemplate: fs.readFileSync(
     path.join(
       path.dirname(fileURLToPath(import.meta.url)),
-      `packageJsonTemplate.json`
+      'packageJsonTemplate.json'
     ),
     'utf-8'
   ),
@@ -51,7 +51,7 @@ const mockPackageData =
 const mockCurrentSha = latestVersion => nock => {
   const latestSha = `node-v${latestVersion}.12.0-aix-ppc64.tar.gz`
   return nock('https://nodejs.org/dist/')
-    .get(`/latest/SHASUMS256.txt`)
+    .get('/latest/SHASUMS256.txt')
     .reply(200, latestSha)
 }
 
@@ -146,7 +146,7 @@ const mockReleaseSchedule = () => nock => {
     },
   }
   return nock('https://raw.githubusercontent.com/')
-    .get(`/nodejs/Release/master/schedule.json`)
+    .get('/nodejs/Release/master/schedule.json')
     .reply(200, schedule)
 }
 
diff --git a/services/npm/npm-type-definitions.tester.js b/services/npm/npm-type-definitions.tester.js
index 60cadb61fac11aad660432f2d007cbaa9c75e4c8..84aff89701264a128400b290a29730e420b874ed 100644
--- a/services/npm/npm-type-definitions.tester.js
+++ b/services/npm/npm-type-definitions.tester.js
@@ -14,7 +14,7 @@ t.create('types (from files)')
   .get('/form-data-entries.json')
   .intercept(nock =>
     nock('https://registry.npmjs.org')
-      .get(`/form-data-entries/latest`)
+      .get('/form-data-entries/latest')
       .reply(200, {
         maintainers: [],
         files: ['index.js', 'index.d.ts'],
diff --git a/services/npms-io/npms-io-score.tester.js b/services/npms-io/npms-io-score.tester.js
index 855efceefad3042a5210bcab88ff28ccbeca8bea..b7ee9b3a577d882af969bb747e763bc2e8a3a32d 100644
--- a/services/npms-io/npms-io-score.tester.js
+++ b/services/npms-io/npms-io-score.tester.js
@@ -13,7 +13,7 @@ t.create('should show color')
     nock.enableNetConnect()
 
     return nock('https://api.npms.io', { allowUnmocked: true })
-      .get(`/v2/package/mock-for-package-score`)
+      .get('/v2/package/mock-for-package-score')
       .reply(200, {
         score: {
           final: 0.89,
diff --git a/services/nycrc/nycrc.service.js b/services/nycrc/nycrc.service.js
index 1e4405e1b64e83c3e113404f0baef63a25c56d22..631f3c0378fb2143bc60983bd75d895dda8cf489 100644
--- a/services/nycrc/nycrc.service.js
+++ b/services/nycrc/nycrc.service.js
@@ -74,7 +74,8 @@ export default class Nycrc extends ConditionalGithubAuthV3Service {
     if (preferredThreshold) {
       if (!validThresholds.includes(preferredThreshold)) {
         throw new InvalidParameter({
-          prettyMessage: `threshold must be "branches", "lines", or "functions"`,
+          prettyMessage:
+            'threshold must be "branches", "lines", or "functions"',
         })
       }
       if (!config[preferredThreshold]) {
diff --git a/services/opm/opm-version.service.js b/services/opm/opm-version.service.js
index 13edb5cf229a4866a1f203006d40784ecec35fd9..b0c8b5e7fe0f28cf1e949f7cfaca55ff500e9d4f 100644
--- a/services/opm/opm-version.service.js
+++ b/services/opm/opm-version.service.js
@@ -26,7 +26,7 @@ export default class OpmVersion extends BaseService {
 
   async fetch({ user, moduleName }) {
     const { res } = await this._request({
-      url: `https://opm.openresty.org/api/pkg/fetch`,
+      url: 'https://opm.openresty.org/api/pkg/fetch',
       options: {
         method: 'HEAD',
         searchParams: {
diff --git a/services/osslifecycle/osslifecycle.tester.js b/services/osslifecycle/osslifecycle.tester.js
index 9003d2e778d737aaa9385c26ad029fbc2c191fb8..61420f85fcff6ca9a6a8a0f0889a5b06db894ed2 100644
--- a/services/osslifecycle/osslifecycle.tester.js
+++ b/services/osslifecycle/osslifecycle.tester.js
@@ -46,7 +46,7 @@ t.create('oss metadata in unexpected format')
     nock =>
       nock('https://raw.githubusercontent.com')
         .get('/some-user/some-project/HEAD/OSSMETADATA')
-        .reply(200, `wrongkey=active`),
+        .reply(200, 'wrongkey=active'),
     {
       'Content-Type': 'text/plain;charset=UTF-8',
     }
diff --git a/services/pub/pub-likes.service.js b/services/pub/pub-likes.service.js
index 8f066ded58e789eae27595e94670e0015795975e..6f08732c6b73e94292c6f86dca9bf3cb9b2d1fd2 100644
--- a/services/pub/pub-likes.service.js
+++ b/services/pub/pub-likes.service.js
@@ -3,7 +3,8 @@ import { BaseJsonService } from '../index.js'
 import { metric } from '../text-formatters.js'
 import { nonNegativeInteger } from '../validators.js'
 
-const documentation = `<p>A measure of how many developers have liked a package. This provides a raw measure of the overall sentiment of a package from peer developers.</p>`
+const documentation =
+  '<p>A measure of how many developers have liked a package. This provides a raw measure of the overall sentiment of a package from peer developers.</p>'
 
 const keywords = ['dart', 'flutter']
 
diff --git a/services/pub/pub-points.service.js b/services/pub/pub-points.service.js
index 0511e9149c2ab42b195ecb602d7bfdc285b99539..900d428a92c990ef5a5f20548d8c88d5a98d892e 100644
--- a/services/pub/pub-points.service.js
+++ b/services/pub/pub-points.service.js
@@ -3,7 +3,8 @@ import { floorCount } from '../color-formatters.js'
 import { BaseJsonService } from '../index.js'
 import { nonNegativeInteger } from '../validators.js'
 
-const documentation = `<p>A measure of quality. This includes several dimensions of quality such as code style, platform support, and maintainability.</p>`
+const documentation =
+  '<p>A measure of quality. This includes several dimensions of quality such as code style, platform support, and maintainability.</p>'
 
 const keywords = ['dart', 'flutter']
 
diff --git a/services/pub/pub-popularity.service.js b/services/pub/pub-popularity.service.js
index f0ed56e0cf75c10fec195cc0cce7b585721907f6..742a229800f87e33b2a19fab6b25e1c94cf62279 100644
--- a/services/pub/pub-popularity.service.js
+++ b/services/pub/pub-popularity.service.js
@@ -2,7 +2,8 @@ import Joi from 'joi'
 import { floorCount } from '../color-formatters.js'
 import { BaseJsonService } from '../index.js'
 
-const documentation = `<p>A measure of how many developers use a package, providing insight into what other developers are using.</p>`
+const documentation =
+  '<p>A measure of how many developers use a package, providing insight into what other developers are using.</p>'
 
 const keywords = ['dart', 'flutter']
 
diff --git a/services/security-headers/security-headers.service.js b/services/security-headers/security-headers.service.js
index 103108cbfbe91f91ef57bda0caa1c753d44554a0..d6361b52bbf2ff1a30b285d8781c8cb08fcf052c 100644
--- a/services/security-headers/security-headers.service.js
+++ b/services/security-headers/security-headers.service.js
@@ -72,7 +72,7 @@ export default class SecurityHeaders extends BaseService {
 
   async handle(namedParams, { url, ignoreRedirects }) {
     const { res } = await this._request({
-      url: `https://securityheaders.com`,
+      url: 'https://securityheaders.com',
       options: {
         method: 'HEAD',
         searchParams: {
diff --git a/services/spiget/spiget-download-size.service.js b/services/spiget/spiget-download-size.service.js
index 8a01380d7a42c5b2d506ac412d80ba8d633c3f4d..d4cb444df9b8e6d58848de21b3b3459d743c231f 100644
--- a/services/spiget/spiget-download-size.service.js
+++ b/services/spiget/spiget-download-size.service.js
@@ -26,7 +26,7 @@ export default class SpigetDownloadSize extends BaseSpigetService {
   static render({ size, unit, type }) {
     if (type === 'external') {
       return {
-        message: `resource hosted externally`,
+        message: 'resource hosted externally',
         color: 'lightgrey',
       }
     }
diff --git a/services/stackexchange/stackexchange-monthlyquestions.service.js b/services/stackexchange/stackexchange-monthlyquestions.service.js
index 3bb5b10b141108bf6f94b5c3c0513e8f2a199673..1c24b8d233049796488612ca31bcbd2b9a6f1d78 100644
--- a/services/stackexchange/stackexchange-monthlyquestions.service.js
+++ b/services/stackexchange/stackexchange-monthlyquestions.service.js
@@ -63,7 +63,7 @@ export default class StackExchangeMonthlyQuestions extends BaseJsonService {
           tagged: query,
         },
       },
-      url: `https://api.stackexchange.com/2.2/questions`,
+      url: 'https://api.stackexchange.com/2.2/questions',
     })
 
     const numValue = parsedData.total
diff --git a/services/swagger/swagger-redirect.service.js b/services/swagger/swagger-redirect.service.js
index 091acf5c08c6f283a3223471d7fe8be92c3cab50..5106a863c5d57a02b46a95dbb050669fdfb2641d 100644
--- a/services/swagger/swagger-redirect.service.js
+++ b/services/swagger/swagger-redirect.service.js
@@ -8,7 +8,7 @@ export default [
       base: 'swagger/valid/2.0',
       pattern: ':scheme(http|https)/:url*',
     },
-    transformPath: () => `/swagger/valid/3.0`,
+    transformPath: () => '/swagger/valid/3.0',
     transformQueryParams: ({ scheme, url }) => {
       const suffix = /(yaml|yml|json)$/.test(url) ? '' : '.json'
       return { specUrl: `${scheme}://${url}${suffix}` }
diff --git a/services/treeware/treeware-trees.service.js b/services/treeware/treeware-trees.service.js
index e0b32e217f360c307242a3243ec27b8734c7fc5c..8aceacd6a0adf71242d3b33c05208052214eab15 100644
--- a/services/treeware/treeware-trees.service.js
+++ b/services/treeware/treeware-trees.service.js
@@ -33,7 +33,7 @@ export default class TreewareTrees extends BaseJsonService {
   }
 
   async fetch({ reference }) {
-    const url = `https://public.offset.earth/users/treeware/trees`
+    const url = 'https://public.offset.earth/users/treeware/trees'
     return this._requestJson({
       url,
       schema: apiSchema,
diff --git a/services/twitch/twitch-base.js b/services/twitch/twitch-base.js
index de34e6fa7b521e00a8e5294e8f5de7cf82198ad3..844157c3f1bd793c348fe45b20f2ad3786f3032f 100644
--- a/services/twitch/twitch-base.js
+++ b/services/twitch/twitch-base.js
@@ -39,7 +39,7 @@ export default class TwitchBase extends BaseJsonService {
         { userKey: 'client_id', passKey: 'client_secret' },
         {
           schema: tokenSchema,
-          url: `https://id.twitch.tv/oauth2/token`,
+          url: 'https://id.twitch.tv/oauth2/token',
           options: {
             method: 'POST',
             searchParams: {
diff --git a/services/twitch/twitch-extension-version.service.js b/services/twitch/twitch-extension-version.service.js
index a8393d4854d4928366a63423c66ee354b2ad4b0c..cc3ad5a3e3aa40a0957954326dcb1fea535a7e8b 100644
--- a/services/twitch/twitch-extension-version.service.js
+++ b/services/twitch/twitch-extension-version.service.js
@@ -34,7 +34,7 @@ export default class TwitchExtensionVersion extends TwitchBase {
   async fetch({ extensionId }) {
     const data = this._requestJson({
       schema: helixSchema,
-      url: `https://api.twitch.tv/helix/extensions/released`,
+      url: 'https://api.twitch.tv/helix/extensions/released',
       options: {
         searchParams: { extension_id: extensionId },
       },
diff --git a/services/twitch/twitch.service.js b/services/twitch/twitch.service.js
index 359d19de5e4c77d5ee52be3154aeeb4333c43bd4..b94d49a33498c7b3b132dfd4cfa0f3408fdf346e 100644
--- a/services/twitch/twitch.service.js
+++ b/services/twitch/twitch.service.js
@@ -51,7 +51,7 @@ export default class TwitchStatus extends TwitchBase {
     // which we consider not worth it.
     const streams = this._requestJson({
       schema: helixSchema,
-      url: `https://api.twitch.tv/helix/streams`,
+      url: 'https://api.twitch.tv/helix/streams',
       options: {
         searchParams: { user_login: user },
       },
diff --git a/services/twitter/twitter-redirect.service.js b/services/twitter/twitter-redirect.service.js
index 5291115dbdf43a93b7f9f6f2cdd4155be52635ae..ee802e17e0510ed7915584cde7ab0320e9b02ef0 100644
--- a/services/twitter/twitter-redirect.service.js
+++ b/services/twitter/twitter-redirect.service.js
@@ -8,7 +8,7 @@ export default [
       base: 'twitter/url',
       pattern: ':protocol(https|http)/:hostAndPath+',
     },
-    transformPath: () => `/twitter/url`,
+    transformPath: () => '/twitter/url',
     transformQueryParams: ({ protocol, hostAndPath }) => ({
       url: `${protocol}://${hostAndPath}`,
     }),
diff --git a/services/twitter/twitter.service.js b/services/twitter/twitter.service.js
index 81086e240827d5469c7618939e440b56d777e63d..64c650cda0a115cf7c8088eca38856887d5316f0 100644
--- a/services/twitter/twitter.service.js
+++ b/services/twitter/twitter.service.js
@@ -99,7 +99,7 @@ class TwitterFollow extends BaseJsonService {
   async fetch({ user }) {
     return this._requestJson({
       schema,
-      url: `http://cdn.syndication.twimg.com/widgets/followbutton/info.json`,
+      url: 'http://cdn.syndication.twimg.com/widgets/followbutton/info.json',
       options: { searchParams: { screen_names: user } },
     })
   }
diff --git a/services/vaadin-directory/vaadin-directory-base.js b/services/vaadin-directory/vaadin-directory-base.js
index 04f702b02a24c7427688018cecdb189f36a9e766..3bffe42a6f473eda30dba3e821447bed1e4eb82b 100644
--- a/services/vaadin-directory/vaadin-directory-base.js
+++ b/services/vaadin-directory/vaadin-directory-base.js
@@ -16,7 +16,7 @@ class BaseVaadinDirectoryService extends BaseJsonService {
   async fetch({ packageName }) {
     return this._requestJson({
       schema,
-      url: `https://vaadin.com/vaadincom/directory-service/components/search/findByUrlIdentifier`,
+      url: 'https://vaadin.com/vaadincom/directory-service/components/search/findByUrlIdentifier',
       options: {
         searchParams: {
           projection: 'summary',
diff --git a/services/visual-studio-marketplace/visual-studio-marketplace-azure-devops-installs.tester.js b/services/visual-studio-marketplace/visual-studio-marketplace-azure-devops-installs.tester.js
index f4b209c5460c5b4a8a80647e7b925acd47eacc1f..7cfa0618ab26c19d3af0e566fa52069e8f1cd4df 100644
--- a/services/visual-studio-marketplace/visual-studio-marketplace-azure-devops-installs.tester.js
+++ b/services/visual-studio-marketplace/visual-studio-marketplace-azure-devops-installs.tester.js
@@ -62,7 +62,7 @@ t.create('total installs')
   .get('/total/swellaby.cobertura-transform.json')
   .intercept(nock =>
     nock('https://marketplace.visualstudio.com/_apis/public/gallery/')
-      .post(`/extensionquery/`)
+      .post('/extensionquery/')
       .reply(200, mockResponse)
   )
   .expectBadge({
@@ -75,7 +75,7 @@ t.create('services installs')
   .get('/services/swellaby.cobertura-transform.json')
   .intercept(nock =>
     nock('https://marketplace.visualstudio.com/_apis/public/gallery/')
-      .post(`/extensionquery/`)
+      .post('/extensionquery/')
       .reply(200, mockResponse)
   )
   .expectBadge({
@@ -88,7 +88,7 @@ t.create('onprem installs')
   .get('/onprem/swellaby.cobertura-transform.json')
   .intercept(nock =>
     nock('https://marketplace.visualstudio.com/_apis/public/gallery/')
-      .post(`/extensionquery/`)
+      .post('/extensionquery/')
       .reply(200, mockResponse)
   )
   .expectBadge({
@@ -101,7 +101,7 @@ t.create('zero installs')
   .get('/total/swellaby.cobertura-transform.json')
   .intercept(nock =>
     nock('https://marketplace.visualstudio.com/_apis/public/gallery/')
-      .post(`/extensionquery/`)
+      .post('/extensionquery/')
       .reply(200, {
         results: [
           {
diff --git a/services/visual-studio-marketplace/visual-studio-marketplace-downloads.tester.js b/services/visual-studio-marketplace/visual-studio-marketplace-downloads.tester.js
index d74b78cb8747017fc48e20bf8526ea574b37b4ee..555bd8bb8f216bf39a79346bcffba8d090045033 100644
--- a/services/visual-studio-marketplace/visual-studio-marketplace-downloads.tester.js
+++ b/services/visual-studio-marketplace/visual-studio-marketplace-downloads.tester.js
@@ -62,7 +62,7 @@ t.create('installs')
   .get('/visual-studio-marketplace/i/swellaby.rust-pack.json')
   .intercept(nock =>
     nock('https://marketplace.visualstudio.com/_apis/public/gallery/')
-      .post(`/extensionquery/`)
+      .post('/extensionquery/')
       .reply(200, mockResponse)
   )
   .expectBadge({
@@ -75,7 +75,7 @@ t.create('zero installs')
   .get('/visual-studio-marketplace/i/swellaby.rust-pack.json')
   .intercept(nock =>
     nock('https://marketplace.visualstudio.com/_apis/public/gallery/')
-      .post(`/extensionquery/`)
+      .post('/extensionquery/')
       .reply(200, {
         results: [
           {
@@ -105,7 +105,7 @@ t.create('downloads')
   .get('/visual-studio-marketplace/d/swellaby.rust-pack.json')
   .intercept(nock =>
     nock('https://marketplace.visualstudio.com/_apis/public/gallery/')
-      .post(`/extensionquery/`)
+      .post('/extensionquery/')
       .reply(200, mockResponse)
   )
   .expectBadge({
diff --git a/services/visual-studio-marketplace/visual-studio-marketplace-rating.tester.js b/services/visual-studio-marketplace/visual-studio-marketplace-rating.tester.js
index 1d23290707ef25e664565d48db1ae97514de0068..ed6f987bbe7f398c12acb381eb04add2ab6b9fa8 100644
--- a/services/visual-studio-marketplace/visual-studio-marketplace-rating.tester.js
+++ b/services/visual-studio-marketplace/visual-studio-marketplace-rating.tester.js
@@ -22,7 +22,7 @@ t.create('rating')
   .get('/visual-studio-marketplace/r/ritwickdey.LiveServer.json')
   .intercept(nock =>
     nock('https://marketplace.visualstudio.com/_apis/public/gallery/')
-      .post(`/extensionquery/`)
+      .post('/extensionquery/')
       .reply(200, {
         results: [
           {
@@ -61,7 +61,7 @@ t.create('zero rating')
   .get('/visual-studio-marketplace/r/ritwickdey.LiveServer.json')
   .intercept(nock =>
     nock('https://marketplace.visualstudio.com/_apis/public/gallery/')
-      .post(`/extensionquery/`)
+      .post('/extensionquery/')
       .reply(200, {
         results: [
           {
@@ -91,7 +91,7 @@ t.create('stars')
   .get('/visual-studio-marketplace/stars/ritwickdey.LiveServer.json')
   .intercept(nock =>
     nock('https://marketplace.visualstudio.com/_apis/public/gallery/')
-      .post(`/extensionquery/`)
+      .post('/extensionquery/')
       .reply(200, {
         results: [
           {
diff --git a/services/visual-studio-marketplace/visual-studio-marketplace-version.tester.js b/services/visual-studio-marketplace/visual-studio-marketplace-version.tester.js
index 1b44b3e0e0e268b5a87704d1861960109c05ed51..d91be4cbba7999649514a6964fe82c8fddabb898 100644
--- a/services/visual-studio-marketplace/visual-studio-marketplace-version.tester.js
+++ b/services/visual-studio-marketplace/visual-studio-marketplace-version.tester.js
@@ -15,7 +15,7 @@ t.create('version')
   .get('/visual-studio-marketplace/v/ritwickdey.LiveServer.json')
   .intercept(nock =>
     nock('https://marketplace.visualstudio.com/_apis/public/gallery/')
-      .post(`/extensionquery/`)
+      .post('/extensionquery/')
       .reply(200, {
         results: [
           {
@@ -45,7 +45,7 @@ t.create('pre-release version')
   .get('/visual-studio-marketplace/v/swellaby.vscode-rust-test-adapter.json')
   .intercept(nock =>
     nock('https://marketplace.visualstudio.com/_apis/public/gallery/')
-      .post(`/extensionquery/`)
+      .post('/extensionquery/')
       .reply(200, {
         results: [
           {
diff --git a/services/weblate/weblate-entities.service.js b/services/weblate/weblate-entities.service.js
index df5c53d9ca85aec520ed385b5c49f15b866c8cd4..208040fe8c1baf7dd0caea154e314edad33754e6 100644
--- a/services/weblate/weblate-entities.service.js
+++ b/services/weblate/weblate-entities.service.js
@@ -18,7 +18,7 @@ export default class WeblateEntities extends WeblateBase {
 
   static examples = [
     {
-      title: `Weblate entities`,
+      title: 'Weblate entities',
       namedParams: { type: 'projects' },
       queryParams: { server: 'https://hosted.weblate.org' },
       staticPreview: this.render({ type: 'projects', count: 533 }),
diff --git a/services/weblate/weblate-user-statistic.service.js b/services/weblate/weblate-user-statistic.service.js
index fa697194e5eb44c843320b73e40a6a1409060d2c..bd7847dc3ebd8e4e61e569217ee047962a9f2077 100644
--- a/services/weblate/weblate-user-statistic.service.js
+++ b/services/weblate/weblate-user-statistic.service.js
@@ -31,7 +31,7 @@ export default class WeblateUserStatistic extends WeblateBase {
 
   static examples = [
     {
-      title: `Weblate user statistic`,
+      title: 'Weblate user statistic',
       namedParams: { statistic: 'translations', user: 'nijel' },
       queryParams: { server: 'https://hosted.weblate.org' },
       staticPreview: this.render({ statistic: 'translations', count: 30585 }),
diff --git a/services/wercker/wercker.service.js b/services/wercker/wercker.service.js
index 60e964d39054d289f13f586add882d5cd3861194..d15d969f84f21bfeb717f6895a3c64faf163c46f 100644
--- a/services/wercker/wercker.service.js
+++ b/services/wercker/wercker.service.js
@@ -42,14 +42,14 @@ export default class Wercker extends BaseJsonService {
 
   static examples = [
     {
-      title: `Wercker CI Run`,
+      title: 'Wercker CI Run',
       pattern: 'ci/:applicationId',
       namedParams: { applicationId: '559e33c8e982fc615500b357' },
       staticPreview: this.render({ result: 'passed' }),
       documentation: werckerCIDocumentation,
     },
     {
-      title: `Wercker CI Run (branch)`,
+      title: 'Wercker CI Run (branch)',
       pattern: 'ci/:applicationId/:branch',
       namedParams: {
         applicationId: '559e33c8e982fc615500b357',
@@ -59,7 +59,7 @@ export default class Wercker extends BaseJsonService {
       documentation: werckerCIDocumentation,
     },
     {
-      title: `Wercker Build`,
+      title: 'Wercker Build',
       pattern: 'build/:userName/:applicationName',
       namedParams: {
         userName: 'wercker',
@@ -68,7 +68,7 @@ export default class Wercker extends BaseJsonService {
       staticPreview: this.render({ result: 'passed' }),
     },
     {
-      title: `Wercker Build (branch)`,
+      title: 'Wercker Build (branch)',
       pattern: 'build/:userName/:applicationName/:branch',
       namedParams: {
         userName: 'wercker',
diff --git a/services/wikiapiary/wikiapiary-installs.service.js b/services/wikiapiary/wikiapiary-installs.service.js
index 6b11ed156713a421436e651f005fd52563b9a880..4796467fcd7c7d264a945ddd629d0e89602acbd8 100644
--- a/services/wikiapiary/wikiapiary-installs.service.js
+++ b/services/wikiapiary/wikiapiary-installs.service.js
@@ -75,7 +75,7 @@ export default class WikiapiaryInstalls extends BaseJsonService {
   async fetch({ variant, name }) {
     return this._requestJson({
       schema,
-      url: `https://wikiapiary.com/w/api.php`,
+      url: 'https://wikiapiary.com/w/api.php',
       options: {
         searchParams: {
           action: 'ask',
diff --git a/services/wordpress/wordpress-platform.service.js b/services/wordpress/wordpress-platform.service.js
index c19716ed672ae983f11cdc8b3c44e0854a78a5a7..b5e4e037f4852eabfb9204be9e9e3bba03b3fdf9 100644
--- a/services/wordpress/wordpress-platform.service.js
+++ b/services/wordpress/wordpress-platform.service.js
@@ -67,7 +67,7 @@ class WordpressPluginTestedVersion extends BaseWordpress {
   static category = 'platform-support'
 
   static route = {
-    base: `wordpress/plugin/tested`,
+    base: 'wordpress/plugin/tested',
     pattern: ':slug',
   }