diff --git a/.github/workflows/CompatHelper.yml b/.github/workflows/CompatHelper.yml
new file mode 100644
index 0000000000000000000000000000000000000000..cba9134c670f0708cf98c92f7fdef055a6c7f5d3
--- /dev/null
+++ b/.github/workflows/CompatHelper.yml
@@ -0,0 +1,16 @@
+name: CompatHelper
+on:
+  schedule:
+    - cron: 0 0 * * *
+  workflow_dispatch:
+jobs:
+  CompatHelper:
+    runs-on: ubuntu-latest
+    steps:
+      - name: Pkg.add("CompatHelper")
+        run: julia -e 'using Pkg; Pkg.add("CompatHelper")'
+      - name: CompatHelper.main()
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+          COMPATHELPER_PRIV: ${{ secrets.DOCUMENTER_KEY }}
+        run: julia -e 'using CompatHelper; CompatHelper.main()'
diff --git a/.github/workflows/TagBot.yml b/.github/workflows/TagBot.yml
new file mode 100644
index 0000000000000000000000000000000000000000..f49313b662013f43aac7de2c738e1163a9715ff4
--- /dev/null
+++ b/.github/workflows/TagBot.yml
@@ -0,0 +1,15 @@
+name: TagBot
+on:
+  issue_comment:
+    types:
+      - created
+  workflow_dispatch:
+jobs:
+  TagBot:
+    if: github.event_name == 'workflow_dispatch' || github.actor == 'JuliaTagBot'
+    runs-on: ubuntu-latest
+    steps:
+      - uses: JuliaRegistries/TagBot@v1
+        with:
+          token: ${{ secrets.GITHUB_TOKEN }}
+          ssh: ${{ secrets.DOCUMENTER_KEY }}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..0f84bed33ab4d520dd0711566c809ad78ac13ac3
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+*.jl.*.cov
+*.jl.cov
+*.jl.mem
+/Manifest.toml
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..8be3f1c0fb57cc40952cafa0d7a2742659eae8a6
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,28 @@
+.script:
+  script:
+    - |
+      julia --project=@. -e '
+        using Pkg
+        Pkg.build()
+        Pkg.test(coverage=true)'
+.coverage:
+  coverage: /Test coverage (\d+\.\d+%)/
+  after_script:
+    - |
+      julia -e '
+        using Pkg
+        Pkg.add("Coverage")
+        using Coverage
+        c, t = get_summary(process_folder())
+        using Printf
+        @printf "Test coverage %.2f%%\n" 100c / t'
+Julia 1.0:
+  image: julia:1.0
+  extends:
+    - .script
+    - .coverage
+Julia 1.6:
+  image: julia:1.6
+  extends:
+    - .script
+    - .coverage
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..372aa58d6ef1646472c13e055afff80e8c43d926
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2021 François Laurent, Institut Pasteur
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/Project.toml b/Project.toml
new file mode 100644
index 0000000000000000000000000000000000000000..aab6c3e5b226f63d112c3dcbf4653bbb0830373f
--- /dev/null
+++ b/Project.toml
@@ -0,0 +1,13 @@
+name = "PlanarLarvae"
+uuid = "c2615984-ef14-4d40-b148-916c85b43307"
+authors = ["François Laurent", "Institut Pasteur"]
+version = "0.1.0"
+
+[compat]
+julia = "1"
+
+[extras]
+Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
+
+[targets]
+test = ["Test"]
diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..fb8949b13844f7bf84d67f8dccf0bdd450cffc68
--- /dev/null
+++ b/README.md
@@ -0,0 +1,5 @@
+# PlanarLarvae
+
+[![Build Status](https://gitlab.pasteur.fr/flaurent/PlanarLarvae.jl/badges/main/pipeline.svg)](https://gitlab.pasteur.fr/flaurent/PlanarLarvae.jl/pipelines)
+[![Coverage](https://gitlab.pasteur.fr/flaurent/PlanarLarvae.jl/badges/main/coverage.svg)](https://gitlab.pasteur.fr/flaurent/PlanarLarvae.jl/commits/main)
+[![Coverage](https://codecov.io/gh/flaurent/PlanarLarvae.jl/branch/main/graph/badge.svg)](https://codecov.io/gh/flaurent/PlanarLarvae.jl)
diff --git a/src/PlanarLarvae.jl b/src/PlanarLarvae.jl
new file mode 100644
index 0000000000000000000000000000000000000000..cc1591f7a26cfe4df71370d4f1fdb394b3220b1c
--- /dev/null
+++ b/src/PlanarLarvae.jl
@@ -0,0 +1,5 @@
+module PlanarLarvae
+
+# Write your package code here.
+
+end
diff --git a/test/runtests.jl b/test/runtests.jl
new file mode 100644
index 0000000000000000000000000000000000000000..bebd6150e7b78783f2753ac64c5b8f7ef166b0ba
--- /dev/null
+++ b/test/runtests.jl
@@ -0,0 +1,6 @@
+using PlanarLarvae
+using Test
+
+@testset "PlanarLarvae.jl" begin
+    # Write your tests here.
+end