Skip to content

Commit 4a2d34f

Browse files
simonhampclaude
andauthored
Add NativePHP Masterclass landing page with Stripe checkout (#275)
* Add NativePHP Masterclass landing page with Stripe checkout - Create /course landing page with hero, curriculum, audience, pricing, and email signup sections - Wire up Stripe checkout for one-time $99 early bird payment using Cart/Product infrastructure - Add migration to seed Masterclass product and price in the database - Integrate Mailcoach for email waitlist signup via direct form POST - Fix null stripe_price crash in CustomerLicenseController dashboard - Add feature tests for course page Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Add Learn link to main nav, mobile menu, and footer Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Update masterclass price to $101 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Auto-submit checkout after login/registration flow Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Add availability timeline section for Summer/Fall 2026 launch Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Add New pill to Learn links and fix mobile menu on large screens Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 345a4c1 commit 4a2d34f

15 files changed

Lines changed: 1853 additions & 692 deletions

File tree

.cursor/rules/laravel-boost.mdc

Lines changed: 120 additions & 172 deletions
Large diffs are not rendered by default.

.github/copilot-instructions.md

Lines changed: 120 additions & 172 deletions
Large diffs are not rendered by default.

.junie/guidelines.md

Lines changed: 120 additions & 172 deletions
Large diffs are not rendered by default.

AGENTS.md

Lines changed: 375 additions & 0 deletions
Large diffs are not rendered by default.

CLAUDE.md

Lines changed: 120 additions & 172 deletions
Large diffs are not rendered by default.

app/Http/Controllers/CustomerLicenseController.php

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,13 @@ public function index(): View
3131
// Get subscription plan name
3232
$subscriptionName = null;
3333
if ($activeSubscription) {
34-
try {
35-
$subscriptionName = \App\Enums\Subscription::fromStripePriceId($activeSubscription->stripe_price)->name();
36-
} catch (\RuntimeException) {
34+
if ($activeSubscription->stripe_price) {
35+
try {
36+
$subscriptionName = \App\Enums\Subscription::fromStripePriceId($activeSubscription->stripe_price)->name();
37+
} catch (\RuntimeException) {
38+
$subscriptionName = ucfirst($activeSubscription->type);
39+
}
40+
} else {
3741
$subscriptionName = ucfirst($activeSubscription->type);
3842
}
3943
}

boost.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"agents": [
3+
"claude_code",
4+
"copilot",
5+
"cursor",
6+
"opencode",
7+
"phpstorm"
8+
],
9+
"guidelines": []
10+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
3+
use App\Models\Product;
4+
use App\Models\ProductPrice;
5+
use Illuminate\Database\Migrations\Migration;
6+
7+
return new class extends Migration
8+
{
9+
/**
10+
* Run the migrations.
11+
*/
12+
public function up(): void
13+
{
14+
$product = Product::create([
15+
'name' => 'The NativePHP Masterclass',
16+
'slug' => 'nativephp-masterclass',
17+
'description' => 'Go from zero to published app. Learn to build native mobile and desktop applications using the PHP and Laravel skills you already have.',
18+
'is_active' => true,
19+
'published_at' => now(),
20+
]);
21+
22+
ProductPrice::create([
23+
'product_id' => $product->id,
24+
'tier' => 'regular',
25+
'amount' => 10100,
26+
'currency' => 'USD',
27+
'is_active' => true,
28+
]);
29+
}
30+
31+
/**
32+
* Reverse the migrations.
33+
*/
34+
public function down(): void
35+
{
36+
$product = Product::where('slug', 'nativephp-masterclass')->first();
37+
38+
if ($product) {
39+
$product->prices()->delete();
40+
$product->delete();
41+
}
42+
}
43+
};

resources/views/components/footer.blade.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,17 @@ class="inline-block px-px py-1.5 transition duration-300 will-change-transform h
239239
Develop
240240
</a>
241241
</li>
242+
<li>
243+
<a
244+
href="{{ route('course') }}"
245+
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"
246+
>
247+
<span class="inline-flex items-center gap-1.5">
248+
Learn
249+
<span class="rounded-full bg-emerald-500 px-1.5 py-px text-[10px] font-bold leading-tight text-white">New</span>
250+
</span>
251+
</a>
252+
</li>
242253
<li>
243254
<a
244255
href="{{ route('wall-of-love') }}"

resources/views/components/layout.blade.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@
104104
}"
105105
x-resize="
106106
width = $width
107-
if (width >= 1024) {
107+
if (width >= 1280) {
108108
showMobileMenu = false
109109
showDocsMenu = false
110110
}

0 commit comments

Comments
 (0)