diff --git a/.gitignore b/.gitignore
index 1fc83e08b8055b8ace980ae5315de6518f1e5bcf..59338092c39143201cbd8a4861ad2333d073cb6a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
 node_modules
 demo/dist
-.idea
\ No newline at end of file
+.idea
+yarn-error.log
\ No newline at end of file
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 892ef33779e6a216f3734aa8ce94ec7af618d2f9..8b05f0beeb1fd86c8a8cfe53160874312a5a1f79 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -23,8 +23,8 @@ publish:
       - publish
       - master
   script:
-    - sudo npm install --global can-npm-publish
-    - yarn config set registry https://registry.npmjs.org/
+    - echo '//registry.npmjs.org/:_authToken=${NPM_TOKEN}' > ~/.npmrc
     - yarn config set cache-folder "$CI_PROJECT_DIR/_yarn_cache"
     - yarn install
+    - yarn run build
     - yarn run publish
diff --git a/.npmrc b/.npmrc
deleted file mode 100644
index bd3327ab5a9da7959388dab26528073f912af07e..0000000000000000000000000000000000000000
--- a/.npmrc
+++ /dev/null
@@ -1 +0,0 @@
-//registry.npmjs.org/:_authToken=${NPM_TOKEN}
\ No newline at end of file
diff --git a/demo/.cert/server.cert b/demo/.cert/server.cert
deleted file mode 100644
index 604700d2920015a4483f02d17bf94a0f0c8788f3..0000000000000000000000000000000000000000
--- a/demo/.cert/server.cert
+++ /dev/null
@@ -1,13 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIB+zCCAWSgAwIBAgIJK4ZWtXTSz2GzMA0GCSqGSIb3DQEBCwUAMBwxGjAYBgNV
-BAMTEWRicC1kZXYubG9jYWxob3N0MB4XDTIwMTAyODE0MzAxNVoXDTQ4MDMxNDE0
-MzAxNVowHDEaMBgGA1UEAxMRZGJwLWRldi5sb2NhbGhvc3QwgZ8wDQYJKoZIhvcN
-AQEBBQADgY0AMIGJAoGBAL7Eb+sioAPQxMfHAVY7pzkeMPMsf3oKA9BepNjIXv2z
-FkWMwpH/+UoKyYwYG0lE+aTS26nUgVVXQMtWReUEBKtxFVzQpcbqNy22vS88Jigs
-zIuricui2o9nK46hlVMXI5yDz2lIElFTifxYqrjrpVki+khILldYmlRyoTowrraX
-AgMBAAGjRTBDMAwGA1UdEwQFMAMBAf8wCwYDVR0PBAQDAgL0MCYGA1UdEQQfMB2G
-G2h0dHA6Ly9leGFtcGxlLm9yZy93ZWJpZCNtZTANBgkqhkiG9w0BAQsFAAOBgQCB
-YmWmKGradZOEndfQi/GELG3yqWdxy8wXPHm86V1unvMEkaYaj3svRyYjwob5YaJ5
-GBboxWfYTo1YlzqK37RgythSCylmeEjpMr/dx8o+XdtTnSASNPoGvh5XGReWZKbw
-Z82efBk4FFmIgDFtcZJ/QD7XfAATH5O7o+NS+VPmtg==
------END CERTIFICATE-----
diff --git a/demo/.cert/server.key b/demo/.cert/server.key
deleted file mode 100644
index 7d88400409cf90c59264d0c270a52747ca0ee6b5..0000000000000000000000000000000000000000
--- a/demo/.cert/server.key
+++ /dev/null
@@ -1,15 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXQIBAAKBgQC+xG/rIqAD0MTHxwFWO6c5HjDzLH96CgPQXqTYyF79sxZFjMKR
-//lKCsmMGBtJRPmk0tup1IFVV0DLVkXlBASrcRVc0KXG6jcttr0vPCYoLMyLq4nL
-otqPZyuOoZVTFyOcg89pSBJRU4n8WKq466VZIvpISC5XWJpUcqE6MK62lwIDAQAB
-AoGBAJ1BQSELwexjRFOK8MctFYQ4JxHONKddahdybWFmiyeHYWyjxCCmadFnYw1h
-Md0MRt5gE0PEMXkwG/GChMtsrItaj9XEK41vlxo0V80kj/QhAUnX00T1RpajX4mI
-pm99ioR8KHyL3akPm5pvUrb+Wl3SvoLvxwfQn2sz5OInrrTBAkEA4p4n3USNqXHa
-NMQmbiGjDPp1qGyOpZkJsIjuIUnyZTSQ8Uxj8vDhkrWmqBUwjLchEXZabkugMsWp
-Y8i6Yer4bQJBANeAV2QdePaZYY4+7oNZvIFCW/L6h11DSRZm+QSY5q9O+8U/nXqc
-uz4/m5SLfqk50+0j1zCJU+dIzbDxyzmgUJMCQQDIzgvU7WH5u4D3MLg87mFkpqqL
-S2Y7JpiHbU5VAQlg1Gt65Y3LP9ciAQRj/CLBDaSnrJAFG84gLzYhzUQab/MhAkBZ
-4/4QE78mVfp8hEGnZqIb5NtH8jrOq0dsYc2TnlfzXmXk9FEzGPd90riJ8NoHqsh8
-zYtwgogOHK84FNPpmLajAkAKbxZk94jR7Rehyzr8n/ptsILJJeyiDoixXrTMerIS
-H/Dvgoby1xgpIwYL99HzxtS9HjL+kSZq4cTY7uGVXbsk
------END RSA PRIVATE KEY-----
diff --git a/demo/.gitignore b/demo/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..625208dfb79a31a5b8017b8621f0a9f06622e0e9
--- /dev/null
+++ b/demo/.gitignore
@@ -0,0 +1 @@
+.cert
\ No newline at end of file
diff --git a/demo/yarn.lock b/demo/yarn.lock
index 59bd9938440edfa534e4283b0d924818bfb69077..c934d7545ebbfa0d41baa7a7d7de7bd35d51773d 100644
--- a/demo/yarn.lock
+++ b/demo/yarn.lock
@@ -3272,13 +3272,20 @@ i18next-scanner@^3.0.0:
     vinyl "^2.2.0"
     vinyl-fs "^3.0.1"
 
-i18next@*, i18next@^19.5.1, i18next@^19.8.3:
+i18next@*, i18next@^19.5.1:
   version "19.8.3"
   resolved "https://registry.yarnpkg.com/i18next/-/i18next-19.8.3.tgz#10df7222db8c23389b13bceb9ba67a5e20a0241e"
   integrity sha512-eVrqAw2gGGYYJaJMYw4VM1FNFawLD4b84IsoTZMVXeWHaxAM2gyTa34j2Sip15UkBz/LrSxdFJj0Jhlrz7EvHA==
   dependencies:
     "@babel/runtime" "^7.12.0"
 
+i18next@^19.8.4:
+  version "19.8.4"
+  resolved "https://registry.yarnpkg.com/i18next/-/i18next-19.8.4.tgz#447718f2a26319b8debdbcc6fbc1a9761be7316b"
+  integrity sha512-FfVPNWv+felJObeZ6DSXZkj9QM1Ivvh7NcFCgA8XPtJWHz0iXVa9BUy+QY8EPrCLE+vWgDfV/sc96BgXVo6HAA==
+  dependencies:
+    "@babel/runtime" "^7.12.0"
+
 iconv-lite@0.4.24, iconv-lite@^0.4.4:
   version "0.4.24"
   resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@@ -5483,13 +5490,20 @@ rollup@^0.34.7:
   dependencies:
     source-map-support "^0.4.0"
 
-rollup@^2.18.0, rollup@^2.18.1, rollup@^2.19.0:
+rollup@^2.18.1:
   version "2.33.2"
   resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.33.2.tgz#c4c76cd405a7605e6ebe90976398c46d4c2ea166"
   integrity sha512-QPQ6/fWCrzHtSXkI269rhKaC7qXGghYBwXU04b1JsDZ6ibZa3DJ9D1SFAYRMgx1inDg0DaTbb3N4Z1NK/r3fhw==
   optionalDependencies:
     fsevents "~2.1.2"
 
+rollup@^2.33.3:
+  version "2.34.0"
+  resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.34.0.tgz#ecc7f1d4ce2cb88bb51bec2f56b984f3c35b8271"
+  integrity sha512-dW5iLvttZzdVehjEuNJ1bWvuMEJjOWGmnuFS82WeKHTGXDkRHQeq/ExdifkSyJv9dLcR86ysKRmrIDyR6O0X8g==
+  optionalDependencies:
+    fsevents "~2.1.2"
+
 run-parallel@^1.1.9:
   version "1.1.10"
   resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef"
diff --git a/package.json b/package.json
index 8ed75b7d61659c2b5f40ca53a71fc3ecb58ca994..45f7a0360f25116d1ee38dee3e0784eec37187b6 100644
--- a/package.json
+++ b/package.json
@@ -9,7 +9,8 @@
   ],
   "scripts": {
     "test": "lerna run test",
-    "publish": "lerna run publish"
+    "build": "lerna run build",
+    "publish": "lerna publish from-package --yes"
   },
   "author": "",
   "license": "LGPL-2.1-or-later",
diff --git a/packages/app-shell/.npmrc b/packages/app-shell/.npmrc
deleted file mode 100644
index bd3327ab5a9da7959388dab26528073f912af07e..0000000000000000000000000000000000000000
--- a/packages/app-shell/.npmrc
+++ /dev/null
@@ -1 +0,0 @@
-//registry.npmjs.org/:_authToken=${NPM_TOKEN}
\ No newline at end of file
diff --git a/packages/app-shell/package.json b/packages/app-shell/package.json
index eb22be76b96955bf21efc4245345ac45523b65d9..8cfef7a46774129c1b01076f836f597f6522d31b 100644
--- a/packages/app-shell/package.json
+++ b/packages/app-shell/package.json
@@ -4,6 +4,10 @@
   "version": "0.1.4",
   "main": "src/index.js",
   "license": "LGPL-2.1-or-later",
+  "publishConfig": {
+    "registry": "https://registry.npmjs.org",
+    "access": "public"
+  },
   "devDependencies": {
     "@rollup/plugin-commonjs": "^16.0.0",
     "@rollup/plugin-json": "^4.1.0",
@@ -45,7 +49,6 @@
     "watch": "npm run watch-local",
     "watch-local": "rollup -c --watch",
     "test": "npm run build-test && karma start --singleRun",
-    "publish": "can-npm-publish --verbose 2>&1 && npm run build && npm publish --access public 2>&1 || true",
     "lint": "eslint ."
   }
 }
diff --git a/packages/app-shell/src/app-shell.js b/packages/app-shell/src/app-shell.js
index 30fa1c45641b9320b5887a50444c0a5d3a3e6785..dc92fd04f7475ae0f0c499e72e39bed105b78ea7 100644
--- a/packages/app-shell/src/app-shell.js
+++ b/packages/app-shell/src/app-shell.js
@@ -56,6 +56,7 @@ export class AppShell extends ScopedElementsMixin(LitElement) {
         this.basePath = '/';
         this.keycloakConfig = null;
         this.noWelcomePage = false;
+        this.menuHeight = -1;
 
         this._updateAuth = this._updateAuth.bind(this);
         this._loginStatus = 'unknown';
@@ -363,7 +364,6 @@ export class AppShell extends ScopedElementsMixin(LitElement) {
             this.updatePageTitle();
             this.subtitle = this.activeMetaDataText("short_name");
             this.description = this.activeMetaDataText("description");
-           
         };
 
         // If it is empty assume the element is already registered through other means
@@ -399,13 +399,31 @@ export class AppShell extends ScopedElementsMixin(LitElement) {
 
     toggleMenu() {
         const menu = this.shadowRoot.querySelector("ul.menu");
+        const subtitle = this.shadowRoot.querySelector("h2.subtitle");
 
-        if (menu === null) {
+        if (menu === null || subtitle === null) {
             return;
         }
 
         menu.classList.toggle('hidden');
 
+        if (this.menuHeight === -1) {
+            this.menuHeight = menu.clientHeight;
+        }
+
+        let topValue = subtitle.getBoundingClientRect().bottom;
+        let isMenuOverflow = this.menuHeight + topValue >= window.innerHeight ? true : false;
+        
+        if (isMenuOverflow && !menu.classList.contains('hidden')) {
+            menu.setAttribute('style', 'position: fixed;top: ' + topValue + 'px;bottom: 0;border-bottom: 0;overflow-y: auto;');
+            menu.scrollTop = 0;
+            document.body.setAttribute('style', 'overflow:hidden;');
+        
+        } else if (isMenuOverflow && menu.classList.contains('hidden')) {
+            document.body.removeAttribute('style', 'overflow:hidden;');
+            menu.removeAttribute('style');
+        }
+
         const chevron = this.shadowRoot.querySelector("#menu-chevron-icon");
         if (chevron !== null) {
             chevron.name = menu.classList.contains('hidden') ? 'chevron-down' : 'chevron-up';
@@ -635,8 +653,6 @@ export class AppShell extends ScopedElementsMixin(LitElement) {
                     position: absolute;
                     background-color: white;
                     z-index: 10;
-                    overflow-y: scroll;
-                    white-space: nowrap;
                 }
 
                 .menu li {
diff --git a/packages/auth/.npmignore b/packages/auth/.npmignore
new file mode 100644
index 0000000000000000000000000000000000000000..bd8138ceb1b9d6026edec0d20ac4be9940d5cf73
--- /dev/null
+++ b/packages/auth/.npmignore
@@ -0,0 +1,5 @@
+node_modules
+.idea
+npm-debug.log
+package-lock.json
+index.html
diff --git a/packages/auth/.npmrc b/packages/auth/.npmrc
deleted file mode 100644
index bd3327ab5a9da7959388dab26528073f912af07e..0000000000000000000000000000000000000000
--- a/packages/auth/.npmrc
+++ /dev/null
@@ -1 +0,0 @@
-//registry.npmjs.org/:_authToken=${NPM_TOKEN}
\ No newline at end of file
diff --git a/packages/auth/package.json b/packages/auth/package.json
index ed3a352ee50c55e19015536e875c876c18e3b4c6..3b6fa7f880a5372cd8895cfacf24325f80e2a69b 100644
--- a/packages/auth/package.json
+++ b/packages/auth/package.json
@@ -1,10 +1,13 @@
 {
   "name": "@dbp-toolkit/auth",
   "homepage": "https://gitlab.tugraz.at/dbp/web-components/toolkit/-/tree/master/packages/auth",
-  "version": "0.1.0",
+  "version": "0.1.1",
   "main": "src/index.js",
   "license": "LGPL-2.1-or-later",
-  "private": true,
+  "publishConfig": {
+    "registry": "https://registry.npmjs.org",
+    "access": "public"
+  },
   "devDependencies": {
     "@rollup/plugin-commonjs": "^16.0.0",
     "@rollup/plugin-json": "^4.1.0",
diff --git a/packages/check-in-place-select/.npmrc b/packages/check-in-place-select/.npmrc
deleted file mode 100644
index bd3327ab5a9da7959388dab26528073f912af07e..0000000000000000000000000000000000000000
--- a/packages/check-in-place-select/.npmrc
+++ /dev/null
@@ -1 +0,0 @@
-//registry.npmjs.org/:_authToken=${NPM_TOKEN}
\ No newline at end of file
diff --git a/packages/check-in-place-select/package.json b/packages/check-in-place-select/package.json
index 8c132cc59cabe6bb8fbb6fabd259e487cfd7ac31..23aa0a5e9aec6a588e5754b18b76ed5c726bca76 100644
--- a/packages/check-in-place-select/package.json
+++ b/packages/check-in-place-select/package.json
@@ -5,6 +5,10 @@
   "main": "src/index.js",
   "license": "LGPL-2.1-or-later",
   "private": true,
+  "publishConfig": {
+    "registry": "https://registry.npmjs.org",
+    "access": "public"
+  },
   "devDependencies": {
     "@rollup/plugin-commonjs": "^16.0.0",
     "@rollup/plugin-json": "^4.1.0",
@@ -45,7 +49,6 @@
     "watch": "npm run watch-local",
     "watch-local": "rollup -c --watch",
     "watch-dev": "rollup -c --watch --environment BUILD:development",
-    "test": "npm run build-test && karma start --singleRun",
-    "publish": "can-npm-publish --verbose 2>&1 && npm run build && npm publish --access public 2>&1 || true"
+    "test": "npm run build-test && karma start --singleRun"
   }
 }
diff --git a/packages/check-in-place-select/src/i18n/de/translation.json b/packages/check-in-place-select/src/i18n/de/translation.json
index 66cf68dc1d0904797a99c85a1387e5793abb92e1..5c44dae5318c21ac5b4bf9a25c0009d51e3284a7 100644
--- a/packages/check-in-place-select/src/i18n/de/translation.json
+++ b/packages/check-in-place-select/src/i18n/de/translation.json
@@ -1,6 +1,6 @@
 {
   "check-in-place-select": {
-    "placeholder": "Bitte wählen Sie einen Ort aus",
+    "placeholder": "Z.B. \"P1\", \"Rechbauerstraße\", \"PZ2EG048\"",
     "error-summary": "Ein Fehler ist aufgetreten",
     "login-required": "Anmeldung erforderlich"
   }
diff --git a/packages/check-in-place-select/src/i18n/en/translation.json b/packages/check-in-place-select/src/i18n/en/translation.json
index 1cbc14f66656221ce47672ed463f546eb479d164..1a525f6b174658879d83894f97a233302d7743f5 100644
--- a/packages/check-in-place-select/src/i18n/en/translation.json
+++ b/packages/check-in-place-select/src/i18n/en/translation.json
@@ -1,6 +1,6 @@
 {
   "check-in-place-select": {
-    "placeholder": "Please select a location",
+    "placeholder": "E.g. \"P1\", \"Rechbauerstraße\", \"PZ2EG048\"",
     "error-summary": "An error occurred",
     "login-required": "Login required"
   }
diff --git a/packages/common/.npmrc b/packages/common/.npmrc
deleted file mode 100644
index bd3327ab5a9da7959388dab26528073f912af07e..0000000000000000000000000000000000000000
--- a/packages/common/.npmrc
+++ /dev/null
@@ -1 +0,0 @@
-//registry.npmjs.org/:_authToken=${NPM_TOKEN}
\ No newline at end of file
diff --git a/packages/common/package.json b/packages/common/package.json
index 51ea708e214bf53f0a88aa3549e750c19e93464c..22069d6b5fc3c2458f7e17730995673e9f47af7e 100644
--- a/packages/common/package.json
+++ b/packages/common/package.json
@@ -29,8 +29,7 @@
     "build-test": "rollup -c --environment BUILD:test",
     "test": "npm run build-test && karma start --singleRun",
     "watch": "rollup -c --watch",
-    "lint": "eslint .",
-    "publish": "can-npm-publish --verbose 2>&1 && npm run build && npm publish --access public 2>&1 || true"
+    "lint": "eslint ."
   },
   "dependencies": {
     "@open-wc/scoped-elements": "^1.3.2",
diff --git a/packages/data-table-view/.npmrc b/packages/data-table-view/.npmrc
deleted file mode 100644
index bd3327ab5a9da7959388dab26528073f912af07e..0000000000000000000000000000000000000000
--- a/packages/data-table-view/.npmrc
+++ /dev/null
@@ -1 +0,0 @@
-//registry.npmjs.org/:_authToken=${NPM_TOKEN}
\ No newline at end of file
diff --git a/packages/data-table-view/package.json b/packages/data-table-view/package.json
index 94444997de4fa14d5a850bd74c02ff9c2c4a90ef..40c00e6248fa497e8e7f43b3f1bd8dbca80d55e1 100644
--- a/packages/data-table-view/package.json
+++ b/packages/data-table-view/package.json
@@ -5,6 +5,10 @@
   "main": "src/index.js",
   "license": "LGPL-2.1-or-later",
   "private": true,
+  "publishConfig": {
+    "registry": "https://registry.npmjs.org",
+    "access": "public"
+  },
   "devDependencies": {
     "@rollup/plugin-commonjs": "^16.0.0",
     "@rollup/plugin-json": "^4.1.0",
@@ -51,7 +55,6 @@
     "watch": "npm run watch-local",
     "watch-local": "rollup -c --watch",
     "watch-dev": "rollup -c --watch --environment BUILD:development",
-    "test": "npm run build-test && karma start --singleRun",
-    "publish": "can-npm-publish --verbose 2>&1 && npm run build && npm publish --access public 2>&1 || true"
+    "test": "npm run build-test && karma start --singleRun"
   }
 }
diff --git a/packages/file-handling/.npmrc b/packages/file-handling/.npmrc
deleted file mode 100644
index bd3327ab5a9da7959388dab26528073f912af07e..0000000000000000000000000000000000000000
--- a/packages/file-handling/.npmrc
+++ /dev/null
@@ -1 +0,0 @@
-//registry.npmjs.org/:_authToken=${NPM_TOKEN}
\ No newline at end of file
diff --git a/packages/file-handling/package.json b/packages/file-handling/package.json
index 1ff19c9cf45b0df6c98e80468fdb4a206022e060..18afa75811285c71cc7229988473039cd9dd6fab 100644
--- a/packages/file-handling/package.json
+++ b/packages/file-handling/package.json
@@ -4,6 +4,10 @@
   "version": "0.1.5",
   "main": "src/index.js",
   "license": "LGPL-2.1-or-later",
+  "publishConfig": {
+    "registry": "https://registry.npmjs.org",
+    "access": "public"
+  },
   "devDependencies": {
     "@rollup/plugin-commonjs": "^16.0.0",
     "@rollup/plugin-json": "^4.0.2",
@@ -46,7 +50,6 @@
     "watch": "npm run watch-local",
     "watch-local": "rollup -c --watch",
     "watch-dev": "rollup -c --watch --environment BUILD:development",
-    "test": "npm run build-test && karma start --singleRun",
-    "publish": "can-npm-publish --verbose 2>&1 && npm run build && npm publish --access public 2>&1 || true"
+    "test": "npm run build-test && karma start --singleRun"
   }
 }
diff --git a/packages/font-source-sans-pro/LICENSE.md b/packages/font-source-sans-pro/LICENSE.md
new file mode 100644
index 0000000000000000000000000000000000000000..1ed3d03323784bfb98b5848fc3eea82064b408a4
--- /dev/null
+++ b/packages/font-source-sans-pro/LICENSE.md
@@ -0,0 +1,2 @@
+The woff2 files are derived from https://github.com/adobe-fonts/source-sans-pro which
+is available under the "SIL Open Font License 1.1"
\ No newline at end of file
diff --git a/packages/font-source-sans-pro/README.md b/packages/font-source-sans-pro/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..7135312e735598b94706ac94624c37000d0b7a9a
--- /dev/null
+++ b/packages/font-source-sans-pro/README.md
@@ -0,0 +1,27 @@
+# Subsetted Version of Sans Source Pro 2
+
+## FAQ
+
+* Why?
+
+  We mostly use a light variant (300) of Source Sans Pro in our CI and any newer
+  version and any version not based on the OTF variant looks horrible on low DPI
+  screens on Windows and, to some extend, on Linux as well.
+
+* Why OTF and not TTF?
+
+  The TTF variant is hard to read on Windows with a low-DPI screen and a font
+  weight of 300, OTF looks good on the other hand.
+
+* Do I need to do this for every font?
+
+  https://github.com/fontsource/fontsource has nice subsetted npm packages for
+  various fonts. I'd try that first.
+
+  Also see https://markoskon.com/creating-font-subsets for a nice article on the
+  topic of subsetting.
+
+## Rebuilding the fonts
+
+* `poetry install`
+* `poetry run bash build.sh`
\ No newline at end of file
diff --git a/packages/font-source-sans-pro/build.sh b/packages/font-source-sans-pro/build.sh
new file mode 100755
index 0000000000000000000000000000000000000000..27b3afb980840d4761d63e7109abce21b12e5137
--- /dev/null
+++ b/packages/font-source-sans-pro/build.sh
@@ -0,0 +1,117 @@
+#!/bin/bash
+
+set -e
+
+# Subset taken from google fonts: https://fonts.googleapis.com/css?family=Source+Sans+Pro
+LATIN="U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD"
+LATIN_EXT="U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF"
+VIETNAMESE="U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB"
+GREEK="U+0370-03FF"
+GREEK_EXT="U+1F00-1FFF"
+CYRILLIC="U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116"
+CYRILLIC_EXT="U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F"
+EXT="$VIETNAMESE,$GREEK,$GREEK_EXT,$CYRILLIC,$CYRILLIC_EXT"
+
+
+function build() {
+    INPUT_NAME=$1
+    INPUT_FORMAT='otf'
+    STYLE=$2
+    WEIGHT=$3
+    BASE_DIR="source-sans-pro-2.045R-ro-1.095R-it"
+    CSS_FILE="files/$WEIGHT.css"
+
+    echo "$WEIGHT-$STYLE"
+
+    SUBSET="rest"
+    pyftsubset \
+    "$BASE_DIR/${INPUT_FORMAT^^}/SourceSansPro-$INPUT_NAME.${INPUT_FORMAT,,}" \
+    --output-file="files/source-sans-pro-$SUBSET-$WEIGHT-$STYLE.woff2" \
+    --flavor=woff2 \
+    --layout-features='*' \
+    --unicodes="$EXT"
+
+    echo "
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: $STYLE;
+    font-weight: $WEIGHT;
+    font-display: swap;
+    src: url(source-sans-pro-$SUBSET-$WEIGHT-$STYLE.woff2) format('woff2');
+    unicode-range: $EXT;
+}" >> "$CSS_FILE"
+
+    SUBSET="base-ext"
+    pyftsubset \
+    "$BASE_DIR/${INPUT_FORMAT^^}/SourceSansPro-$INPUT_NAME.${INPUT_FORMAT,,}" \
+    --output-file="files/source-sans-pro-$SUBSET-$WEIGHT-$STYLE.woff2" \
+    --flavor=woff2 \
+    --layout-features='*' \
+    --unicodes="$LATIN_EXT"
+
+    echo "
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: $STYLE;
+    font-weight: $WEIGHT;
+    font-display: swap;
+    src: url(source-sans-pro-$SUBSET-$WEIGHT-$STYLE.woff2) format('woff2');
+    unicode-range: $LATIN_EXT;
+}" >> "$CSS_FILE"
+
+    SUBSET="base"
+    pyftsubset \
+    "$BASE_DIR/${INPUT_FORMAT^^}/SourceSansPro-$INPUT_NAME.${INPUT_FORMAT,,}" \
+    --output-file="files/source-sans-pro-$SUBSET-$WEIGHT-$STYLE.woff2" \
+    --flavor=woff2 \
+    --layout-features='*' \
+    --unicodes="$LATIN"
+
+    echo "
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: $STYLE;
+    font-weight: $WEIGHT;
+    font-display: swap;
+    src: url(source-sans-pro-$SUBSET-$WEIGHT-$STYLE.woff2) format('woff2');
+    unicode-range: $LATIN;
+}" >> "$CSS_FILE"
+
+}
+
+function main() {
+    # Extract upstream release
+    RELEASE="source-sans-pro-2.045R-ro-1.095R-it"
+
+    [ -d "$RELEASE" ] || (
+        wget -c "https://github.com/adobe-fonts/source-sans-pro/releases/download/2.045R-ro%2F1.095R-it/$RELEASE.zip";
+        unzip "$RELEASE.zip"
+        rm "$RELEASE.zip")
+
+    BASE_DIR="$RELEASE"
+
+    rm -rf files
+    mkdir -p "files"
+
+    build "ExtraLight" "normal" "200"
+    build "ExtraLightIt" "italic" "200"
+
+    build "Light" "normal" "300"
+    build "LightIt" "italic" "300"
+
+    build "Regular" "normal" "400"
+    build "It" "italic" "400"
+
+    build "Semibold" "normal" "600"
+    build "SemiboldIt" "italic" "600"
+
+    build "Bold" "normal" "700"
+    build "BoldIt" "italic" "700"
+
+    build "Black" "normal" "900"
+    build "BlackIt" "italic" "900"
+
+    rm -rf "$RELEASE"
+}
+
+main;
\ No newline at end of file
diff --git a/packages/font-source-sans-pro/files/200.css b/packages/font-source-sans-pro/files/200.css
new file mode 100644
index 0000000000000000000000000000000000000000..7736b4836e343d97b4ad409664912060f3230734
--- /dev/null
+++ b/packages/font-source-sans-pro/files/200.css
@@ -0,0 +1,54 @@
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 200;
+    font-display: swap;
+    src: url(source-sans-pro-rest-200-normal.woff2) format('woff2');
+    unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB,U+0370-03FF,U+1F00-1FFF,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116,U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 200;
+    font-display: swap;
+    src: url(source-sans-pro-base-ext-200-normal.woff2) format('woff2');
+    unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 200;
+    font-display: swap;
+    src: url(source-sans-pro-base-200-normal.woff2) format('woff2');
+    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 200;
+    font-display: swap;
+    src: url(source-sans-pro-rest-200-italic.woff2) format('woff2');
+    unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB,U+0370-03FF,U+1F00-1FFF,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116,U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 200;
+    font-display: swap;
+    src: url(source-sans-pro-base-ext-200-italic.woff2) format('woff2');
+    unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 200;
+    font-display: swap;
+    src: url(source-sans-pro-base-200-italic.woff2) format('woff2');
+    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
+}
diff --git a/packages/font-source-sans-pro/files/300.css b/packages/font-source-sans-pro/files/300.css
new file mode 100644
index 0000000000000000000000000000000000000000..61cd9ab0e2f4b6c5f4ca3329fe968bf6116fc289
--- /dev/null
+++ b/packages/font-source-sans-pro/files/300.css
@@ -0,0 +1,54 @@
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 300;
+    font-display: swap;
+    src: url(source-sans-pro-rest-300-normal.woff2) format('woff2');
+    unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB,U+0370-03FF,U+1F00-1FFF,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116,U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 300;
+    font-display: swap;
+    src: url(source-sans-pro-base-ext-300-normal.woff2) format('woff2');
+    unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 300;
+    font-display: swap;
+    src: url(source-sans-pro-base-300-normal.woff2) format('woff2');
+    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 300;
+    font-display: swap;
+    src: url(source-sans-pro-rest-300-italic.woff2) format('woff2');
+    unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB,U+0370-03FF,U+1F00-1FFF,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116,U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 300;
+    font-display: swap;
+    src: url(source-sans-pro-base-ext-300-italic.woff2) format('woff2');
+    unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 300;
+    font-display: swap;
+    src: url(source-sans-pro-base-300-italic.woff2) format('woff2');
+    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
+}
diff --git a/packages/font-source-sans-pro/files/400.css b/packages/font-source-sans-pro/files/400.css
new file mode 100644
index 0000000000000000000000000000000000000000..6b42e507c5b95a1f296da42754ea7448a5f4db7d
--- /dev/null
+++ b/packages/font-source-sans-pro/files/400.css
@@ -0,0 +1,54 @@
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 400;
+    font-display: swap;
+    src: url(source-sans-pro-rest-400-normal.woff2) format('woff2');
+    unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB,U+0370-03FF,U+1F00-1FFF,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116,U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 400;
+    font-display: swap;
+    src: url(source-sans-pro-base-ext-400-normal.woff2) format('woff2');
+    unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 400;
+    font-display: swap;
+    src: url(source-sans-pro-base-400-normal.woff2) format('woff2');
+    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 400;
+    font-display: swap;
+    src: url(source-sans-pro-rest-400-italic.woff2) format('woff2');
+    unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB,U+0370-03FF,U+1F00-1FFF,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116,U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 400;
+    font-display: swap;
+    src: url(source-sans-pro-base-ext-400-italic.woff2) format('woff2');
+    unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 400;
+    font-display: swap;
+    src: url(source-sans-pro-base-400-italic.woff2) format('woff2');
+    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
+}
diff --git a/packages/font-source-sans-pro/files/600.css b/packages/font-source-sans-pro/files/600.css
new file mode 100644
index 0000000000000000000000000000000000000000..6b160609d8bf95737a3fa4823f5bd23f98817112
--- /dev/null
+++ b/packages/font-source-sans-pro/files/600.css
@@ -0,0 +1,54 @@
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 600;
+    font-display: swap;
+    src: url(source-sans-pro-rest-600-normal.woff2) format('woff2');
+    unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB,U+0370-03FF,U+1F00-1FFF,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116,U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 600;
+    font-display: swap;
+    src: url(source-sans-pro-base-ext-600-normal.woff2) format('woff2');
+    unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 600;
+    font-display: swap;
+    src: url(source-sans-pro-base-600-normal.woff2) format('woff2');
+    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 600;
+    font-display: swap;
+    src: url(source-sans-pro-rest-600-italic.woff2) format('woff2');
+    unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB,U+0370-03FF,U+1F00-1FFF,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116,U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 600;
+    font-display: swap;
+    src: url(source-sans-pro-base-ext-600-italic.woff2) format('woff2');
+    unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 600;
+    font-display: swap;
+    src: url(source-sans-pro-base-600-italic.woff2) format('woff2');
+    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
+}
diff --git a/packages/font-source-sans-pro/files/700.css b/packages/font-source-sans-pro/files/700.css
new file mode 100644
index 0000000000000000000000000000000000000000..215af84dc826dfa36e4a016646a1d1f669bade6e
--- /dev/null
+++ b/packages/font-source-sans-pro/files/700.css
@@ -0,0 +1,54 @@
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 700;
+    font-display: swap;
+    src: url(source-sans-pro-rest-700-normal.woff2) format('woff2');
+    unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB,U+0370-03FF,U+1F00-1FFF,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116,U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 700;
+    font-display: swap;
+    src: url(source-sans-pro-base-ext-700-normal.woff2) format('woff2');
+    unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 700;
+    font-display: swap;
+    src: url(source-sans-pro-base-700-normal.woff2) format('woff2');
+    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 700;
+    font-display: swap;
+    src: url(source-sans-pro-rest-700-italic.woff2) format('woff2');
+    unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB,U+0370-03FF,U+1F00-1FFF,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116,U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 700;
+    font-display: swap;
+    src: url(source-sans-pro-base-ext-700-italic.woff2) format('woff2');
+    unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 700;
+    font-display: swap;
+    src: url(source-sans-pro-base-700-italic.woff2) format('woff2');
+    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
+}
diff --git a/packages/font-source-sans-pro/files/900.css b/packages/font-source-sans-pro/files/900.css
new file mode 100644
index 0000000000000000000000000000000000000000..62f59a2b1b3e2b398287e53fc5c198e8b0513252
--- /dev/null
+++ b/packages/font-source-sans-pro/files/900.css
@@ -0,0 +1,54 @@
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 900;
+    font-display: swap;
+    src: url(source-sans-pro-rest-900-normal.woff2) format('woff2');
+    unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB,U+0370-03FF,U+1F00-1FFF,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116,U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 900;
+    font-display: swap;
+    src: url(source-sans-pro-base-ext-900-normal.woff2) format('woff2');
+    unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 900;
+    font-display: swap;
+    src: url(source-sans-pro-base-900-normal.woff2) format('woff2');
+    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 900;
+    font-display: swap;
+    src: url(source-sans-pro-rest-900-italic.woff2) format('woff2');
+    unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB,U+0370-03FF,U+1F00-1FFF,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116,U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 900;
+    font-display: swap;
+    src: url(source-sans-pro-base-ext-900-italic.woff2) format('woff2');
+    unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 900;
+    font-display: swap;
+    src: url(source-sans-pro-base-900-italic.woff2) format('woff2');
+    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
+}
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-base-200-italic.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-base-200-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..081661cbecbe16b2f7b4a10d3f071828295552e9
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-base-200-italic.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-base-200-normal.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-base-200-normal.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..7c21f417430c094748331b9c696cf5dabdb20ab4
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-base-200-normal.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-base-300-italic.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-base-300-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..f9d6808278a64ef2e5ec69a30eee03299eba8abb
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-base-300-italic.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-base-300-normal.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-base-300-normal.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..185478066880b85b2bcc4b5b24643f4afccc7471
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-base-300-normal.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-base-400-italic.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-base-400-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..85ebf9f9765a1bad499d051cc45927283ba8a2ad
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-base-400-italic.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-base-400-normal.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-base-400-normal.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..ae549d6f75c64f154dfd209804475eb7520c3042
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-base-400-normal.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-base-600-italic.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-base-600-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..c2faac432ae4342240a22a6203a9a01c9a47b8b9
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-base-600-italic.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-base-600-normal.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-base-600-normal.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..0fcb739bb1c2837de26e9b164f2f2dcce785ccd3
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-base-600-normal.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-base-700-italic.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-base-700-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..6533104ddfcd3fe4cc02d3b42335b24347f6ed52
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-base-700-italic.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-base-700-normal.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-base-700-normal.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..91638db6d2843b2e5716ce02fd83e9c547331d64
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-base-700-normal.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-base-900-italic.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-base-900-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..65ee3b4750f978c538a590a7551b1a5a633a7a90
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-base-900-italic.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-base-900-normal.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-base-900-normal.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..0d8b7ea818713a7e1fcc8cb2447e0912a974b996
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-base-900-normal.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-base-ext-200-italic.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-base-ext-200-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..d1b1755fb9ff60fc76370e2f8b9e6d0b32a13a33
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-base-ext-200-italic.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-base-ext-200-normal.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-base-ext-200-normal.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..ab14e46dc441217547b14aa1a93374d6d57a6315
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-base-ext-200-normal.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-base-ext-300-italic.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-base-ext-300-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..37121960a2af2947212a9a9ffcf52e2acb7f5217
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-base-ext-300-italic.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-base-ext-300-normal.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-base-ext-300-normal.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..b7785ad5eebe598913d4689f0f8c436d0e6986b4
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-base-ext-300-normal.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-base-ext-400-italic.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-base-ext-400-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..1c15c4025a8289e6d79129445d139f9688744706
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-base-ext-400-italic.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-base-ext-400-normal.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-base-ext-400-normal.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..9e9f7a755275d5d0d51e1d7a975bd235a92341e5
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-base-ext-400-normal.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-base-ext-600-italic.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-base-ext-600-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..133c8640740bcc491b162fcdc8884c0a1c3f4f10
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-base-ext-600-italic.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-base-ext-600-normal.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-base-ext-600-normal.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..5c448f09ed9662c430a51ccbd79066e2ff30e923
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-base-ext-600-normal.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-base-ext-700-italic.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-base-ext-700-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..e7e67d3084385590748d1807a00ee315b7073f8f
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-base-ext-700-italic.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-base-ext-700-normal.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-base-ext-700-normal.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..4055bfa3b6ad6aa459cefb0be6af1ad9324966c9
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-base-ext-700-normal.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-base-ext-900-italic.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-base-ext-900-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..08fbce16811ed20978380f2c1fea8050e4fcf36b
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-base-ext-900-italic.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-base-ext-900-normal.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-base-ext-900-normal.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..17eb4d25839fee315c1a918160e3c11ca0d70191
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-base-ext-900-normal.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-rest-200-italic.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-rest-200-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..b98af4ca555f72b0aa47affbb3dcbc0e0ec7dcb8
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-rest-200-italic.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-rest-200-normal.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-rest-200-normal.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..e56d4f615ae725920202328ec85119f4c783154b
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-rest-200-normal.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-rest-300-italic.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-rest-300-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..7cd0c5546f070a10540c9ede0b86e299be3ca4c0
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-rest-300-italic.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-rest-300-normal.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-rest-300-normal.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..928a6f5d75ba246884b5f26b2bc95ff8a797d7f1
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-rest-300-normal.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-rest-400-italic.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-rest-400-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..8614babc0a65529b08569b16f6afa941035230ea
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-rest-400-italic.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-rest-400-normal.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-rest-400-normal.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..dc43cf942f5b824bf41ef66e06d383d3b05bebd0
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-rest-400-normal.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-rest-600-italic.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-rest-600-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..dfc9447cdbec9379eb5aacb851edaa41df91414d
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-rest-600-italic.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-rest-600-normal.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-rest-600-normal.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..335d0ac4df16fa6d85277a8279f648d70ef9766e
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-rest-600-normal.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-rest-700-italic.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-rest-700-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..69d82db9fb468012216c333a8ca9796712951299
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-rest-700-italic.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-rest-700-normal.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-rest-700-normal.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..99a6e6ad32748ce23084110205c2a042640f159a
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-rest-700-normal.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-rest-900-italic.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-rest-900-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..516d48e726c60aeda01306d64ccdf6a1a0534514
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-rest-900-italic.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-pro-rest-900-normal.woff2 b/packages/font-source-sans-pro/files/source-sans-pro-rest-900-normal.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..a74453d1222ac89fb8d24fca7a091a2acb724d15
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-pro-rest-900-normal.woff2 differ
diff --git a/packages/font-source-sans-pro/index.html b/packages/font-source-sans-pro/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..75cdc2c59d6f80b126c564bafefc3d606321cd55
--- /dev/null
+++ b/packages/font-source-sans-pro/index.html
@@ -0,0 +1,39 @@
+<html>
+    <head>
+        <meta charset="UTF-8">
+        <style>
+            @import "files/200.css";
+            @import "files/300.css";
+            @import "files/400.css";
+            @import "files/600.css";
+            @import "files/700.css";
+            @import "files/900.css";
+
+            body {
+                font-family: "Source Sans Pro";
+            }
+
+            p {
+                margin: 2em;
+            }
+        </style>
+
+        <script type="module">
+            for (let weight of ['200', '300', '400', '600', '700', '900']) {
+                for (let style of ['normal', 'italic']) {
+                    let par = document.createElement("p");
+                    let text = document.createTextNode(`(${weight}, ${style})
+                        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
+                        eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
+                        ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
+                        aliquip ex ea commodo consequat.`);
+                    par.setAttribute('style', `font-weight: ${weight};font-style: ${style}`);
+                    par.appendChild(text);
+                    document.body.appendChild(par);
+                }
+            }
+        </script>
+    </head>
+    <body>
+    </body>
+</html>
\ No newline at end of file
diff --git a/packages/font-source-sans-pro/package.json b/packages/font-source-sans-pro/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..dfce5904aa6a83af4b86f6ab8ff429a1cca955a8
--- /dev/null
+++ b/packages/font-source-sans-pro/package.json
@@ -0,0 +1,10 @@
+{
+  "name": "@dbp-toolkit/font-source-sans-pro",
+  "version": "0.1.0",
+  "author": "",
+  "license": "OFL-1.1",
+  "publishConfig": {
+    "registry": "https://registry.npmjs.org",
+    "access": "public"
+  }
+}
diff --git a/packages/font-source-sans-pro/poetry.lock b/packages/font-source-sans-pro/poetry.lock
new file mode 100644
index 0000000000000000000000000000000000000000..395ff671e7e6864578dee68bd4d5b1ffa9efd960
--- /dev/null
+++ b/packages/font-source-sans-pro/poetry.lock
@@ -0,0 +1,71 @@
+[[package]]
+name = "brotli"
+version = "1.0.9"
+description = "Python bindings for the Brotli compression library"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "fonttools"
+version = "4.17.1"
+description = "Tools to manipulate font files"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.extras]
+all = ["fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "zopfli (>=0.1.4)", "lz4 (>=1.7.4.2)", "matplotlib", "sympy", "skia-pathops (>=0.5.0)", "brotli (>=1.0.1)", "scipy", "brotlipy (>=0.7.0)", "munkres", "unicodedata2 (>=13.0.0)", "xattr"]
+graphite = ["lz4 (>=1.7.4.2)"]
+interpolatable = ["scipy", "munkres"]
+lxml = ["lxml (>=4.0,<5)"]
+pathops = ["skia-pathops (>=0.5.0)"]
+plot = ["matplotlib"]
+symfont = ["sympy"]
+type1 = ["xattr"]
+ufo = ["fs (>=2.2.0,<3)"]
+unicode = ["unicodedata2 (>=13.0.0)"]
+woff = ["zopfli (>=0.1.4)", "brotli (>=1.0.1)", "brotlipy (>=0.7.0)"]
+
+[metadata]
+lock-version = "1.1"
+python-versions = "^3.8"
+content-hash = "4c33b9cd797fed9d6564ea705048d9ae212dbd938207b889310cae38740a4ed2"
+
+[metadata.files]
+brotli = [
+    {file = "Brotli-1.0.9-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:268fe94547ba25b58ebc724680609c8ee3e5a843202e9a381f6f9c5e8bdb5c70"},
+    {file = "Brotli-1.0.9-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:c2415d9d082152460f2bd4e382a1e85aed233abc92db5a3880da2257dc7daf7b"},
+    {file = "Brotli-1.0.9-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5913a1177fc36e30fcf6dc868ce23b0453952c78c04c266d3149b3d39e1410d6"},
+    {file = "Brotli-1.0.9-cp27-cp27m-win32.whl", hash = "sha256:afde17ae04d90fbe53afb628f7f2d4ca022797aa093e809de5c3cf276f61bbfa"},
+    {file = "Brotli-1.0.9-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7cb81373984cc0e4682f31bc3d6be9026006d96eecd07ea49aafb06897746452"},
+    {file = "Brotli-1.0.9-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:db844eb158a87ccab83e868a762ea8024ae27337fc7ddcbfcddd157f841fdfe7"},
+    {file = "Brotli-1.0.9-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:c83aa123d56f2e060644427a882a36b3c12db93727ad7a7b9efd7d7f3e9cc2c4"},
+    {file = "Brotli-1.0.9-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:6b2ae9f5f67f89aade1fab0f7fd8f2832501311c363a21579d02defa844d9296"},
+    {file = "Brotli-1.0.9-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:68715970f16b6e92c574c30747c95cf8cf62804569647386ff032195dc89a430"},
+    {file = "Brotli-1.0.9-cp35-cp35m-win32.whl", hash = "sha256:defed7ea5f218a9f2336301e6fd379f55c655bea65ba2476346340a0ce6f74a1"},
+    {file = "Brotli-1.0.9-cp35-cp35m-win_amd64.whl", hash = "sha256:88c63a1b55f352b02c6ffd24b15ead9fc0e8bf781dbe070213039324922a2eea"},
+    {file = "Brotli-1.0.9-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:503fa6af7da9f4b5780bb7e4cbe0c639b010f12be85d02c99452825dd0feef3f"},
+    {file = "Brotli-1.0.9-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:40d15c79f42e0a2c72892bf407979febd9cf91f36f495ffb333d1d04cebb34e4"},
+    {file = "Brotli-1.0.9-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:93130612b837103e15ac3f9cbacb4613f9e348b58b3aad53721d92e57f96d46a"},
+    {file = "Brotli-1.0.9-cp36-cp36m-win32.whl", hash = "sha256:61a7ee1f13ab913897dac7da44a73c6d44d48a4adff42a5701e3239791c96e14"},
+    {file = "Brotli-1.0.9-cp36-cp36m-win_amd64.whl", hash = "sha256:1c48472a6ba3b113452355b9af0a60da5c2ae60477f8feda8346f8fd48e3e87c"},
+    {file = "Brotli-1.0.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3b78a24b5fd13c03ee2b7b86290ed20efdc95da75a3557cc06811764d5ad1126"},
+    {file = "Brotli-1.0.9-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:9d12cf2851759b8de8ca5fde36a59c08210a97ffca0eb94c532ce7b17c6a3d1d"},
+    {file = "Brotli-1.0.9-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:6c772d6c0a79ac0f414a9f8947cc407e119b8598de7621f39cacadae3cf57d12"},
+    {file = "Brotli-1.0.9-cp37-cp37m-win32.whl", hash = "sha256:f909bbbc433048b499cb9db9e713b5d8d949e8c109a2a548502fb9aa8630f0b1"},
+    {file = "Brotli-1.0.9-cp37-cp37m-win_amd64.whl", hash = "sha256:97f715cf371b16ac88b8c19da00029804e20e25f30d80203417255d239f228b5"},
+    {file = "Brotli-1.0.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:160c78292e98d21e73a4cc7f76a234390e516afcd982fa17e1422f7c6a9ce9c8"},
+    {file = "Brotli-1.0.9-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b663f1e02de5d0573610756398e44c130add0eb9a3fc912a09665332942a2efb"},
+    {file = "Brotli-1.0.9-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5b6ef7d9f9c38292df3690fe3e302b5b530999fa90014853dcd0d6902fb59f26"},
+    {file = "Brotli-1.0.9-cp38-cp38-win32.whl", hash = "sha256:35a3edbe18e876e596553c4007a087f8bcfd538f19bc116917b3c7522fca0429"},
+    {file = "Brotli-1.0.9-cp38-cp38-win_amd64.whl", hash = "sha256:269a5743a393c65db46a7bb982644c67ecba4b8d91b392403ad8a861ba6f495f"},
+    {file = "Brotli-1.0.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5cb1e18167792d7d21e21365d7650b72d5081ed476123ff7b8cac7f45189c0c7"},
+    {file = "Brotli-1.0.9-cp39-cp39-manylinux1_i686.whl", hash = "sha256:16d528a45c2e1909c2798f27f7bf0a3feec1dc9e50948e738b961618e38b6a7b"},
+    {file = "Brotli-1.0.9-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:56d027eace784738457437df7331965473f2c0da2c70e1a1f6fdbae5402e0389"},
+    {file = "Brotli-1.0.9.zip", hash = "sha256:4d1b810aa0ed773f81dceda2cc7b403d01057458730e309856356d4ef4188438"},
+]
+fonttools = [
+    {file = "fonttools-4.17.1-py3-none-any.whl", hash = "sha256:b3f8132c13fa51c7d1a2b3006e2885d91f12674dd2d463f5357a97babdf37574"},
+    {file = "fonttools-4.17.1.zip", hash = "sha256:7097b194babc05c8decfff6cbc81b184221fdcfbda568630fe441c63dadb3ab4"},
+]
diff --git a/packages/font-source-sans-pro/pyproject.toml b/packages/font-source-sans-pro/pyproject.toml
new file mode 100644
index 0000000000000000000000000000000000000000..b922df846de4ccbb0fafdf97bbcd7668a4cf3942
--- /dev/null
+++ b/packages/font-source-sans-pro/pyproject.toml
@@ -0,0 +1,16 @@
+[tool.poetry]
+name = "fonts"
+version = "0.1.0"
+description = ""
+authors = ["Christoph Reiter <reiter.christoph@gmail.com>"]
+
+[tool.poetry.dependencies]
+python = "^3.8"
+fonttools = "^4.17.1"
+Brotli = "^1.0.9"
+
+[tool.poetry.dev-dependencies]
+
+[build-system]
+requires = ["poetry-core>=1.0.0"]
+build-backend = "poetry.core.masonry.api"
diff --git a/packages/knowledge-base-web-page-element-view/.npmrc b/packages/knowledge-base-web-page-element-view/.npmrc
deleted file mode 100644
index bd3327ab5a9da7959388dab26528073f912af07e..0000000000000000000000000000000000000000
--- a/packages/knowledge-base-web-page-element-view/.npmrc
+++ /dev/null
@@ -1 +0,0 @@
-//registry.npmjs.org/:_authToken=${NPM_TOKEN}
\ No newline at end of file
diff --git a/packages/knowledge-base-web-page-element-view/package.json b/packages/knowledge-base-web-page-element-view/package.json
index 4a2f6f4eed50dfc6ba3f9086936e00cb834155a4..25317ff898b91bd02b284a20fe6ab73a347c3c00 100644
--- a/packages/knowledge-base-web-page-element-view/package.json
+++ b/packages/knowledge-base-web-page-element-view/package.json
@@ -5,6 +5,10 @@
   "main": "src/index.js",
   "license": "LGPL-2.1-or-later",
   "private": true,
+  "publishConfig": {
+    "registry": "https://registry.npmjs.org",
+    "access": "public"
+  },
   "devDependencies": {
     "@rollup/plugin-commonjs": "^16.0.0",
     "@rollup/plugin-json": "^4.1.0",
@@ -44,7 +48,6 @@
     "watch": "npm run watch-local",
     "watch-local": "rollup -c --watch",
     "watch-dev": "rollup -c --watch --environment BUILD:development",
-    "test": "npm run build-test && karma start --singleRun",
-    "publish": "can-npm-publish --verbose 2>&1 && npm run build && npm publish --access public 2>&1 || true"
+    "test": "npm run build-test && karma start --singleRun"
   }
 }
diff --git a/packages/language-select/.npmrc b/packages/language-select/.npmrc
deleted file mode 100644
index bd3327ab5a9da7959388dab26528073f912af07e..0000000000000000000000000000000000000000
--- a/packages/language-select/.npmrc
+++ /dev/null
@@ -1 +0,0 @@
-//registry.npmjs.org/:_authToken=${NPM_TOKEN}
\ No newline at end of file
diff --git a/packages/language-select/package.json b/packages/language-select/package.json
index 7be576643af541c7849bbc9e9ae4baac34e583c5..54b45f3f3eba7fab1fa3bc9e3b7abcd31658b15a 100644
--- a/packages/language-select/package.json
+++ b/packages/language-select/package.json
@@ -4,6 +4,10 @@
   "version": "0.1.1",
   "main": "src/index.js",
   "license": "LGPL-2.1-or-later",
+  "publishConfig": {
+    "registry": "https://registry.npmjs.org",
+    "access": "public"
+  },
   "devDependencies": {
     "@rollup/plugin-commonjs": "^16.0.0",
     "@rollup/plugin-json": "^4.1.0",
@@ -39,7 +43,6 @@
     "watch": "npm run watch-local",
     "watch-local": "rollup -c --watch",
     "watch-dev": "rollup -c --watch --environment BUILD:development",
-    "test": "npm run build-test && karma start --singleRun",
-    "publish": "can-npm-publish --verbose 2>&1 && npm run build && npm publish --access public 2>&1 || true"
+    "test": "npm run build-test && karma start --singleRun"
   }
 }
diff --git a/packages/matomo/.npmrc b/packages/matomo/.npmrc
deleted file mode 100644
index bd3327ab5a9da7959388dab26528073f912af07e..0000000000000000000000000000000000000000
--- a/packages/matomo/.npmrc
+++ /dev/null
@@ -1 +0,0 @@
-//registry.npmjs.org/:_authToken=${NPM_TOKEN}
\ No newline at end of file
diff --git a/packages/matomo/package.json b/packages/matomo/package.json
index 54636cbc2a515f60b1cef9a3fd2ef6d0812d30b8..090450509bbca1b851b127e303ccf2faf789bef4 100644
--- a/packages/matomo/package.json
+++ b/packages/matomo/package.json
@@ -5,6 +5,10 @@
   "main": "src/index.js",
   "license": "LGPL-2.1-or-later",
   "private": true,
+  "publishConfig": {
+    "registry": "https://registry.npmjs.org",
+    "access": "public"
+  },
   "devDependencies": {
     "@rollup/plugin-commonjs": "^16.0.0",
     "@rollup/plugin-json": "^4.1.0",
diff --git a/packages/notification/.npmrc b/packages/notification/.npmrc
deleted file mode 100644
index bd3327ab5a9da7959388dab26528073f912af07e..0000000000000000000000000000000000000000
--- a/packages/notification/.npmrc
+++ /dev/null
@@ -1 +0,0 @@
-//registry.npmjs.org/:_authToken=${NPM_TOKEN}
\ No newline at end of file
diff --git a/packages/notification/package.json b/packages/notification/package.json
index 01ca29485ed554c9a1763fbbe41dbe5109753c37..a0305f0e3f49581c6342381e96362fd99835e435 100644
--- a/packages/notification/package.json
+++ b/packages/notification/package.json
@@ -5,6 +5,10 @@
   "main": "src/index.js",
   "license": "LGPL-2.1-or-later",
   "private": true,
+  "publishConfig": {
+    "registry": "https://registry.npmjs.org",
+    "access": "public"
+  },
   "devDependencies": {
     "@rollup/plugin-commonjs": "^16.0.0",
     "@rollup/plugin-json": "^4.0.0",
@@ -41,7 +45,6 @@
     "watch": "npm run watch-local",
     "watch-local": "rollup -c --watch",
     "watch-dev": "rollup -c --watch --environment BUILD:development",
-    "test": "npm run build-test && karma start --singleRun",
-    "publish": "can-npm-publish --verbose 2>&1 && npm run build && npm publish --access public 2>&1 || true"
+    "test": "npm run build-test && karma start --singleRun"
   }
 }
diff --git a/packages/person-profile/.npmrc b/packages/person-profile/.npmrc
deleted file mode 100644
index bd3327ab5a9da7959388dab26528073f912af07e..0000000000000000000000000000000000000000
--- a/packages/person-profile/.npmrc
+++ /dev/null
@@ -1 +0,0 @@
-//registry.npmjs.org/:_authToken=${NPM_TOKEN}
\ No newline at end of file
diff --git a/packages/person-profile/package.json b/packages/person-profile/package.json
index a77a0929189b2b2da06d097dd3cc8e54f99f8b05..6989356cab0466dc005ece7598af0e59afc04bd4 100644
--- a/packages/person-profile/package.json
+++ b/packages/person-profile/package.json
@@ -5,6 +5,10 @@
   "main": "src/index.js",
   "license": "LGPL-2.1-or-later",
   "private": true,
+  "publishConfig": {
+    "registry": "https://registry.npmjs.org",
+    "access": "public"
+  },
   "devDependencies": {
     "@rollup/plugin-commonjs": "^16.0.0",
     "@rollup/plugin-json": "^4.1.0",
@@ -44,7 +48,6 @@
     "watch": "npm run watch-local",
     "watch-local": "rollup -c --watch",
     "watch-dev": "rollup -c --watch --environment BUILD:development",
-    "test": "npm run build-test && karma start --singleRun",
-    "publish": "can-npm-publish --verbose 2>&1 && npm run build && npm publish --access public 2>&1 || true"
+    "test": "npm run build-test && karma start --singleRun"
   }
 }
diff --git a/packages/person-select/.npmrc b/packages/person-select/.npmrc
deleted file mode 100644
index bd3327ab5a9da7959388dab26528073f912af07e..0000000000000000000000000000000000000000
--- a/packages/person-select/.npmrc
+++ /dev/null
@@ -1 +0,0 @@
-//registry.npmjs.org/:_authToken=${NPM_TOKEN}
\ No newline at end of file
diff --git a/packages/person-select/package.json b/packages/person-select/package.json
index 3a0f96a9bb7bed72ba4518908f59e946e1e5f01e..f3da70f12558b022e3e5fd8fac7132f919e63eda 100644
--- a/packages/person-select/package.json
+++ b/packages/person-select/package.json
@@ -5,6 +5,10 @@
   "main": "src/index.js",
   "license": "LGPL-2.1-or-later",
   "private": true,
+  "publishConfig": {
+    "registry": "https://registry.npmjs.org",
+    "access": "public"
+  },
   "devDependencies": {
     "@rollup/plugin-commonjs": "^16.0.0",
     "@rollup/plugin-json": "^4.1.0",
@@ -45,7 +49,6 @@
     "watch": "npm run watch-local",
     "watch-local": "rollup -c --watch",
     "watch-dev": "rollup -c --watch --environment BUILD:development",
-    "test": "npm run build-test && karma start --singleRun",
-    "publish": "can-npm-publish --verbose 2>&1 && npm run build && npm publish --access public 2>&1 || true"
+    "test": "npm run build-test && karma start --singleRun"
   }
 }
diff --git a/packages/qr-code-scanner/.npmrc b/packages/qr-code-scanner/.npmrc
deleted file mode 100644
index bd3327ab5a9da7959388dab26528073f912af07e..0000000000000000000000000000000000000000
--- a/packages/qr-code-scanner/.npmrc
+++ /dev/null
@@ -1 +0,0 @@
-//registry.npmjs.org/:_authToken=${NPM_TOKEN}
\ No newline at end of file
diff --git a/packages/qr-code-scanner/package.json b/packages/qr-code-scanner/package.json
index 5e65f2a8b174b3e68df8cca942b33e4a18a5c9b6..a5701d3da7d4cd1d1b0fd16c05bee587c2188836 100644
--- a/packages/qr-code-scanner/package.json
+++ b/packages/qr-code-scanner/package.json
@@ -5,6 +5,10 @@
   "main": "src/index.js",
   "license": "LGPL-2.1-or-later",
   "private": true,
+  "publishConfig": {
+    "registry": "https://registry.npmjs.org",
+    "access": "public"
+  },
   "devDependencies": {
     "@rollup/plugin-commonjs": "^16.0.0",
     "@rollup/plugin-json": "^4.0.0",
@@ -47,7 +51,6 @@
     "watch-local": "rollup -c --watch",
     "watch-dev": "rollup -c --watch --environment BUILD:development",
     "test": "npm run build-test && karma start --singleRun",
-    "lint": "eslint .",
-    "publish": "can-npm-publish --verbose 2>&1 && npm run build && npm publish --access public 2>&1 || true"
+    "lint": "eslint ."
   }
 }