diff --git a/.eslintrc.yml b/.eslintrc.yml
index 09c32d7415e4cc7aa2145302e2c24eb97a4408cd..4c9e3ab9ab9e00c2345d90ce76ef1888eab9dc7a 100644
--- a/.eslintrc.yml
+++ b/.eslintrc.yml
@@ -36,6 +36,7 @@ rules:
   arrow-body-style: ["error", "as-needed"]
   no-extension-in-require/main: "error"
   object-shorthand: ["error", "properties"]
+  prefer-template: "error"
 
   # Mocha-related.
   mocha/no-exclusive-tests: "error"
diff --git a/frontend/components/badge-examples.js b/frontend/components/badge-examples.js
index bf6311c2a743fef3bb131e19e182b8f9c5d32aca..049ea2b608ec5e6287719afcfef88ab3f265ebb7 100644
--- a/frontend/components/badge-examples.js
+++ b/frontend/components/badge-examples.js
@@ -83,7 +83,7 @@ const Category = ({ category, examples, baseUrl, longCache, onClick }) => {
   }
   return (
     <div>
-      <Link to={'/examples/' + category.id}>
+      <Link to={`/examples/${category.id}`}>
         <h3 id={category.id}>{category.name}</h3>
       </Link>
       <table className="badge">
diff --git a/frontend/components/search-results.js b/frontend/components/search-results.js
index c13e26f4561d57cfbce792b9ac0408688e00c250..a1a601a978ad32de20bd2af9155f3e4bf5fe5a7c 100644
--- a/frontend/components/search-results.js
+++ b/frontend/components/search-results.js
@@ -33,7 +33,7 @@ export default class SearchResults extends React.Component {
 
   renderCategoryHeadings() {
     return this.preparedExamples.map((category, i) => (
-      <Link to={'/examples/' + category.category.id} key={category.category.id}>
+      <Link to={`/examples/${category.category.id}`} key={category.category.id}>
         <h3 id={category.category.id}>{category.category.name}</h3>
       </Link>
     ))
diff --git a/lib/badge-cli.js b/lib/badge-cli.js
index 946b8de087045b33aea1050c51caea20bdf65c2f..13c20198960ea024b82c9af2f8dd252f686bf578 100755
--- a/lib/badge-cli.js
+++ b/lib/badge-cli.js
@@ -14,9 +14,7 @@ if (process.argv.length < 4) {
     'Or:    badge subject status right-color [left-color] [.output] [@style]'
   )
   console.log()
-  console.log(
-    '  colorscheme: one of ' + Object.keys(colorscheme).join(', ') + '.'
-  )
+  console.log(`  colorscheme: one of ${Object.keys(colorscheme).join(', ')}.`)
   console.log('  left-color, right-color:')
   console.log('    #xxx (three hex digits)')
   console.log('    #xxxxxx (six hex digits)')
diff --git a/lib/badge-data.js b/lib/badge-data.js
index 7bff1e6b93f438c577a9d279103e341260f1abca..4a6954ed17af8aef97c7c45ef8e203402d077674 100644
--- a/lib/badge-data.js
+++ b/lib/badge-data.js
@@ -21,7 +21,7 @@ function prependPrefix(s, prefix) {
     return undefined
   }
 
-  s = '' + s
+  s = `${s}`
 
   if (s.startsWith(prefix)) {
     return s
@@ -36,7 +36,7 @@ function isHexColor(s = '') {
 
 function makeColor(color) {
   if (isHexColor(color)) {
-    return '#' + color
+    return `#${color}`
   } else if (colorschemes[color] !== undefined) {
     return colorschemes[color].colorB
   } else if (isCSSColor(color)) {
@@ -52,7 +52,7 @@ function makeColorB(defaultColor, overrides) {
 
 function setBadgeColor(badgeData, color) {
   if (isHexColor(color)) {
-    badgeData.colorB = '#' + color
+    badgeData.colorB = `#${color}`
     delete badgeData.colorscheme
   } else if (colorschemes[color] !== undefined) {
     badgeData.colorscheme = color
@@ -68,12 +68,11 @@ function setBadgeColor(badgeData, color) {
 }
 
 function makeLabel(defaultLabel, overrides) {
-  return (
-    '' +
-    (overrides.label === undefined
+  return `${
+    overrides.label === undefined
       ? (defaultLabel || '').toLowerCase()
-      : overrides.label)
-  )
+      : overrides.label
+  }`
 }
 
 function getShieldsIcon(icon = '', color = '') {
diff --git a/lib/color-formatters.js b/lib/color-formatters.js
index 16b417fc5bb1faff50a6923214c50c7240a89749..479cf7447fccad239fdd4654c513f04d50e09682 100644
--- a/lib/color-formatters.js
+++ b/lib/color-formatters.js
@@ -10,7 +10,7 @@ function version(version) {
   if (typeof version !== 'string' && typeof version !== 'number') {
     throw new Error(`Can't generate a version color for ${version}`)
   }
-  version = '' + version
+  version = `${version}`
   let first = version[0]
   if (first === 'v') {
     first = version[1]
diff --git a/lib/github-auth.js b/lib/github-auth.js
index 81f3a63587eb213640668a7f4b89f49c2e59be3e..36a576f3d520c0d44c049b3eeabe48cdab0489de 100644
--- a/lib/github-auth.js
+++ b/lib/github-auth.js
@@ -34,12 +34,12 @@ function setRoutes(server) {
     }
     const query = queryString.stringify({
       client_id: serverSecrets.gh_client_id,
-      redirect_uri: baseUrl + '/github-auth/done',
+      redirect_uri: `${baseUrl}/github-auth/done`,
     })
     ask.res.statusCode = 302 // Found.
     ask.res.setHeader(
       'Location',
-      'https://github.com/login/oauth/authorize?' + query
+      `https://github.com/login/oauth/authorize?${query}`
     )
     end('')
   })
@@ -125,7 +125,7 @@ function sendTokenToAllServers(token) {
       ip =>
         new Promise((resolve, reject) => {
           const options = {
-            url: 'https://' + ip + '/github-auth/add-token',
+            url: `https://${ip}/github-auth/add-token`,
             method: 'POST',
             form: {
               shieldsSecret: serverSecrets.shieldsSecret,
@@ -298,7 +298,7 @@ function githubRequest(request, url, query, cb) {
 
   if (githubToken != null) {
     // Typically, GitHub user tokens grants us 12500 req/hour.
-    headers['Authorization'] = 'token ' + githubToken
+    headers['Authorization'] = `token ${githubToken}`
   } else if (serverSecrets && serverSecrets.gh_client_id) {
     // Using our OAuth App secret grants us 5000 req/hour
     // instead of the standard 60 req/hour.
@@ -308,7 +308,7 @@ function githubRequest(request, url, query, cb) {
 
   const qs = queryString.stringify(query)
   if (qs) {
-    url += '?' + qs
+    url += `?${qs}`
   }
 
   request(url, { headers }, (err, res, buffer) => {
diff --git a/lib/load-logos.js b/lib/load-logos.js
index b44eb4c5f543eb8bd0b84424a58bfa422d97415a..f812de8fc33273427b10bf2fb2649a8676829e8b 100644
--- a/lib/load-logos.js
+++ b/lib/load-logos.js
@@ -14,7 +14,7 @@ function loadLogos() {
       return
     }
     // filename is eg, github.svg
-    const svg = fs.readFileSync(logoDir + '/' + filename).toString()
+    const svg = fs.readFileSync(`${logoDir}/${filename}`).toString()
     const base64 = svg2base64(svg)
 
     // eg, github
diff --git a/lib/log.js b/lib/log.js
index 46fa4ee5b38bf37976c77ea4c68b6f5a92a6dde4..b94768b9e08d0ef6c7d5bc8bded77e8928486e25 100644
--- a/lib/log.js
+++ b/lib/log.js
@@ -8,7 +8,7 @@ const listeners = []
 // eg. 4 becomes 04 but 17 stays 17.
 function pad(string) {
   string = String(string)
-  return string.length < 2 ? '0' + string : string
+  return string.length < 2 ? `0${string}` : string
 }
 
 // Compact date representation.
diff --git a/lib/logo-helper.js b/lib/logo-helper.js
index bcec10cc612adde769249cc7a70b23882d1d8957..b31f15814ad94e9fbcad3b8c964f519d048db303 100644
--- a/lib/logo-helper.js
+++ b/lib/logo-helper.js
@@ -11,7 +11,7 @@ function svg2base64(svg) {
   // Check if logo is already base64
   return isDataUri(svg)
     ? svg
-    : 'data:image/svg+xml;base64,' + Buffer.from(svg).toString('base64')
+    : `data:image/svg+xml;base64,${Buffer.from(svg).toString('base64')}`
 }
 
 module.exports = {
diff --git a/lib/lru-cache.js b/lib/lru-cache.js
index 2ed2942152a1ef1639322137f1bba443ef345719..20b52bc175a3409f6c6f478d64c70a39d8e7909c 100644
--- a/lib/lru-cache.js
+++ b/lib/lru-cache.js
@@ -107,7 +107,7 @@ Cache.prototype = {
         return 0
       }
     } else {
-      console.error("Unknown heuristic '" + this.type + "' for LRU cache.")
+      console.error(`Unknown heuristic '${this.type}' for LRU cache.`)
       return 1
     }
   },
diff --git a/lib/make-badge.js b/lib/make-badge.js
index 656b4341e0e9a22c4894ffb9917f28e45dc7705b..fcc7662a0235f88ce958daa8c2d8909553fd0406 100644
--- a/lib/make-badge.js
+++ b/lib/make-badge.js
@@ -22,16 +22,16 @@ templateFiles.forEach(async filename => {
     .readFileSync(path.join(__dirname, '..', 'templates', filename))
     .toString()
   const extension = path.extname(filename).slice(1)
-  const style = filename.slice(0, -('-template.' + extension).length)
+  const style = filename.slice(0, -`-template.${extension}`.length)
   // Compile the template. Necessary to always have a working template.
-  templates[style + '-' + extension] = dot.template(templateData)
+  templates[`${style}-${extension}`] = dot.template(templateData)
   if (extension === 'svg') {
     // Substitute dot code.
     const mapping = new Map()
     let mappingIndex = 1
     const untemplatedSvg = templateData.replace(/{{.*?}}/g, match => {
       // Weird substitution that currently works for all templates.
-      const mapKey = '99999990' + mappingIndex + '.1'
+      const mapKey = `99999990${mappingIndex}.1`
       mappingIndex++
       mapping.set(mapKey, match)
       return mapKey
@@ -74,7 +74,7 @@ templateFiles.forEach(async filename => {
       return
     }
 
-    templates[style + '-' + extension] = dot.template(svg)
+    templates[`${style}-${extension}`] = dot.template(svg)
   }
 })
 
@@ -125,7 +125,7 @@ function makeBadge(
   }
 ) {
   // String coercion.
-  text = text.map(value => '' + value)
+  text = text.map(value => `${value}`)
 
   if (format !== 'json') {
     format = 'svg'
diff --git a/lib/php-version.js b/lib/php-version.js
index 534a1ec6d695642b1ae8d2cf52b365d437c785d0..9aaed19da5b139557ae1390c0bb6c1413c5c58da 100644
--- a/lib/php-version.js
+++ b/lib/php-version.js
@@ -184,7 +184,7 @@ function minorVersion(version) {
     return ''
   }
 
-  return result[1] + '.' + (result[2] ? result[2] : '0')
+  return `${result[1]}.${result[2] ? result[2] : '0'}`
 }
 
 function versionReduction(versions, phpReleases) {
@@ -208,10 +208,10 @@ function versionReduction(versions, phpReleases) {
   // no missed versions
   if (first + versions.length - 1 === last) {
     if (last === phpReleases.length - 1) {
-      return '>= ' + (versions[0][2] === '0' ? versions[0][0] : versions[0]) // 7.0 -> 7
+      return `>= ${versions[0][2] === '0' ? versions[0][0] : versions[0]}` // 7.0 -> 7
     }
 
-    return versions[0] + ' - ' + versions[versions.length - 1]
+    return `${versions[0]} - ${versions[versions.length - 1]}`
   }
 
   return versions.join(', ')
diff --git a/lib/request-handler.js b/lib/request-handler.js
index e4d6e4ca9f584e3885798025a717aa82fffa8b5d..5cc5d28e7879d1047f8f51447b10bab245ccf8da 100644
--- a/lib/request-handler.js
+++ b/lib/request-handler.js
@@ -107,7 +107,7 @@ function handleRequest(makeBadge, handlerOptions) {
       ask.res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate')
       ask.res.setHeader('Expires', reqTime.toGMTString())
     } else {
-      ask.res.setHeader('Cache-Control', 'max-age=' + maxAge)
+      ask.res.setHeader('Cache-Control', `max-age=${maxAge}`)
       ask.res.setHeader(
         'Expires',
         new Date(+reqTime + maxAge * 1000).toGMTString()
diff --git a/lib/result-sender.js b/lib/result-sender.js
index 3aeed28907e8737b2a00cdcff0197ed95b7f27b0..6a6f397dbf36e577635f33951ac7e5e1cfab81dd 100644
--- a/lib/result-sender.js
+++ b/lib/result-sender.js
@@ -29,7 +29,7 @@ function sendSVG(res, askres, end) {
 }
 
 function sendOther(format, res, askres, end) {
-  askres.setHeader('Content-Type', 'image/' + format)
+  askres.setHeader('Content-Type', `image/${format}`)
   svg2img(res, format)
     .then(data => {
       end(null, { template: streamFromString(data) })
diff --git a/lib/service-test-runner/runner.js b/lib/service-test-runner/runner.js
index ecffe0a7d960e8554bc178111a283b54eb6d82a8..49694d30a09fa5670ffc3df3e382b4ca45932b6f 100644
--- a/lib/service-test-runner/runner.js
+++ b/lib/service-test-runner/runner.js
@@ -51,7 +51,7 @@ class Runner {
 
     // Throw at the end, to provide a better error message.
     if (missingServices.length > 0) {
-      throw Error('Unknown services: ' + missingServices.join(', '))
+      throw Error(`Unknown services: ${missingServices.join(', ')}`)
     }
   }
 
diff --git a/lib/suggest.js b/lib/suggest.js
index 933f353205d83f5baf48c3b88abee6f866602315..c04b4c01c22970fb2f79cadd98ea34d2fae0eaa7 100644
--- a/lib/suggest.js
+++ b/lib/suggest.js
@@ -123,7 +123,7 @@ function setRoutes(allowedOrigin, githubApiProvider, server) {
     try {
       url = nodeUrl.parse(data.url)
     } catch (e) {
-      end({ err: '' + e })
+      end({ err: `${e}` })
       return
     }
 
diff --git a/lib/text-formatters.js b/lib/text-formatters.js
index da320d91d6be8f1fc442161d71ad3cfba7ff69b3..b585f30d3dc3a068dda248df1762bea099641dee 100644
--- a/lib/text-formatters.js
+++ b/lib/text-formatters.js
@@ -57,13 +57,13 @@ function metric(n) {
     if (n >= limit) {
       n = Math.round(n / limit)
       if (n < 1000) {
-        return '' + n + metricPrefix[i]
+        return `${n}${metricPrefix[i]}`
       } else {
-        return '1' + metricPrefix[i + 1]
+        return `1${metricPrefix[i + 1]}`
       }
     }
   }
-  return '' + n
+  return `${n}`
 }
 
 // Remove the starting v in a string.
@@ -79,7 +79,7 @@ function omitv(version) {
 // - it is a date (yyyy-mm-dd)
 const ignoredVersionPatterns = /^[^0-9]|[0-9]{4}-[0-9]{2}-[0-9]{2}/
 function addv(version) {
-  version = '' + version
+  version = `${version}`
   if (version.startsWith('v') || ignoredVersionPatterns.test(version)) {
     return version
   } else {
diff --git a/lib/version.js b/lib/version.js
index b217658008c048a5fb46f302c7200b9a65a6df4c..94afc8cfc78a1cba228c4fee7a53265a7aaf2849 100644
--- a/lib/version.js
+++ b/lib/version.js
@@ -30,8 +30,8 @@ function latest(versions, { pre = false } = {}) {
     // coerce to string then lowercase otherwise alpha > RC
     version = versions.sort((a, b) =>
       semver.rcompare(
-        ('' + a).toLowerCase(),
-        ('' + b).toLowerCase(),
+        `${a}`.toLowerCase(),
+        `${b}`.toLowerCase(),
         /* loose */ true
       )
     )[0]
diff --git a/server.js b/server.js
index 82ace6906c7d1524b9d6b4f8efa2984dc87e1d97..e72cbebd8f1ad31e441ad61d3879e2ddd0dcbf96 100644
--- a/server.js
+++ b/server.js
@@ -248,7 +248,7 @@ camp.route(
 
     // Cache management - the badge is constant.
     const cacheDuration = (3600 * 24 * 1) | 0 // 1 day.
-    ask.res.setHeader('Cache-Control', 'max-age=' + cacheDuration)
+    ask.res.setHeader('Cache-Control', `max-age=${cacheDuration}`)
     if (+new Date(ask.req.headers['if-modified-since']) >= +serverStartTime) {
       ask.res.statusCode = 304
       ask.res.end() // not modified.
@@ -286,7 +286,7 @@ camp.route(
 let bitFlip = false
 camp.route(/^\/flip\.svg$/, (data, match, end, ask) => {
   const cacheSecs = 60
-  ask.res.setHeader('Cache-Control', 'max-age=' + cacheSecs)
+  ask.res.setHeader('Cache-Control', `max-age=${cacheSecs}`)
   const reqTime = new Date()
   const date = new Date(+reqTime + cacheSecs * 1000).toGMTString()
   ask.res.setHeader('Expires', date)
@@ -306,7 +306,7 @@ camp.route(/^\/([^/]+)\/(.+).png$/, (data, match, end, ask) => {
 
   // Cache management - the badge is constant.
   const cacheDuration = (3600 * 24 * 1) | 0 // 1 day.
-  ask.res.setHeader('Cache-Control', 'max-age=' + cacheDuration)
+  ask.res.setHeader('Cache-Control', `max-age=${cacheDuration}`)
   if (+new Date(ask.req.headers['if-modified-since']) >= +serverStartTime) {
     ask.res.statusCode = 304
     ask.res.end() // not modified.
diff --git a/services/amo/amo.service.js b/services/amo/amo.service.js
index 6d932f53bd88d7148ce954ed9f1b4db3b5e68cda..7a78ac12ea74dfe4f5327aa67e2253bdf7bd00ef 100644
--- a/services/amo/amo.service.js
+++ b/services/amo/amo.service.js
@@ -26,8 +26,7 @@ module.exports = class Amo extends LegacyService {
         const addonId = match[2]
         const format = match[3]
         const badgeData = getBadgeData('mozilla add-on', queryData)
-        const url =
-          'https://services.addons.mozilla.org/api/1.5/addon/' + addonId
+        const url = `https://services.addons.mozilla.org/api/1.5/addon/${addonId}`
 
         request(url, (err, res, buffer) => {
           if (err) {
@@ -62,7 +61,7 @@ module.exports = class Amo extends LegacyService {
                 case 'rating':
                   rating = parseInt(data.addon.rating, 10)
                   badgeData.text[0] = getLabel('rating', queryData)
-                  badgeData.text[1] = rating + '/5'
+                  badgeData.text[1] = `${rating}/5`
                   badgeData.colorscheme = floorCountColor(rating, 2, 3, 4)
                   break
                 case 'stars':
diff --git a/services/base.js b/services/base.js
index 4479a3fb5dcdc0491121afa488d22f59b6742dfc..93e423f55244439e70f548bbff6486805d6697c8 100644
--- a/services/base.js
+++ b/services/base.js
@@ -84,7 +84,7 @@ class BaseService {
   }
 
   static _makeFullUrl(partialUrl) {
-    return '/' + [this.url.base, partialUrl].filter(Boolean).join('/')
+    return `/${[this.url.base, partialUrl].filter(Boolean).join('/')}`
   }
 
   static _makeStaticExampleUrl(serviceData) {
diff --git a/services/beerpay/beerpay.service.js b/services/beerpay/beerpay.service.js
index b67200705fa6e37ce0d1b663f51393305208604e..aaeaa176a5487a9f771c2468f84db0fc74a1ef01 100644
--- a/services/beerpay/beerpay.service.js
+++ b/services/beerpay/beerpay.service.js
@@ -32,8 +32,7 @@ module.exports = class Beerpay extends LegacyService {
         const project = match[2] // eg, beerpay.io
         const format = match[3]
 
-        const apiUrl =
-          'https://beerpay.io/api/v1/' + user + '/projects/' + project
+        const apiUrl = `https://beerpay.io/api/v1/${user}/projects/${project}`
         const badgeData = getBadgeData('beerpay', data)
 
         request(apiUrl, (err, res, buffer) => {
@@ -45,7 +44,7 @@ module.exports = class Beerpay extends LegacyService {
 
           try {
             const data = JSON.parse(buffer)
-            badgeData.text[1] = '$' + (data.total_amount || 0)
+            badgeData.text[1] = `$${data.total_amount || 0}`
             badgeData.colorscheme = 'red'
             sendBadge(format, badgeData)
           } catch (e) {
diff --git a/services/bintray/bintray.service.js b/services/bintray/bintray.service.js
index bc49756dfb093e2a7101e19ac47db89cc3270762..cd74dca331ea78c9a8a0334c88dedf2106db4357 100644
--- a/services/bintray/bintray.service.js
+++ b/services/bintray/bintray.service.js
@@ -33,8 +33,7 @@ module.exports = class Bintray extends LegacyService {
 
         const options = {
           method: 'GET',
-          uri:
-            'https://bintray.com/api/v1/packages/' + path + '/versions/_latest',
+          uri: `https://bintray.com/api/v1/packages/${path}/versions/_latest`,
           headers: {
             Accept: 'application/json',
           },
diff --git a/services/bitbucket/bitbucket-issues.service.js b/services/bitbucket/bitbucket-issues.service.js
index f55ab1c6465a57281af37e8c4f67a61a3a5b6894..e1ec60c280642633d65b6c7b1b80ab0a2262c0e1 100644
--- a/services/bitbucket/bitbucket-issues.service.js
+++ b/services/bitbucket/bitbucket-issues.service.js
@@ -37,12 +37,7 @@ module.exports = class BitbucketIssues extends LegacyService {
         const user = match[2] // eg, atlassian
         const repo = match[3] // eg, python-bitbucket
         const format = match[4]
-        const apiUrl =
-          'https://bitbucket.org/api/1.0/repositories/' +
-          user +
-          '/' +
-          repo +
-          '/issues/?limit=0&status=new&status=open'
+        const apiUrl = `https://bitbucket.org/api/1.0/repositories/${user}/${repo}/issues/?limit=0&status=new&status=open`
 
         const badgeData = getBadgeData('issues', data)
         request(apiUrl, (err, res, buffer) => {
diff --git a/services/bitbucket/bitbucket-pipelines.service.js b/services/bitbucket/bitbucket-pipelines.service.js
index 4fdce0b0e59628dccb1be81d71fb1d7507eb6647..748242c489659e6e285de38d67c70407b0255278 100644
--- a/services/bitbucket/bitbucket-pipelines.service.js
+++ b/services/bitbucket/bitbucket-pipelines.service.js
@@ -37,13 +37,14 @@ module.exports = class BitbucketPipelines extends LegacyService {
         const branch = match[3] || 'master' // eg, development
         const format = match[4]
         const apiUrl =
-          'https://api.bitbucket.org/2.0/repositories/' +
-          encodeURIComponent(user) +
-          '/' +
-          encodeURIComponent(repo) +
-          '/pipelines/?fields=values.state&page=1&pagelen=2&sort=-created_on' +
-          '&target.ref_type=BRANCH&target.ref_name=' +
-          encodeURIComponent(branch)
+          `https://api.bitbucket.org/2.0/repositories/${encodeURIComponent(
+            user
+          )}/${encodeURIComponent(
+            repo
+          )}/pipelines/?fields=values.state&page=1&pagelen=2&sort=-created_on` +
+          `&target.ref_type=BRANCH&target.ref_name=${encodeURIComponent(
+            branch
+          )}`
 
         const badgeData = getBadgeData('build', data)
 
diff --git a/services/bitbucket/bitbucket-pull-request.service.js b/services/bitbucket/bitbucket-pull-request.service.js
index e21ce2e58199bebaf84c43a626c5c22798c10e29..c0f183d2c2fce06d9f2a5c4a1091c5bbedf38dbd 100644
--- a/services/bitbucket/bitbucket-pull-request.service.js
+++ b/services/bitbucket/bitbucket-pull-request.service.js
@@ -37,12 +37,9 @@ module.exports = class BitbucketPullRequest extends LegacyService {
         const user = match[2] // eg, atlassian
         const repo = match[3] // eg, python-bitbucket
         const format = match[4]
-        const apiUrl =
-          'https://bitbucket.org/api/2.0/repositories/' +
-          encodeURI(user) +
-          '/' +
-          encodeURI(repo) +
-          '/pullrequests/?limit=0&state=OPEN'
+        const apiUrl = `https://bitbucket.org/api/2.0/repositories/${encodeURI(
+          user
+        )}/${encodeURI(repo)}/pullrequests/?limit=0&state=OPEN`
 
         const badgeData = getBadgeData('pull requests', data)
         request(apiUrl, (err, res, buffer) => {
diff --git a/services/bitrise/bitrise.service.js b/services/bitrise/bitrise.service.js
index 4fc22f508fecd26d5f7ecc03715df351d69e85b2..0fecd9204eeadecd9cca603d8a151d22ea2287d2 100644
--- a/services/bitrise/bitrise.service.js
+++ b/services/bitrise/bitrise.service.js
@@ -36,13 +36,9 @@ module.exports = class Bitrise extends LegacyService {
           const format = match[3]
           const token = data.token
           const badgeData = getBadgeData('bitrise', data)
-          let apiUrl =
-            'https://app.bitrise.io/app/' +
-            appId +
-            '/status.json?token=' +
-            token
+          let apiUrl = `https://app.bitrise.io/app/${appId}/status.json?token=${token}`
           if (typeof branch !== 'undefined') {
-            apiUrl += '&branch=' + branch
+            apiUrl += `&branch=${branch}`
           }
 
           const statusColorScheme = {
diff --git a/services/bountysource/bountysource.service.js b/services/bountysource/bountysource.service.js
index 704243c520ea29a5b17c84384b89b582e082a7ed..f7b1507bf2433233a86d7bc2a2169a319a83fe06 100644
--- a/services/bountysource/bountysource.service.js
+++ b/services/bountysource/bountysource.service.js
@@ -29,7 +29,7 @@ module.exports = class Bountysource extends LegacyService {
       cache((data, match, sendBadge, request) => {
         const team = match[1] // eg, `mozilla-core`.
         const format = match[2]
-        const url = 'https://api.bountysource.com/teams/' + team
+        const url = `https://api.bountysource.com/teams/${team}`
         const options = {
           headers: { Accept: 'application/vnd.bountysource+json; version=2' },
         }
diff --git a/services/bugzilla/bugzilla.service.js b/services/bugzilla/bugzilla.service.js
index cbdfe723d6ff8560835142ca1fb44e7c17f5f62b..bd4395a81537e97984caa731662f243710a578c6 100644
--- a/services/bugzilla/bugzilla.service.js
+++ b/services/bugzilla/bugzilla.service.js
@@ -41,9 +41,9 @@ module.exports = class Bugzilla extends LegacyService {
         const options = {
           method: 'GET',
           json: true,
-          uri: 'https://bugzilla.mozilla.org/rest/bug/' + bugNumber,
+          uri: `https://bugzilla.mozilla.org/rest/bug/${bugNumber}`,
         }
-        const badgeData = getBadgeData('bug ' + bugNumber, data)
+        const badgeData = getBadgeData(`bug ${bugNumber}`, data)
         request(options, (err, res, json) => {
           if (checkErrorResponse(badgeData, err, res)) {
             sendBadge(format, badgeData)
diff --git a/services/buildkite/buildkite.service.js b/services/buildkite/buildkite.service.js
index 55681c79a10ede6c9f22d3baaac70d3fffba1acd..d32648262a1749a58d76b6f2a9c6894f6f192d7a 100644
--- a/services/buildkite/buildkite.service.js
+++ b/services/buildkite/buildkite.service.js
@@ -32,8 +32,7 @@ module.exports = class Buildkite extends LegacyService {
         const branch = match[2] || 'master' // Defaults to master if not specified
         const format = match[3]
 
-        const url =
-          'https://badge.buildkite.com/' + identifier + '.json?branch=' + branch
+        const url = `https://badge.buildkite.com/${identifier}.json?branch=${branch}`
         const badgeData = getBadgeData('build', data)
 
         request(url, (err, res, buffer) => {
diff --git a/services/chrome-web-store/chrome-web-store.service.js b/services/chrome-web-store/chrome-web-store.service.js
index 97f380cfdd0539e79cbf3ade219672af04f95fe6..9c97a0c86a592c893f6e428165cb5b179cb92f58 100644
--- a/services/chrome-web-store/chrome-web-store.service.js
+++ b/services/chrome-web-store/chrome-web-store.service.js
@@ -25,10 +25,7 @@ module.exports = class ChromeWebStore extends LegacyService {
         const storeId = match[2] // eg, nimelepbpejjlbmoobocpfnjhihnpked
         const format = match[3]
         const badgeData = getBadgeData('chrome web store', data)
-        const url =
-          'https://chrome.google.com/webstore/detail/' +
-          storeId +
-          '?hl=en&gl=US'
+        const url = `https://chrome.google.com/webstore/detail/${storeId}?hl=en&gl=US`
         const chromeWebStore = require('chrome-web-store-item-property')
         request(url, (err, res, buffer) => {
           if (err != null) {
@@ -62,7 +59,7 @@ module.exports = class ChromeWebStore extends LegacyService {
                 case 'rating':
                   rating = Math.round(value.ratingValue * 100) / 100
                   badgeData.text[0] = getLabel('rating', data)
-                  badgeData.text[1] = rating + '/5'
+                  badgeData.text[1] = `${rating}/5`
                   badgeData.colorscheme = floorCountColor(rating, 2, 3, 4)
                   break
                 case 'stars':
@@ -74,7 +71,7 @@ module.exports = class ChromeWebStore extends LegacyService {
                 case 'rating-count': {
                   const ratingCount = value.ratingCount
                   badgeData.text[0] = getLabel('rating count', data)
-                  badgeData.text[1] = metric(ratingCount) + ' total'
+                  badgeData.text[1] = `${metric(ratingCount)} total`
                   badgeData.colorscheme = floorCountColor(
                     ratingCount,
                     5,
diff --git a/services/clojars/clojars-version.service.js b/services/clojars/clojars-version.service.js
index b35c609abec3bc63c137d6d173e06de7ec419f51..47420227318cd212485684f8fdf1209d319b85e4 100644
--- a/services/clojars/clojars-version.service.js
+++ b/services/clojars/clojars-version.service.js
@@ -21,7 +21,7 @@ module.exports = class Clojars extends BaseJsonService {
 
   static render({ clojar, version }) {
     return {
-      message: '[' + clojar + ' "' + version + '"]',
+      message: `[${clojar} "${version}"]`,
       color: versionColor(version),
     }
   }
diff --git a/services/cocoapods/cocoapods-apps.service.js b/services/cocoapods/cocoapods-apps.service.js
index 2a0554f9d48e51b99dab7c26ed3c90792adfd0ec..6cf457be9cd6b1fe9f7815820acaecc823e5bef0 100644
--- a/services/cocoapods/cocoapods-apps.service.js
+++ b/services/cocoapods/cocoapods-apps.service.js
@@ -39,7 +39,7 @@ module.exports = class CocoapodsApps extends LegacyService {
         const info = match[1] // One of these: "aw", "at"
         const spec = match[2] // eg, AFNetworking
         const format = match[3]
-        const apiUrl = 'https://metrics.cocoapods.org/api/v1/pods/' + spec
+        const apiUrl = `https://metrics.cocoapods.org/api/v1/pods/${spec}`
         const badgeData = getBadgeData('apps', data)
         request(apiUrl, (err, res, buffer) => {
           if (checkErrorResponse(badgeData, err, res)) {
@@ -52,7 +52,7 @@ module.exports = class CocoapodsApps extends LegacyService {
             switch (info.charAt(1)) {
               case 'w':
                 apps = data.stats.app_week
-                badgeData.text[1] = metric(apps) + '/week'
+                badgeData.text[1] = `${metric(apps)}/week`
                 break
               case 't':
                 apps = data.stats.app_total
diff --git a/services/cocoapods/cocoapods-downloads.service.js b/services/cocoapods/cocoapods-downloads.service.js
index ea4690d09c8bd880666e7de0fceb9364672c359a..92191b1491150611e0e7d29b4e46731c1272aee7 100644
--- a/services/cocoapods/cocoapods-downloads.service.js
+++ b/services/cocoapods/cocoapods-downloads.service.js
@@ -43,7 +43,7 @@ module.exports = class CocoapodsDownloads extends LegacyService {
         const info = match[1] // One of these: "dm", "dw", "dt"
         const spec = match[2] // eg, AFNetworking
         const format = match[3]
-        const apiUrl = 'https://metrics.cocoapods.org/api/v1/pods/' + spec
+        const apiUrl = `https://metrics.cocoapods.org/api/v1/pods/${spec}`
         const badgeData = getBadgeData('downloads', data)
         request(apiUrl, (err, res, buffer) => {
           if (checkErrorResponse(badgeData, err, res)) {
@@ -56,11 +56,11 @@ module.exports = class CocoapodsDownloads extends LegacyService {
             switch (info.charAt(1)) {
               case 'm':
                 downloads = data.stats.download_month
-                badgeData.text[1] = metric(downloads) + '/month'
+                badgeData.text[1] = `${metric(downloads)}/month`
                 break
               case 'w':
                 downloads = data.stats.download_week
-                badgeData.text[1] = metric(downloads) + '/week'
+                badgeData.text[1] = `${metric(downloads)}/week`
                 break
               case 't':
                 downloads = data.stats.download_total
diff --git a/services/cocoapods/cocoapods-metrics.service.js b/services/cocoapods/cocoapods-metrics.service.js
index 653eca2cd03d4917c0dc515488a4eaf032e61395..6d8def2498dcc2f632cf79e5dd177c1c5e753eed 100644
--- a/services/cocoapods/cocoapods-metrics.service.js
+++ b/services/cocoapods/cocoapods-metrics.service.js
@@ -33,7 +33,7 @@ module.exports = class CocoapodsMetrics extends LegacyService {
       cache((data, match, sendBadge, request) => {
         const spec = match[1] // eg, AFNetworking
         const format = match[2]
-        const apiUrl = 'https://metrics.cocoapods.org/api/v1/pods/' + spec
+        const apiUrl = `https://metrics.cocoapods.org/api/v1/pods/${spec}`
         const badgeData = getBadgeData('docs', data)
         request(apiUrl, (err, res, buffer) => {
           if (checkErrorResponse(badgeData, err, res)) {
@@ -47,7 +47,7 @@ module.exports = class CocoapodsMetrics extends LegacyService {
               percentage = 0
             }
             badgeData.colorscheme = coveragePercentageColor(percentage)
-            badgeData.text[1] = percentage + '%'
+            badgeData.text[1] = `${percentage}%`
             sendBadge(format, badgeData)
           } catch (e) {
             badgeData.text[1] = 'invalid'
diff --git a/services/cocoapods/cocoapods.service.js b/services/cocoapods/cocoapods.service.js
index c0601ef83405804706c36d9c01d786cf3f043213..c8fff7913cf24868ba471156af4b23c949dd2972 100644
--- a/services/cocoapods/cocoapods.service.js
+++ b/services/cocoapods/cocoapods.service.js
@@ -14,8 +14,7 @@ module.exports = class CocoapodsVersionPlatformLicense extends LegacyService {
         const type = match[1]
         const spec = match[2] // eg, AFNetworking
         const format = match[3]
-        const apiUrl =
-          'https://trunk.cocoapods.org/api/v1/pods/' + spec + '/specs/latest'
+        const apiUrl = `https://trunk.cocoapods.org/api/v1/pods/${spec}/specs/latest`
         const typeToLabel = { v: 'pod', p: 'platform', l: 'license' }
         const badgeData = getBadgeData(typeToLabel[type], data)
         badgeData.colorscheme = null
diff --git a/services/codacy/codacy-coverage.service.js b/services/codacy/codacy-coverage.service.js
index e9570b4d2578ed21bf066f2529a29d9d74374cd7..afc9c10a38389e65ddc9f91d552654dd205c4286 100644
--- a/services/codacy/codacy-coverage.service.js
+++ b/services/codacy/codacy-coverage.service.js
@@ -45,11 +45,7 @@ module.exports = class CodacyCoverage extends LegacyService {
           queryParams.branch = branch
         }
         const query = queryString.stringify(queryParams)
-        const url =
-          'https://api.codacy.com/project/badge/coverage/' +
-          projectId +
-          '?' +
-          query
+        const url = `https://api.codacy.com/project/badge/coverage/${projectId}?${query}`
         const badgeData = getBadgeData('coverage', data)
         fetchFromSvg(
           request,
diff --git a/services/codacy/codacy-grade.service.js b/services/codacy/codacy-grade.service.js
index 93eb2c51844147ce71e1e36a9f1d00a01744b669..cc760b3fcef4e480227bc85e6808125b097faf19 100644
--- a/services/codacy/codacy-grade.service.js
+++ b/services/codacy/codacy-grade.service.js
@@ -42,11 +42,7 @@ module.exports = class CodacyGrade extends LegacyService {
           queryParams.branch = branch
         }
         const query = queryString.stringify(queryParams)
-        const url =
-          'https://api.codacy.com/project/badge/grade/' +
-          projectId +
-          '?' +
-          query
+        const url = `https://api.codacy.com/project/badge/grade/${projectId}?${query}`
         const badgeData = getBadgeData('code quality', data)
         fetchFromSvg(
           request,
diff --git a/services/codeclimate/codeclimate.service.js b/services/codeclimate/codeclimate.service.js
index 52b9fe0e234fe50e0571ea76f1b27a758f27caa0..9d015d140302a333c608c534b284e6b2bfb98dc2 100644
--- a/services/codeclimate/codeclimate.service.js
+++ b/services/codeclimate/codeclimate.service.js
@@ -81,7 +81,7 @@ module.exports = class Codeclimate extends LegacyService {
                     const percentage = parseFloat(
                       parsedData.data.attributes.covered_percent
                     )
-                    badgeData.text[1] = percentage.toFixed(0) + '%'
+                    badgeData.text[1] = `${percentage.toFixed(0)}%`
                     badgeData.colorscheme = coveragePercentageColor(percentage)
                   } else if (type === 'issues') {
                     const count = parsedData.data.meta.issues_count
@@ -94,7 +94,7 @@ module.exports = class Codeclimate extends LegacyService {
                     const percentage = parseFloat(
                       parsedData.data.attributes.ratings[0].measure.value
                     )
-                    badgeData.text[1] = percentage.toFixed(0) + '%'
+                    badgeData.text[1] = `${percentage.toFixed(0)}%`
                     badgeData.colorscheme = colorScale(
                       [5, 10, 20, 50],
                       ['brightgreen', 'green', 'yellowgreen', 'yellow', 'red']
@@ -109,7 +109,7 @@ module.exports = class Codeclimate extends LegacyService {
                       parseFloat(
                         parsedData.data.attributes.ratings[0].measure.value
                       )
-                    badgeData.text[1] = percentage.toFixed(0) + '%'
+                    badgeData.text[1] = `${percentage.toFixed(0)}%`
                     badgeData.colorscheme = colorScale(
                       [50, 80, 90, 95],
                       ['red', 'yellow', 'yellowgreen', 'green', 'brightgreen']
diff --git a/services/codecov/codecov.service.js b/services/codecov/codecov.service.js
index 6bbc5d5bdd650b3d6abbb50a1099cfe387dee0b6..a7184c2bad23d8aae7e22166488edebdceae19d1 100644
--- a/services/codecov/codecov.service.js
+++ b/services/codecov/codecov.service.js
@@ -52,7 +52,7 @@ module.exports = class Codecov extends LegacyService {
           apiUrl = `https://codecov.io/${userRepo}/graphs/badge.txt`
         }
         if (token) {
-          apiUrl += '?' + queryString.stringify({ token })
+          apiUrl += `?${queryString.stringify({ token })}`
         }
         const badgeData = getBadgeData('coverage', data)
         request(apiUrl, (err, res, body) => {
@@ -69,7 +69,7 @@ module.exports = class Codecov extends LegacyService {
               sendBadge(format, badgeData)
               return
             }
-            badgeData.text[1] = coverage + '%'
+            badgeData.text[1] = `${coverage}%`
             badgeData.colorscheme = coveragePercentageColor(coverage)
             sendBadge(format, badgeData)
           } catch (e) {
diff --git a/services/codeship/codeship.service.js b/services/codeship/codeship.service.js
index 99697c931665ee4e4bf2e5822cad0e45e5c29a10..2a5eea75e2139bc28c28a3dc5be5839540479ec2 100644
--- a/services/codeship/codeship.service.js
+++ b/services/codeship/codeship.service.js
@@ -36,11 +36,9 @@ module.exports = class Codeship extends LegacyService {
         const branch = match[2]
         const options = {
           method: 'GET',
-          uri:
-            'https://codeship.com/projects/' +
-            projectId +
-            '/status' +
-            (branch != null ? '?branch=' + branch : ''),
+          uri: `https://codeship.com/projects/${projectId}/status${
+            branch != null ? `?branch=${branch}` : ''
+          }`,
         }
         const badgeData = getBadgeData('build', data)
         request(options, (err, res) => {
diff --git a/services/codetally/codetally.service.js b/services/codetally/codetally.service.js
index a88fef50fc7a67da1059d18e779419c386a5d234..768f36babe6ece0675dab869c468383b91bacf33 100644
--- a/services/codetally/codetally.service.js
+++ b/services/codetally/codetally.service.js
@@ -30,8 +30,7 @@ module.exports = class Codetally extends LegacyService {
         const owner = match[1] // eg, triggerman722.
         const repo = match[2] // eg, colorstrap
         const format = match[3]
-        const apiUrl =
-          'http://www.codetally.com/formattedshield/' + owner + '/' + repo
+        const apiUrl = `http://www.codetally.com/formattedshield/${owner}/${repo}`
         const badgeData = getBadgeData('codetally', data)
         request(apiUrl, (err, res, buffer) => {
           if (err != null) {
@@ -41,8 +40,9 @@ module.exports = class Codetally extends LegacyService {
           }
           try {
             const data = JSON.parse(buffer)
-            badgeData.text[1] =
-              ' ' + data.currency_sign + data.amount + ' ' + data.multiplier
+            badgeData.text[1] = ` ${data.currency_sign}${data.amount} ${
+              data.multiplier
+            }`
             badgeData.colorscheme = null
             badgeData.colorB = '#2E8B57'
             sendBadge(format, badgeData)
diff --git a/services/conda/conda.service.js b/services/conda/conda.service.js
index 0d70c838af7fdae2a4315dd083f74c8712cfb8dd..5da4b423cb5a50cab342cce347ba7775c332b3d2 100644
--- a/services/conda/conda.service.js
+++ b/services/conda/conda.service.js
@@ -21,8 +21,7 @@ module.exports = class Conda extends LegacyService {
         const channel = match[2]
         const pkgname = match[3]
         const format = match[4]
-        const url =
-          'https://api.anaconda.org/package/' + channel + '/' + pkgname
+        const url = `https://api.anaconda.org/package/${channel}/${pkgname}`
         const labels = {
           d: 'downloads',
           p: 'platform',
diff --git a/services/continuousphp/continuousphp.service.js b/services/continuousphp/continuousphp.service.js
index 9d6e800c6aa30157f06f3c6d87b7718741835b42..ec1c16e3f3595623b2951595e55393d905134f5d 100644
--- a/services/continuousphp/continuousphp.service.js
+++ b/services/continuousphp/continuousphp.service.js
@@ -32,27 +32,22 @@ module.exports = class ContinuousPhp extends LegacyService {
 
         const options = {
           method: 'GET',
-          uri:
-            'https://status.continuousphp.com/' +
-            provider +
-            '/' +
-            userRepo +
-            '/status-info',
+          uri: `https://status.continuousphp.com/${provider}/${userRepo}/status-info`,
           headers: {
             Accept: 'application/json',
           },
         }
 
         if (branch != null) {
-          options.uri += '?branch=' + branch
+          options.uri += `?branch=${branch}`
         }
 
         const badgeData = getBadgeData('build', data)
         request(options, (err, res) => {
           if (err != null) {
-            console.error('continuousphp error: ' + err.stack)
+            console.error(`continuousphp error: ${err.stack}`)
             if (res) {
-              console.error('' + res)
+              console.error(`${res}`)
             }
 
             badgeData.text[1] = 'invalid'
diff --git a/services/cookbook/cookbook.service.js b/services/cookbook/cookbook.service.js
index 6c29d53382c47ad37b5570438a641236d35c0464..def3fb7b7e8758924fa20093c06290aee70fc552 100644
--- a/services/cookbook/cookbook.service.js
+++ b/services/cookbook/cookbook.service.js
@@ -30,10 +30,7 @@ module.exports = class Cookbook extends LegacyService {
       cache((data, match, sendBadge, request) => {
         const cookbook = match[1] // eg, chef-sugar
         const format = match[2]
-        const apiUrl =
-          'https://supermarket.getchef.com/api/v1/cookbooks/' +
-          cookbook +
-          '/versions/latest'
+        const apiUrl = `https://supermarket.getchef.com/api/v1/cookbooks/${cookbook}/versions/latest`
         const badgeData = getBadgeData('cookbook', data)
 
         request(apiUrl, (err, res, buffer) => {
diff --git a/services/coveralls/coveralls.service.js b/services/coveralls/coveralls.service.js
index cd48263084cad19f6b99dc27d11678e196bb6fb7..f5b283fbf0bdcf1384d68494d3c22bcf7c8ee4f0 100644
--- a/services/coveralls/coveralls.service.js
+++ b/services/coveralls/coveralls.service.js
@@ -52,7 +52,7 @@ module.exports = class Coveralls extends LegacyService {
           method: 'HEAD',
         }
         if (branch) {
-          apiUrl.url += '?branch=' + branch
+          apiUrl.url += `?branch=${branch}`
         }
         const badgeData = getBadgeData('coverage', data)
         request(apiUrl, (err, res) => {
@@ -76,7 +76,7 @@ module.exports = class Coveralls extends LegacyService {
               sendBadge(format, badgeData)
               return
             }
-            badgeData.text[1] = score + '%'
+            badgeData.text[1] = `${score}%`
             badgeData.colorscheme = coveragePercentageColor(percentage)
             sendBadge(format, badgeData)
           } catch (e) {
diff --git a/services/coverity/coverity-on-demand.service.js b/services/coverity/coverity-on-demand.service.js
index cc3f3dea281fe44811c2ebe788b0d3fc228e15da..adc1f1a2d82d30b06b93cd91a7cc729e9c430bd9 100644
--- a/services/coverity/coverity-on-demand.service.js
+++ b/services/coverity/coverity-on-demand.service.js
@@ -55,12 +55,7 @@ module.exports = class CoverityOnDemand extends LegacyService {
           // https://api.ondemand.coverity.com/streams/44b25sjc9l3ntc2ngfi29tngro/badge
           // https://api.ondemand.coverity.com/jobs/p4tmm8031t4i971r0im4s7lckk/badge
           //
-          const url =
-            'https://api.ondemand.coverity.com/' +
-            badgeType +
-            '/' +
-            badgeTypeId +
-            '/badge'
+          const url = `https://api.ondemand.coverity.com/${badgeType}/${badgeTypeId}/badge`
           request(url, (err, res, buffer) => {
             if (err != null) {
               badgeData.text[1] = 'inaccessible'
diff --git a/services/coverity/coverity-scan.service.js b/services/coverity/coverity-scan.service.js
index c72142470c2ee64f6c18c334077c97250a57d927..8d1034af4aa7c8241adc3d221604a633b03d022f 100644
--- a/services/coverity/coverity-scan.service.js
+++ b/services/coverity/coverity-scan.service.js
@@ -29,8 +29,7 @@ module.exports = class CoverityScan extends LegacyService {
       cache((data, match, sendBadge, request) => {
         const projectId = match[1] // eg, `3997`
         const format = match[2]
-        const url =
-          'https://scan.coverity.com/projects/' + projectId + '/badge.json'
+        const url = `https://scan.coverity.com/projects/${projectId}/badge.json`
         const badgeData = getBadgeData('coverity', data)
         request(url, (err, res, buffer) => {
           if (err != null) {
diff --git a/services/cpan/cpan.service.js b/services/cpan/cpan.service.js
index 510bc77da1b08aee087547040e5dabe32e74123a..1c94d6e138820491f83e37aba03760ca67cee137 100644
--- a/services/cpan/cpan.service.js
+++ b/services/cpan/cpan.service.js
@@ -17,7 +17,7 @@ module.exports = class Cpan extends LegacyService {
         const pkg = match[2] // eg, Config-Augeas
         const format = match[3]
         const badgeData = getBadgeData('cpan', data)
-        const url = 'https://fastapi.metacpan.org/v1/release/' + pkg
+        const url = `https://fastapi.metacpan.org/v1/release/${pkg}`
         request(url, (err, res, buffer) => {
           if (err != null) {
             badgeData.text[1] = 'inaccessible'
diff --git a/services/cran/cran.service.js b/services/cran/cran.service.js
index 609f7e0fef2a7dd9e3c5a2c69a36f18f9db720e6..d85ed12dd3e4270a159b5bc146a1081c35e01acf 100644
--- a/services/cran/cran.service.js
+++ b/services/cran/cran.service.js
@@ -17,7 +17,7 @@ module.exports = class Cran extends LegacyService {
         const info = match[1] // either `v` or `l`
         const pkg = match[2] // eg, devtools
         const format = match[3]
-        const url = 'http://crandb.r-pkg.org/' + pkg
+        const url = `http://crandb.r-pkg.org/${pkg}`
         const badgeData = getBadgeData('cran', queryParams)
         request(url, (err, res, buffer) => {
           if (err != null) {
diff --git a/services/crates/crates.service.js b/services/crates/crates.service.js
index 4b4406b9b93dceab2f4f00c2deeb966fce1d1f8b..380479238512b6d24934851afba7c4334cf64034 100644
--- a/services/crates/crates.service.js
+++ b/services/crates/crates.service.js
@@ -27,7 +27,7 @@ module.exports = class Crates extends LegacyService {
                 : data.version.downloads
               version = data.version && data.version.num
               badgeData.text[1] =
-                metric(downloads) + (version ? ' version ' + version : '')
+                metric(downloads) + (version ? ` version ${version}` : '')
               badgeData.colorscheme = downloadCountColor(downloads)
             },
           },
@@ -41,7 +41,7 @@ module.exports = class Crates extends LegacyService {
               version = data.version && data.version.num
               badgeData.text[1] =
                 metric(downloads) +
-                (version ? ' version ' + version : ' latest version')
+                (version ? ` version ${version}` : ' latest version')
               badgeData.colorscheme = downloadCountColor(downloads)
             },
           },
@@ -64,9 +64,9 @@ module.exports = class Crates extends LegacyService {
           },
         }
         const behavior = modes[mode]
-        let apiUrl = 'https://crates.io/api/v1/crates/' + crate
+        let apiUrl = `https://crates.io/api/v1/crates/${crate}`
         if (version != null && behavior.version) {
-          apiUrl += '/' + version
+          apiUrl += `/${version}`
         }
 
         const badgeData = getBadgeData(behavior.name, data)
diff --git a/services/david/david.service.js b/services/david/david.service.js
index ca04cb582a391283415043bca3f83fe9b537c391..d70dfd3c8dc3589816ae6f950e593c20a3798196 100644
--- a/services/david/david.service.js
+++ b/services/david/david.service.js
@@ -53,18 +53,15 @@ module.exports = class David extends LegacyService {
           // eg, `expressjs/express`, `webcomponents/generator-element`.
           const userRepo = match[2]
           const format = match[3]
-          let options =
-            'https://david-dm.org/' +
-            userRepo +
-            '/' +
-            (dev ? dev + '-' : '') +
-            'info.json'
+          let options = `https://david-dm.org/${userRepo}/${
+            dev ? `${dev}-` : ''
+          }info.json`
           if (data.path) {
             // path can be used to specify the package.json location, useful for monorepos
-            options += '?path=' + data.path
+            options += `?path=${data.path}`
           }
           const badgeData = getBadgeData(
-            (dev ? dev + ' ' : '') + 'dependencies',
+            `${dev ? `${dev} ` : ''}dependencies`,
             data
           )
           request(options, (err, res, buffer) => {
diff --git a/services/discourse/discourse.service.js b/services/discourse/discourse.service.js
index 329ca19ac1d6ddb6c79b3635b77d5bef93113cf6..b6cef20adf95bdea2f2d50e094b5e8850228419d 100644
--- a/services/discourse/discourse.service.js
+++ b/services/discourse/discourse.service.js
@@ -48,7 +48,7 @@ module.exports = class Discourse extends LegacyService {
         const host = match[2] // eg, meta.discourse.org
         const stat = match[3] // eg, user_count
         const format = match[4]
-        const url = scheme + '://' + host + '/site/statistics.json'
+        const url = `${scheme}://${host}/site/statistics.json`
 
         const options = {
           method: 'GET',
@@ -62,7 +62,7 @@ module.exports = class Discourse extends LegacyService {
         request(options, (err, res) => {
           if (err != null) {
             if (res) {
-              console.error('' + res)
+              console.error(`${res}`)
             }
 
             badgeData.text[1] = 'inaccessible'
@@ -86,19 +86,19 @@ module.exports = class Discourse extends LegacyService {
             switch (stat) {
               case 'topics':
                 statCount = data.topic_count
-                badgeData.text[1] = metric(statCount) + ' topics'
+                badgeData.text[1] = `${metric(statCount)} topics`
                 break
               case 'posts':
                 statCount = data.post_count
-                badgeData.text[1] = metric(statCount) + ' posts'
+                badgeData.text[1] = `${metric(statCount)} posts`
                 break
               case 'users':
                 statCount = data.user_count
-                badgeData.text[1] = metric(statCount) + ' users'
+                badgeData.text[1] = `${metric(statCount)} users`
                 break
               case 'likes':
                 statCount = data.like_count
-                badgeData.text[1] = metric(statCount) + ' likes'
+                badgeData.text[1] = `${metric(statCount)} likes`
                 break
               case 'status':
                 badgeData.text[1] = 'online'
@@ -111,7 +111,7 @@ module.exports = class Discourse extends LegacyService {
 
             sendBadge(format, badgeData)
           } catch (e) {
-            console.error('' + e.stack)
+            console.error(`${e.stack}`)
             badgeData.colorscheme = 'yellow'
             badgeData.text[1] = 'invalid'
             sendBadge(format, badgeData)
diff --git a/services/docker/docker.service.js b/services/docker/docker.service.js
index 00a2342a1d3b560c1ec39d30671946e5925f076f..4f5aab215a65a30efcd284929bbf1b4e4ed8c0a9 100644
--- a/services/docker/docker.service.js
+++ b/services/docker/docker.service.js
@@ -39,9 +39,8 @@ class DockerStars extends LegacyService {
         if (user === '_') {
           user = 'library'
         }
-        const path = user + '/' + repo
-        const url =
-          'https://hub.docker.com/v2/repositories/' + path + '/stars/count/'
+        const path = `${user}/${repo}`
+        const url = `https://hub.docker.com/v2/repositories/${path}/stars/count/`
         const badgeData = getBadgeData('docker stars', data)
         request(url, (err, res, buffer) => {
           if (
@@ -99,8 +98,8 @@ class DockerPulls extends LegacyService {
         if (user === '_') {
           user = 'library'
         }
-        const path = user + '/' + repo
-        const url = 'https://hub.docker.com/v2/repositories/' + path
+        const path = `${user}/${repo}`
+        const url = `https://hub.docker.com/v2/repositories/${path}`
         const badgeData = getBadgeData('docker pulls', data)
         request(url, (err, res, buffer) => {
           if (
@@ -161,11 +160,8 @@ class DockerBuild extends LegacyService {
         if (user === '_') {
           user = 'library'
         }
-        const path = user + '/' + repo
-        const url =
-          'https://registry.hub.docker.com/v2/repositories/' +
-          path +
-          '/buildhistory'
+        const path = `${user}/${repo}`
+        const url = `https://registry.hub.docker.com/v2/repositories/${path}/buildhistory`
         const badgeData = getBadgeData('docker build', data)
         request(url, (err, res, buffer) => {
           if (
@@ -206,8 +202,8 @@ class DockerBuild extends LegacyService {
         if (user === '_') {
           user = 'library'
         }
-        const path = user + '/' + repo
-        const url = 'https://registry.hub.docker.com/v2/repositories/' + path
+        const path = `${user}/${repo}`
+        const url = `https://registry.hub.docker.com/v2/repositories/${path}`
         const badgeData = getBadgeData('docker build', data)
         request(url, (err, res, buffer) => {
           if (
diff --git a/services/dub/dub-download.service.js b/services/dub/dub-download.service.js
index 4c50075369315242a8b70bbc8cc974e985d6d05e..abb044ef43f7d165ec2d815181ffa6b78303fa32 100644
--- a/services/dub/dub-download.service.js
+++ b/services/dub/dub-download.service.js
@@ -52,9 +52,9 @@ module.exports = class DubDownload extends LegacyService {
         const pkg = match[2] // package name, e.g. vibe-d
         const version = match[3] // version (1.2.3 or latest)
         const format = match[4]
-        let apiUrl = 'https://code.dlang.org/api/packages/' + pkg
+        let apiUrl = `https://code.dlang.org/api/packages/${pkg}`
         if (version) {
-          apiUrl += '/' + version
+          apiUrl += `/${version}`
         }
         apiUrl += '/stats'
         const badgeData = getBadgeData('dub', data)
@@ -71,15 +71,15 @@ module.exports = class DubDownload extends LegacyService {
               switch (info.charAt(1)) {
                 case 'm':
                   downloads = parsedData.downloads.monthly
-                  badgeData.text[1] = metric(downloads) + '/month'
+                  badgeData.text[1] = `${metric(downloads)}/month`
                   break
                 case 'w':
                   downloads = parsedData.downloads.weekly
-                  badgeData.text[1] = metric(downloads) + '/week'
+                  badgeData.text[1] = `${metric(downloads)}/week`
                   break
                 case 'd':
                   downloads = parsedData.downloads.daily
-                  badgeData.text[1] = metric(downloads) + '/day'
+                  badgeData.text[1] = `${metric(downloads)}/day`
                   break
                 case 't':
                   downloads = parsedData.downloads.total
@@ -87,7 +87,7 @@ module.exports = class DubDownload extends LegacyService {
                   break
               }
               if (version) {
-                badgeData.text[1] += ' ' + versionText(version)
+                badgeData.text[1] += ` ${versionText(version)}`
               }
               badgeData.colorscheme = downloadCountColor(downloads)
               sendBadge(format, badgeData)
diff --git a/services/dub/dub-license-version.service.js b/services/dub/dub-license-version.service.js
index 568c2a34324c458d04b10e639d6f141e43deb8e1..bf2b7505be1c48e992c4ed93eddd75cc27a6b149 100644
--- a/services/dub/dub-license-version.service.js
+++ b/services/dub/dub-license-version.service.js
@@ -17,7 +17,7 @@ module.exports = class DubLicenseVersion extends LegacyService {
         const info = match[1] // (v - version, l - license)
         const pkg = match[2] // package name, e.g. vibe-d
         const format = match[3]
-        let apiUrl = 'https://code.dlang.org/api/packages/' + pkg
+        let apiUrl = `https://code.dlang.org/api/packages/${pkg}`
         if (info === 'v') {
           apiUrl += '/latest'
         } else if (info === 'l') {
diff --git a/services/gem/gem-downloads.service.js b/services/gem/gem-downloads.service.js
index 7cde3e714de1dad14e9583c7ea674fa41abc60a0..c81527bc4fcdc30261ad609b94952a29659546bc 100644
--- a/services/gem/gem-downloads.service.js
+++ b/services/gem/gem-downloads.service.js
@@ -49,7 +49,7 @@ module.exports = class GemDownloads extends BaseJsonService {
 
   static _getLabel(version, info) {
     if (version) {
-      return 'downloads@' + version
+      return `downloads@${version}`
     } else {
       if (info === 'dtv') {
         return 'downloads@latest'
diff --git a/services/github/github-commits-since.service.js b/services/github/github-commits-since.service.js
index ee05d104822cb7f9e0b27ccf7bd62148e2f57081..2414496aad9333a4c310f7eaee32ac6ae93a5473 100644
--- a/services/github/github-commits-since.service.js
+++ b/services/github/github-commits-since.service.js
@@ -16,7 +16,7 @@ module.exports = class GithubCommitsSince extends LegacyService {
         const repo = match[2] // eg, subtitleedit
         const version = match[3] // eg, 3.4.7 or latest
         const format = match[4]
-        const badgeData = getBadgeData('commits since ' + version, data)
+        const badgeData = getBadgeData(`commits since ${version}`, data)
 
         function setCommitsSinceBadge(user, repo, version) {
           const apiUrl = `/repos/${user}/${repo}/compare/${version}...master`
@@ -34,7 +34,7 @@ module.exports = class GithubCommitsSince extends LegacyService {
               const result = JSON.parse(buffer)
               badgeData.text[1] = result.ahead_by
               badgeData.colorscheme = 'blue'
-              badgeData.text[0] = getLabel('commits since ' + version, data)
+              badgeData.text[0] = getLabel(`commits since ${version}`, data)
               sendBadge(format, badgeData)
             } catch (e) {
               badgeData.text[1] = 'invalid'
diff --git a/services/github/github-downloads.service.js b/services/github/github-downloads.service.js
index 213ea50d2d2a1f10b69605587a7ab7ec3904e20d..65c4f1e5be6acb098b7474e0a885637f4b48a815 100644
--- a/services/github/github-downloads.service.js
+++ b/services/github/github-downloads.service.js
@@ -39,9 +39,9 @@ module.exports = class GithubDownloads extends LegacyService {
               ? type === 'downloads'
                 ? 'latest'
                 : ''
-              : 'tags/' + tag
+              : `tags/${tag}`
           if (releasePath) {
-            apiUrl = apiUrl + '/' + releasePath
+            apiUrl = `${apiUrl}/${releasePath}`
           }
         }
         const badgeData = getBadgeData('downloads', data)
diff --git a/services/github/github-forks.service.js b/services/github/github-forks.service.js
index 33597798723739ef8c2c0cd5e0c81e37020e400d..17ff0ac0e9edc595d283a0119d3fbefbe7a7d52c 100644
--- a/services/github/github-forks.service.js
+++ b/services/github/github-forks.service.js
@@ -22,8 +22,8 @@ module.exports = class GithubForks extends LegacyService {
         if (badgeData.template === 'social') {
           badgeData.logo = getLogo('github', data)
           badgeData.links = [
-            'https://github.com/' + user + '/' + repo + '/fork',
-            'https://github.com/' + user + '/' + repo + '/network',
+            `https://github.com/${user}/${repo}/fork`,
+            `https://github.com/${user}/${repo}/network`,
           ]
         }
         githubApiProvider.request(request, apiUrl, {}, (err, res, buffer) => {
diff --git a/services/github/github-issues.service.js b/services/github/github-issues.service.js
index 62f247aae0dfd428943d9c5bbc98304b761783da..c3b3453a44009bc5dbf457472aaf528568c39904 100644
--- a/services/github/github-issues.service.js
+++ b/services/github/github-issues.service.js
@@ -25,21 +25,16 @@ module.exports = class GithubIssues extends LegacyService {
         const query = {}
         const hasLabel = ghLabel !== undefined
 
-        query.q =
-          'repo:' +
-          user +
-          '/' +
-          repo +
-          (isPR ? ' is:pr' : ' is:issue') +
-          (isClosed ? ' is:closed' : ' is:open') +
-          (hasLabel ? ` label:"${ghLabel}"` : '')
+        query.q = `repo:${user}/${repo}${isPR ? ' is:pr' : ' is:issue'}${
+          isClosed ? ' is:closed' : ' is:open'
+        }${hasLabel ? ` label:"${ghLabel}"` : ''}`
 
         const classText = isClosed ? 'closed' : 'open'
-        const leftClassText = isRaw ? classText + ' ' : ''
-        const rightClassText = !isRaw ? ' ' + classText : ''
+        const leftClassText = isRaw ? `${classText} ` : ''
+        const rightClassText = !isRaw ? ` ${classText}` : ''
         const isGhLabelMultiWord = hasLabel && ghLabel.includes(' ')
         const labelText = hasLabel
-          ? (isGhLabelMultiWord ? `"${ghLabel}"` : ghLabel) + ' '
+          ? `${isGhLabelMultiWord ? `"${ghLabel}"` : ghLabel} `
           : ''
         const targetText = isPR ? 'pull requests' : 'issues'
         const badgeData = getBadgeData(
diff --git a/services/github/github-languages.service.js b/services/github/github-languages.service.js
index 2f1725cbd52b1680700b0df7552afbe799c987f6..a857cb238ffad45fede660b17e8e2e302ce186f3 100644
--- a/services/github/github-languages.service.js
+++ b/services/github/github-languages.service.js
@@ -51,8 +51,9 @@ module.exports = class GithubLanguages extends LegacyService {
                   badgeData.text[1] = 'none'
                   badgeData.colorscheme = 'blue'
                 } else {
-                  badgeData.text[1] =
-                    ((maxBytes / sumBytes) * 100).toFixed(1) + '%' // eg, 9.1%
+                  badgeData.text[1] = `${((maxBytes / sumBytes) * 100).toFixed(
+                    1
+                  )}%` // eg, 9.1%
                 }
                 break
               }
diff --git a/services/github/github-manifest-version.service.js b/services/github/github-manifest-version.service.js
index 1f7ea17ffd48daefaf1c3bae62e613e8578d1dd5..6f48e28267873484aab3d261f81d39fb05f8e528 100644
--- a/services/github/github-manifest-version.service.js
+++ b/services/github/github-manifest-version.service.js
@@ -23,16 +23,7 @@ module.exports = class GithubManifestVersion extends LegacyService {
         const repo = match[4]
         const branch = match[5] || 'master'
         const format = match[6]
-        const apiUrl =
-          'https://raw.githubusercontent.com/' +
-          user +
-          '/' +
-          repo +
-          '/' +
-          branch +
-          '/' +
-          type +
-          '.json'
+        const apiUrl = `https://raw.githubusercontent.com/${user}/${repo}/${branch}/${type}.json`
         const badgeData = getBadgeData(type, queryData)
         request(apiUrl, (err, res, buffer) => {
           if (githubCheckErrorResponse(badgeData, err, res)) {
diff --git a/services/github/github-release.service.js b/services/github/github-release.service.js
index f7211d2cf1f0543a0c007b66d69287d4157c74e6..29b896b36b7006a402ca7a28a14f5e3685296990 100644
--- a/services/github/github-release.service.js
+++ b/services/github/github-release.service.js
@@ -20,7 +20,7 @@ module.exports = class GithubRelease extends LegacyService {
         const format = match[4]
         let apiUrl = `/repos/${userRepo}/releases`
         if (!includePre) {
-          apiUrl = apiUrl + '/latest'
+          apiUrl = `${apiUrl}/latest`
         }
         const badgeData = getBadgeData('release', data)
         if (badgeData.template === 'social') {
diff --git a/services/github/github-search.service.js b/services/github/github-search.service.js
index f6b8d416bad64210ad1993fb6da5cdb0eb039afa..c00ac644e3de8174a697dced06899a68507c48a9 100644
--- a/services/github/github-search.service.js
+++ b/services/github/github-search.service.js
@@ -17,8 +17,8 @@ module.exports = class GithubSearch extends LegacyService {
         const repo = match[2]
         const search = match[3]
         const format = match[4]
-        const query = { q: search + ' repo:' + user + '/' + repo }
-        const badgeData = getBadgeData(search + ' counter', data)
+        const query = { q: `${search} repo:${user}/${repo}` }
+        const badgeData = getBadgeData(`${search} counter`, data)
         githubApiProvider.request(
           request,
           '/search/code',
diff --git a/services/github/github-stars.service.js b/services/github/github-stars.service.js
index 6a91d6dd458eb38767d673951cfe690cc6e5bf6a..011a947fd45e2721f5c2edbb15ad5452482e313a 100644
--- a/services/github/github-stars.service.js
+++ b/services/github/github-stars.service.js
@@ -23,8 +23,8 @@ module.exports = class GithubStars extends LegacyService {
         if (badgeData.template === 'social') {
           badgeData.logo = getLogo('github', data)
           badgeData.links = [
-            'https://github.com/' + user + '/' + repo,
-            'https://github.com/' + user + '/' + repo + '/stargazers',
+            `https://github.com/${user}/${repo}`,
+            `https://github.com/${user}/${repo}/stargazers`,
           ]
         }
         githubApiProvider.request(request, apiUrl, {}, (err, res, buffer) => {
diff --git a/services/github/github-watchers.service.js b/services/github/github-watchers.service.js
index f2f832d48d930a5ab1ecee65aa7a3ae1cf0ad8a5..a073ec14ae13f8713fa547cb4da3049026d74923 100644
--- a/services/github/github-watchers.service.js
+++ b/services/github/github-watchers.service.js
@@ -22,8 +22,8 @@ module.exports = class GithubWatchers extends LegacyService {
         if (badgeData.template === 'social') {
           badgeData.logo = getLogo('github', data)
           badgeData.links = [
-            'https://github.com/' + user + '/' + repo,
-            'https://github.com/' + user + '/' + repo + '/watchers',
+            `https://github.com/${user}/${repo}`,
+            `https://github.com/${user}/${repo}/watchers`,
           ]
         }
         githubApiProvider.request(request, apiUrl, {}, (err, res, buffer) => {
diff --git a/services/hackage/hackage-deps.service.js b/services/hackage/hackage-deps.service.js
index bf40eea3d506a7e950fc3833ab80989accc0beef..c5b89a723da282d614fb948d1397e2e612338e22 100644
--- a/services/hackage/hackage-deps.service.js
+++ b/services/hackage/hackage-deps.service.js
@@ -30,8 +30,8 @@ module.exports = class HackageDeps extends LegacyService {
       cache((data, match, sendBadge, request) => {
         const repo = match[1] // eg, `lens`.
         const format = match[2]
-        const reverseUrl = 'http://packdeps.haskellers.com/licenses/' + repo
-        const feedUrl = 'http://packdeps.haskellers.com/feed/' + repo
+        const reverseUrl = `http://packdeps.haskellers.com/licenses/${repo}`
+        const feedUrl = `http://packdeps.haskellers.com/feed/${repo}`
         const badgeData = getBadgeData('dependencies', data)
 
         // first call /reverse to check if the package exists
@@ -51,7 +51,7 @@ module.exports = class HackageDeps extends LegacyService {
             }
 
             try {
-              const outdatedStr = 'Outdated dependencies for ' + repo + ' '
+              const outdatedStr = `Outdated dependencies for ${repo} `
               if (buffer.indexOf(outdatedStr) >= 0) {
                 badgeData.text[1] = 'outdated'
                 badgeData.colorscheme = 'orange'
diff --git a/services/hackage/hackage-version.service.js b/services/hackage/hackage-version.service.js
index 35975497378231a9283a2e66096f88cf36bca8b9..4503d9e562292d9a315744456bda750cbb89202c 100644
--- a/services/hackage/hackage-version.service.js
+++ b/services/hackage/hackage-version.service.js
@@ -13,8 +13,7 @@ module.exports = class HackageVersion extends LegacyService {
       cache((data, match, sendBadge, request) => {
         const repo = match[1] // eg, `lens`.
         const format = match[2]
-        const apiUrl =
-          'https://hackage.haskell.org/package/' + repo + '/' + repo + '.cabal'
+        const apiUrl = `https://hackage.haskell.org/package/${repo}/${repo}.cabal`
         const badgeData = getBadgeData('hackage', data)
         request(apiUrl, (err, res, buffer) => {
           if (checkErrorResponse(badgeData, err, res)) {
diff --git a/services/homebrew/homebrew.service.js b/services/homebrew/homebrew.service.js
index 5e6798426ace4319977225a059846c6c15a67b00..75046d33a906377fee5a8e81ba92f8d484a71360 100644
--- a/services/homebrew/homebrew.service.js
+++ b/services/homebrew/homebrew.service.js
@@ -32,7 +32,7 @@ module.exports = class Homebrew extends LegacyService {
       cache((data, match, sendBadge, request) => {
         const pkg = match[1] // eg. cake
         const format = match[2]
-        const apiUrl = 'https://formulae.brew.sh/api/formula/' + pkg + '.json'
+        const apiUrl = `https://formulae.brew.sh/api/formula/${pkg}.json`
 
         const badgeData = getBadgeData('homebrew', data)
         request(
diff --git a/services/imagelayers/imagelayers.service.js b/services/imagelayers/imagelayers.service.js
index 10b37cc831faa085ed485d3f3cab73b57be1a26c..f8fbdbae5939540c26b1fc12b565be9498da6e9b 100644
--- a/services/imagelayers/imagelayers.service.js
+++ b/services/imagelayers/imagelayers.service.js
@@ -43,7 +43,7 @@ module.exports = class Imagelayers extends LegacyService {
         if (user === '_') {
           user = 'library'
         }
-        const path = user + '/' + repo
+        const path = `${user}/${repo}`
         const badgeData = getBadgeData(type, data)
         const options = {
           method: 'POST',
@@ -61,7 +61,7 @@ module.exports = class Imagelayers extends LegacyService {
           }
           try {
             if (type === 'image-size') {
-              const size = metric(buffer[0].repo.size) + 'B'
+              const size = `${metric(buffer[0].repo.size)}B`
               badgeData.text[0] = getLabel('image size', data)
               badgeData.text[1] = size
             } else if (type === 'layers') {
diff --git a/services/itunes/itunes.service.js b/services/itunes/itunes.service.js
index 6cf84cf6fd397e4316b877cf671e249166b8819e..30942f292e88e6db2015ddba186fbb078c25cf20 100644
--- a/services/itunes/itunes.service.js
+++ b/services/itunes/itunes.service.js
@@ -33,7 +33,7 @@ module.exports = class Itunes extends LegacyService {
       cache((data, match, sendBadge, request) => {
         const bundleId = match[1] // eg, `324684580`
         const format = match[2]
-        const apiUrl = 'https://itunes.apple.com/lookup?id=' + bundleId
+        const apiUrl = `https://itunes.apple.com/lookup?id=${bundleId}`
         const badgeData = getBadgeData('itunes app store', data)
         request(apiUrl, (err, res, buffer) => {
           if (err !== null) {
diff --git a/services/jenkins/jenkins-build.service.js b/services/jenkins/jenkins-build.service.js
index 2950528fff83187d80386dc792db25948a9e84c6..c964f7fccbe684af020c4c062b7a039f73ac1d8f 100644
--- a/services/jenkins/jenkins-build.service.js
+++ b/services/jenkins/jenkins-build.service.js
@@ -35,11 +35,10 @@ module.exports = class JenkinsBuild extends LegacyService {
         const format = match[4]
         const options = {
           json: true,
-          uri: scheme + '://' + host + '/job/' + job + '/api/json?tree=color',
+          uri: `${scheme}://${host}/job/${job}/api/json?tree=color`,
         }
         if (job.indexOf('/') > -1) {
-          options.uri =
-            scheme + '://' + host + '/' + job + '/api/json?tree=color'
+          options.uri = `${scheme}://${host}/${job}/api/json?tree=color`
         }
 
         if (serverSecrets && serverSecrets.jenkins_user) {
diff --git a/services/jenkins/jenkins-plugin-installs.service.js b/services/jenkins/jenkins-plugin-installs.service.js
index 6115a156a087fc748ebeaf97d3c984164db2b38f..b864f7aa066ac184c6569a04c01b86073dc39839 100644
--- a/services/jenkins/jenkins-plugin-installs.service.js
+++ b/services/jenkins/jenkins-plugin-installs.service.js
@@ -59,7 +59,7 @@ class JenkinsPluginInstalls extends BaseJsonService {
 
   static _getLabel(version) {
     if (version) {
-      return 'installs@' + version
+      return `installs@${version}`
     } else {
       return 'installs'
     }
diff --git a/services/jenkins/jenkins-tests.service.js b/services/jenkins/jenkins-tests.service.js
index b370c7229bfa8d7ba7f0f248fd6c4f25e08894e5..3579caad1635ecd27a9dfbae7f1b643f29772a61 100644
--- a/services/jenkins/jenkins-tests.service.js
+++ b/services/jenkins/jenkins-tests.service.js
@@ -35,24 +35,14 @@ module.exports = class JenkinsTests extends LegacyService {
         const format = match[4]
         const options = {
           json: true,
-          uri:
-            scheme +
-            '://' +
-            host +
-            '/job/' +
-            job +
-            '/lastBuild/api/json?tree=' +
-            encodeURIComponent('actions[failCount,skipCount,totalCount]'),
+          uri: `${scheme}://${host}/job/${job}/lastBuild/api/json?tree=${encodeURIComponent(
+            'actions[failCount,skipCount,totalCount]'
+          )}`,
         }
         if (job.indexOf('/') > -1) {
-          options.uri =
-            scheme +
-            '://' +
-            host +
-            '/' +
-            job +
-            '/lastBuild/api/json?tree=' +
-            encodeURIComponent('actions[failCount,skipCount,totalCount]')
+          options.uri = `${scheme}://${host}/${job}/lastBuild/api/json?tree=${encodeURIComponent(
+            'actions[failCount,skipCount,totalCount]'
+          )}`
         }
 
         if (serverSecrets && serverSecrets.jenkins_user) {
@@ -83,7 +73,7 @@ module.exports = class JenkinsTests extends LegacyService {
               testsObject.totalCount -
               (testsObject.failCount + testsObject.skipCount)
             const percent = successfulTests / testsObject.totalCount
-            badgeData.text[1] = successfulTests + ' / ' + testsObject.totalCount
+            badgeData.text[1] = `${successfulTests} / ${testsObject.totalCount}`
             if (percent === 1) {
               badgeData.colorscheme = 'brightgreen'
             } else if (percent === 0) {
diff --git a/services/jetbrains/jetbrains.service.js b/services/jetbrains/jetbrains.service.js
index 6104db35a123e668753004d4f7cdac0f7e0b638d..a72b5c35dcf4689c71022cf6b9fcfecada5108c3 100644
--- a/services/jetbrains/jetbrains.service.js
+++ b/services/jetbrains/jetbrains.service.js
@@ -21,8 +21,7 @@ module.exports = class JetBrains extends LegacyService {
         const format = match[3]
         const leftText = type === 'v' ? 'jetbrains plugin' : 'downloads'
         const badgeData = getBadgeData(leftText, data)
-        const url =
-          'https://plugins.jetbrains.com/plugins/list?pluginId=' + pluginId
+        const url = `https://plugins.jetbrains.com/plugins/list?pluginId=${pluginId}`
 
         request(url, (err, res, buffer) => {
           if (err || res.statusCode !== 200) {
diff --git a/services/jira/jira-issue.service.js b/services/jira/jira-issue.service.js
index b522a45798b3a6b497bbefa6d02936231c30db89..9443b8ae4c2a2557520e04f3bec7d67477511f85 100644
--- a/services/jira/jira-issue.service.js
+++ b/services/jira/jira-issue.service.js
@@ -36,12 +36,9 @@ module.exports = class JiraIssue extends LegacyService {
         const options = {
           method: 'GET',
           json: true,
-          uri:
-            protocol +
-            '://' +
-            host +
-            '/rest/api/2/issue/' +
-            encodeURIComponent(issueKey),
+          uri: `${protocol}://${host}/rest/api/2/issue/${encodeURIComponent(
+            issueKey
+          )}`,
         }
         if (serverSecrets && serverSecrets.jira_username) {
           options.auth = {
diff --git a/services/jira/jira-sprint.service.js b/services/jira/jira-sprint.service.js
index bd8ce279c1451fdb691e0e4ec1a172dceaad529e..0fe1c0aac1ed10fdfab361e5e3fe48ecac2dfb8a 100644
--- a/services/jira/jira-sprint.service.js
+++ b/services/jira/jira-sprint.service.js
@@ -45,13 +45,7 @@ module.exports = class JiraSprint extends LegacyService {
         const options = {
           method: 'GET',
           json: true,
-          uri:
-            protocol +
-            '://' +
-            host +
-            '/rest/api/2/search?jql=sprint=' +
-            sprintId +
-            '%20AND%20type%20IN%20(Bug,Improvement,Story,"Technical%20task")&fields=resolution&maxResults=500',
+          uri: `${protocol}://${host}/rest/api/2/search?jql=sprint=${sprintId}%20AND%20type%20IN%20(Bug,Improvement,Story,"Technical%20task")&fields=resolution&maxResults=500`,
         }
         if (serverSecrets && serverSecrets.jira_username) {
           options.auth = {
@@ -74,8 +68,9 @@ module.exports = class JiraSprint extends LegacyService {
                   return el.fields.resolution.name !== 'Unresolved'
                 }
               }).length
-              badgeData.text[1] =
-                Math.round((issuesDone * 100) / json.total) + '%'
+              badgeData.text[1] = `${Math.round(
+                (issuesDone * 100) / json.total
+              )}%`
               switch (issuesDone) {
                 case 0:
                   badgeData.colorscheme = 'red'
diff --git a/services/jitpack/jitpack.service.js b/services/jitpack/jitpack.service.js
index 5e6aac4c6f05537256e2e4cecf02938f1f8cfc8d..a851e6286454089823287b3e2746c02ee3eb4b72 100644
--- a/services/jitpack/jitpack.service.js
+++ b/services/jitpack/jitpack.service.js
@@ -30,12 +30,12 @@ module.exports = class Jitpack extends LegacyService {
     camp.route(
       /^\/jitpack\/v\/([^/]*)\/([^/]*)\.(svg|png|gif|jpg|json)$/,
       cache((data, match, sendBadge, request) => {
-        const groupId = 'com.github.' + match[1] // github user
+        const groupId = `com.github.${match[1]}` // github user
         const artifactId = match[2] // the project's name
         const format = match[3] // "svg"
 
-        const pkg = groupId + '/' + artifactId + '/latest'
-        const apiUrl = 'https://jitpack.io/api/builds/' + pkg
+        const pkg = `${groupId}/${artifactId}/latest`
+        const apiUrl = `https://jitpack.io/api/builds/${pkg}`
 
         const badgeData = getBadgeData('jitpack', data)
 
diff --git a/services/lgtm/lgtm-alerts.service.js b/services/lgtm/lgtm-alerts.service.js
index 697ad837db34706091cf5a6319bb3e06d956f1f0..99b7138ac744945e607ec9bf61fbb3d952b5e52d 100644
--- a/services/lgtm/lgtm-alerts.service.js
+++ b/services/lgtm/lgtm-alerts.service.js
@@ -31,8 +31,7 @@ module.exports = class LgtmAlerts extends LegacyService {
       cache((data, match, sendBadge, request) => {
         const projectId = match[1] // eg, `g/apache/cloudstack`
         const format = match[2]
-        const url =
-          'https://lgtm.com/api/v0.1/project/' + projectId + '/details'
+        const url = `https://lgtm.com/api/v0.1/project/${projectId}/details`
         const badgeData = getBadgeData('lgtm', data)
         request(url, (err, res, buffer) => {
           if (
diff --git a/services/lgtm/lgtm-grade.service.js b/services/lgtm/lgtm-grade.service.js
index b7011db3a89a10cbcd42c632b9eb2a9f6f51140b..c51c3c54b23d3941cff95028c9632b65f0cae160 100644
--- a/services/lgtm/lgtm-grade.service.js
+++ b/services/lgtm/lgtm-grade.service.js
@@ -31,8 +31,7 @@ module.exports = class LgtmGrade extends LegacyService {
         const language = match[1] // eg, `java`
         const projectId = match[2] // eg, `g/apache/cloudstack`
         const format = match[3]
-        const url =
-          'https://lgtm.com/api/v0.1/project/' + projectId + '/details'
+        const url = `https://lgtm.com/api/v0.1/project/${projectId}/details`
         const languageLabel = (() => {
           switch (language) {
             case 'cpp':
@@ -46,7 +45,7 @@ module.exports = class LgtmGrade extends LegacyService {
               return language
           }
         })()
-        const badgeData = getBadgeData('code quality: ' + languageLabel, data)
+        const badgeData = getBadgeData(`code quality: ${languageLabel}`, data)
         request(url, (err, res, buffer) => {
           if (
             checkErrorResponse(badgeData, err, res, {
diff --git a/services/liberapay/liberapay.service.js b/services/liberapay/liberapay.service.js
index 708800ffbb96f660fddf34234c533df41b93186e..842ea6177021c1a67f9c68c55cb2d99cbd43b1dc 100644
--- a/services/liberapay/liberapay.service.js
+++ b/services/liberapay/liberapay.service.js
@@ -45,7 +45,7 @@ module.exports = class Liberapay extends LegacyService {
         const type = match[1] // e.g., 'gives'
         const entity = match[2] // e.g., 'Changaco'
         const format = match[3]
-        const apiUrl = 'https://liberapay.com/' + entity + '/public.json'
+        const apiUrl = `https://liberapay.com/${entity}/public.json`
         // Lock down type
         const label = {
           receives: 'receives',
diff --git a/services/librariesio/librariesio-dependencies.service.js b/services/librariesio/librariesio-dependencies.service.js
index e9ded30b944d69c6be2ca1293d53d5629590b194..63cf1c10507bd7bee6f088b83fae30df53bef150 100644
--- a/services/librariesio/librariesio-dependencies.service.js
+++ b/services/librariesio/librariesio-dependencies.service.js
@@ -40,13 +40,12 @@ module.exports = class LibrariesioDependencies extends LegacyService {
         let uri
         switch (resource) {
           case 'github': {
-            uri = 'https://libraries.io/api/github/' + project + '/dependencies'
+            uri = `https://libraries.io/api/github/${project}/dependencies`
             break
           }
           case 'release': {
             const v = version || 'latest'
-            uri =
-              'https://libraries.io/api/' + project + '/' + v + '/dependencies'
+            uri = `https://libraries.io/api/${project}/${v}/dependencies`
             break
           }
         }
@@ -70,14 +69,14 @@ module.exports = class LibrariesioDependencies extends LegacyService {
             // Deprecated dependencies are really bad
             if (deprecated.length > 0) {
               badgeData.colorscheme = 'red'
-              badgeData.text[1] = deprecated.length + ' deprecated'
+              badgeData.text[1] = `${deprecated.length} deprecated`
               return sendBadge(format, badgeData)
             }
 
             // Out of date dependencies are pretty bad
             if (outofdate.length > 0) {
               badgeData.colorscheme = 'orange'
-              badgeData.text[1] = outofdate.length + ' out of date'
+              badgeData.text[1] = `${outofdate.length} out of date`
               return sendBadge(format, badgeData)
             }
 
diff --git a/services/luarocks/luarocks.service.js b/services/luarocks/luarocks.service.js
index 91d125dee70c4a29e53a92fb1e62cc0b82b94136..96d024a552431c2e218c6303ffbc46a1f36efc31 100644
--- a/services/luarocks/luarocks.service.js
+++ b/services/luarocks/luarocks.service.js
@@ -16,8 +16,7 @@ module.exports = class Luarocks extends LegacyService {
         const user = match[1] // eg, `leafo`.
         const moduleName = match[2] // eg, `lapis`.
         const format = match[4]
-        const apiUrl =
-          'https://luarocks.org/manifests/' + user + '/manifest.json'
+        const apiUrl = `https://luarocks.org/manifests/${user}/manifest.json`
         const badgeData = getBadgeData('luarocks', data)
         let version = match[3] // you can explicitly specify a version
         request(apiUrl, (err, res, buffer) => {
diff --git a/services/maintenance/maintenance.service.js b/services/maintenance/maintenance.service.js
index 166e09c8bb4931e102d97880a1712bdc307f4717..fc73e480bab093b069021cdbb94f1a45bbaf0f34 100644
--- a/services/maintenance/maintenance.service.js
+++ b/services/maintenance/maintenance.service.js
@@ -37,15 +37,15 @@ module.exports = class Maintenance extends LegacyService {
           const cy = now.getUTCFullYear() // current year.
           const m = now.getUTCMonth() // month.
           if (status === 'no') {
-            badgeData.text[1] = 'no! (as of ' + year + ')'
+            badgeData.text[1] = `no! (as of ${year})`
             badgeData.colorscheme = 'red'
           } else if (cy <= year) {
             badgeData.text[1] = status
             badgeData.colorscheme = 'brightgreen'
           } else if (cy === year + 1 && m < 3) {
-            badgeData.text[1] = 'stale (as of ' + cy + ')'
+            badgeData.text[1] = `stale (as of ${cy})`
           } else {
-            badgeData.text[1] = 'no! (as of ' + year + ')'
+            badgeData.text[1] = `no! (as of ${year})`
             badgeData.colorscheme = 'red'
           }
           sendBadge(format, badgeData)
diff --git a/services/maintenance/maintenance.tester.js b/services/maintenance/maintenance.tester.js
index 9f3a9edac3007fb4a238b43e3ab88ae6ae24b24e..ce1c9811512e8ac7d91ff06f44c5807d16651246 100644
--- a/services/maintenance/maintenance.tester.js
+++ b/services/maintenance/maintenance.tester.js
@@ -16,9 +16,9 @@ t.create('no longer maintained 2017 (no)')
   .expectJSON({ name: 'maintained', value: 'no! (as of 2017)' })
 
 t.create('yes this year (yes)')
-  .get('/yes/' + currentYear + '.json')
+  .get(`/yes/${currentYear}.json`)
   .expectJSON({ name: 'maintained', value: 'yes' })
 
-t.create('until end of ' + currentYear + ' (yes)')
-  .get('/until end of ' + currentYear + '/' + currentYear + '.json')
-  .expectJSON({ name: 'maintained', value: 'until end of ' + currentYear })
+t.create(`until end of ${currentYear} (yes)`)
+  .get(`/until end of ${currentYear}/${currentYear}.json`)
+  .expectJSON({ name: 'maintained', value: `until end of ${currentYear}` })
diff --git a/services/maven-central/maven-central.service.js b/services/maven-central/maven-central.service.js
index 5a753c9e160c8a1ee34ba49f149269efa4a1ad89..58765a3ae2c5419c1661583154cea2f7a7136aaf 100644
--- a/services/maven-central/maven-central.service.js
+++ b/services/maven-central/maven-central.service.js
@@ -39,13 +39,11 @@ module.exports = class MavenCentral extends LegacyService {
         const artifactId = match[2] // eg, `guice`
         const versionPrefix = match[3] || '' // eg, `1.`
         const format = match[4] || 'gif' // eg, `svg`
-        const metadataUrl =
-          'http://repo1.maven.org/maven2' +
-          '/' +
-          encodeURIComponent(groupId).replace(/\./g, '/') +
-          '/' +
-          encodeURIComponent(artifactId) +
-          '/maven-metadata.xml'
+        const metadataUrl = `${'http://repo1.maven.org/maven2' +
+          '/'}${encodeURIComponent(groupId).replace(
+          /\./g,
+          '/'
+        )}/${encodeURIComponent(artifactId)}/maven-metadata.xml`
         const badgeData = getBadgeData('maven-central', data)
         request(
           metadataUrl,
diff --git a/services/nexus/nexus.service.js b/services/nexus/nexus.service.js
index 0f0a9bc5465eb156a2626349e730d9622197309e..3b944f6985aa46cdb81ffe648e5cfce6a263c322 100644
--- a/services/nexus/nexus.service.js
+++ b/services/nexus/nexus.service.js
@@ -26,24 +26,11 @@ module.exports = class Nexus extends LegacyService {
 
         const badgeData = getBadgeData('nexus', data)
 
-        const apiUrl =
-          scheme +
-          '://' +
-          host +
-          (repo === 'r' || repo === 's'
-            ? '/service/local/lucene/search?g=' +
-              groupId +
-              '&a=' +
-              artifactId +
-              queryOpt
-            : '/service/local/artifact/maven/resolve?r=' +
-              repo +
-              '&g=' +
-              groupId +
-              '&a=' +
-              artifactId +
-              '&v=LATEST' +
-              queryOpt)
+        const apiUrl = `${scheme}://${host}${
+          repo === 'r' || repo === 's'
+            ? `/service/local/lucene/search?g=${groupId}&a=${artifactId}${queryOpt}`
+            : `/service/local/artifact/maven/resolve?r=${repo}&g=${groupId}&a=${artifactId}&v=LATEST${queryOpt}`
+        }`
 
         request(
           apiUrl,
diff --git a/services/nuget/nuget.service.js b/services/nuget/nuget.service.js
index d0c05e745457e67183e80e0596703950a4f22500..d6b4228a8e9455c69dfdbf13a754d63f20f088c7 100644
--- a/services/nuget/nuget.service.js
+++ b/services/nuget/nuget.service.js
@@ -10,20 +10,20 @@ const { regularUpdate } = require('../../lib/regular-update')
 
 function mapNugetFeedv2({ camp, cache }, pattern, offset, getInfo) {
   const vRegex = new RegExp(
-    '^\\/' + pattern + '\\/v\\/(.*)\\.(svg|png|gif|jpg|json)$'
+    `^\\/${pattern}\\/v\\/(.*)\\.(svg|png|gif|jpg|json)$`
   )
   const vPreRegex = new RegExp(
-    '^\\/' + pattern + '\\/vpre\\/(.*)\\.(svg|png|gif|jpg|json)$'
+    `^\\/${pattern}\\/vpre\\/(.*)\\.(svg|png|gif|jpg|json)$`
   )
   const dtRegex = new RegExp(
-    '^\\/' + pattern + '\\/dt\\/(.*)\\.(svg|png|gif|jpg|json)$'
+    `^\\/${pattern}\\/dt\\/(.*)\\.(svg|png|gif|jpg|json)$`
   )
 
   function getNugetPackage(apiUrl, id, includePre, request, done) {
     const filter = includePre
-      ? "Id eq '" + id + "' and IsAbsoluteLatestVersion eq true"
-      : "Id eq '" + id + "' and IsLatestVersion eq true"
-    const reqUrl = apiUrl + '/Packages()?$filter=' + encodeURIComponent(filter)
+      ? `Id eq '${id}' and IsAbsoluteLatestVersion eq true`
+      : `Id eq '${id}' and IsLatestVersion eq true`
+    const reqUrl = `${apiUrl}/Packages()?$filter=${encodeURIComponent(filter)}`
     request(
       reqUrl,
       { headers: { Accept: 'application/atom+json,application/json' } },
@@ -68,7 +68,7 @@ function mapNugetFeedv2({ camp, cache }, pattern, offset, getInfo) {
           return
         }
         const version = data.NormalizedVersion || data.Version
-        badgeData.text[1] = 'v' + version
+        badgeData.text[1] = `v${version}`
         if (version.indexOf('-') !== -1) {
           badgeData.colorscheme = 'yellow'
         } else if (version[0] === '0') {
@@ -97,7 +97,7 @@ function mapNugetFeedv2({ camp, cache }, pattern, offset, getInfo) {
           return
         }
         const version = data.NormalizedVersion || data.Version
-        badgeData.text[1] = 'v' + version
+        badgeData.text[1] = `v${version}`
         if (version.indexOf('-') !== -1) {
           badgeData.colorscheme = 'yellow'
         } else if (version[0] === '0') {
@@ -135,13 +135,13 @@ function mapNugetFeedv2({ camp, cache }, pattern, offset, getInfo) {
 
 function mapNugetFeed({ camp, cache }, pattern, offset, getInfo) {
   const vRegex = new RegExp(
-    '^\\/' + pattern + '\\/v\\/(.*)\\.(svg|png|gif|jpg|json)$'
+    `^\\/${pattern}\\/v\\/(.*)\\.(svg|png|gif|jpg|json)$`
   )
   const vPreRegex = new RegExp(
-    '^\\/' + pattern + '\\/vpre\\/(.*)\\.(svg|png|gif|jpg|json)$'
+    `^\\/${pattern}\\/vpre\\/(.*)\\.(svg|png|gif|jpg|json)$`
   )
   const dtRegex = new RegExp(
-    '^\\/' + pattern + '\\/dt\\/(.*)\\.(svg|png|gif|jpg|json)$'
+    `^\\/${pattern}\\/dt\\/(.*)\\.(svg|png|gif|jpg|json)$`
   )
 
   function getNugetData(apiUrl, id, request, done) {
@@ -149,7 +149,7 @@ function mapNugetFeed({ camp, cache }, pattern, offset, getInfo) {
 
     regularUpdate(
       {
-        url: apiUrl + '/index.json',
+        url: `${apiUrl}/index.json`,
         // The endpoint changes once per year (ie, a period of n = 1 year).
         // We minimize the users' waiting time for information.
         // With l = latency to fetch the endpoint and x = endpoint update period
@@ -179,11 +179,9 @@ function mapNugetFeed({ camp, cache }, pattern, offset, getInfo) {
             Math.random() * searchQueryResources.length
           )
           const reqUrl =
-            searchQueryResources[randomEndpointIdx]['@id'] +
-            '?q=packageid:' +
-            encodeURIComponent(id.toLowerCase()) + // NuGet package id (lowercase)
-            '&prerelease=true' + // Include prerelease versions?
-            '&semVerLevel=2' // Include packages with SemVer 2 version numbers
+            `${searchQueryResources[randomEndpointIdx]['@id']}?q=packageid:${
+              encodeURIComponent(id.toLowerCase()) // NuGet package id (lowercase)
+            }&prerelease=true` + `&semVerLevel=2` // Include prerelease versions? // Include packages with SemVer 2 version numbers
 
           request(reqUrl, (err, res, buffer) => {
             if (err != null) {
@@ -246,7 +244,7 @@ function mapNugetFeed({ camp, cache }, pattern, offset, getInfo) {
           return
         }
         try {
-          badgeData.text[1] = 'v' + version
+          badgeData.text[1] = `v${version}`
           if (version.indexOf('-') !== -1) {
             badgeData.colorscheme = 'yellow'
           } else if (version[0] === '0') {
@@ -279,7 +277,7 @@ function mapNugetFeed({ camp, cache }, pattern, offset, getInfo) {
           return
         }
         try {
-          badgeData.text[1] = 'v' + version
+          badgeData.text[1] = `v${version}`
           if (version.indexOf('-') !== -1) {
             badgeData.colorscheme = 'yellow'
           } else if (version[0] === '0') {
@@ -359,7 +357,7 @@ module.exports = class Nuget extends LegacyService {
       const feed = match[2]
       return {
         site: feed,
-        feed: 'https://' + tenant + 'myget.org/F/' + feed + '/api/v3',
+        feed: `https://${tenant}myget.org/F/${feed}/api/v3`,
       }
     })
   }
diff --git a/services/osstracker/osstracker.service.js b/services/osstracker/osstracker.service.js
index 280f5cd00738e2656e3120b5e040f5773423721b..4bed5021ba0b0c75beab29ee75e273cb198ace13 100644
--- a/services/osstracker/osstracker.service.js
+++ b/services/osstracker/osstracker.service.js
@@ -32,9 +32,9 @@ module.exports = class OssTracker extends LegacyService {
         const orgOrUserAndRepo = match[1]
         const branch = match[2]
         const format = match[3]
-        let url = 'https://raw.githubusercontent.com/' + orgOrUserAndRepo
+        let url = `https://raw.githubusercontent.com/${orgOrUserAndRepo}`
         if (branch != null) {
-          url += '/' + branch + '/OSSMETADATA'
+          url += `/${branch}/OSSMETADATA`
         } else {
           url += '/master/OSSMETADATA'
         }
@@ -45,9 +45,9 @@ module.exports = class OssTracker extends LegacyService {
         const badgeData = getBadgeData('oss lifecycle', data)
         request(options, (err, res, body) => {
           if (err != null) {
-            log.error('NetflixOSS error: ' + err.stack)
+            log.error(`NetflixOSS error: ${err.stack}`)
             if (res) {
-              log.error('' + res)
+              log.error(`${res}`)
             }
             badgeData.text[1] = 'invalid'
             sendBadge(format, badgeData)
diff --git a/services/packagecontrol/packagecontrol.service.js b/services/packagecontrol/packagecontrol.service.js
index ae545254eeee891d69351f60b674547d88afd58c..edc7756d9de83b3a0c40c7c516fec6cb51e77336 100644
--- a/services/packagecontrol/packagecontrol.service.js
+++ b/services/packagecontrol/packagecontrol.service.js
@@ -50,8 +50,7 @@ module.exports = class PackageControl extends LegacyService {
         const info = match[1] // either `dm`, `dw`, `dd` or dt`.
         const userRepo = match[2] // eg, `Package%20Control`.
         const format = match[3]
-        const apiUrl =
-          'https://packagecontrol.io/packages/' + userRepo + '.json'
+        const apiUrl = `https://packagecontrol.io/packages/${userRepo}.json`
         const badgeData = getBadgeData('downloads', data)
         request(apiUrl, (err, res, buffer) => {
           if (err != null) {
@@ -74,7 +73,7 @@ module.exports = class PackageControl extends LegacyService {
                     downloads += platform.totals[i]
                   }
                 })
-                badgeData.text[1] = metric(downloads) + '/month'
+                badgeData.text[1] = `${metric(downloads)}/month`
                 break
               case 'w':
                 // daily downloads are separated by Operating System
@@ -86,7 +85,7 @@ module.exports = class PackageControl extends LegacyService {
                     downloads += platform.totals[i]
                   }
                 })
-                badgeData.text[1] = metric(downloads) + '/week'
+                badgeData.text[1] = `${metric(downloads)}/week`
                 break
               case 'd':
                 // daily downloads are separated by Operating System
@@ -95,7 +94,7 @@ module.exports = class PackageControl extends LegacyService {
                   // use the downloads from yesterday
                   downloads += platform.totals[1]
                 })
-                badgeData.text[1] = metric(downloads) + '/day'
+                badgeData.text[1] = `${metric(downloads)}/day`
                 break
               case 't':
                 // all-time downloads are already compiled
diff --git a/services/packagist/packagist-downloads.service.js b/services/packagist/packagist-downloads.service.js
index 6729e7f71084c9375d10c22addc21fc615041dd2..87a4f3ff3313dd068a96530dfe40738739b3483f 100644
--- a/services/packagist/packagist-downloads.service.js
+++ b/services/packagist/packagist-downloads.service.js
@@ -45,7 +45,7 @@ module.exports = class PackagistDownloads extends LegacyService {
         const info = match[1] // either `dm` or dt`.
         const userRepo = match[2] // eg, `doctrine/orm`.
         const format = match[3]
-        const apiUrl = 'https://packagist.org/packages/' + userRepo + '.json'
+        const apiUrl = `https://packagist.org/packages/${userRepo}.json`
         const badgeData = getBadgeData('downloads', data)
         if (userRepo.substr(-14) === '/:package_name') {
           badgeData.text[1] = 'invalid'
@@ -63,11 +63,11 @@ module.exports = class PackagistDownloads extends LegacyService {
             switch (info.charAt(1)) {
               case 'm':
                 downloads = data.package.downloads.monthly
-                badgeData.text[1] = metric(downloads) + '/month'
+                badgeData.text[1] = `${metric(downloads)}/month`
                 break
               case 'd':
                 downloads = data.package.downloads.daily
-                badgeData.text[1] = metric(downloads) + '/day'
+                badgeData.text[1] = `${metric(downloads)}/day`
                 break
               case 't':
                 downloads = data.package.downloads.total
diff --git a/services/packagist/packagist-license.service.js b/services/packagist/packagist-license.service.js
index 373859f86165c9be1446ea4a6d0678578453abaf..95ee8699131e2c29b9a78cdf033af2be71370a51 100644
--- a/services/packagist/packagist-license.service.js
+++ b/services/packagist/packagist-license.service.js
@@ -10,7 +10,7 @@ module.exports = class PackagistLicense extends LegacyService {
       cache((data, match, sendBadge, request) => {
         const userRepo = match[1]
         const format = match[2]
-        const apiUrl = 'https://packagist.org/packages/' + userRepo + '.json'
+        const apiUrl = `https://packagist.org/packages/${userRepo}.json`
         const badgeData = getBadgeData('license', data)
         if (userRepo.substr(-14) === '/:package_name') {
           badgeData.text[1] = 'invalid'
diff --git a/services/packagist/packagist-php-version.service.js b/services/packagist/packagist-php-version.service.js
index cd2728ac7c92c0d06a921fdb4e999bfad413da70..0d6bcc3b8fd407273aa91eff6c97298c834f791b 100644
--- a/services/packagist/packagist-php-version.service.js
+++ b/services/packagist/packagist-php-version.service.js
@@ -33,14 +33,14 @@ module.exports = class PackagistPhpVersion extends LegacyService {
         const format = match[3]
         const options = {
           method: 'GET',
-          uri: 'https://packagist.org/p/' + userRepo + '.json',
+          uri: `https://packagist.org/p/${userRepo}.json`,
         }
         const badgeData = getBadgeData('php', data)
         request(options, (err, res, buffer) => {
           if (err !== null) {
-            log.error('Packagist error: ' + err.stack)
+            log.error(`Packagist error: ${err.stack}`)
             if (res) {
-              log.error('' + res)
+              log.error(`${res}`)
             }
             badgeData.text[1] = 'invalid'
             sendBadge(format, badgeData)
diff --git a/services/packagist/packagist-version.service.js b/services/packagist/packagist-version.service.js
index 6ca7f8591a83d131d03ba17da2f69a365046338f..9aaa7b0ce06a30c476aade45916d80a5045d9255 100644
--- a/services/packagist/packagist-version.service.js
+++ b/services/packagist/packagist-version.service.js
@@ -18,7 +18,7 @@ module.exports = class PackagistVersion extends LegacyService {
         const info = match[1] // either `v` or `vpre`.
         const userRepo = match[2] // eg, `doctrine/orm`.
         const format = match[3]
-        const apiUrl = 'https://packagist.org/packages/' + userRepo + '.json'
+        const apiUrl = `https://packagist.org/packages/${userRepo}.json`
         const badgeData = getBadgeData('packagist', data)
         if (userRepo.substr(-14) === '/:package_name') {
           badgeData.text[1] = 'invalid'
diff --git a/services/php-eye/php-eye-hhvm.service.js b/services/php-eye/php-eye-hhvm.service.js
index df620c6a2ab4376ac81f1d8f395964fea32ba268..92355dfa2a52b54a6634c661f2cfbecc9f68928f 100644
--- a/services/php-eye/php-eye-hhvm.service.js
+++ b/services/php-eye/php-eye-hhvm.service.js
@@ -36,7 +36,7 @@ module.exports = class PhpeyeHhvm extends LegacyService {
         const user = match[1] // eg, `symfony/symfony`.
         let branch = match[2] ? omitv(match[2]) : 'dev-master'
         const format = match[3]
-        const apiUrl = 'https://php-eye.com/api/v1/package/' + user + '.json'
+        const apiUrl = `https://php-eye.com/api/v1/package/${user}.json`
         const badgeData = getBadgeData('hhvm', data)
         if (branch === 'master') {
           branch = 'dev-master'
diff --git a/services/php-eye/php-eye-php-version.service.js b/services/php-eye/php-eye-php-version.service.js
index 4f2c61cb4641f4091c45fcb2e98b7503e50ae817..5f657e22518d96bb4763f3b44694dd2492364110 100644
--- a/services/php-eye/php-eye-php-version.service.js
+++ b/services/php-eye/php-eye-php-version.service.js
@@ -37,16 +37,16 @@ module.exports = class PhpEyePhpVersion extends LegacyService {
         const format = match[3]
         const options = {
           method: 'GET',
-          uri: 'https://php-eye.com/api/v1/package/' + userRepo + '.json',
+          uri: `https://php-eye.com/api/v1/package/${userRepo}.json`,
         }
         const badgeData = getBadgeData('php tested', data)
         getPhpReleases(githubApiProvider)
           .then(phpReleases => {
             request(options, (err, res, buffer) => {
               if (err !== null) {
-                log.error('PHP-Eye error: ' + err.stack)
+                log.error(`PHP-Eye error: ${err.stack}`)
                 if (res) {
-                  log.error('' + res)
+                  log.error(`${res}`)
                 }
                 badgeData.text[1] = 'invalid'
                 sendBadge(format, badgeData)
diff --git a/services/pub/pub.service.js b/services/pub/pub.service.js
index f0b78a2f76f5c5a72b540afc052a9a916b92420f..755e8e0801664df69cf34c4340d7530d6cec98ae 100644
--- a/services/pub/pub.service.js
+++ b/services/pub/pub.service.js
@@ -34,7 +34,7 @@ module.exports = class Pub extends LegacyService {
         const includePre = Boolean(match[1])
         const userRepo = match[2] // eg, "box2d"
         const format = match[3]
-        const apiUrl = 'https://pub.dartlang.org/packages/' + userRepo + '.json'
+        const apiUrl = `https://pub.dartlang.org/packages/${userRepo}.json`
         const badgeData = getBadgeData('pub', data)
         request(apiUrl, (err, res, buffer) => {
           if (err != null) {
diff --git a/services/puppetforge/puppetforge-modules.service.js b/services/puppetforge/puppetforge-modules.service.js
index 2601c1f318231385d6aa096db466dc7228676809..d3f81230f4735bda1f95b3f073a94c58f7839106 100644
--- a/services/puppetforge/puppetforge-modules.service.js
+++ b/services/puppetforge/puppetforge-modules.service.js
@@ -23,8 +23,7 @@ module.exports = class PuppetforgeModules extends LegacyService {
         const format = match[4]
         const options = {
           json: true,
-          uri:
-            'https://forgeapi.puppetlabs.com/v3/modules/' + user + '-' + module,
+          uri: `https://forgeapi.puppetlabs.com/v3/modules/${user}-${module}`,
         }
         const badgeData = getBadgeData('puppetforge', data)
         request(options, (err, res, json) => {
@@ -67,7 +66,7 @@ module.exports = class PuppetforgeModules extends LegacyService {
               const feedback = json.feedback_score
               badgeData.text[0] = getLabel('score', data)
               if (feedback != null) {
-                badgeData.text[1] = feedback + '%'
+                badgeData.text[1] = `${feedback}%`
                 badgeData.colorscheme = coveragePercentageColor(feedback)
               } else {
                 badgeData.text[1] = 'unknown'
diff --git a/services/puppetforge/puppetforge-users.service.js b/services/puppetforge/puppetforge-users.service.js
index cab8abf23fe36add2c3389efafb1a15e5e03957f..3e2bfb36af20b361c1d3beb0be7a21a5e0e12f4f 100644
--- a/services/puppetforge/puppetforge-users.service.js
+++ b/services/puppetforge/puppetforge-users.service.js
@@ -18,7 +18,7 @@ module.exports = class PuppetforgeUsers extends LegacyService {
         const format = match[3]
         const options = {
           json: true,
-          uri: 'https://forgeapi.puppetlabs.com/v3/users/' + user,
+          uri: `https://forgeapi.puppetlabs.com/v3/users/${user}`,
         }
         const badgeData = getBadgeData('puppetforge', data)
         request(options, (err, res, json) => {
diff --git a/services/redmine/redmine.service.js b/services/redmine/redmine.service.js
index 67024b77a1455906fce6c66f4b734a95fb04005f..2b535878100a0a40facc139fc3b1e7edc5b0777c 100644
--- a/services/redmine/redmine.service.js
+++ b/services/redmine/redmine.service.js
@@ -16,7 +16,7 @@ module.exports = class Redmine extends LegacyService {
         const format = match[3]
         const options = {
           method: 'GET',
-          uri: 'https://www.redmine.org/plugins/' + plugin + '.xml',
+          uri: `https://www.redmine.org/plugins/${plugin}.xml`,
         }
 
         const badgeData = getBadgeData(type, data)
@@ -35,7 +35,7 @@ module.exports = class Redmine extends LegacyService {
 
               switch (type) {
                 case 'rating':
-                  badgeData.text[1] = rating + '/5.0'
+                  badgeData.text[1] = `${rating}/5.0`
                   break
                 case 'stars':
                   badgeData.text[1] = starRating(Math.round(rating))
diff --git a/services/scrutinizer/scrutinizer.service.js b/services/scrutinizer/scrutinizer.service.js
index 7878936da8a7b73cd704381901ec5f98103837a8..493f512a026bcc76c98b4c451e60003c17d94779 100644
--- a/services/scrutinizer/scrutinizer.service.js
+++ b/services/scrutinizer/scrutinizer.service.js
@@ -72,7 +72,7 @@ module.exports = class Scrutinizer extends LegacyService {
                 badgeData.text[1] = 'unknown'
                 badgeData.colorscheme = 'gray'
               } else {
-                badgeData.text[1] = percentage.toFixed(0) + '%'
+                badgeData.text[1] = `${percentage.toFixed(0)}%`
                 badgeData.colorscheme = coveragePercentageColor(percentage)
               }
             } else if (type === 'build') {
diff --git a/services/sensiolabs/sensiolabs.service.js b/services/sensiolabs/sensiolabs.service.js
index ff0bfdbe615be3058f2775a5b419e8be8d885567..3a1965f3678944647951f5de9f750196bb394cb0 100644
--- a/services/sensiolabs/sensiolabs.service.js
+++ b/services/sensiolabs/sensiolabs.service.js
@@ -32,7 +32,7 @@ module.exports = class Sensiolabs extends LegacyService {
         const format = match[2]
         const options = {
           method: 'GET',
-          uri: 'https://insight.sensiolabs.com/api/projects/' + projectUuid,
+          uri: `https://insight.sensiolabs.com/api/projects/${projectUuid}`,
           headers: {
             Accept: 'application/vnd.com.sensiolabs.insight+xml',
           },
diff --git a/services/shippable/shippable.service.js b/services/shippable/shippable.service.js
index bc451bd2d5eb360b92c5c0a057b988fa03a9d975..f8b9fb055ded9aad9434eda59d05d766f6f53878 100644
--- a/services/shippable/shippable.service.js
+++ b/services/shippable/shippable.service.js
@@ -56,8 +56,7 @@ module.exports = class Shippable extends LegacyService {
           targetBranch = 'master'
         }
         const format = match[3]
-        const url =
-          'https://api.shippable.com/projects/' + projectId + '/branchRunStatus'
+        const url = `https://api.shippable.com/projects/${projectId}/branchRunStatus`
         const options = {
           method: 'GET',
           uri: url,
diff --git a/services/sonarqube/sonarqube.service.js b/services/sonarqube/sonarqube.service.js
index 19f5f577bc4c47dd244611fb1a8309b4979382af..b491c2405b15a2e00aa49a2fd96fcc872ab8ddf4 100644
--- a/services/sonarqube/sonarqube.service.js
+++ b/services/sonarqube/sonarqube.service.js
@@ -64,21 +64,12 @@ module.exports = class Sonarqube extends LegacyService {
         const useLegacyApi = !!version && version < 5.4
 
         const uri = useLegacyApi
-          ? scheme +
-            '://' +
-            serverUrl +
-            '/api/resources?resource=' +
-            buildType +
-            '&depth=0&metrics=' +
-            encodeURIComponent(sonarMetricName) +
-            '&includetrends=true'
-          : scheme +
-            '://' +
-            serverUrl +
-            '/api/measures/component?componentKey=' +
-            buildType +
-            '&metricKeys=' +
-            encodeURIComponent(sonarMetricName)
+          ? `${scheme}://${serverUrl}/api/resources?resource=${buildType}&depth=0&metrics=${encodeURIComponent(
+              sonarMetricName
+            )}&includetrends=true`
+          : `${scheme}://${serverUrl}/api/measures/component?componentKey=${buildType}&metricKeys=${encodeURIComponent(
+              sonarMetricName
+            )}`
 
         const options = {
           uri,
@@ -116,7 +107,7 @@ module.exports = class Sonarqube extends LegacyService {
             }
 
             if (metricName.indexOf('coverage') !== -1) {
-              badgeData.text[1] = value.toFixed(0) + '%'
+              badgeData.text[1] = `${value.toFixed(0)}%`
               badgeData.colorscheme = coveragePercentageColor(value)
             } else if (/^\w+_violations$/.test(metricName)) {
               badgeData.text[1] = value
@@ -135,7 +126,7 @@ module.exports = class Sonarqube extends LegacyService {
                 }
               }
             } else if (metricName === 'fortify-security-rating') {
-              badgeData.text[1] = value + '/5'
+              badgeData.text[1] = `${value}/5`
 
               if (value === 0) {
                 badgeData.colorscheme = 'red'
@@ -168,7 +159,7 @@ module.exports = class Sonarqube extends LegacyService {
                 //Some metrics higher % is better
                 colorValue = 100 - value
               }
-              badgeData.text[1] = value + '%'
+              badgeData.text[1] = `${value}%`
               if (colorValue >= 100) {
                 badgeData.colorscheme = 'red'
               } else if (colorValue >= 50) {
diff --git a/services/sourceforge/sourceforge.service.js b/services/sourceforge/sourceforge.service.js
index a9acb00a0f6e622a87208783f94341cc274ac3e2..24422a99b59f0451851a7300f67b05be9ccdcb50 100644
--- a/services/sourceforge/sourceforge.service.js
+++ b/services/sourceforge/sourceforge.service.js
@@ -55,12 +55,7 @@ module.exports = class Sourceforge extends LegacyService {
         const project = match[2] // eg, 'sevenzip`.
         const folder = match[3]
         const format = match[4]
-        let apiUrl =
-          'http://sourceforge.net/projects/' +
-          project +
-          '/files/' +
-          folder +
-          '/stats/json'
+        let apiUrl = `http://sourceforge.net/projects/${project}/files/${folder}/stats/json`
         const badgeData = getBadgeData('sourceforge', data)
         let timePeriod, startDate
         badgeData.text[0] = getLabel('downloads', data)
@@ -84,11 +79,9 @@ module.exports = class Sourceforge extends LegacyService {
             timePeriod = ''
             break
         }
-        apiUrl +=
-          '?start_date=' +
-          startDate.format('YYYY-MM-DD') +
-          '&end_date=' +
-          endDate.format('YYYY-MM-DD')
+        apiUrl += `?start_date=${startDate.format(
+          'YYYY-MM-DD'
+        )}&end_date=${endDate.format('YYYY-MM-DD')}`
         request(apiUrl, (err, res, buffer) => {
           if (err != null) {
             badgeData.text[1] = 'inaccessible'
diff --git a/services/sourcegraph/sourcegraph.service.js b/services/sourcegraph/sourcegraph.service.js
index 20eac25283e6048d54490aa8e9eef2996925284d..e1b95e75ffb85671fa959e28a2c22f974705c83f 100644
--- a/services/sourcegraph/sourcegraph.service.js
+++ b/services/sourcegraph/sourcegraph.service.js
@@ -29,8 +29,7 @@ module.exports = class Sourcegraph extends LegacyService {
       cache((data, match, sendBadge, request) => {
         const repo = match[1]
         const format = match[2]
-        const apiUrl =
-          'https://sourcegraph.com/.api/repos/' + repo + '/-/shield'
+        const apiUrl = `https://sourcegraph.com/.api/repos/${repo}/-/shield`
         const badgeData = getBadgeData('used by', data)
         request(apiUrl, (err, res, buffer) => {
           if (err != null) {
diff --git a/services/stackexchange/stackexchange.service.js b/services/stackexchange/stackexchange.service.js
index b7b8dace010770cd7995040f04a245a3d766dc81..25a28d20473ed0c6943160316f26cdbc1c98ca51 100644
--- a/services/stackexchange/stackexchange.service.js
+++ b/services/stackexchange/stackexchange.service.js
@@ -19,13 +19,13 @@ module.exports = class StackExchange extends LegacyService {
         const format = match[4]
         let path
         if (info === 'r') {
-          path = 'users/' + item
+          path = `users/${item}`
         } else if (info === 't') {
-          path = 'tags/' + item + '/info'
+          path = `tags/${item}/info`
         }
         const options = {
           method: 'GET',
-          uri: 'https://api.stackexchange.com/2.2/' + path + '?site=' + site,
+          uri: `https://api.stackexchange.com/2.2/${path}?site=${site}`,
           gzip: true,
         }
         const badgeData = getBadgeData(site, data)
@@ -45,7 +45,7 @@ module.exports = class StackExchange extends LegacyService {
 
             if (info === 'r') {
               const reputation = parsedData.items[0].reputation
-              badgeData.text[0] = getLabel(site + ' reputation', data)
+              badgeData.text[0] = getLabel(`${site} reputation`, data)
               badgeData.text[1] = metric(reputation)
               badgeData.colorscheme = floorCountColor(1000, 10000, 20000)
             } else if (info === 't') {
diff --git a/services/suggest/suggest.tester.js b/services/suggest/suggest.tester.js
index fbac8b593718a3a4a3ed2eaebae6895335236afa..71d2177168c406dc09e8e0ba3b92f06e2aaed500 100644
--- a/services/suggest/suggest.tester.js
+++ b/services/suggest/suggest.tester.js
@@ -14,7 +14,7 @@ const t = new ServiceTester({
 module.exports = t
 
 t.create('issues, forks, stars and twitter')
-  .get('/v1?url=' + encodeURIComponent('https://github.com/atom/atom'))
+  .get(`/v1?url=${encodeURIComponent('https://github.com/atom/atom')}`)
   // suggest resource requires this header value
   .expectJSON('badges.?', {
     name: 'GitHub issues',
@@ -40,7 +40,7 @@ t.create('issues, forks, stars and twitter')
   })
 
 t.create('license')
-  .get('/v1?url=' + encodeURIComponent('https://github.com/atom/atom'))
+  .get(`/v1?url=${encodeURIComponent('https://github.com/atom/atom')}`)
   .expectJSON('badges.?', {
     name: 'GitHub license',
     link: 'https://github.com/atom/atom/blob/master/LICENSE.md',
@@ -48,7 +48,7 @@ t.create('license')
   })
 
 t.create('license for non-existing project')
-  .get('/v1?url=' + encodeURIComponent('https://github.com/atom/atom'))
+  .get(`/v1?url=${encodeURIComponent('https://github.com/atom/atom')}`)
   .intercept(nock =>
     nock('https://api.github.com')
       .get(/\/repos\/atom\/atom\/license/)
@@ -61,7 +61,7 @@ t.create('license for non-existing project')
   })
 
 t.create('license when json response is invalid')
-  .get('/v1?url=' + encodeURIComponent('https://github.com/atom/atom'))
+  .get(`/v1?url=${encodeURIComponent('https://github.com/atom/atom')}`)
   .intercept(nock =>
     nock('https://api.github.com')
       .get(/\/repos\/atom\/atom\/license/)
@@ -74,7 +74,7 @@ t.create('license when json response is invalid')
   })
 
 t.create('license when html_url not found in GitHub api response')
-  .get('/v1?url=' + encodeURIComponent('https://github.com/atom/atom'))
+  .get(`/v1?url=${encodeURIComponent('https://github.com/atom/atom')}`)
   .intercept(nock =>
     nock('https://api.github.com')
       .get(/\/repos\/atom\/atom\/license/)
diff --git a/services/teamcity/teamcity-build.service.js b/services/teamcity/teamcity-build.service.js
index 044f5d0e10d53c8f75977725789fd382d3f89b8a..5fff43b7e06836a08f254465e550b0e217456228 100644
--- a/services/teamcity/teamcity-build.service.js
+++ b/services/teamcity/teamcity-build.service.js
@@ -12,7 +12,7 @@ function teamcityBadge(
   sendBadge,
   request
 ) {
-  const apiUrl = url + '/app/rest/builds/buildType:(id:' + buildId + ')?guest=1'
+  const apiUrl = `${url}/app/rest/builds/buildType:(id:${buildId})?guest=1`
   const badgeData = getBadgeData('build', data)
   request(
     apiUrl,
@@ -104,7 +104,7 @@ module.exports = class TeamcityBuild extends LegacyService {
         const buildType = match[4] // eg, `bt428`.
         const format = match[5]
         teamcityBadge(
-          scheme + '://' + serverUrl,
+          `${scheme}://${serverUrl}`,
           buildType,
           advanced,
           format,
diff --git a/services/teamcity/teamcity-coverage.service.js b/services/teamcity/teamcity-coverage.service.js
index f9220da5cf3de6aef1fd98e55ae9d40349ab74d5..9cc22b5acfc3e437effebda5f27f56d6895b3415 100644
--- a/services/teamcity/teamcity-coverage.service.js
+++ b/services/teamcity/teamcity-coverage.service.js
@@ -33,10 +33,7 @@ module.exports = class TeamcityCoverage extends LegacyService {
       cache((data, match, sendBadge, request) => {
         const buildType = match[1] // eg, `bt428`.
         const format = match[2]
-        const apiUrl =
-          'http://teamcity.codebetter.com/app/rest/builds/buildType:(id:' +
-          buildType +
-          ')/statistics?guest=1'
+        const apiUrl = `http://teamcity.codebetter.com/app/rest/builds/buildType:(id:${buildType})/statistics?guest=1`
         const badgeData = getBadgeData('coverage', data)
         request(
           apiUrl,
@@ -67,7 +64,7 @@ module.exports = class TeamcityCoverage extends LegacyService {
               }
 
               const percentage = (covered / total) * 100
-              badgeData.text[1] = percentage.toFixed(0) + '%'
+              badgeData.text[1] = `${percentage.toFixed(0)}%`
               badgeData.colorscheme = coveragePercentageColor(percentage)
               sendBadge(format, badgeData)
             } catch (e) {
diff --git a/services/travis/travis-build.service.js b/services/travis/travis-build.service.js
index 828471b03d8035e443a78b7966505b2b8015440b..9eeff263cbaad85fe5a75a01f7a38e757abd89fc 100644
--- a/services/travis/travis-build.service.js
+++ b/services/travis/travis-build.service.js
@@ -65,13 +65,10 @@ module.exports = class TravisBuild extends LegacyService {
         request(options, (err, res) => {
           if (err != null) {
             log.error(
-              'Travis error: data:' +
-                JSON.stringify(data) +
-                '\nStack: ' +
-                err.stack
+              `Travis error: data:${JSON.stringify(data)}\nStack: ${err.stack}`
             )
             if (res) {
-              log.error('' + res)
+              log.error(`${res}`)
             }
           }
           if (checkErrorResponse(badgeData, err, res)) {
diff --git a/services/travis/travis-php-version.service.js b/services/travis/travis-php-version.service.js
index 0f8f66007081ff6e53dc76541fa6aaf461c789b4..57b1795e5fc2545aabe2ace40e7aaf8131e1c8ba 100644
--- a/services/travis/travis-php-version.service.js
+++ b/services/travis/travis-php-version.service.js
@@ -47,7 +47,7 @@ module.exports = class TravisPhpVersion extends LegacyService {
               if (err !== null) {
                 log.error(`Travis CI error: ${err.stack}`)
                 if (res) {
-                  log.error('' + res)
+                  log.error(`${res}`)
                 }
                 badgeData.text[1] = 'invalid'
                 sendBadge(format, badgeData)
diff --git a/services/twitter/twitter.service.js b/services/twitter/twitter.service.js
index a19593e4f81ffe6229894b0f4f9e219ec297ec20..6680dd31d626a84863e0cd6b724bc1f7eb0764d0 100644
--- a/services/twitter/twitter.service.js
+++ b/services/twitter/twitter.service.js
@@ -35,15 +35,15 @@ class TwitterUrl extends LegacyService {
         const scheme = match[1] // eg, https
         const path = match[2] // eg, shields.io
         const format = match[3]
-        const page = encodeURIComponent(scheme + '://' + path)
+        const page = encodeURIComponent(`${scheme}://${path}`)
         // The URL API died: #568.
         //var url = 'http://cdn.api.twitter.com/1/urls/count.json?url=' + page;
         const badgeData = getBadgeData('tweet', data)
         if (badgeData.template === 'social') {
           badgeData.logo = getLogo('twitter', data)
           badgeData.links = [
-            'https://twitter.com/intent/tweet?text=Wow:&url=' + page,
-            'https://twitter.com/search?q=' + page,
+            `https://twitter.com/intent/tweet?text=Wow:&url=${page}`,
+            `https://twitter.com/search?q=${page}`,
           ]
         }
         badgeData.text[1] = ''
@@ -83,11 +83,9 @@ class TwitterFollow extends LegacyService {
         const user = match[1] // eg, shields_io
         const format = match[2]
         const options = {
-          url:
-            'http://cdn.syndication.twimg.com/widgets/followbutton/info.json?screen_names=' +
-            user,
+          url: `http://cdn.syndication.twimg.com/widgets/followbutton/info.json?screen_names=${user}`,
         }
-        const badgeData = getBadgeData('follow @' + user, data)
+        const badgeData = getBadgeData(`follow @${user}`, data)
 
         badgeData.colorscheme = null
         badgeData.colorB = '#55ACEE'
@@ -95,8 +93,8 @@ class TwitterFollow extends LegacyService {
           badgeData.logo = getLogo('twitter', data)
         }
         badgeData.links = [
-          'https://twitter.com/intent/follow?screen_name=' + user,
-          'https://twitter.com/' + user + '/followers',
+          `https://twitter.com/intent/follow?screen_name=${user}`,
+          `https://twitter.com/${user}/followers`,
         ]
         badgeData.text[1] = ''
         request(options, (err, res, buffer) => {
diff --git a/services/vaadin-directory/vaadin-directory.service.js b/services/vaadin-directory/vaadin-directory.service.js
index cf344f56d84515d1d36fc49cc8a6c4f9d24252a7..7b08172e8e75e544567f13366614ecdf583db254 100644
--- a/services/vaadin-directory/vaadin-directory.service.js
+++ b/services/vaadin-directory/vaadin-directory.service.js
@@ -21,9 +21,7 @@ module.exports = class VaadinDirectory extends LegacyService {
         const urlIdentifier = match[2] // Name of repository
         const format = match[3] // Format
         // API URL which contains also authentication info
-        const apiUrl =
-          'https://vaadin.com/vaadincom/directory-service/components/search/findByUrlIdentifier?projection=summary&urlIdentifier=' +
-          urlIdentifier
+        const apiUrl = `https://vaadin.com/vaadincom/directory-service/components/search/findByUrlIdentifier?projection=summary&urlIdentifier=${urlIdentifier}`
 
         // Set left-side text to 'Vaadin-Directory' by default
         const badgeData = getBadgeData('vaadin directory', data)
@@ -63,7 +61,7 @@ module.exports = class VaadinDirectory extends LegacyService {
               case 'rating': // rating
                 badgeData.text[0] = getLabel('rating', data)
                 if (!isNaN(rating)) {
-                  badgeData.text[1] = rating + '/5'
+                  badgeData.text[1] = `${rating}/5`
                   badgeData.colorscheme = floorCountColor(rating, 2, 3, 4)
                 }
                 break
@@ -71,7 +69,7 @@ module.exports = class VaadinDirectory extends LegacyService {
               case 'rating-count':
                 badgeData.text[0] = getLabel('rating count', data)
                 if (ratingCount && ratingCount !== 0) {
-                  badgeData.text[1] = metric(data.ratingCount) + ' total'
+                  badgeData.text[1] = `${metric(data.ratingCount)} total`
                   badgeData.colorscheme = floorCountColor(
                     data.ratingCount,
                     5,
diff --git a/services/vscode-marketplace/vscode-marketplace.service.js b/services/vscode-marketplace/vscode-marketplace.service.js
index 31ad5110014f7597703554312ac42dfe4f44aa67..61302e16082acc7e4021ac4974ed3a3f5517c76b 100644
--- a/services/vscode-marketplace/vscode-marketplace.service.js
+++ b/services/vscode-marketplace/vscode-marketplace.service.js
@@ -83,7 +83,7 @@ module.exports = class VscodeMarketplace extends LegacyService {
                   'averagerating'
                 ).toFixed(2)
                 const totalrate = getVscodeStatistic(buffer, 'ratingcount')
-                badgeData.text[1] = rate + '/5 (' + totalrate + ')'
+                badgeData.text[1] = `${rate}/5 (${totalrate})`
                 badgeData.colorscheme = floorCountColor(rate, 2, 3, 4)
                 break
               }
diff --git a/services/waffle/waffle.service.js b/services/waffle/waffle.service.js
index 4996542c1f1a65dd5ae52e305d2ae095e86e6863..db3eb1c4a64b0da2a912f7dfd0a6aaccd844d493 100644
--- a/services/waffle/waffle.service.js
+++ b/services/waffle/waffle.service.js
@@ -63,7 +63,7 @@ module.exports = class Waffle extends LegacyService {
               }
             }
             badgeData.text[0] = getLabel(ghLabel, data)
-            badgeData.text[1] = '' + count
+            badgeData.text[1] = `${count}`
             badgeData.colorscheme = null
             badgeData.colorB = makeColorB(color, data)
             sendBadge(format, badgeData)
diff --git a/services/website/website.service.js b/services/website/website.service.js
index b2ec5131e2b25fe03967436db81303c42bf6de26..7be5035710543acc66265c6fc362fbc868ea840e 100644
--- a/services/website/website.service.js
+++ b/services/website/website.service.js
@@ -110,7 +110,7 @@ module.exports = class Website extends LegacyService {
         const userProtocol = match[11]
         const userURI = match[12]
         const format = match[13]
-        const withProtocolURI = userProtocol + '://' + userURI
+        const withProtocolURI = `${userProtocol}://${userURI}`
         const options = {
           method: 'HEAD',
           uri: withProtocolURI,
diff --git a/services/wheelmap/wheelmap.service.js b/services/wheelmap/wheelmap.service.js
index e6f25361ff205ee688f365791f117be6a3729d9f..82937b45ae18beb9b0e065941c54160d0cda1484 100644
--- a/services/wheelmap/wheelmap.service.js
+++ b/services/wheelmap/wheelmap.service.js
@@ -32,7 +32,7 @@ module.exports = class Wheelmap extends LegacyService {
         const options = {
           method: 'GET',
           json: true,
-          uri: 'http://wheelmap.org/nodes/' + nodeId + '.json',
+          uri: `http://wheelmap.org/nodes/${nodeId}.json`,
         }
         const badgeData = getBadgeData('wheelmap', data)
         // eslint-disable-next-line handle-callback-err