--- template/app/src/landing-page/components/Examples/Auth.tsx
+++ opensaas-sh/app/src/landing-page/components/Examples/Auth.tsx
@@ -0,0 +1,155 @@
+import { type ComponentType, useState } from "react";
+import { FaDiscord, FaGithub, FaGoogle, FaSlack } from "react-icons/fa";
+import { Button } from "../../../client/components/ui/button";
+import {
+ Card,
+ CardContent,
+ CardHeader,
+} from "../../../client/components/ui/card";
+import { Input } from "../../../client/components/ui/input";
+import { DocsUrl } from "../../../shared/common";
+import { HighlightedFeature } from "../HighlightedFeature";
+
+const Provider = {
+ google: { displayName: "Google", icon: FaGoogle },
+ github: { displayName: "GitHub", icon: FaGithub },
+ discord: { displayName: "Discord", icon: FaDiscord },
+ slack: { displayName: "Slack", icon: FaSlack },
+} as const satisfies Record<
+ string,
+ { displayName: string; icon: ComponentType<{ className?: string }> }
+>;
+
+type AuthProvider = keyof typeof Provider;
+
+const providers = Object.entries(Provider) as (readonly [
+ key: AuthProvider,
+ provider: (typeof Provider)[AuthProvider],
+])[];
+
+export function Auth() {
+ const [selectedProviders, setSelectedProviders] = useState<
+ readonly AuthProvider[]
+ >(["google", "github"]);
+
+ const toggleProvider = (provider: AuthProvider) => {
+ setSelectedProviders((prev) =>
+ prev.includes(provider)
+ ? prev.filter((p) => p !== provider)
+ : [...prev, provider],
+ );
+ };
+
+ return (
+
+ Pre-configured full-stack Auth that you own. +
+Or continue with
+ +Log in to your account
+Log in with
+ ) : null} +