diff --git a/apps/landing/src/components/bento-grid.tsx b/apps/landing/src/components/bento-grid.tsx new file mode 100644 index 00000000..9be3e92a --- /dev/null +++ b/apps/landing/src/components/bento-grid.tsx @@ -0,0 +1,121 @@ +import { + Crop, + Droplets, + FileType, + LayoutGrid, + SlidersHorizontal, + Sparkles, + Wrench, + Zap, +} from "lucide-react"; +import { FadeIn } from "./fade-in"; + +const categories = [ + { + name: "Essentials", + count: 5, + tools: "Resize, Crop, Rotate, Convert, Compress", + color: "#3B82F6", + icon: Crop, + span: "md:col-span-1 md:row-span-1", + }, + { + name: "AI Tools", + count: 14, + tools: "Background Removal, Upscaling, OCR, Face Detection, Colorization, Object Eraser", + color: "#F59E0B", + icon: Sparkles, + span: "md:col-span-1 md:row-span-2", + }, + { + name: "Optimization", + count: 6, + tools: "Web Optimize, Metadata, Bulk Rename, Favicon", + color: "#10B981", + icon: Zap, + span: "md:col-span-1 md:row-span-1", + }, + { + name: "Adjustments", + count: 3, + tools: "Colors, Sharpening, Replace Color", + color: "#8B5CF6", + icon: SlidersHorizontal, + span: "md:col-span-1 md:row-span-1", + }, + { + name: "Watermark & Overlay", + count: 4, + tools: "Text Watermark, Image Watermark, Text Overlay, Composition", + color: "#EF4444", + icon: Droplets, + span: "md:col-span-1 md:row-span-1", + }, + { + name: "Utilities", + count: 7, + tools: "Image Info, Compare, Duplicates, Color Palette, QR Code", + color: "#6366F1", + icon: Wrench, + span: "md:col-span-1 md:row-span-1", + }, + { + name: "Layout & Composition", + count: 4, + tools: "Collage, Stitch, Split, Border & Frame", + color: "#EC4899", + icon: LayoutGrid, + span: "md:col-span-1 md:row-span-1", + }, + { + name: "Format & Conversion", + count: 4, + tools: "SVG to Raster, Vectorize, GIF Tools, PDF to Image", + color: "#14B8A6", + icon: FileType, + span: "md:col-span-1 md:row-span-1", + }, +]; + +export function BentoGrid() { + return ( +
+
+ +

+ Everything you need. Nothing you don't. +

+

+ 50+ tools organized into 8 categories. From basic edits to AI-powered transformations. +

+
+ +
+ {categories.map((cat, i) => ( + +
+
+ +

{cat.name}

+ + {cat.count} + +
+

{cat.tools}

+
+
+ ))} +
+
+
+ ); +} diff --git a/apps/landing/src/components/value-props.tsx b/apps/landing/src/components/value-props.tsx new file mode 100644 index 00000000..6daee91a --- /dev/null +++ b/apps/landing/src/components/value-props.tsx @@ -0,0 +1,47 @@ +import { Brain, Layers, Shield } from "lucide-react"; +import { FadeIn } from "./fade-in"; + +const props = [ + { + number: "01", + title: "100% Air-Gapped", + description: + "No cloud. No uploads. No telemetry. Deploy behind your firewall and process images in complete isolation.", + icon: Shield, + }, + { + number: "02", + title: "AI That Stays Local", + description: + "Background removal, upscaling, OCR, face detection — 14 AI models running entirely on your hardware.", + icon: Brain, + }, + { + number: "03", + title: "50+ Tools, One Platform", + description: + "Resize, crop, compress, watermark, convert, compose — everything your team needs in a single self-hosted suite.", + icon: Layers, + }, +]; + +export function ValueProps() { + return ( +
+
+ {props.map((prop, i) => ( + +
+
+ {prop.number} + +
+

{prop.title}

+

{prop.description}

+
+
+ ))} +
+
+ ); +}