From 9bd40306b3814880f0abb20832b99e163a685fbe Mon Sep 17 00:00:00 2001 From: John Nunemaker Date: Wed, 8 Jul 2026 19:39:32 -0600 Subject: [PATCH 1/2] Add "I deploy on Fridays" merch callout to UI and README Adds a small, muted tee callout in the Flipper UI footer (gated behind the existing `fun` config) and a short Merch section in the README, with specs covering the fun-mode toggle. Co-Authored-By: Claude Opus 4.8 --- README.md | 4 ++++ lib/flipper/ui/views/layout.erb | 6 +++++ spec/flipper/ui/actions/features_spec.rb | 30 ++++++++++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/README.md b/README.md index b046d1315..9a4e1a42e 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,10 @@ Or install it yourself with: [💌  Subscribe](https://blog.flippercloud.io/#/portal/signup) - we'll send you short and sweet emails when we release new versions ([examples](https://blog.flippercloud.io/tag/releases/)). +## Merch + +Do you deploy on Fridays? [👕 Get the tee](https://shop.verygoodsoftware.company/product/i-deploy-on-fridays-tee?utm_source=oss&utm_medium=readme&utm_campaign=merch). + ## Getting Started Use `Flipper#enabled?` in your app to check if a feature is enabled. diff --git a/lib/flipper/ui/views/layout.erb b/lib/flipper/ui/views/layout.erb index 5bfb7596b..5785ac8e5 100644 --- a/lib/flipper/ui/views/layout.erb +++ b/lib/flipper/ui/views/layout.erb @@ -80,6 +80,12 @@ <% end %> + + <% if Flipper::UI.configuration.fun %> +
+ 👕 Do you deploy on Fridays? Get the tee. +
+ <% end %> diff --git a/spec/flipper/ui/actions/features_spec.rb b/spec/flipper/ui/actions/features_spec.rb index 4a9e50965..ec677ece2 100644 --- a/spec/flipper/ui/actions/features_spec.rb +++ b/spec/flipper/ui/actions/features_spec.rb @@ -77,6 +77,36 @@ end end + context "merch callout" do + before do + @original_fun_enabled = Flipper::UI.configuration.fun + Flipper::UI.configuration.fun = fun_mode + get '/features' + end + + after do + Flipper::UI.configuration.fun = @original_fun_enabled + end + + context "when fun mode is enabled" do + let(:fun_mode) { true } + + it 'renders the tee link' do + expect(last_response.body).to include('Do you deploy on Fridays?') + expect(last_response.body).to include('i-deploy-on-fridays-tee') + end + end + + context "when fun mode is disabled" do + let(:fun_mode) { false } + + it 'does not render the tee link' do + expect(last_response.body).not_to include('Do you deploy on Fridays?') + expect(last_response.body).not_to include('i-deploy-on-fridays-tee') + end + end + end + context "when in read-only mode" do before { allow(flipper).to receive(:read_only?) { true } } From 5898255ec92e693b4dda24a7720fb0e98aee3b7f Mon Sep 17 00:00:00 2001 From: John Nunemaker Date: Wed, 8 Jul 2026 20:47:12 -0600 Subject: [PATCH 2/2] Move merch link to nav, keep Cloud as sole footer CTA MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per feedback, two footer CTAs side-by-side diluted the Flipper Cloud callout. Move the tee to a small "Shirt" nav link (Docs • Shirt • Version), leaving Cloud uncontested in the footer. Co-Authored-By: Claude Opus 4.8 --- lib/flipper/ui/views/layout.erb | 10 ++++------ spec/flipper/ui/actions/features_spec.rb | 8 ++++---- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/lib/flipper/ui/views/layout.erb b/lib/flipper/ui/views/layout.erb index 5785ac8e5..ad90d2919 100644 --- a/lib/flipper/ui/views/layout.erb +++ b/lib/flipper/ui/views/layout.erb @@ -57,6 +57,10 @@ @@ -80,12 +84,6 @@ <% end %> - - <% if Flipper::UI.configuration.fun %> -
- 👕 Do you deploy on Fridays? Get the tee. -
- <% end %> diff --git a/spec/flipper/ui/actions/features_spec.rb b/spec/flipper/ui/actions/features_spec.rb index ec677ece2..79c2deb0e 100644 --- a/spec/flipper/ui/actions/features_spec.rb +++ b/spec/flipper/ui/actions/features_spec.rb @@ -91,8 +91,8 @@ context "when fun mode is enabled" do let(:fun_mode) { true } - it 'renders the tee link' do - expect(last_response.body).to include('Do you deploy on Fridays?') + it 'renders the shirt link' do + expect(last_response.body).to include('>Shirt') expect(last_response.body).to include('i-deploy-on-fridays-tee') end end @@ -100,8 +100,8 @@ context "when fun mode is disabled" do let(:fun_mode) { false } - it 'does not render the tee link' do - expect(last_response.body).not_to include('Do you deploy on Fridays?') + it 'does not render the shirt link' do + expect(last_response.body).not_to include('>Shirt') expect(last_response.body).not_to include('i-deploy-on-fridays-tee') end end