When a user hits an action they can't afford (e.g. creating a QR code with
0/low balance), open an in-app two-step modal instead of bouncing them to the
central wallet page. Step 1 explains pay-as-you-go billing + shows the action
cost and current balance; step 2 takes an amount and starts a Paystack checkout
via the central identity wallet-topup API, returning the user where they were.
- service-topup-modal: rebuilt as two-step (billing explainer -> amount/pay)
- IdentityClient::walletTopup + WalletTopupController + POST /wallet/topup
- balanceGate.openTopup / qrCustomizer.redirectTopup now prefer the modal,
falling back to the wallet page only when no modal is wired
- qr-codes index + create render the modal and open it on insufficient balance
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Wallet balance peek rendered as a menu row directly under Billing, backed by
a /wallet/balance endpoint (BillingClient) and guarded by Route::has. Also
opens Afia via a direct window event for reliability.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Wire UserProfileMenu and shared Blade partial into topbar, mobile nav, and layouts so menu items match the account portal (Ladill Mail excluded).
Co-authored-by: Cursor <cursoragent@cursor.com>
Introduce a dedicated /search page, wire the bottom nav and topbar to it, and expose JSON results for live lookup of QR codes.
Co-authored-by: Cursor <cursoragent@cursor.com>
Port the monolith QR mobile CSS (fixed bottom bar, safe-area inset, page background) and restore horizontal padding on create/show pages — shared with Ladill Events.
Co-authored-by: Cursor <cursoragent@cursor.com>
Store per-account preferences in qr_settings and pre-fill the create flow with saved type and brand styling.
Co-authored-by: Cursor <cursoragent@cursor.com>
Wire in-app chat scoped to QR codes, billing, and scans so users get product-specific help without leaving qrplus.ladill.com.
Co-authored-by: Cursor <cursoragent@cursor.com>
Utility QR types only (URL, WiFi, link list, business, app download) with
SSO, Billing API integration, public /q resolver, and qr-plus:import for
platform migration. vCard and commerce types stay on the platform.
Co-authored-by: Cursor <cursoragent@cursor.com>