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>
Ladill Accounting is now live at accounting.ladill.com; add its row + icon to
the shared app launcher (byte-identical across all Ladill apps).
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>
Press / from any non-input page to jump to the topbar or full-screen search field, with a fallback route when search is not visible.
Co-authored-by: Cursor <cursoragent@cursor.com>
crm.ladill.com is now live in the suite; add its launcher row + icon
(byte-identical shared launcher config).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Expose /.well-known/assetlinks.json from env-configured Play app signing fingerprints so mini.ladill.com passes Play Console deep link domain checks.
Co-authored-by: Cursor <cursoragent@cursor.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>
Guests without a local session try prompt=none SSO first; marketing pages
are only for visitors with no platform session (localhost fix retained).
Co-authored-by: Cursor <cursoragent@cursor.com>
Correct localhost marketing_url default and stop redirecting guests through
/sso/connect on visit; SSO starts only via explicit sign-in.
Co-authored-by: Cursor <cursoragent@cursor.com>
Remove interactive OAuth fallback on silent SSO failure and add ladill.marketing_url config so app subdomains open the dashboard when signed in locally.
Co-authored-by: Cursor <cursoragent@cursor.com>
Drop the fragile column ordering in the migration and allow POST as well as PUT so the mobile clients can save auto-withdraw after deploy.
Co-authored-by: Cursor <cursoragent@cursor.com>
Store per-user auto-withdraw amounts, expose them via the wallet API, and process withdrawals when balances reach the configured threshold after payments or on a schedule.
Co-authored-by: Cursor <cursoragent@cursor.com>
Ship full-featured mobile clients with auth, payments, QRs, push notifications, and iOS polish including Figtree typography, app icons, and QR previews.
Co-authored-by: Cursor <cursoragent@cursor.com>
settings() now fetches phone from the central identity profile (guarded), so the
app's Profile screen shows the phone the user previously saved.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
GET /api/v1/mini/wallet/banks?type=bank|mobile_money proxies to the central
identity banks endpoint so the app's payout sheet populates from Paystack.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Support is now a ticket system proxied to the central identity support API:
GET/POST /mini/support/tickets and GET /mini/support/tickets/{id}. Removed the
Afia-backed /support/chat route.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Adds account avatar upload (multipart proxy to identity), wallet payout-account
+ withdrawal endpoints, and a hourly mini:cancel-stale-payments command that
cancels payments pending beyond 6h (new MiniPayment::STATUS_CANCELED).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Adds /api/v1/mini account (settings, profile, change-password), wallet (balance
+ ledger, Paystack top-up) and support (Afia chat) endpoints. Account/profile/
password/top-up proxy to the central identity API via a CallsIdentityApi trait;
notifications, wallet balance and support chat are served locally.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
presentUser() ran on the public login/register routes where SetActingAccount
never runs, so ladill_account() was null and dereferencing it 500'd. Default
the acting account to the user at sign-in, and route identity-API calls through
a helper with timeouts that turns ConnectionException into a clean message
instead of an unhandled 500.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.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>
Use paymentTypes() (this app's catalog) so the chat context loads instead of
500ing — the eventTypes() call was a QR Plus leftover.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>