tyiuandClaude Sonnet 5 8057651688 Generate webHtmlApp's strings, collapse a redundant string key
Strings.kt is now generated at build time (:webHtmlApp:generateStrings,
in webHtmlApp/build.gradle.kts) by parsing shared's strings.xml
directly, rather than a hand-maintained duplicate that could silently
drift from it. Names are mechanical camelCase of the XML key, so a few
call sites got more verbose (e.g. moveUp -> moveCurrencyUpContentDescription)
in exchange for zero manual sync. Only covers the base English locale.

Also collapses currency_option_label_local into currency_option_label:
the two had identical English text and existed only as a hook for a
future translation to phrase the user's own currency differently, which
no locale currently does. Removes the info.code == localeCurrencyCode
branching (and the now-pointless localeCurrencyCode parameter/field) from
all three UI implementations - PriceScreen.kt, CurrencyPickerSheet.swift,
and HtmlCurrencyPicker.kt - plus IosConverterState.localeCurrencyCode,
which existed solely to feed that branch on the Swift side.

Fixes a real regression surfaced while verifying the above by actually
building the Xcode project (not done since currencyFlagEmoji() gained
its supportsFlagEmoji parameter): Kotlin/Native doesn't generate
default-parameter overloads for Swift/ObjC-exported functions, so both
Swift call sites needed the argument passed explicitly, via the correct
exported facade name for an expect/actual pair - the actual file's
(SystemCurrencies_appleKt), not the common one (SystemCurrenciesKt).

Also drops "(DOM)" from webHtmlApp's page title.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-17 07:33:47 +03:00
2024-02-21 10:14:20 -05: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.

satsprice.app Website

GitHub downloads

Last Version License: GPL-3.0

Download and Install

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

Supported Platforms

iOS 16.0+ • macOS 13.0+ • Android 7.0+ • Web (any modern browser)

Screenshots

Android

iPhone

iPad

macOS

Kotlin Multiplatform

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

  • /shared contains almost the entire app — UI (built with Compose Multiplatform), view models, data sources, and domain logic. commonMain holds code shared by every target, alongside platform-specific source sets: androidMain, jvmMain (Desktop), appleMain (iOS and macOS), and webMain (JS and Wasm).

  • /androidApp, /desktopApp, and /webApp are thin launcher shells around shared's Compose UI.

  • /iosApp is a native SwiftUI app (shared across iOS and macOS), not Compose — it talks to shared through a hand-written bridge rather than rendering Compose directly.

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 (Compose Multiplatform UI, Skia-rendered - what's deployed to production):
    • Wasm target (faster, modern browsers): ./gradlew :webApp:wasmJsBrowserDevelopmentRun
    • JS target (slower, supports older browsers): ./gradlew :webApp:jsBrowserDevelopmentRun
  • Web app, DOM alternative (Compose HTML UI, renders real DOM instead of Skia/canvas - not what's deployed to production): ./gradlew :webHtmlApp:jsBrowserDevelopmentRun
  • iOS app: open the /iosApp directory in Xcode and run it from there.
  • Website with the web app built and served at /app/ (the webHtmlApp DOM build, not the one production actually deploys): ./website/serve-local.sh (serves at http://localhost:8000 by default; pass a port number to override)

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 uses Kotlin Multiplatform, Compose Multiplatform, and Kotlin/Wasm, along with the following libraries:

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
16 MiB
v1.2.0
Latest
2025-03-31 03:05:34 +00:00
Languages
Kotlin 68.7%
Swift 11.7%
HTML 9.2%
CSS 9%
JavaScript 0.7%
Other 0.7%