diff --git a/www/package.json b/www/package.json index 80d49d2..7f7b8e4 100644 --- a/www/package.json +++ b/www/package.json @@ -11,7 +11,6 @@ "dependencies": { "@astrojs/mdx": "^4.3.13", "@astrojs/react": "^4.4.2", - "@radix-ui/react-icons": "^1.3.2", "@radix-ui/react-slot": "^1.2.4", "@splinetool/react-spline": "^4.1.0", "@splinetool/runtime": "^1.12.60", diff --git a/www/pnpm-lock.yaml b/www/pnpm-lock.yaml index 1b75f76..5b18d74 100644 --- a/www/pnpm-lock.yaml +++ b/www/pnpm-lock.yaml @@ -14,9 +14,6 @@ importers: '@astrojs/react': specifier: ^4.4.2 version: 4.4.2(@types/node@24.7.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.31.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-icons': - specifier: ^1.3.2 - version: 1.3.2(react@19.2.4) '@radix-ui/react-slot': specifier: ^1.2.4 version: 1.2.4(@types/react@19.2.14)(react@19.2.4) @@ -674,11 +671,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-icons@1.3.2': - resolution: {integrity: sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==} - peerDependencies: - react: ^16.x || ^17.x || ^18.x || ^19.0.0 || ^19.0.0-rc - '@radix-ui/react-slot@1.2.4': resolution: {integrity: sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==} peerDependencies: @@ -2828,10 +2820,6 @@ snapshots: optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-icons@1.3.2(react@19.2.4)': - dependencies: - react: 19.2.4 - '@radix-ui/react-slot@1.2.4(@types/react@19.2.14)(react@19.2.4)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) diff --git a/www/src/components/Features.astro b/www/src/components/Features.astro index 63a80da..b7a0264 100644 --- a/www/src/components/Features.astro +++ b/www/src/components/Features.astro @@ -1,11 +1,11 @@ --- -import { - RefreshCw, - Building2, - FolderTree, - Activity, - Lock, - Heart, +import { + RefreshCw, + FileText, + ShieldCheck, + Activity, + Lock, + HardDrive, } from 'lucide-react'; const features = [ @@ -17,37 +17,37 @@ const features = [ iconColor: "text-primary" }, { - title: "Bulk Operations", - description: "Mirror entire organizations or user accounts with a single configuration.", - icon: Building2, + 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: "Preserve Structure", - description: "Maintain your GitHub organization structure or customize how repos are organized.", - icon: FolderTree, + 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 Status", - description: "Monitor mirror progress with live updates and detailed activity logs.", + 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 & Private", - description: "Self-hosted solution keeps your code on your infrastructure with full control.", + 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: "Open Source", - description: "Free, transparent, and community-driven development. Contribute and customize.", - icon: Heart, + 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" } diff --git a/www/src/components/Hero.tsx b/www/src/components/Hero.tsx index 0665fd2..43e1c98 100644 --- a/www/src/components/Hero.tsx +++ b/www/src/components/Hero.tsx @@ -1,6 +1,5 @@ import { Button } from "./ui/button"; import { ArrowRight, Shield, RefreshCw, HardDrive } from "lucide-react"; -import { GitHubLogoIcon } from "@radix-ui/react-icons"; import React, { Suspense } from 'react'; const Spline = React.lazy(() => import('@splinetool/react-spline')); diff --git a/www/src/components/Installation.tsx b/www/src/components/Installation.tsx index 95c5d9e..d2f140d 100644 --- a/www/src/components/Installation.tsx +++ b/www/src/components/Installation.tsx @@ -1,8 +1,8 @@ import React, { useState } from 'react'; import { Button } from './ui/button'; -import { Copy, Check, Terminal, Container, Cloud } from 'lucide-react'; +import { Copy, Check, Terminal, Container, Cloud, Ship, Snowflake } from 'lucide-react'; -type InstallMethod = 'docker' | 'manual' | 'proxmox'; +type InstallMethod = 'docker' | 'helm' | 'nix' | 'manual' | 'proxmox'; export function Installation() { const [activeMethod, setActiveMethod] = useState('docker'); @@ -37,6 +37,50 @@ export function Installation() { } ] }, + helm: { + icon: Ship, + title: "Helm", + description: "Deploy to Kubernetes", + steps: [ + { + title: "Clone the repository", + command: "git clone https://github.com/RayLabsHQ/gitea-mirror.git && cd gitea-mirror", + id: "helm-clone" + }, + { + title: "Install the chart", + command: "helm upgrade --install gitea-mirror ./helm/gitea-mirror \\\n --namespace gitea-mirror --create-namespace", + id: "helm-install" + }, + { + title: "Access the application", + command: "kubectl port-forward svc/gitea-mirror 4321:4321 -n gitea-mirror", + id: "helm-access" + } + ] + }, + nix: { + icon: Snowflake, + title: "Nix", + description: "Zero-config with Nix flakes", + steps: [ + { + title: "Run directly with Nix", + command: "nix run github:RayLabsHQ/gitea-mirror", + id: "nix-run" + }, + { + title: "Or install to your profile", + command: "nix profile install github:RayLabsHQ/gitea-mirror", + id: "nix-install" + }, + { + title: "Access the application", + command: "# Open http://localhost:4321 in your browser", + id: "nix-access" + } + ] + }, manual: { icon: Terminal, title: "Manual", diff --git a/www/src/pages/index.astro b/www/src/pages/index.astro index d375b15..c65f4db 100644 --- a/www/src/pages/index.astro +++ b/www/src/pages/index.astro @@ -39,7 +39,7 @@ const structuredData = { name: "RayLabs", url: "https://github.com/RayLabsHQ", }, - softwareVersion: "3.9.2", + softwareVersion: "3.11.0", screenshot: [ `${siteUrl}/assets/dashboard.png`, `${siteUrl}/assets/repositories.png`, @@ -49,8 +49,9 @@ const structuredData = { "Automated scheduled backups", "Self-hosted (full data ownership)", "Metadata preservation (issues, PRs, releases, wiki)", - "Docker support", - "Multi-repository backup", + "Force-push protection with smart detection", + "Docker, Helm, Nix, and Proxmox support", + "Multi-repository and organization backup", "Git LFS support", "Free and open source", ],