@model ManageAccountViewModel @{ ViewData["Title"] = "Manage Account"; var subscription = Model.Subscription; var trial = Model.Trial; }

Account

Manage Account

@Model.User.Email

@if (TempData["AuthMessage"] is string authMessage) {
@authMessage
} @if (TempData["AuthError"] is string authError) {
@authError
}

Account security

Email address

@Model.User.Email

Email verified

@(Model.User.EmailConfirmed ? "Yes" : "No")

Two-factor authentication

@(Model.User.TwoFactorEnabled ? "Enabled" : "Not enabled")

Change Password

Two-Factor Authentication

Use an authenticator app to add an extra sign-in step for your account.

@if (Model.User.TwoFactorEnabled) { Recovery Codes Disable Two Factor } else { Enable Two Factor }

Subscription

@if (subscription is null) {

No active subscription is assigned.

} else { @if (trial is not null) {

Free trial status

@trial.StatusLabel

Upgrade

Your 30-day @trial.PlanName trial expires on @FormatDate(trial.ExpiryDateUtc).

}

Current plan

@subscription.DisplayName

Trial start

@(trial is null ? "Not on trial" : FormatDate(trial.StartDateUtc))

Trial expiry

@(trial is null ? "Not on trial" : FormatDate(trial.ExpiryDateUtc))

Days remaining

@(trial is null ? "Not on trial" : trial.StatusLabel)

Books

@FormatLimit(subscription.MaxBooks)

Storage

@FormatStorage(subscription.MaxStorageMB)

Chapters per book

@FormatLimit(subscription.MaxChaptersPerBook)

Scenes per book

@FormatLimit(subscription.MaxScenesPerBook)

Characters per project

@FormatLimit(subscription.MaxCharactersPerProject)

Collaborators

@subscription.MaxCollaborators

}
View subscription details

Danger Zone

Permanently close your PlotDirector account.

This will delete your account, all projects, uploaded files, notes and project data. This action cannot be undone.

@if (Model.HasPaidBillingRisk) {
You currently have an active paid subscription. Please cancel your subscription before closing your account. Once your account has returned to trial or free access, you can permanently delete it.
Manage subscription } else { }
@if (!Model.HasPaidBillingRisk) { } @functions { private static string FormatLimit(int value) => value >= 999999 ? "Practical unlimited" : value.ToString("N0"); private static string FormatStorage(int value) => value >= 1024 ? $"{value / 1024:N0} GB" : $"{value:N0} MB"; private static string FormatDate(DateTime value) => value.ToLocalTime().ToString("yyyy-MM-dd"); } @section Scripts { @if (!Model.HasPaidBillingRisk) { } }