From 1a4c8b14e46c36f20604cdd4d264a0c2afcabe94 Mon Sep 17 00:00:00 2001 From: Simon Hamp Date: Mon, 13 Apr 2026 00:39:02 +0100 Subject: [PATCH 1/2] Transform /build-my-app into /consulting page Replace the build-my-app page with a consulting page featuring the NativePHP core team (Simon Hamp & Shane Rosenthal). Adds team bios with headshots and social links, service offerings, engagement model, agency partners section, and smooth-scrolling anchor navigation. - Add 301 redirect from /build-my-app to /consulting - Remove budget field from lead submission form and make DB column nullable - Update navigation (desktop pill, mobile menu, footer) - Update lead notifications for consulting context - Add team headshot images - Update tests for new routing and removed budget field Co-Authored-By: Claude Opus 4.6 --- app/Livewire/LeadSubmissionForm.php | 9 +- app/Notifications/LeadReceived.php | 4 +- app/Notifications/NewLeadSubmitted.php | 4 +- database/factories/LeadFactory.php | 2 +- ...4_10_100726_make_leads_budget_nullable.php | 25 + package-lock.json | 2 +- public/img/team/shanerosenthal.jpg | Bin 0 -> 20446 bytes public/img/team/simonhamp.jpg | Bin 0 -> 26758 bytes resources/views/build-my-app.blade.php | 30 - resources/views/components/footer.blade.php | 4 +- .../components/navbar/mobile-menu.blade.php | 8 +- .../views/components/navigation-bar.blade.php | 8 + resources/views/consulting.blade.php | 544 ++++++++++++++++++ .../livewire/lead-submission-form.blade.php | 33 +- routes/web.php | 3 +- tests/Feature/LeadSubmissionTest.php | 45 +- 16 files changed, 611 insertions(+), 110 deletions(-) create mode 100644 database/migrations/2026_04_10_100726_make_leads_budget_nullable.php create mode 100644 public/img/team/shanerosenthal.jpg create mode 100644 public/img/team/simonhamp.jpg delete mode 100644 resources/views/build-my-app.blade.php create mode 100644 resources/views/consulting.blade.php diff --git a/app/Livewire/LeadSubmissionForm.php b/app/Livewire/LeadSubmissionForm.php index dfd391a2..2a9d6564 100644 --- a/app/Livewire/LeadSubmissionForm.php +++ b/app/Livewire/LeadSubmissionForm.php @@ -21,8 +21,6 @@ class LeadSubmissionForm extends Component public string $description = ''; - public string $budget = ''; - public string $turnstileToken = ''; #[Locked] @@ -35,7 +33,6 @@ protected function rules(): array 'email' => ['required', 'email', 'max:255'], 'company' => ['required', 'string', 'max:255'], 'description' => ['required', 'string', 'max:5000'], - 'budget' => ['required', 'string', 'in:'.implode(',', array_keys(Lead::BUDGETS))], ]; if (config('services.turnstile.secret_key')) { @@ -48,7 +45,6 @@ protected function rules(): array public function messages(): array { return [ - 'budget.in' => 'Please select a budget range.', 'turnstileToken.required' => 'Please complete the security check.', ]; } @@ -73,7 +69,6 @@ public function submit(): void 'email' => $this->email, 'company' => $this->company, 'description' => $this->description, - 'budget' => $this->budget, 'ip_address' => request()->ip(), ]); @@ -87,8 +82,6 @@ public function submit(): void public function render() { - return view('livewire.lead-submission-form', [ - 'budgets' => Lead::BUDGETS, - ]); + return view('livewire.lead-submission-form'); } } diff --git a/app/Notifications/LeadReceived.php b/app/Notifications/LeadReceived.php index 44b8b2ab..35593058 100644 --- a/app/Notifications/LeadReceived.php +++ b/app/Notifications/LeadReceived.php @@ -21,8 +21,8 @@ public function toMail(object $notifiable): MailMessage return (new MailMessage) ->subject('Thank you for your enquiry') ->greeting("Hi {$notifiable->name},") - ->line('Thank you for reaching out to NativePHP about your app development project.') - ->line('We have received your enquiry and one of our team members will be in touch soon to discuss your requirements.') + ->line('Thank you for reaching out to NativePHP about consulting.') + ->line('We have received your enquiry and one of our team will be in touch soon to discuss your project.') ->line('In the meantime, feel free to explore our documentation or join our Discord community.') ->action('Visit NativePHP', url('/')) ->salutation('Best regards,
The NativePHP Team'); diff --git a/app/Notifications/NewLeadSubmitted.php b/app/Notifications/NewLeadSubmitted.php index c6c15b16..b057e579 100644 --- a/app/Notifications/NewLeadSubmitted.php +++ b/app/Notifications/NewLeadSubmitted.php @@ -24,13 +24,13 @@ public function via(object $notifiable): array public function toMail(object $notifiable): MailMessage { return (new MailMessage) - ->subject('New Build My App Enquiry: '.$this->lead->company) + ->subject('New Consulting Enquiry: '.$this->lead->company) ->replyTo($this->lead->email, $this->lead->name) ->greeting('New lead received!') ->line("**Name:** {$this->lead->name}") ->line("**Email:** {$this->lead->email}") ->line("**Company:** {$this->lead->company}") - ->line("**Budget:** {$this->lead->budget_label}") + ->when($this->lead->budget, fn (MailMessage $message) => $message->line("**Budget:** {$this->lead->budget_label}")) ->line('**Project Description:**') ->line($this->lead->description); } diff --git a/database/factories/LeadFactory.php b/database/factories/LeadFactory.php index e21b7279..f5b6950b 100644 --- a/database/factories/LeadFactory.php +++ b/database/factories/LeadFactory.php @@ -22,7 +22,7 @@ public function definition(): array 'email' => fake()->safeEmail(), 'company' => fake()->company(), 'description' => fake()->paragraphs(2, true), - 'budget' => fake()->randomElement(array_keys(Lead::BUDGETS)), + 'budget' => fake()->optional()->randomElement(array_keys(Lead::BUDGETS)), 'ip_address' => fake()->ipv4(), ]; } diff --git a/database/migrations/2026_04_10_100726_make_leads_budget_nullable.php b/database/migrations/2026_04_10_100726_make_leads_budget_nullable.php new file mode 100644 index 00000000..06350f1a --- /dev/null +++ b/database/migrations/2026_04_10_100726_make_leads_budget_nullable.php @@ -0,0 +1,25 @@ +string('budget')->nullable()->change(); + }); + } + + public function down(): void + { + Schema::table('leads', function (Blueprint $table) { + $table->string('budget')->nullable(false)->change(); + }); + } +}; diff --git a/package-lock.json b/package-lock.json index 67cf3e51..456d514f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "hungry-toucan", + "name": "eager-capybara", "lockfileVersion": 3, "requires": true, "packages": { diff --git a/public/img/team/shanerosenthal.jpg b/public/img/team/shanerosenthal.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d1f6f2e0359707ebea17148d99b3b01e3addec15 GIT binary patch literal 20446 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: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 U(>}(_8Jl^R?(imU;@{%`0u}@huK)l5 literal 0 HcmV?d00001 diff --git a/resources/views/build-my-app.blade.php b/resources/views/build-my-app.blade.php deleted file mode 100644 index 8f050af4..00000000 --- a/resources/views/build-my-app.blade.php +++ /dev/null @@ -1,30 +0,0 @@ - - @push('head') - @if (config('services.turnstile.site_key')) - - @endif - @endpush - -

-
-
-

- { - Build My App - } -

- -

- Need help bringing your app idea to life?
- Tell us about your project! We'd love to help. -

-
-
- -
-
- -
-
-
- diff --git a/resources/views/components/footer.blade.php b/resources/views/components/footer.blade.php index 77d3c86b..2ef40a11 100644 --- a/resources/views/components/footer.blade.php +++ b/resources/views/components/footer.blade.php @@ -244,10 +244,10 @@ class="inline-block px-px py-1.5 transition duration-300 will-change-transform h
  • - Develop + Consulting
  • diff --git a/resources/views/components/navbar/mobile-menu.blade.php b/resources/views/components/navbar/mobile-menu.blade.php index e2a6d95d..fd693e87 100644 --- a/resources/views/components/navbar/mobile-menu.blade.php +++ b/resources/views/components/navbar/mobile-menu.blade.php @@ -96,7 +96,7 @@ class="@md:grid-cols-3 grid grid-cols-2 text-xl" $isUltraActive = request()->routeIs('pricing'); $isBlogActive = request()->routeIs('blog*'); $isPartnersActive = request()->routeIs('partners*'); - $isServicesActive = request()->routeIs('build-my-app'); + $isServicesActive = request()->routeIs('consulting'); $isCourseActive = request()->routeIs('course'); $isSupportActive = request()->routeIs('support.*'); $isSponsorActive = request()->routeIs('sponsoring*'); @@ -231,10 +231,10 @@ class="size-4 shrink-0" - {{-- Services Link --}} + {{-- Consulting Link --}} diff --git a/resources/views/components/navigation-bar.blade.php b/resources/views/components/navigation-bar.blade.php index 9f04ad33..c89e1cd3 100644 --- a/resources/views/components/navigation-bar.blade.php +++ b/resources/views/components/navigation-bar.blade.php @@ -94,6 +94,14 @@ class="hidden items-center gap-1.5 rounded-full bg-emerald-500/10 px-3 py-1.5 te Masterclass + {{-- Consulting link (desktop only) --}} + + {{-- Bifrost button (visible on large screens) --}} @@ -36,7 +36,7 @@ class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue- wire:model="email" type="email" id="email" - class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm" + class="mt-1 block w-full rounded-md border-gray-300 focus:border-gray-500 focus:ring-gray-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm" > @error('email')

    {{ $message }}

    @enderror @@ -49,42 +49,25 @@ class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue- wire:model="company" type="text" id="company" - class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm" + class="mt-1 block w-full rounded-md border-gray-300 focus:border-gray-500 focus:ring-gray-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm" > @error('company')

    {{ $message }}

    @enderror
    @error('description')

    {{ $message }}

    @enderror
    -
    - - - @error('budget')

    {{ $message }}

    @enderror -
    -
    @if (config('services.turnstile.site_key'))
    diff --git a/routes/web.php b/routes/web.php index 1b1d19f1..b476bdc5 100644 --- a/routes/web.php +++ b/routes/web.php @@ -171,7 +171,8 @@ Route::view('terms-of-service', 'terms-of-service')->name('terms-of-service'); Route::view('developer-terms', 'developer-terms')->name('developer-terms'); Route::view('partners', 'partners')->name('partners'); -Route::view('build-my-app', 'build-my-app')->name('build-my-app'); +Route::redirect('build-my-app', '/consulting', 301); +Route::view('consulting', 'consulting')->name('consulting'); Route::view('the-vibes', 'the-vibes')->name('the-vibes'); // Public plugin directory routes diff --git a/tests/Feature/LeadSubmissionTest.php b/tests/Feature/LeadSubmissionTest.php index 96989f1f..cc08edf0 100644 --- a/tests/Feature/LeadSubmissionTest.php +++ b/tests/Feature/LeadSubmissionTest.php @@ -26,13 +26,21 @@ protected function setUp(): void } #[Test] - public function build_my_app_page_is_accessible(): void + public function consulting_page_is_accessible(): void { - $this->get(route('build-my-app')) + $this->get(route('consulting')) ->assertOk() ->assertSeeLivewire(LeadSubmissionForm::class); } + #[Test] + public function build_my_app_redirects_to_consulting(): void + { + $this->get('/build-my-app') + ->assertRedirect('/consulting') + ->assertStatus(301); + } + #[Test] public function lead_can_be_submitted_successfully(): void { @@ -43,7 +51,6 @@ public function lead_can_be_submitted_successfully(): void ->set('email', 'john@example.com') ->set('company', 'Acme Corp') ->set('description', 'I need a mobile app for my business.') - ->set('budget', 'less_than_5k') ->set('turnstileToken', 'test-token') ->call('submit') ->assertSet('submitted', true) @@ -54,7 +61,6 @@ public function lead_can_be_submitted_successfully(): void 'email' => 'john@example.com', 'company' => 'Acme Corp', 'description' => 'I need a mobile app for my business.', - 'budget' => 'less_than_5k', ]); Notification::assertSentTo( @@ -78,10 +84,9 @@ public function all_fields_are_required(): void ->set('email', '') ->set('company', '') ->set('description', '') - ->set('budget', '') ->set('turnstileToken', 'test-token') ->call('submit') - ->assertHasErrors(['name', 'email', 'company', 'description', 'budget']); + ->assertHasErrors(['name', 'email', 'company', 'description']); } #[Test] @@ -92,26 +97,11 @@ public function email_must_be_valid(): void ->set('email', 'not-an-email') ->set('company', 'Acme Corp') ->set('description', 'I need a mobile app.') - ->set('budget', 'less_than_5k') ->set('turnstileToken', 'test-token') ->call('submit') ->assertHasErrors(['email']); } - #[Test] - public function budget_must_be_a_valid_option(): void - { - Livewire::test(LeadSubmissionForm::class) - ->set('name', 'John Doe') - ->set('email', 'john@example.com') - ->set('company', 'Acme Corp') - ->set('description', 'I need a mobile app.') - ->set('budget', 'invalid-budget') - ->set('turnstileToken', 'test-token') - ->call('submit') - ->assertHasErrors(['budget']); - } - #[Test] public function rate_limiting_is_enforced(): void { @@ -123,7 +113,6 @@ public function rate_limiting_is_enforced(): void ->set('email', "john{$i}@example.com") ->set('company', 'Acme Corp') ->set('description', 'I need a mobile app.') - ->set('budget', 'less_than_5k') ->set('turnstileToken', 'test-token') ->call('submit') ->assertSet('submitted', true); @@ -136,7 +125,6 @@ public function rate_limiting_is_enforced(): void ->set('email', 'limited@example.com') ->set('company', 'Acme Corp') ->set('description', 'I need a mobile app.') - ->set('budget', 'less_than_5k') ->set('turnstileToken', 'test-token') ->call('submit') ->assertHasErrors(['form']); @@ -156,7 +144,6 @@ public function turnstile_validation_passes_when_secret_key_is_not_configured(): ->set('email', 'john@example.com') ->set('company', 'Acme Corp') ->set('description', 'I need a mobile app.') - ->set('budget', 'less_than_5k') ->set('turnstileToken', '') ->call('submit') ->assertSet('submitted', true); @@ -180,7 +167,6 @@ public function turnstile_validation_fails_with_invalid_token(): void ->set('email', 'john@example.com') ->set('company', 'Acme Corp') ->set('description', 'I need a mobile app.') - ->set('budget', 'less_than_5k') ->set('turnstileToken', 'invalid-token') ->call('submit') ->assertHasErrors(['turnstileToken']); @@ -206,7 +192,6 @@ public function turnstile_validation_passes_with_valid_token(): void ->set('email', 'john@example.com') ->set('company', 'Acme Corp') ->set('description', 'I need a mobile app.') - ->set('budget', 'less_than_5k') ->set('turnstileToken', 'valid-token') ->call('submit') ->assertSet('submitted', true); @@ -214,13 +199,6 @@ public function turnstile_validation_passes_with_valid_token(): void $this->assertDatabaseCount('leads', 1); } - #[Test] - public function budgets_are_passed_to_the_view(): void - { - Livewire::test(LeadSubmissionForm::class) - ->assertViewHas('budgets', Lead::BUDGETS); - } - #[Test] public function ip_address_is_recorded_with_submission(): void { @@ -231,7 +209,6 @@ public function ip_address_is_recorded_with_submission(): void ->set('email', 'john@example.com') ->set('company', 'Acme Corp') ->set('description', 'I need a mobile app.') - ->set('budget', 'less_than_5k') ->set('turnstileToken', 'test-token') ->call('submit'); From 913abe860b3812ebe74f8403d48d5a0718094276 Mon Sep 17 00:00:00 2001 From: Simon Hamp Date: Mon, 13 Apr 2026 00:42:49 +0100 Subject: [PATCH 2/2] Add New badge to Consulting nav links and hide from desktop menu Co-Authored-By: Claude Opus 4.6 --- resources/views/components/footer.blade.php | 5 ++++- resources/views/components/navbar/mobile-menu.blade.php | 9 ++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/resources/views/components/footer.blade.php b/resources/views/components/footer.blade.php index 2ef40a11..44adb8d8 100644 --- a/resources/views/components/footer.blade.php +++ b/resources/views/components/footer.blade.php @@ -247,7 +247,10 @@ class="inline-block px-px py-1.5 transition duration-300 will-change-transform h href="{{ route('consulting') }}" class="inline-block px-px py-1.5 transition duration-300 will-change-transform hover:translate-x-1 hover:text-gray-700 dark:hover:text-gray-300" > - Consulting + + Consulting + New +
  • diff --git a/resources/views/components/navbar/mobile-menu.blade.php b/resources/views/components/navbar/mobile-menu.blade.php index fd693e87..821717a6 100644 --- a/resources/views/components/navbar/mobile-menu.blade.php +++ b/resources/views/components/navbar/mobile-menu.blade.php @@ -231,8 +231,8 @@ class="size-4 shrink-0" - {{-- Consulting Link --}} -
    + {{-- Consulting Link (mobile only, shown in navbar on desktop) --}} +