tfrere HF Staff commited on
Commit
125a4bc
·
1 Parent(s): 5e00009

feat: add platform support notices

Browse files

- Download page: Show 'Coming soon' tag on Windows/Linux cards
- Download page: Show specific message when user is on Windows/Linux
- GettingStarted: Add macOS-only notice with link to Build section
- Home: Add Beta badge next to Reachy Mini title

src/pages/Download.jsx CHANGED
@@ -110,12 +110,14 @@ function LinuxIcon({ sx = {} }) {
110
  function PlatformCard({ platformKey, url, isActive, onClick }) {
111
  const platform = PLATFORMS[platformKey];
112
  const Icon = platform?.icon;
 
113
 
114
  return (
115
  <Card
116
  onClick={onClick}
117
  sx={{
118
  cursor: 'pointer',
 
119
  background: isActive
120
  ? 'linear-gradient(135deg, rgba(59, 130, 246, 0.15) 0%, rgba(139, 92, 246, 0.1) 100%)'
121
  : 'rgba(255, 255, 255, 0.03)',
@@ -123,18 +125,39 @@ function PlatformCard({ platformKey, url, isActive, onClick }) {
123
  borderColor: isActive ? 'rgba(59, 130, 246, 0.4)' : 'rgba(255, 255, 255, 0.08)',
124
  backdropFilter: 'blur(10px)',
125
  transition: 'all 0.25s ease',
 
126
  '&:hover': {
127
  borderColor: isActive ? 'rgba(59, 130, 246, 0.6)' : 'rgba(255, 255, 255, 0.2)',
128
  transform: 'translateY(-4px)',
129
  boxShadow: isActive
130
  ? '0 12px 40px rgba(59, 130, 246, 0.2)'
131
  : '0 12px 40px rgba(0, 0, 0, 0.3)',
 
132
  },
133
  }}
134
  >
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
135
  <CardContent
136
  component="a"
137
- href={url}
138
  sx={{
139
  display: 'flex',
140
  flexDirection: 'column',
@@ -144,6 +167,7 @@ function PlatformCard({ platformKey, url, isActive, onClick }) {
144
  color: 'inherit',
145
  p: 3,
146
  '&:last-child': { pb: 3 },
 
147
  }}
148
  >
149
  <Box sx={{
@@ -440,40 +464,83 @@ export default function Download() {
440
  </Typography>
441
  </Stack>
442
 
443
- {/* Primary download button */}
444
- <Button
445
- variant="contained"
446
- size="large"
447
- href={currentUrl}
448
- startIcon={<DownloadIcon />}
449
- sx={{
450
- px: 6,
451
- py: 2,
452
- fontSize: 17,
453
- fontWeight: 600,
454
- borderRadius: 3,
455
- background: 'linear-gradient(135deg, #FF9500 0%, #764ba2 100%)',
456
- boxShadow: '0 8px 32px rgba(255, 149, 0, 0.35)',
457
- transition: 'all 0.3s ease',
458
- '&:hover': {
459
- boxShadow: '0 12px 48px rgba(59, 130, 246, 0.5)',
460
- transform: 'translateY(-2px)',
461
- },
462
- }}
463
- >
464
- Download for {currentPlatform?.name}
465
- </Button>
 
 
466
 
467
- <Typography
468
- variant="body2"
469
- sx={{
470
- color: 'rgba(255,255,255,0.4)',
471
- mt: 2,
472
- fontSize: 13,
473
- }}
474
- >
475
- {currentPlatform?.subtitle} • {currentPlatform?.format?.replace('.', '').toUpperCase()} package
476
- </Typography>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
477
 
478
  {/* App screenshot */}
479
  <Box
@@ -518,6 +585,27 @@ export default function Download() {
518
  </Grid>
519
  ))}
520
  </Grid>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
521
  </Box>
522
 
523
  {/* Features / What's included */}
 
110
  function PlatformCard({ platformKey, url, isActive, onClick }) {
111
  const platform = PLATFORMS[platformKey];
112
  const Icon = platform?.icon;
113
+ const isComingSoon = platformKey.includes('windows') || platformKey.includes('linux');
114
 
115
  return (
116
  <Card
117
  onClick={onClick}
118
  sx={{
119
  cursor: 'pointer',
120
+ position: 'relative',
121
  background: isActive
122
  ? 'linear-gradient(135deg, rgba(59, 130, 246, 0.15) 0%, rgba(139, 92, 246, 0.1) 100%)'
123
  : 'rgba(255, 255, 255, 0.03)',
 
125
  borderColor: isActive ? 'rgba(59, 130, 246, 0.4)' : 'rgba(255, 255, 255, 0.08)',
126
  backdropFilter: 'blur(10px)',
127
  transition: 'all 0.25s ease',
128
+ opacity: isComingSoon ? 0.7 : 1,
129
  '&:hover': {
130
  borderColor: isActive ? 'rgba(59, 130, 246, 0.6)' : 'rgba(255, 255, 255, 0.2)',
131
  transform: 'translateY(-4px)',
132
  boxShadow: isActive
133
  ? '0 12px 40px rgba(59, 130, 246, 0.2)'
134
  : '0 12px 40px rgba(0, 0, 0, 0.3)',
135
+ opacity: 1,
136
  },
137
  }}
138
  >
139
+ {/* Coming soon tag */}
140
+ {isComingSoon && (
141
+ <Chip
142
+ label="Coming soon"
143
+ size="small"
144
+ sx={{
145
+ position: 'absolute',
146
+ top: 8,
147
+ right: 8,
148
+ backgroundColor: 'rgba(255, 149, 0, 0.2)',
149
+ color: '#FF9500',
150
+ fontSize: 10,
151
+ fontWeight: 700,
152
+ height: 20,
153
+ '& .MuiChip-label': { px: 1 },
154
+ }}
155
+ />
156
+ )}
157
+
158
  <CardContent
159
  component="a"
160
+ href={isComingSoon ? undefined : url}
161
  sx={{
162
  display: 'flex',
163
  flexDirection: 'column',
 
167
  color: 'inherit',
168
  p: 3,
169
  '&:last-child': { pb: 3 },
170
+ pointerEvents: isComingSoon ? 'none' : 'auto',
171
  }}
172
  >
173
  <Box sx={{
 
464
  </Typography>
465
  </Stack>
466
 
467
+ {/* Primary download button - different for macOS vs Windows/Linux */}
468
+ {detectedPlatform?.startsWith('darwin') ? (
469
+ <>
470
+ <Button
471
+ variant="contained"
472
+ size="large"
473
+ href={currentUrl}
474
+ startIcon={<DownloadIcon />}
475
+ sx={{
476
+ px: 6,
477
+ py: 2,
478
+ fontSize: 17,
479
+ fontWeight: 600,
480
+ borderRadius: 3,
481
+ background: 'linear-gradient(135deg, #FF9500 0%, #764ba2 100%)',
482
+ boxShadow: '0 8px 32px rgba(255, 149, 0, 0.35)',
483
+ transition: 'all 0.3s ease',
484
+ '&:hover': {
485
+ boxShadow: '0 12px 48px rgba(59, 130, 246, 0.5)',
486
+ transform: 'translateY(-2px)',
487
+ },
488
+ }}
489
+ >
490
+ Download for {currentPlatform?.name}
491
+ </Button>
492
 
493
+ <Typography
494
+ variant="body2"
495
+ sx={{
496
+ color: 'rgba(255,255,255,0.4)',
497
+ mt: 2,
498
+ fontSize: 13,
499
+ }}
500
+ >
501
+ {currentPlatform?.subtitle} • {currentPlatform?.format?.replace('.', '').toUpperCase()} package
502
+ </Typography>
503
+ </>
504
+ ) : (
505
+ <>
506
+ {/* Windows/Linux - Coming soon message */}
507
+ <Box
508
+ sx={{
509
+ px: 5,
510
+ py: 2.5,
511
+ borderRadius: 3,
512
+ background: 'linear-gradient(135deg, rgba(255, 149, 0, 0.15) 0%, rgba(139, 92, 246, 0.1) 100%)',
513
+ border: '1px solid rgba(255, 149, 0, 0.3)',
514
+ display: 'inline-block',
515
+ }}
516
+ >
517
+ <Typography
518
+ variant="h6"
519
+ sx={{
520
+ color: '#FF9500',
521
+ fontWeight: 600,
522
+ fontSize: 17,
523
+ }}
524
+ >
525
+ 🚧 {currentPlatform?.name} support coming soon!
526
+ </Typography>
527
+ </Box>
528
+
529
+ <Typography
530
+ variant="body2"
531
+ sx={{
532
+ color: 'rgba(255,255,255,0.5)',
533
+ mt: 2,
534
+ fontSize: 14,
535
+ maxWidth: 400,
536
+ mx: 'auto',
537
+ }}
538
+ >
539
+ We're working hard to bring Reachy Mini Control to {currentPlatform?.name}.
540
+ In the meantime, macOS is fully supported!
541
+ </Typography>
542
+ </>
543
+ )}
544
 
545
  {/* App screenshot */}
546
  <Box
 
585
  </Grid>
586
  ))}
587
  </Grid>
588
+
589
+ {/* Platform support notice - only show on macOS */}
590
+ {detectedPlatform?.startsWith('darwin') && (
591
+ <Box
592
+ sx={{
593
+ mt: 3,
594
+ p: 2,
595
+ background: 'rgba(255, 255, 255, 0.03)',
596
+ border: '1px solid rgba(255, 255, 255, 0.08)',
597
+ borderRadius: 2,
598
+ textAlign: 'center',
599
+ }}
600
+ >
601
+ <Typography
602
+ variant="body2"
603
+ sx={{ color: 'rgba(255,255,255,0.5)' }}
604
+ >
605
+ 🚧 Windows & Linux support coming soon
606
+ </Typography>
607
+ </Box>
608
+ )}
609
  </Box>
610
 
611
  {/* Features / What's included */}
src/pages/GettingStarted.jsx CHANGED
@@ -315,9 +315,14 @@ export default function GettingStarted() {
315
  <Typography fontWeight={600}>Download the desktop app</Typography>
316
  </StepLabel>
317
  <StepContent>
318
- <Typography variant="body2" color="text.secondary" sx={{ mb: 2 }}>
319
  The desktop app includes everything you need to control your Lite version.
320
  </Typography>
 
 
 
 
 
321
  <Button
322
  variant="contained"
323
  component={RouterLink}
 
315
  <Typography fontWeight={600}>Download the desktop app</Typography>
316
  </StepLabel>
317
  <StepContent>
318
+ <Typography variant="body2" color="text.secondary" sx={{ mb: 1 }}>
319
  The desktop app includes everything you need to control your Lite version.
320
  </Typography>
321
+ <Typography variant="caption" sx={{ display: 'block', mb: 2, color: 'warning.main' }}>
322
+ 🍎 Currently available for macOS only. Windows & Linux coming soon!
323
+ <br />
324
+ In the meantime, check the <RouterLink to="/build" style={{ color: 'inherit' }}>Build section</RouterLink> to use the daemon CLI directly.
325
+ </Typography>
326
  <Button
327
  variant="contained"
328
  component={RouterLink}
src/pages/Home.jsx CHANGED
@@ -64,6 +64,19 @@ function FloatingSticker({ src, size, top, left, right, bottom, rotation = 0, fl
64
 
65
  // Hero Section
66
  function Hero() {
 
 
 
 
 
 
 
 
 
 
 
 
 
67
  return (
68
  <Box
69
  sx={{
@@ -72,7 +85,7 @@ function Hero() {
72
  display: 'flex',
73
  alignItems: 'center',
74
  backgroundColor: '#000',
75
- overflow: 'visible',
76
  // Curved bottom edge
77
  '&::after': {
78
  content: '""',
@@ -88,26 +101,25 @@ function Hero() {
88
  },
89
  }}
90
  >
91
- <Box
92
- component="video"
93
  autoPlay
94
  muted
95
  loop
96
  playsInline
97
- sx={{
98
  position: 'absolute',
99
  top: '50%',
100
  left: '50%',
101
- transform: 'translate(-45%, -50%)',
102
  minWidth: '100%',
103
  minHeight: '100%',
104
  width: 'auto',
105
  height: 'auto',
106
  opacity: 0.9,
 
107
  }}
108
  >
109
  <source src="/assets/Reachy-mini-wake-up-companion.mp4" type="video/mp4" />
110
- </Box>
111
 
112
  {/* Overlay gradients + vignette */}
113
  <Box
@@ -149,20 +161,44 @@ function Hero() {
149
  </Typography>
150
  </Stack>
151
 
152
- <Typography
153
- variant="h1"
154
- component="h1"
155
- sx={{
156
- color: 'white',
157
- mb: 2,
158
- background: 'linear-gradient(135deg, #ffffff 0%, rgba(255,255,255,0.85) 100%)',
159
- backgroundClip: 'text',
160
- WebkitBackgroundClip: 'text',
161
- WebkitTextFillColor: 'transparent',
162
- }}
163
- >
164
- Reachy Mini
165
- </Typography>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
166
 
167
  <Typography
168
  variant="h5"
 
64
 
65
  // Hero Section
66
  function Hero() {
67
+ const [scrollY, setScrollY] = useState(0);
68
+
69
+ useEffect(() => {
70
+ const handleScroll = () => setScrollY(window.scrollY);
71
+ window.addEventListener('scroll', handleScroll, { passive: true });
72
+ return () => window.removeEventListener('scroll', handleScroll);
73
+ }, []);
74
+
75
+ const videoParallax = useSpring({
76
+ transform: `translate(-45%, calc(-50% + ${scrollY * 0.15}px))`,
77
+ config: { mass: 1, tension: 280, friction: 60 },
78
+ });
79
+
80
  return (
81
  <Box
82
  sx={{
 
85
  display: 'flex',
86
  alignItems: 'center',
87
  backgroundColor: '#000',
88
+ overflow: 'hidden',
89
  // Curved bottom edge
90
  '&::after': {
91
  content: '""',
 
101
  },
102
  }}
103
  >
104
+ <animated.video
 
105
  autoPlay
106
  muted
107
  loop
108
  playsInline
109
+ style={{
110
  position: 'absolute',
111
  top: '50%',
112
  left: '50%',
 
113
  minWidth: '100%',
114
  minHeight: '100%',
115
  width: 'auto',
116
  height: 'auto',
117
  opacity: 0.9,
118
+ ...videoParallax,
119
  }}
120
  >
121
  <source src="/assets/Reachy-mini-wake-up-companion.mp4" type="video/mp4" />
122
+ </animated.video>
123
 
124
  {/* Overlay gradients + vignette */}
125
  <Box
 
161
  </Typography>
162
  </Stack>
163
 
164
+ <Box sx={{ position: 'relative', display: 'inline-block', mb: 2 }}>
165
+ <Typography
166
+ variant="h1"
167
+ component="h1"
168
+ sx={{
169
+ color: 'white',
170
+ background: 'linear-gradient(135deg, #ffffff 0%, rgba(255,255,255,0.85) 100%)',
171
+ backgroundClip: 'text',
172
+ WebkitBackgroundClip: 'text',
173
+ WebkitTextFillColor: 'transparent',
174
+ }}
175
+ >
176
+ Reachy Mini
177
+ </Typography>
178
+ <Box
179
+ sx={{
180
+ position: 'absolute',
181
+ top: 25,
182
+ right: -55,
183
+ px: 1.2,
184
+ py: 0.4,
185
+ borderRadius: '5px',
186
+ border: "1px solid #FF9500",
187
+ }}
188
+ >
189
+ <Typography
190
+ sx={{
191
+ fontSize: 11,
192
+ fontWeight: 700,
193
+ color: 'white',
194
+ textTransform: 'uppercase',
195
+ letterSpacing: 0.5,
196
+ }}
197
+ >
198
+ Beta
199
+ </Typography>
200
+ </Box>
201
+ </Box>
202
 
203
  <Typography
204
  variant="h5"