-
-
-
+
+
+
+ Implementing SAML? Check out SSOReady
+
+
+ }
+ />
+
+
+
+
+ SAML made easy
+
+
+ DummyIDP lets you test SAML and SCIM without setting up a
+ full-blown identity provider
+
+
-
-
-
- SAML made easy
-
-
- DummyIDP lets you test SAML and SCIM without setting up a
- full-blown identity provider
-
-
+
+
+
+
+ Test SAML & SCIM with ease
+
+
+ Everything you need to test an Enterprise SSO implementation,
+ without talking to sales
+
+
+
+
+ }
+ fade={["bottom"]}
+ className="max-lg:rounded-t-4xl lg:col-span-3 lg:rounded-tl-4xl"
+ />
+
+ }
+ fade={["bottom"]}
+ className="lg:col-span-3 lg:rounded-tr-4xl"
+ />
+
+ No need to talk to sales or give us your email. Just{" "}
+
+
+ create an app
+
+ {" "}
+ and get going.
+
+ }
+ className="lg:col-span-2 lg:rounded-bl-4xl"
+ />
+
+
+ The DummyIDP.com service is free for anyone to use. You can
+ self-host or{" "}
+
+ fork us on GitHub
+
+ .
+
+ }
+ className="max-lg:rounded-b-4xl lg:col-span-2 lg:rounded-br-4xl"
+ />
+
+
+
+ >
+ );
+}
+
+function BentoCard({
+ className = "",
+ eyebrow,
+ title,
+ description,
+ graphic,
+ fade = [],
+ tall,
+}: {
+ dark?: boolean;
+ className?: string;
+ eyebrow: React.ReactNode;
+ title: React.ReactNode;
+ description: React.ReactNode;
+ graphic?: React.ReactNode;
+ fade?: ("top" | "bottom")[];
+ tall?: boolean;
+}) {
+ return (
+
+
+ {graphic}
+ {fade.includes("top") && (
+
+ )}
+ {fade.includes("bottom") && (
+
+ )}
+
+
+
+ {eyebrow}
+
+
+ {title}
+
+
+ {description}
+
+
);
}
diff --git a/src/components/CreateAppButton.tsx b/src/components/CreateAppButton.tsx
index 55d3283..5bf01eb 100644
--- a/src/components/CreateAppButton.tsx
+++ b/src/components/CreateAppButton.tsx
@@ -23,3 +23,15 @@ export default function CreateAppButton() {
);
}
+
+export function InlineCreateAppLink({
+ children,
+}: {
+ children?: React.ReactNode;
+}) {
+ return (
+
createApp()}>
+ {children}
+
+ );
+}
diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx
index 959a7c6..30bb9ba 100644
--- a/src/components/Footer.tsx
+++ b/src/components/Footer.tsx
@@ -60,7 +60,7 @@ export function Footer() {
Read the docs
diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx
index c5c929e..0da02a0 100644
--- a/src/components/Navbar.tsx
+++ b/src/components/Navbar.tsx
@@ -3,6 +3,7 @@ import Link from "next/link";
import Image from "next/image";
import wordmark from "@/wordmark.svg";
import React from "react";
+import { InlineCreateAppLink } from "@/components/CreateAppButton";
const links = [
{ href: "https://ssoready.com/docs/dummyidp", label: "Docs" },
@@ -23,6 +24,13 @@ function DesktopNav() {
))}
+
+
+
+ Create a DummyIDP App
+
+
+
);
}
diff --git a/src/components/ui/badge.tsx b/src/components/ui/badge.tsx
new file mode 100644
index 0000000..da6c375
--- /dev/null
+++ b/src/components/ui/badge.tsx
@@ -0,0 +1,36 @@
+import * as React from "react"
+import { cva, type VariantProps } from "class-variance-authority"
+
+import { cn } from "@/lib/utils"
+
+const badgeVariants = cva(
+ "inline-flex items-center rounded-md border border-slate-200 px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-slate-950 focus:ring-offset-2 dark:border-slate-800 dark:focus:ring-slate-300",
+ {
+ variants: {
+ variant: {
+ default:
+ "border-transparent bg-slate-900 text-slate-50 shadow hover:bg-slate-900/80 dark:bg-slate-50 dark:text-slate-900 dark:hover:bg-slate-50/80",
+ secondary:
+ "border-transparent bg-slate-100 text-slate-900 hover:bg-slate-100/80 dark:bg-slate-800 dark:text-slate-50 dark:hover:bg-slate-800/80",
+ destructive:
+ "border-transparent bg-red-500 text-slate-50 shadow hover:bg-red-500/80 dark:bg-red-900 dark:text-slate-50 dark:hover:bg-red-900/80",
+ outline: "text-slate-950 dark:text-slate-50",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ },
+ }
+)
+
+export interface BadgeProps
+ extends React.HTMLAttributes
,
+ VariantProps {}
+
+function Badge({ className, variant, ...props }: BadgeProps) {
+ return (
+
+ )
+}
+
+export { Badge, badgeVariants }