1
+ ---
2
+ import {
3
+ RefreshCw ,
4
+ Building2 ,
5
+ FolderTree ,
6
+ Activity ,
7
+ Lock ,
8
+ Heart ,
9
+ } from ' lucide-react' ;
10
+
11
+ const features = [
12
+ {
13
+ title: " Automated Mirroring" ,
14
+ description: " Set it and forget it. Automatically sync your GitHub repositories to Gitea on a schedule." ,
15
+ icon: RefreshCw ,
16
+ gradient: " from-primary/10 to-accent/10" ,
17
+ iconColor: " text-primary"
18
+ },
19
+ {
20
+ title: " Bulk Operations" ,
21
+ description: " Mirror entire organizations or user accounts with a single configuration." ,
22
+ icon: Building2 ,
23
+ gradient: " from-accent/10 to-accent-teal/10" ,
24
+ iconColor: " text-accent"
25
+ },
26
+ {
27
+ title: " Preserve Structure" ,
28
+ description: " Maintain your GitHub organization structure or customize how repos are organized." ,
29
+ icon: FolderTree ,
30
+ gradient: " from-accent-teal/10 to-primary/10" ,
31
+ iconColor: " text-accent-teal"
32
+ },
33
+ {
34
+ title: " Real-time Status" ,
35
+ description: " Monitor mirror progress with live updates and detailed activity logs." ,
36
+ icon: Activity ,
37
+ gradient: " from-accent-coral/10 to-primary/10" ,
38
+ iconColor: " text-accent-coral"
39
+ },
40
+ {
41
+ title: " Secure & Private" ,
42
+ description: " Self-hosted solution keeps your code on your infrastructure with full control." ,
43
+ icon: Lock ,
44
+ gradient: " from-accent-purple/10 to-primary/10" ,
45
+ iconColor: " text-accent-purple"
46
+ },
47
+ {
48
+ title: " Open Source" ,
49
+ description: " Free, transparent, and community-driven development. Contribute and customize." ,
50
+ icon: Heart ,
51
+ gradient: " from-primary/10 to-accent-purple/10" ,
52
+ iconColor: " text-primary"
53
+ }
54
+ ];
55
+ ---
56
+
57
+ <section id =" features" class =" py-16 sm:py-24 px-4 sm:px-6 lg:px-8" >
58
+ <div class =" max-w-7xl mx-auto" >
59
+ <div class =" text-center mb-12 sm:mb-16" >
60
+ <h2 class =" text-2xl sm:text-3xl md:text-4xl font-bold tracking-tight px-4" >
61
+ Everything You Need for
62
+ <span class =" text-gradient from-primary to-accent block sm:inline" > Reliable Backups</span >
63
+ </h2 >
64
+ <p class =" mt-4 text-base sm:text-lg text-muted-foreground max-w-2xl mx-auto px-4" >
65
+ Powerful features designed to keep your code safe and accessible, no matter what happens.
66
+ </p >
67
+ </div >
68
+
69
+ <div class =" grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 sm:gap-6 lg:gap-8" >
70
+ { features .map ((feature ) => {
71
+ const Icon = feature .icon ;
72
+ return (
73
+ <div
74
+ class = { ` group relative p-6 sm:p-8 rounded-xl sm:rounded-2xl border bg-gradient-to-br ${feature .gradient } backdrop-blur-sm hover:shadow-lg hover:shadow-primary/10 transition-all duration-300 hover:-translate-y-1 hover:border-primary/30 overflow-hidden ` }
75
+ >
76
+ <div class = " absolute inset-0 bg-gradient-to-br from-transparent to-background/50 opacity-0 group-hover:opacity-100 transition-opacity duration-500" />
77
+ <div class = " relative" >
78
+ <div class = { ` inline-flex p-2.5 sm:p-3 rounded-lg bg-background/80 backdrop-blur-sm mb-3 sm:mb-4 ${feature .iconColor } shadow-sm ` } >
79
+ <Icon className = " w-5 h-5 sm:w-6 sm:h-6" />
80
+ </div >
81
+
82
+ <h3 class = " text-lg sm:text-xl font-semibold mb-2" >{ feature .title } </h3 >
83
+ <p class = " text-sm sm:text-base text-muted-foreground" >{ feature .description } </p >
84
+ </div >
85
+ </div >
86
+ );
87
+ })}
88
+ </div >
89
+ </div >
90
+ </section >
0 commit comments