Send Events mail from platform SMTP like Invoice, not owner Bird domain.
Deploy Ladill Events / deploy (push) Successful in 31s

Use EventMailer with MAIL_FROM and organiser Reply-To instead of the Bird API, which rewrote the From address onto the account's verified domain (e.g. climp.me). Redesign the speaker invitation to use the shared Events email layout.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
isaacclad
2026-07-03 17:09:05 +00:00
co-authored by Cursor
parent 1db499ba2f
commit 0c5a1ddb23
8 changed files with 233 additions and 31 deletions
@@ -1,12 +1,61 @@
<!DOCTYPE html>
<html>
<body style="font-family: sans-serif; color: #1e293b; line-height: 1.5;">
@if($speakerName)
<p>Hi {{ $speakerName }},</p>
@endif
<p>You have been invited to speak at <strong>{{ $eventName }}</strong>.</p>
<p>Your speaker page has the programme, your session times, and links to join the virtual stage when it is time:</p>
<p><a href="{{ $portalUrl }}">Open your speaker page</a></p>
<p style="color: #64748b; font-size: 13px;">No attendee registration is required use the join links on that page to enter the speaker waiting area.</p>
</body>
</html>
@extends('mail.notifications.layout')
@section('email-header')
@include('mail.partials.brand-header', ['brand' => 'events'])
@endsection
@section('email-footer')
@include('mail.partials.brand-footer', ['brand' => 'events'])
@endsection
@section('content')
<div class="highlight-box">
<p class="highlight-box-text">Speaker invitation</p>
<p class="highlight-box-subtext">{{ $eventName }}</p>
</div>
<h1 class="email-title">
You're invited to speak{{ $speakerName ? ', '.explode(' ', $speakerName)[0] : '' }}
</h1>
<p class="email-text">
The organiser of <strong>{{ $eventName }}</strong> has added you to the speaker roster.
Your speaker page includes the programme, your session times, and links to join the virtual stage.
</p>
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="margin:24px 0;">
<tr>
<td align="center">
<a href="{{ $portalUrl }}" class="email-button" style="display:inline-block;background:#4f46e5;color:#ffffff;text-decoration:none;padding:12px 28px;border-radius:10px;font-size:14px;font-weight:600;">
Open your speaker page
</a>
</td>
</tr>
</table>
<div class="email-details">
<p class="email-details-title">What to expect</p>
<div class="checklist-item">
<div class="checklist-icon">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M5 13l4 4L19 7"/></svg>
</div>
<div class="checklist-content">
<p class="checklist-title">No attendee registration</p>
<p class="checklist-desc">Speakers skip the public registration flow.</p>
</div>
</div>
<div class="checklist-item">
<div class="checklist-icon">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M5 13l4 4L19 7"/></svg>
</div>
<div class="checklist-content">
<p class="checklist-title">Join from your speaker page</p>
<p class="checklist-desc">Use the join links when your session is scheduled to open the speaker waiting area.</p>
</div>
</div>
</div>
<p class="email-text-sm">
Or open this link: <a href="{{ $portalUrl }}" style="color:#4f46e5;">{{ $portalUrl }}</a>
</p>
@endsection