diff --git a/resources/views/components/navigation-bar.blade.php b/resources/views/components/navigation-bar.blade.php
index 3161cba3..65f18de9 100644
--- a/resources/views/components/navigation-bar.blade.php
+++ b/resources/views/components/navigation-bar.blade.php
@@ -162,6 +162,28 @@ class="size-[3px] rotate-45 rounded-xs bg-gray-400 transition duration-200 dark:
Develop
+ {{-- Decorative circle --}}
+
+
+ {{-- Link --}}
+
request()->routeIs('course'),
+ 'opacity-60 hover:opacity-100' => ! request()->routeIs('course'),
+ ])
+ aria-current="{{ request()->routeIs('course') ? 'page' : 'false' }}"
+ >
+
+ Learn
+ New
+
+
+
{{-- Login/Logout --}}
@feature(App\Features\ShowAuthButtons::class)
{{-- Decorative circle --}}
diff --git a/resources/views/course.blade.php b/resources/views/course.blade.php
new file mode 100644
index 00000000..6d8c1d8e
--- /dev/null
+++ b/resources/views/course.blade.php
@@ -0,0 +1,764 @@
+
+
+ {{-- Hero Section --}}
+
+
+ {{-- Badge --}}
+
+
+
+
+
+ Early Bird Pricing Available
+
+
+ {{-- Title --}}
+
+ The
+
+ NativePHP
+
+
+ Masterclass
+
+
+ {{-- Subtitle --}}
+
+ Go from zero to published app. Learn to build native mobile
+ and desktop applications using the PHP and Laravel skills you
+ already have.
+
+
+ {{-- CTA --}}
+
+
+
+
+ {{-- What You'll Learn --}}
+
+
+
+ What You'll Learn
+
+
+ A complete curriculum taking you from setup to the app stores
+
+
+
+
+ {{-- Module 1 --}}
+
+
+
+ Getting Started
+
+
+ Install NativePHP, configure your environment for mobile
+ and desktop, and run your first native app in minutes.
+
+
+
+ {{-- Module 2 --}}
+
+
+
+ Building for Mobile
+
+
+ Build iOS and Android apps with Livewire and Blade.
+ Learn navigation patterns, gestures, and mobile-first UI.
+
+
+
+ {{-- Module 3 --}}
+
+
+
+ Building for Desktop
+
+
+ Create macOS, Windows, and Linux desktop apps. Window
+ management, menus, system tray, and file system access.
+
+
+
+ {{-- Module 4 --}}
+
+
+
+ Native APIs
+
+
+ Access the camera, push notifications, biometrics,
+ haptics, sharing, and more — all from PHP.
+
+
+
+ {{-- Module 5 --}}
+
+
+
+ Plugins & Extensibility
+
+
+ Extend your app with the NativePHP plugin ecosystem.
+ Learn to use and build plugins for custom native features.
+
+
+
+ {{-- Module 6 --}}
+
+
+
+ Deploy & Publish
+
+
+ Ship to the App Store, Google Play, and desktop platforms.
+ Use Bifrost for cloud builds and continuous deployment.
+
+
+
+
+
+ {{-- Who It's For --}}
+
+
+
+ Who Is This For?
+
+
+ This masterclass is built for developers who want to go
+ native without starting from scratch
+
+
+
+
+ {{-- Persona 1 --}}
+
+
+
+ Laravel Developers
+
+
+ You already build web apps with Laravel. Now you want to
+ ship real native mobile and desktop apps — without
+ learning Swift, Kotlin, or Dart.
+
+
+
+ {{-- Persona 2 --}}
+
+
+
+ PHP Developers
+
+
+ You know PHP inside and out. This course shows you how
+ to leverage that expertise to build apps that run natively
+ on any device.
+
+
+
+ {{-- Persona 3 --}}
+
+
+
+ Web Developers
+
+
+ Tired of being told you need to learn a completely new
+ stack for native apps? This course proves you don't.
+
+
+
+
+
+ {{-- Pricing --}}
+
+
+
+ Simple Pricing
+
+
+ One price. Full access. No subscriptions.
+
+
+
+
+
+ {{-- Badge --}}
+
+ EARLY BIRD
+
+
+
+ The NativePHP Masterclass
+
+
+
+
+ $101
+
+
+ one-time payment
+
+
+
+
+ -
+
+ Full mobile + desktop curriculum
+
+ -
+
+ Lifetime access to all content
+
+ -
+
+ Future updates included
+
+ -
+
+ Source code for all example projects
+
+ -
+
+ Access to private community
+
+
+
+
+
+
+ Early bird pricing won't last forever. Lock in the lowest price today.
+
+
+
+
+
+ {{-- Timeline / Availability --}}
+
+
+
+ When Can I Start?
+
+
+ The NativePHP Masterclass is coming Summer/Fall 2026.
+ We're putting the finishing touches on the content to make sure it's the best learning experience possible.
+
+
+ Grab the early bird price now and you'll be first in line when the doors open.
+ Sign up below to stay in the loop.
+
+
+
+
+ {{-- Email Signup --}}
+
+
+
+ Not Ready to Buy?
+
+
+ Join the waitlist and we'll let you know when the masterclass
+ launches, plus get exclusive early access content.
+
+
+
+
+
+
+
+ @auth
+ @if (request('checkout'))
+
+ @endif
+ @endauth
+
diff --git a/routes/web.php b/routes/web.php
index de78bb68..0fe44d82 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -64,6 +64,68 @@
Route::view('/', 'welcome')->name('welcome');
Route::redirect('pricing', 'blog/nativephp-for-mobile-is-now-free')->name('pricing');
Route::view('alt-pricing', 'alt-pricing')->name('alt-pricing')->middleware('signed');
+Route::view('course', 'course')->name('course');
+
+Route::post('course/checkout', function (\Illuminate\Http\Request $request) {
+ $user = $request->user();
+
+ if (! $user) {
+ session(['url.intended' => route('course', ['checkout' => 1])]);
+
+ return to_route('customer.login')
+ ->with('message', 'Please log in or create an account to complete your purchase.');
+ }
+
+ $product = \App\Models\Product::where('slug', 'nativephp-masterclass')->firstOrFail();
+
+ if ($product->isOwnedBy($user)) {
+ return to_route('course')->with('error', 'You already own this course.');
+ }
+
+ $cartService = resolve(\App\Services\CartService::class);
+ $cart = $cartService->getCart($user);
+ $cartService->addProduct($cart, $product);
+
+ $cart->load('items.product');
+ $item = $cart->items->where('product_id', $product->id)->first();
+
+ $user->createOrGetStripeCustomer();
+
+ $metadata = ['cart_id' => (string) $cart->id];
+
+ $session = \Laravel\Cashier\Cashier::stripe()->checkout->sessions->create([
+ 'mode' => 'payment',
+ 'line_items' => [[
+ 'price_data' => [
+ 'currency' => strtolower($item->currency),
+ 'unit_amount' => $item->product_price_at_addition,
+ 'product_data' => [
+ 'name' => $product->name,
+ 'description' => $product->description,
+ ],
+ ],
+ 'quantity' => 1,
+ ]],
+ 'success_url' => route('course').'?purchased=1',
+ 'cancel_url' => route('course'),
+ 'customer' => $user->stripe_id,
+ 'metadata' => $metadata,
+ 'allow_promotion_codes' => true,
+ 'billing_address_collection' => 'required',
+ 'invoice_creation' => [
+ 'enabled' => true,
+ 'invoice_data' => [
+ 'description' => 'NativePHP Masterclass Purchase',
+ 'metadata' => $metadata,
+ ],
+ ],
+ ]);
+
+ $cart->update(['stripe_checkout_session_id' => $session->id]);
+
+ return redirect($session->url);
+})->name('course.checkout');
+
Route::view('wall-of-love', 'wall-of-love')->name('wall-of-love');
Route::view('brand', 'brand')->name('brand');
Route::get('showcase/{platform?}', [App\Http\Controllers\ShowcaseController::class, 'index'])
diff --git a/tests/Feature/CoursePageTest.php b/tests/Feature/CoursePageTest.php
new file mode 100644
index 00000000..8eb19c19
--- /dev/null
+++ b/tests/Feature/CoursePageTest.php
@@ -0,0 +1,51 @@
+withoutVite()
+ ->get(route('course'))
+ ->assertStatus(200)
+ ->assertSee('The NativePHP Masterclass')
+ ->assertSee('Early Bird');
+ }
+
+ #[Test]
+ public function course_page_contains_mailcoach_signup_form(): void
+ {
+ $this
+ ->withoutVite()
+ ->get(route('course'))
+ ->assertSee('simonhamp.mailcoach.app/subscribe/', false)
+ ->assertSee('Join Waitlist');
+ }
+
+ #[Test]
+ public function course_page_contains_checkout_form(): void
+ {
+ $this
+ ->withoutVite()
+ ->get(route('course'))
+ ->assertSee(route('course.checkout'), false)
+ ->assertSee('Get Early Bird Access');
+ }
+
+ #[Test]
+ public function course_checkout_redirects_guests_to_login(): void
+ {
+ $this
+ ->post(route('course.checkout'))
+ ->assertRedirect(route('customer.login'));
+ }
+}