Profile Settings
Manage your personal information, security settings, and organization details in your Scriptix profile.
Overview
The Profile page contains all personal and organization settings, security features, and account management options. Access it by navigating to Profile in the main navigation.
Accessing Profile Settings
Navigation:
- Log in to Scriptix
- Click Profile in navigation menu
- Profile page opens with all sections
Profile Sections:
- Account Details
- Password Change
- Organization Details (ADMIN/SYSOP only to edit)
- Security Settings (2FA)
- Account Personalization (Export Templates)
- Keymap Settings (Keyboard Shortcuts)
- Danger Zone (Delete Account Settings)
Page Structure:
- Single page with all sections
- No tabs (all sections visible by scrolling)
- Forms with independent save buttons
Account Details
Personal Information
Editable Fields:
| Field | Description | Required |
|---|---|---|
| First Name | Your given name | Yes |
| Last Name | Your family name | Yes |
| Account email address | Yes | |
| Newsletter | Receive updates via email | Optional |
Update Account Details:
- Navigate to Account Details section (top of profile page)
- Update first name or last name
- Update email address
- Toggle newsletter subscription (checkbox)
- Click Update button (only enabled when changes made)
- Success toast: "Account details updated successfully"
Form Validation:
- First name is required
- Last name is required
- Valid email address required
- Email format validation
Update Button:
- Disabled until changes are made (
isAccountDirtycheck) - Shows save icon (16px width)
- Variant: secondary
- Label: "Update"
- Type: submit
Newsletter Subscription:
- Checkbox control
- Label: "Get newsletter updates"
- Can toggle anytime
- Included in form submission
Password Management
Change Password Button:
- Located in Account Details section
- Button label: "Change password"
- Size: medium
- Variant: text
- Full width button
- Opens password change modal
Password Change Modal:
Modal Properties:
- Size: small
- Title: "New password"
- Caption: "Change your password here"
- Footer actions: Update and Cancel buttons
Password Form Fields:
| Field | Description |
|---|---|
| Current Password | Old password for verification |
| New Password | New password (meets requirements) |
| Confirm New Password | Re-type new password (must match) |
Password Requirements:
- Minimum 12 characters
- At least 1 uppercase letter (A-Z)
- At least 1 lowercase letter (a-z)
- At least 1 number (0-9)
- Validation messages for each requirement
Validation Messages:
- "Old password is required"
- "New password is required"
- "Password must be at least 12 characters"
- "Password must have at least one uppercase letter"
- "Password must have at least one lowercase letter"
- "Password must have at least one number"
- "Confirm password is required"
- "Passwords must match"
Change Password Process:
- Click "Change password" button
- Modal opens with 3 input fields
- Enter current password
- Enter new password (meets requirements)
- Confirm new password (must match)
- Click Update button
- Button disabled until form is dirty
- Loading state: button label "Updating..."
- Success toast: "Password changed successfully"
- Modal closes automatically
- Form resets
Update Button in Modal:
- Disabled if form not dirty (
!isPasswordDirty) - Label: "Updating..." when submitting, "Update" otherwise
- Type: button
- Variant: primary
Cancel Button:
- Closes modal without saving
- Variant: secondary
- Label: "Cancel"
Organization Details
Organization Information
Organization details can be viewed by all users but only edited by ADMIN and SYSOP roles.
Access Control Check:
const userRoles = (user?.result?.roles ?? []) as unknown as string[];
const isAdmin = userRoles.includes('admin') || userRoles.includes('sysop');
Organization Fields:
| Field | Description | Required |
|---|---|---|
| Name | Organization name | Yes |
| Organization contact email | Yes | |
| Phone | International phone number (E.164 format) | Optional |
| Street Address | Address street | Yes |
| City | Address city | Optional |
| Postal Code | Address postal code | Optional |
| Country | Country selection dropdown | Optional |
| Billing VAT | VAT/Tax ID number | Yes |
Update Organization:
- Navigate to Organization Details section (if ADMIN/SYSOP)
- Edit fields as needed
- Click Update button (only enabled when changes made)
- Success toast: "Organization details updated successfully"
Phone Validation:
- Optional field
- If provided, must be valid international format (E.164)
- Uses libphonenumber-js for validation
- Error: "Enter a valid international phone number"
Default Settings
Diarization:
- Checkbox labeled "Separate speakers"
- Default value for new transcription uploads
- Can be overridden per upload
- Variant: primary
Magic Link Export:
- Checkbox labeled "Allow magic link export"
- Default value: true (checked)
- Controls organization-wide magic link export permission
- Description text below checkbox
- Variant: primary
Branding (Reseller Only)
Resellers can customize branding with logo and brand color. See Organization Settings for detailed branding documentation.
Branding Section:
- Only visible for RESELLER role users
- Logo upload with immediate save
- Brand color picker
- Delete logo button
Security Settings
Two-Factor Authentication (2FA)
2FA Status Display:
- Section title: "Security settings"
- Status label: "2FA settings"
- Green text: "2FA enabled" (if active)
- Red text: "2FA disabled" (if inactive)
Enable 2FA:
Step 1: Click Activate Button
- Click Activate 2FA button (smoke variant, small size)
- QR code component displays below button
Step 2: Scan QR Code
- QR code fetched from API
- Open authenticator app on phone
- Scan QR code displayed
- App generates 6-digit codes
Step 3: Verify Code
- Input field appears next to QR code
- Enter 6-digit code from authenticator app
- Input properties:
- Type: text
- inputMode: numeric
- pattern: [0-9]*
- autoComplete: one-time-code
- Click Verify button (primary variant)
Step 4: Backup Codes Modal
- Verification successful
- Success toast: "2FA enabled"
- Backup codes modal opens automatically
- Title: "Backup codes"
- Caption: "Don't lose these codes"
Backup Codes Display:
- List of backup codes (numbered 1, 2, 3...)
- Each code displayed with index
- Font: medium weight
Download Backup Codes:
- Click Download codes button
- Creates text file blob
- Downloads as "backup-codes.txt"
- Format: One code per line
- Toast: "Backup codes downloaded"
- Modal automatically closes after download
Modal Footer Actions:
- Close window button (smoke variant)
- Download codes button (primary variant)
Deactivate 2FA:
- Status shows "2FA enabled" in green
- Click Deactivate 2FA button (danger variant, red)
- Input field appears
- Enter 6-digit code OR backup code
- Placeholder: "2FA or recovery code"
- Click Deactivate button (danger variant)
- Success toast: "2FA disabled"
- User queries invalidated
Error Handling:
- Error toast format: "2FA error: [error_description]"
- Falls back to error message if no description
- User profile refreshed on success/error
Account Personalization
Export templates for customizing document exports. See User Preferences for detailed documentation.
Features:
- View existing export templates
- Add new templates (EXPORT_TEMPLATE or SUMMARIZATION)
- Edit templates (ORGADMIN only)
- Download template files (DOCX/PDF)
- Delete templates
Keymap Settings
Keyboard shortcuts for transcript editor. See User Preferences for detailed documentation.
Features:
- View existing keyboard shortcuts
- Add custom shortcuts (up to 3 keys)
- Key combination capture
- Delete shortcuts
Danger Zone
Account management section with destructive actions.
Section Header
Display:
- Title: "Danger zone" (red text, font-semibold)
- Border-top separator
- Subsection: "User account settings"
Deactivate Account
What It Does:
- Temporarily disables your account
- Cannot log in while deactivated
- Data preserved
- Reversible (contact support to reactivate)
Deactivate Process:
- Click Deactivate Account button (danger variant, red)
- Confirmation modal opens
- Title: "Deactivate account confirmation"
- Caption: "Are you sure you want to deactivate your account? You will not be able to recover it without contacting support."
- Modal size: small
- Footer actions: Cancel (smoke) and Deactivate (primary)
Confirmation:
- Review warning
- Click Deactivate to confirm
- Button label changes to "Deactivating..." when processing
- Success toast: "Account deactivated successfully"
- Modal closes
- Account immediately deactivated
Modal Properties:
- Disabled buttons during processing (
isDeactivatingstate) - Cancel button available
- Auto-closes on success
Delete Account
What It Does:
- Permanently deletes your user account
- Cannot be undone
- Personal data removed
Delete Process:
- Click Delete Account button (danger variant, red)
- Confirmation modal opens
- Title: "Delete account confirmation"
- Caption: "Are you sure you want to delete your account? This action cannot be undone."
- Modal size: small
Confirmation:
- Review warning carefully
- Click Delete to confirm
- 300ms delay for user consideration
- Button label: "Deleting..." when processing
- Success toast: "Account deleted successfully"
- Account permanently removed
Important Note:
- Line 136 in delete-account-settings.tsx shows "Delete Account" button actually calls
setDeleteOrgAccountConfirmation(true) - This appears to be a bug - the button labeled "Delete Account" opens organization deletion modal
- The
deleteAccountConfirmationmodal (lines 189-215) exists but is never triggered
Delete Organization (ADMIN Only)
Access Control:
- Only shown if user has ADMIN or SYSOP role
- Section: "Organization account settings"
- Separate from user account deletion
What It Does:
- Deletes entire organization
- Removes all organization users
- Deletes all organization data
- Extremely destructive - cannot be undone
Delete Process:
- Click Delete Organization button (danger variant, red)
- Confirmation modal opens
- Title: "Delete organization account confirmation"
- Caption: "Are you sure you want to delete your organization account? This action will delete everything in your account and other user accounts in this organization and this action cannot be undone."
- Modal size: small
Confirmation:
- Review critical warning
- Understand all users and data will be deleted
- Click Delete to confirm
- 300ms delay
- Button label: "Deleting..." when processing
- Success toast: "Account deleted successfully"
- Organization permanently removed
Organization Deletion Details:
- Requires organization ID
- Calls DELETE endpoint with org ID
- All users in organization deleted
- All documents and data deleted
- Cannot be reversed
Component Structure
The Profile page is composed of multiple components:
Main Components:
- AccountDetailsForm - Personal information
- PasswordForm - Password change modal
- OrganizationDetailsForm - Organization details (ADMIN/SYSOP only to edit)
- SecuritySettings - 2FA management
- AccountPersonalization - Export templates
- Keymap - Keyboard shortcuts
- DeleteAccountSettings - Danger zone
Component Order: Components render in this order on the page, each as a separate section.
Form Management
React Hook Form:
- All forms use react-hook-form for state management
- Yup schema validation
- isDirty state for save button enablement
- Error display below each field
Account Form:
- Schema: accountDetailsSchema
- Fields: first_name, last_name, email, newsletter
- Submit: updateMe mutation
Organization Form:
- Schema: organizationSchema
- Fields: name, email, phone, address fields, billing_vat, diarization, allow_magic_link_export, reseller_branding
- Submit: updateOrganization mutation
Password Form:
- Schema: passwordSchema (min 12 chars, uppercase, lowercase, number)
- Fields: old_password, new_password, confirm_new_password
- Submit: changePassword mutation
Error Handling
Toast Notifications:
- Success toasts in green
- Error toasts in red
- Loading states shown in button labels
Error Message Priority:
- detail array from response (field-specific)
- message field
- error_description field
- Fallback message from translations
Example Error Handling:
if (Array.isArray(data?.detail)) {
messages = data.detail.map((err: any) => {
const field = err.loc?.[1] ?? 'field';
return `${field}: ${err.msg}`;
});
} else if (data?.message) {
messages = [data.message];
} else if (data?.error_description) {
messages = [data.error_description];
} else {
messages = [fallbackMessage];
}
Keep your profile current! Update information, enable security features, and manage account settings for optimal experience.
Next Steps
Manage your account:
- API Keys - Generate API tokens for integrations
- Billing & Subscription - Manage payments and plans
- Usage & Limits - Track your usage and quotas
- User Preferences - Customize your experience