Skip to content

Commit b7704a4

Browse files
authored
Replace consulting form with cal.com booking; restore /build-my-app (#373)
The consulting page now drives visitors straight to a paid working session via cal.com (with a discount link for Ultra and partners), removing the discovery-call funnel. /build-my-app comes back as a focused landing page for app project enquiries with the budget field restored on the lead form. - /consulting links to cal.com/team/nativephp/consult, surfaces $250/hr rate, and links Ultra/partners discount through to /pricing and /partners - Dashboard support tickets get a callout linking to the Ultra-rate cal.com link; public /support gets a generic booking callout at the bottom - /build-my-app restored as a Livewire-form-backed page with budget selector and partner/consult cross-links - Add Build entry (violet) to navbar, mobile menu, and footer; Ultra pill recoloured orange - Add "Discounted consult hourly rate" feature on the Ultra plan card - Update lead notification subject to reflect app-build context - Update tests for budget field + new routing
1 parent 2d7f073 commit b7704a4

19 files changed

Lines changed: 358 additions & 35 deletions

.cursor/rules/laravel-boost.mdc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ The Laravel Boost guidelines are specifically curated by Laravel maintainers for
1111
## Foundational Context
1212
This application is a Laravel application and its main Laravel ecosystems package & versions are below. You are an expert with them all. Ensure you abide by these specific packages & versions.
1313

14-
- php - 8.4.19
14+
- php - 8.4.20
1515
- filament/filament (FILAMENT) - v5
1616
- laravel/cashier (CASHIER) - v15
1717
- laravel/framework (LARAVEL) - v12

.github/copilot-instructions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ The Laravel Boost guidelines are specifically curated by Laravel maintainers for
88
## Foundational Context
99
This application is a Laravel application and its main Laravel ecosystems package & versions are below. You are an expert with them all. Ensure you abide by these specific packages & versions.
1010

11-
- php - 8.4.19
11+
- php - 8.4.20
1212
- filament/filament (FILAMENT) - v5
1313
- laravel/cashier (CASHIER) - v15
1414
- laravel/framework (LARAVEL) - v12

.junie/guidelines.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ The Laravel Boost guidelines are specifically curated by Laravel maintainers for
88
## Foundational Context
99
This application is a Laravel application and its main Laravel ecosystems package & versions are below. You are an expert with them all. Ensure you abide by these specific packages & versions.
1010

11-
- php - 8.4.19
11+
- php - 8.4.20
1212
- filament/filament (FILAMENT) - v5
1313
- laravel/cashier (CASHIER) - v15
1414
- laravel/framework (LARAVEL) - v12

AGENTS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ The Laravel Boost guidelines are specifically curated by Laravel maintainers for
88
## Foundational Context
99
This application is a Laravel application and its main Laravel ecosystems package & versions are below. You are an expert with them all. Ensure you abide by these specific packages & versions.
1010

11-
- php - 8.4.19
11+
- php - 8.4.20
1212
- filament/filament (FILAMENT) - v5
1313
- laravel/cashier (CASHIER) - v15
1414
- laravel/framework (LARAVEL) - v12

CLAUDE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ The Laravel Boost guidelines are specifically curated by Laravel maintainers for
88
## Foundational Context
99
This application is a Laravel application and its main Laravel ecosystems package & versions are below. You are an expert with them all. Ensure you abide by these specific packages & versions.
1010

11-
- php - 8.4.19
11+
- php - 8.4.20
1212
- filament/filament (FILAMENT) - v5
1313
- laravel/cashier (CASHIER) - v15
1414
- laravel/framework (LARAVEL) - v12

app/Livewire/LeadSubmissionForm.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ class LeadSubmissionForm extends Component
2121

2222
public string $description = '';
2323

24+
public string $budget = '';
25+
2426
public string $turnstileToken = '';
2527

2628
#[Locked]
@@ -33,6 +35,7 @@ protected function rules(): array
3335
'email' => ['required', 'email', 'max:255'],
3436
'company' => ['required', 'string', 'max:255'],
3537
'description' => ['required', 'string', 'max:5000'],
38+
'budget' => ['required', 'string', 'in:'.implode(',', array_keys(Lead::BUDGETS))],
3639
];
3740

3841
if (config('services.turnstile.secret_key')) {
@@ -45,6 +48,7 @@ protected function rules(): array
4548
public function messages(): array
4649
{
4750
return [
51+
'budget.in' => 'Please select a budget range.',
4852
'turnstileToken.required' => 'Please complete the security check.',
4953
];
5054
}
@@ -69,6 +73,7 @@ public function submit(): void
6973
'email' => $this->email,
7074
'company' => $this->company,
7175
'description' => $this->description,
76+
'budget' => $this->budget,
7277
'ip_address' => request()->ip(),
7378
]);
7479

@@ -82,6 +87,8 @@ public function submit(): void
8287

8388
public function render()
8489
{
85-
return view('livewire.lead-submission-form');
90+
return view('livewire.lead-submission-form', [
91+
'budgets' => Lead::BUDGETS,
92+
]);
8693
}
8794
}

app/Notifications/NewLeadSubmitted.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public function via(object $notifiable): array
2424
public function toMail(object $notifiable): MailMessage
2525
{
2626
return (new MailMessage)
27-
->subject('New Consulting Enquiry: '.$this->lead->company)
27+
->subject('New App Build Enquiry: '.$this->lead->company)
2828
->replyTo($this->lead->email, $this->lead->name)
2929
->greeting('New lead received!')
3030
->line("**Name:** {$this->lead->name}")

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
<x-layout title="Build My App">
2+
@push('head')
3+
<style>html { scroll-behavior: smooth; }</style>
4+
@if (config('services.turnstile.site_key'))
5+
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
6+
@endif
7+
@endpush
8+
9+
<div class="mx-auto max-w-5xl">
10+
{{-- Hero --}}
11+
<section class="mt-12">
12+
<div class="text-center">
13+
<h1
14+
x-init="
15+
() => {
16+
motion.inView($el, (element) => {
17+
motion.animate(
18+
$el,
19+
{
20+
opacity: [0, 1],
21+
x: [-10, 0],
22+
},
23+
{
24+
duration: 0.7,
25+
ease: motion.easeOut,
26+
},
27+
)
28+
})
29+
}
30+
"
31+
class="text-4xl md:text-5xl"
32+
>
33+
<span class="text-[#99ceb2] dark:text-indigo-500">{</span>
34+
<span class="font-bold">Build My App</span>
35+
<span class="text-[#99ceb2] dark:text-indigo-500">}</span>
36+
</h1>
37+
38+
<p
39+
x-init="
40+
() => {
41+
motion.inView($el, (element) => {
42+
motion.animate(
43+
$el,
44+
{
45+
opacity: [0, 1],
46+
x: [10, 0],
47+
},
48+
{
49+
duration: 0.7,
50+
ease: motion.easeOut,
51+
},
52+
)
53+
})
54+
}
55+
"
56+
class="mx-auto mt-6 max-w-2xl text-lg text-gray-600 dark:text-zinc-400"
57+
>
58+
Got an app idea? Let's build it together. The NativePHP core team partners with founders and businesses
59+
to design, build, and ship cross-platform apps with PHP and Laravel.
60+
</p>
61+
</div>
62+
</section>
63+
64+
{{-- What We Build --}}
65+
<section class="mt-20">
66+
<div
67+
x-init="
68+
() => {
69+
motion.inView($el, (element) => {
70+
motion.animate(
71+
Array.from($el.children),
72+
{
73+
y: [10, 0],
74+
opacity: [0, 1],
75+
scale: [0.9, 1],
76+
},
77+
{
78+
duration: 0.7,
79+
ease: motion.backOut,
80+
delay: motion.stagger(0.1),
81+
},
82+
)
83+
})
84+
}
85+
"
86+
class="grid gap-6 md:grid-cols-3"
87+
>
88+
<div class="rounded-2xl bg-gray-100 p-6 text-center dark:bg-[#1a1a2e]">
89+
<div class="mx-auto grid size-12 place-items-center rounded-full bg-white text-black ring-1 ring-black/5 dark:bg-gray-900 dark:text-white dark:ring-white/10">
90+
<x-icons.device-mobile-phone class="size-6" />
91+
</div>
92+
<h3 class="mt-4 text-lg font-semibold">Mobile Apps</h3>
93+
<p class="mt-2 text-sm text-gray-600 dark:text-zinc-400">
94+
iOS and Android apps built with NativePHP for Mobile, ready for the App Store and Play Store.
95+
</p>
96+
</div>
97+
98+
<div class="rounded-2xl bg-gray-100 p-6 text-center dark:bg-[#1a1a2e]">
99+
<div class="mx-auto grid size-12 place-items-center rounded-full bg-white text-black ring-1 ring-black/5 dark:bg-gray-900 dark:text-white dark:ring-white/10">
100+
<x-icons.pc class="size-6" />
101+
</div>
102+
<h3 class="mt-4 text-lg font-semibold">Desktop Apps</h3>
103+
<p class="mt-2 text-sm text-gray-600 dark:text-zinc-400">
104+
Native desktop apps for macOS, Windows, and Linux using NativePHP for Desktop.
105+
</p>
106+
</div>
107+
108+
<div class="rounded-2xl bg-gray-100 p-6 text-center dark:bg-[#1a1a2e]">
109+
<div class="mx-auto grid size-12 place-items-center rounded-full bg-white text-black ring-1 ring-black/5 dark:bg-gray-900 dark:text-white dark:ring-white/10">
110+
<x-heroicon-o-rocket-launch class="size-6" />
111+
</div>
112+
<h3 class="mt-4 text-lg font-semibold">End-to-End Delivery</h3>
113+
<p class="mt-2 text-sm text-gray-600 dark:text-zinc-400">
114+
From idea and design through to launch, marketing, and ongoing iteration. We sweat the details.
115+
</p>
116+
</div>
117+
</div>
118+
</section>
119+
120+
{{-- Form --}}
121+
<section id="enquiry-form" class="mt-24 scroll-mt-24 pb-24">
122+
<h2
123+
x-init="
124+
() => {
125+
motion.inView($el, (element) => {
126+
motion.animate(
127+
$el,
128+
{
129+
opacity: [0, 1],
130+
x: [-10, 0],
131+
},
132+
{
133+
duration: 0.7,
134+
ease: motion.easeOut,
135+
},
136+
)
137+
})
138+
}
139+
"
140+
class="text-center text-3xl font-semibold"
141+
>
142+
Tell Us About Your App
143+
</h2>
144+
<p class="mx-auto mt-4 max-w-2xl text-center text-gray-600 dark:text-zinc-400">
145+
Share your idea and rough budget. We'll be in touch to plan the next steps.
146+
</p>
147+
148+
<div class="mx-auto mt-8 max-w-2xl rounded-2xl bg-gray-100 p-8 dark:bg-[#1a1a2e] md:p-12">
149+
<livewire:lead-submission-form />
150+
</div>
151+
152+
<p class="mx-auto mt-6 max-w-2xl text-center text-sm text-gray-500 dark:text-gray-400">
153+
Just need a quick technical session?
154+
<a href="{{ route('consulting') }}" class="font-medium text-blue-600 hover:underline dark:text-blue-400">
155+
Book a consulting slot
156+
</a>
157+
instead.
158+
</p>
159+
</section>
160+
</div>
161+
</x-layout>

resources/views/components/footer.blade.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,17 @@ class="inline-block px-px py-1.5 transition duration-300 will-change-transform h
253253
</span>
254254
</a>
255255
</li>
256+
<li>
257+
<a
258+
href="{{ route('build-my-app') }}"
259+
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"
260+
>
261+
<span class="inline-flex items-center gap-1.5">
262+
Build
263+
<span class="rounded-full bg-emerald-500 px-1.5 py-px text-[10px] font-bold leading-tight text-white">New</span>
264+
</span>
265+
</a>
266+
</li>
256267
<li>
257268
<a
258269
href="{{ route('course') }}"

0 commit comments

Comments
 (0)