feat(example page): create initial 4 cards (#21)
* feat(example page): add new examples section in the navbar * feat(example page): initial layout of the new page * feat(example page): create initial 4 workflows * style(example page): center title * style(example page): remove comment * fix(example page): add hyperlink for txt2img card
This commit is contained in:
parent
1939ff4153
commit
65492a108c
BIN
web/public/example-workflows/ipadapter.webp
Normal file
BIN
web/public/example-workflows/ipadapter.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 24 KiB |
BIN
web/public/example-workflows/txt2img-lcm.webp
Normal file
BIN
web/public/example-workflows/txt2img-lcm.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 25 KiB |
BIN
web/public/example-workflows/txt2img.webp
Normal file
BIN
web/public/example-workflows/txt2img.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 29 KiB |
BIN
web/public/example-workflows/upscale.webp
Normal file
BIN
web/public/example-workflows/upscale.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 29 KiB |
9
web/src/app/(app)/examples/loading.tsx
Normal file
9
web/src/app/(app)/examples/loading.tsx
Normal file
@ -0,0 +1,9 @@
|
||||
"use client";
|
||||
|
||||
import { LoadingPageWrapper } from "@/components/LoadingWrapper";
|
||||
import { usePathname } from "next/navigation";
|
||||
|
||||
export default function Loading() {
|
||||
const pathName = usePathname();
|
||||
return <LoadingPageWrapper className="h-full" tag={pathName.toLowerCase()} />;
|
||||
}
|
90
web/src/app/(app)/examples/page.tsx
Normal file
90
web/src/app/(app)/examples/page.tsx
Normal file
@ -0,0 +1,90 @@
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card";
|
||||
import Image from "next/image";
|
||||
import Link from "next/link";
|
||||
|
||||
export default function Page() {
|
||||
return <Examples />;
|
||||
}
|
||||
|
||||
|
||||
type exampleWorkflow = {
|
||||
title: string;
|
||||
description: string;
|
||||
previewURL: string;
|
||||
image: {
|
||||
src: string,
|
||||
alt: string,
|
||||
};
|
||||
};
|
||||
|
||||
const exampleWorkflows: exampleWorkflow[] = [
|
||||
{
|
||||
title: "Txt2Img SDXL",
|
||||
description: "The basic workflow, type a prompt and generate images based on that.",
|
||||
previewURL: 'https://www.comfydeploy.com/share/comfy-deploy-example-txt2img-sdxl',
|
||||
image: {
|
||||
src: '/example-workflows/txt2img.webp',
|
||||
alt: 'IPAdapter workflow',
|
||||
}
|
||||
},
|
||||
{
|
||||
title: "Txt2Img LCM SDXL",
|
||||
description: "Images in a couple of seconds, increase the speed of each generation using LCM Lora.",
|
||||
previewURL: 'https://www.comfydeploy.com/share/comfy-deploy-example-lcm-sdxl',
|
||||
image: {
|
||||
src: '/example-workflows/txt2img-lcm.webp',
|
||||
alt: 'txt2img LCM SDXL',
|
||||
}
|
||||
},
|
||||
{
|
||||
title: "IPAdapter SDXL",
|
||||
description: "Load images and use them as reference for new generations.",
|
||||
previewURL: 'https://www.comfydeploy.com/share/comfy-deploy-example-ip-adapter-sdxl',
|
||||
image: {
|
||||
src: '/example-workflows/ipadapter.webp',
|
||||
alt: 'IPAdapter workflow',
|
||||
}
|
||||
},
|
||||
{
|
||||
title: "Upscale and Add Detail SDXL",
|
||||
description: "Upscale and Add Details to your creations",
|
||||
previewURL: 'https://www.comfydeploy.com/share/comfy-deploy-example-upscale-and-add-detail-sdxl',
|
||||
image: {
|
||||
src: '/example-workflows/upscale.webp',
|
||||
alt: 'Upscale and Add Detail SDXL',
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
|
||||
async function Examples() {
|
||||
return (
|
||||
<div className="w-full py-4">
|
||||
<section className="mx-auto flex max-w-[980px] flex-col items-center gap-2 py-8 md:py-12 md:pb-8 lg:py-24 lg:pb-20">
|
||||
<h1 className="scroll-m-20 text-4xl font-extrabold tracking-tight lg:text-5xl text-center">
|
||||
Check out some examples
|
||||
</h1>
|
||||
<p className="max-w-[560px] text-center text-lg text-muted-foreground">Text to Image, Image to Image, IPAdapter, and more. Here are some examples that you can use to deploy your workflow.</p>
|
||||
</section>
|
||||
<section className="flex justify-center flex-wrap gap-4">
|
||||
{exampleWorkflows.map(workflow => {
|
||||
return <Card className="w-[350px]">
|
||||
<CardHeader>
|
||||
<CardTitle>{workflow.title}</CardTitle>
|
||||
<CardDescription>{workflow.description}</CardDescription>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
<Image src={workflow.image.src} alt={workflow.image.alt} width={350} height={230} />
|
||||
</CardContent>
|
||||
<CardFooter className="flex justify-end gap-2">
|
||||
<Button asChild>
|
||||
<Link href={workflow.previewURL}>View Workflow</Link>
|
||||
</Button>
|
||||
</CardFooter>
|
||||
</Card>;
|
||||
})}
|
||||
</section>
|
||||
</div>
|
||||
);
|
||||
}
|
@ -40,6 +40,10 @@ export function NavbarMenu({
|
||||
name: "API Keys",
|
||||
path: "/api-keys",
|
||||
},
|
||||
{
|
||||
name: "Examples",
|
||||
path: "/examples"
|
||||
}
|
||||
];
|
||||
|
||||
return (
|
||||
@ -48,9 +52,9 @@ export function NavbarMenu({
|
||||
{isDesktop && (
|
||||
<Tabs
|
||||
defaultValue={pathname}
|
||||
className="w-[300px] flex pointer-events-auto"
|
||||
className="w-fit flex pointer-events-auto"
|
||||
>
|
||||
<TabsList className="grid w-full grid-cols-3">
|
||||
<TabsList className="w-full">
|
||||
{pages.map((page) => (
|
||||
<TabsTrigger
|
||||
key={page.name}
|
||||
|
Loading…
x
Reference in New Issue
Block a user