diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..c623d48866f9fb1ce99ffc468e5ac9b465d63582
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,19 @@
+# This file is a template, and might need editing before it works on your project.
+# To contribute improvements to CI/CD templates, please follow the Development guide at:
+# https://docs.gitlab.com/ee/development/cicd/templates.html
+# This specific template is located at:
+# https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Pages/HTML.gitlab-ci.yml
+
+# Full project: https://gitlab.com/pages/plain-html
+pages:
+  stage: deploy
+  script:
+    - mkdir .public
+    - cp -r ./* .public
+    - rm -rf public
+    - mv .public public
+  artifacts:
+    paths:
+      - public
+  rules:
+    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
diff --git a/img/cc-USB.png b/img/cc-USB.png
new file mode 100644
index 0000000000000000000000000000000000000000..8eeb0657030b3eaa605f54e8a499bc5a30db67b9
Binary files /dev/null and b/img/cc-USB.png differ
diff --git a/img/cc-anchor.png b/img/cc-anchor.png
new file mode 100644
index 0000000000000000000000000000000000000000..3066520b281d9fae06e8b87164cb5dea9682b2e9
Binary files /dev/null and b/img/cc-anchor.png differ
diff --git a/img/cc-file.png b/img/cc-file.png
new file mode 100644
index 0000000000000000000000000000000000000000..716f2695172f393b2e525300d5558a8bc91014c5
Binary files /dev/null and b/img/cc-file.png differ
diff --git a/img/cc-prepare.png b/img/cc-prepare.png
new file mode 100644
index 0000000000000000000000000000000000000000..c1b6c9c99a7e625540b2ef17e646450e8588216c
Binary files /dev/null and b/img/cc-prepare.png differ
diff --git a/img/cc-probe.png b/img/cc-probe.png
new file mode 100644
index 0000000000000000000000000000000000000000..ea3220253f3b855b213e65a938c34782ebc386d3
Binary files /dev/null and b/img/cc-probe.png differ
diff --git a/img/cc-select.png b/img/cc-select.png
new file mode 100644
index 0000000000000000000000000000000000000000..f8dcfee38653df1706c9bba777a300bfeb0e88c7
Binary files /dev/null and b/img/cc-select.png differ
diff --git a/img/cc-toolpath.png b/img/cc-toolpath.png
new file mode 100644
index 0000000000000000000000000000000000000000..b371b20c1002cbaa10fb3bfa8c8b3e077a5e9182
Binary files /dev/null and b/img/cc-toolpath.png differ
diff --git a/img/cc-upload.png b/img/cc-upload.png
new file mode 100644
index 0000000000000000000000000000000000000000..00b9b880339c6ebe1a314743f8c28144ed760933
Binary files /dev/null and b/img/cc-upload.png differ
diff --git a/img/clad.jpg b/img/clad.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0cb4400e2a0331eab1b9f93a2c22cb71165bce63
Binary files /dev/null and b/img/clad.jpg differ
diff --git a/img/clamp.jpg b/img/clamp.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..c3e2cb78677a07f934cb7be299e937d4576b2858
Binary files /dev/null and b/img/clamp.jpg differ
diff --git a/img/clamp_back.jpg b/img/clamp_back.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..249513d46de984176fe104496cd21589503a0cd4
Binary files /dev/null and b/img/clamp_back.jpg differ
diff --git a/img/machine.jpg b/img/machine.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..63141c35f5dd9a1c47e04b4d5ad2647ef9d06fcb
Binary files /dev/null and b/img/machine.jpg differ
diff --git a/img/mods-carvera-images.png b/img/mods-carvera-images.png
new file mode 100644
index 0000000000000000000000000000000000000000..7badde19f971ef1a4bffd4b22fb138e67d4e8aab
Binary files /dev/null and b/img/mods-carvera-images.png differ
diff --git a/img/mods-carvera-program.png b/img/mods-carvera-program.png
new file mode 100644
index 0000000000000000000000000000000000000000..1acba8fd6be007def0fff97ab088ca5db8278baf
Binary files /dev/null and b/img/mods-carvera-program.png differ
diff --git a/img/mods-carvera.png b/img/mods-carvera.png
new file mode 100644
index 0000000000000000000000000000000000000000..f5185b3b5ed77d4e13f6760c8d76e1185ae445c5
Binary files /dev/null and b/img/mods-carvera.png differ
diff --git a/img/mods-viewer.png b/img/mods-viewer.png
new file mode 100644
index 0000000000000000000000000000000000000000..784f23ab40a006d1562b964a7f963dcb8d6d950c
Binary files /dev/null and b/img/mods-viewer.png differ
diff --git a/img/offsets.jpg b/img/offsets.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f011a23cf628b6c26185f400dc7a1a0e05694ddd
Binary files /dev/null and b/img/offsets.jpg differ
diff --git a/img/screw.jpg b/img/screw.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..38c77ca430df57b4e9c450475d0a231792514f8c
Binary files /dev/null and b/img/screw.jpg differ
diff --git a/img/tools.jpg b/img/tools.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..4e899e36ebf6034b0424d9ead8bb808dfb989c4d
Binary files /dev/null and b/img/tools.jpg differ
diff --git a/index.html b/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..540dfdbcc37969c14b2ca5c43012caa46e2e02b6
--- /dev/null
+++ b/index.html
@@ -0,0 +1,179 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width">
+<title>HTBAA: amaretti</title>
+<link href="style.css" rel="stylesheet" type="text/css" />
+</head>
+
+<body>
+
+<main>
+
+<h1>Carvera PCB tutorial</h1>
+
+<div class=author>
+ <p>Quentin Bolsée, 2024</p>
+</div>
+
+<a href="./img/machine.jpg" target=_blank><img src="./img/machine.jpg"/></a>
+
+<p>
+This tutorial will guide you through PCB milling using the Carvera machine, which is an impressive low-cost milling machine with automatic tool changing. In the context of PCB milling, this means that the machine can cut the traces with a fine tool, then swap it for a larger one to cut the board's edge, all <b>automatically</b>.
+</p>
+
+<h2>1. Securing the copper clad</h2>
+
+<p>
+The easiest way to secure the copper clad to the machine is to use clamps. When using clamps, <b>be mindful of two things</b>:
+
+<ul>
+ <li>The machine has no knowledge of where the clamps are, and will happily mill into it if you tell it to. That would damage the tool, and possibly the machine itself.</li>
+ <li>You need a sacrifical layer under the clad you're planning to cut, or your program will reach the machine's bed when cutting the edge of your board.</li>
+</ul>
+
+The easiest sacrifical layer is simply more copper clad. Use a total of <b>three layers</b> to reach a good height for the clamps:
+</p>
+
+<a href="./img/clad.jpg" target=_blank><img src="./img/clad.jpg"/></a>
+
+<p>
+Next, secure this stack using the clamps. Make sure the lower left corner of your copper clads is pushed against the L bracket present on the machine's bed, with no gap. Use the side of the clamp with a lip, and check that the lip has good engagement with the top of the clad.
+</p>
+
+<a href="./img/clamp.jpg" target=_blank><img src="./img/clamp.jpg"/></a>
+
+<p>
+Use the bracket's two screws to secure the lower-left corner. Make sure they're effectively compressing the top of the clad stack:
+</p>
+
+<a href="./img/screw.jpg" target=_blank><img src="./img/screw.jpg"/></a>
+
+<p>
+Finish off with two more clamps in the back of the machine:
+</p>
+
+<a href="./img/clamp_back.jpg" target=_blank><img src="./img/clamp_back.jpg"/></a>
+
+<p>
+Congratulations! You now won't have to touch the machine until the end of the process. We basically just have to load the file and hit "play".
+</p>
+
+<h2>2. Preparing the file with mods</h2>
+
+<p>
+For the purpose of PCB milling, we'll assume the machine has the following tools loaded:
+
+<ul>
+  <li>Tool n°3: 1/32" (0.8mm) flat end mill</li>
+  <li>Tool n°5: 1/64" (0.4mm) flat end mill</li>
+</ul>
+
+The 1/64" flat end mill as tool n°5 is not what the machine comes with out of the box. Instead, you can use the 30° 0.2mm V bit the machine has as tool n°2 by default, but V bits tend to leave a lot of burs on milled PCBs. A thin flat end mill is more delicate but worth it for milling quality.
+</p>
+
+<a href="./img/tools.jpg" target=_blank><img src="./img/tools.jpg"/></a>
+
+<p>
+To produce the g-code to mill your PCB, first open <a href=https://modsproject.org/>mods</a> in a web browser. Right-click, then go to programs->open program, and find the "Carvera mill 2D PCB" program under "machines":
+</p>
+
+<a href="./img/mods-carvera.png" target=_blank><img src="./img/mods-carvera.png"/></a>
+
+<p>
+The program looks very daunting, but your input is only needed on the left side:
+<p>
+
+<a href="./img/mods-carvera-program.png" target=_blank><img src="./img/mods-carvera-program.png"/></a>
+
+<p>
+To continue, you'll need a png image of your board's traces, and another png image of your board's edge. You can obtain those files in many ways, for example by converting your gerber files to images using <a href=https://quentinbolsee.pages.cba.mit.edu/gerber2img/>gerber2img</a>.
+</p>
+
+<p>
+Load the two images by clicking "select png file" in the respective nodes, on the left of the program. Double check the DPI value of those images, as it can sometimes fail to be automatically detected, in which case you can change it manually.
+</p>
+
+<a href="./img/mods-carvera-images.png" target=_blank><img src="./img/mods-carvera-images.png"/></a>
+
+<p>
+Next, check the "Tabs" node. Make sure a thin line is connecting the side of the image to your board. If needed, adjust the length of the tabs. If your board has a special shape, you might need to add them manually using some image editing software; just make sure they reach the every last pixels on the left and right sides of the image.
+</p>
+
+<p>
+To obtain your g-code file, simply click on "Calculate" on the central node, marked by a note. The program will become slow or freeze for a few seconds. At the end, you will get a preview and time estimate in the lower right side of the program. The g-code file will <b>autmatically be downloaded to your hard disk</b>. If in doubt, check your Downloads folder, or the browser's download history.
+</p>
+
+<a href="./img/mods-viewer.png" target=_blank><img src="./img/mods-viewer.png"/></a>
+
+<h2>3. Loading the file into CarveraController</h2>
+
+<p>
+Launch CarveraController, and make sure the machine is connected through USB:
+</p>
+
+<a href="./img/cc-USB.png" target=_blank><img src="./img/cc-USB.png"/></a>
+
+<p>
+Next, load the file by clicking the icon in the lower-left corner. The Carvera needs the file to be loaded into its internal memory, so you'll need to upload the file first, by clicking on "upload":
+</p>
+
+<a href="./img/cc-upload.png" target=_blank><img src="./img/cc-upload.png"/></a>
+
+<p>
+Navigate to the file produced by mods, and click on "Upload". Don't click on "Open", as that won't upload the file to the machine.
+</p>
+
+<a href="./img/cc-file.png" target=_blank><img src="./img/cc-file.png"/></a>
+
+<p>
+Next, click on "Close" to go back to the machine's locally stored files. Select the one you just uploaded, and click on "Select".
+</p>
+
+<a href="./img/cc-select.png" target=_blank><img src="./img/cc-select.png"/></a>
+
+<p>
+The toolpath is displayed:
+</p>
+
+<a href="./img/cc-toolpath.png" target=_blank><img src="./img/cc-toolpath.png"/></a>
+
+<p>
+Make sure it looks correct, then click on the gear icon in the lower left corner. A new dialog box opens, letting you configure your program before launching it:
+</p>
+
+<a href="./img/cc-prepare.png" target=_blank><img src="./img/cc-prepare.png"/></a>
+
+<p>
+First, you'll need to set the <b>lower left corner</b> of your program. If your PCB clad has already been used before (as should be the case most of the time), you'll need to measure the X and Y offsets needed to not run into it. Using calipers and a ruler, measure the <b>X and Y distances</b> from the L bracket at which you'd like to mill your board. Make sure to leave some margin, and check that your board will fit in the spot you've picked.
+</p>
+
+<a href="./img/offsets.jpg" target=_blank><img src="./img/offsets.jpg"/></a>
+
+<p>
+Click on "Config" under "Set Work Origin". Configure the following:
+</p>
+
+<ul>
+  <li>Tick Anchor1 as the reference</li>
+  <li><b>X Offset</b>: the X offset you measured (in mm)</li>
+  <li><b>Y Offset</b>: the Y offset you measured (in mm)</li>
+</ul>
+
+<a href="./img/cc-anchor.png" target=_blank><img src="./img/cc-anchor.png"/></a>
+
+<p>
+Click on "Ok" to confirm. Next, let's configure auto-leveling with the probe. Tick both "Scan Margin" and "Auto Leveling", and click on "Config" under Auto Leveling.
+</p>
+
+<a href="./img/cc-probe.png" target=_blank><img src="./img/cc-probe.png"/></a>
+
+<h2>4. Removing your board and cleaning up</h2>
+
+</main>
+
+</body>
+
+</html>
diff --git a/style.css b/style.css
new file mode 100644
index 0000000000000000000000000000000000000000..53303370860ef75fe6c784bb1c982be8483f8f54
--- /dev/null
+++ b/style.css
@@ -0,0 +1,45 @@
+@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
+
+html, body {
+  width: 90vw;
+  margin: 0px;
+  background: #f7f7f7;
+  font-family: 'Roboto', sans-serif;
+  line-height: 1.5;
+  padding: 1em;
+  padding-bottom: 2em;
+}
+
+.author {
+  font-size: 0.8em;
+}
+
+main {
+  width: 60%;
+  margin: auto;
+  color: #313030;
+}
+
+a {
+  color: #606ab5;
+}
+
+.center {
+  width: 100%;
+  display: flex;
+}
+
+img {
+  width: 100%;
+  margin: auto;
+  max-width: 100%;
+}
+
+@media only screen and (max-width: 600px) {
+  main {
+    width: 100%;
+  }
+  img {
+    width: 100%;
+  }
+}