diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000..433fa90
Binary files /dev/null and b/.DS_Store differ
diff --git a/.env.example b/.env.example
deleted file mode 100644
index 68ed7e3..0000000
Binary files a/.env.example and /dev/null differ
diff --git a/README.md b/README.md
index 5268290..24e9282 100644
--- a/README.md
+++ b/README.md
@@ -53,4 +53,326 @@ Make sure that **ffmpeg** is installed on your system, as it may be required for
---
-**Installation complete!** You're now ready to use Video2Document.
\ No newline at end of file
+**Installation complete!** You're now ready to use Video2Document.
+
+###General Despription
+## Project Overview
+
+V2D (Video to Document Framework) is a student project developed to convert video and audio content into structured, readable documents using AI-based text processing. The tool is designed to help users automatically generate documents such as meeting reports, summaries or structured texts from recorded videos or audio files.
+
+The main problem V2D addresses is the time-consuming manual effort required to listen to recordings and write documents afterwards. By automating transcription, structuring and document generation, the tool improves efficiency and usability for students, teams and small organizations.
+
+The project was created as part of a university software engineering course and is developed using agile methods (Scrum). It focuses on modular design, usability and extensibility, allowing new document types and features to be added easily.
+
+### Used Packages and Dependencies
+
+This project uses several Node.js packages to handle video processing, AI-based document generation, backend communication, and the desktop user interface. Below is an overview of the most important dependencies and their purpose.
+
+##Core Dependencies:
+
+Electron:
+Used to build the desktop application. It allows the project to run as a cross-platform GUI application using web technologies.
+
+Express:
+Acts as a lightweight backend server that handles internal API requests and communication between different parts of the application.
+
+Axios:
+Used for making HTTP requests, for example when communicating with external APIs such as AI services.
+
+dotenv:
+Used to securely load API keys and other sensitive configuration values from environment variables instead of hardcoding them in the source code.
+
+@google/genai:
+Provides access to Google’s Generative AI models. This package is used to generate structured documents from transcribed text based on configurable prompts.
+
+ffmpeg-static:
+Provides a static FFmpeg binary so that video and audio processing works without requiring FFmpeg to be installed separately on the system.
+
+fluent-ffmpeg:
+Used together with FFmpeg to process video and audio files, for example extracting audio tracks from uploaded videos.
+
+puppeteer:
+Used to render and process HTML content programmatically. This is helpful for document previews and automated content generation.
+
+html-to-docx:
+Converts generated HTML documents into downloadable DOCX files, which are provided to the user as the final output.
+
+mocha:
+A testing framework used to run unit tests and ensure that core functionalities work as expected.
+
+##Development Dependencies:
+
+TypeScript:
+Used to add static typing to the project, improving code quality, readability, and maintainability.
+
+ts-node:
+Allows running TypeScript files directly without manually compiling them first.
+
+@types/node:
+Provides TypeScript type definitions for Node.js APIs.
+
+@types/fluent-ffmpeg:
+Type definitions for fluent-ffmpeg to improve development experience and error checking.
+
+@types/cli-progress:
+Provides type support for progress bar functionality used during processing tasks.
+
+###Why These Packages Are Needed
+
+Together, these packages enable:
+
+*Processing video and audio files
+
+*Communicating with AI models for document generation
+
+*Secure handling of API keys
+
+*Generating structured documents (DOCX)
+
+*Providing a user-friendly desktop interface
+
+*Ensuring code quality through testing
+
+###API Keys and Configuration
+
+The V2D – Video to Document tool uses external AI and media processing services to convert video and audio content into structured documents.
+To access these services, several API keys are required. For security reasons, API keys are not stored in the repository and must be provided via environment variables.
+
+ ##Supported API Keys
+
+The project currently supports the following API keys. Depending on the configuration and selected provider, one or more of these keys may be used.
+
+Google Gemini API
+
+Environment variable: GOOGLE_API_KEY
+
+Usage:
+Used for AI-based document generation. The Large Language Model processes transcripts and creates structured documents such as meeting reports.
+
+OpenAI (ChatGPT)
+
+Environment variable: OPENAI_API_KEY
+
+Usage:
+Alternative AI provider for text processing and document generation.
+
+AssemblyAI
+
+Environment variable: ASSEMBLYAI_API_KEY
+
+Usage:
+Speech-to-text processing for audio and video files.
+
+Saya
+
+Environment variable: SAYA_API_KEY
+
+Usage:
+Additional or experimental AI provider that can be integrated into the document generation pipeline.
+
+##How to Set API Keys
+
+API keys must be configured as environment variables before starting the application.
+
+Linux / macOS
+export GOOGLE_API_KEY="your_api_key_here"
+export OPENAI_API_KEY="your_api_key_here"
+export ASSEMBLYAI_API_KEY="your_api_key_here"
+export SAYA_API_KEY="your_api_key_here"
+
+Windows (PowerShell)
+setx GOOGLE_API_KEY "your_api_key_here"
+setx OPENAI_API_KEY "your_api_key_here"
+setx ASSEMBLYAI_API_KEY "your_api_key_here"
+setx SAYA_API_KEY "your_api_key_here"
+
+
+Alternatively, for local development, a .env file can be used:
+
+GOOGLE_API_KEY=your_api_key_here
+OPENAI_API_KEY=your_api_key_here
+ASSEMBLYAI_API_KEY=your_api_key_here
+SAYA_API_KEY=your_api_key_here
+
+
+⚠️ Important:
+The .env file must not be committed to the repository and should be listed in .gitignore.
+
+Security Notes:
+
+*API keys are injected at runtime
+
+*No secrets are stored in the source code
+
+*Prevents accidental exposure of sensitive data
+
+*Supports secure collaboration in GitLab and CI/CD environments
+
+*Follows best practices for secret management
+
+
+
+###End-to-End User Guide (Video → Final Document)
+
+This section describes how a user can create a structured document from a video using the V2D – Video to Document tool.
+
+Start the Application:
+
+Ensure all required API keys are configured as environment variables.
+
+
+Install dependencies:
+
+npm install
+
+
+Start the application:
+
+npm start
+
+
+The Electron-based GUI will open.
+
+#Upload a Video File:
+
+In the application interface, select Upload Video.
+
+Choose a supported video file (e.g. .mp4, .mov).
+
+The video is loaded into the system for processing.
+
+
+
+#Audio Extraction:
+
+The application automatically extracts audio from the uploaded video.
+
+This is handled internally using FFmpeg.
+
+No user interaction is required for this step.
+
+
+#Speech-to-Text Transcription:
+
+The extracted audio is sent to the speech-to-text service.
+
+The transcription process converts spoken content into text.
+
+The generated transcript is stored internally and used for further processing.
+
+
+#Select Document Type:
+
+The user selects a document type (e.g. Meeting Report).
+
+Each document type is based on a predefined prompt template.
+
+The selected template defines the structure and style of the final document.
+
+
+#Document Generation:
+
+The transcript and selected prompt are sent to the AI service.
+
+The AI model processes the input and generates a structured document.
+
+The output is formatted in Markdown.
+
+
+#Document Preview:
+
+The generated document is displayed in the application preview.
+
+Users can review the content before exporting.
+
+No manual editing is required, but validation is possible.
+
+
+#Export the Final Document:
+
+The user exports the document in the desired format.
+
+
+#Supported formats include:
+
+Markdown (.md)
+
+Word (.docx)
+
+The document is saved locally.
+
+
+#Completion:
+
+The final document is now ready for use.
+
+The user can repeat the process with another video if needed.
+
+
+###Resources
+
+This section lists the main technologies, libraries, and external resources used in the V2D (Video to Document) project. These resources are required to understand, run, and further develop the application.
+
+##Project Dependencies
+
+The following packages and tools are used in this project (as defined in package.json):
+
+Application & Backend
+
+Node.js – JavaScript runtime environment used for backend processing
+
+Electron – Framework for building the desktop application
+
+Express – Backend web framework for handling requests and internal APIs
+
+AI & API Communication
+
+@google/genai – Used for AI-based document generation
+
+Axios – HTTP client for communicating with external APIs (LLMs)
+
+Video & Audio Processing
+
+ffmpeg-static – Extracts audio from uploaded video files
+
+fluent-ffmpeg – Controls FFmpeg operations programmatically
+
+Document Generation & Preview
+
+html-to-docx – Converts structured content into Word documents
+
+Puppeteer – Renders HTML content for document preview and processing
+
+Configuration & Security
+
+dotenv – Loads API keys securely from environment variables
+
+Testing & Development
+
+Mocha – Unit testing framework
+
+TypeScript – Improves code quality and type safety
+
+These dependencies enable the complete end-to-end workflow from video input to structured document output.
+
+
+##Relevant Repositories
+
+V2D Main Repository:
+https://gitlab.rlp.net/proj-wise2526-video2document/video2document
+
+This repository contains the full source code, configuration files, and documentation for the V2D project.
+
+Downloads & External Resources
+
+The following tools and documentation may be required to run or understand the project:
+
+Node.js: https://nodejs.org
+
+Electron Documentation: https://www.electronjs.org/docs
+
+FFmpeg: https://ffmpeg.org
+
+Google Generative AI: https://ai.google.dev
+
+Puppeteer: https://pptr.dev
\ No newline at end of file
diff --git a/documentation.md b/documentation.md
new file mode 100644
index 0000000..15f8bee
--- /dev/null
+++ b/documentation.md
@@ -0,0 +1,225 @@
+# Documenation of our Program
+
+## Table of Contents
+1. [How to run the Software](#how-to-run-the-software)
+2. [How it works](#how-it-works)
+3. [Modules](#modules)
+4. [IPC](#ipc)
+5. [Authentication](#authentication)
+6. [UI](#ui)
+
+## How to run the Software
+If you read the readme file, you will see the basic setup command in order to run the program.
+You will need nodejs, the newer the better.
+The software is tested with `nodejs-19`, `nodejs-20`, `nodejs-22` and `nodejs-24`.
+These versions are confirmed to work with our software, but prior versions may work aswell.
+To get nodejs, simply go to their [website](https://nodejs.org/en/download) and download whatever version you want and install it.
+Afterward go into the directory of our program, and run the command `npm i`, this will install all the necessary libraries.
+Next up you need to set up the .env file.
+The file must contain your keys for the modules you want to use.
+The .env file looks like this:
+```
+auth_username=wefhjhjakeghjkahejkghjkaegh
+auth_password=wefhjhjakeghjkahejkghjkaegh
+```
+Once that is done, you can run the command `npm start` to actually start the program.
+Alternatively you can double click the start.bat if you are on Windows for example.
+
+## How it works
+Our software is fully modular, this means, every part can easily be edited, replaced, removed or added without needing to make many adjustments in the code.
+The modules can be found under `./services/modules`
+The Structure is as follows:
+Inside of `modules` are folders named after the general thing the module does.
+For example, `transcription-remote`, this folder contains all the modules that do transcription on a remote service, such as assembly-ai for example.
+Inside of these folders we put our modules.
+The name of the folder and the module dont matter, as long as the structure is kept, and the module filename ends with .js, it will work.
+The program iterates through all of the folders within `./services/modules`, and then iterates over each `.js` file within each of these folders, and then loads them into a specific map called `mapFunctions`.
+This map is available ANYWHERE in the backend code, even within a module, which means, you can call a module, from within a module, from within a module, from within yet another module.
+
+## Modules
+Building a new module is super easy, any idiot can get it done.
+All you need to do is follow the previously mentioned structure.
+When you have created your module file, the `.js` file, you simply copy paste this code snippet into it.
+```js
+module.exports = {
+ name:"example", // Unique name for our function that will later be used to get the function from the map via "mapFunctions.get("example").function()"
+ type:"example-type", // value used to differentiate each module to order them in the UI
+ displayname:"Example", // The displayname used within the UI
+ async function(randomParameter){
+ // Here we put a simple console.log to show how the system works
+ // This function will be called from the @startup.js function in the utility folder
+ console.log(`\n------------\nThis is the example function called by the ${randomParameter} function\n------------\n`);
+ }
+}
+```
+If by this point, you cared enough to actually look at the code and the modules and so on, you might have spotted a file in `./services/modules/utility` called `example.js`.
+This is a template file that you can just copy paste and use as a base for your new module.
+It has the same exact code as mentioned right above.
+Now as for how the code works.
+Each module is essentially just a JSON object that is being exported, so that the main process can load it into the `mapFunctions` map.
+the required fields are as follows
+- name: This field contains the internal name through which it will be called. It HAS TO BE unique.
+- type: This field contains the type of the module. Is it an LLM module, transcription module, or whatever.
+- displayname: This field contains the Displayname used in the UI.
+
+And lastly the function call.
+This function call is what is being called by other functions, it is generally the main entrypoint for a module.
+Sure, you can always set custom function names, but this is a general solution that works without having to manage function names.
+You can always define custom functions inside your module that you call from the entrypoint function, but it is highly advised just to call the entrypoint function from outside of the module as it prevents headaches by just working as intended.
+
+Note, there are also other module fields for specific module types, such as:
+- description: Used by any module that needs to be shown on the UI, such as Transcription and LLM modules.
+- audioformat: Used by transcription modules to tell the audio extraction module what audio format to use.
+
+## IPC
+Our software is split up into 2 pieces, the main process (Backend) and the frontend.
+The frontend is written in Electron, so it is essentially just a website.
+This makes it relatively easy to edit the frontend.
+But it comes with one downside, which is, the frontend and backend cant just directly communicate, you first need to set up an IPC channel between them.
+As for the base functionality, all of this is already done.
+The frontend gets a list of all the available LLM and Transcription modules sent by the backend on startup.
+The JSON object for this information looks like this:
+```json
+{
+ "ai_modules":[
+ {"name": "Example", "displayname": "Example"}
+ ],
+ "transcription_modules":[
+ {"name": "Example", "displayname": "Example"}
+ ]
+}
+```
+The backend needs a specific set of informations from the frontend in order to start the pipeline.
+The JSON for that looks like this:
+```json
+{
+ "video": {
+ "module": "extraction-video-to-audio",
+ "inputVideoPath": "A:\\programing\\@projects\\video2document\\test\\unit\\testvideo.mp4"
+ },
+ "transcription": {
+ "module": "assembly"
+ },
+ "document": {
+ "module": "llm-saia_openai_gpt",
+ "type": "followup-report",
+ "outputType": "pdf"
+ }
+}
+```
+As you can see in this JSON object, each part specifies which module is being used for each step.
+The module names are each the name field specified in the module itself.
+As for the rest of the fields, they are pretty self explanatory except `document.type`, that is a predefined report type.
+This is the minimum required setup for the currently implemented pipeline to work.
+You can always add fields to it, but dont remove the ones from above.
+
+## Authentication
+Our Software uses a custom API key management System.
+This system itself is proprietary, and will as such not be delivered with the software.
+The way it works is simply via a HTTP request.
+In the current version, the main reads the username and password for authentication from the .env file, and then uses these in the header for the HTTP request.
+```
+ hostname: "keyserver.dommymommy.xyz", // The URL to the key server
+ port: 443, // The Port of the
+ path: "/v1/auth", // The API Endpoint
+ method: "GET",
+ headers: {
+ "Content-Type": "application/json", // The content type should be JSON
+ "username": un, // the Username used to authenticate
+ "password": pw // The password used to authenticate
+ }
+```
+### The Important bit of this whole setup
+Once the HTTP request is made, it will return a JSON object with the API keys as fields.
+One such output could look like this:
+```json
+{
+ "ASSEMBLYAI_API_KEY": "eajgjkhgahghahegoikh",
+ "GOOGLE_API_KEY": "eajgjkhgahghahegoikh",
+ "SAIA_API_KEY": "eajgjkhgahghahegoikh"
+}
+```
+The key for each entry is being used to store the key in memory.
+Specifically under `process.env`
+So, if everything in this request worked out, we will have:
+```js
+process.env.ASSEMBLYAI_API_KEY
+process.env.GOOGLE_API_KEY
+process.env.SAIA_API_KEY
+```
+These variables are accessible anywhere in the code and contain the API Keys, so make sure you dont add some untrusted modules that could steal these API Keys.
+
+
+## UI
+The UI has a simple, self-explanatory design, in white and blue.
+For easy handling and understanding, the UI is using 6 steps to guide the user through the process and offers a help page
+with more defined explanations regarding the steps of the GUI. All parts used in the GUI are stored in the directory `./electron/main`.
+
+Files used for the UI:
+- index.html
+- help_page.html
+- style.css
+- script.js
+- renderer.js
+- preload.js
+- languages.js
+- package-lock.json
+- package.json
+
+Folders used for the UI:
+- /flags
+- /icons
+- /node_modules
+
+**index.html:**
+This file is the basic framework of our software. Comments in the code define the different UI sections.
+The comments are the headlines of the code below them.
+
+**help_page.html:**
+This is the html to the help page that is accessible though the burger menu in the software.
+Currently only available in german. It describes the different parts of the program in more depth.
+
+**style.css:**
+Contains all the css code of the software used in the UI.
+
+**script.js:**
+Stores all functions used in the UI.
+The code is separated by comments in their matching UI section.
+
+**renderer.js:**
+Mainly contains every listener function used in the UI, which listens to any events occuring in the UI,
+to handle these events as intended.
+The code is separated by comments in their matching UI section.
+
+**preload.js:**
+Contains IPC functions to allow communication between the UI and the main process.
+
+**languages.js:**
+Holds one JSON, which is used to store the different language variables. These are used
+in the script.js for the change of the displayed language of the UI. Add languages here, if
+you want to add more options in the language selection.
+
+How to add more languages:
+1. Add another language block, like an existing one in the file. (Note: Use every key, which is also used in the other sections,
+beside the first key like "eng". This first key should be always unique from the others)
+2. Assign the desired values to the keys in the new language section.
+
+How to add more text which changes languages:
+1. Create the element in the html file with an unique id.
+2. Add this id to every language section and assign them a matching value.
+3. Add inside the `script.js` file, inside the `changeLanguage()` function a document call like the others. Except with our id.
+
+**package-log.json:**
+It's an electron module file. No changes needed.
+
+**package.json:**
+This is an electron base file. No changes needed.
+
+**/flags:**
+This directory contains the flags used for the language selection dropdown menu.
+
+**/icons:**
+Pictures for the document preview are stored here.
+
+**/node_modules:**
+Contains nodes used by electron.
\ No newline at end of file
diff --git a/electron/main/custom_document.html b/electron/main/custom_document.html
deleted file mode 100644
index a8df41a..0000000
--- a/electron/main/custom_document.html
+++ /dev/null
@@ -1,248 +0,0 @@
-
-
-
-
+ - Ziehe eine Videodatei in das Drag-and-Drop-Feld oder klicke auf „Video
+ suchen“,
+ um eine Datei über deinen Dateibrowser auszuwählen.
+ - Klicke anschließend auf Schritt 2 oder auf den blauen Pfeil rechts, um
+ fortzufahren.
+
+
+
+
Schritt 2 - Konfiguration
+
+ - Wähle im ersten Auswahlmenü die zu verwendende KI.
+ - Wähle im zweiten Auswahlmenü das zu verwendende Transkriptions-Tool.
+ - Wähle im dritten Auswahlmenü das Dateiformat des zu erstellenden
+ Dokuments.
+ - Wähle im vierten Auswahlmenü die Sprache des zu erstellenden Dokuments.
+ - Klicke anschließend auf Schritt 3 oder auf den blauen Pfeil rechts, um
+ fortzufahren.
+
+
+
+
Schritt 3 - Dokumententyp auswählen
+
+ - Wähle einen Dokumententyp über die Checkbox oder einen zuvor erstellten Dokumententyp aus dem
+ Dropdown-Menü aus.
+ - Klicke anschließend auf Schritt 4 oder auf den blauen Pfeil rechts, um
+ fortzufahren.
+
+
+
+
Schritt 4 - Bestätigen
+
+ Klicke auf „Submit“, um die Dokumentengenerierung zu starten.
+ Während der Verarbeitung werden vier Statuspunkte angezeigt, die sich schrittweise von rot zu
+ grün färben und den aktuellen Fortschritt darstellen:
+
+ Punkt 1: Upload und Vorbereitung der Videodatei.
+ Punkt 2: Transkription des Videoinhalts.
+ Punkt 3: KI-gestützte Verarbeitung und Dokumentenerstellung.
+ Punkt 4: Abschluss der Generierung und Bereitstellung des Dokuments.
+
+ Nach erfolgreichem Abschluss klicke auf Schritt 5 oder auf den blauen Pfeil
+ rechts, um fortzufahren.
+
+
+
+
Schritt 5 - Sprecher identifizieren
+
+ Im Auswahlmenü kannst du einen erkannten Sprecher auswählen.
+ Über den Play-Button lässt sich ein gesprochener Satz anhören, um den Sprecher eindeutig zu
+ identifizieren.
+ Mit dem Lautsprecher-Symbol kannst du die Lautstärke anpassen.
+ Über das Drei-Punkte-Menü lässt sich die Wiedergabegeschwindigkeit einstellen.
+
+ Im Textfeld „Write name“ gibst du den tatsächlichen Namen des Sprechers ein,
+ damit dieser im Dokument
+ anstelle von Platzhaltern wie z. B. „Sprecher A“ angezeigt wird.
+ Bestätige die Eingabe mit „Rename Speaker“.
+
+ Mit dem Button „Rewrite Document“ werden anschließend alle
+ Sprecherbezeichnungen im Dokument ersetzt.
+
+ Klicke danach auf Schritt 6 oder auf den blauen Pfeil rechts, um fortzufahren.
+
+
+
+
Schritt 6 - Dokument speichern
+
+ Klicke auf „Download“, um das Dokument zu speichern.
+ Es öffnet sich anschließend ein Dateiexplorer, in dem du den gewünschten Speicherort auswählen
+ kannst.
+
+
+
+
+
+
+
Dokumententyp erstellen
+
+ - Öffne oben links das Burgermenü und wähle den Punkt „Dokumententypen
+ verwalten“.
+ - Wähle anschließend im Auswahlmenü die Option „-- Neuen Dokumententyp erstellen
+ --“.
+ - Vergib einen aussagekräftigen Namen für den neuen Dokumententyp.
+ - Formuliere den Prompt für die KI-gestützte Verarbeitung sorgfältig.
+ - Klicke auf Dokumententyp speichern.
+ Hinweis: Der eingegebene Prompt wird unverändert an einen KI-Dienst
+ übermittelt.
+ Achte daher unbedingt auf die Einhaltung der geltenden Datenschutzrichtlinien und gib keine
+ sensiblen oder personenbezogenen Daten ein.
+
+
+
+
+
Dokumententyp bearbeiten
+
+ - Öffne oben links das Burgermenü und wähle den Punkt „Dokumententypen
+ verwalten“.
+ - Wähle anschließend im Auswahlmenü den zu bearbeitenden Dokumententyp aus.
+ - Überarbeite den bestehenden KI-Prompt oder formuliere einen neuen Prompt.
+ - Klicke abschließend auf „Dokumententyp speichern“.
+
+ Hinweis:
+ Der eingegebene Prompt wird unverändert an einen KI-Dienst übermittelt.
+ Achte daher unbedingt auf die Einhaltung der geltenden Datenschutzrichtlinien und gib keine
+ sensiblen oder personenbezogenen Daten ein.
+
+
+
+
+
Dokumententyp löschen
+
- Öffne oben links das Burgermenü und wähle den Punkt „Dokumententypen
+ verwalten“.
+ - Wähle anschließend im Auswahlmenü den zu löschenden Dokumententyp aus.
+ - Klicke abschließend auf „Dokumententyp löschen“.
+
+ Hinweis:
+ Nach Bestätigung des Löschvorgangs kann der Dokumententyp nicht wiederhergestellt werden.
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/electron/main/icons/question-mark-button-icon--free-clip-art-30.png b/electron/main/icons/question-mark-button-icon--free-clip-art-30.png
new file mode 100644
index 0000000..a0a52ef
Binary files /dev/null and b/electron/main/icons/question-mark-button-icon--free-clip-art-30.png differ
diff --git a/electron/main/index.html b/electron/main/index.html
index 1e3bd46..39d4251 100644
--- a/electron/main/index.html
+++ b/electron/main/index.html
@@ -1,167 +1,340 @@
-
+
-
-
-
- Video to document
-
-
-
+
+
+
+ Video to document
+
+
+
-