diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6743100209eb3fe5456fdce31f1c5d2fa395d8b2..cd2c31e4f614162dfb241ed2c47273e1ad51f7fc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,28 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 ## [Unreleased]
 
+## [0.3.0] - 2022-03-24
+
+### Added
+
+- `FE` Let clues fall w/ gravity to improve overlap situation.
+- `FE` Make word size more uniform by guesstimating ascenders/descenders presence.
+- `FE` Track input timing and keystrokes.
+- `FE` Add virtual keyboard for mobile (which becomes input handler for desktop too).
+- `BE` Swagger for API.
+
+### Changed
+
+- `FE` Move success/failure messages to improve readability.
+- `FE` Rework background scaling.
+- `FE` Circumvent texture key hashing to avoid collisions.
+- `BE` Completely rework API (shallow RESTlike w/ Typebox).
+
+### Fixed
+
+- `FE` Immediately remove clue on failure.
+- `FE` Solve difficulties in typing "öäüß" (w/ hidden virtual keyboard).
+
 ## [0.2.0] - 2022-03-15
 
 ### Added
@@ -42,7 +64,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 - POC by [Giovanni Moretti](https://www.giovannimoretti.it/).
 
-[unreleased]: https://gitlab.inf.unibz.it/commul/oetzi/compare/0.2.0...development
-[0.2.0]: https://gitlab.inf.unibz.it/commul/oetzi/compare/0.2.0...0.2.0
+[unreleased]: https://gitlab.inf.unibz.it/commul/oetzi/compare/0.3.0...development
+[0.3.0]: https://gitlab.inf.unibz.it/commul/oetzi/compare/0.2.0...0.3.0
+[0.2.0]: https://gitlab.inf.unibz.it/commul/oetzi/compare/0.1.0...0.2.0
 [0.1.0]: https://gitlab.inf.unibz.it/commul/oetzi/compare/0.0.1...0.1.0
 [0.0.1]: https://gitlab.inf.unibz.it/commul/oetzi/tree/v0.0.1
diff --git a/backend/package-lock.json b/backend/package-lock.json
index 528119d79859118f6eb9966b60330eae718883e5..6a5eb72d99501db9fcc24a7b2dfc7f86304cb1be 100644
--- a/backend/package-lock.json
+++ b/backend/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "oetzi-backend",
-  "version": "0.1.0",
+  "version": "0.3.0",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
       "name": "oetzi-backend",
-      "version": "0.1.0",
+      "version": "0.3.0",
       "license": "MIT",
       "dependencies": {
         "@sinclair/typebox": "^0.23.4",
diff --git a/backend/package.json b/backend/package.json
index b509e7ae5af50b12bc44202f736e5ca844159a93..9356c24e457699c09e2d71574e451f780dab2e3b 100644
--- a/backend/package.json
+++ b/backend/package.json
@@ -1,6 +1,6 @@
 {
   "name": "oetzi-backend",
-  "version": "0.1.0",
+  "version": "0.3.0",
   "description": "Ötzi game backend.",
   "main": "src/index.js",
   "scripts": {
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index ddb9185be61f9ba118df302c9f35edecab50c1d3..198ad5e92d1355e4a1692861978368d7ce662626 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "oetzi-backend",
-  "version": "0.1.0",
+  "version": "0.3.0",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
       "name": "oetzi-backend",
-      "version": "0.1.0",
+      "version": "0.3.0",
       "license": "MIT",
       "dependencies": {
         "axios": "^0.26.0",
diff --git a/frontend/package.json b/frontend/package.json
index 29928c51ad76ae4de357cf4946c7a25a768df508..bd5b1fbd0193c64b7ee62a3a54f07a247f2bf01b 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -1,6 +1,6 @@
 {
   "name": "oetzi-backend",
-  "version": "0.1.0",
+  "version": "0.3.0",
   "description": "Ötzi game frontend.",
   "license": "MIT",
   "scripts": {