diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index caef34e..c488e8f 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -22,33 +22,15 @@ jobs:
     - name: Install Poetry
       uses: snok/install-poetry@v1
       with:
-        version: 1.6.1
+        version: 1.8.2
         virtualenvs-create: true
         virtualenvs-in-project: true
+
     #----------------------------------------------
-    #       load cached venv if cache exists
+    # install dependencies if cache does not exist
     #----------------------------------------------
-    - name: Load cached venv
-      id: cached-poetry-dependencies
-      uses: actions/cache@v3
-      with:
-        path: .venv
-        key: venv-${{ runner.os }}-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('**/poetry.lock') }}
-      #----------------------------------------------
-      # install dependencies if cache does not exist
-      #----------------------------------------------
     - name: Install dependencies
-      if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
-      run: poetry install --no-interaction --no-root -E develop
+      run: poetry install -E dev
 
     - name: Run tests with pytest
       run: poetry run pytest
-
-    - name: Run type checks with mypy
-      run: poetry run mypy sphinxcontrib
-
-    - name: Run style checks
-      run: |
-        poetry run isort --check-only --diff sphinxcontrib tests
-        poetry run yapf --diff sphinxcontrib tests
-        poetry run flake8 sphinxcontrib tests
diff --git a/autoflex/__init__.py b/autoflex/__init__.py
index 20e0d92..21872f2 100644
--- a/autoflex/__init__.py
+++ b/autoflex/__init__.py
@@ -10,7 +10,7 @@
 
 from typing import Any, Dict
 from .install import install_verification
-from .directives import AutoFlexDirective
+from autoflex.directives import AutoFlex, FlexTree
 
 __version__ = "0.0.1"
 __author__ = "Dario Quintero Dominguez"
@@ -20,7 +20,8 @@
 def setup(app) -> Dict[str, Any]:
     """Add icon node to the sphinx builder."""
     print("Started loading `autoflex` extension.")
-    app.add_directive("autoflex", AutoFlexDirective)
+    app.add_directive("autoflex", AutoFlex)
+    app.add_directive("flextree", FlexTree)
     # load the icon node/role
     # app.add_node(icon_node, **_NODE_VISITORS)  # type: ignore
     # app.add_role("icon", Icon())
diff --git a/autoflex/directives.py b/autoflex/directives.py
deleted file mode 100644
index 74c7172..0000000
--- a/autoflex/directives.py
+++ /dev/null
@@ -1,39 +0,0 @@
-import pydantic
-from docutils.parsers import rst
-from typing import Any
-
-
-class AutoFlexDirective(rst.Directive):
-    """
-    Extension of the ``.. automodule::`` directive.
-
-    Usage
-    -----
-
-    .. code::
-
-        .. autoflex:: my_package.MyClass
-
-    """
-
-    # Directive information
-    has_content: bool = True
-
-    # name: str = "autoflex"
-    # arguments: Any = None
-    # options: Any = None
-    # content: Any = None
-    # lineno: Any = None
-    # content_offset: Any = None
-    # block_text: Any = None
-    # state: Any = None
-    # state_machine: Any = None
-    # reporter: Any = None
-    #
-    # required_arguments: int = 1
-    # optional_arguments: int = 0
-
-    def run(self):
-        print("AutoFlex directive running.")
-        print(self.name)
-        return []
diff --git a/autoflex/directives/__init__.py b/autoflex/directives/__init__.py
new file mode 100644
index 0000000..a144411
--- /dev/null
+++ b/autoflex/directives/__init__.py
@@ -0,0 +1,2 @@
+from .autoflex import AutoFlex
+from .flextree import FlexTree
diff --git a/autoflex/directives/autoflex.py b/autoflex/directives/autoflex.py
new file mode 100644
index 0000000..ce3b141
--- /dev/null
+++ b/autoflex/directives/autoflex.py
@@ -0,0 +1,49 @@
+import pydantic
+from docutils.parsers import rst
+from typing import Any
+
+
+class AutoFlex(rst.Directive):
+    """
+    Extension of the ``.. automodule::`` directive.
+
+     In order to mantain compatibility and extensibility with all the versions of pydantic,
+     it makes sense that this tool uses, rather than the internal pydantic class representation of the class,
+     the interconnected JSON definition of the data structure. From this generic data structure, the tool can
+        generate the documentation in a way that is compatible with the version of pydantic that is being used, or even
+        any generic data structure schema that can be generated from a given class definition.
+
+     The idea is that we can use the ``autoflex`` directive to improve the data structure generated during the
+      `autosummary` process instead of the `automodule` or `autoclass` directive.
+
+
+    Usage
+    -----
+
+    .. code::
+
+        .. autoflex:: my_package.MyClass
+
+    """
+
+    # Directive information
+    has_content: bool = True
+
+    # name: str = "autoflex"
+    # arguments: Any = None
+    # options: Any = None
+    # content: Any = None
+    # lineno: Any = None
+    # content_offset: Any = None
+    # block_text: Any = None
+    # state: Any = None
+    # state_machine: Any = None
+    # reporter: Any = None
+    #
+    # required_arguments: int = 1
+    # optional_arguments: int = 0
+
+    def run(self):
+        print("AutoFlex directive running.")
+        print(self.name)
+        return []
diff --git a/autoflex/directives/flextree.py b/autoflex/directives/flextree.py
new file mode 100644
index 0000000..7156fcb
--- /dev/null
+++ b/autoflex/directives/flextree.py
@@ -0,0 +1,55 @@
+from sphinx.directives.other import TocTree
+
+
+class FlexTree(TocTree):
+    """
+    Extension of the ``.. toctree::`` sphinx directive.
+
+    Notes
+    -----
+
+    A customizable toctree directive with options to create
+     links with descriptions, custom formatting, and interactive features. Ideally this feature should be developed
+    in an extensible way building on top of the existing ``toctree`` directive.
+
+    Usage
+    -----
+
+    The usage should be broadly compatible with the existing ``.. toctree::`` directive in the structures they represent.
+    However, there is more flexibility in the way the tree is generated and the parameters that can be passed.
+
+    To add descriptions below the given generated links, the following syntax can be used:
+
+    .. code::
+
+        .. flextree::
+            :maxdepth: 2
+
+            mypage1/
+                :description: This is the description of the page.
+            mypage2/
+                :description: This is the description of the page.
+
+
+    """
+
+    # Directive information
+    has_content: bool = True
+
+    # name: str = "autoflex"
+    # arguments: Any = None
+    # options: Any = None
+    # content: Any = None
+    # lineno: Any = None
+    # content_offset: Any = None
+    # block_text: Any = None
+    # state: Any = None
+    # state_machine: Any = None
+    # reporter: Any = None
+    #
+    # required_arguments: int = 1
+    # optional_arguments: int = 0
+
+    def run(self):
+        print("Generating Flextree.")
+        return super().run()
diff --git a/docs/development.rst b/docs/development.rst
new file mode 100644
index 0000000..b5efe64
--- /dev/null
+++ b/docs/development.rst
@@ -0,0 +1,19 @@
+Development
+===========
+
+The Basics
+-----------
+
+Build the local documentation basically:
+
+.. code::
+
+    poetry run python -m sphinx docs/ _docs/
+
+
+Guidelines
+----------
+
+Note that the development of the project should aim to maximize the usage of the directives developed in this package.
+
+Note that because many of these directives are extending `sphinx`-specific ones, then we want to both mantain compatibility whilst guaranteeing extensibility. One way to approach this is by fixing the corresponding versions of Sphinx we support. We can then build upon the Sphinx directive classes by overwriting their class methods accordingly, depending on what needs to be edited.
diff --git a/docs/directives/autoflex.rst b/docs/directives/autoflex.rst
new file mode 100644
index 0000000..7a0a164
--- /dev/null
+++ b/docs/directives/autoflex.rst
@@ -0,0 +1,7 @@
+``autoflex``
+============
+
+One of the main complexities we have is that managing `rst` code blocks in docstrings is complicated. It involves manually writing and updating parameter descriptions rather than focusing on the actual docstrings.
+
+When we have multiple classes, and multiple inherited classes, it is hard to keep track of each code block and all the added parameters. For example, it would be possible to manually input parameters at each particular stage. However, it would be nice if this could be extracted directly out of each class declaration automatically and rendered in a nice way.
+
diff --git a/docs/directives/flextree.rst b/docs/directives/flextree.rst
new file mode 100644
index 0000000..e69de29
diff --git a/docs/directives/index.rst b/docs/directives/index.rst
new file mode 100644
index 0000000..087ea8e
--- /dev/null
+++ b/docs/directives/index.rst
@@ -0,0 +1,4 @@
+.. flextree::
+
+    autoflex
+    flextree
diff --git a/docs/directives/overview.rst b/docs/directives/overview.rst
new file mode 100644
index 0000000..71801b6
--- /dev/null
+++ b/docs/directives/overview.rst
@@ -0,0 +1,33 @@
+Usage Overview
+---------------
+
+.. list-table::
+    :header-rows: 1
+
+    * - Extension Command
+      - Brief Description
+      - Specification
+    * - ``flextree``
+      - A customizable toctree directive with options to create links with descriptions, custom formatting, and interactive features.
+      - https://github.com/flexcompute/autoflex/issues/10
+    * - ``autoflex``
+      - Our very extensible, automatic API documentation generator for classes.
+      -
+
+
+.. code:: rst
+
+    .. flextree::
+        :maxdepth: 2
+
+        mypage1/
+            :description: This is the description of the page.
+        mypage2/
+            :description: This is the description of the page.
+
+
+Basic Example:
+
+.. code:: rst
+
+   .. autoflex:: somepackage.MyClass
diff --git a/docs/get_started.rst b/docs/get_started.rst
new file mode 100644
index 0000000..3ebf801
--- /dev/null
+++ b/docs/get_started.rst
@@ -0,0 +1,3 @@
+Get Started
+===========
+
diff --git a/docs/index.rst b/docs/index.rst
index 54031bb..0d763ed 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -4,21 +4,18 @@
 
 A flexible, nicer way of generating API docs without requiring custom docstrings.
 
-Overview
-========
-
-One of the main complexities we have is that managing `rst` code blocks in docstrings is complicated. It involves manually writing and updating parameter descriptions rather than focusing on the actual docstrings.
+This extension aims to do that.
 
-When we have multiple classes, and multiple inherited classes, it is hard to keep track of each code block and all the added parameters. For example, it would be possible to manually input parameters at each particular stage. However, it would be nice if this could be extracted directly out of each class declaration automatically and rendered in a nice way.
 
-This extension aims to do that.
+.. include:: get_started.rst
+.. include:: directives/overview.rst
 
 Objectives
 ==========
 
 - Improve the API template for `autodoc` which can be limited.
 - For each class, such as `tidy3d` complex classes, properly generate a nicer template of the parameters and methods that extends how autodoc works.
-- Generate an index of each API directive that can be easily searched by corresponding themes like the `sphinx_book_theme`.
+- Generate an index of each API directive that can be easily searched by corresponding themes like the ``sphinx_book_theme``.
 - For inherited classes, have the option to easily define the methods and parameters that we want to generate documentation for.
 - Have the option to generate custom HTML relevant to each class in a way defined by the class docstring.
 - Make sure the docstrings don't interfere with help messages such as ipython, etc. (Maybe explore how to compile relevant docstrings into the help messages).
@@ -27,33 +24,16 @@ Objectives
 
 When we have highly complex classes that have multiple inherited parameters, it is desired to have a clear definition of each specific class and its parameters, types, and defaults. Whilst this can be done manually for an individual class or method, as a project increases in complexity, it is desired to understand the relevant docstrings for each class and method.
 
-Usage
-=====
-
-Build the local documentation basically:
-
-.. code::
-
-    poetry run python -m sphinx docs/ _docs/
-
-
-The idea is that we can use the `autoflex` directive to improve the data structure generated during the `autosummary` process instead of the `automodule` or `autoclass` directive.
-
-Basic Example:
-
-.. code-block:: rst
-
-   .. autoflex:: somepackage.MyClass
-
 
 Indices and tables
 ==================
 
-.. toctree::
+.. flextree::
    :maxdepth: 2
 
-   examples/index
-   examples/demo
+   get_started
+   directives/index
+   development
 
 
 * :ref:`genindex`
@@ -63,5 +43,5 @@ Indices and tables
 Links
 =====
 
-- Source: `<https://github.com/sphinx-contrib/sphinxcontrib-autoflex />`_
-- Bugs: `<https://github.com/sphinx-contrib/sphinxcontrib-autoflex/issues />`_
+- Source: `<https://github.com/flexcompute/autoflex />`_
+- Bugs: `<https://github.com/flexcompute/autoflex/issues />`_
diff --git a/tests/test_directive.py b/tests/test_directive.py
index 64e8078..8b13789 100644
--- a/tests/test_directive.py
+++ b/tests/test_directive.py
@@ -1,3 +1 @@
-def test_import():
-    from autoflex import AutoFlexDirective
-    AutoFlexDirective()
+
diff --git a/tests/test_import.py b/tests/test_import.py
new file mode 100644
index 0000000..c71bbf2
--- /dev/null
+++ b/tests/test_import.py
@@ -0,0 +1,3 @@
+
+def test_basic_import():
+    import autoflex
diff --git a/tests/test_package.py b/tests/test_package.py
index 7877126..e69de29 100644
--- a/tests/test_package.py
+++ b/tests/test_package.py
@@ -1,3 +0,0 @@
-
-def test_import():
-    assert sphinxcontrib.autoflex.install_verification() == True