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.
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>
Add badge verification API, preserve meet_return through registration and payment, and link confirmation back to Meet with badge auto-login.
Co-authored-by: Cursor <cursoragent@cursor.com>
Exempt public register POST from cross-site CSRF, collect email on the
landing form, and handle API errors instead of navigating to a missing
success_url.
Co-authored-by: Cursor <cursoragent@cursor.com>
Programme sync to Meet rooms, wallet-billed mass comms, webhook lifecycle updates, and registration access bridge with join-window gating on public pages.
Co-authored-by: Cursor <cursoragent@cursor.com>
Events can define hybrid/virtual sessions synced to Meet rooms; SMS and email use wallet-billed platform APIs instead of Termii and Laravel mail.
Co-authored-by: Cursor <cursoragent@cursor.com>
Attendees without Ladill accounts no longer need email at checkout; phone is required so organizers can reach them.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add favicon partial to all standalone pages, regenerate the Events icon asset, and stop marking deploys failed when the nginx vhost step cannot sudo.
Co-authored-by: Cursor <cursoragent@cursor.com>
Full control center for ticketed events, contributions, attendees, badges,
and programmes — not a QR utility clone. Includes SSO shell, import command,
and platform cutover runbook.
Co-authored-by: Cursor <cursoragent@cursor.com>