- Add account/ package to Key Packages table - Add VendorAdminService/Controller to vendor/ package - Note TenantPortalService delegation to AccountService - Update ui/CLAUDE.md: AccountSettingsPage, VendorAdminsPage, Administrators sidebar, user menu dropdown, shared components Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
3.1 KiB
3.1 KiB
Frontend
React 19 SPA served at /platform/* by the Spring Boot backend.
Core files
main.tsx— React 19 rootrouter.tsx—/vendor/*+/tenant/*withRequireScopeguards,LandingRedirectthat waits for scopes (redirects to/onboardingif user has zero orgs),/registerroute for OIDC sign-up flow,/onboardingroute for self-service tenant creationLayout.tsx— persona-aware sidebar: vendor sees expandable "Vendor" section (Tenants, Audit Log, Certificates, Metrics, Infrastructure, Email Connector, Administrators, Logto Console), tenant admin sees Dashboard/License/SSO/Team/Audit/Settings. TopBar user dropdown includes "Account Settings" link.OrgResolver.tsx— merges global + org-scoped token scopes (vendor's platform:admin is global)config.ts— fetch Logto config from /platform/api/config
Auth hooks
auth/useAuth.ts— auth hook (isAuthenticated, logout, signIn)auth/useOrganization.ts— Zustand store for current tenantauth/useScopes.ts— decode JWT scopes, hasScope()auth/ProtectedRoute.tsx— guard (redirects to /login)auth/LoginPage.tsx— redirects to Logto OIDC sign-inauth/RegisterPage.tsx— redirects to Logto OIDC withfirstScreen: 'register'
Pages
- Onboarding:
OnboardingPage.tsx— self-service trial tenant creation (org name + slug), shown to users with zero org memberships after sign-up - Shared pages:
AccountSettingsPage.tsx—/settings/account, any authenticated user. Profile, password (with current-password verification), TOTP MFA, passkeys. Composes shared components fromcomponents/account/. - Vendor pages:
VendorTenantsPage.tsx,CreateTenantPage.tsx,TenantDetailPage.tsx,VendorAuditPage.tsx,CertificatesPage.tsx,InfrastructurePage.tsx,EmailConfigPage.tsx(SMTP connector config, registration toggle, test email),VendorAdminsPage.tsx(platform admin list, invite/create, remove, reset password/MFA) - Tenant pages:
TenantDashboardPage.tsx(restart + upgrade server),TenantLicensePage.tsx,SsoPage.tsx,TeamPage.tsx(reset member passwords),TenantAuditPage.tsx,SettingsPage.tsx(imports shared account components, plus tenant-specific auth policy, MFA enforcement toggle, server admin password)
Custom Sign-in UI (ui/sign-in/)
Separate Vite+React SPA replacing Logto's default sign-in page. Built as custom Logto Docker image — see docker/CLAUDE.md for details.
SignInPage.tsx— sign-in + registration form with @cameleer/design-system components. Three modes:signIn(email/username + password),register(email + password + confirm),verifyCode(6-digit email verification). Readsfirst_screen=registerfrom URL query params to determine initial view. Registration is disabled by default — the vendor admin enables it via the Email Connector page after configuring SMTP.experience-api.ts— Logto Experience API client. Sign-in: init -> verify password -> identify -> submit. Registration: init Register -> send verification code -> verify code -> add password profile -> identify -> submit. Auto-detects email vs username identifiers.