|  | 
| 1 | 1 | import Link from 'next/link'; | 
|  | 2 | +import { ArrowRight, Zap, Shield, Puzzle, Cog, Bell, BarChart3, GitBranch, Download } from 'lucide-react'; | 
|  | 3 | +import { StarCounter } from '@/components/star-counter'; | 
| 2 | 4 | 
 | 
| 3 |  | -export default function HomePage() { | 
|  | 5 | +async function getGitHubStars() { | 
|  | 6 | +  try { | 
|  | 7 | +    const res = await fetch('https://api.github.com/repos/rivenmedia/riven', { | 
|  | 8 | +      next: { revalidate: 3600 } // Revalidate every hour | 
|  | 9 | +    }); | 
|  | 10 | +    if (!res.ok) return null; | 
|  | 11 | +    const data = await res.json(); | 
|  | 12 | +    return data.stargazers_count as number; | 
|  | 13 | +  } catch { | 
|  | 14 | +    return null; | 
|  | 15 | +  } | 
|  | 16 | +} | 
|  | 17 | + | 
|  | 18 | +export default async function HomePage() { | 
|  | 19 | +  const stars = await getGitHubStars(); | 
| 4 | 20 |   return ( | 
| 5 |  | -    <main className="flex flex-1 flex-col justify-center text-center"> | 
| 6 |  | -      <h1 className="mb-4 text-2xl font-bold">Hello World</h1> | 
| 7 |  | -      <p className="text-fd-muted-foreground"> | 
| 8 |  | -        You can open{' '} | 
| 9 |  | -        <Link | 
| 10 |  | -          href="/docs" | 
| 11 |  | -          className="text-fd-foreground font-semibold underline" | 
| 12 |  | -        > | 
| 13 |  | -          /docs | 
| 14 |  | -        </Link>{' '} | 
| 15 |  | -        and see the documentation. | 
| 16 |  | -      </p> | 
|  | 21 | +    <main className="flex flex-1 flex-col"> | 
|  | 22 | +      {/* Hero Section */} | 
|  | 23 | +      <section className="relative overflow-hidden border-b border-fd-border bg-gradient-to-b from-fd-background to-fd-muted/20 px-4 py-20 md:py-32"> | 
|  | 24 | +        <div className="mx-auto max-w-6xl"> | 
|  | 25 | +          <div className="flex flex-col items-center text-center"> | 
|  | 26 | +            <div className="mb-6 inline-flex items-center gap-2 rounded-full border border-fd-border bg-fd-muted/50 px-4 py-2 text-sm"> | 
|  | 27 | +              <Zap className="h-4 w-4 text-yellow-500" /> | 
|  | 28 | +              <span className="text-fd-muted-foreground"> | 
|  | 29 | +                vfs-based media management | 
|  | 30 | +              </span> | 
|  | 31 | +            </div> | 
|  | 32 | + | 
|  | 33 | +            <h1 className="mb-6 text-4xl font-bold tracking-tight md:text-6xl lg:text-7xl"> | 
|  | 34 | +              The Ultimate | 
|  | 35 | +              <br /> | 
|  | 36 | +              <span className="bg-gradient-to-r from-blue-500 via-purple-500 to-pink-500 bg-clip-text text-transparent"> | 
|  | 37 | +                Media Management | 
|  | 38 | +              </span> | 
|  | 39 | +              <br /> | 
|  | 40 | +              Solution | 
|  | 41 | +            </h1> | 
|  | 42 | + | 
|  | 43 | +            <p className="mb-8 max-w-2xl text-lg text-fd-muted-foreground md:text-xl"> | 
|  | 44 | +              Riven is a comprehensive media management system that uses a virtual file system to organize your content. | 
|  | 45 | +              Built with efficiency and automation in mind, it seamlessly integrates with your favorite tools. | 
|  | 46 | +            </p> | 
|  | 47 | + | 
|  | 48 | +            <div className="flex flex-col gap-4 sm:flex-row sm:items-center"> | 
|  | 49 | +              <Link | 
|  | 50 | +                href="/docs" | 
|  | 51 | +                className="inline-flex items-center gap-2 rounded-lg bg-fd-primary px-6 py-3 font-semibold text-fd-primary-foreground transition-colors hover:bg-fd-primary/90" | 
|  | 52 | +              > | 
|  | 53 | +                Get Started | 
|  | 54 | +                <ArrowRight className="h-4 w-4" /> | 
|  | 55 | +              </Link> | 
|  | 56 | +              <Link | 
|  | 57 | +                href="https://github.com/rivenmedia/riven" | 
|  | 58 | +                className="inline-flex items-center gap-2 rounded-lg border border-fd-border bg-fd-background px-6 py-3 font-semibold transition-colors hover:bg-fd-muted/50" | 
|  | 59 | +              > | 
|  | 60 | +                <Download className="h-4 w-4" /> | 
|  | 61 | +                View on GitHub | 
|  | 62 | +              </Link> | 
|  | 63 | +              {stars && <StarCounter targetCount={stars} />} | 
|  | 64 | +            </div> | 
|  | 65 | + | 
|  | 66 | +            <div className="mt-8 flex items-center gap-6 text-sm text-fd-muted-foreground"> | 
|  | 67 | +              <div className="flex items-center gap-2"> | 
|  | 68 | +                <div className="h-2 w-2 rounded-full bg-green-500"></div> | 
|  | 69 | +                <span>Open Source</span> | 
|  | 70 | +              </div> | 
|  | 71 | +              <div className="flex items-center gap-2"> | 
|  | 72 | +                <div className="h-2 w-2 rounded-full bg-blue-500"></div> | 
|  | 73 | +                <span>Self-Hosted</span> | 
|  | 74 | +              </div> | 
|  | 75 | +              <div className="flex items-center gap-2"> | 
|  | 76 | +                <div className="h-2 w-2 rounded-full bg-purple-500"></div> | 
|  | 77 | +                <span>Docker Ready</span> | 
|  | 78 | +              </div> | 
|  | 79 | +            </div> | 
|  | 80 | +          </div> | 
|  | 81 | +        </div> | 
|  | 82 | +      </section> | 
|  | 83 | + | 
|  | 84 | +      {/* Features Grid */} | 
|  | 85 | +      <section className="border-b border-fd-border px-4 py-20"> | 
|  | 86 | +        <div className="mx-auto max-w-6xl"> | 
|  | 87 | +          <div className="mb-12 text-center"> | 
|  | 88 | +            <h2 className="mb-4 text-3xl font-bold md:text-4xl"> | 
|  | 89 | +              Powerful Features | 
|  | 90 | +            </h2> | 
|  | 91 | +            <p className="text-lg text-fd-muted-foreground"> | 
|  | 92 | +              Everything you need for automated media management | 
|  | 93 | +            </p> | 
|  | 94 | +          </div> | 
|  | 95 | + | 
|  | 96 | +          <div className="grid gap-8 md:grid-cols-2 lg:grid-cols-3"> | 
|  | 97 | +            <FeatureCard | 
|  | 98 | +              icon={<Shield className="h-6 w-6" />} | 
|  | 99 | +              title="VFS-Based" | 
|  | 100 | +              description="Efficient organization using a virtual file system, keeping your media library clean and accessible." | 
|  | 101 | +            /> | 
|  | 102 | +            <FeatureCard | 
|  | 103 | +              icon={<Puzzle className="h-6 w-6" />} | 
|  | 104 | +              title="Extensive Integration" | 
|  | 105 | +              description="Works with Plex, Jellyfin, Emby, Real-Debrid, and many more services out of the box." | 
|  | 106 | +            /> | 
|  | 107 | +            <FeatureCard | 
|  | 108 | +              icon={<Cog className="h-6 w-6" />} | 
|  | 109 | +              title="Smart Automation" | 
|  | 110 | +              description="Automated content discovery, downloading, and organization with intelligent scraping and matching." | 
|  | 111 | +            /> | 
|  | 112 | +            <FeatureCard | 
|  | 113 | +              icon={<Bell className="h-6 w-6" />} | 
|  | 114 | +              title="Real-Time Notifications" | 
|  | 115 | +              description="Stay updated with Discord, Apprise, and webhook notifications for all your media events." | 
|  | 116 | +            /> | 
|  | 117 | +            <FeatureCard | 
|  | 118 | +              icon={<BarChart3 className="h-6 w-6" />} | 
|  | 119 | +              title="Rich Dashboard" | 
|  | 120 | +              description="Beautiful web interface with analytics, monitoring, and complete control over your media library." | 
|  | 121 | +            /> | 
|  | 122 | +            <FeatureCard | 
|  | 123 | +              icon={<GitBranch className="h-6 w-6" />} | 
|  | 124 | +              title="Advanced Scraping" | 
|  | 125 | +              description="Multiple scraper support with configurable quality preferences based on RTN." | 
|  | 126 | +            /> | 
|  | 127 | +          </div> | 
|  | 128 | +        </div> | 
|  | 129 | +      </section> | 
|  | 130 | + | 
|  | 131 | +      {/* Integration Showcase */} | 
|  | 132 | +      <section className="border-b border-fd-border px-4 py-20"> | 
|  | 133 | +        <div className="mx-auto max-w-6xl"> | 
|  | 134 | +          <div className="mb-12 text-center"> | 
|  | 135 | +            <h2 className="mb-4 text-3xl font-bold md:text-4xl"> | 
|  | 136 | +              Seamless Integration | 
|  | 137 | +            </h2> | 
|  | 138 | +            <p className="text-lg text-fd-muted-foreground"> | 
|  | 139 | +              Connect with your favorite services | 
|  | 140 | +            </p> | 
|  | 141 | +          </div> | 
|  | 142 | + | 
|  | 143 | +          <div className="grid grid-cols-2 gap-6 md:grid-cols-2 lg:grid-cols-5"> | 
|  | 144 | +            <IntegrationBadge name="Plex" /> | 
|  | 145 | +            <IntegrationBadge name="Jellyfin" /> | 
|  | 146 | +            <IntegrationBadge name="Emby" /> | 
|  | 147 | +            <IntegrationBadge name="Real-Debrid" /> | 
|  | 148 | +            <IntegrationBadge name="All-Debrid" /> | 
|  | 149 | +            <IntegrationBadge name="Torrentio" /> | 
|  | 150 | +            <IntegrationBadge name="Jackett" /> | 
|  | 151 | +            <IntegrationBadge name="Prowlarr" /> | 
|  | 152 | +            <IntegrationBadge name="Overseerr" /> | 
|  | 153 | +            <IntegrationBadge name="Discord" /> | 
|  | 154 | +          </div> | 
|  | 155 | +        </div> | 
|  | 156 | +      </section> | 
|  | 157 | + | 
|  | 158 | +      {/* Quick Start Section */} | 
|  | 159 | +      <section className="px-4 py-20"> | 
|  | 160 | +        <div className="mx-auto max-w-6xl"> | 
|  | 161 | +          <div className="rounded-2xl border border-fd-border bg-gradient-to-br from-blue-500/10 via-purple-500/10 to-pink-500/10 p-8 md:p-12"> | 
|  | 162 | +            <div className="grid gap-8 lg:grid-cols-2 lg:gap-12"> | 
|  | 163 | +              <div> | 
|  | 164 | +                <h2 className="mb-4 text-3xl font-bold md:text-4xl"> | 
|  | 165 | +                  Ready to get started? | 
|  | 166 | +                </h2> | 
|  | 167 | +                <p className="mb-6 text-lg text-fd-muted-foreground"> | 
|  | 168 | +                  Deploy Riven in minutes with Docker or follow our comprehensive installation guide. | 
|  | 169 | +                </p> | 
|  | 170 | +                <div className="flex flex-col gap-4 sm:flex-row"> | 
|  | 171 | +                  <Link | 
|  | 172 | +                    href="/docs" | 
|  | 173 | +                    className="inline-flex items-center gap-2 rounded-lg bg-fd-primary px-6 py-3 font-semibold text-fd-primary-foreground transition-colors hover:bg-fd-primary/90" | 
|  | 174 | +                  > | 
|  | 175 | +                    Read Documentation | 
|  | 176 | +                    <ArrowRight className="h-4 w-4" /> | 
|  | 177 | +                  </Link> | 
|  | 178 | +                  <Link | 
|  | 179 | +                    href="https://github.com/rivenmedia/riven" | 
|  | 180 | +                    className="inline-flex items-center gap-2 rounded-lg border border-fd-border bg-fd-background px-6 py-3 font-semibold transition-colors hover:bg-fd-muted/50" | 
|  | 181 | +                  > | 
|  | 182 | +                    View Source | 
|  | 183 | +                  </Link> | 
|  | 184 | +                </div> | 
|  | 185 | +              </div> | 
|  | 186 | + | 
|  | 187 | +              <div className="rounded-lg border border-fd-border bg-fd-background/50 p-6"> | 
|  | 188 | +                <h3 className="mb-4 font-semibold">Quick Install</h3> | 
|  | 189 | +                <pre className="overflow-x-auto rounded-lg bg-fd-muted/50 p-4 text-sm"> | 
|  | 190 | +                  <code className="text-fd-muted-foreground"> | 
|  | 191 | +{`docker run -d \\ | 
|  | 192 | +  --name riven \\ | 
|  | 193 | +  -p 8080:8080 \\ | 
|  | 194 | +  -v ./data:/riven/data \\ | 
|  | 195 | +  ghcr.io/rivenmedia/riven:latest`} | 
|  | 196 | +                  </code> | 
|  | 197 | +                </pre> | 
|  | 198 | +              </div> | 
|  | 199 | +            </div> | 
|  | 200 | +          </div> | 
|  | 201 | +        </div> | 
|  | 202 | +      </section> | 
|  | 203 | + | 
|  | 204 | +      {/* Stats Section */} | 
|  | 205 | +      <section className="border-t border-fd-border px-4 py-12"> | 
|  | 206 | +        <div className="mx-auto max-w-6xl"> | 
|  | 207 | +          <div className="grid gap-8 text-center md:grid-cols-3"> | 
|  | 208 | +            <div> | 
|  | 209 | +              <div className="mb-2 text-3xl font-bold">20+</div> | 
|  | 210 | +              <div className="text-sm text-fd-muted-foreground">Service Integrations</div> | 
|  | 211 | +            </div> | 
|  | 212 | +            <div> | 
|  | 213 | +              <div className="mb-2 text-3xl font-bold">100%</div> | 
|  | 214 | +              <div className="text-sm text-fd-muted-foreground">Open Source</div> | 
|  | 215 | +            </div> | 
|  | 216 | +            <div> | 
|  | 217 | +              <div className="mb-2 text-3xl font-bold">24/7</div> | 
|  | 218 | +              <div className="text-sm text-fd-muted-foreground">Automated Management</div> | 
|  | 219 | +            </div> | 
|  | 220 | +          </div> | 
|  | 221 | +        </div> | 
|  | 222 | +      </section> | 
| 17 | 223 |     </main> | 
| 18 | 224 |   ); | 
| 19 | 225 | } | 
|  | 226 | + | 
|  | 227 | +function FeatureCard({ icon, title, description }: { icon: React.ReactNode; title: string; description: string }) { | 
|  | 228 | +  return ( | 
|  | 229 | +    <div className="rounded-lg border border-fd-border bg-fd-card p-6 transition-colors hover:bg-fd-muted/50"> | 
|  | 230 | +      <div className="mb-4 inline-flex rounded-lg bg-fd-primary/10 p-3 text-fd-primary"> | 
|  | 231 | +        {icon} | 
|  | 232 | +      </div> | 
|  | 233 | +      <h3 className="mb-2 text-xl font-semibold">{title}</h3> | 
|  | 234 | +      <p className="text-fd-muted-foreground">{description}</p> | 
|  | 235 | +    </div> | 
|  | 236 | +  ); | 
|  | 237 | +} | 
|  | 238 | + | 
|  | 239 | +function IntegrationBadge({ name }: { name: string }) { | 
|  | 240 | +  return ( | 
|  | 241 | +    <div className="flex items-center justify-center rounded-lg border border-fd-border bg-fd-card px-4 py-3 text-sm font-medium transition-colors hover:bg-fd-muted/50"> | 
|  | 242 | +      {name} | 
|  | 243 | +    </div> | 
|  | 244 | +  ); | 
|  | 245 | +} | 
0 commit comments