Matches Ladill Stock, whose header is now just AI, notifications, launcher and
the account menu. This partial is byte-identical to Stock's again.
Only the desktop block goes. The mobile full-screen search (partials/search-screen)
is untouched and still reached from the bottom nav, the `/` shortcut still focuses
page-level search inputs, and the search route and controller are left in place —
the Alpine topbarSearch component is still used by the mobile screen, so none of
it is dead code.
Ladill Webmail deliberately keeps its header search: it is the only desktop route
into mail search, and dropping it there would remove a core function rather than
tidy a header.
Make Ladill Events free for all accounts, remove plan upgrade UI, force Ladill Pay only for tickets and contributions, and reinstate standard platform fees.
Loading uses the standard white bottomsheet/modal; once Paystack Inline is
ready the host shell goes transparent so only Paystack's card shows on the
backdrop — no oversized second white frame on Merchant/Give/etc.
When Paystack Inline is ready: widen desktop panel for channel sidebar, collapse
to a minimal header, hide footer trust line, and re-pin the checkout iframe to
the sheet body so it does not read as a second modal on top of Ladill chrome.
Public order/pay POSTs hit ladl.link first; satellite CSRF tokens cannot bind
to Link (or platform/satellite) sessions, which returned 419 and showed
"Could not start checkout." Except public checkout paths and return
access_code from owner-gateway Paystack init. Sync contained Paystack sheet.
Paystack blocks iframes, so checkout uses a popup beside the sheet/modal chrome. Opening about:blank on the user tap keeps that window from being blocked after the async initiate response.
Paystack checkout.paystack.com returns X-Frame-Options: SAMEORIGIN, so the shared sheet opened empty. Keep mobile sheet/desktop modal chrome, launch checkout in a named window with a Continue CTA fallback, and escape payment-return via window.opener or top.
Standardize customer-facing Ladill Pay checkout shells across products, open them on all viewports, and escape iframe callbacks back to the product flow.
Replace per-owner gateway checkout with platform Paystack via the Pay API, drop owner key requirements from settings, and add coverage for init and idempotent completion.
Co-authored-by: Cursor <cursoragent@cursor.com>
Attendee registrations, programme hosts, and event speakers now draw
name/email/phone/company from DemoWorld people instead of generic
placeholders, and staff logins skip the login reseed.
Co-authored-by: Cursor <cursoragent@cursor.com>
act_runner v0.2.x does not expose gitea.run_attempt, so release archive and
workspace paths rendered with a trailing dash. Use gitea.run_id only, matching
the Meet/CRM deploy workflows.
Demo Free/Pro/Enterprise accounts wipe and reload sample data on
authorization-code SSO callbacks so every sales walkthrough starts clean.
Co-authored-by: Cursor <cursoragent@cursor.com>
Mirror Care: suite platform keys count as ready for attendee email/SMS;
Account Messaging is primary, product Bird/SMS keys are advanced.
SmsService now prefers channel=suite before customer API keys.
Ticket/contribution payments open in a desktop modal or mobile sheet, initialize with the organizer email, and break out of the iframe after callback.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use the Events user layout, match the Accounting/Invoice upgrade sidebar CTA, and tolerate a missing subscriptions table until migrate runs.
Co-authored-by: Cursor <cursoragent@cursor.com>
Attendee and speaker comms use encrypted tenant relay credentials and skip platform-key fallback and Bird wallet double-debit.
Co-authored-by: Cursor <cursoragent@cursor.com>
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.
PATCH the pre-linked room by UUID so programme_snapshot lands on the room users join instead of creating a duplicate.
Co-authored-by: Cursor <cursoragent@cursor.com>