Replace the once-per-session sessionStorage guard (which suppressed the loading
screen after its first appearance) with entry-aware logic: show on app entry
and reloads, suppress on internal link navigations and back/forward.
Sync mobile-header-btn partials, mobile x-btn.create, and update dashboard header actions for consistent mobile FABs.
Co-authored-by: Cursor <cursoragent@cursor.com>
Remove duplicate Billing header above Home; wallet card follows Billing
in menu order to match the desktop avatar dropdown.
Co-authored-by: Cursor <cursoragent@cursor.com>
Show wallet balance prominently in the mobile profile bottom sheet with refresh
on open; align session lifetime with the platform default.
Co-authored-by: Cursor <cursoragent@cursor.com>
Profile moves to the bottom nav sheet on small screens; optional search tab
support is synced from the Ladill platform template.
Co-authored-by: Cursor <cursoragent@cursor.com>
Public URLs, encoded payloads, slug preview, payment callbacks, and asset paths now use ladl.link instead of ladill.com/q/*.
Co-authored-by: Cursor <cursoragent@cursor.com>
Public landing pages, asset paths, payment callbacks, and redirects now go through QrCode::publicPath() / LadillLink instead of ladill.com/q/* routes.
Co-authored-by: Cursor <cursoragent@cursor.com>
Creating a transfer that the wallet can't cover used to flash a bare error.
Detect the insufficient-balance case and open an in-app two-step modal (billing
explainer -> amount -> Paystack) on the create page instead, with an 'Add funds'
button to top up on demand.
- BillingClient::topup -> POST /api/billing/topup (Transfer already holds its key)
- WalletTopupController + route POST /wallet/topup (user.wallet.topup)
- store() flashes open_topup_modal on TransferWalletErrors::isInsufficientBalance
- service-topup-modal made two-step (uses <x-modal>, plain POST -> checkout)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
InjectBootSplash middleware shows a self-branded loading splash once per session
while the app boots, then fades out.
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>
Wallet, Billing, Team, Developers, and Support live on account.ladill.com.
Siloed sidebars keep product nav and app Settings only.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use the existing ladillConfirm store on the Files page and x-confirm-dialog on transfer delete so confirmations match the rest of Transfer.
Co-authored-by: Cursor <cursoragent@cursor.com>
Replies came back with **bold** markup that displayed literally to users.
Render the bubble as HTML (escaped first for safety) and convert **text** to
<strong>; newlines already handled by whitespace-pre-line.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add shared btn-primary components and plus icons on create/new actions; limit overview recent transfers to three.
Co-authored-by: Cursor <cursoragent@cursor.com>
Transfers lists only intentional shares while Files shows all storage, and New transfer accepts folder picks with flattened file uploads.
Co-authored-by: Cursor <cursoragent@cursor.com>
Folder rows match the file table layout, support zip download, and participate in bulk selection, share, and copy-link actions.
Co-authored-by: Cursor <cursoragent@cursor.com>
Avoids the broader browser file-access permission dialog; the custom Ladill confirm modal still runs after folder selection.
Co-authored-by: Cursor <cursoragent@cursor.com>
Folder upload now names and creates the destination folder from the picked directory, uploads all files into it, and redirects to the new folder view.
Co-authored-by: Cursor <cursoragent@cursor.com>
Users confirm uploads in a Ladill modal before transfer, and folder picks upload flat file names into the current location instead of preserving local directory paths.
Co-authored-by: Cursor <cursoragent@cursor.com>
Remove desktop header search, wire mobile search to the transfers and files page, refine file icons and Shared badge, and align Transfers toolbar with Files.
Co-authored-by: Cursor <cursoragent@cursor.com>
Users can create folders, upload files or folders, and choose replace or keep both on name conflicts instead of auto-grouping by transfer.
Co-authored-by: Cursor <cursoragent@cursor.com>
Transfers now lists all shares with filters and pagination; Files becomes a selectable cloud view with download, share, delete, move, and open-in-email actions.
Co-authored-by: Cursor <cursoragent@cursor.com>
Align new-transfer and billing page wording with monthly wallet debits instead of implying transfers stay active indefinitely.
Co-authored-by: Cursor <cursoragent@cursor.com>
Lower the shared header logo and add a smaller transfer-specific class instead of the oversized inline override.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use transfer.ladill.com share URLs in notifications and APIs, add the email
logo, and show file details with a prominent download button.
Co-authored-by: Cursor <cursoragent@cursor.com>
All files now upload through chunked sessions only, the file picker no longer
rewrites the queue on change, and create submits upload_ids instead of a broken
multipart files field.
Co-authored-by: Cursor <cursoragent@cursor.com>
Recipients always get the download link immediately when an email is set.
Large files upload in the background with per-file and overall progress bars.
Co-authored-by: Cursor <cursoragent@cursor.com>
Send grace-entered and countdown emails to owners alongside recipient grace milestones so unpaid transfers get clear wallet top-up reminders before deletion.
Co-authored-by: Cursor <cursoragent@cursor.com>