From 78ad447e621afb4fb52f28001ca9c59d6869d391 Mon Sep 17 00:00:00 2001 From: shum Date: Mon, 24 Aug 2026 14:52:16 +0000 Subject: [PATCH] plan: badges flow diagram for app and web --- badges-flow-mvp.svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 badges-flow-mvp.svg diff --git a/badges-flow-mvp.svg b/badges-flow-mvp.svg new file mode 100644 index 0000000000..1738cff87a --- /dev/null +++ b/badges-flow-mvp.svg @@ -0,0 +1 @@ +Supporter badges - buying a badge in the app and on the webinteraction design - one canvas, mobile band above, web checkout belowplans/2026-08-21-badges-web-checkout.mdeditable SVGIn the appevery platform - the pay button is where they differSupport SimpleXSimpleX is built by people who believe privatemessaging should not depend on advertising.A badge helps pay for it.Why SimpleX is built this way★SUPPORTERChoose your levelRedeem badge code1. Where it startsBoth actions already exist in the shipped view.'Redeem badge code' is the only route to a badge oniOS and the Play build until store evidence is verified,so it is not a secondary action there - it is the path.‹SupportYour levelTwo levels. Both remove the file size limit;Legend raises it further.Supporter$7 / month2 GB filesLegend$70 / month5 GB filesPerks are app constants, not catalog data - thecatalog carries prices only.Continue2. Choose your levelPrices come from CRBadgeCatalog, never from the storeproducts - one source, so the app and the site cannotdisagree. A tier with no active price renders disabledrather than hidden.‹Your levelLegendPrepaid months. Nothing renews by itself.1 month$703 months$140save 33%12 months$420save 50%3 months is 2x the monthly price, 12 months is 6x.The saving shown is against the undiscounted totaland is never sent anywhere - the server computesevery amount it charges.Continue in browserRedeem badge code3. How longThe button is the only platform difference in this wholeband. Desktop and Android foss get 'Continue in browser'.iOS and Play get 'Redeem badge code' and never link out,because both stores reject steering to outside purchase.‹LegendHow to payCheckout happens in your browser. Nothing ischarged in the app.CardStripeBitcoinBTCPayMoneroBTCPayContinue in browserOpens badges.simplex.chat with your choicesalready filled in.4. Only where there is a choiceDesktop and Android foss only. The screen exists becausethose builds have three methods; the store builds havenone and never reach it. The choice is a hint - the siteasks again if the parameter is unusable.‹SupportRedeem codePaste the code from your receipt.SXB-9K2M4-7QRT1-XZ5WB-3NHD8PasteRedeemThis code has already been usedcode_usedFormats as you type and folds I/L to 1 and O to 0,matching the service's own normalisation - so a coderead off a screen cannot fail on ambiguity alone.5. RedeemingOne inline message per error the service can return:invalid, used, expired, rate limited. Anything else showsthe service's own text rather than a blank screen. Thesame code can be retried - redemption is idempotent.‹SettingsSupporter perks★Legendshown on your profileENDS24 August 2027Prepaid months have no billing date. The badge isreissued each month from the balance you alreadypaid for, and simply ends when it runs out.Add more months6. After redeeming'Ends', never 'renews' - nothing recurs, and the copymust not imply it does. The date is the paid-throughdate computed from the ledger balance, not thecredential's expiry, which is a week-aligned internal.Continue in browseropens the site with tier, months and method already chosenOn the webbadges.simplex.chat - one question per screen, no framework🔒badges.simplex.chat/?tier=legend&months=12&pay=xmr★Choose your levelSupporter$7 / month2 GB filesLegend$70 / month5 GB filesContinueQuestions? simplex.chat/contact7. The site, prefilledArrives with ?tier=legend&months=12&pay=xmr from the app,so every answered question is skipped. An unknown orunpriced parameter is ignored and its screen asked -the app may be older than the catalog.🔒badges.simplex.chat/#/monthsHow long?1 month$703 months$140save 33%12 months$420save 50%Continue8. How longEvery figure here comes from GET /api/catalog, whichserves the same totals the RPC catalog gives the app.The browser formats minor units; it never multipliesa price by a month count.🔒badges.simplex.chat/#/payHow would you like to pay?CardVisa, MastercardBitcoinon-chainMoneroon-chainContinue9. MethodA method whose provider is not configured is refused atcheckout with provider_unavailable, not hidden here -so a misconfigured deployment fails loudly rather thanquietly offering less.🔒badges.simplex.chat/#/checkoutCheck your orderLevelLegendDuration12 monthsMethodMoneroTotal$420.00Pay with MoneroYou will be shown an address and a QR code. The badgecode appears here once the payment confirms.10. One request, server-pricedPOST /api/checkout sends priceId, offerId and method -never an amount, never a badge type. Both are derivedserver-side from the ids, so a tampered request cannotbuy a Legend badge at a Supporter price.🔒badges.simplex.chat/?order=8f3a...c21eSend 1.482 XMR$420.00 - rate held for 58:12MONERO ADDRESS48HqK2...9fRtWcCopy!Waiting for the payment to confirmLeave this page open, or bookmark it - the address andthe countdown are both on this URL. If the invoiceexpires before it confirms, you are offered a new one.REFERENCEK7M2Qquote this to support11. Paying in cryptoFive states behind one screen: invoiced, pending, paid,expired, failed. An expired invoice that was underpaidshows what arrived and the reference - the shortfall ismeaningless once the rate window has closed.🔒badges.simplex.chat/?order=8f3a...c21e✓Paid. Here is your code.SXB-9K2M4-7QRT1-XZ5WB-3NHD8Copy codescan to carry it to your phoneREDEEM IT IN THE APPSimpleX -> Settings -> Supporter perks -> Redeem codeThis is the only place the code is shown.This page keeps working until 23 September, and stopsas soon as the code is redeemed. The link is the code.12. The code, onceThe code is derived from the order id, not stored - so areload recomputes it while only its hash is ever at rest.Disclosure stops at redemption, at revocation, or 30 daysafter settlement, whichever comes first.the code goes back to screen 5the only thing that crosses from the site to the appDesign document. Screens are drawn in the app's iOS idiom and in the site's own simple layout; they are not screenshots. What is built today: the service schema, the pricing catalog, the ledger, code derivation and classification, credential signing, and the RPC dispatcher.What is design, not yet built: every screen above, the web listener and its endpoints, both payment providers, and the client redeem path. Store purchase is removed on iOS and Play for the duration of this plan - store evidence is not verified, so a store purchase would charge for a badge that is never issued. \ No newline at end of file