Skip to content

Commit c94e6ce

Browse files
ChengaDevclaude
andcommitted
Enable YouTube feature flag, improve SEO, add to SeeAlso
- youtube flag hardcoded to true (ready for production) - Improved EN title/description with basketball + FIBA keywords - Added WebApplication schema to YouTube page SEO - YouTube Free Play added to SeeAlso component on content pages Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 8f4885e commit c94e6ce

4 files changed

Lines changed: 27 additions & 4 deletions

File tree

src/components/SeeAlso.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import AppRoutes from '../AppRoutes'
66
import featureFlags from '../featureFlags'
77

88
interface SeeAlsoProps {
9-
exclude?: ('instructions' | 'faq' | 'fiba-resources' | 'reaction-training')[]
9+
exclude?: ('instructions' | 'faq' | 'fiba-resources' | 'reaction-training' | 'youtube')[]
1010
}
1111

1212
const SeeAlso: React.FC<SeeAlsoProps> = ({ exclude = [] }) => {
@@ -20,6 +20,9 @@ const SeeAlso: React.FC<SeeAlsoProps> = ({ exclude = [] }) => {
2020
...(featureFlags.reactionTraining
2121
? [{ key: 'reaction-training', label: locals.reactionTraining, to: routes.ReactionTraining }]
2222
: []),
23+
...(featureFlags.youtube
24+
? [{ key: 'youtube', label: locals.youtubePageTitle, to: routes.YouTube }]
25+
: []),
2326
].filter(l => !exclude.includes(l.key as any))
2427

2528
return (

src/components/YouTubePage.tsx

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,32 @@ const YouTubePage: React.FC = () => {
5656
setShowChangeInput(true)
5757
}
5858

59+
const youtubeSchema = {
60+
'@context': 'https://schema.org',
61+
'@type': 'WebApplication',
62+
name: locals.youtubePageTitle,
63+
url: 'https://www.24shotclock.com/youtube',
64+
description: locals.youtubePageDescription,
65+
applicationCategory: 'SportsApplication',
66+
operatingSystem: 'Any',
67+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
68+
featureList: [
69+
'Paste any YouTube basketball game URL',
70+
'24-second FIBA shot clock panel',
71+
'14-second offensive rebound reset',
72+
'Real-time buzzer sound',
73+
'Works on mobile and desktop',
74+
],
75+
}
76+
5977
/* ── Landing: no video yet ── */
6078
if (!videoId) {
6179
return (
6280
<LandingWrapper>
6381
<SEO
6482
title={`${locals.youtubePageTitle} | ShotClock Pro`}
6583
description={locals.youtubePageDescription}
84+
schema={youtubeSchema}
6685
/>
6786
<LandingTitle>{locals.youtubePageTitle}</LandingTitle>
6887
<LandingSubtitle>{locals.youtubePageDescription}</LandingSubtitle>
@@ -87,6 +106,7 @@ const YouTubePage: React.FC = () => {
87106
<SEO
88107
title={`${locals.youtubePageTitle} | ShotClock Pro`}
89108
description={locals.youtubePageDescription}
109+
schema={youtubeSchema}
90110
/>
91111

92112
<PageTitle>{locals.youtubePageTitle}</PageTitle>

src/featureFlags.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const featureFlags = {
22
reactionTraining: process.env.REACT_APP_TRAINING_ENABLED === 'true',
3-
youtube: process.env.REACT_APP_YOUTUBE_ENABLED === 'true',
3+
youtube: true,
44
}
55

66
export default featureFlags

src/localization/locailzation.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -262,8 +262,8 @@ const AppLocalization: AppLocalizationType = {
262262
f: 'Missed',
263263
},
264264
// YouTube Free Play
265-
youtubePageTitle: 'YouTube Free Play',
266-
youtubePageDescription: 'Paste a YouTube basketball game link and operate the shot clock alongside it in real time.',
265+
youtubePageTitle: 'YouTube Basketball Free Play',
266+
youtubePageDescription: 'Watch any YouTube basketball game and operate a real 24-second FIBA shot clock alongside it — free, instant, no installation needed.',
267267
youtubeUrlPlaceholder: 'Paste a YouTube URL...',
268268
youtubeLoadVideo: 'Load',
269269
youtubeChangeVideo: 'Change Video',

0 commit comments

Comments
 (0)