Skip to content

✨ app: home screen revamp#775

Open
dieguezguille wants to merge 12 commits intomainfrom
home
Open

✨ app: home screen revamp#775
dieguezguille wants to merge 12 commits intomainfrom
home

Conversation

@dieguezguille
Copy link
Member

@dieguezguille dieguezguille commented Feb 13, 2026

closes #501, closes #599, closes #713

Summary by CodeRabbit

  • New Features

    • Introduced pay mode selection allowing users to choose between instant payments (Pay Now) and installment plans (Pay Later).
    • Added installment rate calculations and management interface.
  • Style & UI Improvements

    • Replaced fonts for improved visual consistency.
    • Unified spacing and animation parameters across the app.
    • Refined card components, buttons, and carousel layouts.
  • Bug Fixes

    • Fixed protocol asset logo display.

Open with Devin

Greptile Summary

this pr implements a comprehensive home screen redesign focused on the new pay mode selection feature, allowing users to toggle between instant payments (pay now/debit mode) and installment-based credit (pay later/credit mode). the changes introduce:

  • pay mode system: users can now switch between debit (mode=0) and credit (mode=1-12) payment modes directly from the home screen
  • installments interface: new sheet component allowing users to select 1-12 installment periods with real-time apr calculations
  • visual refresh: replaced bdo grotesk font family with spline sans, unified spacing tokens (removed s1_5, s2_5, adjusted s10-s14), and standardized animations
  • component refactoring: extracted reusable Amount component, added ButtonColumn and ButtonLabel variants to styled button, redesigned portfolio summary with asset logo previews
  • educational ui: added three new info sheets (pay mode, credit limit, spending limit) to explain financial concepts to users

the implementation integrates with existing financial calculations from @exactly/lib and maintains consistency with the project's established patterns.

Confidence Score: 4/5

  • safe to merge with one minor optimization opportunity
  • the pr is well-structured with clear separation of concerns, proper error handling, and follows established project patterns. the font replacement and design system updates are consistent throughout. the only issue is the inefficient array initialization in useInstallmentRates.ts line 29 which has already been flagged in previous comments.
  • src/utils/useInstallmentRates.ts - contains inefficient array initialization pattern on line 29

Important Files Changed

Filename Overview
src/utils/useInstallmentRates.ts new hook for calculating installment rates and payments, implements financial calculations for credit mode
src/components/home/Home.tsx major refactoring of home screen with new card status, installments, and pay mode sheets
src/components/home/CardStatus.tsx redesigned card status component with pay mode toggle and animated limit paginator
src/components/home/InstallmentsSheet.tsx new installments configuration sheet with horizontal scrolling cards showing APR rates
tamagui.config.ts font replacement (BDOGrotesk → SplineSans), spacing token standardization, and animation adjustments
src/components/shared/Amount.tsx new reusable amount display component with accessibility support and status variants
src/components/home/PortfolioSummary.tsx redesigned portfolio summary with asset logos preview and manage portfolio link

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Home Screen] --> B{Card Exists?}
    B -->|Yes| C[CardStatus Component]
    C --> D[Pay Mode Toggle]
    D --> E{User Selects Mode}
    E -->|Pay Now| F[Debit Mode - mode=0]
    E -->|Pay Later| G[Credit Mode - mode>0]
    G --> H[InstallmentsSheet]
    H --> I[useInstallmentRates Hook]
    I --> J[Calculate APR for 1-12 installments]
    J --> K[Display rates in scrollable cards]
    K --> L[User selects installment count]
    L --> M[Update card mode via setCardMode API]
    C --> N[LimitPaginator]
    N --> O{Mode Check}
    O -->|mode=0| P[Show Spending Limit]
    O -->|mode>0| Q[Show Credit Limit]
    D --> R[Learn More]
    R --> S[PayModeSheet]
    S --> T[Explain Pay Now vs Pay Later]
    A --> U[PortfolioSummary]
    U --> V[Display assets with Amount component]
    V --> W[Show APR & collateral]
Loading

Last reviewed commit: b87e85f

@dieguezguille dieguezguille self-assigned this Feb 13, 2026
@changeset-bot
Copy link

changeset-bot bot commented Feb 13, 2026

🦋 Changeset detected

Latest commit: fcfdce3

The changes in this PR will be included in the next version bump.

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai
Copy link

coderabbitai bot commented Feb 13, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Comprehensive feature release introducing installments/pay-later payment modes, redesigned home screen with new CardStatus and PortfolioSummary components, font unification to SplineSans, widespread design token standardization across spacing, new payment-related UI sheets, hook refactoring, and Spanish translation expansion. Includes Maestro E2E test updates validating new payment flows.

Changes

Cohort / File(s) Summary
Changesets
.changeset/*
Multiple patch release declarations covering design token adjustments, font replacement, card/button styling, animation refinements, protocol asset fixes, and benefits carousel updates.
Maestro E2E Tests
.maestro/flows/local.yaml, .maestro/subflows/*
New readHome subflow added to validation flow; readPortfolio refactored to use copyAria helper; new copyAria subflow introduced for platform-specific clipboard operations; minor text assertions updated (SPENDING LIMIT → Spending limit, Your portfolio → Portfolio).
Design System & Fonts
tamagui.config.ts, app.config.ts, src/app/_layout.tsx, cspell.json
Font migration from BDOGrotesk/IBMPlexMono to SplineSans; spacing token adjustments (s10–s14 values updated); animation configuration updated (moderate → default timing); font faces remapped (400/600/700 weights to SplineSans variants); theme border colors made explicit.
Home Screen Redesign & Card Components
src/components/home/CardStatus.tsx, src/components/home/PortfolioSummary.tsx, src/components/home/Home.tsx, src/components/home/GettingStarted.tsx
CardStatus completely restructured with new API (collateral, creditLimit, mode, spotlightRef, callbacks); PortfolioSummary refactored with new assets prop and visual asset thumbnails; Home.tsx extended with installment/mode mutations, new sheet components, and collateral/limit calculations; animation tokens updated to default.
New Payment Mode Components
src/components/home/CreditLimitSheet.tsx, src/components/home/InstallmentsSheet.tsx, src/components/home/InstallmentsSpotlight.tsx, src/components/home/PayModeSheet.tsx, src/components/home/SpendingLimitSheet.tsx
Five new modal/overlay components enabling installments/pay-later selection, credit/spending limit info displays, and targeted spotlight UI for guiding users through payment mode setup.
Removed Components
src/components/home/CardLimits.tsx, src/components/home/SpendingLimitsSheet.tsx
Deleted CardLimits and SpendingLimitsSheet components, replaced by refactored CardStatus and new sheet components with expanded functionality.
Shared & Utility Components
src/components/shared/Amount.tsx, src/components/shared/StyledButton.tsx, src/components/shared/Text.tsx, src/components/shared/AssetSelector.tsx
New Amount component for monetary display with status-based theming; StyledButton extended with Column and Label subcomponents; Text typography updated with lineHeight-aware variants; AssetSelector refactored to use updated usePortfolio signature.
Widespread Design Token Standardization
src/components/activity/*, src/components/add-funds/*, src/components/benefits/*, src/components/card/*, src/components/getting-started/*, src/components/home/*, src/components/loans/*, src/components/pay-mode/*, src/components/send-funds/*, src/components/shared/*, src/components/swaps/*
Pervasive replacement of numeric gap/padding values with design tokens (10→$s3_5, 20→$s4_5, 5→$s2, etc.) and removal of fontFamily="$mono" overrides across 50+ files.
Hook Refactoring
src/utils/usePortfolio.ts, src/utils/useInstallmentRates.ts, src/utils/queryClient.ts
usePortfolio signature simplified (account parameter removed, now derives from useAccount); new useInstallmentRates hook added for computing payment schedules; installments-spotlight query defaults added.
Internationalization
src/i18n/es.json
Extensive Spanish translation additions covering portfolio management, pay-later/installments workflow, spending/credit limits, payment terms, and activity labels; 40+ new entries with capitalization adjustments.
Feature-Specific Updates
src/components/benefits/BenefitsSection.tsx, src/components/card/CardDetails.tsx, src/components/card/CardPIN.tsx, src/components/card/exa-card/CardContents.tsx, src/components/home/HomeActions.tsx, src/components/auth/Auth.tsx, src/components/benefits/BenefitCard.tsx, src/components/benefits/BenefitSheet.tsx
Benefits carousel refined (pagination dot sizing, animation config); Card display simplified (removed mono fonts); HomeActions refactored to use Button.Column layout with per-item disabled logic; Carousel animations updated; gesture handling modernized in BenefitCard.

Sequence Diagram(s)

sequenceDiagram
    actor User
    participant Home as Home Component
    participant CardStatus as CardStatus Component
    participant PayModeSheet as PayModeSheet
    participant InstallmentsSheet as InstallmentsSheet
    participant useInstallmentRates as useInstallmentRates Hook
    participant mutateMode as setCardMode Mutation
    participant Backend as Backend API

    User->>Home: Opens Home Screen
    Home->>CardStatus: Renders with mode, collateral, creditLimit
    User->>CardStatus: Taps "Now/Later" Toggle
    CardStatus->>PayModeSheet: Opens mode selection
    User->>PayModeSheet: Selects "Pay Later"
    PayModeSheet->>CardStatus: Calls onModeChange
    CardStatus->>InstallmentsSheet: Opens installment selector
    User->>InstallmentsSheet: Selects installment count
    InstallmentsSheet->>useInstallmentRates: Requests APR for selection
    useInstallmentRates->>Backend: Queries market data
    Backend-->>useInstallmentRates: Returns rates, utilization
    useInstallmentRates-->>InstallmentsSheet: Returns payment schedule
    InstallmentsSheet->>User: Displays APR and payments
    User->>InstallmentsSheet: Confirms installment count
    InstallmentsSheet->>mutateMode: Calls onModeChange(installmentCount)
    mutateMode->>Backend: POST card mode change
    Backend-->>mutateMode: Confirms update, returns new limits
    mutateMode->>Home: Updates state optimistically
    Home->>CardStatus: Re-renders with new mode/limits
    CardStatus-->>User: Displays updated spending limit
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~75 minutes

Possibly related PRs

Suggested reviewers

  • cruzdanilo
  • franm91
🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The PR title '✨ app: home screen revamp' directly describes the primary change—a comprehensive redesign of the home screen including UI components, layouts, and animations.
Linked Issues check ✅ Passed Changes comprehensively address all three linked issues: improved loading states via new skeleton/loading components [#501], removed Visa/SignatureCard UI elements [#599], and extensive home screen redesign with new sheets, spotlight, and card status overhaul [#713].
Out of Scope Changes check ✅ Passed Changes are appropriately scoped: primarily home screen UI revamp, font system standardization, design token updates, and translation additions directly supporting the home screen redesign objectives.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch home

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist
Copy link

Summary of Changes

Hello @dieguezguille, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request delivers a comprehensive redesign of the application's core user interface, specifically targeting the home and payments sections. The changes aim to modernize the application's appearance, improve navigation, and introduce new functionalities such as an installments calculator and enhanced card management options. The update focuses on providing a more intuitive and visually appealing experience for users interacting with their financial data and card services.

Highlights

  • UI Revamp: The home and payments screens have undergone a significant visual overhaul, including redesigned components for the tab bar, card status, action buttons, benefits carousel, and portfolio summary. New fonts and spacing tokens have been applied across the application for a refreshed look.
  • New Payments Screen: A dedicated payments screen has been implemented, providing a centralized view for total outstanding amounts, overdue payments, and upcoming payments, along with detailed information and actions for each.
  • Installments Calculator: A new installments calculator feature has been added, allowing users to estimate the cost of purchases across various installment plans.
  • Card Mode Management: The card mode mutation logic has been unified, and new UI components for managing and understanding card spending and credit limits have been introduced, including an interactive spotlight for installment selection.
  • Maestro Test Flow Updates: Maestro test flows have been updated to reflect the new UI and functionalities, ensuring continued test coverage for the revamped home and payments features.
Changelog
  • @exactly/mobile
    • adjust tamagui tokens
    • update tab bar ui
    • restyle card status component
    • restyle action buttons
    • implement new pay screen
    • unify card mode mutation
    • apply tamagui spacing tokens
    • refine benefits carousel
    • replace fonts
    • adjust translations
    • add installments calculator
    • fix protocol asset logos
    • add vertical frame to styled button
    • restyle overdue and upcoming payments
    • unify animation parameters
    • restyle portfolio summary
    • unify add funds gap value
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

gemini-code-assist[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

@sentry
Copy link

sentry bot commented Feb 18, 2026

✅ All tests passed.

coderabbitai[bot]

This comment was marked as resolved.

@cruzdanilo cruzdanilo marked this pull request as ready for review February 18, 2026 15:20
chatgpt-codex-connector[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

@greptile-apps
Copy link

greptile-apps bot commented Feb 19, 2026

Greptile Summary

redesigned home screen with new installments payment system and visual refresh

  • replaced BDOGrotesk and IBM Plex Mono fonts with SplineSans family throughout the app
  • added interactive pay mode toggle (Now/Later) to CardStatus component with animated limit paginator showing spending limit in debit mode and credit limit with collateral in credit mode
  • implemented InstallmentsSheet for selecting 1-12 installments with real-time APR display using new useInstallmentRates hook that calculates rates via splitInstallments and fixedRate from @exactly/lib
  • added InstallmentsSpotlight onboarding overlay with SVG mask cutout and auto-scroll positioning to highlight installments feature
  • created PayModeSheet educational modal explaining Now vs Later payment modes
  • refactored PortfolioSummary and added new Amount component for consistent currency formatting
  • updated typography system in Text component with explicit line heights and letter spacing values
  • modified spacing token scale in tamagui config (removed intermediate values, adjusted upper range)
  • changed default animation from moderate spring to default timing with bezier easing
  • expanded Spanish translations for installments and payment flows

Confidence Score: 4/5

  • safe to merge with one minor style optimization recommended
  • large but well-structured UI refactor with proper state management, no critical bugs found, one inefficient array initialization pattern that doesn't affect functionality
  • pay close attention to src/utils/useInstallmentRates.ts for the array initialization pattern

Important Files Changed

Filename Overview
src/components/home/Home.tsx added installments sheet, pay mode sheet, and spotlight feature with proper state management
src/components/home/CardStatus.tsx completely redesigned with pay mode toggle, animated limit paginator, and interactive card preview
src/components/home/InstallmentsSheet.tsx new sheet for selecting installments with horizontal scroll and APR display
src/utils/useInstallmentRates.ts new hook calculating installment rates, minor inefficiency in Array.from usage
src/components/pay-mode/Pay.tsx updated payment flow with improved UI, route handling, and asset selection
tamagui.config.ts font changed from BDOGrotesk to SplineSans, updated spacing tokens and animations

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    Start[User opens Home screen] --> CardStatus[CardStatus Component]
    CardStatus --> Toggle{Pay Mode Toggle}
    Toggle -->|Now mode = 0| DebitView[Shows Spending Limit]
    Toggle -->|Later mode > 0| CreditView[Shows Credit Limit]
    
    Toggle --> InstallmentsButton[User taps Later toggle]
    InstallmentsButton -->|mode = 0| SetMode[Set mode to lastInstallments ?? 1]
    InstallmentsButton -->|mode > 0| OpenSheet[Open InstallmentsSheet]
    
    OpenSheet --> SelectInstallments[InstallmentsSheet]
    SelectInstallments --> LoadRates[useInstallmentRates hook]
    LoadRates --> CalcRates[Calculate APR for 1-12 installments]
    CalcRates --> Display[Display horizontal scroll cards]
    Display --> UserSelect[User selects installment count]
    UserSelect --> UpdateMode[Call onModeChange with selected count]
    UpdateMode --> MutateMode[mutateMode API call]
    MutateMode --> UpdateCache[Update queryClient cache]
    
    CardStatus --> LearnMore[User taps Learn More]
    LearnMore --> PayModeSheet[PayModeSheet Component]
    PayModeSheet --> ExplainModes[Explain Now vs Later modes]
    
    CreditView --> Payment[User makes purchase]
    Payment --> CreateDebt[Debt created with maturity]
    CreateDebt --> HomePayments[OverduePayments/UpcomingPayments]
    HomePayments --> PaymentClick[User clicks payment]
    PaymentClick --> PayComponent[Pay Component]
    PayComponent --> AssetSelect[Select payment asset]
    AssetSelect --> CalcRoute[Calculate swap route if needed]
    CalcRoute --> RepayDebt[Execute repayAtMaturity]
Loading

Last reviewed commit: 1220ff6

greptile-apps[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

@dieguezguille dieguezguille force-pushed the home branch 2 times, most recently from 0d1fe98 to 5b91963 Compare March 5, 2026 18:06
devin-ai-integration[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fcfdce3de2

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment on lines +108 to +110
onPress={() => {
setSelected(installment);
selectionAsync().catch(reportError);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Prevent selecting installments marked as unavailable

when useInstallmentRates returns an installment with payments === undefined, the card correctly renders N/A, but this press handler still lets the user select it and the confirm action later forwards that mode to onModeChange. in the scenario where maturity pools are missing for a given count, users can still apply a plan the UI has already classified as unavailable, which creates inconsistent state and can surface failures later when trying to use that pay-later mode.

Useful? React with 👍 / 👎.

Copy link

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 2 new potential issues.

View 11 additional findings in Devin Review.

Open in Devin Review

marginVertical="$s4"
onLayout={(event) => setWidth(event.nativeEvent.layout.width)}
>
<XStack width={width * 2} x={mode > 0 ? -width : 0} animation="default" animateOnly={["transform"]}>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 LimitPaginator briefly shows wrong panel on initial mount in credit mode

In CardStatus.tsx, the LimitPaginator component initialises width to 0 via useState(0). On the first render, both inner XStack panels have width={0}, so nothing is visible. After onLayout fires and sets width to the real value, the panels instantly become visible (width is not animated), but the x transform from 0 to -width IS animated via animation="default" animateOnly={["transform"]} at src/components/home/CardStatus.tsx:265. This means when mode > 0 (credit mode), users briefly see the spending-limit panel slide out and the credit-limit panel slide in, instead of the credit-limit panel appearing directly.

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

overflow="hidden"
alignItems="center"
justifyContent="flex-end"
backgroundColor="#1A181A"

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Hardcoded hex color violates mandatory design-token rule

The .agents/rules/mobile.md rule file states: "design tokens only: all styling must use predefined tokens from tamagui.config.ts. never use hardcoded values." with explicit examples ❌ color: '#ff0000'. src/components/home/CardStatus.tsx:91 uses backgroundColor="#1A181A" — a hardcoded hex color in JSX where tamagui token props are available.

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

app: home screen redesign ui: remove visa logo from home app: improve component loading states

1 participant