Skip to content

Plan prices hardcoded to USD; billing API has no currency field #4

Description

@User-green

Summary

In-app plan prices are always rendered with a hardcoded $ (USD), and the billing API provides no currency information, so the app cannot display a user's actual billing currency. For any user billed in a non-USD currency, the in-app price would show USD while the Stripe billing portal shows the real local currency - a mismatch.

Evidence

  • app/src/main/kotlin/org/astermail/android/ui/auth/register_plan_step.kt:400
    "$%.2f".format(amount) + " / " + (plan.billing_period ?: billing_interval)
    The currency symbol is hardcoded.
  • core-api/src/main/kotlin/org/astermail/android/api/billing/BillingApi.kt - the AvailablePlan model has price_cents but no currency field, so the client has nothing to localize with.
  • The in-app billing screen (app/src/main/kotlin/org/astermail/android/ui/settings/detail/billing_screen.kt) only opens the Stripe portal in a browser, which localizes correctly; the discrepancy is purely on the in-app price text.

Status / latency

This is currently latent: where Aster bills in USD (confirmed for a Ukraine-based account, where the Stripe portal also showed USD), the hardcoded USD display happens to match the real charge currency, so there is no visible discrepancy. It becomes a visible bug as soon as any user is billed in a non-USD currency.

Fix direction

Backend-gated: the billing API needs to return a currency (and ideally a preformatted localized price) per plan; the client then formats accordingly instead of hardcoding $.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions