-
Notifications
You must be signed in to change notification settings - Fork 181
SEL-479: Multi-ID onboarding mvp flow #688
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
WalkthroughThis update generalizes references from "passport" to "ID" across multiple screens, introduces optional icons in tips, and refines layouts for better clarity and accessibility. Several screens receive updated instructional text, simplified layouts, and improved styling. New constants for colors, analytics events, and links are added, and the iOS project version is incremented. Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant LaunchScreen
participant Browser
participant Onboarding
User->>LaunchScreen: Opens app
LaunchScreen->>User: Shows card with logo, title, and description
User->>LaunchScreen: Taps "See supported biometric IDs"
LaunchScreen->>Browser: Opens external URL
User->>LaunchScreen: Taps "Get started"
LaunchScreen->>Onboarding: Initiates onboarding flow
Possibly related PRs
Suggested labels
Poem
📜 Recent review detailsConfiguration used: .coderabbit.yaml 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
⏰ Context from checks skipped due to timeout of 90000ms (1)
✨ Finishing Touches
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
Documentation and Community
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 3
🧹 Nitpick comments (3)
app/src/screens/misc/LaunchScreen.tsx (2)
99-163: Review styling approach and color usage.The StyleSheet implementation is comprehensive, but there are a few considerations:
- The new zinc800/zinc900 colors are used appropriately for the dark theme
- Consider extracting magic numbers (percentages, specific dimensions) into constants
- The shadow styling could benefit from platform-specific optimizations
Consider extracting layout constants:
+const LAYOUT_CONSTANTS = { + CARD_MARGIN_TOP: '30%', + CONTAINER_PADDING_TOP: '25%', + CONTAINER_WIDTH: '102%', +} as const; const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'flex-start', alignItems: 'center', - width: '102%', - paddingTop: '25%', + width: LAYOUT_CONSTANTS.CONTAINER_WIDTH, + paddingTop: LAYOUT_CONSTANTS.CONTAINER_PADDING_TOP, }, card: { width: '100%', - marginTop: '30%', + marginTop: LAYOUT_CONSTANTS.CARD_MARGIN_TOP,
107-121: Consider extracting card styling to a theme or shared component.The card styling with zinc900 background, shadows, and rounded corners could be reused across the application. Consider extracting this to a shared component or theme system for consistency.
// Consider creating a shared Card component const Card = styled(View, { borderRadius: 16, paddingVertical: 40, paddingHorizontal: 20, alignItems: 'center', backgroundColor: zinc900, shadowColor: black, shadowOffset: { width: 0, height: 4 }, shadowOpacity: 0.2, shadowRadius: 12, elevation: 8, });app/src/screens/passport/PassportNFCScanScreen.tsx (1)
362-382: Consider extracting styles to improve maintainability.While the custom styles work correctly, the inline
StyleSheet.createapproach could benefit from being extracted to a shared design system or style constants file, especially since similar styling patterns appear across multiple screens in this PR.Consider creating a shared styles file:
// styles/typography.ts export const createTypographyStyles = (colors: any, fonts: any) => ({ sectionTitle: { fontFamily: fonts.dinot, fontSize: 18, fontWeight: '500', textAlign: 'center', }, bodyText: { fontFamily: fonts.dinot, fontSize: 16, fontWeight: '500', textAlign: 'center', color: colors.slate500, }, disclaimer: { fontFamily: fonts.dinot, fontSize: 11, fontWeight: '500', textAlign: 'center', color: colors.slate400, letterSpacing: 0.44, }, });
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (12)
app/src/components/Tips.tsx(1 hunks)app/src/layouts/SimpleScrolledTitleLayout.tsx(3 hunks)app/src/navigation/misc.tsx(2 hunks)app/src/screens/misc/LaunchScreen.tsx(2 hunks)app/src/screens/passport/PassportCameraScreen.tsx(4 hunks)app/src/screens/passport/PassportCameraTroubleScreen.tsx(3 hunks)app/src/screens/passport/PassportNFCScanScreen.tsx(4 hunks)app/src/screens/passport/PassportNFCTroubleScreen.tsx(1 hunks)app/src/screens/passport/PassportOnboardingScreen.tsx(1 hunks)app/src/screens/prove/ConfirmBelongingScreen.tsx(1 hunks)app/src/screens/recovery/AccountRecoveryChoiceScreen.tsx(1 hunks)app/src/utils/colors.ts(1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
`app/src/**/*.{ts,tsx,js,jsx}`: Review React Native TypeScript code for: - Compo...
app/src/**/*.{ts,tsx,js,jsx}: Review React Native TypeScript code for:
- Component architecture and reusability
- State management patterns
- Performance optimizations
- TypeScript type safety
- React hooks usage and dependencies
- Navigation patterns
⚙️ Source: CodeRabbit Configuration File
List of files the instruction was applied to:
app/src/screens/recovery/AccountRecoveryChoiceScreen.tsxapp/src/screens/passport/PassportNFCTroubleScreen.tsxapp/src/utils/colors.tsapp/src/screens/prove/ConfirmBelongingScreen.tsxapp/src/navigation/misc.tsxapp/src/screens/passport/PassportCameraTroubleScreen.tsxapp/src/screens/passport/PassportCameraScreen.tsxapp/src/screens/passport/PassportOnboardingScreen.tsxapp/src/components/Tips.tsxapp/src/screens/misc/LaunchScreen.tsxapp/src/screens/passport/PassportNFCScanScreen.tsxapp/src/layouts/SimpleScrolledTitleLayout.tsx
🧬 Code Graph Analysis (6)
app/src/screens/passport/PassportNFCTroubleScreen.tsx (2)
app/src/components/typography/Caption.tsx (1)
Caption(8-21)app/src/utils/colors.ts (1)
slate500(13-13)
app/src/navigation/misc.tsx (1)
app/src/utils/colors.ts (1)
black(6-6)
app/src/screens/passport/PassportCameraTroubleScreen.tsx (2)
app/src/components/typography/Caption.tsx (1)
Caption(8-21)app/src/utils/colors.ts (1)
slate500(13-13)
app/src/screens/passport/PassportOnboardingScreen.tsx (1)
app/src/components/typography/Title.tsx (1)
Title(8-27)
app/src/components/Tips.tsx (2)
app/src/components/typography/Caption.tsx (1)
Caption(8-21)app/src/utils/colors.ts (1)
slate500(13-13)
app/src/layouts/SimpleScrolledTitleLayout.tsx (5)
app/src/layouts/ExpandableBottomLayout.tsx (1)
ExpandableBottomLayout(155-160)app/src/utils/colors.ts (1)
white(7-7)app/src/components/typography/Title.tsx (1)
Title(8-27)app/src/components/buttons/SecondaryButton.tsx (1)
SecondaryButton(8-23)app/src/components/buttons/PrimaryButton.tsx (1)
PrimaryButton(8-23)
🪛 Biome (1.9.4)
app/src/screens/misc/LaunchScreen.tsx
[error] 19-20: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
[error] 22-22: Unexpected empty object pattern.
(lint/correctness/noEmptyPattern)
⏰ Context from checks skipped due to timeout of 90000ms (1)
- GitHub Check: build
🔇 Additional comments (56)
app/src/screens/prove/ConfirmBelongingScreen.tsx (1)
97-98: LGTM: Terminology generalization implemented correctly.The change from "passport" to "ID" aligns with the broader multi-ID onboarding initiative and maintains consistency across the user interface.
app/src/screens/recovery/AccountRecoveryChoiceScreen.tsx (1)
69-69: LGTM: Log message terminology updated consistently.The log message change from "passport" to "ID" maintains consistency with the generalized terminology across the application.
app/src/utils/colors.ts (1)
29-29: LGTM: New color constant added with proper formatting.The
zinc800color addition follows the established naming convention and maintains proper ordering within the zinc color palette. The hex value#27272Ais valid and appropriately positioned.app/src/navigation/misc.tsx (2)
17-21: LGTM: Custom header provides better status bar control.The replacement of
headerShown: falsewith a custom header component allows for precise StatusBar styling while maintaining the desired appearance. ThenavigationBarColoraddition ensures consistent theming.
38-38: LGTM: Improved code formatting.The blank line addition improves readability by providing visual separation between screen definitions.
app/src/layouts/SimpleScrolledTitleLayout.tsx (6)
4-4: LGTM: Safe area context integration added.The
useSafeAreaInsetsimport enables proper handling of device safe areas for the enhanced layout.
19-21: LGTM: Interface extended with optional layout sections.The addition of optional
headerandfooterprops provides excellent flexibility for layout customization while maintaining backward compatibility through optional typing.
29-32: LGTM: Function signature updated to support new props.The destructuring properly includes the new
headerandfooterprops, and theuseSafeAreaInsetshook is correctly initialized for safe area calculations.
36-44: LGTM: Well-structured layout with proper safe area handling.The restructured layout effectively:
- Places title and optional header in a YStack with proper top safe area padding
- Wraps children in a ScrollView with appropriate styling and flex properties
- Maintains good separation of concerns between fixed and scrollable content
The
showsVerticalScrollIndicator={false}follows common mobile UX patterns.
45-45: LGTM: Conditional footer rendering implemented correctly.The optional footer is properly rendered with appropriate spacing when provided, maintaining clean layout structure.
51-53: LGTM: Primary button with proper safe area padding.The primary button is wrapped in a YStack with bottom safe area padding, ensuring proper spacing on devices with home indicators or bottom insets.
app/src/screens/misc/LaunchScreen.tsx (6)
35-58: Excellent performance improvement with static layout.The refactor from Lottie animation to static SVG layout is a solid performance optimization. The YStack implementation with proper spacing and safe area handling looks clean and maintainable.
60-92: Good component composition and accessibility considerations.The button layout and terms/privacy notice structure follows good React Native patterns. The AbstractButton usage is consistent and the Caption component properly handles the legal text with anchor links.
35-42: Excellent refactoring to static layout.The replacement of the Lottie animation with a static YStack layout significantly improves performance by eliminating animation overhead and reducing bundle size. The use of safe area insets ensures proper spacing across different devices.
62-78: ```shell
#!/bin/bashLocate the AbstractButton component file
file=$(find . -type f -name "AbstractButton.tsx" | head -n1)
echo "Found AbstractButton component at: $file"Check for accessibility props in the component
echo -e "\n🔍 Checking for accessibility props:"
rg -n "accessibility" "$file" || echo "No accessibility props found."Inspect underlying touchable element for feedback and roles
echo -e "\n🔍 Checking for touchable implementation:"
rg -n -e "TouchableOpacity" -e "Pressable" -C 2 "$file" || echo "No TouchableOpacity or Pressable usage found."--- `35-93`: **Excellent refactoring from complex animation to clean static layout.** The removal of Lottie animation in favor of a simpler static layout improves performance and reduces bundle size. The new card-based design with proper safe area handling and consistent use of AbstractButton components aligns well with the design system updates. --- `17-17`: **Verify the new zinc800 and zinc900 colors are properly defined.** The component uses new colors that should be consistently available across the design system. ```shell #!/bin/bash # Verify that zinc800 and zinc900 colors are properly exported rg -A 2 -B 2 "zinc800|zinc900" app/src/utils/colors.tsapp/src/screens/passport/PassportNFCTroubleScreen.tsx (9)
63-63: Good terminology generalization from "passport" to "ID".The title update aligns well with the broader multi-ID onboarding initiative mentioned in the PR objectives. This makes the interface more inclusive of different document types.
68-86: Excellent layout improvements with proper spacing.The YStack implementation with structured padding and gap properties follows Tamagui best practices. The layout hierarchy is clear and the spacing values are consistent.
76-76: Good typographical correction.Removing the extra colon improves the text readability and maintains consistent punctuation throughout the tips section.
63-63: Good terminology consistency update.The change from "passport" to "ID" maintains consistency with the broader application changes and makes the interface more inclusive of different identity documents.
68-73: Excellent layout spacing improvements.The addition of structured padding and gap properties to the YStack provides better visual hierarchy and spacing. The values (paddingTop: 24, paddingHorizontal: 10, paddingBottom: 32, gap: 20) create a well-balanced layout.
76-76: Text correction improves readability.The removal of the extra colon makes the introductory text more natural and grammatically correct.
63-63: Good terminology consistency update.The title change from "passport" to "ID" aligns with the broader UI generalization effort across the application.
68-73: Layout improvements enhance user experience.The added padding and gap properties improve the visual spacing and readability of the troubleshooting content.
76-76: Typography correction improves content quality.Removing the extra colon makes the instructional text more polished and professional.
app/src/screens/passport/PassportOnboardingScreen.tsx (4)
61-61: Consistent terminology update aligns with multi-ID initiative.The title change from "Scan your passport" to "Scan your ID" properly generalizes the interface for multiple document types, supporting the SEL-479 multi-ID onboarding MVP flow mentioned in the PR objectives.
63-68: Improved user guidance with simplified instructions.The instruction updates are more user-friendly:
- "Open to the photo page" is clearer than specific passport page references
- The machine-readable text positioning guidance is more actionable
These changes make the interface more accessible across different ID document types.
61-68: Improved instruction clarity and generalization.The text updates effectively generalize the interface from passport-specific to ID-generic terms. The simplified instructions ("Open to the photo page" and "Lay your document flat and position the machine readable text in the viewfinder") are clearer and more actionable than the previous text.
61-68: Excellent text simplification and terminology consistency.The updates from "passport" to "ID" and the simplified, clearer instructions ("Open to the photo page" and "Lay your document flat...") significantly improve user experience and align with the broader UI generalization effort.
app/src/screens/passport/PassportCameraTroubleScreen.tsx (9)
8-12: Good icon import organization and SVG usage.The SVG icon imports are well-organized and the naming convention is clear. Using SVG components for icons is the right choice for React Native performance and scalability.
19-45: Excellent visual enhancement with icon integration.The addition of icons to each tip significantly improves the user experience:
- Icons are properly sized (28x28) and consistent
- Each icon contextually matches its tip content
- The icon prop integration with the TipProps interface is clean
56-72: Smart layout architecture improvement.Moving the caption content to header/footer props in SimpleScrolledTitleLayout is a great architectural decision. This:
- Improves component reusability
- Provides better structural clarity
- Leverages the layout component's new capabilities effectively
8-12: Excellent visual enhancement with icon imports.The addition of contextually relevant SVG icons improves the user experience by providing visual cues that complement the textual instructions. The consistent sizing (width={28} height={28}) ensures visual harmony.
22-44: Good terminology consistency and icon integration.The updates from "passport page" to "ID page" maintain consistency across the application. The icon assignments are contextually appropriate and enhance the visual guidance for users.
59-69: Improved layout structure with header and footer.The restructuring to use header and footer props in SimpleScrolledTitleLayout creates better visual hierarchy and separation of content. This approach is more maintainable and provides clearer structure than inline content.
8-12: Good addition of visual icons for enhanced user guidance.The imported SVG icons will improve the visual appeal and usability of the troubleshooting tips. The consistent 28x28 sizing is appropriate for the interface.
19-45: Excellent integration of icons with tips content.Each tip now has a relevant visual icon that enhances user understanding. The terminology updates to "ID page" maintain consistency with the broader changes.
56-70: Smart layout restructuring using header and footer props.Moving the introductory and concluding captions to dedicated header and footer props improves the component's structural clarity and takes advantage of the enhanced SimpleScrolledTitleLayout capabilities.
app/src/screens/passport/PassportCameraScreen.tsx (11)
128-128: Consistent terminology update supports multi-ID onboarding.The title change from "Scan your passport" to "Scan your ID" maintains consistency with the broader initiative to support multiple document types in the onboarding flow.
138-140: Improved user instructions for better usability.The updated instructions are more actionable and clear:
- "Lay your document flat" provides specific physical guidance
- "Position the machine readable text in the viewfinder" gives precise targeting instructions
145-147: Important privacy disclaimer addition.The new disclaimer "SELF WILL NOT CAPTURE AN IMAGE OF YOUR PASSPORT" addresses user privacy concerns effectively. The uppercase formatting and specific styling make it prominent and trustworthy.
177-188: Well-crafted disclaimer styling.The disclaimer styling is thoughtfully implemented:
dinotfont family provides consistency with other legal text- Uppercase transformation and letter spacing enhance prominence
- Color choice (slate400) maintains readability while being subtle
- Center alignment ensures visibility
128-140: Good instruction simplification and terminology consistency.The updated instructions are more concise and general, making them applicable to various ID types. The change from passport-specific language to "ID" maintains consistency across the application.
145-147: Excellent privacy transparency addition.The disclaimer "SELF WILL NOT CAPTURE AN IMAGE OF YOUR PASSPORT" is crucial for user trust and privacy transparency. This addresses potential user concerns about data collection during the scanning process.
177-188: Well-designed disclaimer styling.The disclaimer styling with uppercase text, specific letter spacing, and muted color (slate400) appropriately presents the privacy information without being overly prominent while maintaining readability.
128-128: Consistent terminology update improves user experience.The title change from "Scan your passport" to "Scan your ID" aligns with the broader UI generalization effort across the application.
138-140: Good instruction simplification enhances clarity.The simplified instruction focusing on positioning the machine-readable text is clearer and more actionable than the previous multi-part instructions.
145-147: Important privacy disclaimer addition.The prominent disclaimer about not capturing images addresses user privacy concerns effectively. The uppercase styling makes it appropriately visible.
177-188: Verify disclaimer styling consistency with design system.The disclaimer has detailed custom styling that should align with the broader design system patterns for important notices.
#!/bin/bash # Check if similar disclaimer styling patterns exist elsewhere in the codebase rg -A 5 -B 5 "textTransform.*uppercase|letterSpacing.*0\.4|fontFamily.*dinot" app/src/app/src/screens/passport/PassportNFCScanScreen.tsx (3)
41-42: LGTM: Color and font imports align with design system updates.The addition of
slate400color anddinotfont import supports the UI refinements mentioned in the PR objectives.
311-311: LGTM: Terminology update supports multi-ID onboarding flow.The title change from "Verify your passport" to "Verify your ID" aligns with the PR objective to generalize the interface for multi-ID support.
320-329: LGTM: Content restructuring improves visual hierarchy.The replacement of the
Descriptioncomponent with structuredTitleandBodyTextcomponents with custom styling enhances the visual guidance. The disclaimer usingslate400provides appropriate visual hierarchy.app/src/components/Tips.tsx (3)
12-12: LGTM: Optional icon prop enhances component flexibility.The optional
icon?: React.ReactNodeproperty provides good flexibility while maintaining backward compatibility. The typeReact.ReactNodeis appropriate for accepting various React elements.
15-50: LGTM: Component restructuring improves visual design and accessibility.The restructured
Tipcomponent provides several improvements:
- Enhanced visual design with background, border radius, and shadow
- Proper icon container with fixed dimensions for consistent alignment
- Flex layout that adapts to content length
- Good accessibility with proper semantic structure
The styling approach using inline props is consistent with Tamagui patterns and provides good performance.
54-56: LGTM: Props spreading enables icon support.The spread operator usage (
{...item}) correctly enables the optional icon prop to be passed through to individualTipcomponents. The spacing adjustments (paddingVertical: 10, gap: 12) provide better visual balance.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
♻️ Duplicate comments (1)
app/src/screens/misc/LaunchScreen.tsx (1)
20-22: Fix TypeScript interface and parameter destructuring issues.The static analysis correctly identifies the same issues flagged in previous reviews - the empty interface and empty object destructuring pattern need to be addressed.
Apply this diff to fix both issues:
-interface LaunchScreenProps {} - -const LaunchScreen: React.FC<LaunchScreenProps> = ({}) => { +const LaunchScreen: React.FC = () => {
🧹 Nitpick comments (2)
app/src/screens/misc/LaunchScreen.tsx (2)
67-68: Address the TODO comment with proper implementation.The placeholder onPress handler should be implemented or the button should be conditionally rendered if the functionality isn't ready yet.
Consider one of these approaches:
- Implement the actual functionality for listing supported biometric IDs
- Conditionally render the button only when the feature is ready
- Add proper error handling or navigation to a not-implemented screen
Would you like me to help implement a placeholder screen or conditional rendering logic?
106-107: Consider replacing percentage-based positioning with responsive units.The fixed percentage values for width (102%) and top margin (30%) may not work well across different screen sizes and orientations, particularly on tablets or phones with different aspect ratios.
Consider using responsive spacing or absolute values:
container: { flex: 1, justifyContent: 'flex-start', alignItems: 'center', - width: '102%', - paddingTop: '25%', + width: '100%', + paddingTop: 60, // or use a responsive value }, card: { width: '100%', - marginTop: '30%', + marginTop: 80, // or use responsive spacingAlso applies to: 111-111
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
app/src/screens/misc/LaunchScreen.tsx(2 hunks)app/src/utils/proving/provingMachine.ts(1 hunks)
✅ Files skipped from review due to trivial changes (1)
- app/src/utils/proving/provingMachine.ts
🧰 Additional context used
📓 Path-based instructions (1)
`app/src/**/*.{ts,tsx,js,jsx}`: Review React Native TypeScript code for: - Compo...
app/src/**/*.{ts,tsx,js,jsx}: Review React Native TypeScript code for:
- Component architecture and reusability
- State management patterns
- Performance optimizations
- TypeScript type safety
- React hooks usage and dependencies
- Navigation patterns
⚙️ Source: CodeRabbit Configuration File
List of files the instruction was applied to:
app/src/screens/misc/LaunchScreen.tsx
🧬 Code Graph Analysis (1)
app/src/screens/misc/LaunchScreen.tsx (7)
app/src/hooks/useConnectionModal.ts (1)
useConnectionModal(32-64)app/src/utils/colors.ts (5)
black(6-6)zinc800(29-29)white(7-7)zinc900(30-30)slate400(12-12)app/src/components/typography/BodyText.ts (1)
BodyText(7-9)app/src/components/buttons/AbstractButton.tsx (1)
AbstractButton(33-77)app/src/consts/analytics.ts (1)
AppEvents(3-9)app/src/components/typography/Caption.tsx (1)
Caption(8-21)app/src/utils/fonts.ts (2)
advercase(3-3)dinot(4-4)
🪛 Biome (1.9.4)
app/src/screens/misc/LaunchScreen.tsx
[error] 19-20: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
[error] 22-22: Unexpected empty object pattern.
(lint/correctness/noEmptyPattern)
⏰ Context from checks skipped due to timeout of 90000ms (1)
- GitHub Check: build
🔇 Additional comments (2)
app/src/screens/misc/LaunchScreen.tsx (2)
35-96: Excellent architectural improvements with the new layout system.The refactor from ExpandableBottomLayout to YStack-based layout significantly improves the code structure. The card-based design with proper safe area handling and the use of AbstractButton for consistency are great improvements.
Key improvements noted:
- Clean YStack layout with proper spacing and alignment
- Consistent use of AbstractButton components
- Proper safe area insets integration
- Well-structured card design with appropriate styling
- Good separation of concerns between layout and styling
101-165: Well-structured styling with good use of design system colors.The styling is comprehensive and makes good use of the established color palette (zinc800, zinc900, slate400). The card styling with shadow effects and proper spacing creates a polished user interface.
The styling demonstrates good practices:
- Consistent use of design system colors
- Appropriate shadow and elevation effects
- Proper text hierarchy with different font families
- Good spacing and alignment throughout
a3899ea to
e61151d
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
♻️ Duplicate comments (1)
app/src/screens/misc/LaunchScreen.tsx (1)
24-26: Fix TypeScript interface and parameter destructuring issues.The static analysis correctly identifies the same issues flagged in previous reviews. The empty interface and empty object destructuring pattern should be removed.
Apply this diff to fix both issues:
-interface LaunchScreenProps {} - -const LaunchScreen: React.FC<LaunchScreenProps> = ({}) => { +const LaunchScreen: React.FC = () => {
🧹 Nitpick comments (1)
app/src/screens/misc/LaunchScreen.tsx (1)
156-170: Consider improving notice text accessibility.The notice text styling uses appropriate contrast with
slate400on dark background, but consider testing with accessibility tools to ensure readability standards are met.You might want to verify the color contrast ratio meets WCAG guidelines:
#!/bin/bash # Description: Check color definitions for accessibility compliance # Expected: Find the color values to verify contrast ratios rg -A 2 -B 2 "slate400|zinc900" app/src/utils/colors.ts
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (16)
app/ios/Self.xcodeproj/project.pbxproj(2 hunks)app/src/components/Tips.tsx(1 hunks)app/src/consts/analytics.ts(1 hunks)app/src/consts/links.ts(1 hunks)app/src/layouts/SimpleScrolledTitleLayout.tsx(3 hunks)app/src/navigation/misc.tsx(2 hunks)app/src/screens/misc/LaunchScreen.tsx(2 hunks)app/src/screens/passport/PassportCameraScreen.tsx(4 hunks)app/src/screens/passport/PassportCameraTroubleScreen.tsx(3 hunks)app/src/screens/passport/PassportNFCScanScreen.tsx(4 hunks)app/src/screens/passport/PassportNFCTroubleScreen.tsx(1 hunks)app/src/screens/passport/PassportOnboardingScreen.tsx(1 hunks)app/src/screens/prove/ConfirmBelongingScreen.tsx(1 hunks)app/src/screens/recovery/AccountRecoveryChoiceScreen.tsx(1 hunks)app/src/utils/colors.ts(1 hunks)app/src/utils/proving/provingMachine.ts(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (14)
- app/src/screens/prove/ConfirmBelongingScreen.tsx
- app/src/consts/analytics.ts
- app/src/utils/proving/provingMachine.ts
- app/src/consts/links.ts
- app/src/utils/colors.ts
- app/src/screens/recovery/AccountRecoveryChoiceScreen.tsx
- app/src/screens/passport/PassportNFCTroubleScreen.tsx
- app/src/screens/passport/PassportCameraTroubleScreen.tsx
- app/src/screens/passport/PassportOnboardingScreen.tsx
- app/src/navigation/misc.tsx
- app/src/screens/passport/PassportCameraScreen.tsx
- app/src/screens/passport/PassportNFCScanScreen.tsx
- app/src/layouts/SimpleScrolledTitleLayout.tsx
- app/src/components/Tips.tsx
🧰 Additional context used
📓 Path-based instructions (2)
`app/ios/**/*`: Review iOS-specific code for: - Platform-specific implementations - Performance considerations - Security best practices for mobile
app/ios/**/*: Review iOS-specific code for:
- Platform-specific implementations
- Performance considerations
- Security best practices for mobile
⚙️ Source: CodeRabbit Configuration File
List of files the instruction was applied to:
app/ios/Self.xcodeproj/project.pbxproj
`app/src/**/*.{ts,tsx,js,jsx}`: Review React Native TypeScript code for: - Compo...
app/src/**/*.{ts,tsx,js,jsx}: Review React Native TypeScript code for:
- Component architecture and reusability
- State management patterns
- Performance optimizations
- TypeScript type safety
- React hooks usage and dependencies
- Navigation patterns
⚙️ Source: CodeRabbit Configuration File
List of files the instruction was applied to:
app/src/screens/misc/LaunchScreen.tsx
🪛 Biome (1.9.4)
app/src/screens/misc/LaunchScreen.tsx
[error] 23-24: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
[error] 26-26: Unexpected empty object pattern.
(lint/correctness/noEmptyPattern)
⏰ Context from checks skipped due to timeout of 90000ms (1)
- GitHub Check: build
🔇 Additional comments (8)
app/ios/Self.xcodeproj/project.pbxproj (1)
410-410: LGTM! Build version incremented consistently across configurations.The
CURRENT_PROJECT_VERSIONhas been properly updated to 139 in both Debug and Release configurations, which aligns well with the significant UI changes and new multi-ID onboarding features in this PR.Note: The version jumped from 137 to 139, skipping 138. This is acceptable if intentional (e.g., 138 was used for internal testing).
Also applies to: 551-551
app/src/screens/misc/LaunchScreen.tsx (7)
4-21: Import organization looks clean with good separation of concerns.The new imports support the transition from animation-based to static card layout effectively. The addition of safe area insets and updated design system imports aligns well with the UI changes.
30-30: Good addition of safe area handling.Using
useSafeAreaInsetsensures proper layout adaptation across different device screen configurations.
47-62: Card design implementation looks solid with good visual hierarchy.The card styling with dark background and shadow creates good visual separation. The logo gesture detection is properly maintained within the new layout structure.
64-87: Excellent button architecture with clear call-to-action hierarchy.The two-button approach with distinct styling (outlined vs filled) provides clear visual hierarchy. The analytics tracking integration is well-implemented.
108-129: Card styling demonstrates good design system integration.The card styling effectively uses the new design tokens (
zinc900, shadows, rounded corners) and creates proper visual hierarchy. The percentage-based positioning works for the launch screen context.
85-85: Verify button text aligns with supported ID types.The button text "I have a Passport or Biometric ID" should be validated against the actual supported ID types listed in the external URL to ensure consistency.
#!/bin/bash # Description: Check the supportedBiometricIdsUrl constant definition and related documentation # Expected: Find the URL constant and any related documentation about supported ID types rg -A 5 -B 2 "supportedBiometricIdsUrl"
39-46: Let’s widen the search without relying on ripgrep’s type filter:#!/bin/bash # Search for any uses of ExpandableBottomLayout in TS/TSX files rg -n -C3 "ExpandableBottomLayout" --glob "*.{ts,tsx}"
c3c6dbd to
a74c474
Compare
a74c474 to
d1295a8
Compare
|
@coderabbitai full review |
✅ Actions performedFull review triggered. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
♻️ Duplicate comments (2)
app/src/screens/misc/LaunchScreen.tsx (2)
24-26: Fix TypeScript interface and parameter destructuring issues.These static analysis issues were flagged in previous reviews and remain unresolved. The empty interface and empty object destructuring should be cleaned up.
Apply this diff to fix both issues:
-interface LaunchScreenProps {} - -const LaunchScreen: React.FC<LaunchScreenProps> = ({}) => { +const LaunchScreen: React.FC = () => {
72-74: Add error handling for external URL opening.This issue was flagged in previous reviews and remains unaddressed. The
Linking.openURLcall should include error handling.Apply this diff to add error handling:
- onPress={() => { - Linking.openURL(supportedBiometricIdsUrl); - }} + onPress={async () => { + try { + await Linking.openURL(supportedBiometricIdsUrl); + } catch (error) { + console.warn('Failed to open supported IDs URL:', error); + } + }}
🧹 Nitpick comments (1)
app/src/screens/passport/PassportCameraTroubleScreen.tsx (1)
8-12: Consider icon loading performance.With multiple SVG imports, consider implementing lazy loading or icon bundling strategies if this screen is frequently accessed, to optimize initial load performance.
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (14)
app/ios/Self.xcodeproj/project.pbxproj(2 hunks)app/src/components/Tips.tsx(1 hunks)app/src/consts/analytics.ts(1 hunks)app/src/consts/links.ts(1 hunks)app/src/layouts/SimpleScrolledTitleLayout.tsx(3 hunks)app/src/navigation/misc.tsx(2 hunks)app/src/screens/misc/LaunchScreen.tsx(2 hunks)app/src/screens/passport/PassportCameraScreen.tsx(4 hunks)app/src/screens/passport/PassportCameraTroubleScreen.tsx(3 hunks)app/src/screens/passport/PassportNFCScanScreen.tsx(6 hunks)app/src/screens/passport/PassportNFCTroubleScreen.tsx(1 hunks)app/src/screens/passport/PassportOnboardingScreen.tsx(1 hunks)app/src/screens/recovery/AccountRecoveryChoiceScreen.tsx(1 hunks)app/src/utils/colors.ts(1 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
`app/src/**/*.{ts,tsx,js,jsx}`: Review React Native TypeScript code for: - Compo...
app/src/**/*.{ts,tsx,js,jsx}: Review React Native TypeScript code for:
- Component architecture and reusability
- State management patterns
- Performance optimizations
- TypeScript type safety
- React hooks usage and dependencies
- Navigation patterns
⚙️ Source: CodeRabbit Configuration File
List of files the instruction was applied to:
app/src/screens/recovery/AccountRecoveryChoiceScreen.tsxapp/src/utils/colors.tsapp/src/consts/links.tsapp/src/consts/analytics.tsapp/src/screens/passport/PassportNFCTroubleScreen.tsxapp/src/screens/passport/PassportOnboardingScreen.tsxapp/src/screens/passport/PassportCameraTroubleScreen.tsxapp/src/navigation/misc.tsxapp/src/screens/misc/LaunchScreen.tsxapp/src/layouts/SimpleScrolledTitleLayout.tsxapp/src/screens/passport/PassportCameraScreen.tsxapp/src/screens/passport/PassportNFCScanScreen.tsxapp/src/components/Tips.tsx
`app/ios/**/*`: Review iOS-specific code for: - Platform-specific implementations - Performance considerations - Security best practices for mobile
app/ios/**/*: Review iOS-specific code for:
- Platform-specific implementations
- Performance considerations
- Security best practices for mobile
⚙️ Source: CodeRabbit Configuration File
List of files the instruction was applied to:
app/ios/Self.xcodeproj/project.pbxproj
🧬 Code Graph Analysis (6)
app/src/screens/passport/PassportNFCTroubleScreen.tsx (2)
app/src/components/typography/Caption.tsx (1)
Caption(8-21)app/src/utils/colors.ts (1)
slate500(13-13)
app/src/screens/passport/PassportOnboardingScreen.tsx (1)
app/src/components/typography/Title.tsx (1)
Title(8-27)
app/src/screens/passport/PassportCameraTroubleScreen.tsx (2)
app/src/components/typography/Caption.tsx (1)
Caption(8-21)app/src/utils/colors.ts (1)
slate500(13-13)
app/src/navigation/misc.tsx (1)
app/src/utils/colors.ts (1)
black(6-6)
app/src/layouts/SimpleScrolledTitleLayout.tsx (5)
app/src/layouts/ExpandableBottomLayout.tsx (1)
ExpandableBottomLayout(155-160)app/src/utils/colors.ts (1)
white(7-7)app/src/components/typography/Title.tsx (1)
Title(8-27)app/src/components/buttons/SecondaryButton.tsx (1)
SecondaryButton(8-23)app/src/components/buttons/PrimaryButton.tsx (1)
PrimaryButton(8-23)
app/src/components/Tips.tsx (2)
app/src/components/typography/Caption.tsx (1)
Caption(8-21)app/src/utils/colors.ts (1)
slate500(13-13)
🪛 Biome (1.9.4)
app/src/screens/misc/LaunchScreen.tsx
[error] 23-24: An empty interface is equivalent to {}.
Safe fix: Use a type alias instead.
(lint/suspicious/noEmptyInterface)
[error] 26-26: Unexpected empty object pattern.
(lint/correctness/noEmptyPattern)
🔇 Additional comments (37)
app/src/screens/recovery/AccountRecoveryChoiceScreen.tsx (1)
69-69: LGTM - Terminology alignment with app-wide changes.The update from "registered passport" to "registered ID" aligns with the broader changes across the app to generalize the terminology for better inclusivity of different identity document types.
app/src/utils/colors.ts (1)
29-29: LGTM - Proper color constant addition.The new
zinc800color constant follows the established naming convention and fills a logical gap in the zinc color palette. The hex value#27272Ais appropriate for dark UI elements.app/src/layouts/SimpleScrolledTitleLayout.tsx (4)
4-4: Excellent addition of safe area support.Adding
useSafeAreaInsetsis crucial for proper display across different device types, especially those with notches or dynamic islands.
19-21: Good component flexibility enhancement.The addition of optional
headerandfooterprops increases the layout's reusability while maintaining backward compatibility through optional typing.Also applies to: 29-31
36-44: Proper safe area implementation for content layout.The layout structure correctly applies safe area insets and uses appropriate ScrollView configuration with disabled vertical scroll indicators for better UX.
45-45: Well-structured footer and button positioning.The conditional footer rendering and safe area-aware button positioning ensure proper layout across different screen sizes and device types.
Also applies to: 51-53
app/ios/Self.xcodeproj/project.pbxproj (1)
410-410: Standard iOS version increment.The
CURRENT_PROJECT_VERSIONbump from 137 to 138 is properly applied to both Debug and Release configurations, following iOS development best practices for version management.Also applies to: 551-551
app/src/consts/analytics.ts (1)
6-6: LGTM - Consistent analytics event addition.The new
SUPPORTED_BIOMETRIC_IDSevent follows the established naming convention and string format pattern used throughout the analytics constants, supporting proper tracking of the new biometric IDs feature.app/src/consts/links.ts (1)
9-11: LGTM! Clean constant addition following established patterns.The new
supportedBiometricIdsUrlconstant follows the existing naming convention and uses HTTPS for security. The URL structure is consistent with other documentation links in the file.app/src/screens/passport/PassportNFCTroubleScreen.tsx (3)
63-63: Excellent generalization to improve user experience.Changing from "passport" to "ID" makes the interface more inclusive and aligns with the broader terminology updates across the app.
68-73: Well-structured layout improvements.The YStack padding and gap properties create better visual hierarchy and spacing. The specific values (paddingTop={24}, paddingHorizontal={10}, paddingBottom={32}, gap={20}) provide consistent spacing that aligns with design system principles.
76-76: Good typography correction.Removing the extra colon improves readability and corrects the grammatical error in the instructional text.
app/src/navigation/misc.tsx (2)
17-21: Smart approach to status bar customization.The custom header with StatusBar configuration provides better control over the appearance. Using
light-contentwith black background creates good contrast for readability.
17-21: Confirm back-swipe enablement on Launch screenThe Launch screen isn’t the root entry (initialRouteName is “Splash”) but once you navigate to it, gestures are enabled by default—letting users swipe back to the Splash screen. Ensure this aligns with your intended flow.
• File:
app/src/navigation/misc.tsx
- Under the
Launchscreen’soptions, addgestureEnabled: falseif you want to block the back-swipe gesture.app/src/screens/passport/PassportOnboardingScreen.tsx (3)
61-61: Perfect generalization for broader document support.Changing from "Scan your passport" to "Scan your ID" makes the interface more inclusive and applicable to various identity documents.
63-63: Simplified and clearer instructions."Open to the photo page" is more concise and universally applicable compared to the previous passport-specific instruction.
66-68: Improved scanning guidance.The new instructions about laying the document flat and positioning the machine-readable text are more actionable and specific to the scanning process, which should improve success rates.
app/src/screens/passport/PassportCameraTroubleScreen.tsx (3)
8-12: Excellent icon integration for improved UX.The SVG icon imports are well-chosen and semantically appropriate for each tip. The consistent sizing (28x28) maintains visual harmony across the interface.
19-45: Smart terminology updates with enhanced visual guidance.Converting from "passport page" to "ID page" maintains consistency with the app's generalization effort. The addition of icons to each tip significantly improves visual communication and user understanding.
59-70: Improved component structure with header/footer props.Moving the captions to dedicated
headerandfooterprops creates better separation of concerns and improves the component's layout structure. The margin spacing (marginBottom={18}) provides appropriate visual hierarchy.app/src/screens/passport/PassportCameraScreen.tsx (5)
24-25: LGTM! Color and font imports align with design system updates.The addition of
slate400anddinotfont imports supports the new disclaimer styling and maintains consistency across the app.
128-128: Good generalization from "passport" to "ID".This change aligns well with the multi-ID onboarding flow objective and makes the interface more inclusive of various document types.
138-140: Instruction text simplification improves usability.The simplified instructions focusing on machine-readable text positioning are clearer and more actionable than the previous multi-step instructions.
145-147: Excellent transparency with the privacy disclaimer.Adding the explicit statement about not capturing images builds user trust and addresses potential privacy concerns.
177-188: Disclaimer styling is well-executed and consistent.The styling uses appropriate typography hierarchy with the
dinotfont, proper letter spacing, and theslate400color that maintains good contrast while being less prominent than primary content.app/src/screens/passport/PassportNFCScanScreen.tsx (5)
41-42: Consistent design system imports.Adding
slate400color anddinotfont maintains visual consistency with other screens in the flow.
107-107: Improved UX with clearer dialog messaging.Changing from a question format to a direct instruction ("Please enable it in settings") provides clearer guidance to users.
323-323: Title generalization maintains consistency.The change from "Verify your passport" to "Verify your ID" aligns with the broader generalization effort across the app.
332-351: Well-structured conditional rendering with proper information hierarchy.The conditional rendering approach effectively handles different NFC states while maintaining clear visual hierarchy. The disclaimer text provides important transparency about data handling.
384-404: Typography styles follow design system principles.The custom styles consistently use the
dinotfont family with appropriate sizing and color hierarchy. The disclaimer styling matches the pattern established in other screens.app/src/components/Tips.tsx (3)
12-12: Good TypeScript interface extension with optional icon support.The optional
icon?: React.ReactNodeproperty maintains backward compatibility while enabling enhanced visual guidance in tips.
15-50: Excellent component redesign with improved visual hierarchy.The redesigned
Tipcomponent provides several improvements:
- Clean card-based layout with proper shadows and rounded corners
- Conditional icon rendering with consistent sizing (28x28)
- Proper flexbox layout ensuring text content adapts to available space
- Enhanced typography using
Captioncomponent with appropriate color contrastThe implementation is solid and maintains good accessibility with proper alignment and spacing.
54-58: Proper props spreading enables flexible tip configuration.Using the spread operator
{...item}allows all tip properties including the new optional icon to be passed through seamlessly.app/src/screens/misc/LaunchScreen.tsx (4)
39-46: Well-structured layout with proper safe area handling.The new
YStacklayout using safe area insets provides better consistency across different device sizes and properly handles notched displays.
47-62: Clean card-based design improves visual hierarchy.The centered card layout with shadow effects and proper spacing creates a more polished and professional appearance. The gesture detector integration for dev mode is well-placed.
79-86: Button content generalization aligns with app-wide changes.The button text "I have a Passport or Biometric ID" properly reflects the multi-ID support objective and maintains clarity for users.
107-171: Comprehensive styling system with proper design tokens.The styling implementation demonstrates good practices:
- Consistent use of design tokens (
zinc800,zinc900,white, etc.)- Proper shadow and elevation effects for depth
- Responsive typography with appropriate font families
- Good spacing and alignment throughout
The card-based approach provides better visual separation and hierarchy than the previous design.
e358aef to
23cce6c
Compare
950f9a9 to
0dee7ec
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🔭 Outside diff range comments (1)
app/src/screens/aesop/PassportOnboardingScreen.tsx (1)
15-15: Review Analytics Event Definitions for Multi-ID SupportPassportEvents in
app/src/consts/analytics.tsonly covers passport-specific flows. To support multiple ID types (e.g., driver’s licenses, national IDs), we should either:
- Introduce a generic
IDEventsnamespace or extendPassportEventswith type-scoped keys- Add separate event groups (e.g.,
DriverLicenseEvents) and update screen imports accordinglyLocations to address:
app/src/consts/analytics.ts– refactor or add new event constantsapp/src/screens/aesop/PassportOnboardingScreen.tsx– swap in the new generic or ID-specific eventsExample diff sketch:
-export const PassportEvents = { +export const IDEvents = { CAMERA_SCAN_STARTED: 'ID: Camera Scan Started', + PASSPORT_CAMERA_SCAN_STARTED: 'ID: Passport Camera Scan Started', + DL_CAMERA_SCAN_STARTED: 'ID: Driver’s License Camera Scan Started', // … }; // in PassportOnboardingScreen.tsx -import { PassportEvents } from '../../consts/analytics'; +import { IDEvents } from '../../consts/analytics';
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (16)
app/ios/OpenPassport/Info.plist(1 hunks)app/ios/Self.xcodeproj/project.pbxproj(4 hunks)app/src/components/Tips.tsx(1 hunks)app/src/consts/analytics.ts(1 hunks)app/src/consts/links.ts(1 hunks)app/src/layouts/SimpleScrolledTitleLayout.tsx(3 hunks)app/src/navigation/misc.tsx(2 hunks)app/src/screens/aesop/PassportOnboardingScreen.tsx(2 hunks)app/src/screens/misc/LaunchScreen.tsx(2 hunks)app/src/screens/passport/PassportCameraScreen.tsx(5 hunks)app/src/screens/passport/PassportCameraTroubleScreen.tsx(3 hunks)app/src/screens/passport/PassportNFCScanScreen.tsx(6 hunks)app/src/screens/passport/PassportNFCTroubleScreen.tsx(1 hunks)app/src/screens/passport/PassportOnboardingScreen.tsx(1 hunks)app/src/screens/recovery/AccountRecoveryChoiceScreen.tsx(1 hunks)app/src/utils/colors.ts(1 hunks)
✅ Files skipped from review due to trivial changes (1)
- app/ios/OpenPassport/Info.plist
🚧 Files skipped from review as they are similar to previous changes (14)
- app/src/consts/links.ts
- app/src/utils/colors.ts
- app/src/screens/recovery/AccountRecoveryChoiceScreen.tsx
- app/ios/Self.xcodeproj/project.pbxproj
- app/src/screens/passport/PassportNFCTroubleScreen.tsx
- app/src/screens/passport/PassportOnboardingScreen.tsx
- app/src/consts/analytics.ts
- app/src/navigation/misc.tsx
- app/src/screens/passport/PassportCameraTroubleScreen.tsx
- app/src/layouts/SimpleScrolledTitleLayout.tsx
- app/src/screens/passport/PassportCameraScreen.tsx
- app/src/screens/passport/PassportNFCScanScreen.tsx
- app/src/components/Tips.tsx
- app/src/screens/misc/LaunchScreen.tsx
🧰 Additional context used
📓 Path-based instructions (1)
`app/src/**/*.{ts,tsx,js,jsx}`: Review React Native TypeScript code for: - Compo...
app/src/**/*.{ts,tsx,js,jsx}: Review React Native TypeScript code for:
- Component architecture and reusability
- State management patterns
- Performance optimizations
- TypeScript type safety
- React hooks usage and dependencies
- Navigation patterns
⚙️ Source: CodeRabbit Configuration File
List of files the instruction was applied to:
app/src/screens/aesop/PassportOnboardingScreen.tsx
⏰ Context from checks skipped due to timeout of 90000ms (2)
- GitHub Check: build
- GitHub Check: lint
🔇 Additional comments (3)
app/src/screens/aesop/PassportOnboardingScreen.tsx (3)
98-99: Animation sizing improvement looks good.Changing from 115% to 100% prevents the animation from overflowing its container, which improves layout stability and visual consistency.
61-71: Text content inconsistency with stated objectives.The code still contains passport-specific terminology ("photograph page", "Passport flat", "your passport") despite the AI summary indicating text was generalized to use "ID" terminology. This creates inconsistency with the multi-ID onboarding objectives.
Consider updating the text to be more generic:
-<DescriptionTitle>Open to the photograph page</DescriptionTitle> +<DescriptionTitle>Open to the photo page</DescriptionTitle> <Description textBreakStrategy="balanced"> - Lay the Passport flat and position the machine readable text in + Lay the document flat and position the machine readable text in the viewfinder. </Description><Additional textBreakStrategy="balanced"> - Self will not capture an image of your passport. + Self will not capture an image of your document. </Additional>Likely an incorrect or invalid review comment.
26-27: Verify multi-ID flow navigation consistencyI didn’t find any generic “IDCamera” route in our navigation config or screens—everything still points to
PassportCamera. If the onboarding flow is meant to support multiple ID types, please:
- Confirm whether a generic camera step (e.g.
IDCamera) has been defined inapp/src/navigation/passport.ts.- Update the
handleCameraPresscall inapp/src/screens/aesop/PassportOnboardingScreen.tsx(lines 26–27) to use the correct route name or pull it from the onboarding props.- Rename or parameterize the
PassportCameraentry in thepassportScreensobject so it can handle different ID types.- Adjust DevSettingsScreen (
app/src/screens/dev/DevSettingsScreen.tsx) and any navigation tests (app/tests/src/navigation.test.ts) to reflect the new route(s).If multi-ID support isn’t intended here, please disregard.
| animationRef.current?.play(); | ||
| }, 5000); // Pause 5 seconds before playing again | ||
| }} | ||
| loop={true} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Consider performance implications of continuous animation looping.
Setting loop={true} will cause the animation to run continuously, which may impact battery life and performance, especially on lower-end devices. Consider whether the user experience benefit justifies the performance cost.
🏁 Script executed:
#!/bin/bash
# Check if there are performance optimization patterns used elsewhere in the codebase
rg -A 3 -B 3 "loop.*false|autoPlay.*false" --type ts --type tsxLength of output: 93
Let’s broaden our search to catch any loop or autoPlay configurations in both .ts and .tsx files, so we can see if performance-minded patterns already exist:
🏁 Script executed:
#!/bin/bash
# Search for all animation loop settings
rg -C 3 "loop\s*=" -g '*.ts' -g '*.tsx'
# Search for any explicit autoPlay toggles
rg -C 3 "autoPlay\s*=" -g '*.ts' -g '*.tsx'Length of output: 8573
Optimize continuous animation looping in PassportOnboardingScreen
The LottieView in app/src/screens/aesop/PassportOnboardingScreen.tsx is the only one set to loop={true}—every other screen defaults to loop={false} and handles replay programmatically. An infinite loop can tax CPU/GPU and drain battery, especially if left running in the background or on lower-end devices.
Please adjust as follows:
- File:
app/src/screens/aesop/PassportOnboardingScreen.tsx: changeloop={true}toloop={false}and trigger repeats in code if still needed - Respect reduce-motion settings via
AccessibilityInfo.isReduceMotionEnabled()to disable or shorten animations for users who opt out - Pause the animation when the app goes to the background (e.g. listen to
AppStatechanges)
Proposed diff:
- loop={true}
+ loop={false}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| loop={true} | |
| loop={false} |
🤖 Prompt for AI Agents
In app/src/screens/aesop/PassportOnboardingScreen.tsx at line 41, change the
LottieView prop from loop={true} to loop={false} to prevent continuous animation
looping. Implement code to programmatically replay the animation if needed. Use
AccessibilityInfo.isReduceMotionEnabled() to detect user preference and disable
or shorten animations accordingly. Also, add an AppState listener to pause the
animation when the app goes to the background to reduce CPU/GPU usage and
battery drain.
* audit fixes (#645) * merge dev branch into main (#624) * remove sdk/tests (#622) * remove sdk/tests * chore: update yarn.lock --------- Co-authored-by: Ayman <[email protected]> * fix: add range check on paddedInLength of shaBytesDynamic (#623) * fix ci (#626) --------- Co-authored-by: Ayman <[email protected]> Co-authored-by: Vishalkulkarni45 <[email protected]> * update contracts (#628) * remove sdk/tests (#622) * remove sdk/tests * chore: update yarn.lock --------- Co-authored-by: Ayman <[email protected]> * fix: add range check on paddedInLength of shaBytesDynamic (#623) * fix ci (#626) * implement self uups upgradeable (#592) * implement self uups upgradeable * small changes in identityVerificationHubImplV2 * delete aderyn.toml * chore: add custom verifier * chnage return output * feat: use self structs and a Generic output struct * feat: add userIdentifier, nullifier, forbiddencountries to returned output * add root view functions from registry * fix: build and compilation errors * add userDefined data into selfVerificationRoot * "resolve conflicts" * fix compilation problem * fix how to register verification config * test: CustomVerifier * fix verification root and hub integration * add scope check in hub impl * replace poseidon hash to ripemd+sha256 * add todo list * feat: refactor and add test cases for generic formatter * add performUserIdentifierCheck in basicVerification * change how to handle additionalData and fix stack too deep * start adding test codes * fix dependency problems in monorepo * fix: forbidden countries (#612) LGTM! * able to run test code * pass happy path * delete unused codes * change error code name, add caller address validation and add scripts to run test and build in monorepo * add all test cases in vcAndDisclose flow * remove comment out * chore: use actual user identifier outputs * success in registration tests * cover all cases * pass contractVersion instead of circuitVersion * fix disclose test * chore: add natspecs for ImplHubV2, CustomVerifier and GenericFormatter * change val name and remove unused lines * add val name change * remove userIdentifier from return data * feat: use GenericDiscloseOutput struct in verfication hook fix test cases for user identifier * chore: change the function order for Hub Impl V2 (#625) * fix nat specs * add nat spec in SelfStructs --------- Co-authored-by: Ayman <[email protected]> Co-authored-by: Nesopie <[email protected]> * prettier (#629) --------- Co-authored-by: Ayman <[email protected]> Co-authored-by: Vishalkulkarni45 <[email protected]> Co-authored-by: nicoshark <[email protected]> Co-authored-by: Nesopie <[email protected]> * fix: vc_and_disclose_id test (#640) * fix: vc_and_disclose_id test * chore: yarn prettier * fix: check if a config id exists * chore: change the function where the config not set verification is happening * fix: add await * feat: add getConfigId function in SelfVerificationRoot (#650) * feat: add getConfigId function in SelfVerificationRoot * update comment --------- Co-authored-by: motemotech <[email protected]> * chore: fix ofac end index in eu id cards * chore: fix tests * fix: example contracts and tests --------- Co-authored-by: turnoffthiscomputer <[email protected]> Co-authored-by: Vishalkulkarni45 <[email protected]> Co-authored-by: nicoshark <[email protected]> * Update deployment module for Identity Verification Hub V2 with detailed documentation and library linkage for CustomVerifier. Update initialization process to reflect changes in V2 implementation, ensuring proper setup for proxy deployment. (#658) * publish npm-package (#651) * App/eu id updates (#638) * fix build issues * generate disclosure proof with euids * generate disclosure proof with euids * Eu id updates 2 (#648) * update vc_and_disclose_id test (dev branch) (#641) * fix: vc_and_disclose_id test * chore: yarn prettier * Show modal on NFC scan error (#642) * Add help button and error modal actions * fix the screen management * yarn nice * Bump build v2.5.4: ios 132; android 71 (#631) * bump version and build numbers * remove tamagui/toast * fix marketing version * fix: update TD1 and TD3 checks (#643) * bum yarn.lock * add version and user defined data --------- Co-authored-by: Vishalkulkarni45 <[email protected]> Co-authored-by: Justin Hernandez <[email protected]> Co-authored-by: Seshanth.S🐺 <[email protected]> * remove the mock user define data * get the useridentifier as a hash from the user defined data * chore: add version and userDefinedData * feat: use the version in register / dsc proofs as well * update calculateUserIdentifierHash * yarn nice * refactor: consolidate user context data handling and update payload structure * fix typing issues on sha1 * remove console.log(sha1) * fix sha1 import * refactor: streamline userDefinedData handling and adjust payload type for circuit * refactor: update sha1 usage and enhance logging in calculateUserIdentifierHash * yarn nice * yarn lint common * use ts-ignore for sha1 import * fix app ci tests * fix typing issue * remove unused ts-ignore * cast uuid before calling generateinputs * bump qrcode version * add tsup on the qrcode sdk * fix: exports on selfxyz/qrcode * update how we define config.version * fix yarn imports * yarn format --------- Co-authored-by: Vishalkulkarni45 <[email protected]> Co-authored-by: Justin Hernandez <[email protected]> Co-authored-by: Seshanth.S🐺 <[email protected]> Co-authored-by: Ayman <[email protected]> * Hotfix contract compile error (#660) * Fix previous rebase error * Refactor deployment module for Identity Verification Hub V2. * Fix/sdk (#652) * fix: sdk build configs * chore: SelfBackendVerifier (WIP) * feat: add custom verification * feat: consider destination chain in user defined data * chore: export attestation id * chore: export attestation id * chore: export config storage * chore: don't throw an error if the proof is not valid * chore: trim abi and rm typechain types * refactor * chore: rm unnecessary exports * 📝 Add docstrings to `fix/sdk` (#653) Docstrings generation was requested by @remicolin. * https://github.com/selfxyz/self/pull/652#issuecomment-2992046545 The following files were modified: * `sdk/core/src/utils/hash.ts` * `sdk/core/src/utils/proof.ts` * `sdk/core/src/utils/utils.ts` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * review fixes * chore: fix package.json cjs types * chore: add minor changes to checks * feat: add InMemoryConfigStore, allIds constant and verificationResult type * chore: export Verification config * feat: change the verification config types * fix: throw issues early if verification config is null * fix: update yarn.lock file * chore: lint * fix: rm ts expect error directive * fix: contract tests * use excluded countries instead forbidden countries list * chore: change types in constnats --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Update npm-publish workflow and bump core package version to 1.0.0 (#661) * update import * Update get verification config visibility (#664) * Update deployment module for Identity Verification Hub V2 to correct file paths and module name for deployment commands. * Add troubleshooting documentation for verification issues in deployHubV2.ts. Include manual verification steps and common failure reasons to assist users during deployment. * Change visibility of getVerificationConfigV2 function from internal to public in IdentityVerificationHubImplV2 contract to allow external access. * Apply BUSL v1.1 license headers to app (#665) * Add BSL license headers to app sources * prettier * fix license reference - https://spdx.org/licenses/BUSL-1.1.html * bump build: android 73 (#659) * Contracts/deploy staging (#668) * update scripts * deploy vc and disclose id * fix the deployment scripts on staging * update yarn.lock * bump ios build and version (#669) * configure coderabbitai (#670) * tweak coderabbit * bump * more thorough test spec * Apply BSL to app codebase (#639) * Clean up root license wording * Simplify SPDX header * simplify license and rename BSL to BUSL * fix merge issues * fix missing method --------- Co-authored-by: Justin Hernandez <[email protected]> * SEL-423 apply xcode build suggestions (#671) * apply recommended app settings from xcode * stick to portrait orientation and update target settings * remove app clip references * Circuit audit fixes (#644) * feat: add range checks before use of LessEqThan and SelectSubArray * fix: Num2Bits_strict to constrain virtualKey * bump core version * bump core version and fix ci * chore: use npm_auth_token in yarnrc * chroe: rm yarnrc changes * chore: update npm publish * chore: run npm publish manually * chore: change hub contract address (#675) * Update npm-publish.yml * merge dev to main (#657) * remove sdk/tests (#622) * remove sdk/tests * chore: update yarn.lock --------- Co-authored-by: Ayman <[email protected]> * fix: add range check on paddedInLength of shaBytesDynamic (#623) * fix ci (#626) * implement self uups upgradeable (#592) * implement self uups upgradeable * small changes in identityVerificationHubImplV2 * delete aderyn.toml * chore: add custom verifier * chnage return output * feat: use self structs and a Generic output struct * feat: add userIdentifier, nullifier, forbiddencountries to returned output * add root view functions from registry * fix: build and compilation errors * add userDefined data into selfVerificationRoot * "resolve conflicts" * fix compilation problem * fix how to register verification config * test: CustomVerifier * fix verification root and hub integration * add scope check in hub impl * replace poseidon hash to ripemd+sha256 * add todo list * feat: refactor and add test cases for generic formatter * add performUserIdentifierCheck in basicVerification * change how to handle additionalData and fix stack too deep * start adding test codes * fix dependency problems in monorepo * fix: forbidden countries (#612) LGTM! * able to run test code * pass happy path * delete unused codes * change error code name, add caller address validation and add scripts to run test and build in monorepo * add all test cases in vcAndDisclose flow * remove comment out * chore: use actual user identifier outputs * success in registration tests * cover all cases * pass contractVersion instead of circuitVersion * fix disclose test * chore: add natspecs for ImplHubV2, CustomVerifier and GenericFormatter * change val name and remove unused lines * add val name change * remove userIdentifier from return data * feat: use GenericDiscloseOutput struct in verfication hook fix test cases for user identifier * chore: change the function order for Hub Impl V2 (#625) * fix nat specs * add nat spec in SelfStructs --------- Co-authored-by: Ayman <[email protected]> Co-authored-by: Nesopie <[email protected]> * prettier (#629) * CAN auth - android (#613) * add missed files * add NFCMethodSelectionScreen * bump android build --------- Co-authored-by: Justin Hernandez <[email protected]> * feat: add MRZ correction method to NFCMethodSelectionScreen (#627) * add npm auth token env (#632) * bump sdk version (#633) * publish npm package when merging on dev * bump common sdk version * replace yarn publish by npm publish * update common package version * Simplify dev mode gesture (#635) * Simplify developer mode gesture * Enable dev mode on MockData screen with five taps * add build smt function to common sdk * update vc_and_disclose_id test (dev branch) (#641) * fix: vc_and_disclose_id test * chore: yarn prettier * Show modal on NFC scan error (#642) * Add help button and error modal actions * fix the screen management * yarn nice * Bump build v2.5.4: ios 132; android 71 (#631) * bump version and build numbers * remove tamagui/toast * fix marketing version * fix: update TD1 and TD3 checks (#643) * bum yarn.lock * Bump build: ios 133; android 72 and build fixes (#654) * update gesture version and bump android build * bump and fix ios build * update lock files * fixes * fix fotoapparat library source * Update example contracts to include EUID usage (#656) * refactor: update HappyBirthday contract to V2 with support for E-Passport and EUID cards, introduce bonus multipliers, and enhance verification logic * refactor: update Airdrop contract to V2 with support for E-Passport and EU ID Card attestations * refactor: remove BASIS_POINTS constant from Airdrop contract * feat: introduce SelfIdentityERC721 contract for issuing NFTs based on verified identity credentials, replacing SelfPassportERC721 * fix: update verification functions in Airdrop, HappyBirthday, and SelfIdentityERC721 contracts to use customVerificationHook * cherry pick commit from add-test-self-verification... * block non-dev pr to main branch * audit fixes (#645) * merge dev branch into main (#624) * remove sdk/tests (#622) * remove sdk/tests * chore: update yarn.lock --------- Co-authored-by: Ayman <[email protected]> * fix: add range check on paddedInLength of shaBytesDynamic (#623) * fix ci (#626) --------- Co-authored-by: Ayman <[email protected]> Co-authored-by: Vishalkulkarni45 <[email protected]> * update contracts (#628) * remove sdk/tests (#622) * remove sdk/tests * chore: update yarn.lock --------- Co-authored-by: Ayman <[email protected]> * fix: add range check on paddedInLength of shaBytesDynamic (#623) * fix ci (#626) * implement self uups upgradeable (#592) * implement self uups upgradeable * small changes in identityVerificationHubImplV2 * delete aderyn.toml * chore: add custom verifier * chnage return output * feat: use self structs and a Generic output struct * feat: add userIdentifier, nullifier, forbiddencountries to returned output * add root view functions from registry * fix: build and compilation errors * add userDefined data into selfVerificationRoot * "resolve conflicts" * fix compilation problem * fix how to register verification config * test: CustomVerifier * fix verification root and hub integration * add scope check in hub impl * replace poseidon hash to ripemd+sha256 * add todo list * feat: refactor and add test cases for generic formatter * add performUserIdentifierCheck in basicVerification * change how to handle additionalData and fix stack too deep * start adding test codes * fix dependency problems in monorepo * fix: forbidden countries (#612) LGTM! * able to run test code * pass happy path * delete unused codes * change error code name, add caller address validation and add scripts to run test and build in monorepo * add all test cases in vcAndDisclose flow * remove comment out * chore: use actual user identifier outputs * success in registration tests * cover all cases * pass contractVersion instead of circuitVersion * fix disclose test * chore: add natspecs for ImplHubV2, CustomVerifier and GenericFormatter * change val name and remove unused lines * add val name change * remove userIdentifier from return data * feat: use GenericDiscloseOutput struct in verfication hook fix test cases for user identifier * chore: change the function order for Hub Impl V2 (#625) * fix nat specs * add nat spec in SelfStructs --------- Co-authored-by: Ayman <[email protected]> Co-authored-by: Nesopie <[email protected]> * prettier (#629) --------- Co-authored-by: Ayman <[email protected]> Co-authored-by: Vishalkulkarni45 <[email protected]> Co-authored-by: nicoshark <[email protected]> Co-authored-by: Nesopie <[email protected]> * fix: vc_and_disclose_id test (#640) * fix: vc_and_disclose_id test * chore: yarn prettier * fix: check if a config id exists * chore: change the function where the config not set verification is happening * fix: add await * feat: add getConfigId function in SelfVerificationRoot (#650) * feat: add getConfigId function in SelfVerificationRoot * update comment --------- Co-authored-by: motemotech <[email protected]> * chore: fix ofac end index in eu id cards * chore: fix tests * fix: example contracts and tests --------- Co-authored-by: turnoffthiscomputer <[email protected]> Co-authored-by: Vishalkulkarni45 <[email protected]> Co-authored-by: nicoshark <[email protected]> * Update deployment module for Identity Verification Hub V2 with detailed documentation and library linkage for CustomVerifier. Update initialization process to reflect changes in V2 implementation, ensuring proper setup for proxy deployment. (#658) * publish npm-package (#651) * App/eu id updates (#638) * fix build issues * generate disclosure proof with euids * generate disclosure proof with euids * Eu id updates 2 (#648) * update vc_and_disclose_id test (dev branch) (#641) * fix: vc_and_disclose_id test * chore: yarn prettier * Show modal on NFC scan error (#642) * Add help button and error modal actions * fix the screen management * yarn nice * Bump build v2.5.4: ios 132; android 71 (#631) * bump version and build numbers * remove tamagui/toast * fix marketing version * fix: update TD1 and TD3 checks (#643) * bum yarn.lock * add version and user defined data --------- Co-authored-by: Vishalkulkarni45 <[email protected]> Co-authored-by: Justin Hernandez <[email protected]> Co-authored-by: Seshanth.S🐺 <[email protected]> * remove the mock user define data * get the useridentifier as a hash from the user defined data * chore: add version and userDefinedData * feat: use the version in register / dsc proofs as well * update calculateUserIdentifierHash * yarn nice * refactor: consolidate user context data handling and update payload structure * fix typing issues on sha1 * remove console.log(sha1) * fix sha1 import * refactor: streamline userDefinedData handling and adjust payload type for circuit * refactor: update sha1 usage and enhance logging in calculateUserIdentifierHash * yarn nice * yarn lint common * use ts-ignore for sha1 import * fix app ci tests * fix typing issue * remove unused ts-ignore * cast uuid before calling generateinputs * bump qrcode version * add tsup on the qrcode sdk * fix: exports on selfxyz/qrcode * update how we define config.version * fix yarn imports * yarn format --------- Co-authored-by: Vishalkulkarni45 <[email protected]> Co-authored-by: Justin Hernandez <[email protected]> Co-authored-by: Seshanth.S🐺 <[email protected]> Co-authored-by: Ayman <[email protected]> * Hotfix contract compile error (#660) * Fix previous rebase error * Refactor deployment module for Identity Verification Hub V2. * Fix/sdk (#652) * fix: sdk build configs * chore: SelfBackendVerifier (WIP) * feat: add custom verification * feat: consider destination chain in user defined data * chore: export attestation id * chore: export attestation id * chore: export config storage * chore: don't throw an error if the proof is not valid * chore: trim abi and rm typechain types * refactor * chore: rm unnecessary exports * 📝 Add docstrings to `fix/sdk` (#653) Docstrings generation was requested by @remicolin. * https://github.com/selfxyz/self/pull/652#issuecomment-2992046545 The following files were modified: * `sdk/core/src/utils/hash.ts` * `sdk/core/src/utils/proof.ts` * `sdk/core/src/utils/utils.ts` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * review fixes * chore: fix package.json cjs types * chore: add minor changes to checks * feat: add InMemoryConfigStore, allIds constant and verificationResult type * chore: export Verification config * feat: change the verification config types * fix: throw issues early if verification config is null * fix: update yarn.lock file * chore: lint * fix: rm ts expect error directive * fix: contract tests * use excluded countries instead forbidden countries list * chore: change types in constnats --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Update npm-publish workflow and bump core package version to 1.0.0 (#661) * update import * Update get verification config visibility (#664) * Update deployment module for Identity Verification Hub V2 to correct file paths and module name for deployment commands. * Add troubleshooting documentation for verification issues in deployHubV2.ts. Include manual verification steps and common failure reasons to assist users during deployment. * Change visibility of getVerificationConfigV2 function from internal to public in IdentityVerificationHubImplV2 contract to allow external access. * Apply BUSL v1.1 license headers to app (#665) * Add BSL license headers to app sources * prettier * fix license reference - https://spdx.org/licenses/BUSL-1.1.html * bump build: android 73 (#659) * Contracts/deploy staging (#668) * update scripts * deploy vc and disclose id * fix the deployment scripts on staging * update yarn.lock * bump ios build and version (#669) * configure coderabbitai (#670) * tweak coderabbit * bump * more thorough test spec * Apply BSL to app codebase (#639) * Clean up root license wording * Simplify SPDX header * simplify license and rename BSL to BUSL * fix merge issues * fix missing method --------- Co-authored-by: Justin Hernandez <[email protected]> * SEL-423 apply xcode build suggestions (#671) * apply recommended app settings from xcode * stick to portrait orientation and update target settings * remove app clip references * Circuit audit fixes (#644) * feat: add range checks before use of LessEqThan and SelectSubArray * fix: Num2Bits_strict to constrain virtualKey * bump core version * bump core version and fix ci * chore: use npm_auth_token in yarnrc * chroe: rm yarnrc changes * chore: update npm publish * chore: run npm publish manually * chore: change hub contract address (#675) * Update npm-publish.yml --------- Co-authored-by: Ayman <[email protected]> Co-authored-by: Vishalkulkarni45 <[email protected]> Co-authored-by: nicoshark <[email protected]> Co-authored-by: Nesopie <[email protected]> Co-authored-by: Seshanth.S🐺 <[email protected]> Co-authored-by: Justin Hernandez <[email protected]> Co-authored-by: Justin Hernandez <[email protected]> Co-authored-by: Kevin Lin <[email protected]> Co-authored-by: kevinsslin <[email protected]> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Eric Nakagawa <[email protected]> * chore: use proper secret when publishing * feat: enable publishing if workflow was triggered manually * Contracts/update verifier (#673) * update hardhat config * update vc and disclose verifier * update vc and disclose verifier script and run it * update test self verification root * update verifier * bump sdk version and use new hub address * chore: update zk-kit binary merkle root dep (#674) * Dev (#677) * remove sdk/tests (#622) * remove sdk/tests * chore: update yarn.lock --------- Co-authored-by: Ayman <[email protected]> * fix: add range check on paddedInLength of shaBytesDynamic (#623) * fix ci (#626) * implement self uups upgradeable (#592) * implement self uups upgradeable * small changes in identityVerificationHubImplV2 * delete aderyn.toml * chore: add custom verifier * chnage return output * feat: use self structs and a Generic output struct * feat: add userIdentifier, nullifier, forbiddencountries to returned output * add root view functions from registry * fix: build and compilation errors * add userDefined data into selfVerificationRoot * "resolve conflicts" * fix compilation problem * fix how to register verification config * test: CustomVerifier * fix verification root and hub integration * add scope check in hub impl * replace poseidon hash to ripemd+sha256 * add todo list * feat: refactor and add test cases for generic formatter * add performUserIdentifierCheck in basicVerification * change how to handle additionalData and fix stack too deep * start adding test codes * fix dependency problems in monorepo * fix: forbidden countries (#612) LGTM! * able to run test code * pass happy path * delete unused codes * change error code name, add caller address validation and add scripts to run test and build in monorepo * add all test cases in vcAndDisclose flow * remove comment out * chore: use actual user identifier outputs * success in registration tests * cover all cases * pass contractVersion instead of circuitVersion * fix disclose test * chore: add natspecs for ImplHubV2, CustomVerifier and GenericFormatter * change val name and remove unused lines * add val name change * remove userIdentifier from return data * feat: use GenericDiscloseOutput struct in verfication hook fix test cases for user identifier * chore: change the function order for Hub Impl V2 (#625) * fix nat specs * add nat spec in SelfStructs --------- Co-authored-by: Ayman <[email protected]> Co-authored-by: Nesopie <[email protected]> * prettier (#629) * CAN auth - android (#613) * add missed files * add NFCMethodSelectionScreen * bump android build --------- Co-authored-by: Justin Hernandez <[email protected]> * feat: add MRZ correction method to NFCMethodSelectionScreen (#627) * add npm auth token env (#632) * bump sdk version (#633) * publish npm package when merging on dev * bump common sdk version * replace yarn publish by npm publish * update common package version * Simplify dev mode gesture (#635) * Simplify developer mode gesture * Enable dev mode on MockData screen with five taps * add build smt function to common sdk * update vc_and_disclose_id test (dev branch) (#641) * fix: vc_and_disclose_id test * chore: yarn prettier * Show modal on NFC scan error (#642) * Add help button and error modal actions * fix the screen management * yarn nice * Bump build v2.5.4: ios 132; android 71 (#631) * bump version and build numbers * remove tamagui/toast * fix marketing version * fix: update TD1 and TD3 checks (#643) * bum yarn.lock * Bump build: ios 133; android 72 and build fixes (#654) * update gesture version and bump android build * bump and fix ios build * update lock files * fixes * fix fotoapparat library source * Update example contracts to include EUID usage (#656) * refactor: update HappyBirthday contract to V2 with support for E-Passport and EUID cards, introduce bonus multipliers, and enhance verification logic * refactor: update Airdrop contract to V2 with support for E-Passport and EU ID Card attestations * refactor: remove BASIS_POINTS constant from Airdrop contract * feat: introduce SelfIdentityERC721 contract for issuing NFTs based on verified identity credentials, replacing SelfPassportERC721 * fix: update verification functions in Airdrop, HappyBirthday, and SelfIdentityERC721 contracts to use customVerificationHook * cherry pick commit from add-test-self-verification... * block non-dev pr to main branch * audit fixes (#645) * merge dev branch into main (#624) * remove sdk/tests (#622) * remove sdk/tests * chore: update yarn.lock --------- Co-authored-by: Ayman <[email protected]> * fix: add range check on paddedInLength of shaBytesDynamic (#623) * fix ci (#626) --------- Co-authored-by: Ayman <[email protected]> Co-authored-by: Vishalkulkarni45 <[email protected]> * update contracts (#628) * remove sdk/tests (#622) * remove sdk/tests * chore: update yarn.lock --------- Co-authored-by: Ayman <[email protected]> * fix: add range check on paddedInLength of shaBytesDynamic (#623) * fix ci (#626) * implement self uups upgradeable (#592) * implement self uups upgradeable * small changes in identityVerificationHubImplV2 * delete aderyn.toml * chore: add custom verifier * chnage return output * feat: use self structs and a Generic output struct * feat: add userIdentifier, nullifier, forbiddencountries to returned output * add root view functions from registry * fix: build and compilation errors * add userDefined data into selfVerificationRoot * "resolve conflicts" * fix compilation problem * fix how to register verification config * test: CustomVerifier * fix verification root and hub integration * add scope check in hub impl * replace poseidon hash to ripemd+sha256 * add todo list * feat: refactor and add test cases for generic formatter * add performUserIdentifierCheck in basicVerification * change how to handle additionalData and fix stack too deep * start adding test codes * fix dependency problems in monorepo * fix: forbidden countries (#612) LGTM! * able to run test code * pass happy path * delete unused codes * change error code name, add caller address validation and add scripts to run test and build in monorepo * add all test cases in vcAndDisclose flow * remove comment out * chore: use actual user identifier outputs * success in registration tests * cover all cases * pass contractVersion instead of circuitVersion * fix disclose test * chore: add natspecs for ImplHubV2, CustomVerifier and GenericFormatter * change val name and remove unused lines * add val name change * remove userIdentifier from return data * feat: use GenericDiscloseOutput struct in verfication hook fix test cases for user identifier * chore: change the function order for Hub Impl V2 (#625) * fix nat specs * add nat spec in SelfStructs --------- Co-authored-by: Ayman <[email protected]> Co-authored-by: Nesopie <[email protected]> * prettier (#629) --------- Co-authored-by: Ayman <[email protected]> Co-authored-by: Vishalkulkarni45 <[email protected]> Co-authored-by: nicoshark <[email protected]> Co-authored-by: Nesopie <[email protected]> * fix: vc_and_disclose_id test (#640) * fix: vc_and_disclose_id test * chore: yarn prettier * fix: check if a config id exists * chore: change the function where the config not set verification is happening * fix: add await * feat: add getConfigId function in SelfVerificationRoot (#650) * feat: add getConfigId function in SelfVerificationRoot * update comment --------- Co-authored-by: motemotech <[email protected]> * chore: fix ofac end index in eu id cards * chore: fix tests * fix: example contracts and tests --------- Co-authored-by: turnoffthiscomputer <[email protected]> Co-authored-by: Vishalkulkarni45 <[email protected]> Co-authored-by: nicoshark <[email protected]> * Update deployment module for Identity Verification Hub V2 with detailed documentation and library linkage for CustomVerifier. Update initialization process to reflect changes in V2 implementation, ensuring proper setup for proxy deployment. (#658) * publish npm-package (#651) * App/eu id updates (#638) * fix build issues * generate disclosure proof with euids * generate disclosure proof with euids * Eu id updates 2 (#648) * update vc_and_disclose_id test (dev branch) (#641) * fix: vc_and_disclose_id test * chore: yarn prettier * Show modal on NFC scan error (#642) * Add help button and error modal actions * fix the screen management * yarn nice * Bump build v2.5.4: ios 132; android 71 (#631) * bump version and build numbers * remove tamagui/toast * fix marketing version * fix: update TD1 and TD3 checks (#643) * bum yarn.lock * add version and user defined data --------- Co-authored-by: Vishalkulkarni45 <[email protected]> Co-authored-by: Justin Hernandez <[email protected]> Co-authored-by: Seshanth.S🐺 <[email protected]> * remove the mock user define data * get the useridentifier as a hash from the user defined data * chore: add version and userDefinedData * feat: use the version in register / dsc proofs as well * update calculateUserIdentifierHash * yarn nice * refactor: consolidate user context data handling and update payload structure * fix typing issues on sha1 * remove console.log(sha1) * fix sha1 import * refactor: streamline userDefinedData handling and adjust payload type for circuit * refactor: update sha1 usage and enhance logging in calculateUserIdentifierHash * yarn nice * yarn lint common * use ts-ignore for sha1 import * fix app ci tests * fix typing issue * remove unused ts-ignore * cast uuid before calling generateinputs * bump qrcode version * add tsup on the qrcode sdk * fix: exports on selfxyz/qrcode * update how we define config.version * fix yarn imports * yarn format --------- Co-authored-by: Vishalkulkarni45 <[email protected]> Co-authored-by: Justin Hernandez <[email protected]> Co-authored-by: Seshanth.S🐺 <[email protected]> Co-authored-by: Ayman <[email protected]> * Hotfix contract compile error (#660) * Fix previous rebase error * Refactor deployment module for Identity Verification Hub V2. * Fix/sdk (#652) * fix: sdk build configs * chore: SelfBackendVerifier (WIP) * feat: add custom verification * feat: consider destination chain in user defined data * chore: export attestation id * chore: export attestation id * chore: export config storage * chore: don't throw an error if the proof is not valid * chore: trim abi and rm typechain types * refactor * chore: rm unnecessary exports * 📝 Add docstrings to `fix/sdk` (#653) Docstrings generation was requested by @remicolin. * https://github.com/selfxyz/self/pull/652#issuecomment-2992046545 The following files were modified: * `sdk/core/src/utils/hash.ts` * `sdk/core/src/utils/proof.ts` * `sdk/core/src/utils/utils.ts` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * review fixes * chore: fix package.json cjs types * chore: add minor changes to checks * feat: add InMemoryConfigStore, allIds constant and verificationResult type * chore: export Verification config * feat: change the verification config types * fix: throw issues early if verification config is null * fix: update yarn.lock file * chore: lint * fix: rm ts expect error directive * fix: contract tests * use excluded countries instead forbidden countries list * chore: change types in constnats --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Update npm-publish workflow and bump core package version to 1.0.0 (#661) * update import * Update get verification config visibility (#664) * Update deployment module for Identity Verification Hub V2 to correct file paths and module name for deployment commands. * Add troubleshooting documentation for verification issues in deployHubV2.ts. Include manual verification steps and common failure reasons to assist users during deployment. * Change visibility of getVerificationConfigV2 function from internal to public in IdentityVerificationHubImplV2 contract to allow external access. * Apply BUSL v1.1 license headers to app (#665) * Add BSL license headers to app sources * prettier * fix license reference - https://spdx.org/licenses/BUSL-1.1.html * bump build: android 73 (#659) * Contracts/deploy staging (#668) * update scripts * deploy vc and disclose id * fix the deployment scripts on staging * update yarn.lock * bump ios build and version (#669) * configure coderabbitai (#670) * tweak coderabbit * bump * more thorough test spec * Apply BSL to app codebase (#639) * Clean up root license wording * Simplify SPDX header * simplify license and rename BSL to BUSL * fix merge issues * fix missing method --------- Co-authored-by: Justin Hernandez <[email protected]> * SEL-423 apply xcode build suggestions (#671) * apply recommended app settings from xcode * stick to portrait orientation and update target settings * remove app clip references * Circuit audit fixes (#644) * feat: add range checks before use of LessEqThan and SelectSubArray * fix: Num2Bits_strict to constrain virtualKey * bump core version * bump core version and fix ci * chore: use npm_auth_token in yarnrc * chroe: rm yarnrc changes * chore: update npm publish * chore: run npm publish manually * chore: change hub contract address (#675) * Update npm-publish.yml * chore: use proper secret when publishing * feat: enable publishing if workflow was triggered manually * Contracts/update verifier (#673) * update hardhat config * update vc and disclose verifier * update vc and disclose verifier script and run it * update test self verification root * update verifier * bump sdk version and use new hub address * chore: update zk-kit binary merkle root dep (#674) --------- Co-authored-by: Ayman <[email protected]> Co-authored-by: Vishalkulkarni45 <[email protected]> Co-authored-by: nicoshark <[email protected]> Co-authored-by: Nesopie <[email protected]> Co-authored-by: Seshanth.S🐺 <[email protected]> Co-authored-by: Justin Hernandez <[email protected]> Co-authored-by: Justin Hernandez <[email protected]> Co-authored-by: Kevin Lin <[email protected]> Co-authored-by: kevinsslin <[email protected]> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Eric Nakagawa <[email protected]> * refactor deployment scripts (#678) * feat: add register eu id instances (#682) * feat: add register eu id instances * feat: add new instances * chore: update scripts * chore: fix sig alg * chore: rm circuits * update the smart contracts scripts (#684) * remove the && false * fix euid (#685) * keep build and version in sync (#686) * fix env set to null * fix: circuit for register ci (#690) * fix: circuit for register ci * fix: rm duplicate workflow_dispatch * feat: add better error handling (#691) * fix: older than bug (#692) * bump: sdk/[email protected] * fix: config not found bug * decrease parallel circuits to 3 * ci: add prettier check for contract sdk (#602) * Add Prettier check for code formatting in contracts workflow * Update contracts workflow: remove unused checkout action and fix build step name * Run formatter * Run lint fix * chore: update build_cpp to 2 concurrent builds * Contract/fix sdk (#695) * fix contracts sdk * fix contracts sdk * Fix contract example v2 (#694) * feat: add verification config ID functionality to Airdrop, HappyBirthday, and SelfIdentityERC721 contracts * Run formatter * SEL-473: Add lint rule for BUSL headers (#698) * chore(app): enforce license header via eslint * update lock and order * fix formatting * SEL-444: Fix android cloud backup (#697) * feat(android): migrate google backup * update lock and google services config * add bulk format command * backup fixes * working drive settings!!!!!!!! * remove unneeded intent filter * add tests * coderabbit feedback * coderabbit feedback * abstract google method * coderabbit feedback and fix test * more coderabbit suggestions and tests fixes * chore: update relayer verifier enum to include the register circuits (#699) * fix env sample (#700) * Abstract iOS cloud backup logic (#701) * feat(ios): abstract cloud backup logic * prettier and cr feedback * tested on iOS and android and functionality is the same * Fix navigation serialization warnings (#702) * test: cover modal callbacks * coderabbit feedback * feat(app): clarify passport linking (#704) * Show NFC support message (#708) * SEL-425: Add document management analytics events (#706) * Add document management analytics * coderabbit feedback * SEL-447: Improve proof failure feedback (#707) * feat: flag stale proofs as failed * make a constant * format * SEL-330: Add backup check after verification (#711) * route to save phrase if backup disabled * format * SEL-483: Implement recovery backup prompts (#710) * feat: prompt users to back up account * feat: prompt users to back up account * format * Add tests for recovery prompt logic * more lint updates * fix imports * fix unused import * update cursor suggestions * implement coderabbit suggestions and fix tests * SEL-472: Enable production push notifications (#703) * chore: leave sandbox apns token comment * tweak entitlement * coderabbit ai feedback * firebase tweaks * Chore: ensure there is an extra empty line after the license declaration (#712) * ensure there is an extra empty line after the license declaration * ignore adding header to cjs config files * add missing license header * ignore linting metro config * bump version and add mainnet hub address * Bugfix: Show recovery prompt only when user has docs (#714) * feat(app): prompt recovery only when docs exist * cr feedbacl * SEL-487: Prompt user to backup recovery phrase before registering (#715) * feat: prompt backup before registration * coderabbit feedback * fix tests * coderabbitai feedback and fix tests * Remove StartupFlushPolicy (#717) * SEL-479: Multi-ID onboarding mvp flow (#688) * save new launch screen wip * save wip * finalize launch look * replace launch screen * rename * update camera onboarding and scan screen * update tips looks * update nfc scan issue screens * update copy * add launch screen todo * fix casing * update launch screen link, copy and add tracking event * bump project version to match app store * match app store * updated supported bio id link * add dialog message support back in * cr feedback * bump version and build * update images * tweak animation layout * loop with setTimeout * fix onboarding assets (#719) * feat: add flag to use PACEPolling (#680) * feat: add flag to use PACEPolling * fix: santize before storing in store * bump ios build number and update podfile lock * prettier * bump build * feat: add flag to use PACEPolling * fix: santize before storing in store * bump ios build number and update podfile lock * prettier * bump build --------- Co-authored-by: Justin Hernandez <[email protected]> * fix backup button label (#722) * update version to 2.6.0 and bump build numbers (#721) * SEL-179 & SEL-312: Add gitleaks and GitGuardian scanning (#705) * chore: add secret scanning setup * fix: correct GitGuardian action path * cr feedbacak * test husky commit * pr feedback * fix workflows * tweaks * fix versions * upgrade: migrate from husky v8 to v9 - Update husky from ^8.0.0 to ^9.1.7 - Change prepare script from 'husky install' to 'husky' - Remove v8 hook structure (shebang, husky.sh sourcing) - Delete .husky/_/ directory as it's not needed in v9 - Maintain gitleaks pre-commit hook functionality * coderabbitai feedback * add bulk sort command (#723) * feat(app): redirect empty docs to launch (#725) * Apply consistent safe area padding across screens (#726) * Contracts/update verifiers (#729) * update the verifiers * update deployment script * update deployment script and deploy to prod * prettier run write * App/ethcc fixes (#730) * fix mock data screen * increase timout between dsc and register proof * fix the isUserRegisteredWithAlternativeCSCA function * yarn nice * allow people to switch to a mock id (#732) * yarn nice * chore: update default config id method * chore: use named exports * Update README.md * Temporarily disable recovery redirect and reminder prompts (#733) * Revert "SEL-487: Prompt user to backup recovery phrase before registering (#715)" This reverts commit fe14ac655e11b4b9e0c4023002b84fcc79bedd31. * revert update * fix safe area context pkg * Revert "SEL-487: Prompt user to backup recovery phrase before registering (#715)" This reverts commit fe14ac655e11b4b9e0c4023002b84fcc79bedd31. * fix old flow * more silent tests * update lock files * hard code return * SEL-486: Fix unwrap DO (#718) * update podfile: unwrapDO * update lock * bump version and builds * bump build; forgot to enable logs * fix version to not interfere with release --------- Co-authored-by: Justin Hernandez <[email protected]> * SEL-494: Update proving machine event tracking (#734) * Add extensive proof analytics instrumentation * prettier and sort events by key name * remove loading screen race condition redirect (#736) * Chore: new build for v2.6.0 ios 145 android 81 (#737) * bump version and build * properly bump app * bump build * Improve manual mobile deploy workflow and docs (#728) * Add basic Fastlane helper tests * Upgrade fastlane and enhance helper tests (#738) * simplify mobile deploy pipelines and make them manual. update readme * update fastlane dev readme * update tests and add helper script * cr feedback, update tests, revert circuits package.json sort change * tweaks * fix slack * cr feedback and fixes * add better cjs eslint support * save wip. add confirmation check script. update scripts * remove auto increment feature * migrate readme items over to DEV due to fastlane auto regen docs flow * use regular xcode * fix hermes compiler path * coderabbit feedback * reinstall when on local dev * fix upload * simplify * simplify confirmation feedback with tests * fix mobile deploys * cr feedback * test iOS building * fix trigger logic * cr feedback * updates * fix env var * fix order * re-enable upload to testflight for ios * updated notes * chore: update readme * Bugfix: android deeplinks (#742) * bugfix: deep linking * add android manifest test * bump build and version * format readme * fix deeplink genmockiddoc * add the gender to the deeplink optoin * bump version (#743) * fix the female bug * bump build 148 (#744) * SEL-496: Add Firebase Remote Config and dev feature flag screen (#735) * feat: add remote config support * update lock * tweak config logic. add feature flag viewing screen * add tests * allow for local overriding of feature flags * save local override work * save wip * clean up ui * update screen to handle multi value types * fix tests * cr feedback and fix tests * remote config upates. fix tests, codex feedback * Improve AGENTS workflow notes (#747) * clarify workflow instructions * agents feedback * Address minor mobile deployment bugs (#745) * feat: improve deployment tooling * cr feedback * for temp testing * clean build artifacts after deploy * add deploy source * uncomment ios commands * Add tests for minor deployment fixes (#750) * Add test coverage for deployment scripts and Fastfile * format * increase github check to 5 minutes * Extend platform build file tests (#748) * Add build file tests * cr feedback * Add proving machine tests (#749) * Add actor mock helper and tests * format tests * fix tests * wip fix tests * address cr feedback * Add thorough test cases for mobile app (#752) * Add actor mock helper and tests * format tests * fix tests * Revert non-app tests * update tests * fix tests * coderabbit feedback * revert change * remove spurious tests * don't use crypto in core sdk * Start of Web App (#689) * Add .cursorignore to optimize AI editor performance and security (#758) Prevents Cursor AI from accessing sensitive files (keys, credentials, deployment configs) and large generated artifacts that slow down indexing. Keeps source code accessible while excluding build outputs, node_modules, and circuit/contract compilation artifacts across the monorepo. * SEL-504: fix fonts and some styles (#762) * fix fonts and some styles * dry config * fix some warnings * lets start with coverage for app (#763) * lets start with coverage for app * lint * better setup * SEL-559: Update td1 regex (#760) * feat: update td1 regex * update review comments * fix: NPE on expirationDate regex * fix user defined data (#766) * fix: name formatting for middle name * bump: sdk/core to 1.0.7-beta.1 * Feat/retrieve OFAC trees from api (#769) * retrieve the ofac trees from the api * remove the ofac trees from the common repo * fix ofac test * yarn nice * yarn nice * yarn nice * refactor ofac fetching * Release new build v2.6.2 (#779) * bump version and build * ignore podfile * Remove failing version test (#780) * remove version check test * remove test all together * SEL-269: Update ESLint rules & lock prettier config (#781) * Update ESLint config and lock prettier config * Refine ESLint config and fix lint issues * Apply eslint fixes * Use socketIo alias (#782) * move gesture handler * save wip updates * fix svg imports * update tsconfig * eslint updates * eslint fixes * improve ignore folders * coderabbit feedback * Fix style prop shorthands (#787) * Expand view style props * Expand remaining style props * update types * fix pipeline * fix test env check * nicer casting * fix booleans * update deeplink url handling and make it more robust * add socket error handler * Add COSE signature verification tests (#788) * Update ESLint config and lock prettier config * Refine ESLint config and fix lint issues * save wip updates * eslint updates * eslint fixes * Add COSE signature verification tests * fix tests * SEL-553: Show NFC Progress (#764) * feat: add haptics * fix: BAC FAILED error event * update lock file --------- Co-authored-by: Justin Hernandez <[email protected]> * SEL-566: Navigate Home based on document validity (#768) * feat: navigate home if atleast one valid document is present * update comments * Review: Remove unnecessary continue statement * feat: add tracking * SEL-544: Generate Mock DSC on mock-passport flow (#772) * feat: Generate mock DSC on mock-passport flow * Remove console log * yarn format * revert to mock dsc generation * SEL-570: Display user ID in prove screen (#790) * Display user ID on prove screen * Add user ID formatting util and tests * Clarify user ID formatting * fix nice * add tests and save toggle wip * update tests based on feedback * say connected wallet when wallet * fix: Add localhost validation to prevent invalid endpoint usage in QR Code SDK (#794) * Feat/mobile deployment automation (#759) * feat: add version management system with build number tracking - Add version.json to track iOS/Android build numbers separately - Create version.cjs script for build number management - Add Fastlane version_manager.rb helper - Keep npm version for semver, version.json for build tracking * feat: integrate version.json with Fastlane deployment process ## What Changed - Updated iOS and Android Fastlane lanes to use version.json for build number management - Added automatic build number increment on deployment - Added deployment timestamp tracking ## How It Works ### iOS Deployment 1. Reads current build number from version.json 2. Increments iOS build number (e.g., 148 → 149) 3. Updates Xcode project with new build number via increment_build_number 4. Proceeds with TestFlight deployment 5. Updates lastDeployed timestamp on successful upload ### Android Deployment 1. Reads current build number from version.json 2. Increments Android build number (e.g., 82 → 83) 3. Updates build.gradle with new version code via increment_version_code 4. Proceeds with Play Store deployment 5. Updates lastDeployed timestamp on successful upload ## Why This Change - Eliminates manual version/build number entry - Prevents version conflicts between deployments - Provides single source of truth for build numbers - Enables automatic deployments without human intervention - Tracks deployment history with timestamps ## Dependencies - Requires version.json file (already created in previous commit) - Uses existing Fastlane plugins: - increment_build_number (iOS - built-in) - increment_version_code (Android - from plugin) - Version numbers still managed by npm version command * feat: enhance deploy confirmation with version.json info * fix: use ENV variable directly in increment_build_number to avoid secret masking * fix: correct xcodeproj path for GitHub Actions workflow * feat: add test mode to workflow for safe testing - Skip store uploads when test_mode is true - Test version bumps and builds without deployment - Prevent accidental pushes to TestFlight/Play Store * fix: use gradle_file_path instead of gradle_file for increment_version_code * fix: use gsub to remove ../ prefix for CI compatibility * chore: remove accidentally committed files - Remove .cursor/mcp.json - Remove .cursorignore - Remove deployment-automation-summary.md - Remove deployment-meeting-questions.md - Remove pipeline.md * feat: auto-commit version.json after successful deployment - Commits version.json changes back to repository - Only runs when test_mode is false - Uses [skip ci] to prevent infinite loops - Checks for actual changes before committing * feat : update package.json in build step using npm version * feat: add comprehensive caching to mobile deployment workflow - Add caching for Yarn dependencies, Ruby gems, CocoaPods, Gradle, and Android NDK - Implement cache versioning strategy for easy cache invalidation - Fix cache order: caches now restored after checkout but before dependency installation - Update mobile-setup action to skip installs when dependencies are cached - Add cache size monitoring to track usage against GitHub's 10GB limit - Fix Slack notification bug: skip notifications in test_mode - Add detailed logging for package.json version updates (show from/to versions) Expected performance improvement: ~50% faster builds (from ~15min to ~7-10min) * fix: move bundler config after Ruby setup in mobile-setup action * fix: rename cache env vars to avoid Yarn conflicts Yarn was interpreting YARN_CACHE_VERSION as its own config setting. Prefixed all cache version env vars with GH_ to avoid conflicts. * fix: remove bundler deployment mode to allow Gemfile updates The deployment mode was causing bundler to fail when Gemfile changed (nokogiri was removed). CI should be able to update the lockfile as needed. * feat: implement strict lock file enforcement (Option 1) - Re-enable bundler deployment mode for strict Gemfile.lock checking - Use yarn install --immutable for strict yarn.lock checking - Add clear error messages when lock files are out of date - Add pre-checks to verify lock files exist - This ensures reproducible builds and makes caching maximally effective When developers change dependencies, they must now: 1. Run yarn install or bundle install locally 2. Commit the updated lock files 3. CI will fail with helpful instructions if they forget * fix: update Gemfile.lock for CI environment Remove nokogiri from Gemfile.lock since it's excluded in CI environments (GITHUB_ACTIONS=true). This allows the strict lock file checks to pass in CI. * fix: correct yarn.lock path for monorepo workspace The project uses Yarn workspaces with yarn.lock at the repository root, not in the app directory. Updated paths to check for yarn.lock at workspace root and use it for cache keys. * fix: handle both boolean and string test_mode parameter The test_mode parameter was only checking for string 'true' but could be passed as boolean true from command line. Now handles both cases to ensure test mode works correctly for iOS and Android. * fix: address code review feedback for mobile deployment workflow - Replace jq with Node.js for version extraction (jq not available on macOS runners) - Fix concurrent commit race condition by creating separate update-version job - Add platform validation to version_manager.rb and version.cjs scripts - Use POSIX-compatible single = for shell string comparisons - Ensure single atomic commit when deploying to both platforms * fix: formatting and linting issues - Remove trailing spaces from workflow YAML file - Fix prettier formatting in JavaScript files - Add -y flag to yarn version command for non-interactive mode - Address all lint warnings from CI --------- Co-authored-by: Jayaditya Gupta <[email protected]> * fix: increment iOS build number * fix: bump app version to 2.6.3 for iOS release * App/deeplink callback (#789) * add deepllinkCallback support * bump package version * yarn nice * fix background countdown * cast the URL to prevent malicious code introduction * fix: use cleanDocumentNumber (#784) * increment iOS bundle version * Feat/push to dev main (#767) * feat: add version management system with build number tracking - Add version.json to track iOS/Android build numbers separately - Create version.cjs script for build number management - Add Fastlane version_manager.rb helper - Keep npm version for semver, version.json for build tracking * feat: integrate version.json with Fastlane deployment process ## What Changed - Updated iOS and Android Fastlane lanes to use version.json for build number management - Added automatic build number increment on deployment - Added deployment timestamp tracking ## How It Works ### iOS Deployment 1. Reads current build number from version.json 2. Increments iOS build number (e.g., 148 → 149) 3. Updates Xcode project with new build number via increment_build_number 4. Proceeds with TestFlight deployment 5. Updates lastDeployed timestamp on successful upload ### Android Deployment 1. Reads current build number from version.json 2. Increments Android build number (e.g., 82 → 83) 3. Updates build.gradle with new version code via increment_version_code 4. Proceeds with Play Store deployment 5. Updates lastDeployed timestamp on successful upload ## Why This Change - Eliminates manual version/build number entry - Prevents version conflicts between deployments - Provides single source of truth for build numbers - Enables automatic deployments without human intervention - Tracks deployment history with timestamps ## Dependencies - Requires version.json file (already created in previous commit) - Uses existing Fastlane plugins: - increment_build_number (iOS - built-in) - increment_version_code (Android - from plugin) - Version numbers still managed by npm version command * feat: enhance deploy confirmation with version.json info * fix: use ENV variable directly in increment_build_number to avoid secret masking * fix: correct xcodeproj path for GitHub Actions workflow * feat: add test mode to workflow for safe testing - Skip store uploads when test_mode is true - Test version bumps and builds without deployment - Prevent accidental pushes to TestFlight/Play Store * fix: use gradle_file_path instead of gradle_file for increment_version_code * fix: use gsub to remove ../ prefix for CI compatibility * chore: remove accidentally committed files - Remove .cursor/mcp.json - Remove .cursorignore - Remove deployment-automation-summary.md - Remove deployment-meeting-questions.md - Remove pipeline.md * feat: auto-commit version.json after successful deployment - Commits version.json changes back to repository - Only runs when test_mode is false - Uses [skip ci] to prevent infinite loops - Checks for actual changes before committing * feat : update package.json in build step using npm version * feat: add comprehensive caching to mobile deployment workflow - Add caching for Yarn dependencies, Ruby gems, CocoaPods, Gradle, and Android NDK - Implement cache versioning strategy for easy cache invalidation - Fix cache order: caches now restored after checkout but before dependency installation - Update mobile-setup action to skip installs when dependencies are cached - Add cache size monitoring to track usage against GitHub's 10GB limit - Fix Slack notification bug: skip notifications in test_mode - Add detailed logging for package.json version updates (show from/to versions) Expected performance improvement: ~50% faster builds (from ~15min to ~7-10min) * fix: move bundler config after Ruby setup in mobile-setup action * fix: rename cache env vars to avoid Yarn conflicts Yarn was interpreting YARN_CACHE_VERSION as its own config setting. Prefixed all cache version env vars with GH_ to avoid conflicts. * fix: remove bundler deployment mode to allow Gemfile updates The deployment mode was causing bundler to fail when Gemfile changed (nokogiri was removed). CI should be able to update the lockfile as needed. * feat: implement strict lock file enforcement (Option 1) - Re-enable bundler deployment mode for strict Gemfile.lock checking - Use yarn install --immutable for strict yarn.lock checking - Add clear error messages when lock files are out of date - Add pre-checks to verify lock files exist - This ensures reproducible builds and makes caching maximally effective When developers change dependencies, they must now: 1. Run yarn install or bundle install locally 2. Commit the updated lock files 3. CI will fail with helpful instructions if they forget * fix: update Gemfile.lock for CI environment Remove nokogiri from Gemfile.lock since it's excluded in CI environments (GITHUB_ACTIONS=true). This allows the strict lock file checks to pass in CI. * fix: correct yarn.lock path for monorepo workspace The project uses Yarn workspaces with yarn.lock at the repository root, not in the app directory. Updated paths to check for yarn.lock at workspace root and use it for cache keys. * fix: handle both boolean and string test_mode parameter The test_mode parameter was only checking for string 'true' but could be passed as boolean true from command line. Now handles both cases to ensure test mode works correctly for iOS and Android. * fix: address code review feedback for mobile deployment workflow - Replace jq with Node.js for version extraction (jq not available on macOS runners) - Fix concurrent commit race condition by creating separate update-version job - Add platform validation to version_manager.rb and version.cjs scripts - Use POSIX-compatible single = for shell string comparisons - Ensure single atomic commit when deploying to both platforms * fix: formatting and linting issues - Remove trailing spaces from workflow YAML file - Fix prettier formatting in JavaScript files - Add -y flag to yarn version command for non-interactive mode - Address all lint warnings from CI * feat: implement automated branch-based mobile deployments - Add mobile-deploy-auto.yml workflow that triggers on PR merges to dev/main - Update mobile-deploy.yml to support workflow_call for reusability - Add deployment_track, version_bump, and auto_deploy parameters - Create new Fastlane lanes (deploy_auto) for iOS and Android - Implement smart version bumping based on PR labels (major/minor/patch) - Add graceful error handling for Play Store permission issues - Enhance Slack notifications with deployment track information This enables automatic deployments when PRs are merged: - dev branch → internal testing track - main branch → production track - Skip deployment with [skip-deploy] in PR or no-deploy label * feat: add automated git tagging and release system - Add automatic git tagging for production deployments (v2.5.5, platform-specific tags) - Create GitHub releases with changelogs for production deployments - Add manual release script (yarn release) for version bumping and tagging - Implement simple changelog generation from git history - Add comprehensive deployment documentation in .github/MOBILE_DEPLOYMENT.md - Update app/README.md with deployment commands and workflows This completes the release automation system requested in the ticket for manual tagging and versioning with automated changelogs and release notes. --------- Co-authored-by: Jayaditya Gupta <[email protected]> * Implement basic code splitting * cm feedback * update lock * yarn nice * add typing to crypto loader * fix type. more opportunities * lint suggestions * build dependencies before linting * fix build command * save updated imports * update build checks * fix import * fix imports and test * fix install commands * Update Gemfile.lock to exclude nokogiri in CI environments - Regenerated Gemfile.lock with GITHUB_ACTIONS=true to match the conditional nokogiri exclusion in the Ge…
New MVP onboarding flow
Summary by CodeRabbit
New Features
zinc800) and updated color palette for improved styling.Improvements
Bug Fixes
Chores