mirror of
https://gitea.gofwd.group/dstrawsb/ballistic-builder.git
synced 2025-12-06 02:36:44 -05:00
147 lines
4.7 KiB
TypeScript
147 lines
4.7 KiB
TypeScript
import { PlusIcon } from "@/components/icons";
|
|
import { Button } from "@/components/ui/button";
|
|
import { GitHubLogoIcon } from "@radix-ui/react-icons";
|
|
import { type Metadata } from "next";
|
|
import Link from "next/link";
|
|
import { CopyToClipboard } from "./_components/copy-to-clipboard";
|
|
import {
|
|
Drizzle,
|
|
LuciaAuth,
|
|
NextjsDark,
|
|
NextjsLight,
|
|
ReactEmail,
|
|
ReactJs,
|
|
ShadcnUi,
|
|
StripeLogo,
|
|
TRPC,
|
|
TailwindCss,
|
|
} from "./_components/feature-icons";
|
|
import CardSpotlight from "./_components/hover-card";
|
|
|
|
export const metadata: Metadata = {
|
|
title: "Next.js Lucia Auth Starter Template",
|
|
description:
|
|
"A Next.js starter template with nextjs and Lucia auth. Includes drizzle, trpc, react-email, tailwindcss and shadcn-ui",
|
|
};
|
|
|
|
const githubUrl = "https://github.com/iamtouha/next-lucia-auth";
|
|
|
|
const features = [
|
|
{
|
|
name: "Next.js",
|
|
description: "The React Framework for Production",
|
|
logo: NextjsIcon,
|
|
},
|
|
{
|
|
name: "React.js",
|
|
description: "Server and client components.",
|
|
logo: ReactJs,
|
|
},
|
|
{
|
|
name: "Authentication",
|
|
description: "Credential authentication with password reset and email validation",
|
|
logo: LuciaAuth,
|
|
},
|
|
{
|
|
name: "Database",
|
|
description: "Drizzle with postgres database",
|
|
logo: Drizzle,
|
|
},
|
|
{
|
|
name: "TypeSafe Backend",
|
|
description: "Preserve type safety from backend to frontend with tRPC",
|
|
logo: TRPC,
|
|
},
|
|
{
|
|
name: "Subscription",
|
|
description: "Subscription with stripe",
|
|
logo: StripeLogo,
|
|
},
|
|
{
|
|
name: "Tailwindcss",
|
|
description: "Simple and elegant UI components built with Tailwind CSS",
|
|
logo: TailwindCss,
|
|
},
|
|
{
|
|
name: "Shadcn UI",
|
|
description: "A set of beautifully designed UI components for React",
|
|
logo: ShadcnUi,
|
|
},
|
|
{
|
|
name: "React Email",
|
|
description: "Write emails in React with ease.",
|
|
logo: ReactEmail,
|
|
},
|
|
];
|
|
|
|
const HomePage = () => {
|
|
return (
|
|
<>
|
|
<section className="mx-auto grid min-h-[calc(100vh-300px)] max-w-5xl flex-col items-center justify-center gap-4 py-10 text-center md:py-12">
|
|
<div className="p-4">
|
|
<div className="mb-10 flex items-center justify-center gap-3">
|
|
<NextjsIcon className="h-[52px] w-[52px]" />
|
|
<PlusIcon className="h-8 w-8" />
|
|
<LuciaAuth className="h-14 w-14" />
|
|
</div>
|
|
<h1 className="text-balance bg-gradient-to-tr from-black/70 via-black to-black/60 bg-clip-text text-center text-3xl font-bold text-transparent dark:from-zinc-400/10 dark:via-white/90 dark:to-white/20 sm:text-5xl md:text-6xl lg:text-7xl">
|
|
Next.js Lucia Auth Starter Template
|
|
</h1>
|
|
<p className="mb-10 mt-4 text-balance text-center text-muted-foreground md:text-lg lg:text-xl">
|
|
A Next.js Authentication starter template (password reset, email validation and oAuth).
|
|
Includes Lucia, Drizzle, tRPC, Stripe, tailwindcss, shadcn-ui and react-email.
|
|
</p>
|
|
<div className="mb-10">
|
|
<div className="mx-auto max-w-[430px]">
|
|
<CopyToClipboard text={"git clone " + githubUrl} />
|
|
</div>
|
|
</div>
|
|
<div className="flex justify-center gap-4">
|
|
<Button size="lg" variant="outline" asChild>
|
|
<a href={githubUrl}>
|
|
<GitHubLogoIcon className="mr-1 h-5 w-5" />
|
|
GitHub
|
|
</a>
|
|
</Button>
|
|
<Button size="lg" asChild>
|
|
<Link href="/login">Get Started</Link>
|
|
</Button>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
<section>
|
|
<div className="container mx-auto lg:max-w-screen-lg">
|
|
<h1 className="mb-4 text-center text-3xl font-bold md:text-4xl lg:text-5xl">
|
|
<a id="features"></a> Features
|
|
</h1>
|
|
<p className="mb-10 text-balance text-center text-muted-foreground md:text-lg lg:text-xl">
|
|
This starter template is a guide to help you get started with Next.js for large scale
|
|
applications. Feel free to add or remove features to suit your needs.
|
|
</p>
|
|
<div className="grid gap-6 sm:grid-cols-2 md:grid-cols-3">
|
|
{features.map((feature, i) => (
|
|
<CardSpotlight
|
|
key={i}
|
|
name={feature.name}
|
|
description={feature.description}
|
|
logo={<feature.logo className="h-12 w-12" />}
|
|
/>
|
|
))}
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</>
|
|
);
|
|
};
|
|
|
|
export default HomePage;
|
|
|
|
function NextjsIcon({ className }: { className?: string }) {
|
|
return (
|
|
<>
|
|
<NextjsLight className={className + " dark:hidden"} />
|
|
<NextjsDark className={className + " hidden dark:block"} />
|
|
</>
|
|
);
|
|
}
|