## Summary
Cleans up the cloud login page by removing redundant UI elements.
## Changes
1. **Removed duplicate signup text**: "Don't have an account yet? Sign
up instead" was appearing twice - once at the top and once at the
bottom. Now it only appears once at the top where it's most visible.
2. **Removed beta banner**: The "Cloud is currently in private beta"
banner at the top of the page has been removed.
## Before/After
**Before:**
- Beta banner at top
- "Don't have an account yet?" at top
- Form in middle
- "Don't have an account yet?" again at bottom (duplicate)
**After:**
- "Don't have an account yet?" at top only
- Form in middle
- Contact info at bottom
The page is now cleaner and less repetitive.
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6270-ux-clean-up-cloud-login-page-remove-duplicate-signup-text-and-beta-banner-2976d73d365081c5a7a5c15dd426317d)
by [Unito](https://www.unito.io)
## Summary
- Fixed duplicate verification email issue where emails were sent every
time users returned to the root page
- Emails are now only sent automatically when coming from signup/login
flow
- Added proper toast notifications to cloud onboarding pages
## Changes
- **Conditional email sending**: Only send verification email when
`fromAuth=true` query parameter is present (from signup/login flow)
- **Auto-cleanup**: Remove `fromAuth` parameter after sending email to
prevent re-sending on page refresh
- **Toast system fix**:
- Added `GlobalToast` component to `CloudLayoutView` for proper toast
display in onboarding pages
- Migrated from PrimeVue `useToast()` to ComfyUI's `useToastStore()`
- **UI improvements**:
- Better spacing and layout for email verification page
- Added multiline support for tips and instructions
- Improved toast messages with clearer titles and summaries
## Problem it solves
Previously, when users signed up and received a verification email,
every time they navigated back to the root page (`/`), the router guard
would redirect them to the email verification page which would
automatically send another email. This caused multiple emails to be
sent, often ending up in spam folders.
## Test plan
- [x] Sign up for a new account → Should receive ONE verification email
- [x] Navigate away and back to root → Should NOT receive another email
- [x] Click "Resend email" button → Should receive a new email
- [x] Refresh the verification page → Should NOT receive another email
- [x] Toast notifications appear correctly in all auth flows
[screen-capture
(1).webm](https://github.com/user-attachments/assets/25ffad94-d129-4051-b29e-5bdec696cd11)
## Summary
- Removed the "Don't have an account? Sign up" link from the
CloudLoginView when users access the page with an invite code (from
invite link in email)
- The signup option now only shows when there's no invite code present
## Changes
- Modified `CloudLoginView.vue` to conditionally show the signup text
only when `!hasInviteCode`
- Used `<template>` wrapper for better conditional rendering
## Why this change?
Users coming from an invite email link should focus on logging in with
their existing account rather than being presented with a signup option,
as they've already been invited to join.
Fixes the UX issue where invited users might get confused by seeing a
signup option when they should be logging in with their invited account.
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6070-chore-Remove-signup-option-on-invite-page-when-using-invite-code-28d6d73d365081e29ac7d58140b2079f)
by [Unito](https://www.unito.io)
## Summary
Improve cloud onboarding flow by adding email verification polling and
fixing signup auto-logout issue.
## Changes
- **What**:
- Add polling mechanism to automatically check email verification status
every 5 seconds on the verify email page
- Fix auto-logout issue after signup by redirecting to root instead of
login page
- Remove automatic logout on login page mount to preserve user session
after signup
- **Breaking**: None
- **Dependencies**: None
## Review Focus
- Email verification polling implementation uses Firebase Auth's
`reload()` method to refresh user state
- Polling stops after 5 minutes to prevent indefinite resource usage
- Proper cleanup of intervals/timeouts in `onUnmounted` hook to prevent
memory leaks
- Signup flow now maintains user session instead of forcing re-login
## User Experience Improvements
1. **Before**: Users had to manually refresh the page after clicking
email verification link
**After**: Page automatically detects verification and proceeds to next
step
2. **Before**: After signup, users were redirected to login page and
automatically logged out, requiring them to sign in again
**After**: Users stay logged in after signup and are redirected to root,
maintaining their session
## Testing
- Tested email verification polling with both verified and unverified
states
- Verified that invite codes are preserved throughout the flow
- Confirmed no memory leaks from polling intervals
- Tested signup flow with email/password authentication
## Related Issues
- Resolves user complaints about having to sign in twice during signup
flow
- Addresses email verification page not auto-advancing after
verification
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6030-fix-Improve-cloud-onboarding-UX-with-email-verification-polling-and-signup-flow-28a6d73d365081be8020caee6337c3e7)
by [Unito](https://www.unito.io)
## Summary
- Added email verification flow for new users during onboarding
- Implemented invite code claiming with proper validation
- Updated API endpoints from `/invite/` to `/invite_code/` for
consistency
## Changes
### Email Verification
- Added `CloudVerifyEmailView` component with email verification UI
- Added email verification check after login in `CloudLoginView`
- Added `isEmailVerified` property to Firebase auth store
- Users must verify email before claiming invite codes
### Invite Code Flow
- Enhanced `CloudClaimInviteView` with full claim invite functionality
- Updated `InviteCheckView` to route users based on email verification
status
- Modified API to return both `claimed` and `expired` status for invite
codes
- Added proper error handling and Sentry logging for invite operations
### API Updates
- Changed endpoint paths from `/invite/` to `/invite_code/`
- Updated `getInviteCodeStatus()` to return `{ claimed: boolean;
expired: boolean }`
- Updated `claimInvite()` to return `{ success: boolean; message: string
}`
### UI/UX Improvements
- Added Korean translations for all new strings
- Improved button styling and layout in survey and waitlist views
- Added proper loading states and error handling
## Test Plan
- [ ] Test new user signup flow with email verification
- [ ] Test invite code validation (expired/claimed/valid codes)
- [ ] Test email verification redirect flow
- [ ] Test invite claiming after email verification
- [ ] Verify Korean translations display correctly
🤖 Generated with [Claude Code](https://claude.ai/code)
---------
Co-authored-by: Claude <noreply@anthropic.com>
* fix: hero title font & responsive
* chore: text center added
* chore: style modified
* chore: delete learn about button
* chore: waitlist title added
* feat: add missing translations for cloud onboarding components
Replaces hardcoded text with i18n translations across cloud onboarding flow:
- CloudWaitlistView: Add translations for title lines, questions text, and contact link
- CloudClaimInviteView: Add translations for processing title and claim button
- CloudSorryContactSupportView: Add translation for error title
- CloudVerifyEmailView: Add translation for verification title
- CloudTemplateFooter: Add translation for "Need Help?" link
- CloudLoginView: Replace hardcoded "Questions? Contact us" and "here" with translations
- CloudSignupView: Replace hardcoded "Questions? Contact us" and "here" with translations
- CloudForgotPasswordView: Replace hardcoded "here" with translation
- Remove all eslint-disable @intlify/vue-i18n/no-raw-text comments
- Add proper useI18n imports to all affected components
Ensures consistent internationalization support across the entire cloud onboarding experience.
* feat: add cloudOnboarding translations for all supported languages
Adds comprehensive translations for cloud onboarding components across all supported locales:
English (en): Base translations for waitlist, claim invite, verify email, and support
Chinese Simplified (zh): 等候名单, 邀请码处理, 邮箱验证, 联系支持
Chinese Traditional (zh-TW): 等候名單, 邀請碼處理, 郵箱驗證, 聯繫支援
Japanese (ja): ウェイトリスト, 招待コード処理, メール認証, サポート連絡
Korean (ko): 대기명단, 초대코드 처리, 이메일 인증, 지원 문의
Russian (ru): Список ожидания, обработка кода приглашения, подтверждение почты
French (fr): Liste d'attente, traitement code invitation, vérification email
Spanish (es): Lista de espera, procesamiento código invitación, verificación email
Arabic (ar): قائمة الانتظار, معالجة رمز الدعوة, التحقق من البريد
Ensures consistent internationalization across the entire cloud onboarding experience for global users.
* feat: add missing privateBeta and start section translations
Adds translations for previously missing cloud onboarding text that was already using translation keys:
- privateBeta.title: "Cloud is currently in private beta" message
- privateBeta.desc: Beta signup description text
- start.title: "Start creating in seconds" header
- start.desc: "Zero setup required" subtext
- start.explain: Multiple output generation description
- start.learnAboutButton: "Learn about Cloud" button text
- start.wantToRun: Local ComfyUI option text
- start.download: "Download ComfyUI" button text
All 9 languages updated:
- Traditional Chinese: 私人測試階段, 幾秒內開始創作, 了解 Cloud
- Simplified Chinese: 私人测试阶段, 几秒内开始创作, 了解 Cloud
- Japanese: プライベートベータ版, 数秒で創作を開始, Cloudについて学ぶ
- Korean: 비공개 베타 버전, 몇 초 만에 창작 시작, Cloud에 대해 알아보기
- Russian: закрытая бета-версия, начните создавать за секунды, Узнать о Cloud
- French: bêta privée, commencez à créer en quelques secondes, En savoir plus sur Cloud
- Spanish: beta privada, comienza a crear en segundos, Aprende sobre Cloud
- Arabic: البيتا الخاصة, ابدأ الإبداع في ثوان, تعلم عن Cloud
Fixes missing translations reported during Traditional Chinese testing.
* feat: restore French translation file and add cloudOnboarding translations
- Restored src/locales/fr/main.json from clean backup to remove duplicate sections
- Added complete French translations for cloudOnboarding section
- Includes survey, waitlist, forgotPassword, privateBeta, start, and other subsections
- Structure matches English version exactly
* [feat] Refactor cloud translations to top-level keys
- Replace nested cloudOnboarding.section.key structure with flattened cloudSection_key pattern
- Add comprehensive cloud translations for all 9 supported languages (ar, en, es, fr, ja, ko, ru, zh, zh-TW)
- Update all Vue components to use new translation key structure
- Fix "Need Help?" and other missing translations across all languages
- Simplify translation maintenance and avoid JSON structure conflicts
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>