diff --git a/README.md b/README.md
index 13c62e57c10b9e687849414929357b3838ff6c4c..5b2a065eed93e866f1df5d06261f887dc381e687 100644
--- a/README.md
+++ b/README.md
@@ -2,3 +2,5 @@
 
 A toy project to showcase how CI can be implemented on DZ2 software.
 This is not done on the actual DZ2 software but on toy distributed software.
+
+![software overview](softwares.svg "Software overview")
diff --git a/softwares.gv b/softwares.gv
new file mode 100644
index 0000000000000000000000000000000000000000..625d79591adcd5e9af1faa5d8d769e629e473fe8
--- /dev/null
+++ b/softwares.gv
@@ -0,0 +1,24 @@
+digraph {
+  rankdir="BT";
+
+  "hello.proto" [shape="note"];
+  "protobuf" [shape=box, fillcolor="#1f78b4", fontcolor=white, style=filled];
+  "zeromq" [shape=box, fillcolor="#1f78b4", fontcolor=white, style=filled];
+  "simgrid" [shape=box, fillcolor="#1f78b4", fontcolor=white, style=filled];
+  "proto C++ lib" [shape=box, fillcolor="#a6cee3", fontcolor=black, style=filled];
+  "proto python lib" [shape=box, fillcolor="#a6cee3", fontcolor=black, style=filled];
+  "simulator" [shape=ellipse, fillcolor="#b2df8a", fontcolor=black, style=filled];
+  "client-cpp" [shape=ellipse, fillcolor="#b2df8a", fontcolor=black, style=filled];
+  "client-py" [shape=ellipse, fillcolor="#b2df8a", fontcolor=black, style=filled];
+
+  "proto C++ lib" -> "hello.proto";
+  "proto C++ lib" -> "protobuf";
+  "proto python lib" -> "hello.proto";
+  "proto python lib" -> "protobuf";
+  "simulator" -> "simgrid";
+  "simulator" -> "proto C++ lib";
+  "client-cpp" -> "proto C++ lib";
+  "client-cpp" -> "zeromq";
+  "client-py" -> "proto python lib";
+  "client-py" -> "zeromq";
+}
diff --git a/softwares.svg b/softwares.svg
new file mode 100644
index 0000000000000000000000000000000000000000..07f70d46e8e5db6baa730abfa4823f4fb6981db8
--- /dev/null
+++ b/softwares.svg
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.50.0 (0)
+ -->
+<!-- Pages: 1 -->
+<svg width="451pt" height="188pt"
+ viewBox="0.00 0.00 451.00 188.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 184)">
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-184 447,-184 447,4 -4,4"/>
+<!-- hello.proto -->
+<g id="node1" class="node">
+<title>hello.proto</title>
+<polygon fill="none" stroke="black" points="386.5,-180 298.5,-180 298.5,-144 392.5,-144 392.5,-174 386.5,-180"/>
+<polyline fill="none" stroke="black" points="386.5,-180 386.5,-174 "/>
+<polyline fill="none" stroke="black" points="392.5,-174 386.5,-174 "/>
+<text text-anchor="middle" x="345.5" y="-158.3" font-family="Times,serif" font-size="14.00">hello.proto</text>
+</g>
+<!-- protobuf -->
+<g id="node2" class="node">
+<title>protobuf</title>
+<polygon fill="#1f78b4" stroke="black" points="249.5,-180 171.5,-180 171.5,-144 249.5,-144 249.5,-180"/>
+<text text-anchor="middle" x="210.5" y="-158.3" font-family="Times,serif" font-size="14.00" fill="white">protobuf</text>
+</g>
+<!-- zeromq -->
+<g id="node3" class="node">
+<title>zeromq</title>
+<polygon fill="#1f78b4" stroke="black" points="293.5,-108 223.5,-108 223.5,-72 293.5,-72 293.5,-108"/>
+<text text-anchor="middle" x="258.5" y="-86.3" font-family="Times,serif" font-size="14.00" fill="white">zeromq</text>
+</g>
+<!-- simgrid -->
+<g id="node4" class="node">
+<title>simgrid</title>
+<polygon fill="#1f78b4" stroke="black" points="71,-108 0,-108 0,-72 71,-72 71,-108"/>
+<text text-anchor="middle" x="35.5" y="-86.3" font-family="Times,serif" font-size="14.00" fill="white">simgrid</text>
+</g>
+<!-- proto C++ lib -->
+<g id="node5" class="node">
+<title>proto C++ lib</title>
+<polygon fill="#a6cee3" stroke="black" points="205.5,-108 89.5,-108 89.5,-72 205.5,-72 205.5,-108"/>
+<text text-anchor="middle" x="147.5" y="-86.3" font-family="Times,serif" font-size="14.00">proto C++ lib</text>
+</g>
+<!-- proto C++ lib&#45;&gt;hello.proto -->
+<g id="edge1" class="edge">
+<title>proto C++ lib&#45;&gt;hello.proto</title>
+<path fill="none" stroke="black" d="M195.68,-108.03C223.76,-117.96 259.32,-130.53 288.75,-140.94"/>
+<polygon fill="black" stroke="black" points="287.88,-144.34 298.47,-144.37 290.21,-137.74 287.88,-144.34"/>
+</g>
+<!-- proto C++ lib&#45;&gt;protobuf -->
+<g id="edge2" class="edge">
+<title>proto C++ lib&#45;&gt;protobuf</title>
+<path fill="none" stroke="black" d="M163.07,-108.3C170.7,-116.78 180.02,-127.14 188.38,-136.42"/>
+<polygon fill="black" stroke="black" points="185.81,-138.8 195.11,-143.9 191.02,-134.12 185.81,-138.8"/>
+</g>
+<!-- proto python lib -->
+<g id="node6" class="node">
+<title>proto python lib</title>
+<polygon fill="#a6cee3" stroke="black" points="443,-108 312,-108 312,-72 443,-72 443,-108"/>
+<text text-anchor="middle" x="377.5" y="-86.3" font-family="Times,serif" font-size="14.00">proto python lib</text>
+</g>
+<!-- proto python lib&#45;&gt;hello.proto -->
+<g id="edge3" class="edge">
+<title>proto python lib&#45;&gt;hello.proto</title>
+<path fill="none" stroke="black" d="M369.59,-108.3C365.95,-116.27 361.55,-125.9 357.51,-134.74"/>
+<polygon fill="black" stroke="black" points="354.29,-133.35 353.32,-143.9 360.66,-136.26 354.29,-133.35"/>
+</g>
+<!-- proto python lib&#45;&gt;protobuf -->
+<g id="edge4" class="edge">
+<title>proto python lib&#45;&gt;protobuf</title>
+<path fill="none" stroke="black" d="M336.65,-108.12C313.29,-117.91 283.85,-130.26 259.28,-140.55"/>
+<polygon fill="black" stroke="black" points="257.65,-137.44 249.78,-144.53 260.36,-143.9 257.65,-137.44"/>
+</g>
+<!-- simulator -->
+<g id="node7" class="node">
+<title>simulator</title>
+<ellipse fill="#b2df8a" stroke="black" cx="79.5" cy="-18" rx="55.49" ry="18"/>
+<text text-anchor="middle" x="79.5" y="-14.3" font-family="Times,serif" font-size="14.00">simulator</text>
+</g>
+<!-- simulator&#45;&gt;simgrid -->
+<g id="edge5" class="edge">
+<title>simulator&#45;&gt;simgrid</title>
+<path fill="none" stroke="black" d="M68.85,-35.95C63.74,-44.08 57.5,-54 51.81,-63.06"/>
+<polygon fill="black" stroke="black" points="48.72,-61.4 46.36,-71.72 54.64,-65.12 48.72,-61.4"/>
+</g>
+<!-- simulator&#45;&gt;proto C++ lib -->
+<g id="edge6" class="edge">
+<title>simulator&#45;&gt;proto C++ lib</title>
+<path fill="none" stroke="black" d="M95.62,-35.59C103.92,-44.14 114.22,-54.74 123.44,-64.23"/>
+<polygon fill="black" stroke="black" points="121.07,-66.82 130.55,-71.55 126.09,-61.94 121.07,-66.82"/>
+</g>
+<!-- client&#45;cpp -->
+<g id="node8" class="node">
+<title>client&#45;cpp</title>
+<ellipse fill="#b2df8a" stroke="black" cx="230.5" cy="-18" rx="55.79" ry="18"/>
+<text text-anchor="middle" x="230.5" y="-14.3" font-family="Times,serif" font-size="14.00">client&#45;cpp</text>
+</g>
+<!-- client&#45;cpp&#45;&gt;zeromq -->
+<g id="edge8" class="edge">
+<title>client&#45;cpp&#45;&gt;zeromq</title>
+<path fill="none" stroke="black" d="M237.28,-35.95C240.43,-43.82 244.25,-53.38 247.78,-62.21"/>
+<polygon fill="black" stroke="black" points="244.63,-63.74 251.59,-71.72 251.13,-61.14 244.63,-63.74"/>
+</g>
+<!-- client&#45;cpp&#45;&gt;proto C++ lib -->
+<g id="edge7" class="edge">
+<title>client&#45;cpp&#45;&gt;proto C++ lib</title>
+<path fill="none" stroke="black" d="M211.25,-35.24C200.67,-44.16 187.34,-55.4 175.61,-65.29"/>
+<polygon fill="black" stroke="black" points="173.19,-62.75 167.8,-71.88 177.7,-68.1 173.19,-62.75"/>
+</g>
+<!-- client&#45;py -->
+<g id="node9" class="node">
+<title>client&#45;py</title>
+<ellipse fill="#b2df8a" stroke="black" cx="366.5" cy="-18" rx="50.89" ry="18"/>
+<text text-anchor="middle" x="366.5" y="-14.3" font-family="Times,serif" font-size="14.00">client&#45;py</text>
+</g>
+<!-- client&#45;py&#45;&gt;zeromq -->
+<g id="edge10" class="edge">
+<title>client&#45;py&#45;&gt;zeromq</title>
+<path fill="none" stroke="black" d="M343.33,-34.02C328.9,-43.37 310.04,-55.59 293.78,-66.13"/>
+<polygon fill="black" stroke="black" points="291.54,-63.41 285.05,-71.79 295.35,-69.29 291.54,-63.41"/>
+</g>
+<!-- client&#45;py&#45;&gt;proto python lib -->
+<g id="edge9" class="edge">
+<title>client&#45;py&#45;&gt;proto python lib</title>
+<path fill="none" stroke="black" d="M369.22,-36.3C370.43,-44.02 371.89,-53.29 373.24,-61.89"/>
+<polygon fill="black" stroke="black" points="369.8,-62.56 374.81,-71.9 376.72,-61.47 369.8,-62.56"/>
+</g>
+</g>
+</svg>