mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-09-28 02:38:44 +00:00
* badges: webapp (#7433) * badges: service migrations, store and catalog * badges: BTCPay provider and settlement poller * badges: web listener and /api endpoints * web: checkout single-page app * badges: tests and BTCPay fixtures * badges: README and ini reference * badges: fix hex16 build on GHC 8.10.7 * badges: Stripe card lane * badges: fix Stripe card checkout, add theming * badges: add a discount row to the order summary * badges: site navbar, embedding, theme, Forget move * badges: use SB code prefix in web checkout * badges: rename sxb app namespace to sb * badges: embed checkout nav via site; keep original app navbar * badges: post iframe height, apply site background when embedded * badges: embed dark surfaces, steadier iframe height * badges: hide app footer when embedded * badges: size embedded body to content, not viewport * badges: declare color-scheme to stop reload flash * badges: fade shell in on load, no reload blank * badges: prerender app shell into index.html * badges: pre-paint theme, hide shell on deep reload * badges: logo returns to landing client-side * badges: embedded wizard back, buy-a-code, resume * badges: signal app-managed screens, resume across reload * badges: rebuild wizard history on deep load so Back walks it * badges: carry welcome-page height as the iframe floor * badges: keep selection on Buy a code; rename to Your codes * badges: read web shell as UTF-8, not locale * badges: resume the exact paid order after Stripe card redirect * badges: move docker deploy under scripts * badges: add serve_webapp toggle and webapp export * badges: wire split webapp deploy in docker config * badges: quiet agent logs by default * badges: resume card redirect in the embedded frame * badges: migrate Stripe adapter to PaymentIntents * badges: correct Stripe restricted key scopes in ini example * badges: card via Payment Element and PaymentIntents * badges: fix stale Checkout Session wording in Stripe adapter * badges: fix stale CheckoutActions reference in card comment * badges: order shell stylesheet before bootstrap script * badges: remove development card stand-in * badges: theme the Stripe card form with the site palette * badges: exclude web from the Haskell build stage * badges: unify invoice cancel and mark canceled * badges: default log level to info * badges: unify closed-invoice buy-again button * badges: mute agent connection logs at info level * badges: show purchase time in local timezone in Your codes * badges: log service events on own channel, quiet agent * badges: fold service migrations into one baseline * badges: run compose on postgres over host network * badges: use high-res hero art * badges: add web CI to catch stale builds * badges: rebuild web shell from committed source * badges: normalize invoice-code link and columns * badges: drop unused columns, rename index * badges: note deferred receipt_hash in migrations * badges: apply code-review fixes * badges: reduce comments across service and web --------- Co-authored-by: Evgeny Poberezkin <evgeny@poberezkin.com> Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com> * badges: improve web page (#7546) * badges: improve web page * improve layout * improve layout * fix * small changes --------- Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com> * badges: read one issuer key from the ini * badges: move and group the service tests * badges: service fixes (#7567) * badges: match the redeem error wording in tests * badges: drop unused imports in the bot tests * badges: cancel Stripe orders when they expire * badges: correct the Stripe config and docs * badges: refuse to revoke a redeemed code * badges: make the fake Stripe cancel like Stripe * badges: limit replayed webhook deliveries --------- Co-authored-by: sh <37271604+shumvgolove@users.noreply.github.com> Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com> Co-authored-by: shum <github.shum@liber.li> Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com>
50 lines
7.3 KiB
HTML
50 lines
7.3 KiB
HTML
<!doctype html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<meta name="referrer" content="no-referrer">
|
||
<!-- Let the browser paint its dark canvas on a reload's blank frame, so a dark-theme buyer is not
|
||
flashed white before the stylesheet lands. The stylesheet declares `color-scheme` per theme; this
|
||
is the earliest hint, read before the stylesheet parses. -->
|
||
<meta name="color-scheme" content="light dark">
|
||
<!-- the `publishable_key`: public by design, and empty here. The deployment
|
||
substitutes its own when it serves this file; `mock/server.py` does it from
|
||
$STRIPE_PUBLISHABLE_KEY. Empty means no card form and a development
|
||
stand-in (`src/stripe.ts`). A real key is never committed. -->
|
||
<meta id="stripe-publishable-key" name="stripe-publishable-key" content="">
|
||
<!-- The two page grounds, so the browser paints the right one before the
|
||
stylesheet lands rather than flashing white into the dark theme. -->
|
||
<meta name="theme-color" content="#F3FAFF" media="(prefers-color-scheme: light)">
|
||
<meta name="theme-color" content="#000832" media="(prefers-color-scheme: dark)">
|
||
<title>Support SimpleX</title>
|
||
<!-- The official symbol, both variants, served from the build hash like every
|
||
other asset so the worker precaches it. -->
|
||
<link rel="icon" type="image/svg+xml" href="/assets/9539a668abb6a8c8/symbol-light.svg" media="(prefers-color-scheme: light)">
|
||
<link rel="icon" type="image/svg+xml" href="/assets/9539a668abb6a8c8/symbol-dark.svg" media="(prefers-color-scheme: dark)">
|
||
<!-- The stylesheet before the script, not after: a classic script waits for a preceding stylesheet
|
||
to load before it runs, which holds the parser here until the CSS is in. Firefox otherwise paints
|
||
the parsed body unstyled while the stylesheet is still in flight (Chrome does not); blocking the
|
||
parser at this point keeps that unstyled frame off the screen. -->
|
||
<link rel="stylesheet" href="/assets/9539a668abb6a8c8/styles.css">
|
||
<!-- The pre-paint bootstrap: sets the saved theme and marks a non-landing reload before the first
|
||
paint. Classic and blocking, served under the build hash (see `assets` in build.js) so it is
|
||
precached and cannot skew. Its wait on the stylesheet above still finishes before the first paint. -->
|
||
<script src="/assets/9539a668abb6a8c8/init.js"></script>
|
||
</head>
|
||
<body>
|
||
<!-- The app shell. `build.js` fills these two slots at build time with the serialized output of
|
||
chrome() and landing() from screens.ts (see `prerenderShell`), so the first paint is the real
|
||
first screen, not an empty page — no reload flashes blank — and the markup can never drift from
|
||
what `main.ts` builds and swaps in, because it IS that output. The markers stay; only the bytes
|
||
between them are rewritten. Embedded, the site owns the navbar, so `.embedded #chrome` hides
|
||
this copy just as the built one is not rendered there. -->
|
||
<div id="chrome"><!--shell:chrome--><header class="chrome-bar"><a class="brand" href="/" aria-label="SimpleX"></a><nav class="menu-wrap"><button class="menu-button" type="button" aria-label="Menu" aria-expanded="false" aria-controls="menu"><svg xmlns="http://www.w3.org/2000/svg" class="bars" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><line x1="3" y1="7" x2="21" y2="7" stroke="currentColor" stroke-width="2" stroke-linecap="round"></line><line x1="3" y1="12" x2="21" y2="12" stroke="currentColor" stroke-width="2" stroke-linecap="round"></line><line x1="3" y1="17" x2="21" y2="17" stroke="currentColor" stroke-width="2" stroke-linecap="round"></line></svg></button><div class="menu" id="menu" hidden="" role="dialog" aria-label="Menu"><div class="menu-section"><div class="menu-row"><span class="menu-label">Theme</span><div class="segmented" role="group" aria-label="Theme"><button class="segment" type="button" aria-pressed="false">Light</button><button class="segment" type="button" aria-pressed="false">Dark</button><button class="segment" type="button" aria-pressed="true">System</button></div></div></div><div class="menu-section"><button class="menu-item" type="button">Buy a code</button><button class="menu-item" type="button">Your codes</button></div></div></nav></header><!--/shell:chrome--></div>
|
||
<main id="app" aria-live="polite"><!--shell:app--><div class="track"><div class="rail"><section class="panel"><h1>Support SimpleX</h1><p class="lede"><span class="line">Get a badge to send larger files (2‑5GB)</span> <span class="line">that stay available longer (7‑21 days),</span> <span class="line">and to show it on your profile.</span></p><div class="hero" role="presentation"></div><div class="notes"><p class="muted"><span class="half">You pay once for the months you choose.</span> <span class="half">No subscription, no account.</span></p></div><button class="primary" type="button">Choose your badge</button><div class="invest"><p><span class="half">Invest $100+ in SimpleX Chat</span> <span class="half">and get a free supporter badge.</span></p><a class="invest-link" href="https://wefunder.com/simplex.chat?utm_source=badges" target="_blank" rel="noopener" aria-label="Learn more on Wefunder">Learn more on <svg xmlns="http://www.w3.org/2000/svg" class="wefunder" viewBox="0 0 165 45" aria-hidden="true" focusable="false"><path fill="currentColor" d="M44.0386 38.5332H56.7241V35.3848H47.5317V31.6849H55.5291V28.5365H47.5317V24.9515H56.6092V21.8031H44.0386V38.5332ZM60.242 38.5332H63.7581V31.9836H71.8474V28.7663H63.7581V25.0204H72.9045V21.8031H60.242V38.5332ZM83.049 38.786C87.5302 38.786 90.3569 36.3041 90.3569 31.2482V21.8031H86.8408V31.4091C86.8408 34.1438 85.416 35.5457 83.0949 35.5457C80.7738 35.5457 79.372 34.0749 79.372 31.2712V21.8031H75.8329V31.3861C75.8329 36.2811 78.5906 38.786 83.049 38.786ZM94.3543 38.5332H97.8245V27.6402L106.144 38.5332H109.154V21.8031H105.661V32.3513L97.5946 21.8031H94.3543V38.5332ZM113.43 38.5332H119.888C125.151 38.5332 128.782 34.8792 128.782 30.1681V30.1222C128.782 25.4111 125.151 21.8031 119.888 21.8031H113.43V38.5332ZM119.888 24.9974C122.99 24.9974 125.082 27.1346 125.082 30.1681V30.2141C125.082 33.2476 122.99 35.3388 119.888 35.3388H116.946V24.9974H119.888ZM132.304 38.5332H144.99V35.3848H135.797V31.6849H143.795V28.5365H135.797V24.9515H144.875V21.8031H132.304V38.5332ZM152.024 29.9613V24.9974H155.816C157.677 24.9974 158.826 25.8477 158.826 27.4564V27.5023C158.826 28.9731 157.723 29.9613 155.885 29.9613H152.024ZM148.508 38.5332H152.024V33.0867H155.08L158.78 38.5332H162.917L158.734 32.4892C160.894 31.7308 162.388 30.0302 162.388 27.3185V27.2725C162.388 25.7328 161.906 24.4229 160.986 23.5037C159.883 22.4006 158.229 21.8031 156.114 21.8031H148.508V38.5332Z"></path><path fill="none" stroke="currentColor" stroke-width="4.86264" d="M3 29.4853L6.36524 22.194C6.60628 21.6717 7.35366 21.6867 7.57359 22.2182L14.3487 38.5913C14.5779 39.1453 15.3677 39.1308 15.5764 38.5687L23.1127 18.279C23.315 17.7341 24.0721 17.6984 24.3249 18.2217L32.5064 35.1596C32.7713 35.7081 33.5744 35.6351 33.7362 35.048L43.1168 1"></path></svg></a></div></section></div></div><!--/shell:app--></main>
|
||
<!-- Named, so `main.ts` can take it out of the accessibility tree with the
|
||
screen while the menu is open. -->
|
||
<footer id="contact"><a href="https://simplex.chat/contact">simplex.chat/contact</a></footer>
|
||
<script type="module" src="/assets/9539a668abb6a8c8/main.js"></script>
|
||
</body>
|
||
</html>
|