diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e2e7327
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/out
diff --git a/build.py b/build.py
new file mode 100755
index 0000000..af2db2a
--- /dev/null
+++ b/build.py
@@ -0,0 +1,41 @@
+#! /usr/bin/env python3
+"""Build graph."""
+
+from pathlib import Path
+
+from rwx.fs import make_directory, read_file_text, write
+from rwx.ps import run
+
+if __name__ == "__main__":
+ root = Path(__file__).parent
+ out = root / "out" / "web"
+ gv = root / "index.gv"
+ svg = out / "index.svg"
+ make_directory(out)
+ run("dot", str(gv), "-Tsvg", "-o", str(svg))
+ text = read_file_text(svg)
+ write(
+ out / "index.css",
+ """\
+html {
+background-color: #202020;
+}
+""",
+ )
+ write(
+ out / "index.html",
+ f"""\
+
+
+
+
+
+work.marc.beninca.link
+
+
+
+{text}
+
+
+""",
+ )
diff --git a/index.gv b/index.gv
new file mode 100644
index 0000000..d80fffc
--- /dev/null
+++ b/index.gv
@@ -0,0 +1,149 @@
+# ╭───────╮
+# │ Graph │
+# ╰───────╯
+digraph "index" {
+bgcolor="transparent"
+color="#C0C000"
+fontcolor="#FF8000"
+fontname="DejaVu Sans"
+penwidth="2"
+rankdir="RL"
+
+# ╭───────┬──────╮
+# │ Graph │ Edge │
+# ╰───────┴──────╯
+edge [
+fontcolor="#FF4040"
+fontname="DejaVu Sans"
+style="filled"
+]
+
+# ╭───────┬──────╮
+# │ Graph │ Edge │
+# ╰───────┴──────╯
+node [
+color="#C0C0C0"
+fontcolor="#FFFFFF"
+fontname="DejaVu Sans"
+penwidth="2"
+shape="record"
+style="filled"
+]
+
+{ rank="max"
+"" [style="invis"]
+}
+
+edge [color="#008000"]
+node [fillcolor="#408040"]
+
+edge [color="#FF0000"]
+node [fillcolor="#303030"]
+
+# ╭────────╮
+# │ Online │
+# ╰────────╯
+
+subgraph cluster_online {
+label="Online"
+
+# ╭────────┬─────────╮
+# │ Online │ Beninca │
+# ╰────────┴─────────╯
+
+subgraph cluster_online_beninca {
+label="beninca.link"
+URL="https://beninca.link"
+
+online_beninca_marc [
+fontcolor="#8080FF"
+label="Marc"
+URL="https://marc.beninca.link"
+]
+
+}
+
+# ╭────────┬─────╮
+# │ Online │ RWX │
+# ╰────────┴─────╯
+
+subgraph cluster_online_rwx {
+label="rwx.work"
+URL="https://rwx.work"
+
+online_rwx_forge [
+fontcolor="#8080FF"
+label="Forge"
+URL="https://forge.rwx.work"
+]
+
+online_rwx_software [
+fontcolor="#8080FF"
+label="Software"
+URL="https://software.rwx.work"
+]
+
+}
+
+}
+
+# ╭────────╮
+# │ Mobile │
+# ╰────────╯
+
+subgraph cluster_mobile {
+label="Mobile"
+
+# ╭────────┬──────╮
+# │ Mobile │ Sony │
+# ╰────────┴──────╯
+
+subgraph cluster_mobile_sony {
+label="Sony"
+
+mobile_sony_records [
+label="Records"
+]
+
+}
+
+# ╭────────┬─────╮
+# │ Mobile │ SSD │
+# ╰────────┴─────╯
+
+subgraph cluster_mobile_ssd {
+label="SSD"
+
+mobile_ssd_dev [
+label="{
+
+ GRUB | { BIOS | ESP }
+
+}|
+
+ Data
+| { Boot | { Latest | Stable | Images } }
+| Memories
+| { Projects | { LSGM | OFSP } }
+| …
+
+"
+]
+
+}
+
+}
+
+mobile_ssd_dev:lsgm:e -> mobile_ssd_dev:grub:w
+
+mobile_sony_records -> mobile_ssd_dev:memories
+
+html [shape="plaintext" label=<
+GRUB | BIOS |
+ESP |
+Data | Memories |
+… |
+
>]
+html:data -> html:grub
+
+}