diff --git a/README.md b/README.md
index 99fc688cb18d9301e1dba89f41491cf1e948ad4f..acfdf037cdb3068d810ec0a153adaf3299294952 100644
--- a/README.md
+++ b/README.md
@@ -4,6 +4,22 @@
 
 Link: [robotlearn.gitlabpages.inria.fr/cluster-monitor](https://robotlearn.gitlabpages.inria.fr/cluster-monitor/)
 
+## Implementation overview
+
+The cluster monitor counts three entities:
+- The **data fetcher** is running directly on an inria workstation (currently `alya`). It is
+  performing `ssh` commands to other nodes (especially `access1-cp`) to gather the cluster state.\
+  **Code:** `rl_hm/data_fetcher/`
+- The **backend server** is running on a Linux server external to Inria and is receiving the **data
+  fetcher** updates through an TCP socket connection running over an SSH tunnel.
+  It exposes a [Socket.IO](https://socket.io/) server to the web clients that connect to it.
+  As soon as it receives an update from the **data fetcher**, it pushes it to all of the connected
+  clients through the _socket-io_ connection.\
+  **Code:** `rl_hm/backend/`
+- Finally, the web clients run a javascript application that connects to the _socket-io_ server
+  (**backend**) and updates the html page with the reveived data.\
+  **Code:** `public/`
+
 ## Acknowlegment
 
 - **David Emukpere:** for his numerous advice and help about web development and infrastructure.