Skip to content

Commit 3096502

Browse files
committed
fix: enforce FF_PRICING_PAGE and FF_REGISTRATION on routes, nav, and landing page
- Pricing route returns 404 when flag is off - Header hides Pricing/Register links based on flags - Landing page hero hides "View pricing" button when flag is off - Marketing layout passes flags to Header via props
1 parent e34f22c commit 3096502

5 files changed

Lines changed: 38 additions & 7 deletions

File tree

src/lib/components/Header.svelte

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,25 @@
22
import ThemeSwitcher from './ThemeSwitcher.svelte';
33
import Icon from '@iconify/svelte';
44
5+
let {
6+
showPricing = true,
7+
showRegister = true
8+
}: {
9+
showPricing?: boolean;
10+
showRegister?: boolean;
11+
} = $props();
12+
513
let menuOpen = $state(false);
614
715
function toggleMenu() {
816
menuOpen = !menuOpen;
917
}
1018
11-
const navLinks = [
19+
const navLinks = $derived([
1220
{ href: '/', label: 'Home' },
13-
{ href: '/pricing', label: 'Pricing' },
14-
{ href: '/register', label: 'Register' }
15-
];
21+
...(showPricing ? [{ href: '/pricing', label: 'Pricing' }] : []),
22+
...(showRegister ? [{ href: '/register', label: 'Register' }] : [])
23+
]);
1624
</script>
1725

1826
<header>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import type { LayoutServerLoad } from './$types';
2+
import { isEnabled } from '$lib/feature-flags';
3+
4+
export const load: LayoutServerLoad = async () => {
5+
return {
6+
marketingFlags: {
7+
pricing: isEnabled('pricingPage'),
8+
registration: isEnabled('registration')
9+
}
10+
};
11+
};

src/routes/(marketing)/+layout.svelte

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
<script lang="ts">
22
import Header from '$lib/components/Header.svelte';
33
import Footer from '$lib/components/Footer.svelte';
4+
import type { LayoutData } from './$types';
45
5-
let { children } = $props();
6+
let { data, children }: { data: LayoutData; children: import('svelte').Snippet } = $props();
67
</script>
78

8-
<Header />
9+
<Header showPricing={data.marketingFlags.pricing} showRegister={data.marketingFlags.registration} />
910
<main>
1011
{@render children()}
1112
</main>

src/routes/(marketing)/+page.svelte

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
<script lang="ts">
22
import SEO from '$lib/components/SEO.svelte';
33
import Icon from '@iconify/svelte';
4+
import type { PageData } from './$types';
5+
6+
let { data }: { data: PageData } = $props();
47
</script>
58

69
<SEO
@@ -18,7 +21,9 @@
1821
</p>
1922
<div class="hero-actions">
2023
<a href="/register" class="primary-btn">Get started</a>
21-
<a href="/pricing" class="secondary-btn">View pricing</a>
24+
{#if data.marketingFlags.pricing}
25+
<a href="/pricing" class="secondary-btn">View pricing</a>
26+
{/if}
2227
</div>
2328
</div>
2429
</section>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { error } from '@sveltejs/kit';
2+
import { isEnabled } from '$lib/feature-flags';
3+
4+
export function load() {
5+
if (!isEnabled('pricingPage')) error(404, 'Not found');
6+
}

0 commit comments

Comments
 (0)