tyiuandClaude Sonnet 5 5587428ca7 Add locale-aware digit grouping to displayed amounts
Adds groupDigits(), a display-only formatter that inserts the current
locale's digit-grouping separators into an amount's integer part (e.g.
"1,000,000.5" in en-US vs "1.000.000,5" in de-DE, where the roles of ","
and "." are swapped, or hi-IN's irregular "12,34,567"). Delegates to each
platform's native locale APIs (java.text.NumberFormat/DecimalFormatSymbols,
NSNumberFormatter/NSLocale, Intl.NumberFormat with BigInt for arbitrary
precision) rather than reimplementing grouping rules, and never touches the
canonical '.'-decimal strings the rest of the app parses and stores.

Applied via a Compose VisualTransformation (BTC/Sats/fiat/manual-rate
fields, plus the read-only rate display) and, on the native SwiftUI screen,
by re-deriving the field's displayed text on every change. Also made input
parsing locale-aware: sanitizeDecimalInput now recognizes the locale's own
decimal separator (e.g. what a locale-aware decimal keypad sends), not just
"." — with a stricter rule on the SwiftUI side specifically, since its
single text buffer re-feeds the grouped display back through sanitize, so
a "." can be grouping noise there rather than a decimal point.

The exceeds-max-supply warning's "21,000,000 BTC" is no longer baked into
the localized string with hardcoded grouping; it's substituted in at
runtime via groupDigits so the link-detection text always matches exactly,
in every locale.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QpjMKWGoiT5aJBzhxvXkwp
2026-09-09 07:37:46 +03:00
2025-03-30 23:02:38 -04:00
2024-02-21 10:14:20 -05:00
2025-03-31 00:53:43 -04:00

SatsPrice Logo

SatsPrice

This app fetches the price of Bitcoin relative to common fiat currencies from multiple sources, and converts inputted amounts between Sats, BTC, and the selected fiat currency.

GitHub downloads

Last Version License: GPL-3.0

Download and Install

Download on the Apple App Store Get it on Zap Store Get it on Obtaininum Get it on GitHub

Supported Platforms

iOS 16.0+ • macOS 13.0+ • Android 10.0+

Kotlin Multiplatform

This is a Kotlin Multiplatform project targeting Android, iOS, Web, Desktop (JVM).

  • /iosApp contains an iOS application. Even if youre sharing your UI with Compose Multiplatform, you need this entry point for your iOS app. This is also where you should add SwiftUI code for your project.

  • /shared is for code that will be shared across your Compose Multiplatform applications. It contains several subfolders:

    • commonMain is for code thats common for all targets.
    • Other folders are for Kotlin code that will be compiled for only the platform indicated in the folder name. For example, if you want to use Apples CoreCrypto for the iOS part of your Kotlin app, the iosMain folder would be the right place for such calls. Similarly, if you want to edit the Desktop (JVM) specific part, the jvmMain folder is the appropriate location.

Running the apps

Use the run configurations provided by the run widget in your IDE's toolbar. You can also use these commands and options:

  • Android app: ./gradlew :androidApp:assembleDebug
  • Desktop app:
    • Hot reload: ./gradlew :desktopApp:hotRun --auto
    • Standard run: ./gradlew :desktopApp:run
  • Web app:
    • Wasm target (faster, modern browsers): ./gradlew :webApp:wasmJsBrowserDevelopmentRun
    • JS target (slower, supports older browsers): ./gradlew :webApp:jsBrowserDevelopmentRun
  • iOS app: open the /iosApp directory in Xcode and run it from there.

Running tests

Use the run button in your IDE's editor gutter, or run tests using Gradle tasks:

  • Android tests: ./gradlew :shared:testAndroidHostTest
  • Desktop tests: ./gradlew :shared:jvmTest
  • Web tests:
    • Wasm target: ./gradlew :shared:wasmJsTest
    • JS target: ./gradlew :shared:jsTest
  • iOS tests: ./gradlew :shared:iosSimulatorArm64Test

Attribution

This project depends on Skip to build as a multi-platform app.

This project uses Kotlin Multiplatform, Compose Multiplatform, and Kotlin/Wasm.

The Bitcoin Calculator icon was created by Icon home and licensed as free for personal and commercial use with attribution.

The following free APIs are used:

S
Description
SatsPrice fetches the price of Bitcoin relative to common fiat currencies from multiple sources, and converts inputted amounts between Sats, BTC, and the selected fiat currency.
Readme
2.4 MiB
v1.2.0
Latest
2025-03-31 03:05:34 +00:00
Languages
Kotlin 83%
Swift 15.8%
C 0.6%
HTML 0.5%