Replace logo with client-supplied artwork; add Nablus workshop registration form

- public/images/logo.png replaced with the client's professionally-designed
  version, cropped to remove excess background margin (used sitewide via
  logo.blade.php / app-logo.blade.php / app-logo-icon.blade.php)
- New standalone, unlinked registration form at /forms/nablus-workshop for a
  one-off workshop Libra is co-hosting with Smart Business Center, replicating
  a ClickUp form the client previously used but with Libra's own branding.
  Submissions email info@libra.adv.ps and redirect to /about. No nav/footer
  link, no DB storage, no captcha (PRD v1.3).
- Tasks 17 (parent), 17-1 (Mailable + email template), 17-2 (page/route/form)
  taken through product-definition -> task-readiness -> dev-implement -> dev-qa,
  all Done. 11 new tests passing; full suite run clean of new regressions
  (69 pre-existing unrelated failures, documented in docs/tasks/17.md).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Naser Mansour
2026-09-27 23:56:50 +03:00
parent 1b66e0b6ff
commit 690c22395f
14 changed files with 745 additions and 0 deletions
@@ -0,0 +1,103 @@
<?php
use App\Mail\WorkshopRegistrationMail;
use Illuminate\Support\Facades\Mail;
use Livewire\Attributes\Layout;
use Livewire\Volt\Component;
new #[Layout('components.layouts.standalone')] class extends Component
{
public string $fullName = '';
public string $contactNumber = '';
public string $email = '';
public function register(): void
{
$validated = $this->validate([
'fullName' => ['required', 'string', 'max:255'],
'contactNumber' => ['required', 'string', 'max:50'],
'email' => ['nullable', 'email', 'max:255'],
], [
'fullName.required' => 'يرجى إدخال الاسم الكامل',
'contactNumber.required' => 'يرجى إدخال رقم التواصل',
'email.email' => 'يرجى إدخال بريد إلكتروني صحيح',
]);
Mail::to('info@libra.adv.ps')->send(new WorkshopRegistrationMail(
fullName: $validated['fullName'],
contactNumber: $validated['contactNumber'],
email: $validated['email'] !== '' ? $validated['email'] : null,
));
$this->redirect(route('about'), navigate: false);
}
}; ?>
<div class="flex flex-col gap-6">
<img
src="{{ asset('images/workshop-nablus-flyer.jpeg') }}"
alt="ورشة متخصصة: القانون، التسويق الرقمي، وإدارة المتاجر الإلكترونية"
class="w-full rounded-lg shadow-[0_2px_8px_rgba(0,0,0,0.1)]"
/>
<div class="bg-white rounded-lg p-6" style="box-shadow: 0 2px 8px rgba(0,0,0,0.1)">
<img src="{{ asset('images/logo.png') }}" alt="LIBRA for Rights" class="h-16 w-auto object-contain mb-4" />
<h1 class="text-2xl font-bold mb-2" style="color: #2D322A">تسجيل في ورشة عمل ريادايات نابلس</h1>
<p class="mb-4" style="color: #2D322A">تخططين لإطلاق مشروعك الخاص أو تطوير تجارتك الإلكترونية؟ 🚀</p>
<p class="text-sm leading-relaxed mb-6" style="color: #2D322A">
ندعوكم للانضمام إلينا في ورشة عمل متخصصة وشاملة تجمع بين القانون، التسويق الرقمي، وإدارة
المتاجر الإلكترونية لبناء مشروعك على أسس متينة وناجحة! 🎯📊💡
<br><br>
برنامج الورشة:
<br>
■ ١١:٠٠ – ١١:١٠ | الترحيب والافتتاحية والتعريف بالسوق الفلسطيني — أ. لينا عبد الهادي
<br>
■ ١١:١٠ – ١١:٤٠ | كيف تبدأ مشروعاً ريادياً — أ. هبة المصري
<br>
■ ١١:٤٥ – ١٢:٢٠ | أساسيات التسويق الرقمي للمشاريع الريادية عبر وسائل التواصل — أ. تالا حلوب
<br>
■ ١٢:٢٠ – ١٢:٣٠ استراحة
<br>
■ ١٢:٣٠ – ١:٠٠ | الحيثيات والإجراءات القانونية الخاصة بالتجارة الإلكترونية — أ. هدى عرموش
<br>
■ ١:٠٥ – ١:٢٥ | البيع عبر المواقع الإلكترونية مقابل منصات التواصل الاجتماعي والفرق بينهما — أ. أيسر غزال
<br><br>
📍 المكان: قاعة "ورشة" – برج رفيديا – نابلس
<br>
الوقت: من الساعة ١١:٠٠ صباحاً حتى ١:٢٥ ظهراً
<br>
✨ الدعوة عامة لجميع الرياديين/ات وأصحاب المشاريع الناشئة والمهتمين!
</p>
<form wire:submit="register" class="flex flex-col gap-4">
<flux:input
wire:model="fullName"
label="الاسم الكامل"
placeholder="أدخل اسمك الكامل"
required
/>
<flux:input
wire:model="contactNumber"
label="رقم التواصل"
placeholder="أدخل رقم جوالك"
required
/>
<flux:input
wire:model="email"
type="email"
label="ايميلك للتواصل"
placeholder="أدخل بريدك الإلكتروني"
/>
<flux:button variant="primary" type="submit" class="w-full">
إرسال
</flux:button>
</form>
</div>
</div>