Files
gitea-mirror/www/src/components/Features.astro
Arunavo Ray 534150ecf9 chore(www): update website content, fix build, add Helm/Nix install methods
- Update softwareVersion from 3.9.2 to 3.11.0
- Add Helm and Nix installation tabs to Getting Started section
- Fix Helm instructions to use local chart path (no published repo)
- Update Features section: add Metadata Preservation, Force-Push Protection, Git LFS Support
- Remove unused @radix-ui/react-icons import from Hero.tsx and dependency from package.json
- Update structured data featureList with newer capabilities
2026-03-02 16:23:32 +05:30

90 lines
3.3 KiB
Plaintext

---
import {
RefreshCw,
FileText,
ShieldCheck,
Activity,
Lock,
HardDrive,
} from 'lucide-react';
const features = [
{
title: "Automated Mirroring",
description: "Set it and forget it. Automatically sync your GitHub repositories to Gitea on a schedule.",
icon: RefreshCw,
gradient: "from-primary/10 to-accent/10",
iconColor: "text-primary"
},
{
title: "Metadata Preservation",
description: "Mirror issues, pull requests, releases, labels, milestones, and wiki pages alongside your code.",
icon: FileText,
gradient: "from-accent/10 to-accent-teal/10",
iconColor: "text-accent"
},
{
title: "Force-Push Protection",
description: "Detect upstream force-pushes and automatically snapshot repos before destructive changes.",
icon: ShieldCheck,
gradient: "from-accent-teal/10 to-primary/10",
iconColor: "text-accent-teal"
},
{
title: "Real-time Dashboard",
description: "Monitor mirror progress with live updates, activity logs, and per-repo status tracking.",
icon: Activity,
gradient: "from-accent-coral/10 to-primary/10",
iconColor: "text-accent-coral"
},
{
title: "Secure & Self-Hosted",
description: "Tokens encrypted at rest with AES-256-GCM. Your code stays on your infrastructure.",
icon: Lock,
gradient: "from-accent-purple/10 to-primary/10",
iconColor: "text-accent-purple"
},
{
title: "Git LFS Support",
description: "Mirror large files and binary assets alongside your repositories with full LFS support.",
icon: HardDrive,
gradient: "from-primary/10 to-accent-purple/10",
iconColor: "text-primary"
}
];
---
<section id="features" class="py-16 sm:py-24 px-4 sm:px-6 lg:px-8">
<div class="max-w-7xl mx-auto">
<div class="text-center mb-12 sm:mb-16">
<h2 class="text-2xl sm:text-3xl md:text-4xl font-bold tracking-tight px-4">
Everything You Need for
<span class="text-gradient from-primary to-accent block sm:inline"> Reliable Backups</span>
</h2>
<p class="mt-4 text-base sm:text-lg text-muted-foreground max-w-2xl mx-auto px-4">
Powerful features designed to keep your code safe and accessible, no matter what happens.
</p>
</div>
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 sm:gap-6 lg:gap-8">
{features.map((feature) => {
const Icon = feature.icon;
return (
<div
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`}
>
<div class="absolute inset-0 bg-gradient-to-br from-transparent to-background/50 opacity-0 group-hover:opacity-100 transition-opacity duration-500" />
<div class="relative">
<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`}>
<Icon className="w-5 h-5 sm:w-6 sm:h-6" />
</div>
<h3 class="text-lg sm:text-xl font-semibold mb-2">{feature.title}</h3>
<p class="text-sm sm:text-base text-muted-foreground">{feature.description}</p>
</div>
</div>
);
})}
</div>
</div>
</section>