Skip to content

Redesign home screen#447

Merged
dewabisma merged 22 commits into
feat/v3from
beast/redesign-home-screen
Apr 21, 2026
Merged

Redesign home screen#447
dewabisma merged 22 commits into
feat/v3from
beast/redesign-home-screen

Conversation

@dewabisma

Copy link
Copy Markdown
Collaborator

Summary

  • Update home screen the same look as latest figma
  • Move away from liquid glass button -> quantus button
  • Move away from liquid glass icon button -> quantus icon button
  • Updated font family to Geist and Geist Mono
  • Standardize base background
  • Removed unused colors
  • Updated send and receive icon
  • Updated tx item styling
  • Refactor tx item super nested ternary (I really don't like reading nested ternary)

Main idea for buttons and base background is to have stable filename that we can update as we update design so we don't have to modify many files, we just update the styling in respective icon button, button, or base background. I think this way we can be more efficient. Previously we have to always delete or copy or rename, there is friction doing this every design update.

About the symbol for Q or Qu or Quan, I just abritrary did it. Will update once Sejal designed it.

Screenshots

  • Homepage balance shown
image
  • Home balance hidden
image

- remove gradient background
- create base background widget, this will be the main background widget where we update background implementation so we don't have to ever touch other file and all change can be centralized here. Kinda painful everytime need to change background have to go through different files.
- Removed backgroundAlt theme color
- Removed unused glass circle icon button
- Update and rename glass icon button to quantus icon button, we don't want to always create new widget for every style change. Hence generic naming is needed.
- Added new button border color
- Rename button component to quantus button
- Update button styling
- Add success variant
- Updated styling for tx item
- Update color text
@n13

n13 commented Apr 12, 2026

Copy link
Copy Markdown
Collaborator

First comment: Lets either use QUAN trailing for now, or wait for Sejal design update, which won't take long

@dewabisma dewabisma changed the base branch from main to feat/v3 April 12, 2026 09:46
@n13

n13 commented Apr 14, 2026

Copy link
Copy Markdown
Collaborator

Here's my review of PR #447 - Redesign home screen.


Overview

This is a well-scoped design system refresh: rename "Glass" components to "Quantus", swap Inter for Geist fonts, update the color palette (pink -> orange, new success/checksum colors), replace the gradient background with a flat one, and clean up the tx item ternary nesting. 47 files changed, +366/-399 lines -- net reduction, which is great.

The rename was almost fully carried through and the overall direction is solid. A few issues worth addressing:


Issues

1. Incomplete method rename in swap_screen.dart

The class/import rename is done, but the private method name _smallGlassIconButton was left behind. It still internally uses QuantusButton, so it compiles fine, but it's inconsistent with the rest of the rename.

  Widget _smallGlassIconButton({required AppColorsV2 colors, required String iconAsset, VoidCallback? onTap}) {

Should be something like _smallIconButton.

2. Missing type annotation on variant parameter

In quantus_button.dart, _buildContent declares variant without a type:

  Widget _buildContent(BuildContext context, {variant = ButtonVariant.primary}) {

This means the switch expression needs a catch-all _ case (line 121) instead of being exhaustive. Should be {ButtonVariant variant = ButtonVariant.primary}. Also, ButtonVariant.success is missing from the switch -- its text color falls through to the default. If primary buttons get dark text (background color), success buttons probably should too, but this should be an explicit choice, not an accident.

3. Hardcoded colors in tx_item.dart

The ternary refactor is a big readability win, but the 8 hardcoded Color(0x...) values in getIconBg, getIconColor, and getBorderColor go against the centralization philosophy described in the PR. These should live in AppColorsV2 (e.g. txPendingSendBg, txPendingReceiveBorder, etc.) so they update in one place if the palette changes again.

    Color getIconBg() {
      if (isHighlighted && !isSend) {
        return const Color(0x14408C6B);
      }
      // ... more hardcoded colors
    }

4. Hardcoded Color(0xFF888888) in activity_section.dart

The "View All" link uses const Color(0xFF888888) twice (lines 215, 217). Same idea -- should be a theme color to stay consistent with the centralization approach.

            style: text.smallTitle?.copyWith(
              color: const Color(0xFF888888),
              decoration: TextDecoration.underline,
              decorationColor: const Color(0xFF888888),
              decorationStyle: TextDecorationStyle.dotted,

5. textTertiary changed from transparent-white to opaque gray

# Before: semi-transparent white -- adapts to any background
textTertiary: Color(0x52FFFFFF)

# After: solid dark gray -- only works on dark backgrounds
textTertiary: Color(0xFF3D3D3D)

This is a subtle but significant behavioral change. The old value (white @ 32% opacity) would naturally adapt if a background was ever non-black. The new value is a fixed gray that will be invisible on dark surfaces. Worth confirming this is intentional -- it affects timestamp text, tertiary labels, etc. across the whole app.


Minor / Nits

  • _fontFamilySecondary declared unused: Geist Mono is registered in pubspec.yaml and the constant is defined but immediately suppressed with // ignore: unused_element. Fine as prep work, but could be removed until actually needed to avoid lint noise.
  • LiquidGlassBase / InsetButtonContainer possibly orphaned: The PR removes their usage from buttons but doesn't delete the files. May want to check if they're used elsewhere -- if not, they're dead code now.
  • Font licensing: Geist fonts are SIL OFL which is fine for bundling, but consider adding a LICENSE file in assets/fonts/ for compliance clarity.

What looks great

  • The stable naming convention (QuantusButton / QuantusIconButton / BaseBackground) is a smart move -- decouples the component name from the visual style so future design updates don't require another mass rename.
  • Nested ternary refactor in tx_item.dart is much more readable.
  • Net code reduction despite adding new features.
  • The isActive state on QuantusIconButton is a clean addition for the visibility toggle.
  • Loading skeleton for balance is improved (shows two separate skeleton lines instead of one inline row).

@dewabisma

Copy link
Copy Markdown
Collaborator Author

Summary

  • Fixed review issues
  • Add Geist font license
  • Updated home screen to follow latest update from figma
  • Added currency fiat system

It's kind of weird to work with hardcoded currency conversion, so in this PR added the currency displaying system. Which we can easily extend and update later when we have real exchange rate.

Screenshots

  • Homepage default
Simulator Screenshot - iPhone 8 - 2026-04-15 at 19 27 10
  • Homepage flip currency
Simulator Screenshot - iPhone 8 - 2026-04-15 at 19 27 16
  • Homepage hide amount
Simulator Screenshot - iPhone 8 - 2026-04-15 at 19 27 24

@n13

n13 commented Apr 17, 2026

Copy link
Copy Markdown
Collaborator

Re-review of PR #447 — Redesign home screen

7 new commits since my last review. flutter analyze passes clean. Highlights below; previous review at PR #447 review thread.


Previous review follow-up

Resolved

  1. _smallGlassIconButton rename — fixed, now _smallIconButton in swap_screen.dart
  2. Missing variant type annotation — fixed in quantus_button.dart. ButtonVariant is now explicit and the switch is exhaustive (no more catch-all _); ButtonVariant.success correctly handled
  3. Hardcoded tx_item colors — moved into AppColorsV2 as txItemIncomingHighlightBg, txItemOutgoingHighlightBg, txItemOutgoingHighlight, txItemIconDefault, txItemIncomingHighlightBorder, txItemBorderDefault.
  4. Hardcoded Color(0xFF888888) in activity_section.dart — replaced with new colors.textMuted (also added to AppColorsV2)
  5. Geist font licensemobile-app/assets/fonts/LICENSE.txt added (SIL OFL 1.1)
  6. _fontFamilySecondary ignore lint — gone; renamed to public fontFamilySecondary and now actually used in tx_item.dart and the home screen for the QUAN symbol & secondary amount

Not addressed (confirm if intentional)

  • textTertiary still Color(0xFF3D3D3D) (opaque dark gray, not the prior 0x52FFFFFF). Fine for the dark-only theme today, but it'll be invisible on any non-dark surface. Worth a one-line note that this was intentional.
  • Dead files/assets:
    • mobile-app/lib/v2/components/inset_button_container.dart — only references itself
    • assets/v2/glass_circle_icon_button_bg.png — still listed in pubspec.yaml but no widget uses it after glass_circle_icon_button.dart was removed
    • assets/v2/glass_button_wide_340_bg.png — present in assets/v2/ but no longer referenced
    • (liquid_glass_base.dart is keptmnemonic_grid.dart still uses it. Good catch leaving that one.)

New code in latest commits

Currency display system (6af5a54, 7effe0f) — strong design overall

The architecture is clean: FiatCurrency enum → ExchangeRateService for rates → CurrencyDisplayState for resolved view → currencyDisplayProvider / txAmountFormatterProvider for widgets. Widgets contain zero conversion math. Adding a new currency really is a one-line enum + one-line rate. Settings persisted via SettingsService.

Issues

1. Silent fallback in ExchangeRateService.getRate violates project rule

  double getRate(FiatCurrency fiat) => _rates[fiat] ?? 1.0;

Per the "fail early — never have a silent failure, never add fallback code for unexpected failures" rule, this ?? 1.0 should throw or assert. Since _rates is keyed by the closed FiatCurrency enum, the fallback is unreachable today — but if a new currency case is added without a matching rate, you'd silently render USD numbers labeled as the new currency. Better:

double getRate(FiatCurrency fiat) {
  final rate = _rates[fiat];
  if (rate == null) throw StateError('No rate for ${fiat.code}');
  return rate;
}

2. Precision loss in _toFiatNumeric

String _toFiatNumeric(BigInt rawBalance, FiatCurrency fiat, ExchangeRateService xRate) {
  final scaleFactorDouble = BigInt.from(10).pow(AppConstants.decimals).toDouble();
  final quanDouble = rawBalance.toDouble() / scaleFactorDouble;
  return xRate.convert(quanDouble, fiat).toStringAsFixed(2);
}

BigInt.toDouble() quietly loses precision past 2^53. NumberFormattingService.formatBalance already uses Decimal for the same conversion — this should match, otherwise the QUAN amount and the fiat amount can disagree on the lower-order digits for big balances.

3. DRY violation — hidden-balance literal duplicated

'- - - - -' appears in both currencyDisplayProvider (in the if (isHidden) branch) and txAmountFormatterProvider (returned directly). One named constant (e.g. kHiddenAmountPlaceholder) would keep them in sync.

4. Dead SymbolPosition.suffix branch

All five enum cases use prefix. The suffix branches in format / formatSigned are unreachable today. Fine as forward-looking design, but per the same "no fallback for unexpected" thinking, you might want to drop it until a real suffix currency lands.

5. _circleIconButton wrapper is dead weight in home_screen.dart

  Widget _circleIconButton({
    required IconData icon,
    required AppColorsV2 colors,
    required VoidCallback onTap,
    bool isActive = false,
  }) {
    return QuantusIconButton.circular(icon: icon, onTap: onTap, isActive: isActive);
  }

It takes a colors param it doesn't use, and otherwise just forwards to QuantusIconButton.circular. Inline the calls.

Migration dialog (a9f2870)

Trivial rename GlassButtonQuantusButton. This should have ridden along with the original rename commit, but easy to miss across packages.


What I really like

  • CurrencyDisplayState — clean separation of resolved presentation state from raw data. Widgets render strings, never compute.
  • txAmountFormatterProvider returning a function with all dependencies baked in is a nice pattern — avoids re-watching the same providers in every tx item.
  • TxItemData.amount is now BigInt (raw) instead of pre-formatted string — formatting moved to the provider. Consistent with the new architecture.
  • Loading skeleton for balance stacks two boxes (200×36 + 100×18) — much closer to the final layout than the old single inline skeleton.
  • isBalanceHidden plumbing removed from tx_item.dart — centralized in the formatter provider. Net DRY win.
  • Forward-looking docs in fiat_currency.dart ("Adding a new currency only requires...") — the kind of comment future-you will thank present-you for.

Verdict

Solid follow-up. All five flagged review issues are addressed cleanly, the currency system is a genuinely nice piece of architecture, and flutter analyze is green. The remaining items are small: one rule violation (?? 1.0 silent fallback), one precision concern (BigInt.toDouble), the duplicated '- - - - -' literal, the dead wrapper _circleIconButton, and the dead asset/file cleanup. Nothing blocking.

- remove unused glass button assets
- fix DRY violation
- fix precision loss in convert fiat
- remove silent fallback
@n13

n13 commented Apr 20, 2026

Copy link
Copy Markdown
Collaborator

Re-review of PR #447 — Redesign home screen

3 new commits since my last review (53238bf, 71a1999, 9601a80). Ran the same checks (dart format --line-length=120 --set-exit-if-changed as CI does, plus code read) — nothing else landed.

Previous review follow-up — all five resolved

  1. Silent ?? 1.0 fallback in ExchangeRateService.getRate — fixed cleanly:

    Decimal getRate(FiatCurrency fiat) {
      final rate = _rates[fiat];
      if (rate == null) throw StateError('No rate for ${fiat.code}');
      return rate;
    }

    Honors the project's "fail early, no silent fallback" rule.

  2. Precision loss in _toFiatNumeric — fixed properly, and then some. The whole conversion pipeline was migrated from double to Decimal:

    • _rates map values are now Decimal
    • ExchangeRateService.convert returns Decimal
    • _toFiatNumeric does Decimal.fromBigInt(rawBalance) / Decimal.fromBigInt(scaleFactor) → no toDouble() anywhere on raw balances

    Division by a power of 10 is always a terminating decimal, so .toDecimal() is safe.

  3. DRY - - - - - literal — fixed: file-level _hiddenAmountText now shared between currencyDisplayProvider and txAmountFormatterProvider.

  4. Dead _circleIconButton wrapper in home_screen.dart — fixed: both callsites now go directly to QuantusIconButton.circular(...), and _buildTopBar's unused active/colors params went away with it. Nice tidy-up.

  5. Dead assets — fixed in two commits:

    • inset_button_container.dart, glass_circle_icon_button_bg.png, glass_button_wide_340_bg.png deleted (71a1999)
    • Asset declaration also removed from pubspec.yaml (9601a80) — good follow-up.

Not addressed (explicitly optional last round)

  • textTertiary behavioral change (semi-transparent white → opaque gray) — no doc note added, but this is a dark-only theme today so functionally fine.
  • Dead SymbolPosition.suffix branches in format/formatSigned — still there, still unused. Fine as forward-looking API.

Checks

  • dart format . --line-length=120 --set-exit-if-changed on mobile-app/lib/clean, 0 files changed
  • Code read — no regressions introduced by the fixes

Tiny nits (non-blocking)

  • final _hiddenAmountText = '- - - - -'; could be const since it's a compile-time constant.

Verdict

Approve. All previously-flagged blocking issues are resolved cleanly, the precision fix went beyond what I asked for (full Decimal pipeline), the dead-code cleanup is thorough, and format is green. Ready to merge to feat/v3.

@n13 n13 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

GTG!

Comment thread mobile-app/lib/models/fiat_currency.dart
/// respecting the current hidden state, flip state, and selected fiat.
///
/// Usage:
/// final formatted = ref.watch(txAmountFormatterProvider)(amount, isSend: true);

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Not sure we ever want to show transaction items as fiat currency?!

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

It works the same purpose as the blance toggling between fiat and quan. I think it's reasonable to display it as fiat when they toggle the balance, it make it easier for some people to know how much they send or spend in fiat term.

It is also how the design in figma.

Comment thread mobile-app/lib/services/exchange_rate_service.dart

@n13 n13 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Made some comments, please address these

@dewabisma dewabisma merged commit cf11cda into feat/v3 Apr 21, 2026
dewabisma added a commit that referenced this pull request May 4, 2026
* Redesign home screen (#447)

* feat: add new font families

* feat: remove accentPink, add accentOrange, update checksum color

* feat: update background color

- remove gradient background
- create base background widget, this will be the main background widget where we update background implementation so we don't have to ever touch other file and all change can be centralized here. Kinda painful everytime need to change background have to go through different files.
- Removed backgroundAlt theme color

* feat: updated icon button

- Removed unused glass circle icon button
- Update and rename glass icon button to quantus icon button, we don't want to always create new widget for every style change. Hence generic naming is needed.
- Added new button border color

* feat: update standard button

- Rename button component to quantus button
- Update button styling
- Add success variant

* feat: update send and receive

* feat: finish updating activity section

- Updated styling for tx item
- Update color text

* chore: formatting

* chore: ignore linter for secondary font family yet used

* feat: revert number format to trailing

* feat: improve balance loading

* fix: migration dialog button

* feat: address reviews

* feat: add geist font license

* WIP: currency system

* feat: finish updating currency display

* chore: formatting

* feat: resolved PR review issues

- remove unused glass button assets
- fix DRY violation
- fix precision loss in convert fiat
- remove silent fallback

* feat: remove asset declaration

* feat: add myr to fiat currency

* Redesign activity screen and tx detail sheet (#453)

* feat: add new font families

* feat: remove accentPink, add accentOrange, update checksum color

* feat: update background color

- remove gradient background
- create base background widget, this will be the main background widget where we update background implementation so we don't have to ever touch other file and all change can be centralized here. Kinda painful everytime need to change background have to go through different files.
- Removed backgroundAlt theme color

* feat: updated icon button

- Removed unused glass circle icon button
- Update and rename glass icon button to quantus icon button, we don't want to always create new widget for every style change. Hence generic naming is needed.
- Added new button border color

* feat: update standard button

- Rename button component to quantus button
- Update button styling
- Add success variant

* feat: update send and receive

* feat: finish updating activity section

- Updated styling for tx item
- Update color text

* chore: formatting

* chore: ignore linter for secondary font family yet used

* feat: revert number format to trailing

* feat: finish new receive screen

* feat: standardized circular loader

It's crazy how we keep adding loader on the fly

Some are still left as is because of specific usage requirements but I changed mostly to use single reusable loader

* feat: finish updating toaster and copy button

* feat: improve balance loading

* fix: migration dialog button

* feat: address reviews

* feat: add geist font license

* WIP: currency system

* feat: finish updating currency display

* chore: formatting

* feat: resolve review issues

- remove fragile postFrame
- Add color tokens to theme
- remove duplicate map index implementation

* feat: update styling receive screen, add filter buttons

* feat: finish integrating filtered history

* feat: better loading UX

* feat: optimize graphql query performance

* chore: revert print timing

* feat: make tx details respect currency flip and hidden state

* feat: extract text style to theme

* chore: formatting

* fix: not properly display quan symbol in tx item

* feat: resolved PR review issues

- remove unused glass button assets
- fix DRY violation
- fix precision loss in convert fiat
- remove silent fallback

* feat: remove asset declaration

* feat: resolve PR review issues

* feat: resolve PR review issues

* feat: add myr to fiat currency

* chore: formatting and extract magic number

* feat: fix naming issues, add new tx to send filter also

* Redesign send screen (#458)

* feat: add new font families

* feat: remove accentPink, add accentOrange, update checksum color

* feat: update background color

- remove gradient background
- create base background widget, this will be the main background widget where we update background implementation so we don't have to ever touch other file and all change can be centralized here. Kinda painful everytime need to change background have to go through different files.
- Removed backgroundAlt theme color

* feat: updated icon button

- Removed unused glass circle icon button
- Update and rename glass icon button to quantus icon button, we don't want to always create new widget for every style change. Hence generic naming is needed.
- Added new button border color

* feat: update standard button

- Rename button component to quantus button
- Update button styling
- Add success variant

* feat: update send and receive

* feat: finish updating activity section

- Updated styling for tx item
- Update color text

* chore: formatting

* chore: ignore linter for secondary font family yet used

* feat: revert number format to trailing

* feat: finish new receive screen

* feat: standardized circular loader

It's crazy how we keep adding loader on the fly

Some are still left as is because of specific usage requirements but I changed mostly to use single reusable loader

* feat: finish updating toaster and copy button

* feat: improve balance loading

* fix: migration dialog button

* feat: address reviews

* feat: add geist font license

* WIP: currency system

* feat: finish updating currency display

* chore: formatting

* feat: resolve review issues

- remove fragile postFrame
- Add color tokens to theme
- remove duplicate map index implementation

* feat: update styling receive screen, add filter buttons

* feat: finish integrating filtered history

* feat: better loading UX

* feat: optimize graphql query performance

* chore: revert print timing

* feat: make tx details respect currency flip and hidden state

* feat: extract text style to theme

* chore: formatting

* fix: not properly display quan symbol in tx item

* feat: resolved PR review issues

- remove unused glass button assets
- fix DRY violation
- fix precision loss in convert fiat
- remove silent fallback

* feat: remove asset declaration

* feat: resolve PR review issues

* feat: resolve PR review issues

* feat: finish initial send and qr scan screens

* feat: finalize initial send screen

* wip: new send flow

* feat: handle clear field on click edit recipient icon

* feat: finish review send screen

* feat: finish send screen flow redesign

* chore: formatting

* fix: bad QR pay handling

* fix: review issues

* fix: review issues

* fix: review issues

* fix: review issues

* fix: review issues

* fix: send confirm

* Improve scaffold base (#460)

* feat: add new font families

* feat: remove accentPink, add accentOrange, update checksum color

* feat: update background color

- remove gradient background
- create base background widget, this will be the main background widget where we update background implementation so we don't have to ever touch other file and all change can be centralized here. Kinda painful everytime need to change background have to go through different files.
- Removed backgroundAlt theme color

* feat: updated icon button

- Removed unused glass circle icon button
- Update and rename glass icon button to quantus icon button, we don't want to always create new widget for every style change. Hence generic naming is needed.
- Added new button border color

* feat: update standard button

- Rename button component to quantus button
- Update button styling
- Add success variant

* feat: update send and receive

* feat: finish updating activity section

- Updated styling for tx item
- Update color text

* chore: formatting

* chore: ignore linter for secondary font family yet used

* feat: revert number format to trailing

* feat: finish new receive screen

* feat: standardized circular loader

It's crazy how we keep adding loader on the fly

Some are still left as is because of specific usage requirements but I changed mostly to use single reusable loader

* feat: finish updating toaster and copy button

* feat: improve balance loading

* fix: migration dialog button

* feat: address reviews

* feat: add geist font license

* WIP: currency system

* feat: finish updating currency display

* chore: formatting

* feat: resolve review issues

- remove fragile postFrame
- Add color tokens to theme
- remove duplicate map index implementation

* feat: update styling receive screen, add filter buttons

* feat: finish integrating filtered history

* feat: better loading UX

* feat: optimize graphql query performance

* chore: revert print timing

* feat: make tx details respect currency flip and hidden state

* feat: extract text style to theme

* chore: formatting

* fix: not properly display quan symbol in tx item

* feat: resolved PR review issues

- remove unused glass button assets
- fix DRY violation
- fix precision loss in convert fiat
- remove silent fallback

* feat: remove asset declaration

* feat: resolve PR review issues

* feat: resolve PR review issues

* feat: finish initial send and qr scan screens

* feat: finalize initial send screen

* wip: new send flow

* feat: handle clear field on click edit recipient icon

* feat: finish review send screen

* feat: finish send screen flow redesign

* chore: formatting

* fix: bad QR pay handling

* fix: review issues

* fix: review issues

* fix: review issues

* fix: review issues

* feat: update scaffold base to support bottom content, also update receive screen

* feat: finish refactor send flow screens

* fix: review issues

* Beast/settings screen (#463)

* feat: add new font families

* feat: remove accentPink, add accentOrange, update checksum color

* feat: update background color

- remove gradient background
- create base background widget, this will be the main background widget where we update background implementation so we don't have to ever touch other file and all change can be centralized here. Kinda painful everytime need to change background have to go through different files.
- Removed backgroundAlt theme color

* feat: updated icon button

- Removed unused glass circle icon button
- Update and rename glass icon button to quantus icon button, we don't want to always create new widget for every style change. Hence generic naming is needed.
- Added new button border color

* feat: update standard button

- Rename button component to quantus button
- Update button styling
- Add success variant

* feat: update send and receive

* feat: finish updating activity section

- Updated styling for tx item
- Update color text

* chore: formatting

* chore: ignore linter for secondary font family yet used

* feat: revert number format to trailing

* feat: finish new receive screen

* feat: standardized circular loader

It's crazy how we keep adding loader on the fly

Some are still left as is because of specific usage requirements but I changed mostly to use single reusable loader

* feat: finish updating toaster and copy button

* feat: improve balance loading

* fix: migration dialog button

* feat: address reviews

* feat: add geist font license

* WIP: currency system

* feat: finish updating currency display

* chore: formatting

* feat: resolve review issues

- remove fragile postFrame
- Add color tokens to theme
- remove duplicate map index implementation

* feat: update styling receive screen, add filter buttons

* feat: finish integrating filtered history

* feat: better loading UX

* feat: optimize graphql query performance

* chore: revert print timing

* feat: make tx details respect currency flip and hidden state

* feat: extract text style to theme

* chore: formatting

* fix: not properly display quan symbol in tx item

* feat: resolved PR review issues

- remove unused glass button assets
- fix DRY violation
- fix precision loss in convert fiat
- remove silent fallback

* feat: remove asset declaration

* feat: resolve PR review issues

* feat: resolve PR review issues

* feat: finish initial send and qr scan screens

* feat: finalize initial send screen

* wip: new send flow

* feat: handle clear field on click edit recipient icon

* feat: finish review send screen

* feat: finish send screen flow redesign

* chore: formatting

* fix: bad QR pay handling

* fix: review issues

* fix: review issues

* fix: review issues

* fix: review issues

* feat: update scaffold base to support bottom content, also update receive screen

* feat: finish refactor send flow screens

* feat: finish updating button icon styling

* feat: proper icon button API design

* feat: finish updating main button styling

* feat: finish select accounts button

* feat: finish account edit flow

* wip: account add flow

- finish import account flow
- wip create new account flow

* feat: finish account create flow

* feat: add recovery phrase menu in account details

* feat: glass back button

* wip: setting screens style update

* feat: finish about screen

* feat: finish help and support screen

* feat: finish account type screen

* feat: finish preference settings

- fix pos button bug
- finish currency picker

* feat: finish wallet preference menu

- Done all flow
- Need to refactor DRY violation

* feat: handle DRY violation

* fix: fixing review issues

* fix: review issues

* fix: review issues

* fix: review issues

* fix: review issues

* Beast/redesign account management (#461)

* wormhole: bring over miner UI from #407 (no SDK/rust)

Ports all miner-app changes from PR #407 (illuzen/wormhole) onto a
fresh branch off main, including the wormhole rewards setup flow,
balance card, withdrawal screen, new wallet/state/transfer-tracking
services, macOS icons/entitlements, and pubspec updates.

Deliberately excludes every quantus_sdk change (Dart + Rust + cargokit),
the CI workflow carve-outs for cargokit, and the unrelated
mobile-app/pubspec.lock bump. The SDK will be rebuilt from scratch to
support a new UX for entering the wormhole inner hash, so miner-app
will not compile on this branch until that work lands.

* AI cleanup

* Fix migration bug (#459)

* fix migration bug

add migration debug code

* lint

* remove migration test button

* update comment

* remove stats polling - no longer used

* format

* melos format again

* feat: finish updating button icon styling

* Build 100, Version 1.3.5

- Podfile fix for firebase, setting iOS version to 15
- upload file fix - force apple version of rsync

* feat: proper icon button API design

* feat: finish updating main button styling

* feat: finish select accounts button

* ndk upgrade as per gradle

* change gitignore to track android required resources

* feat: finish account edit flow

* wip: account add flow

- finish import account flow
- wip create new account flow

* feat: finish account create flow

* feat: add recovery phrase menu in account details

* feat: glass back button

* Miner release (#462)

* clean up code, remove features we don't need yet

* remove unused code

* info popup on mining

* UX fixes

* format

* N13/pos v2 check pending (#420)

* added pos mode v1

* add pos service

* format

* fix yellow underline

* Payment mode says 'Pay'

* format

* add watch

* add changes back in

* new charge fix, printouts, wait button added

* copy button for debug

* update rust crates to new chain version (planck)

* minor fix for dev accounts

* check pending first version

* format

* fix linter errors

* removing duplicate code

add pending transaction polling service, using it in transaction submission and also on pos screen

* format

* clear mining rewards on logout

rename mining rewards testnet rewards

* search for pending by extrinsic hash

* xcode stuff

* xcode stuff

* fix miner build

* miner app 0.4.0

* fix miner MacOS build workflow

* explicit team id so CI can build app

* Update Release.entitlements

* use defaults for flutter secure storage

* format

* restore entitlements - fix miner CI build

* Redesign send screen (#458)

* feat: add new font families

* feat: remove accentPink, add accentOrange, update checksum color

* feat: update background color

- remove gradient background
- create base background widget, this will be the main background widget where we update background implementation so we don't have to ever touch other file and all change can be centralized here. Kinda painful everytime need to change background have to go through different files.
- Removed backgroundAlt theme color

* feat: updated icon button

- Removed unused glass circle icon button
- Update and rename glass icon button to quantus icon button, we don't want to always create new widget for every style change. Hence generic naming is needed.
- Added new button border color

* feat: update standard button

- Rename button component to quantus button
- Update button styling
- Add success variant

* feat: update send and receive

* feat: finish updating activity section

- Updated styling for tx item
- Update color text

* chore: formatting

* chore: ignore linter for secondary font family yet used

* feat: revert number format to trailing

* feat: finish new receive screen

* feat: standardized circular loader

It's crazy how we keep adding loader on the fly

Some are still left as is because of specific usage requirements but I changed mostly to use single reusable loader

* feat: finish updating toaster and copy button

* feat: improve balance loading

* fix: migration dialog button

* feat: address reviews

* feat: add geist font license

* WIP: currency system

* feat: finish updating currency display

* chore: formatting

* feat: resolve review issues

- remove fragile postFrame
- Add color tokens to theme
- remove duplicate map index implementation

* feat: update styling receive screen, add filter buttons

* feat: finish integrating filtered history

* feat: better loading UX

* feat: optimize graphql query performance

* chore: revert print timing

* feat: make tx details respect currency flip and hidden state

* feat: extract text style to theme

* chore: formatting

* fix: not properly display quan symbol in tx item

* feat: resolved PR review issues

- remove unused glass button assets
- fix DRY violation
- fix precision loss in convert fiat
- remove silent fallback

* feat: remove asset declaration

* feat: resolve PR review issues

* feat: resolve PR review issues

* feat: finish initial send and qr scan screens

* feat: finalize initial send screen

* wip: new send flow

* feat: handle clear field on click edit recipient icon

* feat: finish review send screen

* feat: finish send screen flow redesign

* chore: formatting

* fix: bad QR pay handling

* fix: review issues

* fix: review issues

* fix: review issues

* fix: review issues

* fix: review issues

* fix: send confirm

* Improve scaffold base (#460)

* feat: add new font families

* feat: remove accentPink, add accentOrange, update checksum color

* feat: update background color

- remove gradient background
- create base background widget, this will be the main background widget where we update background implementation so we don't have to ever touch other file and all change can be centralized here. Kinda painful everytime need to change background have to go through different files.
- Removed backgroundAlt theme color

* feat: updated icon button

- Removed unused glass circle icon button
- Update and rename glass icon button to quantus icon button, we don't want to always create new widget for every style change. Hence generic naming is needed.
- Added new button border color

* feat: update standard button

- Rename button component to quantus button
- Update button styling
- Add success variant

* feat: update send and receive

* feat: finish updating activity section

- Updated styling for tx item
- Update color text

* chore: formatting

* chore: ignore linter for secondary font family yet used

* feat: revert number format to trailing

* feat: finish new receive screen

* feat: standardized circular loader

It's crazy how we keep adding loader on the fly

Some are still left as is because of specific usage requirements but I changed mostly to use single reusable loader

* feat: finish updating toaster and copy button

* feat: improve balance loading

* fix: migration dialog button

* feat: address reviews

* feat: add geist font license

* WIP: currency system

* feat: finish updating currency display

* chore: formatting

* feat: resolve review issues

- remove fragile postFrame
- Add color tokens to theme
- remove duplicate map index implementation

* feat: update styling receive screen, add filter buttons

* feat: finish integrating filtered history

* feat: better loading UX

* feat: optimize graphql query performance

* chore: revert print timing

* feat: make tx details respect currency flip and hidden state

* feat: extract text style to theme

* chore: formatting

* fix: not properly display quan symbol in tx item

* feat: resolved PR review issues

- remove unused glass button assets
- fix DRY violation
- fix precision loss in convert fiat
- remove silent fallback

* feat: remove asset declaration

* feat: resolve PR review issues

* feat: resolve PR review issues

* feat: finish initial send and qr scan screens

* feat: finalize initial send screen

* wip: new send flow

* feat: handle clear field on click edit recipient icon

* feat: finish review send screen

* feat: finish send screen flow redesign

* chore: formatting

* fix: bad QR pay handling

* fix: review issues

* fix: review issues

* fix: review issues

* fix: review issues

* feat: update scaffold base to support bottom content, also update receive screen

* feat: finish refactor send flow screens

* fix: review issues

* fix: DRY violation

---------

Co-authored-by: Nikolaus Heger <nheger@gmail.com>

* fix: DRY violation, wrong border color

---------

Co-authored-by: Nikolaus Heger <nheger@gmail.com>

* Beast/redesign home screen again (#464)

* feat: add new font families

* feat: remove accentPink, add accentOrange, update checksum color

* feat: update background color

- remove gradient background
- create base background widget, this will be the main background widget where we update background implementation so we don't have to ever touch other file and all change can be centralized here. Kinda painful everytime need to change background have to go through different files.
- Removed backgroundAlt theme color

* feat: updated icon button

- Removed unused glass circle icon button
- Update and rename glass icon button to quantus icon button, we don't want to always create new widget for every style change. Hence generic naming is needed.
- Added new button border color

* feat: update standard button

- Rename button component to quantus button
- Update button styling
- Add success variant

* feat: update send and receive

* feat: finish updating activity section

- Updated styling for tx item
- Update color text

* chore: formatting

* chore: ignore linter for secondary font family yet used

* feat: revert number format to trailing

* feat: finish new receive screen

* feat: standardized circular loader

It's crazy how we keep adding loader on the fly

Some are still left as is because of specific usage requirements but I changed mostly to use single reusable loader

* feat: finish updating toaster and copy button

* feat: improve balance loading

* fix: migration dialog button

* feat: address reviews

* feat: add geist font license

* WIP: currency system

* feat: finish updating currency display

* chore: formatting

* feat: resolve review issues

- remove fragile postFrame
- Add color tokens to theme
- remove duplicate map index implementation

* feat: update styling receive screen, add filter buttons

* feat: finish integrating filtered history

* feat: better loading UX

* feat: optimize graphql query performance

* chore: revert print timing

* feat: make tx details respect currency flip and hidden state

* feat: extract text style to theme

* chore: formatting

* fix: not properly display quan symbol in tx item

* feat: resolved PR review issues

- remove unused glass button assets
- fix DRY violation
- fix precision loss in convert fiat
- remove silent fallback

* feat: remove asset declaration

* feat: resolve PR review issues

* feat: resolve PR review issues

* feat: finish initial send and qr scan screens

* feat: finalize initial send screen

* wip: new send flow

* feat: handle clear field on click edit recipient icon

* feat: finish review send screen

* feat: finish send screen flow redesign

* chore: formatting

* fix: bad QR pay handling

* fix: review issues

* fix: review issues

* fix: review issues

* fix: review issues

* feat: update scaffold base to support bottom content, also update receive screen

* feat: finish refactor send flow screens

* feat: finish updating button icon styling

* feat: proper icon button API design

* feat: finish updating main button styling

* feat: finish select accounts button

* feat: finish account edit flow

* wip: account add flow

- finish import account flow
- wip create new account flow

* feat: finish account create flow

* feat: add recovery phrase menu in account details

* feat: glass back button

* wip: setting screens style update

* feat: finish about screen

* feat: finish help and support screen

* feat: finish account type screen

* feat: finish preference settings

- fix pos button bug
- finish currency picker

* feat: finish wallet preference menu

- Done all flow
- Need to refactor DRY violation

* feat: handle DRY violation

* fix: fixing review issues

* fix: review issues

* fix: review issues

* fix: review issues

* feat: finish updating homepage balance view

* feat: finish activity tx item update

* fix: review issues

* Redesign onboarding (#465)

* feat: add new font families

* feat: remove accentPink, add accentOrange, update checksum color

* feat: update background color

- remove gradient background
- create base background widget, this will be the main background widget where we update background implementation so we don't have to ever touch other file and all change can be centralized here. Kinda painful everytime need to change background have to go through different files.
- Removed backgroundAlt theme color

* feat: updated icon button

- Removed unused glass circle icon button
- Update and rename glass icon button to quantus icon button, we don't want to always create new widget for every style change. Hence generic naming is needed.
- Added new button border color

* feat: update standard button

- Rename button component to quantus button
- Update button styling
- Add success variant

* feat: update send and receive

* feat: finish updating activity section

- Updated styling for tx item
- Update color text

* chore: formatting

* chore: ignore linter for secondary font family yet used

* feat: revert number format to trailing

* feat: finish new receive screen

* feat: standardized circular loader

It's crazy how we keep adding loader on the fly

Some are still left as is because of specific usage requirements but I changed mostly to use single reusable loader

* feat: finish updating toaster and copy button

* feat: improve balance loading

* fix: migration dialog button

* feat: address reviews

* feat: add geist font license

* WIP: currency system

* feat: finish updating currency display

* chore: formatting

* feat: resolve review issues

- remove fragile postFrame
- Add color tokens to theme
- remove duplicate map index implementation

* feat: update styling receive screen, add filter buttons

* feat: finish integrating filtered history

* feat: better loading UX

* feat: optimize graphql query performance

* chore: revert print timing

* feat: make tx details respect currency flip and hidden state

* feat: extract text style to theme

* chore: formatting

* fix: not properly display quan symbol in tx item

* feat: resolved PR review issues

- remove unused glass button assets
- fix DRY violation
- fix precision loss in convert fiat
- remove silent fallback

* feat: remove asset declaration

* feat: resolve PR review issues

* feat: resolve PR review issues

* feat: finish initial send and qr scan screens

* feat: finalize initial send screen

* wip: new send flow

* feat: handle clear field on click edit recipient icon

* feat: finish review send screen

* feat: finish send screen flow redesign

* chore: formatting

* fix: bad QR pay handling

* fix: review issues

* fix: review issues

* fix: review issues

* fix: review issues

* feat: update scaffold base to support bottom content, also update receive screen

* feat: finish refactor send flow screens

* feat: finish updating button icon styling

* feat: proper icon button API design

* feat: finish updating main button styling

* feat: finish select accounts button

* feat: finish account edit flow

* wip: account add flow

- finish import account flow
- wip create new account flow

* feat: finish account create flow

* feat: add recovery phrase menu in account details

* feat: glass back button

* wip: setting screens style update

* feat: finish about screen

* feat: finish help and support screen

* feat: finish account type screen

* feat: finish preference settings

- fix pos button bug
- finish currency picker

* feat: finish wallet preference menu

- Done all flow
- Need to refactor DRY violation

* feat: handle DRY violation

* fix: fixing review issues

* fix: review issues

* fix: review issues

* fix: review issues

* feat: finish updating homepage balance view

* feat: finish activity tx item update

* feat: update splash

* feat: update onboarding welcome

* feat: finish oboarding redesign

* fix: review issues

* fix: build

* fix: not passing colors

* feat: remove fixed timer loading, refactor create wallet logic, add proper image for receive qr

* feat: make reusable component for recovery phrase

* fix: PR review issues

* Improve currency implementation (#470)

* feat: add new font families

* feat: remove accentPink, add accentOrange, update checksum color

* feat: update background color

- remove gradient background
- create base background widget, this will be the main background widget where we update background implementation so we don't have to ever touch other file and all change can be centralized here. Kinda painful everytime need to change background have to go through different files.
- Removed backgroundAlt theme color

* feat: updated icon button

- Removed unused glass circle icon button
- Update and rename glass icon button to quantus icon button, we don't want to always create new widget for every style change. Hence generic naming is needed.
- Added new button border color

* feat: update standard button

- Rename button component to quantus button
- Update button styling
- Add success variant

* feat: update send and receive

* feat: finish updating activity section

- Updated styling for tx item
- Update color text

* chore: formatting

* chore: ignore linter for secondary font family yet used

* feat: revert number format to trailing

* feat: finish new receive screen

* feat: standardized circular loader

It's crazy how we keep adding loader on the fly

Some are still left as is because of specific usage requirements but I changed mostly to use single reusable loader

* feat: finish updating toaster and copy button

* feat: improve balance loading

* fix: migration dialog button

* feat: address reviews

* feat: add geist font license

* WIP: currency system

* feat: finish updating currency display

* chore: formatting

* feat: resolve review issues

- remove fragile postFrame
- Add color tokens to theme
- remove duplicate map index implementation

* feat: update styling receive screen, add filter buttons

* feat: finish integrating filtered history

* feat: better loading UX

* feat: optimize graphql query performance

* chore: revert print timing

* feat: make tx details respect currency flip and hidden state

* feat: extract text style to theme

* chore: formatting

* fix: not properly display quan symbol in tx item

* feat: resolved PR review issues

- remove unused glass button assets
- fix DRY violation
- fix precision loss in convert fiat
- remove silent fallback

* feat: remove asset declaration

* feat: resolve PR review issues

* feat: resolve PR review issues

* feat: finish initial send and qr scan screens

* feat: finalize initial send screen

* wip: new send flow

* feat: handle clear field on click edit recipient icon

* feat: finish review send screen

* feat: finish send screen flow redesign

* chore: formatting

* fix: bad QR pay handling

* fix: review issues

* fix: review issues

* fix: review issues

* fix: review issues

* feat: update scaffold base to support bottom content, also update receive screen

* feat: finish refactor send flow screens

* feat: finish updating button icon styling

* feat: proper icon button API design

* feat: finish updating main button styling

* feat: finish select accounts button

* feat: finish account edit flow

* wip: account add flow

- finish import account flow
- wip create new account flow

* feat: finish account create flow

* feat: add recovery phrase menu in account details

* feat: glass back button

* wip: setting screens style update

* feat: finish about screen

* feat: finish help and support screen

* feat: finish account type screen

* feat: finish preference settings

- fix pos button bug
- finish currency picker

* feat: finish wallet preference menu

- Done all flow
- Need to refactor DRY violation

* feat: handle DRY violation

* fix: fixing review issues

* fix: review issues

* fix: review issues

* fix: review issues

* feat: finish updating homepage balance view

* feat: finish activity tx item update

* feat: update splash

* feat: update onboarding welcome

* feat: finish oboarding redesign

* fix: review issues

* fix: build

* fix: not passing colors

* feat: remove fixed timer loading, refactor create wallet logic, add proper image for receive qr

* feat: adding currency conversion in send flow

* feat: implement real currency conversion

* chore: formatting

* fix: formatting amount

* feat: make reusable component for recovery phrase

* fix: PR review issues

* fix: PR review issues

- App will hard‑error on first launch when there's no cached rates yet
- data.cast<String, double>() will TypeError when the API returns a whole number
- Silent catch (_) swallows parse failures (violates the project "fail early" rule)
- getRate throws but the docstring promises a fallback
- _setMax() non‑flipped path is asymmetric with the flipped path
- Hidden balance + flipped mode appends QUAN to the masked text
- Other small fixes

* feat: properly handle localization of number decimal

* chore: formatting

* fix: exchange rates consumption and cache handling, also fixed chain history service merge conflict

* feat: properly throw on broken convert fiat to quan

* fix round 4 issues

* more cases

---------

Co-authored-by: Nikolaus Heger <nheger@gmail.com>

* fix: PR review issues

* chore: formatting

* fix: remove silent fallback in _toggleFlip QUAN->Fiat round-trip

The catch (_) silently swallowed parse failures, violating the project's
"fail early / no fallback code" rule. Round-trip is now stable after the
exchange-rate fiat rounding fix, so any genuine failure should surface.

* fix: failing tests

* chore: formatting

---------

Co-authored-by: Nikolaus Heger <nheger@gmail.com>
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.

2 participants