complete story 14.1
This commit is contained in:
parent
6504327ed7
commit
972af7a127
|
|
@ -127,17 +127,17 @@ return [
|
||||||
|
|
||||||
## Dev Checklist
|
## Dev Checklist
|
||||||
|
|
||||||
- [ ] Create hero section HTML structure
|
- [x] Create hero section HTML structure
|
||||||
- [ ] Add English translations to `lang/en/home.php`
|
- [x] Add English translations to `lang/en/home.php`
|
||||||
- [ ] Add Arabic translations to `lang/ar/home.php`
|
- [x] Add Arabic translations to `lang/ar/home.php`
|
||||||
- [ ] Style tagline with correct typography
|
- [x] Style tagline with correct typography
|
||||||
- [ ] Style intro text with max-width
|
- [x] Style intro text with max-width
|
||||||
- [ ] Implement primary CTA button linking to `/booking`
|
- [x] Implement primary CTA button linking to `/booking`
|
||||||
- [ ] Implement secondary CTA with smooth scroll to `#services`
|
- [x] Implement secondary CTA with smooth scroll to `#services`
|
||||||
- [ ] Test responsive layout (mobile, tablet, desktop)
|
- [x] Test responsive layout (mobile, tablet, desktop)
|
||||||
- [ ] Test RTL layout (Arabic)
|
- [x] Test RTL layout (Arabic)
|
||||||
- [ ] Test LTR layout (English)
|
- [x] Test LTR layout (English)
|
||||||
- [ ] Verify color usage matches brand guidelines
|
- [x] Verify color usage matches brand guidelines
|
||||||
|
|
||||||
## Estimation
|
## Estimation
|
||||||
|
|
||||||
|
|
@ -148,3 +148,51 @@ return [
|
||||||
|
|
||||||
- Epic 12 completed (brand colors available)
|
- Epic 12 completed (brand colors available)
|
||||||
- Booking route exists at `/booking`
|
- Booking route exists at `/booking`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Dev Agent Record
|
||||||
|
|
||||||
|
### Status
|
||||||
|
|
||||||
|
Ready for Review
|
||||||
|
|
||||||
|
### Agent Model Used
|
||||||
|
|
||||||
|
Claude Opus 4.5 (claude-opus-4-5-20251101)
|
||||||
|
|
||||||
|
### File List
|
||||||
|
|
||||||
|
| File | Action | Description |
|
||||||
|
|------|--------|-------------|
|
||||||
|
| `resources/views/pages/home.blade.php` | Modified | Added hero section with tagline, intro, and CTA buttons |
|
||||||
|
| `lang/en/home.php` | Created | English translations for hero section |
|
||||||
|
| `lang/ar/home.php` | Created | Arabic translations for hero section |
|
||||||
|
| `resources/css/app.css` | Modified | Added smooth scroll behavior for HTML element |
|
||||||
|
| `tests/Feature/Public/HomePageTest.php` | Created | 12 tests covering all acceptance criteria |
|
||||||
|
|
||||||
|
### Completion Notes
|
||||||
|
|
||||||
|
- Implemented hero section with full-width warm cream background per AC1
|
||||||
|
- Responsive typography: 1.75rem mobile, 2rem tablet, 2.5rem desktop per AC2
|
||||||
|
- Intro text constrained to 800px max-width per AC3
|
||||||
|
- Primary CTA uses existing `btn-primary` class with warm gold styling per AC4
|
||||||
|
- Secondary CTA uses `btn-secondary` class with forest green border per AC5
|
||||||
|
- Smooth scroll implemented via CSS `scroll-behavior: smooth` on html element
|
||||||
|
- Added `id="services"` to existing services section for anchor link
|
||||||
|
- Buttons stack vertically on mobile, inline on tablet/desktop per AC6
|
||||||
|
- RTL support automatic via Tailwind's built-in RTL utilities per AC7
|
||||||
|
- All 12 feature tests pass covering bilingual content, links, and structure
|
||||||
|
|
||||||
|
### Change Log
|
||||||
|
|
||||||
|
| Date | Change |
|
||||||
|
|------|--------|
|
||||||
|
| 2026-01-09 | Initial implementation of hero section |
|
||||||
|
| 2026-01-09 | Created translation files (en/ar) |
|
||||||
|
| 2026-01-09 | Added smooth scroll CSS |
|
||||||
|
| 2026-01-09 | Created comprehensive test suite |
|
||||||
|
|
||||||
|
### Debug Log References
|
||||||
|
|
||||||
|
N/A - No issues encountered during implementation
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
'tagline' => 'ملتزمون بالعدالة – متجذرون بالكرامة – مدفوعون للدفاع',
|
||||||
|
'intro' => 'ليبرا للحقوق مؤسسة قانونية منسوجة من نسيج المجتمع، تقدم حلولاً قانونية مبتكرة بأمانة واحترافية.',
|
||||||
|
'cta_book' => 'احجز استشارة',
|
||||||
|
'cta_services' => 'خدماتنا',
|
||||||
|
];
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
'tagline' => 'Committed to Justice – Grounded in Dignity – Driven to Advocate',
|
||||||
|
'intro' => 'Libra for Rights is a legal institution woven from the fabric of society, offering innovative legal solutions with honesty and professionalism.',
|
||||||
|
'cta_book' => 'Book a Consultation',
|
||||||
|
'cta_services' => 'Our Services',
|
||||||
|
];
|
||||||
|
|
@ -328,6 +328,11 @@ html[lang="en"] body {
|
||||||
font-family: var(--font-english);
|
font-family: var(--font-english);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Smooth Scrolling */
|
||||||
|
html {
|
||||||
|
scroll-behavior: smooth;
|
||||||
|
}
|
||||||
|
|
||||||
/* Typography Base Styles */
|
/* Typography Base Styles */
|
||||||
body {
|
body {
|
||||||
font-size: var(--font-size-base);
|
font-size: var(--font-size-base);
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,33 @@
|
||||||
<x-layouts.public>
|
<x-layouts.public>
|
||||||
<div class="text-center py-8 sm:py-12">
|
{{-- Hero Section --}}
|
||||||
<h1 class="text-2xl sm:text-3xl lg:text-4xl font-bold text-body mb-4">{{ __('Libra Law Firm') }}</h1>
|
<section class="bg-background py-8 sm:py-12 lg:py-16">
|
||||||
<p class="text-body text-base sm:text-lg mb-6 sm:mb-8 px-4">{{ __('Professional legal services with integrity and excellence.') }}</p>
|
<div class="container mx-auto px-4 text-center">
|
||||||
|
{{-- Tagline --}}
|
||||||
|
<h1 class="text-[1.75rem] sm:text-[2rem] lg:text-[2.5rem] font-bold text-text mb-6">
|
||||||
|
{{ __('home.tagline') }}
|
||||||
|
</h1>
|
||||||
|
|
||||||
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 sm:gap-6 lg:gap-8 mt-8 sm:mt-12">
|
{{-- Introductory Text --}}
|
||||||
|
<p class="text-text text-base sm:text-lg max-w-[800px] mx-auto mb-8">
|
||||||
|
{{ __('home.intro') }}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
{{-- CTA Buttons --}}
|
||||||
|
<div class="flex flex-col sm:flex-row gap-4 justify-center">
|
||||||
|
<a href="{{ route('booking') }}" class="btn-primary">
|
||||||
|
{{ __('home.cta_book') }}
|
||||||
|
</a>
|
||||||
|
<a href="#services" class="btn-secondary">
|
||||||
|
{{ __('home.cta_services') }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{{-- Services Section Placeholder --}}
|
||||||
|
<section id="services" class="py-8 sm:py-12">
|
||||||
|
<div class="container mx-auto px-4">
|
||||||
|
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 sm:gap-6 lg:gap-8">
|
||||||
<div class="bg-card p-4 sm:p-6 rounded-lg shadow-card">
|
<div class="bg-card p-4 sm:p-6 rounded-lg shadow-card">
|
||||||
<h3 class="text-lg sm:text-xl font-semibold text-text mb-2">{{ __('Expert Consultations') }}</h3>
|
<h3 class="text-lg sm:text-xl font-semibold text-text mb-2">{{ __('Expert Consultations') }}</h3>
|
||||||
<p class="text-body text-sm sm:text-base">{{ __('Professional legal advice tailored to your needs.') }}</p>
|
<p class="text-body text-sm sm:text-base">{{ __('Professional legal advice tailored to your needs.') }}</p>
|
||||||
|
|
@ -18,4 +42,5 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</section>
|
||||||
</x-layouts.public>
|
</x-layouts.public>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,80 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
test('home page is accessible', function () {
|
||||||
|
$this->get('/')
|
||||||
|
->assertOk();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('home page displays English tagline when locale is English', function () {
|
||||||
|
$this->withSession(['locale' => 'en'])
|
||||||
|
->get('/')
|
||||||
|
->assertOk()
|
||||||
|
->assertSee('Committed to Justice – Grounded in Dignity – Driven to Advocate');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('home page displays Arabic tagline when locale is Arabic', function () {
|
||||||
|
$this->withSession(['locale' => 'ar'])
|
||||||
|
->get('/')
|
||||||
|
->assertOk()
|
||||||
|
->assertSee('ملتزمون بالعدالة – متجذرون بالكرامة – مدفوعون للدفاع');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('home page displays English intro text when locale is English', function () {
|
||||||
|
$this->withSession(['locale' => 'en'])
|
||||||
|
->get('/')
|
||||||
|
->assertOk()
|
||||||
|
->assertSee('Libra for Rights is a legal institution woven from the fabric of society');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('home page displays Arabic intro text when locale is Arabic', function () {
|
||||||
|
$this->withSession(['locale' => 'ar'])
|
||||||
|
->get('/')
|
||||||
|
->assertOk()
|
||||||
|
->assertSee('ليبرا للحقوق مؤسسة قانونية منسوجة من نسيج المجتمع');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('home page displays Book a Consultation button in English', function () {
|
||||||
|
$this->withSession(['locale' => 'en'])
|
||||||
|
->get('/')
|
||||||
|
->assertOk()
|
||||||
|
->assertSee('Book a Consultation');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('home page displays Book a Consultation button in Arabic', function () {
|
||||||
|
$this->withSession(['locale' => 'ar'])
|
||||||
|
->get('/')
|
||||||
|
->assertOk()
|
||||||
|
->assertSee('احجز استشارة');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('home page displays Our Services button in English', function () {
|
||||||
|
$this->withSession(['locale' => 'en'])
|
||||||
|
->get('/')
|
||||||
|
->assertOk()
|
||||||
|
->assertSee('Our Services');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('home page displays Our Services button in Arabic', function () {
|
||||||
|
$this->withSession(['locale' => 'ar'])
|
||||||
|
->get('/')
|
||||||
|
->assertOk()
|
||||||
|
->assertSee('خدماتنا');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('home page contains link to booking page', function () {
|
||||||
|
$this->get('/')
|
||||||
|
->assertOk()
|
||||||
|
->assertSee('href="'.route('booking').'"', false);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('home page contains link to services section', function () {
|
||||||
|
$this->get('/')
|
||||||
|
->assertOk()
|
||||||
|
->assertSee('href="#services"', false);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('home page contains services section with id', function () {
|
||||||
|
$this->get('/')
|
||||||
|
->assertOk()
|
||||||
|
->assertSee('id="services"', false);
|
||||||
|
});
|
||||||
Loading…
Reference in New Issue