diff --git a/.github/workflows/typos.yaml b/.github/workflows/typos.yaml
new file mode 100644
index 000000000..c2a373462
--- /dev/null
+++ b/.github/workflows/typos.yaml
@@ -0,0 +1,13 @@
+name: Check for typos
+
+on: [pull_request]
+
+jobs:
+  check-for-typos:
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout the repository
+        uses: actions/checkout@v4
+
+      - name: Check for typos
+        uses: crate-ci/typos@bcafd462cb07ef7ba57e34abf458fe20767e808b
diff --git a/docs/modules/ROOT/pages/guides/snip12.adoc b/docs/modules/ROOT/pages/guides/snip12.adoc
index b99274a43..0b120b023 100644
--- a/docs/modules/ROOT/pages/guides/snip12.adoc
+++ b/docs/modules/ROOT/pages/guides/snip12.adoc
@@ -12,7 +12,7 @@ is then to ensure that the received message was indeed signed by the expected si
 
 OpenZeppelin Contracts for Cairo provides a set of utilities to make the implementation of this standard
 as easy as possible, and in this guide we will walk you through the process of generating the hashes of typed messages
-using these utilties for on-chain signature verification. For that, let's build an example with a custom {erc20} contract
+using these utilities for on-chain signature verification. For that, let's build an example with a custom {erc20} contract
 adding an extra `transfer_with_signature` method.
 
 WARNING: This is an educational example, and it is not intended to be used in production environments.
@@ -346,4 +346,4 @@ mod CustomERC20 {
         self.erc20._transfer(owner, recipient, amount);
     }
 }
-----
\ No newline at end of file
+----