1
1
'use client' ;
2
2
3
- import { Routes } from '@/utils/constants' ;
4
- import { Button } from '@onlook/ui/button' ;
5
- import { motion } from 'motion/react' ;
6
3
import { useRouter } from 'next/navigation' ;
4
+ import { motion } from 'motion/react' ;
5
+
6
+ import { Button } from '@onlook/ui/button' ;
7
+
8
+ import { Routes } from '@/utils/constants' ;
7
9
import { useGitHubStats } from '../top-bar/github' ;
8
10
import { UnicornBackground } from './unicorn-background' ;
9
11
@@ -16,67 +18,69 @@ export function AiFeaturesHero() {
16
18
} ;
17
19
18
20
return (
19
- < div className = "w -full h -full flex flex -col items-center justify-center gap-12 p-8 text-lg text-center relative " >
21
+ < div className = "relative flex h -full w -full flex-col items-center justify-center gap-12 p-8 text-center text-lg " >
20
22
< UnicornBackground />
21
- < div className = "flex flex-col gap-6 items-center relative z-20 pt-4 pb-2 max-w-3xl " >
23
+ < div className = "relative z-20 flex max-w-3xl flex-col items-center gap-6 pt-4 pb-2" >
22
24
< motion . h1
23
- className = "text-foreground-secondary text-sm font-medium uppercase tracking-wider mb-4 "
24
- initial = { { opacity : 0 , filter : " blur(4px)" } }
25
- animate = { { opacity : 1 , filter : " blur(0px)" } }
26
- transition = { { duration : 0.6 , ease : " easeOut" } }
27
- style = { { willChange : " opacity, filter" , transform : " translateZ(0)" } }
25
+ className = "text-foreground-secondary mb-4 text-sm font-medium tracking-wider uppercase "
26
+ initial = { { opacity : 0 , filter : ' blur(4px)' } }
27
+ animate = { { opacity : 1 , filter : ' blur(0px)' } }
28
+ transition = { { duration : 0.6 , ease : ' easeOut' } }
29
+ style = { { willChange : ' opacity, filter' , transform : ' translateZ(0)' } }
28
30
>
29
31
AI Design Tools for React Development
30
32
</ motion . h1 >
31
33
< motion . p
32
- className = "text-4xl md: text-6xl font-light leading-tight text-center !leading-[1] text-balance "
33
- initial = { { opacity : 0 , filter : " blur(4px)" } }
34
- animate = { { opacity : 1 , filter : " blur(0px)" } }
35
- transition = { { duration : 0.6 , delay : 0.1 , ease : " easeOut" } }
36
- style = { { willChange : " opacity, filter" , transform : " translateZ(0)" } }
34
+ className = "text-center text-4xl !leading-[1] leading-tight font-light text-balance md: text-6xl "
35
+ initial = { { opacity : 0 , filter : ' blur(4px)' } }
36
+ animate = { { opacity : 1 , filter : ' blur(0px)' } }
37
+ transition = { { duration : 0.6 , delay : 0.1 , ease : ' easeOut' } }
38
+ style = { { willChange : ' opacity, filter' , transform : ' translateZ(0)' } }
37
39
>
38
40
Build React Apps with AI That Understands Your Code
39
41
</ motion . p >
40
42
< motion . p
41
- className = "text-lg text- foreground-secondary mx-auto max-w-xl text-center"
42
- initial = { { opacity : 0 , filter : " blur(4px)" } }
43
- animate = { { opacity : 1 , filter : " blur(0px)" } }
44
- transition = { { duration : 0.6 , delay : 0.15 , ease : " easeOut" } }
45
- style = { { willChange : " opacity, filter" , transform : " translateZ(0)" } }
43
+ className = "text-foreground-secondary mx-auto max-w-xl text-center text-lg "
44
+ initial = { { opacity : 0 , filter : ' blur(4px)' } }
45
+ animate = { { opacity : 1 , filter : ' blur(0px)' } }
46
+ transition = { { duration : 0.6 , delay : 0.15 , ease : ' easeOut' } }
47
+ style = { { willChange : ' opacity, filter' , transform : ' translateZ(0)' } }
46
48
>
47
- Onlook's AI doesn't just generate code—it understands your React components, Tailwind patterns, and project architecture to create production-ready components that fit seamlessly into your existing codebase.
49
+ Onlook's AI doesn't just generate code—it understands your React components,
50
+ Tailwind patterns, and project architecture to create production-ready
51
+ components that fit seamlessly into your existing codebase.
48
52
</ motion . p >
49
53
< motion . div
50
54
className = "mt-8"
51
- initial = { { opacity : 0 , filter : " blur(4px)" } }
52
- animate = { { opacity : 1 , filter : " blur(0px)" } }
53
- transition = { { duration : 0.6 , delay : 0.3 , ease : " easeOut" } }
54
- style = { { willChange : " opacity, filter" , transform : " translateZ(0)" } }
55
+ initial = { { opacity : 0 , filter : ' blur(4px)' } }
56
+ animate = { { opacity : 1 , filter : ' blur(0px)' } }
57
+ transition = { { duration : 0.6 , delay : 0.3 , ease : ' easeOut' } }
58
+ style = { { willChange : ' opacity, filter' , transform : ' translateZ(0)' } }
55
59
>
56
60
< Button
57
61
variant = "secondary"
58
62
size = "lg"
59
- className = "p-6 cursor-pointer hover:bg-foreground-primary hover:text-background-primary transition-all duration-300"
63
+ className = "hover:bg-foreground-primary hover:text-background-primary cursor-pointer p-6 transition-all duration-300"
60
64
onClick = { handleStartBuilding }
61
65
>
62
66
Start Building with AI
63
67
</ Button >
64
68
</ motion . div >
65
69
< motion . div
66
- className = "mt-8 flex items-center justify-center gap-6 text-sm text-foreground-secondary "
67
- initial = { { opacity : 0 , filter : " blur(4px)" } }
68
- animate = { { opacity : 1 , filter : " blur(0px)" } }
69
- transition = { { duration : 0.6 , delay : 0.4 , ease : " easeOut" } }
70
- style = { { willChange : " opacity, filter" , transform : " translateZ(0)" } }
70
+ className = "text-foreground-secondary mt-8 flex items-center justify-center gap-6 text-sm"
71
+ initial = { { opacity : 0 , filter : ' blur(4px)' } }
72
+ animate = { { opacity : 1 , filter : ' blur(0px)' } }
73
+ transition = { { duration : 0.6 , delay : 0.4 , ease : ' easeOut' } }
74
+ style = { { willChange : ' opacity, filter' , transform : ' translateZ(0)' } }
71
75
>
72
76
< div className = "flex items-center gap-2" >
73
77
< span > { starCount } + GitHub stars</ span >
74
78
</ div >
75
- < div className = "w-1 h-1 bg-foreground-secondary rounded-full" > </ div >
79
+ < div className = "bg-foreground-secondary h-1 w-1 rounded-full" > </ div >
76
80
< div className = "flex items-center gap-2" >
77
81
< span > YC W25</ span >
78
82
</ div >
79
- < div className = "w-1 h-1 bg-foreground-secondary rounded-full" > </ div >
83
+ < div className = "bg-foreground-secondary h-1 w-1 rounded-full" > </ div >
80
84
< div className = "flex items-center gap-2" >
81
85
< span > Open Source</ span >
82
86
</ div >
0 commit comments