From 8a68d64ad0941ea01924e1af2b5d802c75be74a6 Mon Sep 17 00:00:00 2001
From: Simon Hamp
Date: Wed, 8 Jul 2026 12:12:49 +0100
Subject: [PATCH 1/2] feat(the-vibes): add Jump24 sponsor, event logo, schedule
& prospectus partners
- Add Jump24 as a sponsor on /the-vibes (new logo component)
- Extract the sponsor grid into a shared, data-driven
component so /the-vibes and the prospectus share one source of truth
- Prospectus: add a "Current Partners" logo wall and a "Food & Venue Partners"
in-kind callout
- Add "The Vibes" logo (light/dark variants) to both page headers
- Add an event-day Schedule section to /the-vibes (centered timeline)
- Point the sponsor CTA to the prospectus instead of a mailto
- Add feature tests covering the pages, logo, schedule and CTA
Co-Authored-By: Claude Opus 4.8 (1M context)
---
public/img/the-vibes/logo-dark.svg | 12 +
public/img/the-vibes/logo.svg | 12 +
.../sponsors/logos/jump24.blade.php | 9 +
.../sponsors/vibes-partners.blade.php | 115 +++++++
.../views/the-vibes-prospectus.blade.php | 72 ++++-
resources/views/the-vibes.blade.php | 291 ++++++++----------
tests/Feature/TheVibesTest.php | 115 +++++++
7 files changed, 455 insertions(+), 171 deletions(-)
create mode 100644 public/img/the-vibes/logo-dark.svg
create mode 100644 public/img/the-vibes/logo.svg
create mode 100644 resources/views/components/sponsors/logos/jump24.blade.php
create mode 100644 resources/views/components/sponsors/vibes-partners.blade.php
create mode 100644 tests/Feature/TheVibesTest.php
diff --git a/public/img/the-vibes/logo-dark.svg b/public/img/the-vibes/logo-dark.svg
new file mode 100644
index 00000000..cd8e3539
--- /dev/null
+++ b/public/img/the-vibes/logo-dark.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/img/the-vibes/logo.svg b/public/img/the-vibes/logo.svg
new file mode 100644
index 00000000..aae80ddb
--- /dev/null
+++ b/public/img/the-vibes/logo.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/views/components/sponsors/logos/jump24.blade.php b/resources/views/components/sponsors/logos/jump24.blade.php
new file mode 100644
index 00000000..757c9949
--- /dev/null
+++ b/resources/views/components/sponsors/logos/jump24.blade.php
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/resources/views/components/sponsors/vibes-partners.blade.php b/resources/views/components/sponsors/vibes-partners.blade.php
new file mode 100644
index 00000000..1b8119ae
--- /dev/null
+++ b/resources/views/components/sponsors/vibes-partners.blade.php
@@ -0,0 +1,115 @@
+@php
+ $partners = [
+ [
+ 'url' => 'https://www.webmavens.com/?ref=nativephp',
+ 'name' => 'Web Mavens',
+ 'component' => 'sponsors.logos.webmavens',
+ 'class' => 'dark:fill-white',
+ ],
+ [
+ 'url' => 'https://www.nexcalia.com/?ref=nativephp',
+ 'name' => 'Nexcalia',
+ 'component' => 'sponsors.logos.nexcalia',
+ 'class' => 'text-black dark:text-white',
+ ],
+ [
+ 'url' => 'https://bifrost.nativephp.com/',
+ 'name' => 'Bifrost Technology',
+ 'component' => 'logos.bifrost',
+ 'class' => 'h-6',
+ ],
+ [
+ 'url' => 'https://beyondco.de/?utm_source=nativephp&utm_medium=logo&utm_campaign=the-vibes',
+ 'name' => 'Beyond Code',
+ 'image' => '/img/sponsors/beyondcode.webp',
+ 'imageDark' => '/img/sponsors/beyondcode-dark.webp',
+ 'width' => 160,
+ 'height' => 40,
+ ],
+ [
+ 'url' => 'https://mostlytechnical.com/',
+ 'name' => 'Mostly Technical',
+ 'image' => '/img/sponsors/mostly-technical.webp',
+ 'class' => 'h-15 w-15 rounded',
+ 'width' => 60,
+ 'height' => 60,
+ ],
+ [
+ 'url' => 'https://www.geocod.io/?utm_source=nativephp&utm_medium=sponsorship&utm_campaign=thevibes',
+ 'name' => 'Geocodio',
+ 'component' => 'sponsors.logos.geocodio',
+ ],
+ [
+ 'url' => 'https://thephp.foundation/?utm_source=nativephp&utm_medium=sponsorship&utm_campaign=thevibes',
+ 'name' => 'The PHP Foundation',
+ 'component' => 'sponsors.logos.php-foundation',
+ 'class' => 'h-15 w-15 rounded',
+ ],
+ [
+ 'url' => 'https://artisan.build/?utm_source=nativephp&utm_medium=sponsorship&utm_campaign=thevibes',
+ 'name' => 'Artisan Build',
+ 'image' => '/img/sponsors/artisan-build.webp',
+ 'imageDark' => '/img/sponsors/artisan-build-dark.webp',
+ 'width' => 160,
+ 'height' => 20,
+ ],
+ [
+ 'url' => 'https://nopticon.com/?ref=nativephp',
+ 'name' => 'Nopticon',
+ 'component' => 'sponsors.logos.nopticon',
+ 'class' => 'text-black dark:text-white',
+ ],
+ [
+ 'url' => 'https://jump24.co.uk/?ref=nativephp',
+ 'name' => 'Jump24',
+ 'component' => 'sponsors.logos.jump24',
+ 'class' => 'h-10 text-black dark:text-white',
+ ],
+ ];
+@endphp
+
+@foreach ($partners as $partner)
+
+
+ @if (isset($partner['component']))
+
+ @elseif (isset($partner['imageDark']))
+
+
+ @else
+
+ @endif
+
+ {{ $partner['name'] }}
+
+@endforeach
diff --git a/resources/views/the-vibes-prospectus.blade.php b/resources/views/the-vibes-prospectus.blade.php
index 2d5bee7e..13e4a5e8 100644
--- a/resources/views/the-vibes-prospectus.blade.php
+++ b/resources/views/the-vibes-prospectus.blade.php
@@ -7,9 +7,22 @@
PARTNER PROSPECTUS · 2026
-
@@ -122,6 +135,17 @@
+ {{-- ═══ CURRENT PARTNERS ═══ --}}
+
+ Already On Board
+ The partners already backing the first-ever NativePHP meetup. Join them.
+
+
+
+
+
+
+
{{-- ═══ PARTNERSHIP TIERS ═══ --}}
Partnership Tiers
@@ -230,6 +254,48 @@
+ {{-- ═══ IN-KIND PARTNERS: FOOD & VENUE ═══ --}}
+
+
+
+
+
Now Seeking
+
Food & Venue Partners
+
+ Beyond the tiers above, we're looking for in-kind partners to help feed and host the room.
+ Cover the catering or provide the venue and we'll give you headline-level recognition to
+ match — prominent logo placement, day-of call-outs, and our lasting gratitude.
+
+
+
+
+
+
+ Food & Drink Partner
+
+
+
+
+
+
+ Venue Partner
+
+
+
+
+
+
+
+
+ Discuss a Partnership
+
+
+
+
+
{{-- ═══ CONTACT / CTA ═══ --}}
Let's Make
diff --git a/resources/views/the-vibes.blade.php b/resources/views/the-vibes.blade.php
index d8b4d9c3..48c88659 100644
--- a/resources/views/the-vibes.blade.php
+++ b/resources/views/the-vibes.blade.php
@@ -75,10 +75,23 @@ class="inline-flex items-center gap-2 rounded-full bg-violet-100 px-4 py-1.5 tex
})
}
"
- class="mt-5 text-4xl font-extrabold md:text-5xl lg:text-6xl"
+ class="mt-5"
>
- The
- Vibes
+ The Vibes, hosted by NativePHP
+
+
{{-- Subtitle --}}
@@ -767,7 +780,7 @@ class="mt-10 grid gap-6 md:grid-cols-2"
- {{-- Sponsors Section --}}
+ {{-- Schedule Section --}}
- Sponsored By
+ Schedule
+
+ A full day of talks, great food, and time to build together.
+
+
+ @php
+ $schedule = [
+ ['time' => '9:00', 'title' => 'Doors open & Breakfast', 'detail' => 'Coffee and pastries in The Assembly'],
+ ['time' => '9:30', 'title' => 'The Future is Here', 'detail' => 'Simon & Shane', 'highlight' => true],
+ ['time' => '11:00', 'title' => 'Coffee break'],
+ ['time' => '11:15', 'title' => 'Lightning talks', 'detail' => 'Special guests'],
+ ['time' => '12:00', 'title' => 'Lunch', 'detail' => 'The Atrium'],
+ ['time' => '13:00', 'title' => 'Chill, network, vibecode, hack'],
+ ['time' => '17:00', 'title' => 'Close'],
+ ];
+ @endphp
+
diff --git a/tests/Feature/TheVibesTest.php b/tests/Feature/TheVibesTest.php
new file mode 100644
index 00000000..3211ab90
--- /dev/null
+++ b/tests/Feature/TheVibesTest.php
@@ -0,0 +1,115 @@
+get(route('the-vibes'));
+
+ $response->assertStatus(200);
+ $response->assertSee('Jump24');
+ $response->assertSee('jump24.co.uk');
+ }
+
+ /** @test */
+ public function the_vibes_page_still_lists_existing_sponsors(): void
+ {
+ $response = $this->get(route('the-vibes'));
+
+ $response->assertSee('Web Mavens');
+ $response->assertSee('Nexcalia');
+ $response->assertSee('Nopticon');
+ }
+
+ /** @test */
+ public function prospectus_shows_current_partners_including_jump24(): void
+ {
+ $response = $this->get(route('the-vibes-prospectus'));
+
+ $response->assertStatus(200);
+ $response->assertSee('Already On Board');
+ $response->assertSee('Jump24');
+ $response->assertSee('jump24.co.uk');
+ $response->assertSee('Web Mavens');
+ }
+
+ /** @test */
+ public function prospectus_advertises_food_and_venue_partners(): void
+ {
+ $response = $this->get(route('the-vibes-prospectus'));
+
+ $response->assertSee('Food & Venue Partners');
+ $response->assertSee('Food & Drink Partner');
+ $response->assertSee('Venue Partner');
+ }
+
+ /** @test */
+ public function both_pages_render_the_vibes_header_logo(): void
+ {
+ foreach (['the-vibes', 'the-vibes-prospectus'] as $route) {
+ $this->get(route($route))
+ ->assertOk()
+ ->assertSee('/img/the-vibes/logo.svg')
+ ->assertSee('/img/the-vibes/logo-dark.svg')
+ ->assertSee('The Vibes, hosted by NativePHP');
+ }
+ }
+
+ /** @test */
+ public function header_logo_assets_exist(): void
+ {
+ $this->assertFileExists(public_path('img/the-vibes/logo.svg'));
+ $this->assertFileExists(public_path('img/the-vibes/logo-dark.svg'));
+ }
+
+ /** @test */
+ public function the_vibes_sponsor_cta_links_to_the_prospectus(): void
+ {
+ $response = $this->get(route('the-vibes'));
+
+ $response->assertOk();
+ $response->assertSee('Interested in sponsoring The Vibes?');
+ $response->assertSee('View the Prospectus');
+ $response->assertSee(route('the-vibes-prospectus'), false);
+ $response->assertDontSee('The%20Vibes%20-%20Sponsorship%20Inquiry');
+ }
+
+ /** @test */
+ public function the_vibes_page_shows_the_event_schedule(): void
+ {
+ $response = $this->get(route('the-vibes'));
+
+ $response->assertOk();
+ $response->assertSee('Schedule');
+ $response->assertSee('9:00');
+ $response->assertSee('Doors open & Breakfast');
+ $response->assertSee('Coffee and pastries in The Assembly');
+ $response->assertSee('The Future is Here');
+ $response->assertSee('Simon & Shane');
+ $response->assertSee('Lightning talks');
+ $response->assertSee('Special guests');
+ $response->assertSee('Lunch');
+ $response->assertSee('The Atrium');
+ $response->assertSee('Chill, network, vibecode, hack');
+ $response->assertSee('17:00');
+ }
+}
From 241de1be5139395f1d9f833124fd3fb81d0500d9 Mon Sep 17 00:00:00 2001
From: Simon Hamp
Date: Wed, 8 Jul 2026 15:49:44 +0100
Subject: [PATCH 2/2] feat(the-vibes): add PhpStorm sponsor; remove Vibes
feature tests
- Add PhpStorm (JetBrains) as a sponsor via the shared vibes-partners
component, so it appears on both /the-vibes and the prospectus
- Add PhpStorm logo assets (light + dark wordmark variants)
- Remove tests/Feature/TheVibesTest.php
Co-Authored-By: Claude Opus 4.8 (1M context)
---
public/img/sponsors/phpstorm-dark.svg | 20 +++
public/img/sponsors/phpstorm.svg | 20 +++
.../sponsors/vibes-partners.blade.php | 8 ++
tests/Feature/TheVibesTest.php | 115 ------------------
4 files changed, 48 insertions(+), 115 deletions(-)
create mode 100644 public/img/sponsors/phpstorm-dark.svg
create mode 100644 public/img/sponsors/phpstorm.svg
delete mode 100644 tests/Feature/TheVibesTest.php
diff --git a/public/img/sponsors/phpstorm-dark.svg b/public/img/sponsors/phpstorm-dark.svg
new file mode 100644
index 00000000..19408e54
--- /dev/null
+++ b/public/img/sponsors/phpstorm-dark.svg
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/img/sponsors/phpstorm.svg b/public/img/sponsors/phpstorm.svg
new file mode 100644
index 00000000..ce562bae
--- /dev/null
+++ b/public/img/sponsors/phpstorm.svg
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/views/components/sponsors/vibes-partners.blade.php b/resources/views/components/sponsors/vibes-partners.blade.php
index 1b8119ae..670fe8bf 100644
--- a/resources/views/components/sponsors/vibes-partners.blade.php
+++ b/resources/views/components/sponsors/vibes-partners.blade.php
@@ -65,6 +65,14 @@
'component' => 'sponsors.logos.jump24',
'class' => 'h-10 text-black dark:text-white',
],
+ [
+ 'url' => 'https://www.jetbrains.com/phpstorm/?utm_source=nativephp&utm_medium=sponsorship&utm_campaign=thevibes',
+ 'name' => 'PhpStorm',
+ 'image' => '/img/sponsors/phpstorm.svg',
+ 'imageDark' => '/img/sponsors/phpstorm-dark.svg',
+ 'width' => 275,
+ 'height' => 79,
+ ],
];
@endphp
diff --git a/tests/Feature/TheVibesTest.php b/tests/Feature/TheVibesTest.php
deleted file mode 100644
index 3211ab90..00000000
--- a/tests/Feature/TheVibesTest.php
+++ /dev/null
@@ -1,115 +0,0 @@
-get(route('the-vibes'));
-
- $response->assertStatus(200);
- $response->assertSee('Jump24');
- $response->assertSee('jump24.co.uk');
- }
-
- /** @test */
- public function the_vibes_page_still_lists_existing_sponsors(): void
- {
- $response = $this->get(route('the-vibes'));
-
- $response->assertSee('Web Mavens');
- $response->assertSee('Nexcalia');
- $response->assertSee('Nopticon');
- }
-
- /** @test */
- public function prospectus_shows_current_partners_including_jump24(): void
- {
- $response = $this->get(route('the-vibes-prospectus'));
-
- $response->assertStatus(200);
- $response->assertSee('Already On Board');
- $response->assertSee('Jump24');
- $response->assertSee('jump24.co.uk');
- $response->assertSee('Web Mavens');
- }
-
- /** @test */
- public function prospectus_advertises_food_and_venue_partners(): void
- {
- $response = $this->get(route('the-vibes-prospectus'));
-
- $response->assertSee('Food & Venue Partners');
- $response->assertSee('Food & Drink Partner');
- $response->assertSee('Venue Partner');
- }
-
- /** @test */
- public function both_pages_render_the_vibes_header_logo(): void
- {
- foreach (['the-vibes', 'the-vibes-prospectus'] as $route) {
- $this->get(route($route))
- ->assertOk()
- ->assertSee('/img/the-vibes/logo.svg')
- ->assertSee('/img/the-vibes/logo-dark.svg')
- ->assertSee('The Vibes, hosted by NativePHP');
- }
- }
-
- /** @test */
- public function header_logo_assets_exist(): void
- {
- $this->assertFileExists(public_path('img/the-vibes/logo.svg'));
- $this->assertFileExists(public_path('img/the-vibes/logo-dark.svg'));
- }
-
- /** @test */
- public function the_vibes_sponsor_cta_links_to_the_prospectus(): void
- {
- $response = $this->get(route('the-vibes'));
-
- $response->assertOk();
- $response->assertSee('Interested in sponsoring The Vibes?');
- $response->assertSee('View the Prospectus');
- $response->assertSee(route('the-vibes-prospectus'), false);
- $response->assertDontSee('The%20Vibes%20-%20Sponsorship%20Inquiry');
- }
-
- /** @test */
- public function the_vibes_page_shows_the_event_schedule(): void
- {
- $response = $this->get(route('the-vibes'));
-
- $response->assertOk();
- $response->assertSee('Schedule');
- $response->assertSee('9:00');
- $response->assertSee('Doors open & Breakfast');
- $response->assertSee('Coffee and pastries in The Assembly');
- $response->assertSee('The Future is Here');
- $response->assertSee('Simon & Shane');
- $response->assertSee('Lightning talks');
- $response->assertSee('Special guests');
- $response->assertSee('Lunch');
- $response->assertSee('The Atrium');
- $response->assertSee('Chill, network, vibecode, hack');
- $response->assertSee('17:00');
- }
-}