Skip to content

Conversation

chibie
Copy link
Contributor

@chibie chibie commented Sep 11, 2025

Release v1.1.0

This PR merges the main branch into stable to trigger the automated release workflow.

Changes included:

Expected Release:

  • Version: v1.1.0 (minor bump due to 6 feat commits)
  • Type: Minor version bump
  • Release Notes: Will now properly populate with categorized commit information

This will test the fixed release workflow and generate the first proper release with detailed notes.

armoredvortex and others added 22 commits July 17, 2025 13:43
allow the header for "Frequently Asked Questions" to wrap
* feat: add NoticeBanner component for announcements

- Create reusable NoticeBanner component with mobile/desktop layouts
- Add NoticeBanner to main layout positioned with navbar
- Update HomePage hero section spacing to accommodate banner
- Include banner illustrations for mobile and desktop
- Display BNB Smart Chain restoration announcement

The NoticeBanner provides a flexible way to display important
announcements across the application with responsive design.

* feat: add dynamic notice banner configuration

- Introduce NEXT_PUBLIC_NOTICE_BANNER_TEXT to .env.example for customizable banner messages.
- Update layout to utilize dynamic notice banner text from configuration.
- Enhance README with additional documentation reference and improved links.

This update allows for flexible notice banner messages, improving user communication across the application.
* feat(tokens): implement TokensContext for centralized token management and fetching

* refactor(tokens): improve token fetching and handling in various components

* feat(tokens): implement TokensContext for centralized token management and fetching

* refactor(tokens): improve token fetching and handling in various components

* refactor(transaction): replace SUPPORTED_TOKENS with getTokenLogoIdentifier for logo retrieval

* feat(tokens): implement ongoing fetch mechanism to prevent race conditions in token retrieval

* refactor(network): enhance normalizeNetworkName function for dynamic display names and improve getNetworkTokens caching logic

* refactor(tokens): update fetchTokens return type and enhance type safety in TransferForm component
* feat: integrate blog as subroute in main application

* fix: address all CodeRabbit review comments

- Improve accessibility with ARIA attributes and semantic HTML
- Fix image optimization with proper sizes and responsive loading
- Add error handling for clipboard operations and API calls
- Implement proper cleanup for timers and event listeners
- Fix Sanity schema validation and slug uniqueness
- Optimize performance with ISR caching and efficient scroll handling
- Enhance UX with scroll snapping and better pagination
- Fix TypeScript type issues and import paths
- Add proper keyboard navigation support
- Implement security improvements for remote images

* chore: fix alphabetical ordering of sanity env keys

* fix: comprehensive codebase improvements and bug fixes

- fix(hotjar): prevent double initialization with module-scoped tracking
- fix(layout): remove duplicate cookie consent component
- fix(blog): improve PortableText fallback with proper text extraction
- fix(icons): add TypeScript types and accessibility attributes
- fix(list): implement semantic markup with proper ARIA attributes
- fix(skeleton): add accessibility support and respect motion preferences
- fix(featured): replace invalid Tailwind class with flex-1
- fix(types): update SanityAuthor image type for better compatibility
- fix(content): implement unique slug generation for headings
- fix(toc): optimize click handler performance
- fix(sidebar): remove empty unused component
- fix(searchbar): add client directive for interactive functionality
- fix(cookies): improve accessibility for essential cookies
- fix(navbar): use pathname.startsWith for blog route detection
- fix(analytics): add proper event listener cleanup in blog tracking
- fix(config): update Sanity env vars and optimize CDN usage
- fix(not-found): remove unused theme variable
- fix(utils): improve type safety in filterBlogsAndCategories function
- fix(next): replace deprecated unsplash.it with picsum.photos
- fix(deps): move Sanity build tools to devDependencies
- fix(sanity): add configuration validation and fix imports
- fix(studio): enhance accessibility and security in content schemas
- fix(types): correct reference field syntax for Sanity v3
- fix(blog): improve URLSearchParams usage and analytics tracking
- fix(mixpanel): prevent property overwrites in tracking functions
- fix(queries): add publishedAt filter to exclude unpublished posts

Improves type safety, accessibility, security, performance, and user experience across the application.

* fix(cookie-consent): add no-op handler for essential cookies checkbox

* fix: update environment variable names and enhance type safety in utility functions

- Rename environment variables for consistency with Sanity configuration.
- Improve type safety in filterBlogsAndCategories function by specifying SanityPost type.
- Remove unnecessary role attribute from Navbar component.
- Add null checks in DetailClient component to prevent potential errors.
- Implement client directive in BlogPagination component for interactivity.
- Enhance accessibility in SearchModal component with ARIA attributes and keyboard navigation support.
- Update skeleton components to improve accessibility and user experience.
- Refactor Mixpanel tracking to prevent property overwrites.
- Add descriptions to Sanity schema fields for better clarity and compliance.

* fix: update pnpm-lock.yaml to reorganize Sanity dependencies

- Move '@sanity/cli' and '@sanity/vision' from dependencies to devDependencies for better project structure.
- Clean up unnecessary entries in the lock file to improve maintainability.

* fix: add ESLint directive to suppress exhaustive-deps warning in DetailClient component

- Added a comment to disable the exhaustive-deps rule for the useEffect hook to prevent unnecessary warnings while maintaining functionality.
… section highlighting (#184)

* feat: integrate blog as subroute in main application

* fix: address all CodeRabbit review comments

- Improve accessibility with ARIA attributes and semantic HTML
- Fix image optimization with proper sizes and responsive loading
- Add error handling for clipboard operations and API calls
- Implement proper cleanup for timers and event listeners
- Fix Sanity schema validation and slug uniqueness
- Optimize performance with ISR caching and efficient scroll handling
- Enhance UX with scroll snapping and better pagination
- Fix TypeScript type issues and import paths
- Add proper keyboard navigation support
- Implement security improvements for remote images

* chore: fix alphabetical ordering of sanity env keys

* fix: comprehensive codebase improvements and bug fixes

- fix(hotjar): prevent double initialization with module-scoped tracking
- fix(layout): remove duplicate cookie consent component
- fix(blog): improve PortableText fallback with proper text extraction
- fix(icons): add TypeScript types and accessibility attributes
- fix(list): implement semantic markup with proper ARIA attributes
- fix(skeleton): add accessibility support and respect motion preferences
- fix(featured): replace invalid Tailwind class with flex-1
- fix(types): update SanityAuthor image type for better compatibility
- fix(content): implement unique slug generation for headings
- fix(toc): optimize click handler performance
- fix(sidebar): remove empty unused component
- fix(searchbar): add client directive for interactive functionality
- fix(cookies): improve accessibility for essential cookies
- fix(navbar): use pathname.startsWith for blog route detection
- fix(analytics): add proper event listener cleanup in blog tracking
- fix(config): update Sanity env vars and optimize CDN usage
- fix(not-found): remove unused theme variable
- fix(utils): improve type safety in filterBlogsAndCategories function
- fix(next): replace deprecated unsplash.it with picsum.photos
- fix(deps): move Sanity build tools to devDependencies
- fix(sanity): add configuration validation and fix imports
- fix(studio): enhance accessibility and security in content schemas
- fix(types): correct reference field syntax for Sanity v3
- fix(blog): improve URLSearchParams usage and analytics tracking
- fix(mixpanel): prevent property overwrites in tracking functions
- fix(queries): add publishedAt filter to exclude unpublished posts

Improves type safety, accessibility, security, performance, and user experience across the application.

* fix(cookie-consent): add no-op handler for essential cookies checkbox

* fix: update environment variable names and enhance type safety in utility functions

- Rename environment variables for consistency with Sanity configuration.
- Improve type safety in filterBlogsAndCategories function by specifying SanityPost type.
- Remove unnecessary role attribute from Navbar component.
- Add null checks in DetailClient component to prevent potential errors.
- Implement client directive in BlogPagination component for interactivity.
- Enhance accessibility in SearchModal component with ARIA attributes and keyboard navigation support.
- Update skeleton components to improve accessibility and user experience.
- Refactor Mixpanel tracking to prevent property overwrites.
- Add descriptions to Sanity schema fields for better clarity and compliance.

* fix: update pnpm-lock.yaml to reorganize Sanity dependencies

- Move '@sanity/cli' and '@sanity/vision' from dependencies to devDependencies for better project structure.
- Clean up unnecessary entries in the lock file to improve maintainability.

* fix: add ESLint directive to suppress exhaustive-deps warning in DetailClient component

- Added a comment to disable the exhaustive-deps rule for the useEffect hook to prevent unnecessary warnings while maintaining functionality.

* fix: enhance accessibility in SearchModal component

- Replace random ID generation with useId for generating unique ARIA IDs, improving accessibility and consistency in the component.

* fix(blog): resolve table of contents jump-to functionality and active section highlighting

- Fix ID mismatch between section extraction and rendering by using consistent slug generation
- Add proper banner-aware positioning for sticky table of contents and scroll margins
- Implement smooth scrolling with immediate active section updates after programmatic scroll
- Add retry mechanism for DOM element detection to handle timing issues
- Prevent scroll handler interference during programmatic scrolling
- Ensure table of contents works consistently across all clicks, not just first time

The table of contents now properly highlights active sections and allows smooth navigation
to different sections of blog posts with correct positioning accounting for the notice banner.

* fix(blog): remove console log from heading ID generation

- Removed debug console log statement from the createPtComponents function to clean up the code and improve performance.

* fix(navbar): add responsive visibility to blog link in Navbar component

- Updated the class for the blog link to include 'sm:hidden', ensuring it is hidden on small screens for better responsiveness.
* fix(wallet-modal): replace ArrowLeft02Icon with ArrowRight01Icon in SettingsView component

* feat(balance): add refresh balance functionality across multiple components

- Implemented refresh balance button with loading state in TransferForm, WalletDetails, WalletView, and TransactionForm components.
- Integrated RefreshIcon for visual feedback during balance refresh.
- Enhanced user experience by allowing users to manually refresh their wallet balances.

* refactor: remove refresh balance button from unnecessary spots

- Removed the refresh balance button from TransferForm, WalletDetails, and TransactionForm components to streamline the UI.
- Updated balance display logic to enhance user experience by directly showing the balance without manual refresh options.
- Introduced formatting for token balance in TransferForm to ensure consistent decimal precision.

* fix(footer): resolve overflow bug on some screens

* feat(utils): add formatDecimalPrecision function to handle number formatting

- Introduced formatDecimalPrecision function to format numbers with specified decimal precision, addressing floating-point arithmetic issues.
- The function ensures consistent formatting for max values in forms, enhancing overall user experience.

* fix(wallet-details): add error handling to refresh balance button

- Updated the refresh balance button in WalletDetails to include error handling for the refreshBalance function, improving robustness and user feedback during balance refresh operations.
- Added ARIA label for better accessibility.
* fix(seo): ensure layout metadata applies across all pages by converting client pages to server wrappers\n\n- Convert home, privacy policy, and terms pages to server components (wrappers)\n- Add per-page metadata for privacy policy and terms\n- Move interactive logic into client components (privacy-client, terms-client)\n- Remove redundant page-level metadata from home to inherit from layout\n\nThis fixes missing meta tags on non-blog routes by enabling Next.js App Router metadata inheritance from .

* refactor(privacy): remove redundant isWiderPage property from PrivacyClient component

* refactor(ui): extract scroll fade logic into reusable hook and update PrivacyClient and TermsClient to use it

* fix: add safe back navigation with fallback to home page

- Update back button logic in privacy-policy and terms pages
- Check window.history.length before calling router.back()
- Fallback to router.push('/') for direct arrivals
- Add client-safe window object check

---------

Co-authored-by: chibie <[email protected]>
* chore: add brand kit URL to footer

* refactor(sanity): remove configuration validation from CLI config

Remove validation block that checks for required SANITY_STUDIO_PROJECT_ID
and SANITY_STUDIO_DATASET environment variables in sanity.cli.ts

* fix: update Brand Kit link to use HTTPS and improve security

- Replace Next.js Link with plain anchor tag for external navigation
- Update URL from http to https://tinyurl.com/noblocks-brand-kit
- Add rel="noopener noreferrer" for security
- Consolidate styling to anchor element

---------

Co-authored-by: Jeremy <[email protected]>
)

* feat: implement dynamic token selection for rate fetching

- Add getPreferredRateToken utility function that prioritizes USDC > USDT > first available token
- Update getCNGNRate in WalletDetails to use dynamic token selection based on network support
- Update fetchWalletBalance to use dynamic token selection for cNGN conversion
- Fixes issue where USDT rate fetching fails on Base network due to lack of support

* feat: centralize CNGN rate fetching with useCNGNRate hook

- Create useCNGNRate custom hook for centralized CNGN rate fetching
- Add getCNGNRateForNetwork utility function for non-hook usage
- Update WalletDetails to use the new hook instead of manual rate fetching
- Update TransactionForm to use the hook for validation limits
- Update fetchWalletBalance to use centralized rate utility
- Eliminates code duplication across multiple files
- Maintains consistent token selection logic using getPreferredRateToken

* style: apply prettier formatting fixes

* chore: add .sanity/ to .gitignore

- Ignore Sanity build artifacts and runtime files

* perf: optimize image loading and clean up analytics logging

- Add loading='lazy' and priority attributes to images for better performance
- Remove unnecessary console.warn statements from analytics hooks
- Improve image className structure in HomePage component

* fix: resolve cNGN balance calculation and validation timing issues

- Move cNGN USD conversion from fetchWalletBalance to BalanceContext level
- Add calculateCorrectedTotalBalance utility to handle cNGN conversion with proper rate timing
- Fix case sensitivity handling for both 'cNGN' and 'CNGN' token keys in utils and forms
- Update TransactionForm validation to use uppercase token normalization
- Ensure useCNGNRate always fetches rate to prevent validation timing issues
- Add 'use client' directive to BalanceContext and useCNGNRate hook
- Add cngnRate to BalanceContext dependency array for proper rate updates

This resolves timing issues where cNGN balances were treated as 1:1 USD instead of
being properly converted using the NGN exchange rate.

* fix: enhance error handling for cNGN rate validation

- Add proper error handling in TransactionForm validation logic
- Show specific error message when cNGN rate is unavailable
- Remove unused import getCNGNRateForNetwork from utils
- Fix React Hook dependency array to include cngnRateError
…igation (#202)

* feat(detail-client): add back to blog link with icon for improved navigation

* fix(detail-client): update back to blog link styling and accessibility
…tioning and search integration (#204)

* feat(home-client): enhance mobile search and category selection UI with animations

* feat(home-client): implement mobile category filter with dynamic positioning and search integration

* fix(home-client): adjust mobile menu positioning for improved responsiveness

* feat(home-client): enhance mobile UI with new icons and improved layout adjustments

* fix(home-client): optimize mobile category menu positioning with useLayoutEffect and passive event listeners

* fix(home-client): optimize mobile category menu event listeners for better performance

* fix(home-client): adjust mobile menu position for improved visibility
* fix(faq): prevent horizontal overflow on small screens

allow the header for "Frequently Asked Questions" to wrap

* feat: add NoticeBanner component for network announcements (#166)

* feat: add NoticeBanner component for announcements

- Create reusable NoticeBanner component with mobile/desktop layouts
- Add NoticeBanner to main layout positioned with navbar
- Update HomePage hero section spacing to accommodate banner
- Include banner illustrations for mobile and desktop
- Display BNB Smart Chain restoration announcement

The NoticeBanner provides a flexible way to display important
announcements across the application with responsive design.

* feat: add dynamic notice banner configuration

- Introduce NEXT_PUBLIC_NOTICE_BANNER_TEXT to .env.example for customizable banner messages.
- Update layout to utilize dynamic notice banner text from configuration.
- Enhance README with additional documentation reference and improved links.

This update allows for flexible notice banner messages, improving user communication across the application.

* feat(tokens): implement token fetch from aggregator (#177)

* feat(tokens): implement TokensContext for centralized token management and fetching

* refactor(tokens): improve token fetching and handling in various components

* feat(tokens): implement TokensContext for centralized token management and fetching

* refactor(tokens): improve token fetching and handling in various components

* refactor(transaction): replace SUPPORTED_TOKENS with getTokenLogoIdentifier for logo retrieval

* feat(tokens): implement ongoing fetch mechanism to prevent race conditions in token retrieval

* refactor(network): enhance normalizeNetworkName function for dynamic display names and improve getNetworkTokens caching logic

* refactor(tokens): update fetchTokens return type and enhance type safety in TransferForm component

* refactor(release): simplify release check logic and improve commit message formatting in create-release workflow

* feat: integrate blog as subroute in main application (#180)

* feat: integrate blog as subroute in main application

* fix: address all CodeRabbit review comments

- Improve accessibility with ARIA attributes and semantic HTML
- Fix image optimization with proper sizes and responsive loading
- Add error handling for clipboard operations and API calls
- Implement proper cleanup for timers and event listeners
- Fix Sanity schema validation and slug uniqueness
- Optimize performance with ISR caching and efficient scroll handling
- Enhance UX with scroll snapping and better pagination
- Fix TypeScript type issues and import paths
- Add proper keyboard navigation support
- Implement security improvements for remote images

* chore: fix alphabetical ordering of sanity env keys

* fix: comprehensive codebase improvements and bug fixes

- fix(hotjar): prevent double initialization with module-scoped tracking
- fix(layout): remove duplicate cookie consent component
- fix(blog): improve PortableText fallback with proper text extraction
- fix(icons): add TypeScript types and accessibility attributes
- fix(list): implement semantic markup with proper ARIA attributes
- fix(skeleton): add accessibility support and respect motion preferences
- fix(featured): replace invalid Tailwind class with flex-1
- fix(types): update SanityAuthor image type for better compatibility
- fix(content): implement unique slug generation for headings
- fix(toc): optimize click handler performance
- fix(sidebar): remove empty unused component
- fix(searchbar): add client directive for interactive functionality
- fix(cookies): improve accessibility for essential cookies
- fix(navbar): use pathname.startsWith for blog route detection
- fix(analytics): add proper event listener cleanup in blog tracking
- fix(config): update Sanity env vars and optimize CDN usage
- fix(not-found): remove unused theme variable
- fix(utils): improve type safety in filterBlogsAndCategories function
- fix(next): replace deprecated unsplash.it with picsum.photos
- fix(deps): move Sanity build tools to devDependencies
- fix(sanity): add configuration validation and fix imports
- fix(studio): enhance accessibility and security in content schemas
- fix(types): correct reference field syntax for Sanity v3
- fix(blog): improve URLSearchParams usage and analytics tracking
- fix(mixpanel): prevent property overwrites in tracking functions
- fix(queries): add publishedAt filter to exclude unpublished posts

Improves type safety, accessibility, security, performance, and user experience across the application.

* fix(cookie-consent): add no-op handler for essential cookies checkbox

* fix: update environment variable names and enhance type safety in utility functions

- Rename environment variables for consistency with Sanity configuration.
- Improve type safety in filterBlogsAndCategories function by specifying SanityPost type.
- Remove unnecessary role attribute from Navbar component.
- Add null checks in DetailClient component to prevent potential errors.
- Implement client directive in BlogPagination component for interactivity.
- Enhance accessibility in SearchModal component with ARIA attributes and keyboard navigation support.
- Update skeleton components to improve accessibility and user experience.
- Refactor Mixpanel tracking to prevent property overwrites.
- Add descriptions to Sanity schema fields for better clarity and compliance.

* fix: update pnpm-lock.yaml to reorganize Sanity dependencies

- Move '@sanity/cli' and '@sanity/vision' from dependencies to devDependencies for better project structure.
- Clean up unnecessary entries in the lock file to improve maintainability.

* fix: add ESLint directive to suppress exhaustive-deps warning in DetailClient component

- Added a comment to disable the exhaustive-deps rule for the useEffect hook to prevent unnecessary warnings while maintaining functionality.

* fix(blog): resolve table of contents jump-to functionality and active section highlighting (#184)

* feat: integrate blog as subroute in main application

* fix: address all CodeRabbit review comments

- Improve accessibility with ARIA attributes and semantic HTML
- Fix image optimization with proper sizes and responsive loading
- Add error handling for clipboard operations and API calls
- Implement proper cleanup for timers and event listeners
- Fix Sanity schema validation and slug uniqueness
- Optimize performance with ISR caching and efficient scroll handling
- Enhance UX with scroll snapping and better pagination
- Fix TypeScript type issues and import paths
- Add proper keyboard navigation support
- Implement security improvements for remote images

* chore: fix alphabetical ordering of sanity env keys

* fix: comprehensive codebase improvements and bug fixes

- fix(hotjar): prevent double initialization with module-scoped tracking
- fix(layout): remove duplicate cookie consent component
- fix(blog): improve PortableText fallback with proper text extraction
- fix(icons): add TypeScript types and accessibility attributes
- fix(list): implement semantic markup with proper ARIA attributes
- fix(skeleton): add accessibility support and respect motion preferences
- fix(featured): replace invalid Tailwind class with flex-1
- fix(types): update SanityAuthor image type for better compatibility
- fix(content): implement unique slug generation for headings
- fix(toc): optimize click handler performance
- fix(sidebar): remove empty unused component
- fix(searchbar): add client directive for interactive functionality
- fix(cookies): improve accessibility for essential cookies
- fix(navbar): use pathname.startsWith for blog route detection
- fix(analytics): add proper event listener cleanup in blog tracking
- fix(config): update Sanity env vars and optimize CDN usage
- fix(not-found): remove unused theme variable
- fix(utils): improve type safety in filterBlogsAndCategories function
- fix(next): replace deprecated unsplash.it with picsum.photos
- fix(deps): move Sanity build tools to devDependencies
- fix(sanity): add configuration validation and fix imports
- fix(studio): enhance accessibility and security in content schemas
- fix(types): correct reference field syntax for Sanity v3
- fix(blog): improve URLSearchParams usage and analytics tracking
- fix(mixpanel): prevent property overwrites in tracking functions
- fix(queries): add publishedAt filter to exclude unpublished posts

Improves type safety, accessibility, security, performance, and user experience across the application.

* fix(cookie-consent): add no-op handler for essential cookies checkbox

* fix: update environment variable names and enhance type safety in utility functions

- Rename environment variables for consistency with Sanity configuration.
- Improve type safety in filterBlogsAndCategories function by specifying SanityPost type.
- Remove unnecessary role attribute from Navbar component.
- Add null checks in DetailClient component to prevent potential errors.
- Implement client directive in BlogPagination component for interactivity.
- Enhance accessibility in SearchModal component with ARIA attributes and keyboard navigation support.
- Update skeleton components to improve accessibility and user experience.
- Refactor Mixpanel tracking to prevent property overwrites.
- Add descriptions to Sanity schema fields for better clarity and compliance.

* fix: update pnpm-lock.yaml to reorganize Sanity dependencies

- Move '@sanity/cli' and '@sanity/vision' from dependencies to devDependencies for better project structure.
- Clean up unnecessary entries in the lock file to improve maintainability.

* fix: add ESLint directive to suppress exhaustive-deps warning in DetailClient component

- Added a comment to disable the exhaustive-deps rule for the useEffect hook to prevent unnecessary warnings while maintaining functionality.

* fix: enhance accessibility in SearchModal component

- Replace random ID generation with useId for generating unique ARIA IDs, improving accessibility and consistency in the component.

* fix(blog): resolve table of contents jump-to functionality and active section highlighting

- Fix ID mismatch between section extraction and rendering by using consistent slug generation
- Add proper banner-aware positioning for sticky table of contents and scroll margins
- Implement smooth scrolling with immediate active section updates after programmatic scroll
- Add retry mechanism for DOM element detection to handle timing issues
- Prevent scroll handler interference during programmatic scrolling
- Ensure table of contents works consistently across all clicks, not just first time

The table of contents now properly highlights active sections and allows smooth navigation
to different sections of blog posts with correct positioning accounting for the notice banner.

* fix(blog): remove console log from heading ID generation

- Removed debug console log statement from the createPtComponents function to clean up the code and improve performance.

* fix(navbar): add responsive visibility to blog link in Navbar component

- Updated the class for the blog link to include 'sm:hidden', ensuring it is hidden on small screens for better responsiveness.

* feat: add balance refresh functionality and UI improvements (#179)

* fix(wallet-modal): replace ArrowLeft02Icon with ArrowRight01Icon in SettingsView component

* feat(balance): add refresh balance functionality across multiple components

- Implemented refresh balance button with loading state in TransferForm, WalletDetails, WalletView, and TransactionForm components.
- Integrated RefreshIcon for visual feedback during balance refresh.
- Enhanced user experience by allowing users to manually refresh their wallet balances.

* refactor: remove refresh balance button from unnecessary spots

- Removed the refresh balance button from TransferForm, WalletDetails, and TransactionForm components to streamline the UI.
- Updated balance display logic to enhance user experience by directly showing the balance without manual refresh options.
- Introduced formatting for token balance in TransferForm to ensure consistent decimal precision.

* fix(footer): resolve overflow bug on some screens

* feat(utils): add formatDecimalPrecision function to handle number formatting

- Introduced formatDecimalPrecision function to format numbers with specified decimal precision, addressing floating-point arithmetic issues.
- The function ensures consistent formatting for max values in forms, enhancing overall user experience.

* fix(wallet-details): add error handling to refresh balance button

- Updated the refresh balance button in WalletDetails to include error handling for the refreshBalance function, improving robustness and user feedback during balance refresh operations.
- Added ARIA label for better accessibility.

* fix(seo): ensure layout metadata applies across all pages (#185)

* fix(seo): ensure layout metadata applies across all pages by converting client pages to server wrappers\n\n- Convert home, privacy policy, and terms pages to server components (wrappers)\n- Add per-page metadata for privacy policy and terms\n- Move interactive logic into client components (privacy-client, terms-client)\n- Remove redundant page-level metadata from home to inherit from layout\n\nThis fixes missing meta tags on non-blog routes by enabling Next.js App Router metadata inheritance from .

* refactor(privacy): remove redundant isWiderPage property from PrivacyClient component

* refactor(ui): extract scroll fade logic into reusable hook and update PrivacyClient and TermsClient to use it

* fix: add safe back navigation with fallback to home page

- Update back button logic in privacy-policy and terms pages
- Check window.history.length before calling router.back()
- Fallback to router.push('/') for direct arrivals
- Add client-safe window object check

---------

Co-authored-by: chibie <[email protected]>

* fix: resolve build errors and hook deps (#187)

* chore: add brand kit URL to footer (#188)

* chore: add brand kit URL to footer

* refactor(sanity): remove configuration validation from CLI config

Remove validation block that checks for required SANITY_STUDIO_PROJECT_ID
and SANITY_STUDIO_DATASET environment variables in sanity.cli.ts

* fix: update Brand Kit link to use HTTPS and improve security

- Replace Next.js Link with plain anchor tag for external navigation
- Update URL from http to https://tinyurl.com/noblocks-brand-kit
- Add rel="noopener noreferrer" for security
- Consolidate styling to anchor element

---------

Co-authored-by: Jeremy <[email protected]>

* fix: resolve cNGN balance calculation and validation timing issues (#190)

* feat: implement dynamic token selection for rate fetching

- Add getPreferredRateToken utility function that prioritizes USDC > USDT > first available token
- Update getCNGNRate in WalletDetails to use dynamic token selection based on network support
- Update fetchWalletBalance to use dynamic token selection for cNGN conversion
- Fixes issue where USDT rate fetching fails on Base network due to lack of support

* feat: centralize CNGN rate fetching with useCNGNRate hook

- Create useCNGNRate custom hook for centralized CNGN rate fetching
- Add getCNGNRateForNetwork utility function for non-hook usage
- Update WalletDetails to use the new hook instead of manual rate fetching
- Update TransactionForm to use the hook for validation limits
- Update fetchWalletBalance to use centralized rate utility
- Eliminates code duplication across multiple files
- Maintains consistent token selection logic using getPreferredRateToken

* style: apply prettier formatting fixes

* chore: add .sanity/ to .gitignore

- Ignore Sanity build artifacts and runtime files

* perf: optimize image loading and clean up analytics logging

- Add loading='lazy' and priority attributes to images for better performance
- Remove unnecessary console.warn statements from analytics hooks
- Improve image className structure in HomePage component

* fix: resolve cNGN balance calculation and validation timing issues

- Move cNGN USD conversion from fetchWalletBalance to BalanceContext level
- Add calculateCorrectedTotalBalance utility to handle cNGN conversion with proper rate timing
- Fix case sensitivity handling for both 'cNGN' and 'CNGN' token keys in utils and forms
- Update TransactionForm validation to use uppercase token normalization
- Ensure useCNGNRate always fetches rate to prevent validation timing issues
- Add 'use client' directive to BalanceContext and useCNGNRate hook
- Add cngnRate to BalanceContext dependency array for proper rate updates

This resolves timing issues where cNGN balances were treated as 1:1 USD instead of
being properly converted using the NGN exchange rate.

* fix: enhance error handling for cNGN rate validation

- Add proper error handling in TransactionForm validation logic
- Show specific error message when cNGN rate is unavailable
- Remove unused import getCNGNRateForNetwork from utils
- Fix React Hook dependency array to include cngnRateError

---------

Co-authored-by: Rachit Kumar Pandey <[email protected]>
Co-authored-by: Michael Victor <[email protected]>
Co-authored-by: Chibuotu Amadi <[email protected]>
Co-authored-by: TechieConso <[email protected]>
…fication

- Fix shell escaping issues with exclamation marks in feat! pattern
- Separate BREAKING CHANGE detection to avoid space-related issues
- Use wc -l instead of grep -c for proper counting
- Ensure release notes will now properly populate with commit information
@chibie chibie requested a review from jeremy0x as a code owner September 11, 2025 19:19
Copy link

coderabbitai bot commented Sep 11, 2025

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

✨ Finishing touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch main

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.

@chibie chibie merged commit 4ed74e3 into stable Sep 11, 2025
1 check passed
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.

5 participants