\chapter{Using the Framework}

In this section I am going to dive into further detail on how client code is supposed
to use the framework, some of the design decisions behind this and how all all of this
is integrated into the \texttt{solvable} Docker image.

To use the framework one has to do several things to get started.
The main poins include:
\begin{itemize}
    \item define an FSM describing the flow of the tutorial
    \item implement required event handlers (that might trigger state transitions in the FSM,
          interact with non-TFW code and do various things that might be needed during a challenge)
    \item define what processes should be running inside the container besides the TFW
          server (which is started automatically)
    \item set up reverse proxying for any user-facing network applications such as webservers,
          SSH and friends
\end{itemize}
At first all these tasks are quite overwhelming.
Remember that witchcraft is what we practice here after all.
To overcome the high initial learning curve of getting familiar with the framework
I have created a repository called \emph{test-tutorial-framework} with the purpose of
providing a project template for developers looking to create challenges using the
framework.
This repository is a really simple client codebase that is suitable for
developing TFW itself as well (a good place to tests for the framework).
Let us take a look at this to acquire a greater understanding of how the framework operates.

\section{Project Structure}