diff --git a/BlazorApp/Components/Pages/DeploymentConfirm.razor b/BlazorApp/Components/Pages/DeploymentConfirm.razor
new file mode 100644
index 0000000..93ff84b
--- /dev/null
+++ b/BlazorApp/Components/Pages/DeploymentConfirm.razor
@@ -0,0 +1,308 @@
+@page "/developers/confirm/{Token}"
+@inject HttpClient Http
+@inject NavigationManager Navigation
+@inject IConfiguration Configuration
+@rendermode InteractiveServer
+
+Activate Your Accounts - SilverLabs
+
+
+
+
+
+
+
+ @if (_loading)
+ {
+
+
+
Loading deployment details...
+
+ }
+ else if (_invalidToken)
+ {
+
+
+
+
+
Invalid or Expired Link
+
This confirmation link is no longer valid. It may have expired or already been used. Please contact an administrator if you need a new link.
+
+ }
+ else if (_provisioned)
+ {
+
+
+
Accounts Activated
+
@_resultMessage
+
+
+ Email
+ @(_username)@@silverlabs.uk
+
+
+ Mattermost
+ Team chat & collaboration
+
+
+ Gitea
+ Source code repositories
+
+
+
All accounts use the same password you just entered.
+
+
+ }
+ else
+ {
+
+
Confirm Your Identity
+
Enter your SilverDESK password to activate your accounts. All services will use this same password.
+
+
+
+ Username
+ @_username
+
+
+ Email
+ @_email
+
+
+
+
+
+
+
+
+ @if (!string.IsNullOrEmpty(_errorMessage))
+ {
+
@_errorMessage
+ }
+
+
+
+
+
+ }
+
+
← Back to SilverLabs Home
+
+
+
+
+
+@code {
+ [Parameter] public string Token { get; set; } = "";
+
+ private bool _loading = true;
+ private bool _invalidToken;
+ private bool _provisioned;
+ private bool _submitting;
+ private string? _username;
+ private string? _email;
+ private string? _password;
+ private string? _errorMessage;
+ private string? _resultMessage;
+
+ protected override async Task OnAfterRenderAsync(bool firstRender)
+ {
+ if (!firstRender) return;
+
+ try
+ {
+ var baseUrl = Navigation.BaseUri.TrimEnd('/');
+ using var client = new HttpClient();
+ var response = await client.GetAsync($"{baseUrl}/api/developers/deployment-info/{Token}");
+
+ if (response.IsSuccessStatusCode)
+ {
+ var data = await response.Content.ReadFromJsonAsync