From d666b642ed10e158f97d7a509410d81b283c1b9a Mon Sep 17 00:00:00 2001 From: HassanZahirnia Date: Thu, 4 Sep 2025 15:15:51 +0330 Subject: [PATCH 1/8] =?UTF-8?q?=E2=9C=A8=20Add=20Wall=20of=20Love=20page?= =?UTF-8?q?=20and=20early=20adopter=20card=20component?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wall-of-love/early-adopter-card.blade.php | 48 +++++ resources/views/wall-of-love.blade.php | 190 ++++++++++++++++++ routes/web.php | 1 + 3 files changed, 239 insertions(+) create mode 100644 resources/views/components/wall-of-love/early-adopter-card.blade.php create mode 100644 resources/views/wall-of-love.blade.php diff --git a/resources/views/components/wall-of-love/early-adopter-card.blade.php b/resources/views/components/wall-of-love/early-adopter-card.blade.php new file mode 100644 index 00000000..870de9fb --- /dev/null +++ b/resources/views/components/wall-of-love/early-adopter-card.blade.php @@ -0,0 +1,48 @@ +@props([ + 'name' => '', + 'title' => '', + 'url' => '', + 'image' => '', + 'featured' => false, +]) + +
+ {{-- Image --}} + {{ $name }} + + {{-- Name & Title --}} +
+

+ {{ $name }} +

+

+ {{ $title }} +

+
+ + {{-- External link --}} + @if ($url) + +
Visit
+ +
+ @endif +
diff --git a/resources/views/wall-of-love.blade.php b/resources/views/wall-of-love.blade.php new file mode 100644 index 00000000..52b1eadf --- /dev/null +++ b/resources/views/wall-of-love.blade.php @@ -0,0 +1,190 @@ + + {{-- Hero Section --}} +
+
+ {{-- Blurred circle - Decorative --}} + + + {{-- Primary Heading --}} +

+
+
+ Thank +
+ +
+
+
+
+
+ You! +
+
+
Early
+
Adopters
+
+
+

+ +
+
+
+
+
+
+
+
+ + {{-- Description --}} +

+ Every great story starts with a small circle of believers. You + stood with us at the beginning, and your support will always be + part of the NativePHP story. +

+
+
+ + {{-- List --}} + @php + $earlyAdopters = [ + [ + 'name' => 'Sara Johnson', + 'url' => 'https://example.com', + 'image' => 'https://i.pravatar.cc/300?img=31', + 'title' => 'Founder at Example Co', + ], + [ + 'name' => 'Jane Smith', + 'image' => 'https://i.pravatar.cc/300?img=5', + 'title' => 'CEO at Example Inc', + 'featured' => true, + ], + [ + 'name' => 'Alice Johnson', + 'url' => 'https://example.net', + 'image' => 'https://i.pravatar.cc/300?img=7', + ], + [ + 'name' => 'Eve Wilson', + 'url' => 'https://example.edu', + 'image' => 'https://i.pravatar.cc/300?img=9', + ], + [ + 'name' => 'Charlie Davis', + 'image' => 'https://i.pravatar.cc/300?img=10', + ], + [ + 'name' => 'Bob Brown', + 'url' => 'https://example.io', + 'image' => 'https://i.pravatar.cc/300?img=11', + ], + [ + 'name' => 'Frank Miller', + 'url' => 'https://example.dev', + 'image' => 'https://i.pravatar.cc/300?img=12', + ], + [ + 'name' => 'Grace Lee', + 'image' => 'https://i.pravatar.cc/300?img=16', + ], + [ + 'name' => 'Tara Adams', + 'url' => 'https://example.app', + 'image' => 'https://i.pravatar.cc/300?img=24', + ], + [ + 'name' => 'Ivy Anderson', + 'url' => 'https://example.site', + 'image' => 'https://i.pravatar.cc/300?img=65', + ], + [ + 'name' => 'Jack Thomas', + 'image' => 'https://i.pravatar.cc/300?img=32', + ], + [ + 'name' => 'Kathy Martinez', + 'url' => 'https://example.tech', + 'image' => 'https://i.pravatar.cc/300?img=33', + ], + ]; + @endphp + +
+ @foreach ($earlyAdopters as $adopter) + + @endforeach +
+
diff --git a/routes/web.php b/routes/web.php index c154e24c..6bf7fd12 100644 --- a/routes/web.php +++ b/routes/web.php @@ -24,6 +24,7 @@ Route::view('/', 'welcome')->name('welcome'); Route::view('pricing', 'pricing')->name('pricing'); +Route::view('wall-of-love', 'wall-of-love')->name('wall-of-love'); Route::view('brand', 'brand')->name('brand'); Route::redirect('mobile', 'pricing'); Route::view('laracon-us-2025-giveaway', 'laracon-us-2025-giveaway')->name('laracon-us-2025-giveaway'); From 624f77379a74475972bce5365c20af92ac82cb42 Mon Sep 17 00:00:00 2001 From: HassanZahirnia Date: Fri, 5 Sep 2025 18:41:05 +0330 Subject: [PATCH 2/8] =?UTF-8?q?=F0=9F=92=84=20Update=20early=20adopter=20c?= =?UTF-8?q?ard=20styles=20and=20add=20featured=20attribute=20for=20specifi?= =?UTF-8?q?c=20adopters?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/components/navigation-bar.blade.php | 3 +- .../wall-of-love/early-adopter-card.blade.php | 110 +++++++++++------- resources/views/wall-of-love.blade.php | 4 +- 3 files changed, 75 insertions(+), 42 deletions(-) diff --git a/resources/views/components/navigation-bar.blade.php b/resources/views/components/navigation-bar.blade.php index 7024a9dd..28fab7f9 100644 --- a/resources/views/components/navigation-bar.blade.php +++ b/resources/views/components/navigation-bar.blade.php @@ -14,7 +14,7 @@ class="sticky top-0 z-50 flex flex-col items-center justify-center border-b px-2 }" >
{{-- Left side --}}
@@ -23,6 +23,7 @@ class="mx-auto flex w-full max-w-5xl items-center justify-between gap-5 rounded- href="/" aria-label="NativePHP Homepage" x-on:contextmenu.prevent="window.location.href = @js(route('brand'))" + class="hidden 3xs:block" >
diff --git a/resources/views/wall-of-love.blade.php b/resources/views/wall-of-love.blade.php index 52b1eadf..ae9ca6a1 100644 --- a/resources/views/wall-of-love.blade.php +++ b/resources/views/wall-of-love.blade.php @@ -142,6 +142,7 @@ class="mx-auto mt-5 max-w-2xl text-center text-base/relaxed text-gray-600 sm:tex 'name' => 'Bob Brown', 'url' => 'https://example.io', 'image' => 'https://i.pravatar.cc/300?img=11', + 'featured' => true, ], [ 'name' => 'Frank Miller', @@ -165,6 +166,7 @@ class="mx-auto mt-5 max-w-2xl text-center text-base/relaxed text-gray-600 sm:tex [ 'name' => 'Jack Thomas', 'image' => 'https://i.pravatar.cc/300?img=32', + 'featured' => true, ], [ 'name' => 'Kathy Martinez', @@ -175,7 +177,7 @@ class="mx-auto mt-5 max-w-2xl text-center text-base/relaxed text-gray-600 sm:tex @endphp
@foreach ($earlyAdopters as $adopter) Date: Fri, 5 Sep 2025 18:55:37 +0330 Subject: [PATCH 3/8] =?UTF-8?q?=E2=9C=A8=20Enhance=20early=20adopter=20car?= =?UTF-8?q?d=20animations=20and=20improve=20layout=20responsiveness?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wall-of-love/early-adopter-card.blade.php | 43 ++++++++----------- resources/views/wall-of-love.blade.php | 27 ++++++++++++ 2 files changed, 46 insertions(+), 24 deletions(-) diff --git a/resources/views/components/wall-of-love/early-adopter-card.blade.php b/resources/views/components/wall-of-love/early-adopter-card.blade.php index 794c98f8..0a976eb9 100644 --- a/resources/views/components/wall-of-love/early-adopter-card.blade.php +++ b/resources/views/components/wall-of-love/early-adopter-card.blade.php @@ -1,13 +1,13 @@ @props([ - "name" => "", - "title" => "", - "url" => "", - "image" => "", - "featured" => false, + 'name' => '', + 'title' => '', + 'url' => '', + 'image' => '', + 'featured' => false, ])
{{-- Image --}} @@ -15,26 +15,21 @@ class="group mt-3 inline-block break-inside-avoid overflow-hidden rounded-2xl te src="{{ $image }}" alt="{{ $name }}" loading="lazy" - @if ($featured) - width="229" - height="275" - @else - width="229" - height="120" - @endif + width="auto" + height="auto" @class([ - "self-center justify-self-center object-cover brightness-80 transition duration-300 [grid-area:1/-1] group-hover:brightness-100", - "aspect-[1/1.3] xl:aspect-[1/1.5]" => $featured, - "aspect-square max-h-50 grayscale group-hover:grayscale-0 xl:max-h-none" => ! $featured, + 'self-center justify-self-center object-cover brightness-80 transition duration-300 [grid-area:1/-1] group-hover:brightness-100', + 'aspect-[1/1.3] xl:aspect-[1/1.5]' => $featured, + 'aspect-square max-h-50 grayscale group-hover:grayscale-0 xl:max-h-none' => ! $featured, ]) /> {{-- Name & Title --}}
$featured, - "from-black to-transparent" => ! $featured, + 'relative z-0 w-full self-end justify-self-start bg-gradient-to-t px-4 pt-13 pb-4 text-white [grid-area:1/-1]', + 'from-blue-500 to-transparent' => $featured, + 'from-black to-transparent' => ! $featured, ]) >
$featured, + 'truncate capitalize', + 'text-lg font-medium' => $featured, ]) > {{ $name }}

$featured, - "text-xs" => ! $featured, + 'truncate capitalize opacity-50', + 'text-sm' => $featured, + 'text-xs' => ! $featured, ]) > {{ $title }} diff --git a/resources/views/wall-of-love.blade.php b/resources/views/wall-of-love.blade.php index ae9ca6a1..5b28b5ea 100644 --- a/resources/views/wall-of-love.blade.php +++ b/resources/views/wall-of-love.blade.php @@ -177,6 +177,33 @@ class="mx-auto mt-5 max-w-2xl text-center text-base/relaxed text-gray-600 sm:tex @endphp
@foreach ($earlyAdopters as $adopter) From b0c25686ebf7fd03f305d47d1d561d6b681910bc Mon Sep 17 00:00:00 2001 From: HassanZahirnia Date: Fri, 5 Sep 2025 19:20:29 +0330 Subject: [PATCH 4/8] =?UTF-8?q?=E2=99=BF=EF=B8=8F=20Refactor=20early=20ado?= =?UTF-8?q?pter=20card=20structure=20to=20use=20semantic=20HTML=20elements?= =?UTF-8?q?=20and=20improve=20accessibility?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wall-of-love/early-adopter-card.blade.php | 39 +++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/resources/views/components/wall-of-love/early-adopter-card.blade.php b/resources/views/components/wall-of-love/early-adopter-card.blade.php index 0a976eb9..f5492c16 100644 --- a/resources/views/components/wall-of-love/early-adopter-card.blade.php +++ b/resources/views/components/wall-of-love/early-adopter-card.blade.php @@ -6,17 +6,18 @@ 'featured' => false, ]) -
-
+
{{-- Image --}} {{ $name }} $featured, @@ -25,35 +26,36 @@ class="group mt-3 inline-block break-inside-avoid overflow-hidden rounded-2xl te /> {{-- Name & Title --}} -
$featured, 'from-black to-transparent' => ! $featured, ]) >

$featured, ]) + itemprop="name" > {{ $name }}

-

$featured, 'text-xs' => ! $featured, ]) + @if($title) itemprop="jobTitle" @endif > {{ $title }} -

+

-
+ {{-- External link --}} @if ($url) @@ -61,13 +63,18 @@ class="transition duration-300 ease-out will-change-transform group-hover:-trans href="{{ $url }}" target="_blank" rel="nofollow noopener noreferrer" + title="Visit {{ $name }}’s website" + aria-label="Visit {{ $name }}’s website" + itemprop="url" class="group/link mt-3 mr-3 flex items-center gap-2 self-start justify-self-end rounded-xl bg-white/70 px-3 py-1.5 opacity-0 backdrop-blur-sm transition duration-300 [grid-area:1/-1] group-hover:opacity-100 hover:bg-white/100 dark:bg-black/70 dark:hover:bg-black/100" > -
Visit
+ Visit
-
+ + From e4f76a5e7a49a40dec38574f8c6690b8439d512b Mon Sep 17 00:00:00 2001 From: HassanZahirnia Date: Fri, 5 Sep 2025 19:45:51 +0330 Subject: [PATCH 5/8] =?UTF-8?q?=F0=9F=92=84=20Update=20early=20adopter=20c?= =?UTF-8?q?ard=20image=20positioning=20and=20loading=20placeholder=20style?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wall-of-love/early-adopter-card.blade.php | 40 +++++++++++-------- resources/views/wall-of-love.blade.php | 2 +- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/resources/views/components/wall-of-love/early-adopter-card.blade.php b/resources/views/components/wall-of-love/early-adopter-card.blade.php index f5492c16..1f17fb53 100644 --- a/resources/views/components/wall-of-love/early-adopter-card.blade.php +++ b/resources/views/components/wall-of-love/early-adopter-card.blade.php @@ -11,24 +11,10 @@ class="group mt-3 inline-block break-inside-avoid overflow-hidden rounded-2xl te itemscope >
- {{-- Image --}} - {{ $title ? $name . ', ' . $title : $name }} $featured, - 'aspect-square max-h-50 grayscale group-hover:grayscale-0 xl:max-h-none' => ! $featured, - ]) - /> - {{-- Name & Title --}}
$featured, 'from-black to-transparent' => ! $featured, ]) @@ -57,6 +43,28 @@ class="capitalize transition duration-300 ease-out will-change-transform group-h
+ {{-- Image --}} + {{ $title ? $name . ', ' . $title : $name }} $featured, + 'aspect-square max-h-50 grayscale group-hover:grayscale-0 xl:max-h-none' => ! $featured, + ]) + /> + + {{-- Loading placeholder --}} + + {{-- External link --}} @if ($url)

+ {{-- Wall of Love Callout for Early Adopters --}} + + {{-- Content --}}
@if($licenses->count() > 0) diff --git a/resources/views/customer/licenses/show.blade.php b/resources/views/customer/licenses/show.blade.php index 85d88b1f..113d5773 100644 --- a/resources/views/customer/licenses/show.blade.php +++ b/resources/views/customer/licenses/show.blade.php @@ -6,18 +6,18 @@
diff --git a/resources/views/customer/wall-of-love/create.blade.php b/resources/views/customer/wall-of-love/create.blade.php new file mode 100644 index 00000000..d75fa7a8 --- /dev/null +++ b/resources/views/customer/wall-of-love/create.blade.php @@ -0,0 +1,78 @@ + +
+ {{-- Header --}} +
+
+
+ {{-- Breadcrumb --}} + + +
+

Join our Wall of Love! 💙

+

+ As an early adopter, your story matters. Share your experience with NativePHP and inspire other developers in the community. +

+
+
+
+
+ + {{-- Content --}} +
+
+
+ {{-- Success Message --}} + @if(session()->has('success')) +
+
+ + + +

{{ session('success') }}

+
+
+ @endif + + {{-- Info about early adopter status --}} +
+
+
+

+ You're an Early Adopter! +

+

+ Thank you for supporting NativePHP from the beginning. As a reward, you can appear + permanently on our + Wall of Love. +

+

+ Your submission will be reviewed by our team and, once approved, will appear + on the page. +

+
+
+
+ + {{-- Submission Form --}} + +
+
+
+
+
diff --git a/resources/views/livewire/wall-of-love-banner.blade.php b/resources/views/livewire/wall-of-love-banner.blade.php new file mode 100644 index 00000000..aaaabd02 --- /dev/null +++ b/resources/views/livewire/wall-of-love-banner.blade.php @@ -0,0 +1,32 @@ +
+ @if($this->shouldShowBanner()) +
+
+
+
+ + + +
+
+

+ Join our Wall of Love! 💙 +

+

+ As an early adopter who purchased a license before June 1st, 2025, we'd love to feature you on + our Wall of Love page. +

+
+ + Submit Your Details + + +
+
+
+
+
+ @endif +
diff --git a/resources/views/livewire/wall-of-love-submission-form.blade.php b/resources/views/livewire/wall-of-love-submission-form.blade.php new file mode 100644 index 00000000..a70d7ef0 --- /dev/null +++ b/resources/views/livewire/wall-of-love-submission-form.blade.php @@ -0,0 +1,58 @@ +
+ {{-- Name Field --}} +
+ + + @error('name')

{{ $message }}

@enderror +
+ + {{-- Company Field --}} +
+ + + @error('company')

{{ $message }}

@enderror +
+ + {{-- Photo Field --}} +
+ +
+ +
+ @error('photo')

{{ $message }}

@enderror +
+ + {{-- URL Field --}} +
+ + + @error('url')

{{ $message }}

@enderror +
+ + {{-- Testimonial Field --}} +
+ + + @error('testimonial')

{{ $message }}

@enderror +

Share what you built, how NativePHP helped you, or what you love about the framework.

+
+ +
+ + Cancel + + +
+
\ No newline at end of file diff --git a/routes/web.php b/routes/web.php index d3eef259..3828818f 100644 --- a/routes/web.php +++ b/routes/web.php @@ -116,6 +116,9 @@ Route::get('licenses/{licenseKey}', [CustomerLicenseController::class, 'show'])->name('licenses.show'); Route::patch('licenses/{licenseKey}', [CustomerLicenseController::class, 'update'])->name('licenses.update'); + // Wall of Love submission + Route::get('wall-of-love/create', [App\Http\Controllers\WallOfLoveSubmissionController::class, 'create'])->name('wall-of-love.create'); + // Billing portal Route::get('billing-portal', function (Illuminate\Http\Request $request) { $user = $request->user(); From 95860dd21a077851b37c34a898c9d36a76ede12b Mon Sep 17 00:00:00 2001 From: Simon Hamp Date: Fri, 19 Sep 2025 19:22:28 +0100 Subject: [PATCH 7/8] Update page --- resources/views/components/footer.blade.php | 8 + resources/views/wall-of-love.blade.php | 169 ++++++++------------ 2 files changed, 77 insertions(+), 100 deletions(-) diff --git a/resources/views/components/footer.blade.php b/resources/views/components/footer.blade.php index 32395ad7..a108fce6 100644 --- a/resources/views/components/footer.blade.php +++ b/resources/views/components/footer.blade.php @@ -223,6 +223,14 @@ class="inline-block px-px py-1.5 transition duration-300 will-change-transform h Partners +
  • + + Wall of Love + +
  • @feature(App\Features\ShowAuthButtons::class)
  • { - motion.inView($el, (element) => { - const children = Array.from($el.children) + @if(count($earlyAdopters) > 0) +
    - @foreach ($earlyAdopters as $adopter) - - @endforeach -
    + } + " + class="relative z-10 mt-10 grid place-items-center 2xs:block 2xs:columns-[10rem] xl:columns-[12rem]" + > + @foreach ($earlyAdopters as $adopter) + + @endforeach +
  • + @else +
    +
    +
    🚀
    +

    + Coming Soon! +

    +

    + Our early adopters will appear here soon. +

    +
    +
    + @endif From 1c38f7a6aff3b9f9fdf82931e6ee17077ac30000 Mon Sep 17 00:00:00 2001 From: Simon Hamp Date: Tue, 7 Oct 2025 16:00:40 +0100 Subject: [PATCH 8/8] Code style --- app/Filament/Resources/WallOfLoveSubmissionResource.php | 2 +- .../Pages/ListWallOfLoveSubmissions.php | 1 - app/Models/License.php | 2 +- app/Models/User.php | 1 - 4 files changed, 2 insertions(+), 4 deletions(-) diff --git a/app/Filament/Resources/WallOfLoveSubmissionResource.php b/app/Filament/Resources/WallOfLoveSubmissionResource.php index 6c4b9c1a..db0254b3 100644 --- a/app/Filament/Resources/WallOfLoveSubmissionResource.php +++ b/app/Filament/Resources/WallOfLoveSubmissionResource.php @@ -184,7 +184,7 @@ public static function getPages(): array { return [ 'index' => Pages\ListWallOfLoveSubmissions::route('/'), - //'create' => Pages\CreateWallOfLoveSubmission::route('/create'), + // 'create' => Pages\CreateWallOfLoveSubmission::route('/create'), 'edit' => Pages\EditWallOfLoveSubmission::route('/{record}/edit'), ]; } diff --git a/app/Filament/Resources/WallOfLoveSubmissionResource/Pages/ListWallOfLoveSubmissions.php b/app/Filament/Resources/WallOfLoveSubmissionResource/Pages/ListWallOfLoveSubmissions.php index 8c402b7c..55df8618 100644 --- a/app/Filament/Resources/WallOfLoveSubmissionResource/Pages/ListWallOfLoveSubmissions.php +++ b/app/Filament/Resources/WallOfLoveSubmissionResource/Pages/ListWallOfLoveSubmissions.php @@ -3,7 +3,6 @@ namespace App\Filament\Resources\WallOfLoveSubmissionResource\Pages; use App\Filament\Resources\WallOfLoveSubmissionResource; -use Filament\Actions; use Filament\Resources\Pages\ListRecords; class ListWallOfLoveSubmissions extends ListRecords diff --git a/app/Models/License.php b/app/Models/License.php index af601228..0442ad35 100644 --- a/app/Models/License.php +++ b/app/Models/License.php @@ -118,7 +118,7 @@ public function canCreateSubLicense(): bool public function isLegacy(): bool { - return !$this->subscription_item_id + return ! $this->subscription_item_id && $this->created_at->lt(Carbon::create(2025, 5, 8)); } diff --git a/app/Models/User.php b/app/Models/User.php index e9929633..e1fec6ab 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -12,7 +12,6 @@ use Illuminate\Support\Collection; use Laravel\Cashier\Billable; use Laravel\Sanctum\HasApiTokens; -use Stripe\Customer; class User extends Authenticatable implements FilamentUser {