diff --git a/README.md b/README.md
index f0e3cdf..928eb2c 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,112 @@
-# ndx-extracellular-channels
\ No newline at end of file
+# ndx-extracellular-channels
+
+
+
+## Diagram
+
+
+```mermaid
+%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#ffffff', "primaryBorderColor': '#144E73', 'lineColor': '#D96F32'}}}%%
+
+
+classDiagram
+    direction LR
+
+    class ExtracellularSeries {
+        <<ElectricalSeries>>
+
+        channels : DynamicTableRegion
+        --> target : ChannelsTable
+    }
+
+    class ChannelsTable{
+        <<DynamicTable>>
+        --------------------------------------
+        attributes
+        --------------------------------------
+        name : str
+        description : str
+        probe : ProbeModel
+        probe_insertion : ProbeInsertion, optional
+        contacts : DynamicTableRegion, optional?
+        --> target : ContactsTable
+        reference_contact :  DynamicTableRegion, optional
+        --> target : ContactsTable
+        reference_mode : Literal["external wire", ...], optional
+
+        --------------------------------------
+        columns
+        --------------------------------------
+        id : int
+        filter : VectorData, optional
+        ---> Values strings such as "Bandpass 0-300 Hz".
+        contact_position [x, y, z] : VectorData, optional
+        ---> Each value is length 3 tuple of floats.
+        brain_area : VectorData, optional
+        --> data : str
+        ----> Plays the role of the old 'location'.
+        ... Any other custom columns, such analong frontend e.g. ADC information
+    }
+
+    class ProbeInsertion {
+        <<Container>>
+
+        insertion_position : Tuple[float, float, float], optional
+        ----> Stereotactic coordinates on surface.
+        depth_in_um : float, optional
+        insertion_angle : Tuple[float, float, float], optional
+        ----> The pitch/roll/yaw relative to the position on the surface.
+    }
+
+
+    namespace ProbeInterface{
+        class Probe {
+                <<Device>>
+
+                identifier : str
+                --> Usually the serial number
+                probe_model : ProbeModel
+            }
+
+            class ProbeModel {
+                <<Not sure what type>>
+
+                name : str
+                manufactuer : str
+                model : str
+                contour : List[Tuple[float, float], Tuple[float, float, float]]
+                contact_table : ContactsTable
+            }
+
+            class ContactTable {
+                <<DynamicTable>>
+
+                --------------------------------------
+                attributes
+                --------------------------------------
+                name : str
+                description : str
+                
+                --------------------------------------
+                columns
+                --------------------------------------
+                id : int
+                shape : str, optional
+                size : str, optional
+                shank_id : str, optional
+                relative_position : List[Tuple[float, float], Tuple[float, float, float]], optional
+            }
+    }
+
+ 
+
+    ExtracellularSeries ..> ChannelsTable : links with channels
+    ProbeModel *--> ContactTable : contains
+    Probe *..> ProbeModel : links with probe_model
+    ChannelsTable *..> Probe : links  with probe
+
+    ChannelsTable ..> ContactTable : links with contacts
+
+    ChannelsTable *--> ProbeInsertion: might contain ProbeInsertion
+    note for ChannelsTable "ChannelsTable is no longer global"
+```
\ No newline at end of file