From 737601d5cd6684a6c742c1a707a6c058346ca288 Mon Sep 17 00:00:00 2001 From: carlosabadia Date: Mon, 21 Sep 2026 12:02:19 +0200 Subject: [PATCH 1/4] ENG-12575: Link shared footers directly to comparison pages --- .../news/+footer-comparison-links.bugfix.md | 1 + .../src/reflex_site_shared/views/footer.py | 17 ++++++++-------- .../views/marketing_footer.py | 11 +++++----- .../test_footer_destinations.py | 20 +++++++++++++++++++ 4 files changed, 34 insertions(+), 15 deletions(-) create mode 100644 packages/reflex-site-shared/news/+footer-comparison-links.bugfix.md create mode 100644 tests/units/reflex_site_shared/test_footer_destinations.py diff --git a/packages/reflex-site-shared/news/+footer-comparison-links.bugfix.md b/packages/reflex-site-shared/news/+footer-comparison-links.bugfix.md new file mode 100644 index 00000000000..24e8fead648 --- /dev/null +++ b/packages/reflex-site-shared/news/+footer-comparison-links.bugfix.md @@ -0,0 +1 @@ +Update shared footer comparison links to their final destinations, avoiding legacy redirects. diff --git a/packages/reflex-site-shared/src/reflex_site_shared/views/footer.py b/packages/reflex-site-shared/src/reflex_site_shared/views/footer.py index 9287bd56d17..3c3c23ab5cf 100644 --- a/packages/reflex-site-shared/src/reflex_site_shared/views/footer.py +++ b/packages/reflex-site-shared/src/reflex_site_shared/views/footer.py @@ -2,11 +2,11 @@ from datetime import datetime +import reflex as rx import reflex_components_internal as ui +from reflex.style import color_mode, set_color_mode from reflex_components_internal import button as marketing_button -import reflex as rx -from reflex.style import color_mode, set_color_mode from reflex_site_shared.backend.signup import IndexState from reflex_site_shared.backend.status import StatusState from reflex_site_shared.components.icons import get_icon @@ -304,17 +304,16 @@ def footer_index( ], ), footer_link_flex( - "Migration", + "Comparison", [ - footer_link("From No-Code", "/migration/no-code/"), - footer_link("From Low-Code", "/migration/low-code/"), + footer_link("From no/low-code", "/compare/no-code/"), footer_link( - "From Other Frameworks", - "/migration/other-frameworks/", + "Frameworks", + "/compare/frameworks/", ), footer_link( - "From Other AI Tools", - "/migration/other-ai-tools/", + "From other AI tools", + "/compare/other-ai-tools/", ), ], ), diff --git a/packages/reflex-site-shared/src/reflex_site_shared/views/marketing_footer.py b/packages/reflex-site-shared/src/reflex_site_shared/views/marketing_footer.py index 3f791040e0a..86728c93efc 100644 --- a/packages/reflex-site-shared/src/reflex_site_shared/views/marketing_footer.py +++ b/packages/reflex-site-shared/src/reflex_site_shared/views/marketing_footer.py @@ -3,9 +3,9 @@ from datetime import datetime from typing import Literal +import reflex as rx import reflex_components_internal as ui -import reflex as rx from reflex_site_shared.backend.signup import IndexState from reflex_site_shared.backend.status import StatusState from reflex_site_shared.components.icons import get_icon @@ -443,12 +443,11 @@ def marketing_footer( ], ), ( - "Migration", + "Comparison", [ - ("From no-code", "/migration/no-code/"), - ("From low-code", "/migration/low-code/"), - ("From other frameworks", "/migration/other-frameworks/"), - ("From other AI tools", "/migration/other-ai-tools/"), + ("From no/low-code", "/compare/no-code/"), + ("Frameworks", "/compare/frameworks/"), + ("From other AI tools", "/compare/other-ai-tools/"), ], ), appearance=appearance, diff --git a/tests/units/reflex_site_shared/test_footer_destinations.py b/tests/units/reflex_site_shared/test_footer_destinations.py new file mode 100644 index 00000000000..da2c03e8434 --- /dev/null +++ b/tests/units/reflex_site_shared/test_footer_destinations.py @@ -0,0 +1,20 @@ +"""Shared footer links should skip legacy migration redirects.""" + +import pytest +from reflex_site_shared.views.footer import footer_index +from reflex_site_shared.views.marketing_footer import marketing_footer + + +@pytest.mark.parametrize( + "footer", [lambda: footer_index._definition.component, marketing_footer] +) +def test_footer_comparisons_use_final_destinations(footer): + """Both shared footer variants link directly to current comparison pages.""" + rendered = str(footer()) + assert "/migration/" not in rendered + for path in [ + "/compare/no-code/", + "/compare/frameworks/", + "/compare/other-ai-tools/", + ]: + assert path in rendered From 294a4c17f17936fc3aad53ebc9a54732acb1b7c5 Mon Sep 17 00:00:00 2001 From: carlosabadia Date: Mon, 21 Sep 2026 12:08:19 +0200 Subject: [PATCH 2/4] Match shared footer import order to CI workspace layout --- .../reflex-site-shared/src/reflex_site_shared/views/footer.py | 4 ++-- .../src/reflex_site_shared/views/marketing_footer.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/reflex-site-shared/src/reflex_site_shared/views/footer.py b/packages/reflex-site-shared/src/reflex_site_shared/views/footer.py index 3c3c23ab5cf..da84842d801 100644 --- a/packages/reflex-site-shared/src/reflex_site_shared/views/footer.py +++ b/packages/reflex-site-shared/src/reflex_site_shared/views/footer.py @@ -2,11 +2,11 @@ from datetime import datetime -import reflex as rx import reflex_components_internal as ui -from reflex.style import color_mode, set_color_mode from reflex_components_internal import button as marketing_button +import reflex as rx +from reflex.style import color_mode, set_color_mode from reflex_site_shared.backend.signup import IndexState from reflex_site_shared.backend.status import StatusState from reflex_site_shared.components.icons import get_icon diff --git a/packages/reflex-site-shared/src/reflex_site_shared/views/marketing_footer.py b/packages/reflex-site-shared/src/reflex_site_shared/views/marketing_footer.py index 86728c93efc..49dd546420c 100644 --- a/packages/reflex-site-shared/src/reflex_site_shared/views/marketing_footer.py +++ b/packages/reflex-site-shared/src/reflex_site_shared/views/marketing_footer.py @@ -3,9 +3,9 @@ from datetime import datetime from typing import Literal -import reflex as rx import reflex_components_internal as ui +import reflex as rx from reflex_site_shared.backend.signup import IndexState from reflex_site_shared.backend.status import StatusState from reflex_site_shared.components.icons import get_icon From de8601054ea27acd17a82efd38a2ded0ff508d20 Mon Sep 17 00:00:00 2001 From: carlosabadia Date: Mon, 21 Sep 2026 12:12:37 +0200 Subject: [PATCH 3/4] Use standard decorator unwrapping in footer tests and remove news fragment --- .../news/+footer-comparison-links.bugfix.md | 1 - tests/units/reflex_site_shared/test_footer_destinations.py | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) delete mode 100644 packages/reflex-site-shared/news/+footer-comparison-links.bugfix.md diff --git a/packages/reflex-site-shared/news/+footer-comparison-links.bugfix.md b/packages/reflex-site-shared/news/+footer-comparison-links.bugfix.md deleted file mode 100644 index 24e8fead648..00000000000 --- a/packages/reflex-site-shared/news/+footer-comparison-links.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Update shared footer comparison links to their final destinations, avoiding legacy redirects. diff --git a/tests/units/reflex_site_shared/test_footer_destinations.py b/tests/units/reflex_site_shared/test_footer_destinations.py index da2c03e8434..c056c55b8d8 100644 --- a/tests/units/reflex_site_shared/test_footer_destinations.py +++ b/tests/units/reflex_site_shared/test_footer_destinations.py @@ -1,13 +1,13 @@ """Shared footer links should skip legacy migration redirects.""" +from inspect import unwrap + import pytest from reflex_site_shared.views.footer import footer_index from reflex_site_shared.views.marketing_footer import marketing_footer -@pytest.mark.parametrize( - "footer", [lambda: footer_index._definition.component, marketing_footer] -) +@pytest.mark.parametrize("footer", [unwrap(footer_index), marketing_footer]) def test_footer_comparisons_use_final_destinations(footer): """Both shared footer variants link directly to current comparison pages.""" rendered = str(footer()) From 2d12dd73b38074d01745988355aa02df17da2662 Mon Sep 17 00:00:00 2001 From: carlosabadia Date: Mon, 21 Sep 2026 12:13:04 +0200 Subject: [PATCH 4/4] Keep footer URL correction focused on site code --- .../test_footer_destinations.py | 20 ------------------- 1 file changed, 20 deletions(-) delete mode 100644 tests/units/reflex_site_shared/test_footer_destinations.py diff --git a/tests/units/reflex_site_shared/test_footer_destinations.py b/tests/units/reflex_site_shared/test_footer_destinations.py deleted file mode 100644 index c056c55b8d8..00000000000 --- a/tests/units/reflex_site_shared/test_footer_destinations.py +++ /dev/null @@ -1,20 +0,0 @@ -"""Shared footer links should skip legacy migration redirects.""" - -from inspect import unwrap - -import pytest -from reflex_site_shared.views.footer import footer_index -from reflex_site_shared.views.marketing_footer import marketing_footer - - -@pytest.mark.parametrize("footer", [unwrap(footer_index), marketing_footer]) -def test_footer_comparisons_use_final_destinations(footer): - """Both shared footer variants link directly to current comparison pages.""" - rendered = str(footer()) - assert "/migration/" not in rendered - for path in [ - "/compare/no-code/", - "/compare/frameworks/", - "/compare/other-ai-tools/", - ]: - assert path in rendered