feat(frontend): invite-based registration UI
Some checks failed
CI / Unit & Component Tests (push) Failing after 2m37s
CI / OCR Service Tests (push) Successful in 32s
CI / OCR Service Tests (pull_request) Successful in 30s
CI / Backend Unit Tests (push) Failing after 2m47s
CI / Unit & Component Tests (pull_request) Failing after 2m29s
CI / Backend Unit Tests (pull_request) Failing after 2m46s

- Add /register route with invite code prefill, password show/hide
- Add /login?registered=1 success banner
- Add /admin/invites page: list, create, revoke, copy link
- Add Einladungen nav section to admin sidebar (ADMIN_USER perm)
- Add invite error codes to errors.ts
- Add 48 i18n keys across de/en/es
- Update hooks.server.ts to allow public access to invite/register API

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Marcel
2026-04-19 01:01:19 +02:00
parent 61fa35df67
commit daea748a20
22 changed files with 953 additions and 21 deletions

View File

@@ -640,5 +640,53 @@
"filter_operator_and": "AND",
"filter_operator_or": "OR",
"filter_operator_and_label": "All selected tags must match (AND)",
"filter_operator_or_label": "At least one tag must match (OR)"
"filter_operator_or_label": "At least one tag must match (OR)",
"error_invite_not_found": "Invite link not found or invalid.",
"error_invite_exhausted": "This invite link has already been fully used.",
"error_invite_revoked": "This invite link has been deactivated.",
"error_invite_expired": "This invite link has expired.",
"register_heading": "Create account",
"register_subtext": "You've been invited to join Familienarchiv.",
"register_label_first_name": "First name",
"register_label_last_name": "Last name",
"register_label_email": "Email address",
"register_label_password": "Password",
"register_prefill_hint": "Pre-filled from your invite you can change it",
"register_password_show": "Show password",
"register_password_hide": "Hide password",
"register_btn_submit": "Create account",
"register_invalid_code": "Invalid invite link",
"register_invalid_code_desc": "This invite link is not valid, has already been used, or has expired. Please contact the administrator.",
"register_success": "Your account has been created. You can now sign in.",
"login_registered_success": "Your account was created successfully. Sign in now.",
"admin_tab_invites": "Invites",
"admin_invites_list_title": "Invites",
"admin_invites_empty": "No active invites.",
"admin_btn_new_invite": "New invite",
"admin_btn_show_all": "Show all",
"admin_btn_show_active": "Active only",
"admin_btn_revoke": "Revoke",
"admin_btn_copy_link": "Copy link",
"admin_btn_copied": "Copied!",
"admin_invite_status_active": "Active",
"admin_invite_status_exhausted": "Exhausted",
"admin_invite_status_revoked": "Revoked",
"admin_invite_status_expired": "Expired",
"admin_invite_col_code": "Code",
"admin_invite_col_label": "Label",
"admin_invite_col_uses": "Uses",
"admin_invite_col_expiry": "Expiry",
"admin_invite_col_status": "Status",
"admin_invite_col_link": "Link",
"admin_invite_unlimited": "∞",
"admin_invite_no_expiry": "No expiry",
"admin_new_invite_label": "Label (e.g. who it is for)",
"admin_new_invite_max_uses": "Max uses (empty = unlimited)",
"admin_new_invite_prefill_first": "Pre-fill first name (optional)",
"admin_new_invite_prefill_last": "Pre-fill last name (optional)",
"admin_new_invite_prefill_email": "Pre-fill email (optional)",
"admin_new_invite_expires": "Expiry date (optional)",
"admin_invite_created_title": "Invite created",
"admin_invite_created_desc": "Share this link with the person you are inviting:",
"admin_invite_revoke_confirm": "Really revoke this invite?"
}