silent.link ↗

PRE-UX RESEARCH · 21 SEPTEMBER 2026 · v0.02

Fewer detours.
A next step when things fail.

The desktop research pass is complete for all eight customer journeys in this checkout. The largest opportunities are payment recovery, clear completion states and keeping the right eSIM context. The existing purchase path is already short.

Status: source-based findings and proposed journeys, ready for design review. No production changes, live payments, participant study or measured time savings. “Complete” refers to this desk audit, not proof that the product has no dead ends.

How to read the findings

Observed means visible in the local page scripts/templates; it does not mean reproduced against live services. Proposed means a research recommendation. Unverified marks a provider, device, backend or user-behaviour question.

A map box is a screen or state, not a click. Counts below use one activation for a link/button/bookmark, and one field task for entering or selecting a value. They exclude scrolling, reading, individual keystrokes, wallet/provider actions and phone settings. Opening a collapsed phone menu adds one activation per menu use. Saving an order link is counted separately because browser methods vary.

These are conditional action budgets derived from controls, not recordings of people. No seconds or percentages are claimed. Network settlement and fulfilment time cannot be reduced by deleting interface steps. Benefits such as fewer searches, app switches and repeated entries need user validation.

Scope includes purchase, installation, returning customers, top-up, renewal, bulk, pricing/help and interrupted payment; staff tools and future tracker features remain outside this pass. Existing API usage was read, but backend implementation and payment-provider screens were not audited.

Current actions and proposed savings

Scenario and boundaryCurrent source-based baselineProposed target and saving
01 · Home, known plan, default balance → invoice1 activation: payment button on chosen plan. Order navigation and first invoice opening are automatic. Optional balance adjustment: +1 field task. Saving the link: separate browser task.Keep 1 activation. No justified reduction; improve total-price clarity and save-link discoverability without adding a mandatory step.
02 · Visible setup details → copied manual values2 activations for address + activation code, or 1 for unified string where usable. Hidden details add 1 Show activation. Phone navigation, pasting and switches are additional, uncounted.Keep manual fallback. Investigate 1 installation handoff activation on supported devices; full savings unknown until device trials. Do not compare this to a complete installation count.
03 · Saved order link → balance / next task1 activation to open saved link; balance loads automatically. +1 if a manual refresh is needed; +1 to start top-up or renewal.Keep 1 to view. Already efficient when the link is available; value lies in recovery and identifying the right SIM.
04 · Ready order → top-up → return to balance3 activations: Top up, payment button, reopen saved order. 1 amount field task; +1 IMSI field task if not prefilled. Reloaded order fetches balance automatically; later manual refresh is +1 only if needed.2 activations + amount task with automatic return/status in the originating order: remove 1 return activation and the bookmark search. A visible Return link alone still costs 3, but removes searching. Provider-dependent.
05 · Ready order → renewal → return to order3 activations: Renew, payment button, reopen saved order. Number is passed in the URL; lookup and post-payment lookup are automatic. Direct entry adds a number field task and change/blur interaction.2 activations with automatic contextual return; save 1 return activation. Or keep 3 with an explicit return link. If the task ends at confirmed expiry on the renewal form, the baseline is already 2.
06 · Bulk page, defaults → complete CSV2 activations: payment button, Download CSV. Optional amount and quantity: up to 2 field tasks. Incomplete CSV adds a confirmation decision; checking completion may require page reloads.Keep 2 for complete orders. Remove repeated completion checks through visible live status; retain intentional partial download if useful to bulk users.
07 · Home → rates → home, one plan family2 activations: Pricing, Buy. 1 country selection task. Comparing both families adds a second country task. Finding a family is reading/scrolling, not a fabricated extra click.Keep 2 or use rates beside the selected plan; synchronised country selection can remove 1 field task when comparing both families. Preserve destination/plan context.
08 · Closed payable invoice, same session → reopen invoice1 Resume payment activation, once status is known. Settled order can appear automatically. Expired invoice or absent session record: no complete recovery action budget is visible.Keep 1 for valid resume. Aim for 1 informed recovery activation after verified expiry, conditional on safe backend support. This adds a missing path rather than saving an existing click.

Eight reviewed journeys

01 · Buy an eSIM

Observed: home.js · continueHomeCheckout / initHomePage; order.js · initOrderPage / handleOrderError; storage.js

Plan, balance and payment method are chosen on Home. The method button creates checkout, saves session handoff data and navigates to the order; payment opens automatically when the pending response permits it. Saving the displayed order URL is advice, not a required confirmation step. Price minimums may increase balance when Altcoins is clicked; network-fee detail is in a tooltip.

Proposed: compare plan and full payable amount → choose payment → order with automatic invoice → payment status → installation.

Keep the short path. Make adjusted amounts and fees visible before commitment, including with touchpad/touch and keyboard; do not rely solely on hover. Add an explicit save-link action that does not block payment. Preserve selection after errors. Initial stock-load failure currently ends with a toast and removes the loader, with no dedicated retry.

Decision: prioritise continuity and clarity over removing another click. Provider totals, confirmation states and denied-storage handoff remain verification items.

02 · Install and connect

Follow-up research: direct installation links exist for iOS and Android. Read platform evidence, proposed UX and device-validation requirements. The original baseline below describes the current site.

Observed: order.ejs; order.js · updateQrFields / copyInputValue / showSimInfo; faq.ejs

QR, address, activation code and unified string are available. Same-phone instructions explicitly ask for manual entry. Activated SIM details are hidden behind Show. Clipboard failure has no visible feedback in the copy handler. Installation and network help sit in the FAQ; the order has no direct installation-FAQ link.

Proposed: choose “this phone” or “another device” → supported direct handoff or appropriate manual/QR instructions → device setup → connection help if needed.

Offer paths without forcing an extra chooser when the next action is clear. Direct installation is a feasibility question, not an existing feature or a guaranteed one-click setup. Keep copy/manual fallback and explicit copy success/failure. Link directly to the relevant FAQ answer.

Recovery: preserve installation details and offer help; do not recommend deletion/reinstallation as a generic retry. Current template distinguishes one-time NO NUMBER/IDENTITY eSIMs from DATA.PLUS. Device-specific guidance requires separate verification.

03 · Return to the right eSIM

Observed: order.ejs; order.js · renderOrder / loadBalance / handleOrderError; storage.js

The saved private order URL opens status and balance automatically. There is no account-based order list or visible self-service lost-link recovery. The page stores one IMSI in localStorage. A later visit to another order can replace it, while Top up uses a generic /topup link. This creates a possible wrong-SIM context mismatch across tabs; occurrence is unmeasured.

Proposed: saved link → identifiable eSIM summary → relevant action with explicit SIM context. Missing link → actionable help using whatever evidence the customer still has.

Make save/copy discoverable and identify the SIM before money is added. Keep manual identifiers for customers entering directly. Support must not promise a fresh private link without an agreed ownership-verification process; someone who lost a link may also lack the requested order reference.

Recovery: clear invalid-link and balance errors with an actual support route. Treat private order URLs/activation details as access credentials; do not automatically copy them into external support URLs or research analytics.

04 · Add balance

Observed: topup.js · loadTopupData / payment callbacks; order.ejs; public-page.js · setupCheckoutPolling; success.ejs

Top up reads stored IMSI, validates it on input/change and opens payment from a method button. Processing/Settled events clear all inputs. There is no explicit return-to-origin order link or receipt state in that handler. The standalone success template offers Home, FAQ and Pricing, but no order return. Its use by each provider is unverified.

Proposed: chosen eSIM → amount and visible total → payment → pending/credited status for that same eSIM → balance or explicit return.

Preserve identity and amount until outcome is understood. Acknowledge Processing separately from credited balance; avoid implying settlement is final solely because an event arrived. Recheck without asking the user to reconstruct the form. Validate complete identifiers and distinguish invalid input from service failure; repeated requests during typing add avoidable noise.

Recovery: retain a transaction reference and expose its real state. Current top-up does not save its invoice/token for the shared legacy polling mechanism, so purchase-style Resume/Create invoice recovery cannot be claimed here.

05 · Keep the number

Observed: renew.js · initRenewForm / loadData; order.js · RenewBtn; renew.ejs

Renew passes the number in the URL and prefills from storage. Lookup shows current expiry and price; payment events reload the lookup. There is no explicit before/after confirmation or return to the original order. Lookup failure only marks the field invalid; submission failures are all described as an invalid number.

Proposed: chosen number + current expiry → price → payment → pending or confirmed new expiry → optional return.

Keep the prefill that already exists. Show old and new dates together after confirmation; customers checking an expiry need not be forced back to the order. Preserve the number and use a visible retry for service failures.

Recovery: verify payment status before inviting another attempt. Interrupted renewal has the same missing transaction persistence as top-up. A disconnected/reused number is a service-policy question; do not promise that paying can restore it.

06 · Buy several eSIMs

Observed: bulk.js · initBulkPlans / continueBulkCheckout; order.js · renderOrder / finishOrder / initOrderControls

Quantity and balance update totals and delivery wording. Bulk payment method is selected on the bulk plan card, then auto-opened on the order page; it is not a second choice on that page. Any returned bulk record calls finishOrder, even if status is processing, stopping polling and hiding status actions. Download remains available with an incomplete-order confirmation.

Proposed: quantities and delivery expectation → payment → completion status → complete CSV, with clearly labelled partial export if needed.

Keep progress updating and provide retry/support without restarting a paid order. Do not disable Refresh as the earlier review suggested. Do not remove partial exports without learning how bulk customers use them. A CSV navigation/download error has no dedicated recovery UI in the order template.

Recovery: preserve the same order and offer retry for download failure. API availability for progress and readiness, partial-export meaning and bulk users’ needs must be confirmed.

07 · Coverage and help

Observed: rates.js / rates.ejs; faq.js / faq.ejs; header.ejs / footer.ejs

Pricing has separate country selectors for two plan families, reset on page initialisation. There is no explicit plan/destination handoff back to buying. FAQ, Pricing and support are independent branches, not four mandatory successive screens. FAQ hash opening exists on initial page load.

Proposed: question or destination → relevant answer/rates → resume the original task; support only when needed.

Use country once across comparison, retain the relevant plan and link to the appropriate FAQ answer from the task. Retain manual family/country changes. Fix the content gaps recorded below before adding new navigation.

Recovery: a rate-loading error needs retry and useful fallback; an unanswered question needs actionable contact. Do not automatically send private order links to support. External wallet recommendations and destination availability were not evaluated in this local research pass.

08 · Interrupted payment

Observed: order.js · updatePaymentState / handleOrderError / scheduleCheck; storage.js; successpurchase.ejs

Same-session New invoices can resume. Paid/processing/settled states move to preparation and automatic checking every ten seconds while pending. Only one pending checkout record is stored per session; a later checkout can replace it. Without the matching record, an unpaid order may repeatedly show “still pending” without a payment action. Expired/invalid invoice states have no replacement flow.

Proposed branches: payable → resume existing invoice; paid → wait/check fulfilment; verified expired/unpaid → safe replacement if supported; unknown/unavailable → retry status or support.

Do not infer nonpayment from a closed window or slow callback. Unknown, partial/late-payment, failed and expired states need explicit agreed outcomes before offering another invoice. Show time expectations only when supported by service evidence, and give escalation rather than endless “check again”.

Recovery: support resuming from the order identity where authorised, without depending only on the originating tab. The legacy purchase-success page already supplies an automatic redirect and Continue link when its script runs; avoid inventing another confirmation page. With script execution unavailable its placeholder is not a working fallback.

Dead ends and unresolved loops

“Gap” means no adequate path is visible in the inspected front end. It is not a claim that the backend cannot handle the case. Support links alone do not prove recovery succeeds.

ID / priorityTrigger → observed outcomeProposed exit / dependency
D01 · P1Unpaid order reopened without matching session data → pending/check loop, no invoice resume.Recover authorised payment state from order identity; retry/help when unavailable. Backend/payment contract needed.
D02 · P1Expired/non-New invoice → Resume hidden, no replacement explanation/action.Explicit invoice state and safe replacement only after payment reconciliation. Backend/provider dependency.
D03 · P1Payment reported received but fulfilment not ready → automatic retries without escalation.Preserve reference, distinguish paid from ready, actionable help after an agreed threshold. No invented ETA.
D04 · P1Lost/invalid order URL → invalid message; error.ejs says contact support without a contact link. Order has no shared support footer; remote widget availability is unverified.Direct support route and a recovery checklist that accepts missing references; agree proof-of-ownership process.
D05 · P1Top-up interrupted or Processing event → no saved current transaction for shared polling; fields cleared on event and no contextual receipt/return.Persist correct transaction context, show pending/credited state and resume/retry safely. Provider verification needed.
D06 · P1Renewal interruption/service error → no equivalent resume; generic invalid-number message.Keep number, separate service/input errors and expose existing invoice status. Backend/provider verification needed.
D07 · P1Processing bulk record returned → automatic checks stop; partial CSV warning remains.Continue progress/retry, retain useful partial exports, retry download without new purchase.
D08 · P1Multiple orders/tabs → generic top-up link can read the most recently stored IMSI.Explicit originating SIM context and visible identity confirmation. Risk inferred from storage/link behaviour, not a recorded wrong payment.
D09 · P2Home/bulk stock or rates request fails → toast/alert, loader removed, no dedicated data retry.Persistent explanation + retry + support/navigation fallback, preserving choices.
D10 · P2Top-up/renewal submission service failures → “invalid” identifier; bulk failures → out-of-stock alert regardless of cause.Differentiate validation, temporary failure and unknown payment outcome. Retry without retyping or duplicating payment.
D11 · P2FAQ “How can I pay with USDT?” → target answer is commented out.Provide verified answer or remove misleading question during later implementation. Content finding confirmed in template.
D12 · P2Card-payment FAQ link uses href="Strike App"; RoboSats link has empty anchor text.Correct/verify intended destination and give visible descriptive link text. External destinations not visited in this audit.
D13 · P2FAQ internal Lightning hash clicked after initial load → hash handler does not reopen a collapsed answer.Handle in-page FAQ destinations consistently; behaviour needs browser reproduction before implementation.
D14 · P2Manual setup copy denied/fails → no visible catch/feedback; troubleshooting requires finding FAQ elsewhere.Selectable manual values, copy feedback, direct relevant help and return context. Physical-device testing needed.
D15 · P2Top-up success template → generic public links but no same-order continuation.Receipt and optional return to the correct order; verify which provider paths reach this template.

Other state checks: clearing a previously valid top-up/renewal identifier does not explicitly reset all controls in the empty-value branch; asynchronous validation may leave stale feedback. Record as a validation-state hypothesis, not a demonstrated incorrect charge. Test blank/change/fail/retry cases with controlled responses.

Recommended order for design exploration

Priorities reflect likely consequence and source evidence, not measured traffic or incident frequency. No implementation is authorised by this document.

  1. P1 · Complete the payment and recovery model (D01–D07, D15). Define paid versus ready, same-order continuation, expired/unknown outcomes and real support escalation. Highest consequence: customers uncertain whether they paid or can obtain what they bought. Requires provider/backend agreement before designs promise recovery.
  2. P1 · Preserve the right eSIM and return context (D04, D08). Explicit origin for top-up/renewal, clear identity, optional save-link action. Likely removes one manual return activation per completed top-up/renewal when automatic return is appropriate. Ownership recovery needs policy; no account system is assumed.
  3. P2 · Repair help exits and error explanations (D09–D14). Direct actionable contact, working answers, service-specific messages, retry with retained values. Mostly content/front-end design; external link content must be checked before publication.
  4. P2 · Shorten comparison and installation effort. One destination choice across plan families, relevant FAQ deep links and same-phone guidance. Direct installation remains a separate feasibility spike; do not hold simple help improvements for it.

Keep: automatic first invoice opening, automatic balance fetch, renewal prefill, same-session Resume, manual installation fallback and useful bulk exports. Do not add compulsory account creation, success-page clicks or repeated confirmation purely to make the map more uniform.

What this research establishes—and what comes next

All eight journeys now have an evidence-backed baseline, proposed shorter path, recovery review and priority. The remaining work is validation of proposals and external dependencies, not an unfinished pass through the map.

Before approving detailed UX

Proposed usability study

Start with 5–8 formative sessions spanning new crypto/eSIM users, returning customers and at least one bulk customer. This is a discovery sample, not a statistically representative benchmark. Include laptop touchpad/keyboard and physical phones. Use safe prototypes or mock payment states, not real charges.

TaskConditionsEvidence to record
Choose a plan for a destination and start paymentCompare families; fee/minimum adjustment; plan data fails onceActions, repeated country entries, time finding full price, unaided retry
Recover a checkoutClose/reload; fresh session; second checkout; expired, unknown and paid-but-pending statesCorrect next action, no duplicate payment attempt, status comprehension, support route found
Top up and renew the intended SIMTwo order tabs; cleared storage; invalid and failed lookup; delayed paymentCorrect SIM/number, fields re-entered, returns/searches, recognition of confirmed balance/expiry
Install and find relevant helpSame phone; another device; copy fails; no connectionApp switches, time to useful instruction, successful fallback, no inappropriate reinstall advice
Retrieve bulk purchase and lost orderPartial/processing result; download fails; no saved link or referenceUnderstanding partial export, progress checks, successful retry or actionable escalation

Compare current/proposed prototypes with the same start/end states and balanced task order. Measure active task time separately from settlement/fulfilment waits; record completion, missteps, repeated entry, backtracking and confidence. Report observed differences and sample limits, not assumed savings. Keep access URLs, activation codes and customer identifiers out of research logs.

Proposed acceptance criteria: every blocked state has a useful next action; no new payment is suggested while previous status is unknown; identity survives top-up/renewal; users can distinguish pending from complete; all visible help controls lead to content; core controls work without hover or a mouse. These criteria are targets, not test results.

Document validation

The research HTML and linked flow-map annotations are checked separately for readability, working internal links and layout across desktop/phone browser profiles. All six cases passed 14 checks each: chromium 153.0.8010.12, firefox 155.0, webkit 26.6 at desktop 1440×900 and emulated phone 390×844. Checks covered research links, eight annotations, retained flow tabs, page overflow and uncaught exceptions. Those checks do not validate the product journeys, physical phones or payment integrations.

Local evidence and corrections

Reviewed the current checkout on 21 September 2026. Sources below are repository-relative references, not routes on the design-document server. This is an internal product audit; no external recommendations or provider documentation were relied on.

Corrections to v0.01: replacement invoices and fresh-link support were proposals, not existing guarantees; top-up/renewal cannot be assumed to resume through the purchase order; disabling bulk Refresh would worsen recovery; bulk payment choice happens before the order page; refreshing a reopened order balance is optional; current payment and installation maps do not establish real transaction/device outcomes.

The activity tracker remains unchanged: this research does not complete implementation items. The flow map retains its eight tabs and the existing Flows / Navigation / Brief header links.