diff --git a/import.sh b/import.sh
new file mode 100755
index 0000000..c405185
--- /dev/null
+++ b/import.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+
+# Ensure three arguments are provided
+if [ "$#" -ne 3 ]; then
+    echo "Usage: $0 <language> <repo-name> <project-name>"
+    exit 1
+fi
+
+language=$1
+repo="https://github.com/mateiadrielrafael/$2"
+name=$3
+
+# Ensure project with that name doesn't exist
+if [ -d "$language/$name" ]; then
+    echo "Error: Project `$language/$name` already exists"
+    exit 1
+fi
+
+git fetch $repo
+josh-filter ":prefix=$language/$name:unsign" FETCH_HEAD && git checkout FILTERED_HEAD
+FILTER_BRANCH_SQUELCH_WARNING=1 \
+  git filter-branch --msg-filter "awk \"{print \\\"$language($name): \\\" \\\$0}\"" -f && \
+  git rebase --root --committer-date-is-author-date --signoff
+
+hash=$(git hash)
+git switch master
+git merge --allow-unrelated $hash -m "Add `$language/$name`"
diff --git a/typescript/README.md b/typescript/README.md
index 4f8fdd6..4256e82 100644
--- a/typescript/README.md
+++ b/typescript/README.md
@@ -9,3 +9,4 @@
 | [option](./option/)                          | Typescript implementation of the `Maybe` monad                                                                                  |
 | [pleix-frontend](./pleix-frontend/)          | No idea what `pleix` was supposed to be, but this was essentially just a bunch of experiments with [lit-html](https://lit.dev/) |
 | [wave38](./wave38/)                          | Remake of [wave37](https://github.com/Mateiadrielrafael/wave37) I dropped super early into development.                         |
+| [loopover](./loopover/)                      | Implementation of the [loopover](https://loopover.xyz/) game logic                                                              |