From b06834da51ed8f60d4e0d5f6cbe6a748c00cfa13 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Mon, 17 Aug 2026 14:13:07 +0200 Subject: [PATCH] feat(flow-php/web): social cards for blog posts and work-shop listings - GD-rendered 1200x630 og:image cards: shared CardPainter, TextWrapper, CircleAvatar, AvatarCache - blog cards carry author avatar and date; posts gain an author shown on post pages - work-shop cards carry price and category; generated per listing page - new WorkShop Listings/Category/Listing model replaces the inline twig listings array --- web/landing/.gitignore | 2 + web/landing/config/bundles.php | 4 +- web/landing/config/preload.php | 4 +- web/landing/config/services.yaml | 22 ++ web/landing/resources/fonts/Cabin-Bold.ttf | Bin 0 -> 76296 bytes web/landing/resources/fonts/Cabin-Regular.ttf | Bin 0 -> 76536 bytes web/landing/resources/fonts/OFL.txt | 93 +++++++ web/landing/resources/images/elephant.png | Bin 0 -> 156652 bytes web/landing/src/Flow/Website/Blog/Post.php | 21 +- web/landing/src/Flow/Website/Blog/Posts.php | 8 +- .../Website/Controller/BlogController.php | 8 +- .../Website/Controller/WorkShopController.php | 27 +- .../Flow/Website/SocialCard/AvatarCache.php | 57 ++++ .../Website/SocialCard/Blog/CardGenerator.php | 65 +++++ .../Flow/Website/SocialCard/CardPainter.php | 263 ++++++++++++++++++ .../Flow/Website/SocialCard/CircleAvatar.php | 103 +++++++ .../Flow/Website/SocialCard/TextWrapper.php | 71 +++++ .../SocialCard/WorkShop/CardGenerator.php | 64 +++++ .../src/Flow/Website/WorkShop/Category.php | 58 ++++ .../src/Flow/Website/WorkShop/Listing.php | 89 ++++++ .../src/Flow/Website/WorkShop/Listings.php | 186 +++++++++++++ web/landing/templates/base.html.twig | 12 +- web/landing/templates/blog/post.html.twig | 23 ++ web/landing/templates/blog/posts.html.twig | 11 +- .../templates/work-shop/_listing.html.twig | 13 + .../templates/work-shop/index.html.twig | 118 +------- .../Tests/Functional/BlogControllerTest.php | 55 ++++ .../Functional/WorkShopControllerTest.php | 49 ++++ .../Website/Tests/Mother/ListingMother.php | 61 ++++ .../Tests/Unit/SocialCard/AvatarCacheTest.php | 68 +++++ .../SocialCard/Blog/CardGeneratorTest.php | 78 ++++++ .../Tests/Unit/SocialCard/CardPainterTest.php | 53 ++++ .../Unit/SocialCard/CircleAvatarTest.php | 58 ++++ .../Tests/Unit/SocialCard/TextWrapperTest.php | 71 +++++ .../SocialCard/WorkShop/CardGeneratorTest.php | 54 ++++ .../Tests/Unit/WorkShop/CategoryTest.php | 68 +++++ .../Tests/Unit/WorkShop/ListingTest.php | 97 +++++++ .../Tests/Unit/WorkShop/ListingsTest.php | 66 +++++ 38 files changed, 1972 insertions(+), 128 deletions(-) create mode 100644 web/landing/resources/fonts/Cabin-Bold.ttf create mode 100644 web/landing/resources/fonts/Cabin-Regular.ttf create mode 100644 web/landing/resources/fonts/OFL.txt create mode 100644 web/landing/resources/images/elephant.png create mode 100644 web/landing/src/Flow/Website/SocialCard/AvatarCache.php create mode 100644 web/landing/src/Flow/Website/SocialCard/Blog/CardGenerator.php create mode 100644 web/landing/src/Flow/Website/SocialCard/CardPainter.php create mode 100644 web/landing/src/Flow/Website/SocialCard/CircleAvatar.php create mode 100644 web/landing/src/Flow/Website/SocialCard/TextWrapper.php create mode 100644 web/landing/src/Flow/Website/SocialCard/WorkShop/CardGenerator.php create mode 100644 web/landing/src/Flow/Website/WorkShop/Category.php create mode 100644 web/landing/src/Flow/Website/WorkShop/Listing.php create mode 100644 web/landing/src/Flow/Website/WorkShop/Listings.php create mode 100644 web/landing/tests/Flow/Website/Tests/Functional/BlogControllerTest.php create mode 100644 web/landing/tests/Flow/Website/Tests/Mother/ListingMother.php create mode 100644 web/landing/tests/Flow/Website/Tests/Unit/SocialCard/AvatarCacheTest.php create mode 100644 web/landing/tests/Flow/Website/Tests/Unit/SocialCard/Blog/CardGeneratorTest.php create mode 100644 web/landing/tests/Flow/Website/Tests/Unit/SocialCard/CardPainterTest.php create mode 100644 web/landing/tests/Flow/Website/Tests/Unit/SocialCard/CircleAvatarTest.php create mode 100644 web/landing/tests/Flow/Website/Tests/Unit/SocialCard/TextWrapperTest.php create mode 100644 web/landing/tests/Flow/Website/Tests/Unit/SocialCard/WorkShop/CardGeneratorTest.php create mode 100644 web/landing/tests/Flow/Website/Tests/Unit/WorkShop/CategoryTest.php create mode 100644 web/landing/tests/Flow/Website/Tests/Unit/WorkShop/ListingTest.php create mode 100644 web/landing/tests/Flow/Website/Tests/Unit/WorkShop/ListingsTest.php diff --git a/web/landing/.gitignore b/web/landing/.gitignore index 45bd3e1bdc..cd32ddf79c 100644 --- a/web/landing/.gitignore +++ b/web/landing/.gitignore @@ -4,6 +4,8 @@ build/ vendor/ var/ public/assets +public/images/blog/social/ +public/images/work-shop/social/ public/pagefind public/*.xml !public/BingSiteAuth.xml \ No newline at end of file diff --git a/web/landing/config/bundles.php b/web/landing/config/bundles.php index b81b94cdf2..672c1f05a9 100644 --- a/web/landing/config/bundles.php +++ b/web/landing/config/bundles.php @@ -1,4 +1,6 @@ - ['all' => true], diff --git a/web/landing/config/preload.php b/web/landing/config/preload.php index 380c0921a5..137ba873d1 100644 --- a/web/landing/config/preload.php +++ b/web/landing/config/preload.php @@ -1,4 +1,6 @@ -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 aK|IQSf(7j7L})+kbCA}T2txMjDER+89*#f& literal 0 HcmV?d00001 diff --git a/web/landing/resources/fonts/Cabin-Regular.ttf b/web/landing/resources/fonts/Cabin-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b56dba93af6f6cd6c1c2d9858b7b042b9218dccf GIT binary patch literal 76536 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 literal 0 HcmV?d00001 diff --git a/web/landing/resources/fonts/OFL.txt b/web/landing/resources/fonts/OFL.txt new file mode 100644 index 0000000000..a1023c05bc --- /dev/null +++ b/web/landing/resources/fonts/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2018 The Cabin Project Authors (https://github.com/impallari/Cabin.git) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/web/landing/resources/images/elephant.png b/web/landing/resources/images/elephant.png new file mode 100644 index 0000000000000000000000000000000000000000..1dcec323537bd21290af2c46a49c3f8d75edbcd8 GIT binary patch literal 156652 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 z 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 $listings + */ + public function __construct( + public string $id, + public string $heading, + public string $subtitle, + public array $listings, + ) {} + + public static function fromArray(array $data): self + { + $category = self::schema()->assert($data); + + return new self($category['id'], $category['heading'], $category['subtitle'], array_map( + static fn(array $listing): Listing => Listing::fromArray($listing, $category['heading']), + $category['listings'], + )); + } + + /** + * @return Type + */ + public static function schema(): Type + { + return type_structure([ + 'id' => type_string(), + 'heading' => type_string(), + 'subtitle' => type_string(), + 'listings' => type_list(Listing::schema()), + ]); + } +} diff --git a/web/landing/src/Flow/Website/WorkShop/Listing.php b/web/landing/src/Flow/Website/WorkShop/Listing.php new file mode 100644 index 0000000000..3807d9e437 --- /dev/null +++ b/web/landing/src/Flow/Website/WorkShop/Listing.php @@ -0,0 +1,89 @@ +, + * available: bool, + * price: null|string, + * price_note: null|string, + * badge: null|string, + * highlight: bool, + * route: null|string, + * image: null|string + * } + */ +final readonly class Listing +{ + /** + * @param list $features + */ + public function __construct( + public string $name, + public string $slug, + public string $category, + public string $blurb, + public array $features, + public bool $available, + public ?string $price = null, + public ?string $priceNote = null, + public ?string $badge = null, + public bool $highlight = false, + public ?string $route = null, + public ?string $image = null, + ) {} + + public static function fromArray(array $data, string $category): self + { + $listing = self::schema()->assert($data); + + return new self( + $listing['name'], + $listing['slug'], + $category, + $listing['blurb'], + $listing['features'], + $listing['available'], + $listing['price'], + $listing['price_note'], + $listing['badge'], + $listing['highlight'], + $listing['route'], + $listing['image'], + ); + } + + /** + * @return Type + */ + public static function schema(): Type + { + return type_structure([ + 'name' => type_string(), + 'slug' => type_string(), + 'blurb' => type_string(), + 'features' => type_list(type_string()), + 'available' => type_boolean(), + 'price' => type_optional(type_string()), + 'price_note' => type_optional(type_string()), + 'badge' => type_optional(type_string()), + 'highlight' => type_boolean(), + 'route' => type_optional(type_string()), + 'image' => type_optional(type_string()), + ]); + } +} diff --git a/web/landing/src/Flow/Website/WorkShop/Listings.php b/web/landing/src/Flow/Website/WorkShop/Listings.php new file mode 100644 index 0000000000..d787704e6b --- /dev/null +++ b/web/landing/src/Flow/Website/WorkShop/Listings.php @@ -0,0 +1,186 @@ + */ + private array $categories = [ + [ + 'id' => 'blueprints', + 'heading' => 'Blueprints', + 'subtitle' => 'Working applications you can clone, run and pull apart. Read how the pieces fit together, then build your own on top.', + 'listings' => [ + [ + 'name' => 'Symfony Backoffice Blueprint', + 'slug' => 'symfony-backoffice', + 'blurb' => 'A working Symfony back office built on Flow PHP. One schema per model drives the database, the API and the imports, and every request is traced from the browser down to the SQL query.', + 'features' => [ + 'Schema drives the database, API and imports', + 'Streaming CSV, JSON and XML exports', + 'OpenTelemetry across browser and backend', + ], + 'available' => true, + 'price' => '$59', + 'price_note' => null, + 'badge' => null, + 'highlight' => false, + 'route' => 'work_shop_blueprint_symfony', + 'image' => 'images/work-shop/symfony-backoffice-app.png', + ], + [ + 'name' => 'More Blueprints', + 'slug' => 'more-blueprints', + 'blurb' => 'The Symfony back office is the first one. More are being built, same standards, different frameworks and different problems.', + 'features' => [ + 'Fully tested and statically analysed', + 'Something you want to see? Let us know', + ], + 'available' => false, + 'price' => null, + 'price_note' => null, + 'badge' => null, + 'highlight' => false, + 'route' => null, + 'image' => null, + ], + ], + ], + [ + 'id' => 'ai', + 'heading' => 'AI', + 'subtitle' => 'Claude Code plugins that make your agent work the way this codebase is built: planned tasks, gated reviews, and PHP quality rules that load themselves.', + 'listings' => [ + [ + 'name' => 'Claude Code Skills', + 'slug' => 'claude-skills', + 'blurb' => 'Two Claude Code plugins from one private marketplace: a task-driven engineering workflow with eleven gated skills, and PHP code-quality skills that auto-load whenever Claude touches PHP.', + 'features' => [ + 'Plan, implement, clean up and review through gated skills', + 'Findings survive adversarial verification before you see them', + 'Type narrowing and testing rules that load themselves', + ], + 'available' => true, + 'price' => '$10', + 'price_note' => null, + 'badge' => null, + 'highlight' => false, + 'route' => 'work_shop_ai_claude_skills', + 'image' => 'images/work-shop/claude-skills.svg', + ], + ], + ], + [ + 'id' => 'sponsoring', + 'heading' => 'Sponsoring', + 'subtitle' => 'Flow PHP is MIT and free. Sponsoring funds the work that keeps it that way, and gets you into the sponsor-only channels on our Discord.', + 'listings' => [ + [ + 'name' => 'Sponsoring — 1 Month', + 'slug' => 'sponsoring-1-month', + 'blurb' => 'A small monthly contribution towards maintenance, releases and infrastructure. In exchange: the Sponsor role on our Discord — a custom username color and the exclusive channels where the roadmap happens.', + 'features' => [ + 'Sponsor role with a custom username color', + 'Access to exclusive sponsor-only channels', + 'Renews monthly, cancel anytime', + ], + 'available' => true, + 'price' => '$5', + 'price_note' => null, + 'badge' => null, + 'highlight' => false, + 'route' => 'work_shop_sponsoring_1m', + 'image' => 'images/work-shop/sponsoring-1m.svg', + ], + [ + 'name' => 'Sponsoring — 6 Months', + 'slug' => 'sponsoring-6-months', + 'blurb' => 'The same sponsorship in one payment every six months, 3% off the monthly price. The Sponsor role, a custom username color and the exclusive channels included.', + 'features' => [ + 'Everything from the monthly sponsorship', + 'Save 3% vs paying monthly', + 'Renews every 6 months, cancel anytime', + ], + 'available' => true, + 'price' => '$29', + 'price_note' => 'save 3%', + 'badge' => 'Best value', + 'highlight' => true, + 'route' => 'work_shop_sponsoring_6m', + 'image' => 'images/work-shop/sponsoring-6m.svg', + ], + [ + 'name' => 'Sponsoring — 12 Months', + 'slug' => 'sponsoring-12-months', + 'blurb' => 'A full year of sponsoring in one payment, 8% off the monthly price. The Sponsor role, a custom username color and the exclusive channels included.', + 'features' => [ + 'Everything from the monthly sponsorship', + 'Save 8% vs paying monthly', + 'Renews every 12 months, cancel anytime', + ], + 'available' => true, + 'price' => '$55', + 'price_note' => 'save 8%', + 'badge' => null, + 'highlight' => false, + 'route' => 'work_shop_sponsoring_12m', + 'image' => 'images/work-shop/sponsoring-12m.svg', + ], + ], + ], + [ + 'id' => 'consulting', + 'heading' => 'Consulting', + 'subtitle' => 'Data engineering, architecture and observability work, from a two day workshop to a fractional architect on your team.', + 'listings' => [ + [ + 'name' => 'Consulting', + 'slug' => 'consulting', + 'blurb' => 'Sixteen years of data engineering, software architecture and observability work, from pipelines that hold up to APM bills that come down.', + 'features' => [ + 'Data engineering, architecture, observability', + 'Workshops, fractional architect, or hands-on build', + 'Quoted per engagement, first call free', + ], + 'available' => true, + 'price' => null, + 'price_note' => null, + 'badge' => null, + 'highlight' => false, + 'route' => 'work_shop_consulting', + 'image' => 'images/work-shop/consulting.jpg', + ], + ], + ], + ]; + + /** + * @return list + */ + public function all(): array + { + return array_map(Category::fromArray(...), $this->categories); + } + + public function findBySlug(string $slug): Listing + { + foreach ($this->all() as $category) { + foreach ($category->listings as $listing) { + if ($listing->slug === $slug) { + return $listing; + } + } + } + + throw new InvalidArgumentException('Listing not found: ' . $slug); + } +} diff --git a/web/landing/templates/base.html.twig b/web/landing/templates/base.html.twig index a42ca6aca5..dd4f03b3e8 100644 --- a/web/landing/templates/base.html.twig +++ b/web/landing/templates/base.html.twig @@ -28,15 +28,17 @@ - + - - - + {% block social_image %} + + + + + {% endblock %} - diff --git a/web/landing/templates/blog/post.html.twig b/web/landing/templates/blog/post.html.twig index f6678149c1..2dccd658f4 100644 --- a/web/landing/templates/blog/post.html.twig +++ b/web/landing/templates/blog/post.html.twig @@ -8,6 +8,17 @@ {{ post.description }} {%- endblock -%} +{%- block og_type -%}article{%- endblock -%} + +{% block social_image %} + + + + + + +{% endblock %} + {%- block hero -%}{%- endblock -%} {% block main %} @@ -27,6 +38,18 @@ RSS +
    + + {{ post.author }} + +
    + @{{ post.author }} + +
    +
    {{ block('article') }} diff --git a/web/landing/templates/blog/posts.html.twig b/web/landing/templates/blog/posts.html.twig index 6f42e2f970..e40b0fe247 100644 --- a/web/landing/templates/blog/posts.html.twig +++ b/web/landing/templates/blog/posts.html.twig @@ -32,9 +32,14 @@ {% for post in posts %} {% set postUrl = path('blog_post', {date: post.date | date('Y-m-d'), slug: post.slug}) %}
    - +
    + + + {{ post.author }} + +

    {{ post.title }} diff --git a/web/landing/templates/work-shop/_listing.html.twig b/web/landing/templates/work-shop/_listing.html.twig index 88fe8aa510..a09516fd3b 100644 --- a/web/landing/templates/work-shop/_listing.html.twig +++ b/web/landing/templates/work-shop/_listing.html.twig @@ -21,6 +21,19 @@ {%- block description -%}{{ listing_tagline|default('The Flow PHP Work-Shop. Blueprints and consulting for teams building with Flow.') }}{%- endblock -%} +{% block social_image %} + {% if social_image is defined %} + + + + + + + {% else %} + {{ parent() }} + {% endif %} +{% endblock %} + {%- block hero -%}{%- endblock -%} {# The Work-Shop is a commercial offer by the maintainer, not a community effort. #} diff --git a/web/landing/templates/work-shop/index.html.twig b/web/landing/templates/work-shop/index.html.twig index ffd50cd5fe..5aa0de8460 100644 --- a/web/landing/templates/work-shop/index.html.twig +++ b/web/landing/templates/work-shop/index.html.twig @@ -14,100 +14,6 @@ {%- block contributors -%}{%- endblock -%} {% block main %} - {% set categories = [ - { - id: 'blueprints', - heading: 'Blueprints', - subtitle: 'Working applications you can clone, run and pull apart. Read how the pieces fit together, then build your own on top.', - listings: [ - { - name: 'Symfony Backoffice Blueprint', - price: '$59', - href: path('work_shop_blueprint_symfony'), - image: asset('images/work-shop/symfony-backoffice-app.png'), - blurb: 'A working Symfony back office built on Flow PHP. One schema per model drives the database, the API and the imports, and every request is traced from the browser down to the SQL query.', - features: ['Schema drives the database, API and imports', 'Streaming CSV, JSON and XML exports', 'OpenTelemetry across browser and backend'], - available: true - }, - { - name: 'More Blueprints', - blurb: 'The Symfony back office is the first one. More are being built, same standards, different frameworks and different problems.', - features: ['Fully tested and statically analysed', 'Something you want to see? Let us know'], - available: false - } - ] - }, - { - id: 'ai', - heading: 'AI', - subtitle: 'Claude Code plugins that make your agent work the way this codebase is built: planned tasks, gated reviews, and PHP quality rules that load themselves.', - listings: [ - { - name: 'Claude Code Skills', - price: '$10', - href: path('work_shop_ai_claude_skills'), - image: asset('images/work-shop/claude-skills.svg'), - blurb: 'Two Claude Code plugins from one private marketplace: a task-driven engineering workflow with eleven gated skills, and PHP code-quality skills that auto-load whenever Claude touches PHP.', - features: ['Plan, implement, clean up and review through gated skills', 'Findings survive adversarial verification before you see them', 'Type narrowing and testing rules that load themselves'], - available: true - } - ] - }, - { - id: 'sponsoring', - heading: 'Sponsoring', - subtitle: 'Flow PHP is MIT and free. Sponsoring funds the work that keeps it that way, and gets you into the sponsor-only channels on our Discord.', - listings: [ - { - name: 'Sponsoring — 1 Month', - price: '$5', - href: path('work_shop_sponsoring_1m'), - image: asset('images/work-shop/sponsoring-1m.svg'), - blurb: 'A small monthly contribution towards maintenance, releases and infrastructure. In exchange: the Sponsor role on our Discord — a custom username color and the exclusive channels where the roadmap happens.', - features: ['Sponsor role with a custom username color', 'Access to exclusive sponsor-only channels', 'Renews monthly, cancel anytime'], - available: true - }, - { - name: 'Sponsoring — 6 Months', - price: '$29', - price_note: 'save 3%', - badge: 'Best value', - highlight: true, - href: path('work_shop_sponsoring_6m'), - image: asset('images/work-shop/sponsoring-6m.svg'), - blurb: 'The same sponsorship in one payment every six months, 3% off the monthly price. The Sponsor role, a custom username color and the exclusive channels included.', - features: ['Everything from the monthly sponsorship', 'Save 3% vs paying monthly', 'Renews every 6 months, cancel anytime'], - available: true - }, - { - name: 'Sponsoring — 12 Months', - price: '$55', - price_note: 'save 8%', - href: path('work_shop_sponsoring_12m'), - image: asset('images/work-shop/sponsoring-12m.svg'), - blurb: 'A full year of sponsoring in one payment, 8% off the monthly price. The Sponsor role, a custom username color and the exclusive channels included.', - features: ['Everything from the monthly sponsorship', 'Save 8% vs paying monthly', 'Renews every 12 months, cancel anytime'], - available: true - } - ] - }, - { - id: 'consulting', - heading: 'Consulting', - subtitle: 'Data engineering, architecture and observability work, from a two day workshop to a fractional architect on your team.', - listings: [ - { - name: 'Consulting', - href: path('work_shop_consulting'), - image: asset('images/work-shop/consulting.jpg'), - blurb: 'Sixteen years of data engineering, software architecture and observability work, from pipelines that hold up to APM bills that come down.', - features: ['Data engineering, architecture, observability', 'Workshops, fractional architect, or hands-on build', 'Quoted per engagement, first call free'], - available: true - } - ] - } - ] %} -
    @@ -154,17 +60,17 @@
    {% for listing in category.listings %} - {# Listings without a href are placeholders, so they render as plain cards. #} - {% set tag = listing.href is defined ? 'a' : 'div' %} - <{{ tag }} {% if listing.href is defined %}href="{{ listing.href }}"{% endif %} + {# Listings without a route are placeholders, so they render as plain cards. #} + {% set tag = listing.route ? 'a' : 'div' %} + <{{ tag }} {% if listing.route %}href="{{ path(listing.route) }}"{% endif %} class="card group flex flex-col no-underline hover:no-underline - {{ listing.href is defined + {{ listing.route ? 'card-hover transition duration-200 hover:-translate-y-1 hover:shadow-xl hover:shadow-black/5 dark:hover:shadow-black/40' : 'border-dashed bg-transparent opacity-60 saturate-0 dark:bg-transparent' }} - {{ listing.highlight|default(false) ? 'ring-2 ring-emerald-600/40 dark:ring-emerald-400/40' }}"> + {{ listing.highlight ? 'ring-2 ring-emerald-600/40 dark:ring-emerald-400/40' }}">
    - {% if listing.image is defined %} - {{ listing.name }} {% else %}
    @@ -174,7 +80,7 @@

    {{ listing.name }}

    - {% if listing.badge is defined %} + {% if listing.badge %} {{ listing.badge }} @@ -197,18 +103,18 @@
    - {% if listing.price is defined %} + {% if listing.price %} {{ listing.price }} excl. tax - {% if listing.price_note is defined %} + {% if listing.priceNote %} - {{ listing.price_note }} + {{ listing.priceNote }} {% endif %} {% endif %} - {% if listing.href is defined %} + {% if listing.route %} View details diff --git a/web/landing/tests/Flow/Website/Tests/Functional/BlogControllerTest.php b/web/landing/tests/Flow/Website/Tests/Functional/BlogControllerTest.php new file mode 100644 index 0000000000..8f2a9f216b --- /dev/null +++ b/web/landing/tests/Flow/Website/Tests/Functional/BlogControllerTest.php @@ -0,0 +1,55 @@ +request('GET', '/blog'); + + self::assertResponseIsSuccessful(); + static::assertStringContainsString( + (new Posts())->all()[0]->title, + $crawler->filter('article h2')->first()->text(), + ); + } + + public function test_blog_post_page_generates_social_card_and_points_open_graph_image_to_it(): void + { + $post = (new Posts())->all()[0]; + $socialCardPath = sprintf('/images/blog/social/%s-%s.png', $post->date->format('Y-m-d'), $post->slug); + + $client = self::createClient(); + $crawler = $client->request('GET', sprintf('/blog/%s/%s', $post->date->format('Y-m-d'), $post->slug)); + + self::assertResponseIsSuccessful(); + static::assertStringEndsWith( + $socialCardPath, + (string) $crawler->filter('meta[property="og:image"]')->attr('content'), + ); + static::assertStringEndsWith( + $socialCardPath, + (string) $crawler->filter('meta[name="twitter:image"]')->attr('content'), + ); + static::assertSame('article', $crawler->filter('meta[property="og:type"]')->attr('content')); + static::assertFileExists(dirname(__DIR__, levels: 5) . '/public' . $socialCardPath); + } + + #[Override] + protected static function getKernelClass(): string + { + return Kernel::class; + } +} diff --git a/web/landing/tests/Flow/Website/Tests/Functional/WorkShopControllerTest.php b/web/landing/tests/Flow/Website/Tests/Functional/WorkShopControllerTest.php index 1d9199dba5..68cee91d39 100644 --- a/web/landing/tests/Flow/Website/Tests/Functional/WorkShopControllerTest.php +++ b/web/landing/tests/Flow/Website/Tests/Functional/WorkShopControllerTest.php @@ -9,6 +9,7 @@ use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; use Symfony\Component\Routing\RouterInterface; +use function dirname; use function Flow\Types\DSL\type_instance_of; final class WorkShopControllerTest extends WebTestCase @@ -384,6 +385,54 @@ public function test_symfony_backoffice_has_carousel_and_covered_features(): voi static::assertGreaterThan(1, $crawler->filter('[data-work-shop-carousel-target="slide"]')->count()); } + public function test_listing_pages_generate_social_cards_and_point_open_graph_image_to_them(): void + { + $client = self::createClient(); + + $pages = [ + '/work-shop/blueprints/symfony-backoffice' => '/images/work-shop/social/symfony-backoffice.png', + '/work-shop/ai/claude-skills' => '/images/work-shop/social/claude-skills.png', + '/work-shop/sponsoring/1-month' => '/images/work-shop/social/sponsoring-1-month.png', + '/work-shop/sponsoring/6-months' => '/images/work-shop/social/sponsoring-6-months.png', + '/work-shop/sponsoring/12-months' => '/images/work-shop/social/sponsoring-12-months.png', + '/work-shop/consulting' => '/images/work-shop/social/consulting.png', + ]; + + foreach ($pages as $path => $socialCardPath) { + $crawler = $client->request('GET', $path); + + self::assertResponseIsSuccessful(); + static::assertStringEndsWith( + $socialCardPath, + (string) $crawler->filter('meta[property="og:image"]')->attr('content'), + $path, + ); + static::assertStringEndsWith( + $socialCardPath, + (string) $crawler->filter('meta[name="twitter:image"]')->attr('content'), + $path, + ); + static::assertFileExists(dirname(__DIR__, levels: 5) . '/public' . $socialCardPath, $path); + } + } + + public function test_non_listing_work_shop_pages_keep_the_default_social_image(): void + { + $client = self::createClient(); + + foreach (['/work-shop', '/work-shop/blueprints/how-it-works', '/work-shop/ai/how-it-works'] as $path) { + $crawler = $client->request('GET', $path); + + self::assertResponseIsSuccessful(); + // The default banner is served through the asset mapper, so its filename carries a content hash. + static::assertMatchesRegularExpression( + '#/assets/images/banner-[0-9a-f]+\.png$#', + (string) $crawler->filter('meta[property="og:image"]')->attr('content'), + $path, + ); + } + } + #[Override] protected static function getKernelClass(): string { diff --git a/web/landing/tests/Flow/Website/Tests/Mother/ListingMother.php b/web/landing/tests/Flow/Website/Tests/Mother/ListingMother.php new file mode 100644 index 0000000000..f110d50f32 --- /dev/null +++ b/web/landing/tests/Flow/Website/Tests/Mother/ListingMother.php @@ -0,0 +1,61 @@ + 'More Blueprints', + 'slug' => 'more-blueprints', + 'blurb' => 'More are being built, same standards, different frameworks and different problems.', + 'features' => ['Fully tested and statically analysed'], + 'available' => false, + 'price' => null, + 'price_note' => null, + 'badge' => null, + 'highlight' => false, + 'route' => null, + 'image' => null, + ], 'Blueprints'); + } + + public static function priced(): Listing + { + return Listing::fromArray([ + 'name' => 'Symfony Backoffice Blueprint', + 'slug' => 'symfony-backoffice', + 'blurb' => 'A working Symfony back office built on Flow PHP. One schema per model drives the database, the API and the imports.', + 'features' => ['Schema drives the database, API and imports'], + 'available' => true, + 'price' => '$59', + 'price_note' => null, + 'badge' => null, + 'highlight' => false, + 'route' => 'work_shop_blueprint_symfony', + 'image' => 'images/work-shop/symfony-backoffice-app.png', + ], 'Blueprints'); + } + + public static function unpriced(): Listing + { + return Listing::fromArray([ + 'name' => 'Consulting', + 'slug' => 'consulting', + 'blurb' => 'Sixteen years of data engineering, software architecture and observability work.', + 'features' => ['Data engineering, architecture, observability'], + 'available' => true, + 'price' => null, + 'price_note' => null, + 'badge' => null, + 'highlight' => false, + 'route' => 'work_shop_consulting', + 'image' => 'images/work-shop/consulting.jpg', + ], 'Consulting'); + } +} diff --git a/web/landing/tests/Flow/Website/Tests/Unit/SocialCard/AvatarCacheTest.php b/web/landing/tests/Flow/Website/Tests/Unit/SocialCard/AvatarCacheTest.php new file mode 100644 index 0000000000..614bbdcd26 --- /dev/null +++ b/web/landing/tests/Flow/Website/Tests/Unit/SocialCard/AvatarCacheTest.php @@ -0,0 +1,68 @@ +fetch('norberttech')); + static::assertStringEqualsFile($cacheDir . '/norberttech.png', $avatar); + } + + public function test_returns_already_cached_avatar_without_fetching(): void + { + $cacheDir = sys_get_temp_dir() . '/' . uniqid('avatar-cache-', more_entropy: true); + mkdir($cacheDir, permissions: 0o755, recursive: true); + file_put_contents($cacheDir . '/norberttech.png', data: 'cached-bytes'); + + $cache = new AvatarCache(new MockHttpClient([]), $cacheDir); + + static::assertSame($cacheDir . '/norberttech.png', $cache->fetch('norberttech')); + static::assertStringEqualsFile($cacheDir . '/norberttech.png', 'cached-bytes'); + } + + public function test_returns_null_when_fetch_fails(): void + { + $cacheDir = sys_get_temp_dir() . '/' . uniqid('avatar-cache-', more_entropy: true); + + $cache = new AvatarCache(new MockHttpClient(new MockResponse('', ['http_code' => 404])), $cacheDir); + + static::assertNull($cache->fetch('norberttech')); + static::assertFalse(file_exists($cacheDir . '/norberttech.png')); + } + + public function test_returns_null_when_response_is_not_an_image(): void + { + $cacheDir = sys_get_temp_dir() . '/' . uniqid('avatar-cache-', more_entropy: true); + + $cache = new AvatarCache(new MockHttpClient(new MockResponse('Not Found')), $cacheDir); + + static::assertNull($cache->fetch('norberttech')); + static::assertFalse(file_exists($cacheDir . '/norberttech.png')); + } +} diff --git a/web/landing/tests/Flow/Website/Tests/Unit/SocialCard/Blog/CardGeneratorTest.php b/web/landing/tests/Flow/Website/Tests/Unit/SocialCard/Blog/CardGeneratorTest.php new file mode 100644 index 0000000000..7b0601a6a2 --- /dev/null +++ b/web/landing/tests/Flow/Website/Tests/Unit/SocialCard/Blog/CardGeneratorTest.php @@ -0,0 +1,78 @@ + 404])), $publicDir . '/avatars'), + $publicDir, + ); + $post = Post::fromArray([ + 'title' => 'Consuming APIs Without SDKs', + 'description' => 'How to consume any HTTP API with the Flow PHP DataFrame API, without vendor SDKs.', + 'date' => '2026-08-14', + 'slug' => 'consuming-apis-without-sdks', + 'author' => 'norberttech', + ]); + + $path = $generator->generate($post); + + static::assertSame('/images/blog/social/2026-08-14-consuming-apis-without-sdks.png', $path); + static::assertFileExists($publicDir . $path); + static::assertSame( + [1200, 630, IMAGETYPE_PNG], + array_slice((array) getimagesize($publicDir . $path), offset: 0, length: 3), + ); + + unlink($publicDir . $path); + } + + public function test_generates_a_card_for_a_long_title_and_description(): void + { + $publicDir = sys_get_temp_dir() . '/' . uniqid('social-card-', more_entropy: true); + $generator = new CardGenerator( + new CardPainter(dirname(__DIR__, levels: 7) . '/resources'), + new AvatarCache(new MockHttpClient(new MockResponse('', ['http_code' => 404])), $publicDir . '/avatars'), + $publicDir, + ); + $post = Post::fromArray([ + 'title' => 'A Very Long Blog Post Title That Definitely Does Not Fit Into A Single Line Of The Social Card And Must Be Wrapped And Ellipsized', + 'description' => 'An equally long description that goes on and on about data processing, extractors, transformers, loaders, schema inference, type systems and everything else that makes Flow PHP a unified data processing framework.', + 'date' => '2026-08-14', + 'slug' => 'long-title', + 'author' => 'norberttech', + ]); + + $path = $generator->generate($post); + + static::assertFileExists($publicDir . $path); + static::assertSame( + [1200, 630, IMAGETYPE_PNG], + array_slice((array) getimagesize($publicDir . $path), offset: 0, length: 3), + ); + + unlink($publicDir . $path); + } +} diff --git a/web/landing/tests/Flow/Website/Tests/Unit/SocialCard/CardPainterTest.php b/web/landing/tests/Flow/Website/Tests/Unit/SocialCard/CardPainterTest.php new file mode 100644 index 0000000000..37690b6249 --- /dev/null +++ b/web/landing/tests/Flow/Website/Tests/Unit/SocialCard/CardPainterTest.php @@ -0,0 +1,53 @@ +canvas(); + + static::assertSame(CardPainter::WIDTH, imagesx($canvas)); + static::assertSame(CardPainter::HEIGHT, imagesy($canvas)); + static::assertSame(0x26_2238, imagecolorat($canvas, x: 10, y: 0)); + static::assertNotSame( + imagecolorat($canvas, x: 10, y: 0), + imagecolorat($canvas, x: 10, y: CardPainter::HEIGHT - 1), + ); + } + + public function test_draw_title_moves_the_baseline_further_down_for_longer_titles(): void + { + $painter = new CardPainter(dirname(__DIR__, levels: 6) . '/resources'); + + $shortTitleBaseline = $painter->drawTitle($painter->canvas(), 'Short'); + $longTitleBaseline = $painter->drawTitle( + $painter->canvas(), + 'A Considerably Longer Blog Post Title That Wraps Into Multiple Lines', + ); + + static::assertGreaterThan($shortTitleBaseline, $longTitleBaseline); + } + + public function test_drawing_changes_canvas_pixels(): void + { + $painter = new CardPainter(dirname(__DIR__, levels: 6) . '/resources'); + $canvas = $painter->canvas(); + + $before = imagecolorat($canvas, x: 0, y: CardPainter::HEIGHT - 2); + $painter->drawAccentBar($canvas); + + static::assertNotSame($before, imagecolorat($canvas, x: 0, y: CardPainter::HEIGHT - 2)); + } +} diff --git a/web/landing/tests/Flow/Website/Tests/Unit/SocialCard/CircleAvatarTest.php b/web/landing/tests/Flow/Website/Tests/Unit/SocialCard/CircleAvatarTest.php new file mode 100644 index 0000000000..f6c7dfebd9 --- /dev/null +++ b/web/landing/tests/Flow/Website/Tests/Unit/SocialCard/CircleAvatarTest.php @@ -0,0 +1,58 @@ +draw($canvas, $workDir . '/avatar.png', x: 10, y: 10, size: 48)); + static::assertSame(0xFF_0000, imagecolorat($canvas, x: 34, y: 34)); + } + + public function test_returns_false_for_missing_avatar_file(): void + { + $canvas = imagecreatetruecolor(width: 100, height: 100); + static::assertNotFalse($canvas); + + static::assertFalse((new CircleAvatar())->draw($canvas, '/nonexistent/avatar.png', x: 0, y: 0, size: 48)); + } + + public function test_returns_false_for_a_file_that_is_not_an_image(): void + { + $workDir = sys_get_temp_dir() . '/' . uniqid('circle-avatar-', more_entropy: true); + mkdir($workDir, permissions: 0o755, recursive: true); + file_put_contents($workDir . '/avatar.png', data: 'not-an-image'); + + $canvas = imagecreatetruecolor(width: 100, height: 100); + static::assertNotFalse($canvas); + + static::assertFalse((new CircleAvatar())->draw($canvas, $workDir . '/avatar.png', x: 0, y: 0, size: 48)); + } +} diff --git a/web/landing/tests/Flow/Website/Tests/Unit/SocialCard/TextWrapperTest.php b/web/landing/tests/Flow/Website/Tests/Unit/SocialCard/TextWrapperTest.php new file mode 100644 index 0000000000..becc4c939c --- /dev/null +++ b/web/landing/tests/Flow/Website/Tests/Unit/SocialCard/TextWrapperTest.php @@ -0,0 +1,71 @@ +wrap( + 'one two three four five six seven eight nine ten eleven twelve', + fontSize: 20, + maxWidth: 200, + maxLines: 2, + ); + + static::assertCount(2, $lines); + static::assertTrue(str_ends_with($lines[1], '…')); + static::assertLessThanOrEqual(200, $wrapper->width($lines[1], fontSize: 20)); + } + + public function test_keeps_short_text_in_a_single_line(): void + { + $wrapper = new TextWrapper(dirname(__DIR__, levels: 6) . '/resources/fonts/Cabin-Regular.ttf'); + + static::assertSame(['Flow PHP'], $wrapper->wrap('Flow PHP', fontSize: 20, maxWidth: 1000)); + } + + public function test_keeps_word_longer_than_max_width_on_its_own_line(): void + { + $wrapper = new TextWrapper(dirname(__DIR__, levels: 6) . '/resources/fonts/Cabin-Regular.ttf'); + + static::assertSame( + ['incomprehensibilities', 'yes'], + $wrapper->wrap('incomprehensibilities yes', fontSize: 20, maxWidth: 50), + ); + } + + public function test_width_grows_with_longer_text(): void + { + $wrapper = new TextWrapper(dirname(__DIR__, levels: 6) . '/resources/fonts/Cabin-Regular.ttf'); + + static::assertGreaterThan( + $wrapper->width('Flow', fontSize: 20), + $wrapper->width('Flow PHP Framework', fontSize: 20), + ); + } + + public function test_wraps_text_into_multiple_lines_fitting_max_width(): void + { + $wrapper = new TextWrapper(dirname(__DIR__, levels: 6) . '/resources/fonts/Cabin-Regular.ttf'); + + $lines = $wrapper->wrap('Consuming APIs Without SDKs in pure PHP with Flow', fontSize: 20, maxWidth: 200); + + static::assertGreaterThan(1, count($lines)); + + foreach ($lines as $line) { + static::assertLessThanOrEqual(200, $wrapper->width($line, fontSize: 20)); + } + } +} diff --git a/web/landing/tests/Flow/Website/Tests/Unit/SocialCard/WorkShop/CardGeneratorTest.php b/web/landing/tests/Flow/Website/Tests/Unit/SocialCard/WorkShop/CardGeneratorTest.php new file mode 100644 index 0000000000..808ca7c904 --- /dev/null +++ b/web/landing/tests/Flow/Website/Tests/Unit/SocialCard/WorkShop/CardGeneratorTest.php @@ -0,0 +1,54 @@ +generate(ListingMother::priced()); + + static::assertSame('/images/work-shop/social/symfony-backoffice.png', $path); + static::assertFileExists($publicDir . $path); + static::assertSame( + [1200, 630, IMAGETYPE_PNG], + array_slice((array) getimagesize($publicDir . $path), offset: 0, length: 3), + ); + + unlink($publicDir . $path); + } + + public function test_generates_a_card_for_a_listing_without_a_price(): void + { + $publicDir = sys_get_temp_dir() . '/' . uniqid('social-card-', more_entropy: true); + $generator = new CardGenerator(new CardPainter(dirname(__DIR__, levels: 7) . '/resources'), $publicDir); + + $path = $generator->generate(ListingMother::unpriced()); + + static::assertSame('/images/work-shop/social/consulting.png', $path); + static::assertFileExists($publicDir . $path); + static::assertSame( + [1200, 630, IMAGETYPE_PNG], + array_slice((array) getimagesize($publicDir . $path), offset: 0, length: 3), + ); + + unlink($publicDir . $path); + } +} diff --git a/web/landing/tests/Flow/Website/Tests/Unit/WorkShop/CategoryTest.php b/web/landing/tests/Flow/Website/Tests/Unit/WorkShop/CategoryTest.php new file mode 100644 index 0000000000..42a17f22dd --- /dev/null +++ b/web/landing/tests/Flow/Website/Tests/Unit/WorkShop/CategoryTest.php @@ -0,0 +1,68 @@ + 'blueprints', + 'heading' => 'Blueprints', + 'subtitle' => 'Working applications you can clone, run and pull apart.', + 'listings' => [ + [ + 'name' => 'Symfony Backoffice Blueprint', + 'slug' => 'symfony-backoffice', + 'blurb' => 'A working Symfony back office built on Flow PHP.', + 'features' => ['Schema drives the database, API and imports'], + 'available' => true, + 'price' => '$59', + 'price_note' => null, + 'badge' => null, + 'highlight' => false, + 'route' => 'work_shop_blueprint_symfony', + 'image' => 'images/work-shop/symfony-backoffice-app.png', + ], + ], + ]); + + static::assertSame('blueprints', $category->id); + static::assertSame('Blueprints', $category->heading); + static::assertSame('Working applications you can clone, run and pull apart.', $category->subtitle); + static::assertCount(1, $category->listings); + static::assertSame('symfony-backoffice', $category->listings[0]->slug); + static::assertSame('Blueprints', $category->listings[0]->category); + } + + public function test_from_array_rejects_a_category_without_listings_key(): void + { + $this->expectException(InvalidTypeException::class); + + Category::fromArray([ + 'id' => 'blueprints', + 'heading' => 'Blueprints', + 'subtitle' => 'Working applications you can clone, run and pull apart.', + ]); + } + + public function test_from_array_rejects_an_invalid_listing(): void + { + $this->expectException(InvalidTypeException::class); + + Category::fromArray([ + 'id' => 'blueprints', + 'heading' => 'Blueprints', + 'subtitle' => 'Working applications you can clone, run and pull apart.', + 'listings' => [ + ['name' => 'Broken'], + ], + ]); + } +} diff --git a/web/landing/tests/Flow/Website/Tests/Unit/WorkShop/ListingTest.php b/web/landing/tests/Flow/Website/Tests/Unit/WorkShop/ListingTest.php new file mode 100644 index 0000000000..321ec38416 --- /dev/null +++ b/web/landing/tests/Flow/Website/Tests/Unit/WorkShop/ListingTest.php @@ -0,0 +1,97 @@ + 'Sponsoring — 6 Months', + 'slug' => 'sponsoring-6-months', + 'blurb' => 'The same sponsorship in one payment every six months.', + 'features' => ['Everything from the monthly sponsorship', 'Save 3% vs paying monthly'], + 'available' => true, + 'price' => '$29', + 'price_note' => 'save 3%', + 'badge' => 'Best value', + 'highlight' => true, + 'route' => 'work_shop_sponsoring_6m', + 'image' => 'images/work-shop/sponsoring-6m.svg', + ], 'Sponsoring'); + + static::assertSame('Sponsoring — 6 Months', $listing->name); + static::assertSame('sponsoring-6-months', $listing->slug); + static::assertSame('Sponsoring', $listing->category); + static::assertSame('The same sponsorship in one payment every six months.', $listing->blurb); + static::assertSame( + ['Everything from the monthly sponsorship', 'Save 3% vs paying monthly'], + $listing->features, + ); + static::assertTrue($listing->available); + static::assertSame('$29', $listing->price); + static::assertSame('save 3%', $listing->priceNote); + static::assertSame('Best value', $listing->badge); + static::assertTrue($listing->highlight); + static::assertSame('work_shop_sponsoring_6m', $listing->route); + static::assertSame('images/work-shop/sponsoring-6m.svg', $listing->image); + } + + public function test_from_array_accepts_null_for_optional_fields(): void + { + $listing = Listing::fromArray([ + 'name' => 'More Blueprints', + 'slug' => 'more-blueprints', + 'blurb' => 'More are being built.', + 'features' => ['Fully tested and statically analysed'], + 'available' => false, + 'price' => null, + 'price_note' => null, + 'badge' => null, + 'highlight' => false, + 'route' => null, + 'image' => null, + ], 'Blueprints'); + + static::assertNull($listing->price); + static::assertNull($listing->priceNote); + static::assertNull($listing->badge); + static::assertNull($listing->route); + static::assertNull($listing->image); + } + + public function test_from_array_rejects_missing_keys(): void + { + $this->expectException(InvalidTypeException::class); + + Listing::fromArray([ + 'name' => 'Consulting', + 'slug' => 'consulting', + ], 'Consulting'); + } + + public function test_from_array_rejects_invalid_types(): void + { + $this->expectException(InvalidTypeException::class); + + Listing::fromArray([ + 'name' => 'Consulting', + 'slug' => 'consulting', + 'blurb' => 'Blurb', + 'features' => 'not-a-list', + 'available' => true, + 'price' => null, + 'price_note' => null, + 'badge' => null, + 'highlight' => false, + 'route' => null, + 'image' => null, + ], 'Consulting'); + } +} diff --git a/web/landing/tests/Flow/Website/Tests/Unit/WorkShop/ListingsTest.php b/web/landing/tests/Flow/Website/Tests/Unit/WorkShop/ListingsTest.php new file mode 100644 index 0000000000..d07752f714 --- /dev/null +++ b/web/landing/tests/Flow/Website/Tests/Unit/WorkShop/ListingsTest.php @@ -0,0 +1,66 @@ + $category->id, (new Listings())->all()), + ); + } + + public function test_every_listing_has_a_unique_slug(): void + { + $slugs = []; + + foreach ((new Listings())->all() as $category) { + foreach ($category->listings as $listing) { + $slugs[] = $listing->slug; + } + } + + static::assertSame($slugs, array_values(array_unique($slugs))); + } + + public function test_every_available_listing_has_a_route(): void + { + foreach ((new Listings())->all() as $category) { + foreach ($category->listings as $listing) { + if ($listing->available) { + static::assertNotNull($listing->route, $listing->slug); + static::assertNotNull($listing->image, $listing->slug); + } + } + } + } + + public function test_find_by_slug_returns_the_listing_with_its_category(): void + { + $listing = (new Listings())->findBySlug('claude-skills'); + + static::assertSame('Claude Code Skills', $listing->name); + static::assertSame('AI', $listing->category); + static::assertSame('$10', $listing->price); + } + + public function test_find_by_slug_throws_for_an_unknown_slug(): void + { + $this->expectException(InvalidArgumentException::class); + $this->expectExceptionMessage('Listing not found: unknown'); + + (new Listings())->findBySlug('unknown'); + } +}

    oxKs7!m<4P8A5C8w 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 literal 0 HcmV?d00001 diff --git a/web/landing/src/Flow/Website/Blog/Post.php b/web/landing/src/Flow/Website/Blog/Post.php index 4388fb2bab..2da50c854a 100644 --- a/web/landing/src/Flow/Website/Blog/Post.php +++ b/web/landing/src/Flow/Website/Blog/Post.php @@ -8,6 +8,7 @@ use function Flow\Types\DSL\type_string; use function Flow\Types\DSL\type_structure; +use function sprintf; final readonly class Post { @@ -16,6 +17,7 @@ public function __construct( public string $description, public DateTimeImmutable $date, public string $slug, + public string $author, ) {} public static function fromArray(array $data): self @@ -25,8 +27,25 @@ public static function fromArray(array $data): self 'description' => type_string(), 'date' => type_string(), 'slug' => type_string(), + 'author' => type_string(), ])->assert($data); - return new self($data['title'], $data['description'], new DateTimeImmutable($data['date']), $data['slug']); + return new self( + $data['title'], + $data['description'], + new DateTimeImmutable($data['date']), + $data['slug'], + $data['author'], + ); + } + + public function authorAvatarUrl(int $size = 96): string + { + return sprintf('https://github.com/%s.png?size=%d', $this->author, $size); + } + + public function authorUrl(): string + { + return 'https://github.com/' . $this->author; } } diff --git a/web/landing/src/Flow/Website/Blog/Posts.php b/web/landing/src/Flow/Website/Blog/Posts.php index 4357cf4ee1..b767a0a1a6 100644 --- a/web/landing/src/Flow/Website/Blog/Posts.php +++ b/web/landing/src/Flow/Website/Blog/Posts.php @@ -20,36 +20,42 @@ final class Posts 'description' => 'Learn how to extract data from Google Analytics API using Flow PHP but also how to build a custom data extractor.', 'date' => '2024-04-04', 'slug' => 'building-custom-extractor-google-analytics', + 'author' => 'norberttech', ], [ 'title' => 'Scalar Functions', 'description' => 'Scalar functions are one of the most important building blocks of Flow. Learn how to build and use custom scalar functions in Flow PHP.', 'date' => '2024-08-08', 'slug' => 'scalar-functions', + 'author' => 'norberttech', ], [ 'title' => 'Data processing in PHP', 'description' => 'Processing datasets is a common problem in almost any software. Learn how to process datasets in PHP just like it\'s being done in other programming languages.', 'date' => '2025-01-25', 'slug' => 'data-processing-in-php', + 'author' => 'norberttech', ], [ 'title' => 'Flow PHP Release Cycle', 'description' => 'Explanation of the updated Flow PHP release cycle that improves adaptability of new features.', 'date' => '2025-03-16', 'slug' => 'flow-php-release-cycle', + 'author' => 'norberttech', ], [ 'title' => 'Flow PHP - Release 0.41.0', 'description' => 'Summary of things changed in Flow PHP 0.41.0 release', 'date' => '2026-06-29', 'slug' => 'flow-php-release-0410', + 'author' => 'norberttech', ], [ 'title' => 'Performance Optimizations', 'description' => 'Floe is a dedicated binary format, created to speedup serialization and reduce serialized content size of Rows.', 'date' => '2026-07-23', 'slug' => 'performance-optimizations', + 'author' => 'norberttech', ], ]; @@ -58,7 +64,7 @@ final class Posts */ public function all(): array { - return array_map(static fn(array $data): Post => Post::fromArray($data), array_reverse($this->posts)); + return array_map(Post::fromArray(...), array_reverse($this->posts)); } public function findByDateAndSlug(string $date, string $slug): Post diff --git a/web/landing/src/Flow/Website/Controller/BlogController.php b/web/landing/src/Flow/Website/Controller/BlogController.php index 8a9abfb81b..299cfeeae6 100644 --- a/web/landing/src/Flow/Website/Controller/BlogController.php +++ b/web/landing/src/Flow/Website/Controller/BlogController.php @@ -5,6 +5,7 @@ namespace Flow\Website\Controller; use Flow\Website\Blog\Posts; +use Flow\Website\SocialCard\Blog\CardGenerator; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; @@ -12,13 +13,16 @@ final class BlogController extends AbstractController { #[Route('/blog/{date}/{slug}', name: 'blog_post')] - public function post(string $date, string $slug): Response + public function post(string $date, string $slug, CardGenerator $socialCards): Response { + $post = (new Posts())->findByDateAndSlug($date, $slug); + return $this->render('blog/posts/' . $date . '/' . $slug . '/post.html.twig', [ 'template_folder' => 'blog/posts/' . $date . '/' . $slug, - 'post' => (new Posts())->findByDateAndSlug($date, $slug), + 'post' => $post, 'date' => $date, 'slug' => $slug, + 'social_image' => $socialCards->generate($post), ]); } diff --git a/web/landing/src/Flow/Website/Controller/WorkShopController.php b/web/landing/src/Flow/Website/Controller/WorkShopController.php index 6c40fbb17c..087f9b0188 100644 --- a/web/landing/src/Flow/Website/Controller/WorkShopController.php +++ b/web/landing/src/Flow/Website/Controller/WorkShopController.php @@ -4,6 +4,8 @@ namespace Flow\Website\Controller; +use Flow\Website\SocialCard\WorkShop\CardGenerator; +use Flow\Website\WorkShop\Listings; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; @@ -23,16 +25,19 @@ public function __construct( #[Route('/work-shop', name: 'work_shop', options: ['sitemap' => false])] public function index(): Response { - return $this->render('work-shop/index.html.twig'); + return $this->render('work-shop/index.html.twig', [ + 'categories' => (new Listings())->all(), + ]); } #[Route('/work-shop/blueprints/symfony-backoffice', name: 'work_shop_blueprint_symfony', options: [ 'sitemap' => false, ])] - public function blueprintSymfony(): Response + public function blueprintSymfony(CardGenerator $socialCards): Response { return $this->render('work-shop/blueprints/symfony-backoffice/index.html.twig', [ 'listing_checkout_url' => $this->checkoutLinks['symfony_backoffice'] ?? null, + 'social_image' => $socialCards->generate((new Listings())->findBySlug('symfony-backoffice')), ]); } @@ -49,10 +54,11 @@ public function blueprintHowItWorks(): Response #[Route('/work-shop/ai/claude-skills', name: 'work_shop_ai_claude_skills', options: [ 'sitemap' => false, ])] - public function aiClaudeSkills(): Response + public function aiClaudeSkills(CardGenerator $socialCards): Response { return $this->render('work-shop/ai/claude-skills/index.html.twig', [ 'listing_checkout_url' => $this->checkoutLinks['claude_skills'] ?? null, + 'social_image' => $socialCards->generate((new Listings())->findBySlug('claude-skills')), ]); } @@ -67,30 +73,33 @@ public function aiHowItWorks(): Response #[Route('/work-shop/sponsoring/1-month', name: 'work_shop_sponsoring_1m', options: [ 'sitemap' => false, ])] - public function sponsoring1Month(): Response + public function sponsoring1Month(CardGenerator $socialCards): Response { return $this->render('work-shop/sponsoring/1-month/index.html.twig', [ 'listing_checkout_url' => $this->checkoutLinks['sponsoring_1m'] ?? null, + 'social_image' => $socialCards->generate((new Listings())->findBySlug('sponsoring-1-month')), ]); } #[Route('/work-shop/sponsoring/6-months', name: 'work_shop_sponsoring_6m', options: [ 'sitemap' => false, ])] - public function sponsoring6Months(): Response + public function sponsoring6Months(CardGenerator $socialCards): Response { return $this->render('work-shop/sponsoring/6-months/index.html.twig', [ 'listing_checkout_url' => $this->checkoutLinks['sponsoring_6m'] ?? null, + 'social_image' => $socialCards->generate((new Listings())->findBySlug('sponsoring-6-months')), ]); } #[Route('/work-shop/sponsoring/12-months', name: 'work_shop_sponsoring_12m', options: [ 'sitemap' => false, ])] - public function sponsoring12Months(): Response + public function sponsoring12Months(CardGenerator $socialCards): Response { return $this->render('work-shop/sponsoring/12-months/index.html.twig', [ 'listing_checkout_url' => $this->checkoutLinks['sponsoring_12m'] ?? null, + 'social_image' => $socialCards->generate((new Listings())->findBySlug('sponsoring-12-months')), ]); } @@ -101,9 +110,11 @@ public function success(): Response } #[Route('/work-shop/consulting', name: 'work_shop_consulting', options: ['sitemap' => false])] - public function consulting(): Response + public function consulting(CardGenerator $socialCards): Response { - return $this->render('work-shop/consulting/index.html.twig'); + return $this->render('work-shop/consulting/index.html.twig', [ + 'social_image' => $socialCards->generate((new Listings())->findBySlug('consulting')), + ]); } #[Route('/work-shop/terms-of-sales', name: 'work_shop_terms_of_sales', options: ['sitemap' => false])] diff --git a/web/landing/src/Flow/Website/SocialCard/AvatarCache.php b/web/landing/src/Flow/Website/SocialCard/AvatarCache.php new file mode 100644 index 0000000000..1708d081e9 --- /dev/null +++ b/web/landing/src/Flow/Website/SocialCard/AvatarCache.php @@ -0,0 +1,57 @@ +cacheDir . '/' . $handle . '.png'; + + if (file_exists($path)) { + return $path; + } + + try { + $avatar = $this->httpClient->request('GET', sprintf($this->urlTemplate, $handle), [ + 'timeout' => 5, + ])->getContent(); + } catch (ExceptionInterface) { + return null; + } + + if (getimagesizefromstring($avatar) === false) { + return null; + } + + if ( + !is_dir($this->cacheDir) + && !mkdir($this->cacheDir, permissions: 0o755, recursive: true) + && !is_dir($this->cacheDir) + ) { + return null; + } + + file_put_contents($path, $avatar); + + return $path; + } +} diff --git a/web/landing/src/Flow/Website/SocialCard/Blog/CardGenerator.php b/web/landing/src/Flow/Website/SocialCard/Blog/CardGenerator.php new file mode 100644 index 0000000000..268c8f25fe --- /dev/null +++ b/web/landing/src/Flow/Website/SocialCard/Blog/CardGenerator.php @@ -0,0 +1,65 @@ +painter->canvas(); + + $this->painter->drawElephant($canvas); + $this->painter->drawEyebrow($canvas, 'BLOG'); + $this->painter->drawDescription($canvas, $post->description, $this->painter->drawTitle($canvas, $post->title)); + $this->painter->drawFooter( + $canvas, + '@' . $post->author, + $post->date->format('M j, Y'), + $this->avatars->fetch($post->author), + ); + $this->painter->drawAccentBar($canvas); + + return $this->save($canvas, $post); + } + + public function relativePath(Post $post): string + { + return sprintf('/images/blog/social/%s-%s.png', $post->date->format('Y-m-d'), $post->slug); + } + + public function save(GdImage $canvas, Post $post): string + { + $path = $this->publicDir . $this->relativePath($post); + $directory = dirname($path); + + if (!is_dir($directory) && !mkdir($directory, permissions: 0o755, recursive: true) && !is_dir($directory)) { + throw new RuntimeException('Failed to create directory: ' . $directory); + } + + if (imagepng($canvas, $path) === false) { + throw new RuntimeException('Failed to write social card: ' . $path); + } + + return $this->relativePath($post); + } +} diff --git a/web/landing/src/Flow/Website/SocialCard/CardPainter.php b/web/landing/src/Flow/Website/SocialCard/CardPainter.php new file mode 100644 index 0000000000..02911d4b68 --- /dev/null +++ b/web/landing/src/Flow/Website/SocialCard/CardPainter.php @@ -0,0 +1,263 @@ +color($canvas, [ + (int) round( + self::BACKGROUND_TOP[0] + + (($y / self::HEIGHT) * (self::BACKGROUND_BOTTOM[0] - self::BACKGROUND_TOP[0])), + ), + (int) round( + self::BACKGROUND_TOP[1] + + (($y / self::HEIGHT) * (self::BACKGROUND_BOTTOM[1] - self::BACKGROUND_TOP[1])), + ), + (int) round( + self::BACKGROUND_TOP[2] + + (($y / self::HEIGHT) * (self::BACKGROUND_BOTTOM[2] - self::BACKGROUND_TOP[2])), + ), + ]); + imageline($canvas, x1: 0, y1: $y, x2: self::WIDTH - 1, y2: $y, color: $background); + } + + return $canvas; + } + + /** + * @param array{int, int, int} $rgb + */ + public function color(GdImage $image, array $rgb, int $alpha = 0): int + { + $color = imagecolorallocatealpha($image, $rgb[0], $rgb[1], $rgb[2], $alpha); + + if ($color === false) { + throw new RuntimeException('Failed to allocate color'); + } + + return $color; + } + + public function drawAccentBar(GdImage $canvas): void + { + for ($x = 0; $x < self::WIDTH; $x++) { + $gradient = $this->color($canvas, [ + (int) round(self::ORANGE[0] + (($x / self::WIDTH) * (self::BLUE[0] - self::ORANGE[0]))), + (int) round(self::ORANGE[1] + (($x / self::WIDTH) * (self::BLUE[1] - self::ORANGE[1]))), + (int) round(self::ORANGE[2] + (($x / self::WIDTH) * (self::BLUE[2] - self::ORANGE[2]))), + ]); + imageline($canvas, x1: $x, y1: self::HEIGHT - 8, x2: $x, y2: self::HEIGHT - 1, color: $gradient); + } + } + + public function drawDescription(GdImage $canvas, string $description, int $baseline): void + { + $font = $this->resourcesDir . '/fonts/Cabin-Regular.ttf'; + + foreach ((new TextWrapper($font))->wrap( + $description, + fontSize: 19, + maxWidth: self::CONTENT_WIDTH, + maxLines: 3, + ) as $line) { + imagettftext( + $canvas, + size: 19, + angle: 0, + x: self::MARGIN, + y: $baseline, + color: $this->color($canvas, self::MUTED), + font_filename: $font, + text: $line, + ); + $baseline += 38; + } + } + + public function drawElephant(GdImage $canvas): void + { + $elephant = imagecreatefrompng($this->resourcesDir . '/images/elephant.png'); + + if ($elephant === false) { + throw new RuntimeException('Failed to load elephant image'); + } + + $width = 470; + $height = (int) round(($width * imagesy($elephant)) / imagesx($elephant)); + imagecopyresampled( + $canvas, + $elephant, + dst_x: 770, + dst_y: intdiv(self::HEIGHT - $height, num2: 2), + src_x: 0, + src_y: 0, + dst_width: $width, + dst_height: $height, + src_width: imagesx($elephant), + src_height: imagesy($elephant), + ); + } + + public function drawEyebrow(GdImage $canvas, string $section): void + { + $fontBold = $this->resourcesDir . '/fonts/Cabin-Bold.ttf'; + $fontRegular = $this->resourcesDir . '/fonts/Cabin-Regular.ttf'; + + $eyebrow = 'FLOW PHP'; + imagettftext( + $canvas, + size: 18, + angle: 0, + x: self::MARGIN, + y: 116, + color: $this->color($canvas, self::ORANGE), + font_filename: $fontBold, + text: $eyebrow, + ); + + $eyebrowWidth = (new TextWrapper($fontBold))->width($eyebrow, fontSize: 18); + imagettftext( + $canvas, + size: 18, + angle: 0, + x: self::MARGIN + $eyebrowWidth + 14, + y: 116, + color: $this->color($canvas, self::MUTED), + font_filename: $fontRegular, + text: '· ' . $section, + ); + } + + /** + * @param array{int, int, int} $primaryColor + */ + public function drawFooter( + GdImage $canvas, + string $primary, + ?string $secondary = null, + ?string $avatarPath = null, + array $primaryColor = self::BLUE, + ): void { + $fontBold = $this->resourcesDir . '/fonts/Cabin-Bold.ttf'; + $fontRegular = $this->resourcesDir . '/fonts/Cabin-Regular.ttf'; + + $x = self::MARGIN; + + if ( + $avatarPath !== null + && (new CircleAvatar())->draw($canvas, $avatarPath, x: self::MARGIN, y: 523, size: 64) + ) { + $x += 64 + 18; + } + + imagettftext( + $canvas, + size: 17, + angle: 0, + x: $x, + y: 566, + color: $this->color($canvas, $primaryColor), + font_filename: $fontBold, + text: $primary, + ); + + if ($secondary === null) { + return; + } + + $primaryWidth = (new TextWrapper($fontBold))->width($primary, fontSize: 17); + imagettftext( + $canvas, + size: 17, + angle: 0, + x: $x + $primaryWidth + 14, + y: 566, + color: $this->color($canvas, self::MUTED), + font_filename: $fontRegular, + text: '· ' . $secondary, + ); + } + + public function drawTitle(GdImage $canvas, string $title): int + { + $font = $this->resourcesDir . '/fonts/Cabin-Bold.ttf'; + $wrapper = new TextWrapper($font); + $titleSize = 44.0; + + foreach ([44.0, 40.0, 36.0, 32.0] as $size) { + $titleSize = $size; + + if (count($wrapper->wrap($title, $size, self::CONTENT_WIDTH)) <= 3) { + break; + } + } + + $baseline = 210; + + foreach ($wrapper->wrap($title, $titleSize, self::CONTENT_WIDTH, maxLines: 3) as $line) { + imagettftext( + $canvas, + size: $titleSize, + angle: 0, + x: self::MARGIN, + y: $baseline, + color: $this->color($canvas, self::WHITE), + font_filename: $font, + text: $line, + ); + $baseline += (int) round($titleSize * 1.667); + } + + return $baseline + 20; + } +} diff --git a/web/landing/src/Flow/Website/SocialCard/CircleAvatar.php b/web/landing/src/Flow/Website/SocialCard/CircleAvatar.php new file mode 100644 index 0000000000..df3998716f --- /dev/null +++ b/web/landing/src/Flow/Website/SocialCard/CircleAvatar.php @@ -0,0 +1,103 @@ +load($avatarPath); + + if ($avatar === null) { + return false; + } + + $circle = imagecreatetruecolor($size, $size); + + if ($circle === false) { + return false; + } + + imagecopyresampled( + $circle, + $avatar, + dst_x: 0, + dst_y: 0, + src_x: 0, + src_y: 0, + dst_width: $size, + dst_height: $size, + src_width: imagesx($avatar), + src_height: imagesy($avatar), + ); + + if (!$this->mask($circle, $size)) { + return false; + } + + imagecopy($canvas, $circle, dst_x: $x, dst_y: $y, src_x: 0, src_y: 0, src_width: $size, src_height: $size); + + return true; + } + + public function load(string $avatarPath): ?GdImage + { + if (!file_exists($avatarPath)) { + return null; + } + + $bytes = file_get_contents($avatarPath); + + if ($bytes === false || getimagesizefromstring($bytes) === false) { + return null; + } + + $avatar = imagecreatefromstring($bytes); + + return $avatar === false ? null : $avatar; + } + + public function mask(GdImage $circle, int $size): bool + { + imagealphablending($circle, enable: false); + imagesavealpha($circle, enable: true); + $transparent = imagecolorallocatealpha($circle, red: 0, green: 0, blue: 0, alpha: 127); + + if ($transparent === false) { + return false; + } + + $radius = $size / 2; + + for ($pixelX = 0; $pixelX < $size; $pixelX++) { + for ($pixelY = 0; $pixelY < $size; $pixelY++) { + $dx = $pixelX - $radius + 0.5; + $dy = $pixelY - $radius + 0.5; + + if ((($dx * $dx) + ($dy * $dy)) > ($radius * $radius)) { + imagesetpixel($circle, $pixelX, $pixelY, $transparent); + } + } + } + + return true; + } +} diff --git a/web/landing/src/Flow/Website/SocialCard/TextWrapper.php b/web/landing/src/Flow/Website/SocialCard/TextWrapper.php new file mode 100644 index 0000000000..fe4a81247d --- /dev/null +++ b/web/landing/src/Flow/Website/SocialCard/TextWrapper.php @@ -0,0 +1,71 @@ + + */ + public function wrap(string $text, float $fontSize, int $maxWidth, ?int $maxLines = null): array + { + $lines = []; + $line = ''; + + foreach (explode(' ', trim($text)) as $word) { + $candidate = $line === '' ? $word : $line . ' ' . $word; + + if ($line === '' || $this->width($candidate, $fontSize) <= $maxWidth) { + $line = $candidate; + + continue; + } + + $lines[] = $line; + $line = $word; + } + + $lines[] = $line; + + if ($maxLines === null || count($lines) <= $maxLines) { + return $lines; + } + + $kept = array_slice($lines, offset: 0, length: $maxLines - 1); + $last = $lines[$maxLines - 1]; + + while ($last !== '' && $this->width($last . '…', $fontSize) > $maxWidth) { + $last = trim(mb_substr($last, start: 0, length: -1)); + } + + $kept[] = $last . '…'; + + return $kept; + } + + public function width(string $text, float $fontSize): int + { + $box = imagettfbbox($fontSize, angle: 0, font_filename: $this->fontPath, string: $text); + + if ($box === false) { + throw new RuntimeException('Failed to measure text: ' . $text); + } + + return (int) $box[2] - (int) $box[0]; + } +} diff --git a/web/landing/src/Flow/Website/SocialCard/WorkShop/CardGenerator.php b/web/landing/src/Flow/Website/SocialCard/WorkShop/CardGenerator.php new file mode 100644 index 0000000000..2692785b27 --- /dev/null +++ b/web/landing/src/Flow/Website/SocialCard/WorkShop/CardGenerator.php @@ -0,0 +1,64 @@ +painter->canvas(); + + $this->painter->drawElephant($canvas); + $this->painter->drawEyebrow($canvas, 'WORK-SHOP'); + $this->painter->drawDescription($canvas, $listing->blurb, $this->painter->drawTitle($canvas, $listing->name)); + + if ($listing->price !== null) { + $this->painter->drawFooter($canvas, $listing->price, $listing->category, primaryColor: CardPainter::ORANGE); + } else { + $this->painter->drawFooter($canvas, $listing->category, primaryColor: CardPainter::ORANGE); + } + + $this->painter->drawAccentBar($canvas); + + return $this->save($canvas, $listing); + } + + public function relativePath(Listing $listing): string + { + return sprintf('/images/work-shop/social/%s.png', $listing->slug); + } + + public function save(GdImage $canvas, Listing $listing): string + { + $path = $this->publicDir . $this->relativePath($listing); + $directory = dirname($path); + + if (!is_dir($directory) && !mkdir($directory, permissions: 0o755, recursive: true) && !is_dir($directory)) { + throw new RuntimeException('Failed to create directory: ' . $directory); + } + + if (imagepng($canvas, $path) === false) { + throw new RuntimeException('Failed to write social card: ' . $path); + } + + return $this->relativePath($listing); + } +} diff --git a/web/landing/src/Flow/Website/WorkShop/Category.php b/web/landing/src/Flow/Website/WorkShop/Category.php new file mode 100644 index 0000000000..a51819d444 --- /dev/null +++ b/web/landing/src/Flow/Website/WorkShop/Category.php @@ -0,0 +1,58 @@ + + * } + */ +final readonly class Category +{ + /** + * @param list