Commit Graph

10 Commits

Author SHA1 Message Date
bymyself
ff0c15b119 merge main into rh-test 2025-09-28 15:33:29 -07:00
Jin Yi
8ca541e850 feat: add email verification check for cloud onboarding (#5636)
## 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>
2025-09-20 20:29:56 -07:00
Jin Yi
16ebe33488 fix: Add validation and consistent data structure for survey 'Other' options (#5620)
## Summary
- Added validation to prevent users from proceeding when "Other" is
selected but text input is empty
- Changed data structure to send consistent string values to database
instead of mixed objects
- Both useCase and industry now send user input directly when "Other" is
selected

## Changes
- Added `useCaseOther` field and input to survey form  
- Updated `validStep2` to validate useCaseOther when useCase is 'other'
- Modified submit payload to send string values consistently for both
useCase and industry fields

## Test plan
- [x] Select "Other" for use case without filling input → Next button
disabled
- [x] Select "Other" for industry without filling input → Next button
disabled
- [x] Fill in "Other" text inputs → Next button enabled
- [x] Submit survey with "Other" selections → Payload sends user input
as string values

🤖 Generated with [Claude Code](https://claude.ai/code)

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-5620-fix-Add-validation-and-consistent-data-structure-for-survey-Other-options-2716d73d3650811faa6efc547db14930)
by [Unito](https://www.unito.io)
2025-09-17 21:14:20 -07:00
Jin Yi
992efc4486 chore: loading text to loading icon, modify the width for responsive web (#5582) 2025-09-15 00:59:50 -07:00
Jin Yi
88130a9cae feature: font modified (#5583) 2025-09-15 00:59:06 -07:00
Jin Yi
ffd2b0efab Feature/cloud reponsive (#5580)
* fix: hero title font & responsive

* chore: text center added

* chore: style modified

* chore: delete learn about button

* chore: waitlist title added
2025-09-15 00:42:39 -07:00
Christian Byrne
7c9b8bb7a6 feat: add cloudOnboarding translations for all supported languages (#5578)
* 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>
2025-09-15 00:16:55 -07:00
Christian Byrne
18b3b11b9a feat: add error handling and timeout recovery to cloud onboarding (#5573)
Implements robust error handling and authentication timeout recovery for the cloud onboarding flow:

- Enhanced UserCheckView with VueUse useAsyncState for declarative error handling
- Added parallel API calls for better performance using Promise.all
- Implemented loading states with skeleton views and user-friendly error messages
- Added authentication timeout handling (16s) with recovery options
- Created CloudAuthTimeoutView with "Sign Out & Try Again" functionality
- Added comprehensive i18n support for error states
2025-09-14 23:20:07 -07:00
Christian Byrne
a13eeaea7e [feat] Add skeleton loading states to cloud onboarding flow (#5568)
* [feat] Add skeleton loading states to cloud onboarding flow

- Create dedicated skeleton components matching exact layouts
- CloudLoginViewSkeleton for login page with beta notice, form, social buttons
- CloudSurveyViewSkeleton for multi-step survey with progress bar
- CloudWaitlistViewSkeleton for waitlist page with title and messages
- CloudClaimInviteViewSkeleton for invite claiming page
- Update UserCheckView to show contextual skeleton based on redirect destination
- Update InviteCheckView to show appropriate skeleton during loading
- Use i18n for loading text to maintain consistency

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* [feat] Fix skeleton loading flow to show progressive states

- Start with simple loading text when checking user status
- Show survey skeleton while checking survey completion
- Show waitlist skeleton while checking user activation status
- Show login skeleton when redirecting to login on error
- Preserve all original comments from upstream authors
- Use progressive disclosure based on API response flow

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-09-14 19:40:41 -07:00
Jin Yi
59a1380f39 [feat] Cloud onboarding flow implementation (#5494)
* feature: cloud onboarding scaffolding

* fix: redirect unknown routes

* feature: cloud onboarding flow

* chore: code review

* test: api mock for test failing

* refactor: Centralize onboarding routing with dedicated check views

- Add UserCheckView to handle all user status routing decisions
- Add InviteCheckView to manage invite code validation flow
- Simplify auth.ts by removing async operations and extra complexity
- Update login/signup to always redirect through UserCheckView
- Remove distributed routing logic from all onboarding components
- Simplify router guards to delegate to check views
- Fix infinite redirect loops for non-whitelisted users
- Use window.location.href for final navigation to bypass router conflicts

Breaking changes:
- Removed claimInvite from auth.ts (moved to CloudClaimInviteView)
- Changed route names to use cloud- prefix consistently
- Simplified getMe() to synchronous function

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: delete unused file

* Revert "test: api mock for test failing"

This reverts commit 06ca56c05e.

* feature: API applied

* feature: survey view

* feature: signup / login view completed

* style: min-h-screen deleted

* feature: completed login flow

* feature: router view added

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-09-14 16:36:57 -07:00