diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml
new file mode 100644
index 0000000..83c845e
--- /dev/null
+++ b/.gitea/workflows/build.yml
@@ -0,0 +1,71 @@
+name: Build site
+
+on:
+ - push
+ - workflow_dispatch
+
+jobs:
+ build:
+ # NOTE: must match your act_runner labels (e.g. ubuntu-latest, ubuntu-24.04).
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Bootstrap pinned toolchain
+ run: ./scripts/bootstrap.sh
+
+ - name: Build site
+ run: ./scripts/calepin.sh compile site public
+
+ # The official upload-artifact@v4 refuses to run on Gitea (it detects a
+ # non-GitHub server and aborts with GHESNotSupportedError). v3 uses the
+ # artifact API that Gitea implements. On Gitea >= 1.22 with a current
+ # act_runner, christopherhx/gitea-upload-artifact@v4 is a drop-in
+ # replacement if you want the v4 API.
+ - name: Upload site artifact
+ uses: actions/upload-artifact@v3
+ with:
+ name: public
+ path: public/
+
+ deploy:
+ needs: build
+ # Publish only from main; move the gate to publish from another branch.
+ if: github.ref == 'refs/heads/main'
+ # Write access for the automatic Actions token to push the pages branch.
+ permissions:
+ contents: write
+ # NOTE: must match your act_runner labels (e.g. ubuntu-latest, ubuntu-24.04).
+ runs-on: ubuntu-latest
+ steps:
+ - name: Download site artifact
+ uses: actions/download-artifact@v3
+ with:
+ name: public
+ path: public
+
+ - name: Check artifact layout
+ run: test -f public/index.html
+
+ # Publishing interfaces with prod; it never runs under local act tests
+ # (act sets env.ACT, the Gitea runner does not). The force-push to the
+ # `pages` branch is what triggers the git-pages webhook.
+ - name: Publish to pages branch
+ if: ${{ !env.ACT }}
+ env:
+ GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
+ run: |
+ if [ -z "$GITEA_TOKEN" ]; then
+ echo "::error::Missing GITEA_TOKEN (the automatic Actions token)."
+ exit 1
+ fi
+ cd public
+ git init -q -b pages .
+ git config user.name "Yggdrasil CI"
+ git config user.email "ci@noreply.kb28.ch"
+ git add -A
+ git commit -q -m "Publish site from ${GITHUB_SHA}"
+ repo_host="${GITHUB_SERVER_URL#*://}"
+ repo_host="${repo_host%/}"
+ git push -q --force "https://${GITHUB_REPOSITORY_OWNER}:${GITEA_TOKEN}@${repo_host}/${GITHUB_REPOSITORY}.git" pages
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..0b71b18
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,10 @@
+# Generated site and pinned toolchain
+public/
+tools/
+
+# Calepin build artifacts
+.calepin/
+.calepin-entry.*
+
+# IDE
+.idea/
diff --git a/AGENT.md b/AGENT.md
new file mode 100644
index 0000000..eefbc8e
--- /dev/null
+++ b/AGENT.md
@@ -0,0 +1,20 @@
+# Agent Rules for Yggdrasil Migration
+
+* **Commit Policy**: Small conventional commits. One logical change per
+ commit, committed only once that step is verified and working. End every
+ commit message with a blank line followed by an
+ `Assisted-by: Delta:zai-glm-5.3` footer.
+* **Layout**: Sources live in `site/` (`calepin.toml` + `.typ` pages),
+ generated output in `public/` (gitignored), pinned binaries in `tools/`
+ (gitignored), helper scripts in `scripts/`, and the old Docsify
+ documentation stays untouched in `legacy_docs/`.
+* **Toolchain**: `calepin` (0.0.61) and `typst` (0.15.1) are pinned in
+ `scripts/bootstrap.sh` and downloaded into `tools/` with checksum
+ verification. The build must never depend on global installs. CI installs
+ the same pinned versions by calling the same scripts.
+* **Verification**: Before committing, run a fresh cycle: `rm -rf tools`,
+ then `just clean`, then `just build` — the build must succeed with no
+ calepin on `PATH`. Verify the served site (`just preview`): home 200,
+ category page 200, sub-page 200, missing page shows the 404 page,
+ `sitemap.xml` present. After every test/clean cycle `git status` must stay
+ clean.
diff --git a/Justfile b/Justfile
new file mode 100644
index 0000000..f6c9546
--- /dev/null
+++ b/Justfile
@@ -0,0 +1,27 @@
+# Show the available recipes
+default:
+ @just --list
+
+# Bootstrap the pinned calepin + typst binaries into tools/
+tools:
+ ./scripts/bootstrap.sh
+
+# Compile the site into public/
+build: tools
+ ./scripts/calepin.sh compile site public
+
+# Build, then serve the site locally
+preview: build
+ ./scripts/calepin.sh serve public
+
+# Rebuild on change and serve the result
+watch: tools
+ ./scripts/calepin.sh watch site public --serve
+
+# Remove generated output and build caches
+clean:
+ ./scripts/clean.sh
+
+# Run the CI workflow locally with act (requires act + docker)
+ci:
+ act push -W .gitea/workflows/build.yml -j build --artifact-server-path /tmp/act-artifacts
diff --git a/README.md b/README.md
index 2cb0d9f..c3282e9 100644
--- a/README.md
+++ b/README.md
@@ -1,33 +1,88 @@
-
-Yggdrasil is a collections of notes around IT, OT and other geeks stuff
-
-
-
+# Yggdrasil
-# [Bachelor in embedded system](/infotro/)
-Here notes I take during my bachelor in embedded systems
+Personal knowledge base built as a static website with
+[Calepin](https://vincentarelbundock.github.io/calepin/), a Typst-based static
+site generator.
-Mainly some topics:
-- [PTR - Programmation Temps Réel](/infotro/PTR/)
-- [SDi - Système Distribué](/infotro/SDi/)
-- [Eln - Électronique](/infotro/Eln/)
-- [SEm - Systèmes Embarqué](/infotro/SEm/)
+## Layout
-# [Master of science in engineering in embedded system](/MSE/)
-Here note I take during my Master of science un engineering with embedded system as orientation
+- `site/` — website sources: `calepin.toml` + `.typ` pages
+- `site/themes/yggdrasil/` — local theme extending the bundled `calepin` theme (scoped sidebars, academic-styled landing)
+- `public/` — generated site (gitignored)
+- `tools/` — pinned `calepin` and `typst` binaries (gitignored, downloaded on demand)
+- `scripts/` — helper scripts used by the Justfile and CI
+- `legacy_docs/` — the old Docsify documentation, kept unmodified for reference
-Mainly some topics:
-- [SRE - Software Reverse Engineering](/MSE/SRE/)
+## Quick start
-# [Embedded Systems](/Embed/)
-Here some note specific about some Embedded System
-- [STM32](/Embed/STM32/)
-- [nRF](/Embed/nRF/)
+`just` is the only prerequisite — the toolchain is downloaded and
+checksum-verified into `tools/` on first use (no global installs, no cargo):
-# [Working environment at HES-SO](/HES-SO/)
-Here some note about the working environment at HES-SO
+ just # list recipes
+ just tools # download the pinned toolchain into tools/
+ just build # compile site/ into public/
+ just preview # build, then serve the site locally
+ just watch # rebuild on change and serve
+ just clean # remove public/ and build caches
+ just ci # run the CI workflow locally with act (needs act + docker)
-- [OneDrive - Linux](/HES-SO/OneDrive.md)
-- [Teams - Linux](/HES-SO/Teams.md)
+## Adding a page
+
+Create `site//.typ`:
+
+```typst
+#set document(title: [Page title])
+#metadata((title: "Page title", translation_key: "category-page"))
+
+#title()
+
+= Page title
+
+Content…
+```
+
+and reference it in `site/calepin.toml`:
+
+```toml
+[[sidebar.section.item]]
+target = "/.typ"
+```
+
+Sidebar labels come from the page's `#metadata(...)` line, not from the config.
+
+Every page also renders a printable PDF twin (`pdf = true` in
+`calepin.toml`, selectable in the page's view picker). Add `pdf: false` to a
+page's `#metadata(...)` to skip its PDF, as `404.typ` does.
+
+## Adding a category
+
+1. Create `site//` with an `index.typ`, using
+ `#metadata((title: "Overview", ...))` for its sidebar label.
+2. Add a `[[sidebar.section]]` named after the category in `calepin.toml`,
+ listing the index page and its sub-pages.
+3. Add a `[[menus.main]]` entry with the category's `index.typ` as `target`
+ and the category name as `label` (e.g. `Home`, `IT`), so it appears in the
+ top navigation bar. The `label` is required here because the index page's
+ metadata title is `Overview`.
+
+Pages inside a category show only that category's sidebar section — the
+local theme (`site/themes/yggdrasil/partials/site-nav-sidebar.html`) filters
+the sidebar to the section containing the current page. Pages outside every
+category (landing page, `404`, standalone pages) fall back to the full
+sidebar.
+
+## Deployment
+
+`just build` produces a fully static site in `public/`: HTML pages with
+printable PDF twins, plus `sitemap.xml`, `robots.txt`, and `llms.txt`. The
+Gitea Actions workflow in
+`.gitea/workflows/build.yml` builds the site on every push with the same
+pinned toolchain and uploads `public/` as an artifact.
+
+Pushes to `main` are also published: the `deploy` job force-pushes `public/`
+to the repo's `pages` branch using the automatic Actions token (no secrets to
+configure). A Gitea webhook on the repo then notifies the self-hosted
+[git-pages](https://codeberg.org/git-pages/git-pages) server, which clones
+the `pages` branch and serves the site. The push step is gated with
+`if: ${{ !env.ACT }}` so local `act` runs never publish, and
+`workflow_dispatch` enables manual publishes from the Gitea UI.
diff --git a/.nojekyll b/legacy_docs/.nojekyll
similarity index 100%
rename from .nojekyll
rename to legacy_docs/.nojekyll
diff --git a/Embed/README.md b/legacy_docs/Embed/README.md
similarity index 100%
rename from Embed/README.md
rename to legacy_docs/Embed/README.md
diff --git a/Embed/STM32/README.md b/legacy_docs/Embed/STM32/README.md
similarity index 100%
rename from Embed/STM32/README.md
rename to legacy_docs/Embed/STM32/README.md
diff --git a/Embed/nRF/README.md b/legacy_docs/Embed/nRF/README.md
similarity index 100%
rename from Embed/nRF/README.md
rename to legacy_docs/Embed/nRF/README.md
diff --git a/Embed/nRF/development_environment.md b/legacy_docs/Embed/nRF/development_environment.md
similarity index 100%
rename from Embed/nRF/development_environment.md
rename to legacy_docs/Embed/nRF/development_environment.md
diff --git a/Embed/nRF/medias/GDB_settings.png b/legacy_docs/Embed/nRF/medias/GDB_settings.png
similarity index 100%
rename from Embed/nRF/medias/GDB_settings.png
rename to legacy_docs/Embed/nRF/medias/GDB_settings.png
diff --git a/HES-SO/OneDrive.md b/legacy_docs/HES-SO/OneDrive.md
similarity index 100%
rename from HES-SO/OneDrive.md
rename to legacy_docs/HES-SO/OneDrive.md
diff --git a/HES-SO/README.md b/legacy_docs/HES-SO/README.md
similarity index 100%
rename from HES-SO/README.md
rename to legacy_docs/HES-SO/README.md
diff --git a/HES-SO/Teams.md b/legacy_docs/HES-SO/Teams.md
similarity index 100%
rename from HES-SO/Teams.md
rename to legacy_docs/HES-SO/Teams.md
diff --git a/HES-SO/medias/microsoft_graph-result_id.png b/legacy_docs/HES-SO/medias/microsoft_graph-result_id.png
similarity index 100%
rename from HES-SO/medias/microsoft_graph-result_id.png
rename to legacy_docs/HES-SO/medias/microsoft_graph-result_id.png
diff --git a/HES-SO/medias/microsoft_graph-result_research.png b/legacy_docs/HES-SO/medias/microsoft_graph-result_research.png
similarity index 100%
rename from HES-SO/medias/microsoft_graph-result_research.png
rename to legacy_docs/HES-SO/medias/microsoft_graph-result_research.png
diff --git a/HES-SO/medias/microsoft_graph-search_bar.png b/legacy_docs/HES-SO/medias/microsoft_graph-search_bar.png
similarity index 100%
rename from HES-SO/medias/microsoft_graph-search_bar.png
rename to legacy_docs/HES-SO/medias/microsoft_graph-search_bar.png
diff --git a/HES-SO/medias/microsoft_graph-search_site_id.png b/legacy_docs/HES-SO/medias/microsoft_graph-search_site_id.png
similarity index 100%
rename from HES-SO/medias/microsoft_graph-search_site_id.png
rename to legacy_docs/HES-SO/medias/microsoft_graph-search_site_id.png
diff --git a/MSE/README.md b/legacy_docs/MSE/README.md
similarity index 100%
rename from MSE/README.md
rename to legacy_docs/MSE/README.md
diff --git a/MSE/SRE/README.md b/legacy_docs/MSE/SRE/README.md
similarity index 100%
rename from MSE/SRE/README.md
rename to legacy_docs/MSE/SRE/README.md
diff --git a/MSE/SRE/tools.md b/legacy_docs/MSE/SRE/tools.md
similarity index 100%
rename from MSE/SRE/tools.md
rename to legacy_docs/MSE/SRE/tools.md
diff --git a/MSE/_navbar.md b/legacy_docs/MSE/_navbar.md
similarity index 100%
rename from MSE/_navbar.md
rename to legacy_docs/MSE/_navbar.md
diff --git a/Security/README.md b/legacy_docs/Security/README.md
similarity index 100%
rename from Security/README.md
rename to legacy_docs/Security/README.md
diff --git a/Security/SSH/README.md b/legacy_docs/Security/SSH/README.md
similarity index 100%
rename from Security/SSH/README.md
rename to legacy_docs/Security/SSH/README.md
diff --git a/_glossary.md b/legacy_docs/_glossary.md
similarity index 100%
rename from _glossary.md
rename to legacy_docs/_glossary.md
diff --git a/_navbar.md b/legacy_docs/_navbar.md
similarity index 100%
rename from _navbar.md
rename to legacy_docs/_navbar.md
diff --git a/divers/README.md b/legacy_docs/divers/README.md
similarity index 100%
rename from divers/README.md
rename to legacy_docs/divers/README.md
diff --git a/divers/example4_v3.png b/legacy_docs/divers/example4_v3.png
similarity index 100%
rename from divers/example4_v3.png
rename to legacy_docs/divers/example4_v3.png
diff --git a/divers/excalidraw.json b/legacy_docs/divers/excalidraw.json
similarity index 100%
rename from divers/excalidraw.json
rename to legacy_docs/divers/excalidraw.json
diff --git a/divers/panel.md b/legacy_docs/divers/panel.md
similarity index 100%
rename from divers/panel.md
rename to legacy_docs/divers/panel.md
diff --git a/index.html b/legacy_docs/index.html
similarity index 100%
rename from index.html
rename to legacy_docs/index.html
diff --git a/infotro/Eln/ADDA.md b/legacy_docs/infotro/Eln/ADDA.md
similarity index 100%
rename from infotro/Eln/ADDA.md
rename to legacy_docs/infotro/Eln/ADDA.md
diff --git a/infotro/Eln/Filtres.md b/legacy_docs/infotro/Eln/Filtres.md
similarity index 100%
rename from infotro/Eln/Filtres.md
rename to legacy_docs/infotro/Eln/Filtres.md
diff --git a/infotro/Eln/README.md b/legacy_docs/infotro/Eln/README.md
similarity index 100%
rename from infotro/Eln/README.md
rename to legacy_docs/infotro/Eln/README.md
diff --git a/infotro/Eln/RF.md b/legacy_docs/infotro/Eln/RF.md
similarity index 100%
rename from infotro/Eln/RF.md
rename to legacy_docs/infotro/Eln/RF.md
diff --git a/infotro/Eln/SignauxEtEchantillonnage.md b/legacy_docs/infotro/Eln/SignauxEtEchantillonnage.md
similarity index 100%
rename from infotro/Eln/SignauxEtEchantillonnage.md
rename to legacy_docs/infotro/Eln/SignauxEtEchantillonnage.md
diff --git a/infotro/Eln/Ztransform.md b/legacy_docs/infotro/Eln/Ztransform.md
similarity index 100%
rename from infotro/Eln/Ztransform.md
rename to legacy_docs/infotro/Eln/Ztransform.md
diff --git a/infotro/Eln/labs/06-filters/README.md b/legacy_docs/infotro/Eln/labs/06-filters/README.md
similarity index 100%
rename from infotro/Eln/labs/06-filters/README.md
rename to legacy_docs/infotro/Eln/labs/06-filters/README.md
diff --git a/infotro/Eln/labs/06-filters/bode_design_filter.svg b/legacy_docs/infotro/Eln/labs/06-filters/bode_design_filter.svg
similarity index 100%
rename from infotro/Eln/labs/06-filters/bode_design_filter.svg
rename to legacy_docs/infotro/Eln/labs/06-filters/bode_design_filter.svg
diff --git a/infotro/Eln/labs/06-filters/direct_form_1.svg b/legacy_docs/infotro/Eln/labs/06-filters/direct_form_1.svg
similarity index 100%
rename from infotro/Eln/labs/06-filters/direct_form_1.svg
rename to legacy_docs/infotro/Eln/labs/06-filters/direct_form_1.svg
diff --git a/infotro/Eln/labs/06-filters/direct_form_2.svg b/legacy_docs/infotro/Eln/labs/06-filters/direct_form_2.svg
similarity index 100%
rename from infotro/Eln/labs/06-filters/direct_form_2.svg
rename to legacy_docs/infotro/Eln/labs/06-filters/direct_form_2.svg
diff --git a/infotro/Eln/labs/06-filters/iir_filter.svg b/legacy_docs/infotro/Eln/labs/06-filters/iir_filter.svg
similarity index 100%
rename from infotro/Eln/labs/06-filters/iir_filter.svg
rename to legacy_docs/infotro/Eln/labs/06-filters/iir_filter.svg
diff --git a/infotro/Eln/labs/_navbar.md b/legacy_docs/infotro/Eln/labs/_navbar.md
similarity index 100%
rename from infotro/Eln/labs/_navbar.md
rename to legacy_docs/infotro/Eln/labs/_navbar.md
diff --git a/infotro/Eln/medias/add_line_on_smith_chart.png b/legacy_docs/infotro/Eln/medias/add_line_on_smith_chart.png
similarity index 100%
rename from infotro/Eln/medias/add_line_on_smith_chart.png
rename to legacy_docs/infotro/Eln/medias/add_line_on_smith_chart.png
diff --git a/infotro/Eln/medias/comptage-graph.png b/legacy_docs/infotro/Eln/medias/comptage-graph.png
similarity index 100%
rename from infotro/Eln/medias/comptage-graph.png
rename to legacy_docs/infotro/Eln/medias/comptage-graph.png
diff --git a/infotro/Eln/medias/comptage.png b/legacy_docs/infotro/Eln/medias/comptage.png
similarity index 100%
rename from infotro/Eln/medias/comptage.png
rename to legacy_docs/infotro/Eln/medias/comptage.png
diff --git a/infotro/Eln/medias/filters-h0.png b/legacy_docs/infotro/Eln/medias/filters-h0.png
similarity index 100%
rename from infotro/Eln/medias/filters-h0.png
rename to legacy_docs/infotro/Eln/medias/filters-h0.png
diff --git a/infotro/Eln/medias/filters-h1.png b/legacy_docs/infotro/Eln/medias/filters-h1.png
similarity index 100%
rename from infotro/Eln/medias/filters-h1.png
rename to legacy_docs/infotro/Eln/medias/filters-h1.png
diff --git a/infotro/Eln/medias/filters-h2.png b/legacy_docs/infotro/Eln/medias/filters-h2.png
similarity index 100%
rename from infotro/Eln/medias/filters-h2.png
rename to legacy_docs/infotro/Eln/medias/filters-h2.png
diff --git a/infotro/Eln/medias/filters-h3.png b/legacy_docs/infotro/Eln/medias/filters-h3.png
similarity index 100%
rename from infotro/Eln/medias/filters-h3.png
rename to legacy_docs/infotro/Eln/medias/filters-h3.png
diff --git a/infotro/Eln/medias/filters-h4.png b/legacy_docs/infotro/Eln/medias/filters-h4.png
similarity index 100%
rename from infotro/Eln/medias/filters-h4.png
rename to legacy_docs/infotro/Eln/medias/filters-h4.png
diff --git a/infotro/Eln/medias/filters-h5-h6.png b/legacy_docs/infotro/Eln/medias/filters-h5-h6.png
similarity index 100%
rename from infotro/Eln/medias/filters-h5-h6.png
rename to legacy_docs/infotro/Eln/medias/filters-h5-h6.png
diff --git a/infotro/Eln/medias/filters-orther.png b/legacy_docs/infotro/Eln/medias/filters-orther.png
similarity index 100%
rename from infotro/Eln/medias/filters-orther.png
rename to legacy_docs/infotro/Eln/medias/filters-orther.png
diff --git a/infotro/Eln/medias/filters-summary.png b/legacy_docs/infotro/Eln/medias/filters-summary.png
similarity index 100%
rename from infotro/Eln/medias/filters-summary.png
rename to legacy_docs/infotro/Eln/medias/filters-summary.png
diff --git a/infotro/Eln/medias/filtre_numerique_passe_bas_2-bode.png b/legacy_docs/infotro/Eln/medias/filtre_numerique_passe_bas_2-bode.png
similarity index 100%
rename from infotro/Eln/medias/filtre_numerique_passe_bas_2-bode.png
rename to legacy_docs/infotro/Eln/medias/filtre_numerique_passe_bas_2-bode.png
diff --git a/infotro/Eln/medias/filtre_numerique_passe_bas_2-reponse.png b/legacy_docs/infotro/Eln/medias/filtre_numerique_passe_bas_2-reponse.png
similarity index 100%
rename from infotro/Eln/medias/filtre_numerique_passe_bas_2-reponse.png
rename to legacy_docs/infotro/Eln/medias/filtre_numerique_passe_bas_2-reponse.png
diff --git a/infotro/Eln/medias/fourier_cerlce_unitaire.svg b/legacy_docs/infotro/Eln/medias/fourier_cerlce_unitaire.svg
similarity index 100%
rename from infotro/Eln/medias/fourier_cerlce_unitaire.svg
rename to legacy_docs/infotro/Eln/medias/fourier_cerlce_unitaire.svg
diff --git a/infotro/Eln/medias/impedance_matching.png b/legacy_docs/infotro/Eln/medias/impedance_matching.png
similarity index 100%
rename from infotro/Eln/medias/impedance_matching.png
rename to legacy_docs/infotro/Eln/medias/impedance_matching.png
diff --git a/infotro/Eln/medias/lit_recusrive_example.png b/legacy_docs/infotro/Eln/medias/lit_recusrive_example.png
similarity index 100%
rename from infotro/Eln/medias/lit_recusrive_example.png
rename to legacy_docs/infotro/Eln/medias/lit_recusrive_example.png
diff --git a/infotro/Eln/medias/parallele.png b/legacy_docs/infotro/Eln/medias/parallele.png
similarity index 100%
rename from infotro/Eln/medias/parallele.png
rename to legacy_docs/infotro/Eln/medias/parallele.png
diff --git a/infotro/Eln/medias/pesee.png b/legacy_docs/infotro/Eln/medias/pesee.png
similarity index 100%
rename from infotro/Eln/medias/pesee.png
rename to legacy_docs/infotro/Eln/medias/pesee.png
diff --git a/infotro/Eln/medias/reponse_impulsionelle-continue_discret.png b/legacy_docs/infotro/Eln/medias/reponse_impulsionelle-continue_discret.png
similarity index 100%
rename from infotro/Eln/medias/reponse_impulsionelle-continue_discret.png
rename to legacy_docs/infotro/Eln/medias/reponse_impulsionelle-continue_discret.png
diff --git a/infotro/Eln/medias/rf-capacitor-graph.png b/legacy_docs/infotro/Eln/medias/rf-capacitor-graph.png
similarity index 100%
rename from infotro/Eln/medias/rf-capacitor-graph.png
rename to legacy_docs/infotro/Eln/medias/rf-capacitor-graph.png
diff --git a/infotro/Eln/medias/rf-capacitor.png b/legacy_docs/infotro/Eln/medias/rf-capacitor.png
similarity index 100%
rename from infotro/Eln/medias/rf-capacitor.png
rename to legacy_docs/infotro/Eln/medias/rf-capacitor.png
diff --git a/infotro/Eln/medias/rf-filter_components.png b/legacy_docs/infotro/Eln/medias/rf-filter_components.png
similarity index 100%
rename from infotro/Eln/medias/rf-filter_components.png
rename to legacy_docs/infotro/Eln/medias/rf-filter_components.png
diff --git a/infotro/Eln/medias/rf-filters_prototype.png b/legacy_docs/infotro/Eln/medias/rf-filters_prototype.png
similarity index 100%
rename from infotro/Eln/medias/rf-filters_prototype.png
rename to legacy_docs/infotro/Eln/medias/rf-filters_prototype.png
diff --git a/infotro/Eln/medias/rf-inductor-graph.png b/legacy_docs/infotro/Eln/medias/rf-inductor-graph.png
similarity index 100%
rename from infotro/Eln/medias/rf-inductor-graph.png
rename to legacy_docs/infotro/Eln/medias/rf-inductor-graph.png
diff --git a/infotro/Eln/medias/rf-inductor.png b/legacy_docs/infotro/Eln/medias/rf-inductor.png
similarity index 100%
rename from infotro/Eln/medias/rf-inductor.png
rename to legacy_docs/infotro/Eln/medias/rf-inductor.png
diff --git a/infotro/Eln/medias/rf-kuroda_identities.png b/legacy_docs/infotro/Eln/medias/rf-kuroda_identities.png
similarity index 100%
rename from infotro/Eln/medias/rf-kuroda_identities.png
rename to legacy_docs/infotro/Eln/medias/rf-kuroda_identities.png
diff --git a/infotro/Eln/medias/rf-normalized_value-butterworth_1_10.png b/legacy_docs/infotro/Eln/medias/rf-normalized_value-butterworth_1_10.png
similarity index 100%
rename from infotro/Eln/medias/rf-normalized_value-butterworth_1_10.png
rename to legacy_docs/infotro/Eln/medias/rf-normalized_value-butterworth_1_10.png
diff --git a/infotro/Eln/medias/rf-normalized_value_chebyshev_ripple_0_5.png b/legacy_docs/infotro/Eln/medias/rf-normalized_value_chebyshev_ripple_0_5.png
similarity index 100%
rename from infotro/Eln/medias/rf-normalized_value_chebyshev_ripple_0_5.png
rename to legacy_docs/infotro/Eln/medias/rf-normalized_value_chebyshev_ripple_0_5.png
diff --git a/infotro/Eln/medias/rf-normalized_value_chebyshev_ripple_3.png b/legacy_docs/infotro/Eln/medias/rf-normalized_value_chebyshev_ripple_3.png
similarity index 100%
rename from infotro/Eln/medias/rf-normalized_value_chebyshev_ripple_3.png
rename to legacy_docs/infotro/Eln/medias/rf-normalized_value_chebyshev_ripple_3.png
diff --git a/infotro/Eln/medias/rf-resistor.png b/legacy_docs/infotro/Eln/medias/rf-resistor.png
similarity index 100%
rename from infotro/Eln/medias/rf-resistor.png
rename to legacy_docs/infotro/Eln/medias/rf-resistor.png
diff --git a/infotro/Eln/medias/schema_bloc_fir.svg b/legacy_docs/infotro/Eln/medias/schema_bloc_fir.svg
similarity index 100%
rename from infotro/Eln/medias/schema_bloc_fir.svg
rename to legacy_docs/infotro/Eln/medias/schema_bloc_fir.svg
diff --git a/infotro/Eln/medias/sigma-delta.drawio b/legacy_docs/infotro/Eln/medias/sigma-delta.drawio
similarity index 100%
rename from infotro/Eln/medias/sigma-delta.drawio
rename to legacy_docs/infotro/Eln/medias/sigma-delta.drawio
diff --git a/infotro/Eln/medias/snr_by_osr.png b/legacy_docs/infotro/Eln/medias/snr_by_osr.png
similarity index 100%
rename from infotro/Eln/medias/snr_by_osr.png
rename to legacy_docs/infotro/Eln/medias/snr_by_osr.png
diff --git a/infotro/Eln/medias/specification_de_filtre.svg b/legacy_docs/infotro/Eln/medias/specification_de_filtre.svg
similarity index 100%
rename from infotro/Eln/medias/specification_de_filtre.svg
rename to legacy_docs/infotro/Eln/medias/specification_de_filtre.svg
diff --git a/infotro/Eln/ztabelle01.png b/legacy_docs/infotro/Eln/ztabelle01.png
similarity index 100%
rename from infotro/Eln/ztabelle01.png
rename to legacy_docs/infotro/Eln/ztabelle01.png
diff --git a/infotro/Eln/ztabelle02.png b/legacy_docs/infotro/Eln/ztabelle02.png
similarity index 100%
rename from infotro/Eln/ztabelle02.png
rename to legacy_docs/infotro/Eln/ztabelle02.png
diff --git a/infotro/Eln/ztabelle03.png b/legacy_docs/infotro/Eln/ztabelle03.png
similarity index 100%
rename from infotro/Eln/ztabelle03.png
rename to legacy_docs/infotro/Eln/ztabelle03.png
diff --git a/infotro/PTR/PCO.md b/legacy_docs/infotro/PTR/PCO.md
similarity index 100%
rename from infotro/PTR/PCO.md
rename to legacy_docs/infotro/PTR/PCO.md
diff --git a/infotro/PTR/README.md b/legacy_docs/infotro/PTR/README.md
similarity index 100%
rename from infotro/PTR/README.md
rename to legacy_docs/infotro/PTR/README.md
diff --git a/infotro/PTR/RealTime.md b/legacy_docs/infotro/PTR/RealTime.md
similarity index 100%
rename from infotro/PTR/RealTime.md
rename to legacy_docs/infotro/PTR/RealTime.md
diff --git a/infotro/PTR/SYS.md b/legacy_docs/infotro/PTR/SYS.md
similarity index 100%
rename from infotro/PTR/SYS.md
rename to legacy_docs/infotro/PTR/SYS.md
diff --git a/infotro/PTR/UML.md b/legacy_docs/infotro/PTR/UML.md
similarity index 100%
rename from infotro/PTR/UML.md
rename to legacy_docs/infotro/PTR/UML.md
diff --git a/infotro/PTR/XF.md b/legacy_docs/infotro/PTR/XF.md
similarity index 100%
rename from infotro/PTR/XF.md
rename to legacy_docs/infotro/PTR/XF.md
diff --git a/infotro/PTR/img.png b/legacy_docs/infotro/PTR/img.png
similarity index 100%
rename from infotro/PTR/img.png
rename to legacy_docs/infotro/PTR/img.png
diff --git a/infotro/PTR/img_1.png b/legacy_docs/infotro/PTR/img_1.png
similarity index 100%
rename from infotro/PTR/img_1.png
rename to legacy_docs/infotro/PTR/img_1.png
diff --git a/infotro/PTR/medias/algo_banquier1.png b/legacy_docs/infotro/PTR/medias/algo_banquier1.png
similarity index 100%
rename from infotro/PTR/medias/algo_banquier1.png
rename to legacy_docs/infotro/PTR/medias/algo_banquier1.png
diff --git a/infotro/PTR/medias/algo_banquier2.png b/legacy_docs/infotro/PTR/medias/algo_banquier2.png
similarity index 100%
rename from infotro/PTR/medias/algo_banquier2.png
rename to legacy_docs/infotro/PTR/medias/algo_banquier2.png
diff --git a/infotro/PTR/medias/interblocage.png b/legacy_docs/infotro/PTR/medias/interblocage.png
similarity index 100%
rename from infotro/PTR/medias/interblocage.png
rename to legacy_docs/infotro/PTR/medias/interblocage.png
diff --git a/infotro/PTR/medias/interruptions.png b/legacy_docs/infotro/PTR/medias/interruptions.png
similarity index 100%
rename from infotro/PTR/medias/interruptions.png
rename to legacy_docs/infotro/PTR/medias/interruptions.png
diff --git a/infotro/PTR/medias/multiprogramming.png b/legacy_docs/infotro/PTR/medias/multiprogramming.png
similarity index 100%
rename from infotro/PTR/medias/multiprogramming.png
rename to legacy_docs/infotro/PTR/medias/multiprogramming.png
diff --git a/infotro/PTR/medias/operating_system.png b/legacy_docs/infotro/PTR/medias/operating_system.png
similarity index 100%
rename from infotro/PTR/medias/operating_system.png
rename to legacy_docs/infotro/PTR/medias/operating_system.png
diff --git a/infotro/PTR/medias/ordonnanceur.png b/legacy_docs/infotro/PTR/medias/ordonnanceur.png
similarity index 100%
rename from infotro/PTR/medias/ordonnanceur.png
rename to legacy_docs/infotro/PTR/medias/ordonnanceur.png
diff --git a/infotro/PTR/medias/spooling.png b/legacy_docs/infotro/PTR/medias/spooling.png
similarity index 100%
rename from infotro/PTR/medias/spooling.png
rename to legacy_docs/infotro/PTR/medias/spooling.png
diff --git a/infotro/PTR/medias/synthese_diagram_queue_process.png b/legacy_docs/infotro/PTR/medias/synthese_diagram_queue_process.png
similarity index 100%
rename from infotro/PTR/medias/synthese_diagram_queue_process.png
rename to legacy_docs/infotro/PTR/medias/synthese_diagram_queue_process.png
diff --git a/infotro/PTR/medias/system_asynchron.png b/legacy_docs/infotro/PTR/medias/system_asynchron.png
similarity index 100%
rename from infotro/PTR/medias/system_asynchron.png
rename to legacy_docs/infotro/PTR/medias/system_asynchron.png
diff --git a/infotro/PTR/medias/system_synchron.png b/legacy_docs/infotro/PTR/medias/system_synchron.png
similarity index 100%
rename from infotro/PTR/medias/system_synchron.png
rename to legacy_docs/infotro/PTR/medias/system_synchron.png
diff --git a/infotro/PTR/medias/time-sharing.png b/legacy_docs/infotro/PTR/medias/time-sharing.png
similarity index 100%
rename from infotro/PTR/medias/time-sharing.png
rename to legacy_docs/infotro/PTR/medias/time-sharing.png
diff --git a/infotro/README.md b/legacy_docs/infotro/README.md
similarity index 100%
rename from infotro/README.md
rename to legacy_docs/infotro/README.md
diff --git a/infotro/SDi/README.md b/legacy_docs/infotro/SDi/README.md
similarity index 100%
rename from infotro/SDi/README.md
rename to legacy_docs/infotro/SDi/README.md
diff --git a/infotro/SDi/bluetooth.md b/legacy_docs/infotro/SDi/bluetooth.md
similarity index 100%
rename from infotro/SDi/bluetooth.md
rename to legacy_docs/infotro/SDi/bluetooth.md
diff --git a/infotro/SDi/cipher_modes.png b/legacy_docs/infotro/SDi/cipher_modes.png
similarity index 100%
rename from infotro/SDi/cipher_modes.png
rename to legacy_docs/infotro/SDi/cipher_modes.png
diff --git a/infotro/SDi/database.md b/legacy_docs/infotro/SDi/database.md
similarity index 100%
rename from infotro/SDi/database.md
rename to legacy_docs/infotro/SDi/database.md
diff --git a/infotro/SDi/iot_technologies.md b/legacy_docs/infotro/SDi/iot_technologies.md
similarity index 100%
rename from infotro/SDi/iot_technologies.md
rename to legacy_docs/infotro/SDi/iot_technologies.md
diff --git a/infotro/SDi/labs/SSL/README.md b/legacy_docs/infotro/SDi/labs/SSL/README.md
similarity index 100%
rename from infotro/SDi/labs/SSL/README.md
rename to legacy_docs/infotro/SDi/labs/SSL/README.md
diff --git a/infotro/SDi/labs/database/README.md b/legacy_docs/infotro/SDi/labs/database/README.md
similarity index 100%
rename from infotro/SDi/labs/database/README.md
rename to legacy_docs/infotro/SDi/labs/database/README.md
diff --git a/infotro/SDi/labs/database/relations.png b/legacy_docs/infotro/SDi/labs/database/relations.png
similarity index 100%
rename from infotro/SDi/labs/database/relations.png
rename to legacy_docs/infotro/SDi/labs/database/relations.png
diff --git a/infotro/SDi/labs/database/sdi04.sql b/legacy_docs/infotro/SDi/labs/database/sdi04.sql
similarity index 100%
rename from infotro/SDi/labs/database/sdi04.sql
rename to legacy_docs/infotro/SDi/labs/database/sdi04.sql
diff --git a/infotro/SDi/medias/TuxPenguinModes.jpeg b/legacy_docs/infotro/SDi/medias/TuxPenguinModes.jpeg
similarity index 100%
rename from infotro/SDi/medias/TuxPenguinModes.jpeg
rename to legacy_docs/infotro/SDi/medias/TuxPenguinModes.jpeg
diff --git a/infotro/SDi/medias/bluetooth_cccd.png b/legacy_docs/infotro/SDi/medias/bluetooth_cccd.png
similarity index 100%
rename from infotro/SDi/medias/bluetooth_cccd.png
rename to legacy_docs/infotro/SDi/medias/bluetooth_cccd.png
diff --git a/infotro/SDi/medias/bluetooth_client_serveur.png b/legacy_docs/infotro/SDi/medias/bluetooth_client_serveur.png
similarity index 100%
rename from infotro/SDi/medias/bluetooth_client_serveur.png
rename to legacy_docs/infotro/SDi/medias/bluetooth_client_serveur.png
diff --git a/infotro/SDi/medias/bluetooth_connection.png b/legacy_docs/infotro/SDi/medias/bluetooth_connection.png
similarity index 100%
rename from infotro/SDi/medias/bluetooth_connection.png
rename to legacy_docs/infotro/SDi/medias/bluetooth_connection.png
diff --git a/infotro/SDi/medias/bluetooth_gatt_att.png b/legacy_docs/infotro/SDi/medias/bluetooth_gatt_att.png
similarity index 100%
rename from infotro/SDi/medias/bluetooth_gatt_att.png
rename to legacy_docs/infotro/SDi/medias/bluetooth_gatt_att.png
diff --git a/infotro/SDi/medias/bluetooth_stack.png b/legacy_docs/infotro/SDi/medias/bluetooth_stack.png
similarity index 100%
rename from infotro/SDi/medias/bluetooth_stack.png
rename to legacy_docs/infotro/SDi/medias/bluetooth_stack.png
diff --git a/infotro/SDi/medias/coap_example.png b/legacy_docs/infotro/SDi/medias/coap_example.png
similarity index 100%
rename from infotro/SDi/medias/coap_example.png
rename to legacy_docs/infotro/SDi/medias/coap_example.png
diff --git a/infotro/SDi/medias/coap_overview.png b/legacy_docs/infotro/SDi/medias/coap_overview.png
similarity index 100%
rename from infotro/SDi/medias/coap_overview.png
rename to legacy_docs/infotro/SDi/medias/coap_overview.png
diff --git a/infotro/SDi/medias/database-1_null.png b/legacy_docs/infotro/SDi/medias/database-1_null.png
similarity index 100%
rename from infotro/SDi/medias/database-1_null.png
rename to legacy_docs/infotro/SDi/medias/database-1_null.png
diff --git a/infotro/SDi/medias/database-2_object.png b/legacy_docs/infotro/SDi/medias/database-2_object.png
similarity index 100%
rename from infotro/SDi/medias/database-2_object.png
rename to legacy_docs/infotro/SDi/medias/database-2_object.png
diff --git a/infotro/SDi/medias/database-3_relation.png b/legacy_docs/infotro/SDi/medias/database-3_relation.png
similarity index 100%
rename from infotro/SDi/medias/database-3_relation.png
rename to legacy_docs/infotro/SDi/medias/database-3_relation.png
diff --git a/infotro/SDi/medias/dataflow_in_layer_model.png b/legacy_docs/infotro/SDi/medias/dataflow_in_layer_model.png
similarity index 100%
rename from infotro/SDi/medias/dataflow_in_layer_model.png
rename to legacy_docs/infotro/SDi/medias/dataflow_in_layer_model.png
diff --git a/infotro/SDi/medias/density_graph.png b/legacy_docs/infotro/SDi/medias/density_graph.png
similarity index 100%
rename from infotro/SDi/medias/density_graph.png
rename to legacy_docs/infotro/SDi/medias/density_graph.png
diff --git a/infotro/SDi/medias/example_SAP.png b/legacy_docs/infotro/SDi/medias/example_SAP.png
similarity index 100%
rename from infotro/SDi/medias/example_SAP.png
rename to legacy_docs/infotro/SDi/medias/example_SAP.png
diff --git a/infotro/SDi/medias/http_notifications.png b/legacy_docs/infotro/SDi/medias/http_notifications.png
similarity index 100%
rename from infotro/SDi/medias/http_notifications.png
rename to legacy_docs/infotro/SDi/medias/http_notifications.png
diff --git a/infotro/SDi/medias/http_reminder.png b/legacy_docs/infotro/SDi/medias/http_reminder.png
similarity index 100%
rename from infotro/SDi/medias/http_reminder.png
rename to legacy_docs/infotro/SDi/medias/http_reminder.png
diff --git a/infotro/SDi/medias/json_syntaxe.png b/legacy_docs/infotro/SDi/medias/json_syntaxe.png
similarity index 100%
rename from infotro/SDi/medias/json_syntaxe.png
rename to legacy_docs/infotro/SDi/medias/json_syntaxe.png
diff --git a/infotro/SDi/medias/layers_protocols.png b/legacy_docs/infotro/SDi/medias/layers_protocols.png
similarity index 100%
rename from infotro/SDi/medias/layers_protocols.png
rename to legacy_docs/infotro/SDi/medias/layers_protocols.png
diff --git a/infotro/SDi/medias/osi_model.png b/legacy_docs/infotro/SDi/medias/osi_model.png
similarity index 100%
rename from infotro/SDi/medias/osi_model.png
rename to legacy_docs/infotro/SDi/medias/osi_model.png
diff --git a/infotro/SDi/medias/overview_protocol_example.png b/legacy_docs/infotro/SDi/medias/overview_protocol_example.png
similarity index 100%
rename from infotro/SDi/medias/overview_protocol_example.png
rename to legacy_docs/infotro/SDi/medias/overview_protocol_example.png
diff --git a/infotro/SDi/medias/protocole_exercice_class.uxf b/legacy_docs/infotro/SDi/medias/protocole_exercice_class.uxf
similarity index 100%
rename from infotro/SDi/medias/protocole_exercice_class.uxf
rename to legacy_docs/infotro/SDi/medias/protocole_exercice_class.uxf
diff --git a/infotro/SDi/medias/qos_mqtt.png b/legacy_docs/infotro/SDi/medias/qos_mqtt.png
similarity index 100%
rename from infotro/SDi/medias/qos_mqtt.png
rename to legacy_docs/infotro/SDi/medias/qos_mqtt.png
diff --git a/infotro/SDi/medias/security-cbc.png b/legacy_docs/infotro/SDi/medias/security-cbc.png
similarity index 100%
rename from infotro/SDi/medias/security-cbc.png
rename to legacy_docs/infotro/SDi/medias/security-cbc.png
diff --git a/infotro/SDi/medias/security-diffie_hellman.png b/legacy_docs/infotro/SDi/medias/security-diffie_hellman.png
similarity index 100%
rename from infotro/SDi/medias/security-diffie_hellman.png
rename to legacy_docs/infotro/SDi/medias/security-diffie_hellman.png
diff --git a/infotro/SDi/medias/security-diffie_hellman_color.png b/legacy_docs/infotro/SDi/medias/security-diffie_hellman_color.png
similarity index 100%
rename from infotro/SDi/medias/security-diffie_hellman_color.png
rename to legacy_docs/infotro/SDi/medias/security-diffie_hellman_color.png
diff --git a/infotro/SDi/medias/security-ecb.png b/legacy_docs/infotro/SDi/medias/security-ecb.png
similarity index 100%
rename from infotro/SDi/medias/security-ecb.png
rename to legacy_docs/infotro/SDi/medias/security-ecb.png
diff --git a/infotro/SDi/medias/strategie_3layers.png b/legacy_docs/infotro/SDi/medias/strategie_3layers.png
similarity index 100%
rename from infotro/SDi/medias/strategie_3layers.png
rename to legacy_docs/infotro/SDi/medias/strategie_3layers.png
diff --git a/infotro/SDi/medias/strategie_decouplage.png b/legacy_docs/infotro/SDi/medias/strategie_decouplage.png
similarity index 100%
rename from infotro/SDi/medias/strategie_decouplage.png
rename to legacy_docs/infotro/SDi/medias/strategie_decouplage.png
diff --git a/infotro/SDi/medias/strategie_memory.png b/legacy_docs/infotro/SDi/medias/strategie_memory.png
similarity index 100%
rename from infotro/SDi/medias/strategie_memory.png
rename to legacy_docs/infotro/SDi/medias/strategie_memory.png
diff --git a/infotro/SDi/medias/strategie_rx_tx.png b/legacy_docs/infotro/SDi/medias/strategie_rx_tx.png
similarity index 100%
rename from infotro/SDi/medias/strategie_rx_tx.png
rename to legacy_docs/infotro/SDi/medias/strategie_rx_tx.png
diff --git a/infotro/SDi/medias/strategie_sap.png b/legacy_docs/infotro/SDi/medias/strategie_sap.png
similarity index 100%
rename from infotro/SDi/medias/strategie_sap.png
rename to legacy_docs/infotro/SDi/medias/strategie_sap.png
diff --git a/infotro/SDi/medias/transmission_process-codage_physique-bpsk.png b/legacy_docs/infotro/SDi/medias/transmission_process-codage_physique-bpsk.png
similarity index 100%
rename from infotro/SDi/medias/transmission_process-codage_physique-bpsk.png
rename to legacy_docs/infotro/SDi/medias/transmission_process-codage_physique-bpsk.png
diff --git a/infotro/SDi/medias/transmission_process-codage_physique-qpsk.png b/legacy_docs/infotro/SDi/medias/transmission_process-codage_physique-qpsk.png
similarity index 100%
rename from infotro/SDi/medias/transmission_process-codage_physique-qpsk.png
rename to legacy_docs/infotro/SDi/medias/transmission_process-codage_physique-qpsk.png
diff --git a/infotro/SDi/medias/transmission_process-controle_erreur-arq.png b/legacy_docs/infotro/SDi/medias/transmission_process-controle_erreur-arq.png
similarity index 100%
rename from infotro/SDi/medias/transmission_process-controle_erreur-arq.png
rename to legacy_docs/infotro/SDi/medias/transmission_process-controle_erreur-arq.png
diff --git a/infotro/SDi/medias/transmission_process-controle_erreur-fec.png b/legacy_docs/infotro/SDi/medias/transmission_process-controle_erreur-fec.png
similarity index 100%
rename from infotro/SDi/medias/transmission_process-controle_erreur-fec.png
rename to legacy_docs/infotro/SDi/medias/transmission_process-controle_erreur-fec.png
diff --git a/infotro/SDi/medias/transmission_process-digitalisation_signal.png b/legacy_docs/infotro/SDi/medias/transmission_process-digitalisation_signal.png
similarity index 100%
rename from infotro/SDi/medias/transmission_process-digitalisation_signal.png
rename to legacy_docs/infotro/SDi/medias/transmission_process-digitalisation_signal.png
diff --git a/infotro/SDi/medias/transmission_process-matlab-codage_canal.png b/legacy_docs/infotro/SDi/medias/transmission_process-matlab-codage_canal.png
similarity index 100%
rename from infotro/SDi/medias/transmission_process-matlab-codage_canal.png
rename to legacy_docs/infotro/SDi/medias/transmission_process-matlab-codage_canal.png
diff --git a/infotro/SDi/medias/transmission_process-matlab-decodage_canal.png b/legacy_docs/infotro/SDi/medias/transmission_process-matlab-decodage_canal.png
similarity index 100%
rename from infotro/SDi/medias/transmission_process-matlab-decodage_canal.png
rename to legacy_docs/infotro/SDi/medias/transmission_process-matlab-decodage_canal.png
diff --git a/infotro/SDi/medias/transmission_process-matlab-dequantification.png b/legacy_docs/infotro/SDi/medias/transmission_process-matlab-dequantification.png
similarity index 100%
rename from infotro/SDi/medias/transmission_process-matlab-dequantification.png
rename to legacy_docs/infotro/SDi/medias/transmission_process-matlab-dequantification.png
diff --git a/infotro/SDi/medias/transmission_process-matlab-dequantification_params.png b/legacy_docs/infotro/SDi/medias/transmission_process-matlab-dequantification_params.png
similarity index 100%
rename from infotro/SDi/medias/transmission_process-matlab-dequantification_params.png
rename to legacy_docs/infotro/SDi/medias/transmission_process-matlab-dequantification_params.png
diff --git a/infotro/SDi/medias/transmission_process-matlab-echantiollnage.png b/legacy_docs/infotro/SDi/medias/transmission_process-matlab-echantiollnage.png
similarity index 100%
rename from infotro/SDi/medias/transmission_process-matlab-echantiollnage.png
rename to legacy_docs/infotro/SDi/medias/transmission_process-matlab-echantiollnage.png
diff --git a/infotro/SDi/medias/transmission_process-matlab-quantification.png b/legacy_docs/infotro/SDi/medias/transmission_process-matlab-quantification.png
similarity index 100%
rename from infotro/SDi/medias/transmission_process-matlab-quantification.png
rename to legacy_docs/infotro/SDi/medias/transmission_process-matlab-quantification.png
diff --git a/infotro/SDi/medias/transmission_process-matlab-quantification_params.png b/legacy_docs/infotro/SDi/medias/transmission_process-matlab-quantification_params.png
similarity index 100%
rename from infotro/SDi/medias/transmission_process-matlab-quantification_params.png
rename to legacy_docs/infotro/SDi/medias/transmission_process-matlab-quantification_params.png
diff --git a/infotro/SDi/medias/transmission_process-matlab-reconstruction.png b/legacy_docs/infotro/SDi/medias/transmission_process-matlab-reconstruction.png
similarity index 100%
rename from infotro/SDi/medias/transmission_process-matlab-reconstruction.png
rename to legacy_docs/infotro/SDi/medias/transmission_process-matlab-reconstruction.png
diff --git a/infotro/SDi/medias/transmission_process-transmission_radio-am.png b/legacy_docs/infotro/SDi/medias/transmission_process-transmission_radio-am.png
similarity index 100%
rename from infotro/SDi/medias/transmission_process-transmission_radio-am.png
rename to legacy_docs/infotro/SDi/medias/transmission_process-transmission_radio-am.png
diff --git a/infotro/SDi/medias/transmission_process-transmission_radio-fm.png b/legacy_docs/infotro/SDi/medias/transmission_process-transmission_radio-fm.png
similarity index 100%
rename from infotro/SDi/medias/transmission_process-transmission_radio-fm.png
rename to legacy_docs/infotro/SDi/medias/transmission_process-transmission_radio-fm.png
diff --git a/infotro/SDi/medias/transmission_process-transmission_radio-pm.png b/legacy_docs/infotro/SDi/medias/transmission_process-transmission_radio-pm.png
similarity index 100%
rename from infotro/SDi/medias/transmission_process-transmission_radio-pm.png
rename to legacy_docs/infotro/SDi/medias/transmission_process-transmission_radio-pm.png
diff --git a/infotro/SDi/medias/xml_example.png b/legacy_docs/infotro/SDi/medias/xml_example.png
similarity index 100%
rename from infotro/SDi/medias/xml_example.png
rename to legacy_docs/infotro/SDi/medias/xml_example.png
diff --git a/infotro/SDi/protocol_development.md b/legacy_docs/infotro/SDi/protocol_development.md
similarity index 100%
rename from infotro/SDi/protocol_development.md
rename to legacy_docs/infotro/SDi/protocol_development.md
diff --git a/infotro/SDi/security.md b/legacy_docs/infotro/SDi/security.md
similarity index 100%
rename from infotro/SDi/security.md
rename to legacy_docs/infotro/SDi/security.md
diff --git a/infotro/SDi/transmission_process.md b/legacy_docs/infotro/SDi/transmission_process.md
similarity index 100%
rename from infotro/SDi/transmission_process.md
rename to legacy_docs/infotro/SDi/transmission_process.md
diff --git a/infotro/SEm/ASM.md b/legacy_docs/infotro/SEm/ASM.md
similarity index 100%
rename from infotro/SEm/ASM.md
rename to legacy_docs/infotro/SEm/ASM.md
diff --git a/infotro/SEm/INT.md b/legacy_docs/infotro/SEm/INT.md
similarity index 100%
rename from infotro/SEm/INT.md
rename to legacy_docs/infotro/SEm/INT.md
diff --git a/infotro/SEm/PLA.md b/legacy_docs/infotro/SEm/PLA.md
similarity index 100%
rename from infotro/SEm/PLA.md
rename to legacy_docs/infotro/SEm/PLA.md
diff --git a/infotro/SEm/README.md b/legacy_docs/infotro/SEm/README.md
similarity index 100%
rename from infotro/SEm/README.md
rename to legacy_docs/infotro/SEm/README.md
diff --git a/infotro/SEm/SPR.md b/legacy_docs/infotro/SEm/SPR.md
similarity index 100%
rename from infotro/SEm/SPR.md
rename to legacy_docs/infotro/SEm/SPR.md
diff --git a/infotro/SEm/SoC.md b/legacy_docs/infotro/SEm/SoC.md
similarity index 100%
rename from infotro/SEm/SoC.md
rename to legacy_docs/infotro/SEm/SoC.md
diff --git a/infotro/SEm/medias/Pasted image 20231116153738.png b/legacy_docs/infotro/SEm/medias/Pasted image 20231116153738.png
similarity index 100%
rename from infotro/SEm/medias/Pasted image 20231116153738.png
rename to legacy_docs/infotro/SEm/medias/Pasted image 20231116153738.png
diff --git a/infotro/SEm/medias/Pasted image 20231116154303.png b/legacy_docs/infotro/SEm/medias/Pasted image 20231116154303.png
similarity index 100%
rename from infotro/SEm/medias/Pasted image 20231116154303.png
rename to legacy_docs/infotro/SEm/medias/Pasted image 20231116154303.png
diff --git a/infotro/SEm/medias/Pasted image 20231116154853.png b/legacy_docs/infotro/SEm/medias/Pasted image 20231116154853.png
similarity index 100%
rename from infotro/SEm/medias/Pasted image 20231116154853.png
rename to legacy_docs/infotro/SEm/medias/Pasted image 20231116154853.png
diff --git a/infotro/SEm/medias/Pasted image 20231116155200.png b/legacy_docs/infotro/SEm/medias/Pasted image 20231116155200.png
similarity index 100%
rename from infotro/SEm/medias/Pasted image 20231116155200.png
rename to legacy_docs/infotro/SEm/medias/Pasted image 20231116155200.png
diff --git a/infotro/SEm/medias/cpsr.json b/legacy_docs/infotro/SEm/medias/cpsr.json
similarity index 100%
rename from infotro/SEm/medias/cpsr.json
rename to legacy_docs/infotro/SEm/medias/cpsr.json
diff --git a/infotro/SEm/medias/cpsr.png b/legacy_docs/infotro/SEm/medias/cpsr.png
similarity index 100%
rename from infotro/SEm/medias/cpsr.png
rename to legacy_docs/infotro/SEm/medias/cpsr.png
diff --git a/infotro/SEm/medias/mecanisme_interruption.png b/legacy_docs/infotro/SEm/medias/mecanisme_interruption.png
similarity index 100%
rename from infotro/SEm/medias/mecanisme_interruption.png
rename to legacy_docs/infotro/SEm/medias/mecanisme_interruption.png
diff --git a/infotro/SEm/medias/mosfet.png b/legacy_docs/infotro/SEm/medias/mosfet.png
similarity index 100%
rename from infotro/SEm/medias/mosfet.png
rename to legacy_docs/infotro/SEm/medias/mosfet.png
diff --git a/infotro/SEm/medias/process_bloc.png b/legacy_docs/infotro/SEm/medias/process_bloc.png
similarity index 100%
rename from infotro/SEm/medias/process_bloc.png
rename to legacy_docs/infotro/SEm/medias/process_bloc.png
diff --git a/infotro/SEm/medias/process_seq.png b/legacy_docs/infotro/SEm/medias/process_seq.png
similarity index 100%
rename from infotro/SEm/medias/process_seq.png
rename to legacy_docs/infotro/SEm/medias/process_seq.png
diff --git a/infotro/SEm/medias/process_seq_time.png b/legacy_docs/infotro/SEm/medias/process_seq_time.png
similarity index 100%
rename from infotro/SEm/medias/process_seq_time.png
rename to legacy_docs/infotro/SEm/medias/process_seq_time.png
diff --git a/infotro/SEm/medias/registers.png b/legacy_docs/infotro/SEm/medias/registers.png
similarity index 100%
rename from infotro/SEm/medias/registers.png
rename to legacy_docs/infotro/SEm/medias/registers.png
diff --git a/infotro/_navbar.md b/legacy_docs/infotro/_navbar.md
similarity index 100%
rename from infotro/_navbar.md
rename to legacy_docs/infotro/_navbar.md
diff --git a/scripts/drawio.js b/legacy_docs/scripts/drawio.js
similarity index 100%
rename from scripts/drawio.js
rename to legacy_docs/scripts/drawio.js
diff --git a/scripts/sw.js b/legacy_docs/scripts/sw.js
similarity index 100%
rename from scripts/sw.js
rename to legacy_docs/scripts/sw.js
diff --git a/scripts/viewer.min.js b/legacy_docs/scripts/viewer.min.js
similarity index 100%
rename from scripts/viewer.min.js
rename to legacy_docs/scripts/viewer.min.js
diff --git a/style/_coverpage.md b/legacy_docs/style/_coverpage.md
similarity index 100%
rename from style/_coverpage.md
rename to legacy_docs/style/_coverpage.md
diff --git a/style/yggdrasil.ico b/legacy_docs/style/yggdrasil.ico
similarity index 100%
rename from style/yggdrasil.ico
rename to legacy_docs/style/yggdrasil.ico
diff --git a/style/yggdrasil.svg b/legacy_docs/style/yggdrasil.svg
similarity index 100%
rename from style/yggdrasil.svg
rename to legacy_docs/style/yggdrasil.svg
diff --git a/scripts/bootstrap.sh b/scripts/bootstrap.sh
new file mode 100755
index 0000000..363725c
--- /dev/null
+++ b/scripts/bootstrap.sh
@@ -0,0 +1,43 @@
+#!/usr/bin/env bash
+# Bootstrap the pinned toolchain (Calepin + Typst) into tools/.
+# Idempotent: skips downloads when the binaries are already in place.
+set -euo pipefail
+
+# Pinned toolchain -- bump both binaries together and re-verify checksums.
+calepin_version="0.0.61"
+typst_version="0.15.1"
+# Typst publishes no .sha256 assets; this digest comes from the official
+# release metadata (GitHub asset digest of typst-x86_64-unknown-linux-musl.tar.xz).
+typst_sha256="a6d077d0a95eed5a2eba715b2dae06be954f624ccbf85758a03f389ded33118c"
+
+root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
+tools="$root/tools"
+
+if [ "$(uname -m)" != "x86_64" ]; then
+ echo "error: unsupported architecture $(uname -m), pinned binaries are x86_64" >&2
+ exit 1
+fi
+
+mkdir -p "$tools"
+
+if [ ! -x "$tools/calepin" ]; then
+ name="calepin-x86_64-unknown-linux-gnu.tar.xz"
+ base="https://github.com/vincentarelbundock/calepin/releases/download/v$calepin_version"
+ curl -fsSLo "$tools/$name" "$base/$name"
+ curl -fsSLo "$tools/$name.sha256" "$base/$name.sha256"
+ (cd "$tools" && sha256sum -c "$name.sha256")
+ tar -xJf "$tools/$name" -C "$tools" --strip-components=1 "calepin-x86_64-unknown-linux-gnu/calepin"
+ rm "$tools/$name" "$tools/$name.sha256"
+fi
+
+if [ ! -x "$tools/typst" ]; then
+ name="typst-x86_64-unknown-linux-musl.tar.xz"
+ curl -fsSLo "$tools/$name" "https://github.com/typst/typst/releases/download/v$typst_version/$name"
+ echo "$typst_sha256 $name" > "$tools/$name.sha256"
+ (cd "$tools" && sha256sum -c "$name.sha256")
+ tar -xJf "$tools/$name" -C "$tools" --strip-components=1 "typst-x86_64-unknown-linux-musl/typst"
+ rm "$tools/$name" "$tools/$name.sha256"
+fi
+
+"$tools/calepin" --version
+"$tools/typst" --version
diff --git a/scripts/calepin.sh b/scripts/calepin.sh
new file mode 100755
index 0000000..b8ca051
--- /dev/null
+++ b/scripts/calepin.sh
@@ -0,0 +1,12 @@
+#!/usr/bin/env bash
+# Run the pinned Calepin CLI from tools/, bootstrapping the toolchain on demand.
+set -euo pipefail
+
+root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
+
+if [ ! -x "$root/tools/calepin" ]; then
+ "$root/scripts/bootstrap.sh"
+fi
+
+export PATH="$root/tools:$PATH"
+exec "$root/tools/calepin" "$@"
diff --git a/scripts/clean.sh b/scripts/clean.sh
new file mode 100755
index 0000000..f51527e
--- /dev/null
+++ b/scripts/clean.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+# Remove generated site output and build caches. Never touches tracked files.
+set -euo pipefail
+
+root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
+
+rm -rf "$root/public"
+find "$root/site" -name '.calepin' -prune -exec rm -rf {} +
+find "$root/site" -type f -name '.calepin-entry.*' -delete
diff --git a/site/404.typ b/site/404.typ
new file mode 100644
index 0000000..7c9fae2
--- /dev/null
+++ b/site/404.typ
@@ -0,0 +1,6 @@
+#set document(title: [Not found])
+#metadata((pdf: false))
+
+#title()
+
+The requested page does not exist.
diff --git a/CNAME b/site/CNAME
similarity index 100%
rename from CNAME
rename to site/CNAME
diff --git a/site/assets/yggdrasil.ico b/site/assets/yggdrasil.ico
new file mode 100644
index 0000000..6c33aea
Binary files /dev/null and b/site/assets/yggdrasil.ico differ
diff --git a/site/assets/yggdrasil.svg b/site/assets/yggdrasil.svg
new file mode 100644
index 0000000..e94266f
--- /dev/null
+++ b/site/assets/yggdrasil.svg
@@ -0,0 +1,43 @@
+
+
+
+
diff --git a/site/calepin.toml b/site/calepin.toml
new file mode 100644
index 0000000..3d3e9fd
--- /dev/null
+++ b/site/calepin.toml
@@ -0,0 +1,91 @@
+title = "Yggdrasil"
+description = "Personal knowledge base."
+base-url = "https://yggdrasil.kb28.ch"
+theme = "themes/yggdrasil"
+pdf = true
+minify = true
+search = "pagefind"
+logo = "assets/yggdrasil.svg"
+favicon = "assets/yggdrasil.ico"
+
+[robots]
+enabled = false
+
+[pages]
+include = ["tags.typ"]
+exclude = ["drafts/**"]
+
+[static]
+include = [
+ "assets/**",
+ "CNAME"
+]
+exclude = ["drafts/**"]
+
+[menus]
+main = [
+ { label = "Home", target = "home/index.typ" },
+ { label = "IT", target = "it/index.typ" },
+ { label = "OT", target = "ot/index.typ" },
+ { label = "Security", target = "security/index.typ" },
+ { label = "Medias", target = "medias/index.typ" },
+]
+social = [
+ { label = "{icon:simple-icons:gitea}", target = "https://git.kb28.ch/Klagarge/Yggdrasil", aria-label = "Gitea" },
+]
+
+
+[footer]
+item = [
+ { label = "© 2026" },
+ { label = "@Klagarge", target = "https://git.kb28.ch/Klagarge" },
+ { label = "@Fastium", target = "https://github.com/Fastium" },
+]
+
+[sidebar]
+fold = true
+
+[[sidebar.section]]
+title = "Home"
+item = [
+ { target = "home/index.typ" },
+ { glob = "home/*" }
+]
+
+
+[[sidebar.section]]
+title = "IT"
+item = [
+ { target = "it/index.typ" },
+ { glob = "it/*" }
+]
+
+[[sidebar.section]]
+title = "OT"
+item = [
+ { target = "ot/index.typ" },
+ { glob = "ot/*" }
+]
+
+[[sidebar.section]]
+title = "Security"
+item = [
+ { target = "security/index.typ" },
+ { glob = "security/*" }
+]
+
+[[sidebar.section]]
+title = "Medias"
+target = "medias/index.typ"
+item = [
+ # { glob = "medias/films/*.typ" },
+ # { glob = "medias/series/*.typ" },
+ # { glob = "medias/books/*.typ" },
+ { target = "medias/index.typ" },
+ { glob = "medias/*.typ" },
+]
+section = [
+ { title = "Films", item = [{ glob = "medias/films/*.typ" }] },
+ { title = "Series", item = [{ glob = "medias/series/*.typ" }] },
+ { title = "Books", item = [{ glob = "medias/books/*.typ" }] },
+]
diff --git a/site/home/cooking.typ b/site/home/cooking.typ
new file mode 100644
index 0000000..c526776
--- /dev/null
+++ b/site/home/cooking.typ
@@ -0,0 +1,6 @@
+#set document(title: [Cooking])
+#metadata((title: "Cooking", translation_key: "home-cooking"))
+
+#title()
+
+Placeholder page — the real content comes later.
diff --git a/site/home/gardening.typ b/site/home/gardening.typ
new file mode 100644
index 0000000..f3da685
--- /dev/null
+++ b/site/home/gardening.typ
@@ -0,0 +1,6 @@
+#set document(title: [Gardening])
+#metadata((title: "Gardening", translation_key: "home-gardening"))
+
+#title()
+
+Placeholder page — the real content comes later.
diff --git a/site/home/index.typ b/site/home/index.typ
new file mode 100644
index 0000000..caa2739
--- /dev/null
+++ b/site/home/index.typ
@@ -0,0 +1,7 @@
+#set document(title: [Home])
+#metadata((title: "Overview", translation_key: "home-index"))
+
+#title()
+
+Placeholder page for the home category: cooking, washing clothes, gardening.
+The real content comes later.
diff --git a/site/home/washing-clothes.typ b/site/home/washing-clothes.typ
new file mode 100644
index 0000000..c4b4a0a
--- /dev/null
+++ b/site/home/washing-clothes.typ
@@ -0,0 +1,6 @@
+#set document(title: [Washing clothes])
+#metadata((title: "Washing clothes", translation_key: "home-washing-clothes"))
+
+#title()
+
+Placeholder page — the real content comes later.
diff --git a/site/index.typ b/site/index.typ
new file mode 100644
index 0000000..cd7143a
--- /dev/null
+++ b/site/index.typ
@@ -0,0 +1,7 @@
+#set document(title: [Yggdrasil])
+#metadata((title: "Home", translation_key: "home", layout: "layouts/site-landing.html"))
+
+#title()
+
+Welcome to Yggdrasil, my personal knowledge base.
+Pick a master category from the menu
diff --git a/site/it/index.typ b/site/it/index.typ
new file mode 100644
index 0000000..4faf389
--- /dev/null
+++ b/site/it/index.typ
@@ -0,0 +1,7 @@
+#set document(title: [IT])
+#metadata((title: "Overview", translation_key: "it-index"))
+
+#title()
+
+Placeholder page for the IT category.
+The real content comes later.
diff --git a/site/medias/books/le_grand_cahier.typ b/site/medias/books/le_grand_cahier.typ
new file mode 100644
index 0000000..82dd99f
--- /dev/null
+++ b/site/medias/books/le_grand_cahier.typ
@@ -0,0 +1,11 @@
+#set document(title: [Le Grand Cahier])
+#metadata((
+ translation_key: "le_grand_cahier",
+ date: "2026-10-10",
+ author: "Rémi Heredero",
+ pdf: true
+))
+
+#title()
+
+This book is awesome!
diff --git a/site/medias/films/h2g2.typ b/site/medias/films/h2g2.typ
new file mode 100644
index 0000000..1d5e06d
--- /dev/null
+++ b/site/medias/films/h2g2.typ
@@ -0,0 +1,10 @@
+#set document(title: [H2G2])
+#metadata((
+ translation_key: "h2g2",
+ date: "2026-10-10",
+ author: "Rémi Heredero",
+ pdf: true
+))
+
+#title()
+One of my favourites films!
diff --git a/site/medias/index.typ b/site/medias/index.typ
new file mode 100644
index 0000000..7a28e38
--- /dev/null
+++ b/site/medias/index.typ
@@ -0,0 +1,43 @@
+#set document(title: [Medias])
+#metadata((
+ title: "Overview",
+ translation_key: "medias-overview",
+ date: "2026-10-10",
+ tags: ("medias", "films", "series", "books"),
+ author: "Rémi Heredero",
+ summary: "My very opinionned ideas about somes films, series and books",
+ draft: false,
+ pdf: false
+))
+
+#title()
+
+Placeholder page for the medias category.
+The real content comes later.
+
+#import "@preview/calepin:0.1.0" as calepin
+#show: calepin.document
+
+== Films
+#let posts = calepin.pages().filter(p => p.path.starts-with("medias/films/")).filter(p => not p.meta.at("draft", default: false)).sorted(key: p => p.meta.at("date", default: "")).rev()
+
+#for post in posts [
+ - #link(post.href)[#post.title] \
+ #post.meta.at("summary", default: [])
+]
+
+== Series
+#let posts = calepin.pages().filter(p => p.path.starts-with("medias/series/")).filter(p => not p.meta.at("draft", default: false)).sorted(key: p => p.meta.at("date", default: "")).rev()
+
+#for post in posts [
+ - #link(post.href)[#post.title] \
+ #post.meta.at("summary", default: [])
+]
+
+== Books
+#let posts = calepin.pages().filter(p => p.path.starts-with("medias/books/")).filter(p => not p.meta.at("draft", default: false)).sorted(key: p => p.meta.at("date", default: "")).rev()
+
+#for post in posts [
+ - #link(post.href)[#post.title] \
+ #post.meta.at("summary", default: [])
+]
diff --git a/site/medias/plex.typ b/site/medias/plex.typ
new file mode 100644
index 0000000..a21479c
--- /dev/null
+++ b/site/medias/plex.typ
@@ -0,0 +1,12 @@
+#set document(title: [Plex])
+#metadata((
+ translation_key: "plex",
+ date: "2026-10-10",
+ author: "Rémi Heredero",
+ summary: "Plex is a media server",
+ pdf: true
+))
+
+#title()
+
+I think I'll switch to Jellyfin not in so long time
diff --git a/site/medias/series/the_expanse.typ b/site/medias/series/the_expanse.typ
new file mode 100644
index 0000000..140cb33
--- /dev/null
+++ b/site/medias/series/the_expanse.typ
@@ -0,0 +1,17 @@
+#set document(title: [The Expanse])
+#metadata((
+ translation_key: "the_expanse",
+ date: "2026-10-10",
+ author: "Rémi Heredero",
+ summary: " - S01: 9/10
+ - S02: 9/10
+ - S03: 8/10
+ - S04: 8/10
+ - S05: 8/10
+ - S06: 8/10",
+ pdf: true
+))
+
+#title()
+
+I love hard science!
diff --git a/site/ot/index.typ b/site/ot/index.typ
new file mode 100644
index 0000000..cb87941
--- /dev/null
+++ b/site/ot/index.typ
@@ -0,0 +1,7 @@
+#set document(title: [OT])
+#metadata((title: "Overview", translation_key: "ot-index"))
+
+#title()
+
+Placeholder page for the OT category.
+The real content comes later.
diff --git a/site/security/index.typ b/site/security/index.typ
new file mode 100644
index 0000000..0d70aa4
--- /dev/null
+++ b/site/security/index.typ
@@ -0,0 +1,7 @@
+#set document(title: [Security])
+#metadata((title: "Overview", translation_key: "security"))
+
+#title()
+
+Placeholder page for the security category.
+The real content comes later.
diff --git a/site/security/ssh.typ b/site/security/ssh.typ
new file mode 100644
index 0000000..6ca0c38
--- /dev/null
+++ b/site/security/ssh.typ
@@ -0,0 +1,6 @@
+#set document(title: [SSH])
+#metadata((title: "SSH", translation_key: "security-ssh"))
+
+#title()
+
+Placeholder page — the real content comes later.
diff --git a/site/tags.typ b/site/tags.typ
new file mode 100644
index 0000000..26d2015
--- /dev/null
+++ b/site/tags.typ
@@ -0,0 +1,23 @@
+#import "/.calepin/calepin.typ" as calepin
+#show: calepin.document
+
+#let taxonomy(field) = {
+ let pages = calepin.pages()
+ .filter(page => page.meta.at(field, default: ()) != ())
+ let terms = pages
+ .map(page => page.meta.at(field))
+ .flatten()
+ .dedup()
+ .sorted(key: term => lower(term))
+
+ for term in terms {
+ heading(term, level: 2)
+ for page in pages.filter(
+ page => term in page.meta.at(field)
+ ) [
+ - #link(page.href)[#page.title]
+ ]
+ }
+}
+
+#taxonomy("tags")
diff --git a/site/themes/yggdrasil/layouts/site-landing.html b/site/themes/yggdrasil/layouts/site-landing.html
new file mode 100644
index 0000000..0f8e955
--- /dev/null
+++ b/site/themes/yggdrasil/layouts/site-landing.html
@@ -0,0 +1,293 @@
+{% set calepin_theme_storage_key = "calepin-website-theme" %}
+{% set calepin_theme_param = "theme" %}
+{% include "partials/site-head.html" %}
+
+{{ doc.body_open }}
+{% set show_site_sidebar = false %}
+{% include "partials/site-nav.html" %}
+
+ {{ doc.body }}
+
+{% include "partials/site-footer.html" %}
+{% include "partials/site-search.html" %}
+{% include "partials/theme-scripts.html" %}
+{{ doc.body_close }}
diff --git a/site/themes/yggdrasil/partials/site-nav-sidebar.html b/site/themes/yggdrasil/partials/site-nav-sidebar.html
new file mode 100644
index 0000000..5018419
--- /dev/null
+++ b/site/themes/yggdrasil/partials/site-nav-sidebar.html
@@ -0,0 +1,47 @@
+
diff --git a/site/themes/yggdrasil/theme.toml b/site/themes/yggdrasil/theme.toml
new file mode 100644
index 0000000..4f40ac0
--- /dev/null
+++ b/site/themes/yggdrasil/theme.toml
@@ -0,0 +1 @@
+extends = "calepin"