diff --git a/README.md b/README.md
index b424d34fc424460374957902c850ec6120160299..3b81131a4148194475908baf93e922bab80f51a6 100644
--- a/README.md
+++ b/README.md
@@ -2,28 +2,23 @@
 
 [[_TOC_]]
 
-## Common Infrastructure
-### Install git
-Install git on your operating system following [these instructions](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
+## Installation
+Install Plot Serializer with pip:
 
-### Install VS Code
-[Install VS Code](https://code.visualstudio.com/) on the operating system of your choice.
-
-After the installation is finished, you can install extensions of your choice. This project contains extension recommendations in the `.vscode/extensions.json` file.
-
-Note that there are hundreds of other extensions that can support you in various tasks - it is worth looking for tips and tricks online. We leave this up to you and name only the most basic ones for the start.
+```cmd
+pip install plot-serializer
+```
 
-### Clone this repository wherever you want to have it
-Access the folder/directory of your choice and clone (make a local copy) of this repository on your machine by running
+## Contributing
+Clone this repository with
 
-```bash
-git clone https://git.rwth-aachen.de/fst-tuda/projects/rdm/plot-serializer.git
+```cmd
+git clone git@git.rwth-aachen.de:rdm-tools/plot-serializer.git
 ```
 
-If the authentication fails, you might need to add the ssh key beforehands - this will be the case if you want to access GitLab from a new machine.
 
 
-### Create a virtual environment to get the required packages
+### Creating the virtual environment
 On Windows, run
 
 ```cmd
@@ -54,27 +49,15 @@ Update the `requirements.txt` file when you install new packages.
 
 For more detailed instructions, check https://packaging.python.org/en/latest/guides/installing-using-pip-and-virtual-environments/.
 
-# Writing Good Code
-
-## Language Rules
-
 ### Linting
-This project uses the `flake8` linter. Linting is a static code analysis for finding programming errors, bugs, stylistic errors and suspicious constructs that do not conform with a standard - in case of flake8, with the standard [PEP8](https://peps.python.org/pep-0008/).
-
-`flake8` will inform you about pep8 errors upon saving directly in the editor by underlining the relevant parts of code.
-
-### Autoformatting
-This project uses the `black` autoformatter and formats your code on save. Autoformatted code will look the same regardless of who wrote it and regardless of the project, so that you can focus more on the content.
-
+This project uses the `flake8` linter and the `black` autoformatter.
 
-## Style Rules
 ### Documentation
 Documentation is an essential part of writing code.
 
 :warning: All public functions, methods, classes and modules must be properly documented with docstrings.
 
-To generate a docstring, right-click on a class, function, method or module and click on `Generate Docstring`.
-This will generate a `google`-style docstring template that you have to fill out. An example for a good docstring:
+This project uses `google`-style docstrings. An example for a good docstring:
 
 ```python
 def find_largest_distance(point, polygon):
diff --git a/doc/Getting Started.rst b/doc/Getting Started.rst
new file mode 100644
index 0000000000000000000000000000000000000000..8fed0614334bae54580231636b89bb571343b993
--- /dev/null
+++ b/doc/Getting Started.rst	
@@ -0,0 +1,92 @@
+Getting Started
+===============
+
+Installation
+------------
+Install Plot Serializer by running
+
+.. code-block:: python
+
+    pip install plot-serializer
+
+
+Serializing your first plot
+---------------------------
+We will serialize an example matplotlib plot that we have created as follows:
+
+.. code-block:: python
+
+    import numpy as np
+    import matplotlib.pyplot as plt
+
+    np.random.seed(19680801)
+
+    X = np.round(np.linspace(0.5, 3.5, 100), 3)
+    Y1 = 3 + np.cos(X)
+    Y2 = 1 + np.cos(1 + X / 0.75) / 2
+    Y3 = np.round(np.random.uniform(Y1, Y2, len(X)), 3)
+
+    fig1 = plt.figure(figsize=(7.5, 7.5))
+    ax = fig1.add_axes([0.2, 0.17, 0.68, 0.7], aspect=1)
+
+    ax.set_xlim(0, 4)
+    ax.set_ylim(0, 4)
+
+    ax.tick_params(which="major", width=1.0, length=10, labelsize=14)
+    ax.tick_params(which="minor", width=1.0, length=5, labelsize=10, labelcolor="0.25")
+
+    ax.grid(linestyle="--", linewidth=0.5, color=".25", zorder=-10)
+
+    ax.plot(X, Y1, c="C0", lw=2.5, label="Blue signal", zorder=10)
+    ax.plot(X, Y2, c="C1", lw=2.5, label="Orange signal")
+
+    ax.set_title("Example figure", fontsize=20, verticalalignment="bottom")
+    ax.set_xlabel("TIME in s", fontsize=14)
+    ax.set_ylabel("DISTANCE in m", fontsize=14)
+    ax.legend(loc="upper right", fontsize=14)
+
+
+We create a ``Serializer`` object with the figure:
+
+.. code-block:: python
+
+    from plot_serializer.serializer import Serializer
+
+    s = Serializer(fig1)
+
+Optionally, we add some metadata:
+
+.. code-block:: python
+
+    s.plot.id = plotids.figure_ids[0]
+    s.plot.axes[0].xunit = "second"
+    s.plot.axes[0].yunit = "meter"
+    s.add_custom_metadata({"date_created": "11.08.2023"}, s.plot)
+
+and then export to a JSON string:
+
+.. code-block:: python
+
+    json_object = s.to_json()
+
+Finally, we can save the JSON string into a file:
+
+.. code-block:: python
+
+    with open("test_plot.json", "w+") as outfile:
+        outfile.write(json_object)
+
+
+Deserializing a plot from JSON
+------------------------------
+
+To deserialize the plot from a JSON file created with the ``Serializer``, we run
+
+.. code-block:: python
+
+    from plot_serializer.deserializer import Deserializer
+
+    ds = Deserializer()
+    fig = ds.json_to_matplotlib("test_plot.json")
+
+    fig.show()
\ No newline at end of file
diff --git a/doc/Overview.rst b/doc/Overview.rst
new file mode 100644
index 0000000000000000000000000000000000000000..3a04ae22e4645c6100d8ba2e23b7a31babbdb199
--- /dev/null
+++ b/doc/Overview.rst
@@ -0,0 +1,11 @@
+Overview
+========
+
+How Plot Serializer sees diagrams
+---------------------------------
+
+Plot Serializer uses its own data model for representing scientific diagrams.
+It is strongly inspired by the `matplotlib figure anatomy <https://matplotlib.org/stable/gallery/showcase/anatomy.html)>`_.
+
+``Plot`` is equivalent to Figure in matplotlib.
+It contains one or more ``Axis`` objects ("subplots"), which in turn contain one or more ``Trace`` objects (lines, scatters, etc.).
diff --git a/doc/index.rst b/doc/index.rst
index 9bb8bf2a0b1c73fa1e6d81fe74fd25304c4080de..9e5d80149e66e193ce1fdfa57e133910aa59fc5a 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -6,7 +6,17 @@
 Welcome to Plot Serializer's documentation!
 ===========================================
 
+Plot Serializer is a tool for creating easily readable JSON files for your scientific diagrams.
+It increases the transparency of scientific publications by helping you share data from your diagrams - with the option of providing custom metadata.
+It's simple and hassle-free!
+
+Note: Plot Serializer is currently under development and its functionality is limited to 2D line plots. More will come soon!
+
 .. toctree::
+   :maxdepth: 1
+
+   Overview
+   Getting Started
    autoapi/index
 
 
diff --git a/plot_serializer/deserializer.py b/plot_serializer/deserializer.py
index f09e7ab60da7b23fe48410a158c6fa25bac19f87..341f1eda83921adda3ae5c951405965d2fd256a5 100644
--- a/plot_serializer/deserializer.py
+++ b/plot_serializer/deserializer.py
@@ -10,6 +10,14 @@ class Deserializer:
         pass
 
     def from_json(self, filename):
+        """Creates a Plot object out of a JSON file created with Serializer.
+
+        Args:
+            filename (str): path to the JSON file
+
+        Returns:
+            plot_serializer.Plot: Plot object from the JSON file
+        """
         with open(filename, "r") as openfile:
             # Reading from json file
             d = json.load(openfile)
@@ -32,6 +40,14 @@ class Deserializer:
         return o
 
     def json_to_matplotlib(self, json_file):
+        """Converts the Plot objects from JSON to matplotlib.pyplot.
+
+        Args:
+            json_file (str): path to the JSON file
+
+        Returns:
+            matplotlib.pyplot.Figure: matplotlib.pyplot.Figure created from the JSON file
+        """
         self.plot = self.from_json(json_file)
         fig = plt.figure()
         for axis in self.plot.axes:
diff --git a/plot_serializer/serializer.py b/plot_serializer/serializer.py
index 3a8c8d33b0b1f4d100aa6c8a0199640e341ac7ec..7c4c2dd2173a95d906f74f2a17c70c5b4f31a868 100644
--- a/plot_serializer/serializer.py
+++ b/plot_serializer/serializer.py
@@ -111,18 +111,17 @@ class Serializer:
 
         Args:
             metadata_dict (dict): dictionary that contains metadata to add
-            obj (plot_serializer.plot.Plot,
-                 plot_serializer.plot.Axis,
-                 plot_serializer.plot.Trace): Plot, Axis, or Trace
-                    assigned to Serializer
+            obj (plot_serializer.plot.Plot | plot_serializer.plot.Axis |
+                plot_serializer.plot.Trace): Plot, Axis, or Trace
+                assigned to Serializer
 
         Raises:
             ValueError: obj must be the plot or its attributes assigned to the
                 Serializer function
 
         Returns:
-            plot_serializer.plot.Plot,
-            plot_serializer.plot.Axis,
+            plot_serializer.plot.Plot |
+            plot_serializer.plot.Axis |
             plot_serializer.plot.Trace: obj including metadata
         """
         if obj in [