diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 6188a133f2d6e44801cc82fc0449823dec906697..59913ed62463df4e845f082eaf00fc9677451b62 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -13,6 +13,7 @@
         "damerau-levenshtein": "^1.0.8",
         "newton-raphson-method": "^1.0.2",
         "phaser": "^3.55.2",
+        "rollbar": "^2.24.1",
         "simple-keyboard": "^3.4.68"
       },
       "devDependencies": {
@@ -2884,6 +2885,11 @@
         "node": ">=8"
       }
     },
+    "node_modules/async": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/async/-/async-1.2.1.tgz",
+      "integrity": "sha1-pIFqF81f9RbfosdpikUzabl5DeA="
+    },
     "node_modules/asynckit": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@@ -3304,6 +3310,11 @@
       "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
       "dev": true
     },
+    "node_modules/console-polyfill": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/console-polyfill/-/console-polyfill-0.3.0.tgz",
+      "integrity": "sha512-w+JSDZS7XML43Xnwo2x5O5vxB0ID7T5BdqDtyqT6uiCAX2kZAgcWxNaGqT97tZfSHzfOcvrfsDAodKcJ3UvnXQ=="
+    },
     "node_modules/convert-source-map": {
       "version": "1.8.0",
       "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
@@ -3468,6 +3479,15 @@
         }
       }
     },
+    "node_modules/decache": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/decache/-/decache-3.1.0.tgz",
+      "integrity": "sha1-T1A2+9ZYH8yXI3rDlUokS5U2wto=",
+      "optional": true,
+      "dependencies": {
+        "find": "^0.2.4"
+      }
+    },
     "node_modules/decimal.js": {
       "version": "10.3.1",
       "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
@@ -3712,6 +3732,14 @@
         "is-arrayish": "^0.2.1"
       }
     },
+    "node_modules/error-stack-parser": {
+      "version": "2.0.7",
+      "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.7.tgz",
+      "integrity": "sha512-chLOW0ZGRf4s8raLrDxa5sdkvPec5YdvwbFnqJme4rk0rFajP8mPtrDL1+I+CwrQDCjswDA5sREX7jYQDQs9vA==",
+      "dependencies": {
+        "stackframe": "^1.1.1"
+      }
+    },
     "node_modules/escalade": {
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@@ -4228,6 +4256,15 @@
         "node": ">=8"
       }
     },
+    "node_modules/find": {
+      "version": "0.2.9",
+      "resolved": "https://registry.npmjs.org/find/-/find-0.2.9.tgz",
+      "integrity": "sha1-S3Px/55WrZG3bnFkB/5f/mVUu4w=",
+      "optional": true,
+      "dependencies": {
+        "traverse-chain": "~0.1.0"
+      }
+    },
     "node_modules/find-up": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
@@ -4680,6 +4717,11 @@
       "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
       "dev": true
     },
+    "node_modules/is_js": {
+      "version": "0.9.0",
+      "resolved": "https://registry.npmjs.org/is_js/-/is_js-0.9.0.tgz",
+      "integrity": "sha1-CrlFQFArp6+iTIVqqYVWFmnpxS0="
+    },
     "node_modules/is-arrayish": {
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
@@ -5624,6 +5666,11 @@
       "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
       "dev": true
     },
+    "node_modules/json-stringify-safe": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+    },
     "node_modules/json5": {
       "version": "2.2.1",
       "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
@@ -6556,6 +6603,14 @@
         "url": "https://github.com/sponsors/mysticatea"
       }
     },
+    "node_modules/request-ip": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/request-ip/-/request-ip-2.0.2.tgz",
+      "integrity": "sha1-3urm1K8hdoSX24zQX6NxQ/jxJX4=",
+      "dependencies": {
+        "is_js": "^0.9.0"
+      }
+    },
     "node_modules/require-directory": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -6646,6 +6701,46 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
+    "node_modules/rollbar": {
+      "version": "2.24.1",
+      "resolved": "https://registry.npmjs.org/rollbar/-/rollbar-2.24.1.tgz",
+      "integrity": "sha512-naoF7zF1rpKZyUTpWuCjqX/Ms0pGG3RkhxTEAQOtDIwSi1OgUv+yZCvq1/e/APgAvgr5NYAl2PtkRsIOxukMEg==",
+      "dependencies": {
+        "async": "~1.2.1",
+        "console-polyfill": "0.3.0",
+        "error-stack-parser": "^2.0.4",
+        "json-stringify-safe": "~5.0.0",
+        "lru-cache": "~2.2.1",
+        "request-ip": "~2.0.1",
+        "source-map": "^0.5.7",
+        "uuid": "3.0.x"
+      },
+      "optionalDependencies": {
+        "decache": "^3.0.5"
+      }
+    },
+    "node_modules/rollbar/node_modules/lru-cache": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz",
+      "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0="
+    },
+    "node_modules/rollbar/node_modules/source-map": {
+      "version": "0.5.7",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/rollbar/node_modules/uuid": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz",
+      "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=",
+      "deprecated": "Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.",
+      "bin": {
+        "uuid": "bin/uuid"
+      }
+    },
     "node_modules/run-parallel": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -6847,6 +6942,11 @@
         "node": ">=8"
       }
     },
+    "node_modules/stackframe": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.1.tgz",
+      "integrity": "sha512-h88QkzREN/hy8eRdyNhhsO7RSJ5oyTqxxmmn0dzBIMUclZsjpfmrsg81vp8mjjAs2vAZ72nyWxRUwSwmh0e4xg=="
+    },
     "node_modules/string-length": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
@@ -7126,6 +7226,12 @@
         "node": ">=8"
       }
     },
+    "node_modules/traverse-chain": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/traverse-chain/-/traverse-chain-0.1.0.tgz",
+      "integrity": "sha1-YdvC1Ttp/2CRoSoWj9fUMxB+QPE=",
+      "optional": true
+    },
     "node_modules/ts-jest": {
       "version": "27.1.4",
       "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.4.tgz",
@@ -9589,6 +9695,11 @@
       "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
       "dev": true
     },
+    "async": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/async/-/async-1.2.1.tgz",
+      "integrity": "sha1-pIFqF81f9RbfosdpikUzabl5DeA="
+    },
     "asynckit": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@@ -9907,6 +10018,11 @@
       "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
       "dev": true
     },
+    "console-polyfill": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/console-polyfill/-/console-polyfill-0.3.0.tgz",
+      "integrity": "sha512-w+JSDZS7XML43Xnwo2x5O5vxB0ID7T5BdqDtyqT6uiCAX2kZAgcWxNaGqT97tZfSHzfOcvrfsDAodKcJ3UvnXQ=="
+    },
     "convert-source-map": {
       "version": "1.8.0",
       "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
@@ -10040,6 +10156,15 @@
         "ms": "2.1.2"
       }
     },
+    "decache": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/decache/-/decache-3.1.0.tgz",
+      "integrity": "sha1-T1A2+9ZYH8yXI3rDlUokS5U2wto=",
+      "optional": true,
+      "requires": {
+        "find": "^0.2.4"
+      }
+    },
     "decimal.js": {
       "version": "10.3.1",
       "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
@@ -10219,6 +10344,14 @@
         "is-arrayish": "^0.2.1"
       }
     },
+    "error-stack-parser": {
+      "version": "2.0.7",
+      "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.7.tgz",
+      "integrity": "sha512-chLOW0ZGRf4s8raLrDxa5sdkvPec5YdvwbFnqJme4rk0rFajP8mPtrDL1+I+CwrQDCjswDA5sREX7jYQDQs9vA==",
+      "requires": {
+        "stackframe": "^1.1.1"
+      }
+    },
     "escalade": {
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@@ -10597,6 +10730,15 @@
         "to-regex-range": "^5.0.1"
       }
     },
+    "find": {
+      "version": "0.2.9",
+      "resolved": "https://registry.npmjs.org/find/-/find-0.2.9.tgz",
+      "integrity": "sha1-S3Px/55WrZG3bnFkB/5f/mVUu4w=",
+      "optional": true,
+      "requires": {
+        "traverse-chain": "~0.1.0"
+      }
+    },
     "find-up": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
@@ -10895,6 +11037,11 @@
       "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
       "dev": true
     },
+    "is_js": {
+      "version": "0.9.0",
+      "resolved": "https://registry.npmjs.org/is_js/-/is_js-0.9.0.tgz",
+      "integrity": "sha1-CrlFQFArp6+iTIVqqYVWFmnpxS0="
+    },
     "is-arrayish": {
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
@@ -11626,6 +11773,11 @@
       "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
       "dev": true
     },
+    "json-stringify-safe": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+    },
     "json5": {
       "version": "2.2.1",
       "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
@@ -12318,6 +12470,14 @@
       "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
       "dev": true
     },
+    "request-ip": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/request-ip/-/request-ip-2.0.2.tgz",
+      "integrity": "sha1-3urm1K8hdoSX24zQX6NxQ/jxJX4=",
+      "requires": {
+        "is_js": "^0.9.0"
+      }
+    },
     "require-directory": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -12379,6 +12539,39 @@
         "glob": "^7.1.3"
       }
     },
+    "rollbar": {
+      "version": "2.24.1",
+      "resolved": "https://registry.npmjs.org/rollbar/-/rollbar-2.24.1.tgz",
+      "integrity": "sha512-naoF7zF1rpKZyUTpWuCjqX/Ms0pGG3RkhxTEAQOtDIwSi1OgUv+yZCvq1/e/APgAvgr5NYAl2PtkRsIOxukMEg==",
+      "requires": {
+        "async": "~1.2.1",
+        "console-polyfill": "0.3.0",
+        "decache": "^3.0.5",
+        "error-stack-parser": "^2.0.4",
+        "json-stringify-safe": "~5.0.0",
+        "lru-cache": "~2.2.1",
+        "request-ip": "~2.0.1",
+        "source-map": "^0.5.7",
+        "uuid": "3.0.x"
+      },
+      "dependencies": {
+        "lru-cache": {
+          "version": "2.2.4",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz",
+          "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0="
+        },
+        "source-map": {
+          "version": "0.5.7",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+        },
+        "uuid": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz",
+          "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE="
+        }
+      }
+    },
     "run-parallel": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -12521,6 +12714,11 @@
         }
       }
     },
+    "stackframe": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.1.tgz",
+      "integrity": "sha512-h88QkzREN/hy8eRdyNhhsO7RSJ5oyTqxxmmn0dzBIMUclZsjpfmrsg81vp8mjjAs2vAZ72nyWxRUwSwmh0e4xg=="
+    },
     "string-length": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
@@ -12727,6 +12925,12 @@
         "punycode": "^2.1.1"
       }
     },
+    "traverse-chain": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/traverse-chain/-/traverse-chain-0.1.0.tgz",
+      "integrity": "sha1-YdvC1Ttp/2CRoSoWj9fUMxB+QPE=",
+      "optional": true
+    },
     "ts-jest": {
       "version": "27.1.4",
       "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.4.tgz",
diff --git a/frontend/package.json b/frontend/package.json
index 32d5bb2ae91f26e2540762ba0fc5255dde583276..8c8494fd6c6a81ae40725db300b853ed680bae3f 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -21,6 +21,7 @@
     "damerau-levenshtein": "^1.0.8",
     "newton-raphson-method": "^1.0.2",
     "phaser": "^3.55.2",
+    "rollbar": "^2.24.1",
     "simple-keyboard": "^3.4.68"
   },
   "devDependencies": {
diff --git a/frontend/src/index.html b/frontend/src/index.html
index 597ac8bc37928fd164d36df97b328efdfdf68b35..5b3a077a9726538395f80017c45a97da8aa9125d 100644
--- a/frontend/src/index.html
+++ b/frontend/src/index.html
@@ -5,6 +5,7 @@
   <meta charset="utf-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <link href="css/main.scss" rel="stylesheet">
+  <script type="module" src="js/rollbar.ts"></script>
   <script type="module" src="js/main.ts"></script>
   <title>Ötzi App</title>
 </head>
diff --git a/frontend/src/js/rollbar.ts b/frontend/src/js/rollbar.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3b8f1cd558aab6d5a0b45249cc4d948bcea6aac9
--- /dev/null
+++ b/frontend/src/js/rollbar.ts
@@ -0,0 +1,19 @@
+import * as Rollbar from "rollbar";
+
+new Rollbar({
+  accessToken: process.env.ROLLBAR_ACCESS_TOKEN,
+  // verbose: true,
+  captureUncaught: true,
+  captureUnhandledRejections: true,
+  enabled: !(process.env.NODE_ENV === "development"),
+  payload: {
+    environment: process.env.NODE_ENV,
+    client: {
+      javascript: {
+        code_version: process.env.APP_VERSION,
+        source_map_enabled: true,
+        guess_uncaught_frames: true,
+      },
+    },
+  },
+});