Files
RenewCMS/docs/design/screens/account.md
T

7.3 KiB

Account: change email, export my data, delete account

Route: /profile (extends the Account card, adds "Your data" and "Danger zone" cards). Verification landing: /account/email/confirm?c=CODE. API calls are assumed, not specified.

Placement: Profile already holds the read-only Email in the Account card and the Password card, so the email change extends that card; the two other features are cards at the bottom. No new navigation. Order: Display name, Account, Your role, Author profile, Password, Your data, Danger zone.

Boards: RenewCMS Screens Account.dc.html (Profile states), RenewCMS Screens Auth.dc.html (groups "Verify new email" and "Account deleted"). Frames: AppFrame, AccountCards, AuthCard. Copy source: account-copy.js. English only.

Change email

State Copy
Default "Email" field, link "Change email"
Form "New email address" · "Current password" · "We'll send a verification link to the new address. Your email stays the same until you open it." · "Cancel" · "Send verification link"
Invalid format "Enter a full email address, like name@example.com."
Same as current "That's already your email address."
Password missing "Enter your current password."
Wrong password (403) "That password isn't correct. Try again."
Sending "Sending…"
Pending "Waiting for verification" · "We sent a link to marta.alves@atelier-renew.example. Until you open it, you keep logging in with marta@renew.example." · "Resend link" · "Cancel change"; toast "Verification link sent" / "Check marta.alves@atelier-renew.example. The link works once, within 2 hours."
Resending "Sending…"
Resent toast "Link sent again" / "The previous link no longer works."
Resend rate limited (429) "Resend in 4:30" (disabled) · "Too many requests. Try again in a few minutes."
Cancelled toast "Email change cancelled" / "You keep logging in with marta@renew.example."
Rate limited (429) "Too many requests. Try again in a few minutes.", Send disabled
Server or network "Something went wrong on our side. Nothing was changed. Try again in a moment."

Rules: the old email stays active for login until the link is opened. The old address gets the notice email at request time. A request for an address already in use answers like success, so the UI and the response never reveal that an account exists.

Verification landing (AuthCard)

State Copy
Confirming "Confirming your new email…"
Success "Your email address has changed" · "Your account now uses marta.alves@atelier-renew.example. Use it the next time you log in." · "Go to profile"; toast "Email address changed" / "Your account now uses marta.alves@atelier-renew.example."
Invalid or expired (403) "This link doesn't work" · "It may have expired (links last 2 hours), been cancelled or already been used." · "Request a new link from your profile." · "Go to profile"
Address unavailable (409) "We couldn't change your email address" · "This address can't be used for your account. Go back to your profile and try a different one." · "Go to profile" (same copy whether the address is taken or rejected)
No session (401) "Log in to confirm your new email" · "You opened this link somewhere you're not logged in. Log in here and we'll confirm the change right after." · "Log in and confirm"
Missing code "This link is incomplete" · "The confirmation code is missing. Open the link from your email again, or copy the full address into your browser." · "Go to log in"
Server error "Couldn't confirm the change" · "Something went wrong on our side. Nothing was changed. Try again in a moment." · "Try again"

Your data

Contents listed in the card: Profile (Username, display name, email, role and author profile.); Authored content (Your articles and entries.); Uploaded media (References to the files you uploaded.); Account activity (Your log-ins and the actions recorded under your name.). Card copy: "Your data" · "Download a copy of the personal data RenewCMS holds about you, as JSON files in a ZIP.".

State Copy
Direct (recommended): default "Download my data" · "Ready in a few seconds."
Preparing "Preparing download…"
Started toast "Download started" / "renewcms-export-marta-2026-10-29.zip is in your downloads."
Rate limited (429, one per 15 minutes, clock-sensitive) "You can export once every 15 minutes" · "Your last export was at 09:41. Try again in 12 minutes." · "Available in 12:00"
Error "Couldn't prepare your data" · "Nothing was changed. Try again in a moment."
Alternative, emailed link: default "Request my data" · "Larger exports are prepared in the background. We'll email a download link to marta@renew.example when it's ready."
Requested "We're preparing your export" · "This can take a few minutes. We'll email a link to marta@renew.example when it's ready." · "Export requested"; toast "Export requested" / "Check marta@renew.example in a few minutes."
Already in progress "An export is already being prepared" · "We'll email a link to marta@renew.example when it's ready."

Decision: direct download. An emailed export link is out of scope.

Delete account

Danger zone: "Danger zone" · "Delete your account and your personal data. This can't be undone." · "Delete my account".

State Copy
Dialog "Delete your account?" · "This permanently deletes your account. It can't be undone." · list: "Your username, display name and email address", "Your author profile and API keys", "Your sessions: you'll be logged out everywhere" · "Your articles and media stay" / "They stay on the site, credited to "Deleted user". Your name is removed from them." · "Export my data first" · "Current password" · "Type DELETE to confirm" · "Keep my account" · "Delete my account"
Empty, typing Confirm disabled until password is filled and the word equals "DELETE" (exact, case-sensitive)
Wrong password (403) "That password isn't correct. Try again."
Deleting "Deleting…"; fields and Cancel disabled; then sign out and redirect to /login?reason=account-deleted
Rate limited (429) "Too many requests. Try again in a few minutes."
Server error "Couldn't delete your account. Nothing was deleted. Try again in a moment."
Blocked: last Owner or administrator "You can't delete your account yet" · Owner: "You are the last Owner. RenewCMS needs at least one. Transfer ownership or promote another user first, then come back to delete your account." · Administrator: "You are the last administrator. RenewCMS needs at least one. Promote another user first, then come back to delete your account." · "Back to profile" · "Go to Users"
Blocked: cannot be deleted "This account can't be deleted" · "RenewCMS can't delete this account right now. Ask an administrator to help, then try again." · "Back to profile"
Login after deletion "Your account has been deleted" · "Your articles and media were kept without your name."

Blocked dialogs have no close button, do not close on Escape or backdrop click, and always give a next step.

Authored content: anonymized to "Deleted user", stated in the dialog. Export-ready email: the link needs a logged-in session, stated in the email and the card hint. Account-deleted email: generic, no personal data, sent to the address the account had at deletion.