diff --git a/app/MindWork AI Studio/Components/Layout/MainLayout.razor.cs b/app/MindWork AI Studio/Components/Layout/MainLayout.razor.cs
index e79913f..67050cc 100644
--- a/app/MindWork AI Studio/Components/Layout/MainLayout.razor.cs
+++ b/app/MindWork AI Studio/Components/Layout/MainLayout.razor.cs
@@ -1,3 +1,4 @@
+using AIStudio.Settings;
using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
diff --git a/app/MindWork AI Studio/Components/Pages/Settings.razor b/app/MindWork AI Studio/Components/Pages/Settings.razor
new file mode 100644
index 0000000..a8801e3
--- /dev/null
+++ b/app/MindWork AI Studio/Components/Pages/Settings.razor
@@ -0,0 +1,46 @@
+@page "/settings"
+
+Settings
+
+
+ Configured Providers
+
+
+
+
+
+
+
+
+ #
+ Provider
+ Name
+ Actions
+
+
+
+ @context.UsedProvider
+ @context.InstanceName
+
+
+ Edit
+
+
+ Delete
+
+
+
+
+
+ @if(this.Providers.Count == 0)
+ {
+ No providers configured yet.
+ }
+
+
+ Add Provider
+
+
\ No newline at end of file
diff --git a/app/MindWork AI Studio/Components/Pages/Settings.razor.cs b/app/MindWork AI Studio/Components/Pages/Settings.razor.cs
new file mode 100644
index 0000000..bea0b94
--- /dev/null
+++ b/app/MindWork AI Studio/Components/Pages/Settings.razor.cs
@@ -0,0 +1,43 @@
+using AIStudio.Settings;
+using Microsoft.AspNetCore.Components;
+
+using MudBlazor;
+
+// ReSharper disable ClassNeverInstantiated.Global
+
+namespace AIStudio.Components.Pages;
+
+public partial class Settings : ComponentBase
+{
+ [Inject]
+ public SettingsManager SettingsManager { get; init; } = null!;
+
+ [Inject]
+ public IDialogService DialogService { get; init; } = null!;
+
+ private List Providers { get; set; } = new();
+
+ #region Overrides of ComponentBase
+
+ protected override async Task OnInitializedAsync()
+ {
+ var settings = await this.SettingsManager.LoadSettings();
+ this.Providers = settings.Providers;
+
+ await base.OnInitializedAsync();
+ }
+
+ #endregion
+
+ private async Task AddProvider()
+ {
+ var dialogOptions = new DialogOptions { CloseOnEscapeKey = true, FullWidth = true, MaxWidth = MaxWidth.Medium };
+ var dialogReference = await this.DialogService.ShowAsync("Add Provider", dialogOptions);
+ var dialogResult = await dialogReference.Result;
+ if (dialogResult.Canceled)
+ return;
+
+ var addedProvider = (AIStudio.Settings.Provider)dialogResult.Data;
+ this.Providers.Add(addedProvider);
+ }
+}
\ No newline at end of file
diff --git a/app/MindWork AI Studio/Settings/Data.cs b/app/MindWork AI Studio/Settings/Data.cs
new file mode 100644
index 0000000..16c1ffa
--- /dev/null
+++ b/app/MindWork AI Studio/Settings/Data.cs
@@ -0,0 +1,8 @@
+namespace AIStudio.Settings;
+
+public sealed class Data
+{
+ public Version Version { get; init; }
+
+ public List Providers { get; init; } = new();
+}
\ No newline at end of file
diff --git a/app/MindWork AI Studio/Settings/Provider.cs b/app/MindWork AI Studio/Settings/Provider.cs
new file mode 100644
index 0000000..eb7fdc8
--- /dev/null
+++ b/app/MindWork AI Studio/Settings/Provider.cs
@@ -0,0 +1,5 @@
+using AIStudio.Provider;
+
+namespace AIStudio.Settings;
+
+public readonly record struct Provider(string Id, string InstanceName, Providers UsedProvider);
\ No newline at end of file
diff --git a/app/MindWork AI Studio/Settings/ProviderDialog.razor b/app/MindWork AI Studio/Settings/ProviderDialog.razor
new file mode 100644
index 0000000..98ad4d1
--- /dev/null
+++ b/app/MindWork AI Studio/Settings/ProviderDialog.razor
@@ -0,0 +1,46 @@
+@using AIStudio.Provider
+@using MudBlazor
+
+
+
+
+
+
+ @* ReSharper disable once CSharpWarnings::CS8974 *@
+
+ @foreach (Providers provider in Enum.GetValues(typeof(Providers)))
+ {
+ @provider
+ }
+
+
+
+ @if (this.dataIssues.Any())
+ {
+
+ Issues
+
+ @foreach (var issue in this.dataIssues)
+ {
+
+ @issue
+
+ }
+
+
+ }
+
+
+ Cancel
+ Add
+
+
\ No newline at end of file
diff --git a/app/MindWork AI Studio/Settings/ProviderDialog.razor.cs b/app/MindWork AI Studio/Settings/ProviderDialog.razor.cs
new file mode 100644
index 0000000..319e85c
--- /dev/null
+++ b/app/MindWork AI Studio/Settings/ProviderDialog.razor.cs
@@ -0,0 +1,46 @@
+using AIStudio.Provider;
+
+using Microsoft.AspNetCore.Components;
+
+using MudBlazor;
+
+namespace AIStudio.Settings;
+
+public partial class ProviderDialog : ComponentBase
+{
+ [CascadingParameter]
+ private MudDialogInstance MudDialog { get; set; } = null!;
+
+ private bool dataIsValid;
+ private string[] dataIssues = [];
+ private string dataInstanceName = string.Empty;
+ private Providers dataProvider = Providers.NONE;
+
+ private MudForm form = null!;
+
+ private async Task Add()
+ {
+ await this.form.Validate();
+ if (!this.dataIsValid)
+ return;
+
+ var addedProvider = new Provider
+ {
+ Id = Guid.NewGuid().ToString(),
+ InstanceName = this.dataInstanceName,
+ UsedProvider = this.dataProvider,
+ };
+
+ this.MudDialog.Close(DialogResult.Ok(addedProvider));
+ }
+
+ private string? ValidatingProvider(Providers provider)
+ {
+ if (provider == Providers.NONE)
+ return "Please select a provider.";
+
+ return null;
+ }
+
+ private void Cancel() => this.MudDialog.Cancel();
+}
\ No newline at end of file
diff --git a/app/MindWork AI Studio/Settings/Version.cs b/app/MindWork AI Studio/Settings/Version.cs
new file mode 100644
index 0000000..0ce7765
--- /dev/null
+++ b/app/MindWork AI Studio/Settings/Version.cs
@@ -0,0 +1,7 @@
+namespace AIStudio.Settings;
+
+public enum Version
+{
+ UNKNOWN,
+ V1,
+}
\ No newline at end of file