diff --git a/apps/landing/src/app/(apps)/docs/guides/placeholder-images/page.tsx b/apps/landing/src/app/(apps)/docs/guides/placeholder-images/page.tsx index 2d60199..b4b1961 100644 --- a/apps/landing/src/app/(apps)/docs/guides/placeholder-images/page.tsx +++ b/apps/landing/src/app/(apps)/docs/guides/placeholder-images/page.tsx @@ -2,6 +2,7 @@ import type { Metadata } from 'next'; import { TipBox } from '@/components/docs/shared/TipBox'; import { Table } from '@/components/docs/shared/Table'; import { CodeBlock } from '@/components/docs/shared/CodeBlock'; +import { LivePreview } from '@/components/docs/shared/LivePreview'; import { DocPage } from '@/components/docs/layout/DocPage'; import { JsonLd } from '@/components/seo/JsonLd'; import { createDocsMetadata, DOCS_PAGES } from '@/config/docs-seo'; @@ -22,13 +23,15 @@ const breadcrumbSchema = createBreadcrumbSchema([ const articleSchema = createTechArticleSchema(PAGE); const tocItems = [ - { id: 'why-ai-placeholders', text: 'Why AI Placeholders?', level: 2 }, + { id: 'what-this-guide-covers', text: 'What This Guide Covers', level: 2 }, + { id: 'how-to-create-placeholders', text: 'How to Create Placeholders', level: 2 }, { id: 'quick-start', text: 'Quick Start', level: 2 }, - { id: 'common-sizes', text: 'Common Sizes', level: 2 }, - { id: 'dark-mode', text: 'Dark Mode Placeholders', level: 2 }, - { id: 'profile-avatars', text: 'Profile Avatars', level: 2 }, - { id: 'tips', text: 'Tips for Better Results', level: 2 }, - { id: 'next-steps', text: 'Next Steps', level: 2 }, + { id: 'organizing-placeholders', text: 'Organizing Placeholders', level: 2 }, + { id: 'prompt-tips', text: 'Prompt Tips', level: 2 }, + { id: 'light-mode-placeholders', text: 'Light Mode Placeholders', level: 2 }, + { id: 'dark-mode-placeholders', text: 'Dark Mode Placeholders', level: 2 }, + { id: 'placeholder-image-examples', text: 'Placeholder Image Examples', level: 2 }, + { id: 'file-based-workflow', text: 'File-based Workflow', level: 2 }, ]; export default function PlaceholderImagesGuidePage() { @@ -47,14 +50,14 @@ export default function PlaceholderImagesGuidePage() { links: [ { href: '/docs/live-urls/', - title: 'Live URLs', - description: 'Full documentation on URL-based generation.', + title: 'Live URLs Reference', + description: 'Full parameter documentation for Live URLs.', accent: 'primary', }, { - href: '/docs/generation/', - title: 'Image Generation', - description: 'Advanced generation with the API.', + href: '/docs/api/generations/', + title: 'Generations API', + description: 'Generate images programmatically.', accent: 'secondary', }, ], @@ -62,182 +65,655 @@ export default function PlaceholderImagesGuidePage() { > -
- - Why AI Placeholders? + {/* What This Guide Covers */} +
+ + What This Guide Covers

- Traditional placeholder services give you gray rectangles or random photos - that have nothing to do with your actual content. + Two ways to generate placeholder images with Banatie:

-

- With Banatie Live URLs, you describe what you need and get a relevant AI-generated image instantly. - Your mockups look real. Client demos make sense. Prototypes feel complete. +

+

+ All examples on this page use real placeholder image URLs generated by Banatie.

- - -
+ {/* How to Create Placeholders */} +
+ + How to Create Placeholders + + +
+
+

Templates

+

+ Choose a style, get quality results. Banatie enhances your simple prompt based on + the selected template: +

+
    +
  • + photorealistic — photo-quality images +
  • +
  • + digital-art — stylized illustrations +
  • +
  • + 3d-render — 3D graphics +
  • +
+

+ + View all templates → + +

+
+ +
+

Simple Prompts

+

+ Write minimal descriptions. Templates handle the rest: +

+
    +
  • + "office" becomes a detailed + modern office with proper lighting +
  • +
  • + "headshot" becomes a + professional portrait with studio background +
  • +
+

+ No need for complex prompts — this is for placeholders, not art. +

+
+
+
+ + {/* Quick Start */} +
Quick Start

- Use a Live URL directly in your <img> tag: + Live URLs let you generate images by describing what you need right in the URL. No API + calls, no file management — just an HTML placeholder image tag with your prompt. Each + unique prompt is cached, so subsequent loads are instant via CDN.

+

Basic URL format:

`} - language="html" - filename="Basic Usage" + code="https://cdn.banatie.app/{org}/{project}/live/{scope}?prompt={description}&aspectRatio={ratio}" + language="text" + filename="URL Format" /> -

- First request generates the image. Subsequent requests serve from cache instantly. -

-
+

Example:

+ `} + language="html" + filename="HTML Placeholder Image" + /> -
- - Common Sizes - -

- Use the aspectRatio parameter for standard sizes: -

+

Result:

+ + Mountain landscape + +

Parameters:

prompt, 'Yes', 'Image description (URL-encoded)'], + [ + aspectRatio, + 'No', + 'Ratio like 1:1, 16:9, 4:3 (default: 16:9)', + ], + [template, 'No', 'Style template name'], ]} /> - - - - - - - -`} - language="html" - filename="Size Examples" - /> +

+ For full parameter reference, see{' '} + + Live URLs documentation + + . +

-
- - Dark Mode Placeholders + {/* Organizing Placeholders */} +
+ + Organizing Placeholders -

- For dark UI interfaces, include dark theme hints in your prompt: +

+ Organize images by sections of your site using scopes:

- - - - - - - -`} - language="html" - filename="Dark Mode Examples" + code={`/live/avatars?prompt=... → user photos +/live/hero?prompt=... → hero backgrounds +/live/products?prompt=... → product catalog`} + language="text" /> +

+ Learn more about scopes in{' '} + + Live URLs documentation + + . +

+
+ + {/* Prompt Tips */} +
+ + Prompt Tips + + +
+
+

Write less, not more

+

+ For placeholders, simple prompts are often enough. You can always add more details + later if needed. Templates handle the rest: +

+
    +
  • + Want an office? Write{' '} + office +
  • +
  • + Need a dark version? Add{' '} + office dark background +
  • +
  • + Templates handle lighting, composition, + style +
  • +
+
+ +
+

Colors and themes

+

Control the mood with color hints:

+ +
+
+
- - Keywords like "dark background", "moody lighting", "dark theme", and "night mode" help generate dark-friendly images. + + Templates automatically enhance your prompts. A simple description becomes a detailed + generation instruction.
-
- - Profile Avatars + {/* Light Mode Placeholders */} +
+ + Light Mode Placeholders -

- Generate realistic avatar placeholders for user profiles: +

+ Generated images work well with light interfaces by default. If you need more control, + specify background colors or accents to match your design system.

- - - - - - - -`} - language="html" - filename="Avatar Examples" + code={`"product on white background" +"office with soft natural light" +"portrait, bright studio, pastel tones" +"dashboard mockup, light gray background, blue accent"`} + language="text" /> + +
+ +
+ Light theme placeholder +

Clean Workspace

+

White background, natural lighting

+
+
+
-
- - Tips for Better Results + {/* Dark Mode Placeholders */} +
+ + Dark Mode Placeholders +

+ For dark interfaces, add dark background or descriptive words + like night, moody, or twilight. You can also specify accent colors. +

-
    -
  • - -
    - Be specific -

    - "modern minimalist office with plants" works better than "office". -

    + + +
    + +
    + Dark theme placeholder +

    Dark Gradient

    +

    Dark background with purple accents

    -
  • -
  • - -
    - Include style hints -

    - Add "photorealistic", "illustration", "3D render", or "flat design" for consistent style. -

    + +
    +
+ + {/* Placeholder Image Examples */} +
+ + Placeholder Image Examples + +

+ Copy-paste examples for common placeholder image use cases. +

+ + {/* Avatar */} +
+

Avatar

+

+ 1:1 · User profiles, team sections, testimonials +

+ + +
+
+ Sarah Chen +
+

+ Banatie cut our design mockup time in half. No more hunting for stock photos. +

+

Sarah Chen

+

Product Designer at Acme

+
+
- -
  • - -
    - Use scopes to organize -

    - Group related placeholders: /live/avatars/, /live/products/, /live/backgrounds/. -

    + + + `} + language="html" + /> + +
    +

    Team grid example:

    + +
    +
    + Alex Rivera +
    +

    Alex Rivera

    +

    Engineering Lead

    +
    +
    +
    + Maria Santos +
    +

    Maria Santos

    +

    Design Director

    +
    +
    +
    + James Wilson +
    +

    James Wilson

    +

    Product Manager

    +
    +
    +
    +
    +
    +
    + + {/* Product */} +
    +

    Product

    +

    + 1:1 or 4:5 · E-commerce, catalogs, + listings +

    + + +
    + Wireless Pro Headphones +

    Wireless Pro Headphones

    +

    $299

    +
    -
  • -
  • - -
    - Same prompt = same image -

    - Cached results mean consistent placeholders across your app. -

    + + + `} + language="html" + /> + +
    +

    Product grid example:

    + +
    +
    + Smart Watch X1 +

    Smart Watch X1

    +

    $199

    +
    +
    + Wireless Earbuds +

    Wireless Earbuds

    +

    $249

    +
    +
    + Portable Speaker +

    Portable Speaker

    +

    $79

    +
    +
    + Laptop Stand +

    Laptop Stand

    +

    $129

    +
    +
    +
    +
    +
    + + {/* Hero */} +
    +

    Hero

    +

    + 16:9 · Landing pages, section backgrounds +

    + + +
    + Hero background +
    +

    Build the Future

    +

    Start your next project with AI-powered tools

    +
    -
  • +
    + + + Hero background +
    +

    Your Headline

    +
    +
    `} + language="html" + /> + + + {/* OG Image */} +
    +

    OG Image

    +

    + 1200:630 · Social sharing, Twitter/LinkedIn cards +

    + + +
    +
    +
    + + + +
    + twitter.com +
    +
    + OG Image Preview +

    banatie.app

    +

    + AI Placeholder Images Guide | Banatie +

    +

    + Generate AI placeholder images for development... +

    +
    +
    +
    + + + +`} + language="html" + /> + +
    + + OG images are cached by social platforms. Change the prompt to regenerate. + +
    +
    + + {/* Features */} +
    +

    Features

    +

    + 1:1 · Feature grids, benefit sections, icons +

    + + +
    +
    + Lightning Fast +
    +

    Lightning Fast

    +

    + Deploy in seconds with our global CDN +

    +
    +
    +
    + Secure by Default +
    +

    Secure by Default

    +

    Enterprise-grade security built in

    +
    +
    +
    + Easy Integration +
    +

    Easy Integration

    +

    Works with your existing stack

    +
    +
    +
    +
    + + +
    + Lightning Fast +
    +

    Lightning Fast

    +

    Deploy in seconds with our global CDN

    +
    +
    + +
    `} + language="html" + /> + +
    + + {/* File-based Workflow */} +
    + + File-based Workflow + +

    + Need files in your repo? Here's how to download generated images. +

    + +

    When to Use Files

    +
      +
    • Next.js/React projects with local image imports
    • +
    • Version-controlled placeholder assets
    • +
    • Offline or CI/CD environments
    + +

    Generate via API

    +

    Request:

    + + +

    Response:

    + + +

    + Open cdnUrl in your browser, save the image, and add it to your + project's assets folder. +

    + +

    + For full API reference, see{' '} + + Generations API + + . +

    diff --git a/apps/landing/src/app/(apps)/docs/live-urls/page.tsx b/apps/landing/src/app/(apps)/docs/live-urls/page.tsx index 68ebe39..9dedbad 100644 --- a/apps/landing/src/app/(apps)/docs/live-urls/page.tsx +++ b/apps/landing/src/app/(apps)/docs/live-urls/page.tsx @@ -6,11 +6,7 @@ import { DocPage } from '@/components/docs/layout/DocPage'; import { JsonLd } from '@/components/seo/JsonLd'; import { createDocsMetadata, DOCS_PAGES } from '@/config/docs-seo'; import { createBreadcrumbSchema, createTechArticleSchema } from '@/config/docs-schema'; -import { - Hero, - SectionHeader, - InlineCode, -} from '@/components/docs/blocks'; +import { Hero, SectionHeader, InlineCode } from '@/components/docs/blocks'; const PAGE = DOCS_PAGES['live-urls']; @@ -42,129 +38,276 @@ export default function LiveUrlsPage() { - - -
    - - The Concept - -

    - Put your prompt in a URL. Use it directly in an <img src="..."> tag. -

    -

    - First request generates the image. All subsequent requests serve it from cache instantly. -

    -
    - -
    - - URL Format - - - + -

    - Query parameters: -

    +
    + + The Concept + +

    + Put your prompt in a URL. Use it directly in an{' '} + <img src="..."> tag. +

    +

    + First request generates the image. All subsequent requests serve it from cache + instantly. +

    +
    -
    prompt, - Yes, - 'Text description of the image to generate', - ], - [ - aspectRatio, - No, - 'Image ratio: 1:1, 16:9, 9:16, 3:2 (default: 16:9)', - ], - [ - autoEnhance, - No, - 'Enable prompt enhancement (default: true)', - ], - [ - template, - No, - 'Enhancement template to use', - ], - ]} - /> - +
    + + URL Format + -
    - - Try It - -

    - Open this URL in your browser: -

    + - +

    Query parameters:

    -

    - Or use it directly in HTML: -

    +
    prompt, + + Yes + , + 'Text description of the image to generate', + ], + [ + aspectRatio, + + No + , + 'Image ratio: 1:1, 16:9, 9:16, 3:2 (default: 16:9)', + ], + [ + template, + + No + , + 'Enhancement template to use', + ], + [ + autoEnhance, + + No + , + 'Enable prompt enhancement (default: true)', + ], + ]} + /> + - + + Try It + +

    Open this URL in your browser:

    + + + +

    Or use it directly in HTML:

    + + `} - language="html" - filename="HTML Usage" - /> - + language="html" + filename="HTML Usage" + /> + -
    - - Placeholder Images - -

    - Live URLs are perfect for generating AI placeholder images during development. - Unlike generic placeholder services that show gray boxes or random stock photos, - Banatie generates contextual images that match your design intent. -

    +
    + + Caching Behavior + +

    + The response includes an X-Cache-Status header: +

    -

    Common placeholder sizes:

    +
    + HIT + , + 'Image served from cache', + 'Instant (milliseconds)', + ], + [MISS, 'New image generated', 'A few seconds'], + ]} + /> - +

    + Cache hits are unlimited and don't count toward rate limits. Only new generations (cache + MISS) are rate limited. +

    + + +
    + + Scopes + +

    + Scopes organize your live generations. Each scope has its own generation limit. +

    + + + +

    + Scopes are auto-created on first use. You can also pre-configure them via the API to set + custom limits. +

    +
    + + {/*
    + + Rate Limits + + +
    + 10 new generations/hour + , + 'Only applies to cache MISS', + ], + [ + 'Per Scope', + + 30 generations + , + 'Configurable via API', + ], + [ + 'Cache Hits', + + Unlimited + , + 'No limits on cached images', + ], + ]} + /> + +
    + + Rate limits protect the service from abuse. For high-volume needs, use the generations + API directly. + +
    + */} + +
    + + Use Cases + + +
      +
    • + +
      + Static HTML & serverless sites +

      + Deploy HTML pages without configuring asset hosting or CDN infrastructure. Images + are served directly from Banatie's edge network. +

      +
      +
    • +
    • + +
      + AI-assisted development +

      + Enable AI coding assistants to generate complete HTML or JSX with contextual + images in a single pass—no asset pipeline required. +

      +
      +
    • +
    • + +
      + Rapid prototyping +

      + Test different visuals without writing backend code. +

      +
      +
    • +
    • + +
      + AI placeholder images +

      + Replace gray boxes and random stock photos with contextual AI images. Perfect for + prototypes, client demos, and design mockups. +

      +
      +
    • +
    • + +
      + Personalized content +

      + Generate unique images based on user data or preferences for dynamic, + individualized experiences. +

      +
      +
    • +
    +
    + + +
    + + Use Live URLs as intelligent placeholder images during development. Generate contextual + visuals that match your design intent—no more gray boxes or random stock photos. + + +

    Common placeholder configurations:

    + + @@ -175,141 +318,18 @@ export default function LiveUrlsPage() { `} - language="html" - filename="Placeholder Examples" - /> + language="html" + filename="Placeholder Examples" + /> -
    - - For dark mode interfaces, include "dark theme" or "dark background" in your prompt. - -
    -
    +
    + + For dark mode interfaces, include "dark theme" or "dark background" in your prompt. + +
    + -
    - - Caching Behavior - -

    - The response includes an X-Cache-Status header: -

    - -
    HIT, - 'Image served from cache', - 'Instant (milliseconds)', - ], - [ - MISS, - 'New image generated', - 'A few seconds', - ], - ]} - /> - -

    - Cache hits are unlimited and don't count toward rate limits. Only new generations (cache MISS) are rate limited. -

    - - -
    - - Scopes - -

    - Scopes organize your live generations. Each scope has its own generation limit. -

    - - - -

    - Scopes are auto-created on first use. You can also pre-configure them via the API to set custom limits. -

    -
    - -
    - - Rate Limits - - -
    10 new generations/hour, - 'Only applies to cache MISS', - ], - [ - 'Per Scope', - 30 generations, - 'Configurable via API', - ], - [ - 'Cache Hits', - Unlimited, - 'No limits on cached images', - ], - ]} - /> - -
    - - Rate limits protect the service from abuse. For high-volume needs, use the generations API directly. - -
    - - -
    - - Use Cases - - -
      -
    • - -
      - AI Placeholder Images -

      - Replace gray boxes and random stock photos with contextual AI images. - Perfect for prototypes, client demos, and design mockups. -

      -
      -
    • -
    • - -
      - Personalized content -

      Create unique images based on user data or preferences.

      -
      -
    • -
    • - -
      - Rapid prototyping -

      Test different visuals without writing backend code.

      -
      -
    • -
    • - -
      - HTML emails -

      Include dynamic images in email templates with just a URL.

      -
      -
    • -
    -
    - + ); } diff --git a/apps/landing/src/components/docs/layout/DocsSidebar.tsx b/apps/landing/src/components/docs/layout/DocsSidebar.tsx index ce69d9a..5926246 100644 --- a/apps/landing/src/components/docs/layout/DocsSidebar.tsx +++ b/apps/landing/src/components/docs/layout/DocsSidebar.tsx @@ -58,6 +58,13 @@ const navigationItems: NavItem[] = [ label: 'Authentication', href: '/docs/authentication/', }, + { + label: 'Guides', + href: '/docs/guides/', + children: [ + { label: 'Image Placeholders', href: '/docs/guides/placeholder-images/' }, + ], + }, { label: 'API Reference', href: '/docs/api/', @@ -69,17 +76,11 @@ const navigationItems: NavItem[] = [ { label: 'Live Scopes', href: '/docs/api/live-scopes/' }, ], }, - { - label: 'Guides', - href: '/docs/guides/', - children: [ - { label: 'Image Placeholders', href: '/docs/guides/placeholder-images/' }, - ], - }, + ]; export const DocsSidebar = ({ currentPath }: DocsSidebarProps) => { - const [expandedSections, setExpandedSections] = useState(['API Reference']); + const [expandedSections, setExpandedSections] = useState(['API Reference', 'Guides']); const toggleSection = (label: string) => { setExpandedSections((prev) => diff --git a/apps/landing/src/components/docs/shared/LivePreview.tsx b/apps/landing/src/components/docs/shared/LivePreview.tsx new file mode 100644 index 0000000..027a0c5 --- /dev/null +++ b/apps/landing/src/components/docs/shared/LivePreview.tsx @@ -0,0 +1,32 @@ +'use client'; + +interface LivePreviewProps { + children: React.ReactNode; + label?: string; + className?: string; + showLabel?: boolean; +} + +export const LivePreview = ({ + children, + label = 'Live Example', + className = '', + showLabel = true, +}: LivePreviewProps) => { + return ( +
    + {showLabel && ( +
    + + {label} + +
    + )} +
    {children}
    +
    + ); +}; diff --git a/apps/landing/src/components/docs/shared/TipBox.tsx b/apps/landing/src/components/docs/shared/TipBox.tsx index 8f7c313..197c71f 100644 --- a/apps/landing/src/components/docs/shared/TipBox.tsx +++ b/apps/landing/src/components/docs/shared/TipBox.tsx @@ -1,18 +1,20 @@ 'use client'; +import { Sparkles, Lightbulb, AlertTriangle, CheckCircle } from 'lucide-react'; + /** - * TipBox Component - Dual Style System + * TipBox Component - Multi-Style Callout System * - * Provides two distinct styles for callouts/notes: + * Provides three distinct styles for callouts/notes: * - * 1. Compact Style (Variant A inspired): - * - Small emoji icon on left + * 1. Compact Style: + * - Lucide icon on left * - Compact padding (p-4) * - Smaller text (text-sm) * - Subtle background with thin border * - Best for minor notes and tips * - * 2. Prominent Style (Adapted from Variant C): + * 2. Prominent Style: * - NO icon * - Larger padding (p-6) * - Larger text (text-base) @@ -20,6 +22,12 @@ * - More visual weight * - Best for important warnings and security notices * + * 3. Protip Style: + * - Sparkles icon with "Pro Tip" label + * - Golden/amber color scheme + * - Premium visual treatment with glow + * - Best for highlighting valuable tips and tricks + * * Usage: * * This is a compact tip @@ -28,10 +36,14 @@ * * This is an important security warning * + * + * + * This is a valuable pro tip + * */ type TipType = 'info' | 'warning' | 'success'; -type TipVariant = 'compact' | 'prominent'; +type TipVariant = 'compact' | 'prominent' | 'protip'; interface TipBoxProps { children: React.ReactNode; @@ -39,10 +51,10 @@ interface TipBoxProps { type?: TipType; } -const icons: Record = { - info: '💡', - warning: '⚠️', - success: '✓', +const icons: Record = { + info: , + warning: , + success: , }; const compactStyles: Record = { @@ -53,23 +65,49 @@ const compactStyles: Record = { const prominentStyles: Record = { info: 'bg-gradient-to-br from-purple-500/5 via-cyan-500/5 to-purple-500/5 border-purple-500/30 text-gray-300 shadow-lg shadow-purple-500/10', - warning: 'bg-gradient-to-br from-amber-500/5 via-orange-500/5 to-amber-500/5 border-amber-500/30 text-gray-300 shadow-lg shadow-amber-500/10', - success: 'bg-gradient-to-br from-green-500/5 via-emerald-500/5 to-green-500/5 border-green-500/30 text-gray-300 shadow-lg shadow-green-500/10', + warning: + 'bg-gradient-to-br from-amber-500/5 via-orange-500/5 to-amber-500/5 border-amber-500/30 text-gray-300 shadow-lg shadow-amber-500/10', + success: + 'bg-gradient-to-br from-green-500/5 via-emerald-500/5 to-green-500/5 border-green-500/30 text-gray-300 shadow-lg shadow-green-500/10', }; -export const TipBox = ({ children, variant = 'compact', type = 'info' }: TipBoxProps) => { - const isCompact = variant === 'compact'; - const icon = icons[type]; - const styleClass = isCompact ? compactStyles[type] : prominentStyles[type]; +const protipStyle = + 'bg-gradient-to-r from-amber-500/15 via-yellow-500/10 to-amber-500/15 border-amber-400/40 text-amber-100 shadow-lg shadow-amber-500/20 ring-1 ring-amber-400/20'; - if (isCompact) { +export const TipBox = ({ children, variant = 'compact', type = 'info' }: TipBoxProps) => { + // Protip variant - premium golden style + if (variant === 'protip') { + return ( +
    + + + +
    + + Pro Tip + +
    {children}
    +
    +
    + ); + } + + const icon = icons[type]; + const styleClass = variant === 'compact' ? compactStyles[type] : prominentStyles[type]; + + // Compact style + if (variant === 'compact') { return (
    - {icon} + {icon}
    {children}
    ); diff --git a/apps/landing/src/config/docs-seo.ts b/apps/landing/src/config/docs-seo.ts index 7f06317..614b513 100644 --- a/apps/landing/src/config/docs-seo.ts +++ b/apps/landing/src/config/docs-seo.ts @@ -132,16 +132,18 @@ export const DOCS_PAGES = { }, 'guide-placeholder-images': { path: '/docs/guides/placeholder-images/', - title: 'AI Placeholder Images Guide | Banatie', + title: 'AI Placeholder Image Generator — Light & Dark Mode | Banatie', description: - 'Generate AI placeholder images for development. Replace gray boxes with contextual visuals. Sizes for avatars, thumbnails, heroes, and more.', + 'Generate AI placeholder images for development. Image placeholder dark mode, light backgrounds, avatars, products, heroes. Copy-paste HTML examples.', keywords: [ - 'placeholder images', - 'ai placeholder generator', - 'placeholder image api', + 'placeholder image generator', 'image placeholder dark', - 'profile placeholder image', 'placeholder image url', + 'html placeholder image', + 'ai placeholder images', + 'dark mode placeholder', + 'light mode placeholder', + 'profile placeholder image', 'dummy image generator', ], }, diff --git a/inbox/task-docs-placeholder-seo.md b/inbox/task-docs-placeholder-seo.md deleted file mode 100644 index 0caa358..0000000 --- a/inbox/task-docs-placeholder-seo.md +++ /dev/null @@ -1,536 +0,0 @@ -# Task: Docs Placeholder SEO Enhancement - -**Priority:** High -**Estimated time:** 30-45 min -**Type:** SEO optimization + content - ---- - -## Part 1: Update Live URLs SEO metadata - -**File:** `apps/landing/src/config/docs-seo.ts` - -**Find the `'live-urls'` entry:** -```typescript -'live-urls': { - path: '/docs/live-urls/', - title: 'Live URLs — Generate Images from URL | Banatie API Docs', - description: - 'Generate images directly from URL parameters. No API calls needed — use the URL in img tags. Automatic caching.', - keywords: ['live url image generation', 'url to image', 'dynamic image generation', 'image from url', 'cached image api'], -}, -``` - -**Replace with:** -```typescript -'live-urls': { - path: '/docs/live-urls/', - title: 'Live URLs — AI Placeholder Images & Dynamic Generation | Banatie', - description: - 'Generate AI placeholder images directly from URL. No API calls — use in img tags. Perfect for prototypes, mockups, and dynamic content.', - keywords: [ - 'placeholder images', - 'placeholder image url', - 'ai placeholder generator', - 'live url image generation', - 'dynamic image generation', - 'image placeholder api', - 'placeholder image api', - ], -}, -``` - ---- - -## Part 2: Enhance Live URLs page content - -**File:** `apps/landing/src/app/(apps)/docs/live-urls/page.tsx` - -### 2.1 Update tocItems array - -**Find:** -```typescript -const tocItems = [ - { id: 'the-concept', text: 'The Concept', level: 2 }, - { id: 'url-format', text: 'URL Format', level: 2 }, - { id: 'try-it', text: 'Try It', level: 2 }, - { id: 'caching-behavior', text: 'Caching Behavior', level: 2 }, - { id: 'scopes', text: 'Scopes', level: 2 }, - { id: 'rate-limits', text: 'Rate Limits', level: 2 }, - { id: 'use-cases', text: 'Use Cases', level: 2 }, - { id: 'next-steps', text: 'Next Steps', level: 2 }, -]; -``` - -**Replace with:** -```typescript -const tocItems = [ - { id: 'the-concept', text: 'The Concept', level: 2 }, - { id: 'url-format', text: 'URL Format', level: 2 }, - { id: 'try-it', text: 'Try It', level: 2 }, - { id: 'placeholder-images', text: 'Placeholder Images', level: 2 }, - { id: 'caching-behavior', text: 'Caching Behavior', level: 2 }, - { id: 'scopes', text: 'Scopes', level: 2 }, - { id: 'rate-limits', text: 'Rate Limits', level: 2 }, - { id: 'use-cases', text: 'Use Cases', level: 2 }, - { id: 'next-steps', text: 'Next Steps', level: 2 }, -]; -``` - -### 2.2 Update Hero subtitle - -**Find:** -```tsx - -``` - -**Replace with:** -```tsx - -``` - -### 2.3 Add new "Placeholder Images" section - -**Add this section AFTER the "Try It" section and BEFORE "Caching Behavior":** - -```tsx -
    - - Placeholder Images - -

    - Live URLs are perfect for generating AI placeholder images during development. - Unlike generic placeholder services that show gray boxes or random stock photos, - Banatie generates contextual images that match your design intent. -

    - -

    Common placeholder sizes:

    - - - - - - - - - - - -`} - language="html" - filename="Placeholder Examples" - /> - -
    - - For dark mode interfaces, include "dark theme" or "dark background" in your prompt. - -
    -
    -``` - -### 2.4 Update "Use Cases" section — expand first item - -**Find the first list item in use-cases section:** -```tsx -
  • - -
    - Dynamic placeholders -

    Generate placeholder images during development that match your design intent.

    -
    -
  • -``` - -**Replace with:** -```tsx -
  • - -
    - AI Placeholder Images -

    - Replace gray boxes and random stock photos with contextual AI images. - Perfect for prototypes, client demos, and design mockups. -

    -
    -
  • -``` - ---- - -## Part 3: Add guides section with placeholder guide - -### 3.1 Create guides directory structure - -```bash -mkdir -p apps/landing/src/app/\(apps\)/docs/guides/placeholder-images -``` - -### 3.2 Add guides SEO config - -**File:** `apps/landing/src/config/docs-seo.ts` - -**Add to DOCS_PAGES object:** -```typescript -'guides': { - path: '/docs/guides/', - title: 'Guides | Banatie Docs', - description: 'Step-by-step guides for common use cases. Placeholder images, prototyping, and more.', - keywords: ['banatie guides', 'image generation tutorials', 'api guides'], -}, -'guide-placeholder-images': { - path: '/docs/guides/placeholder-images/', - title: 'AI Placeholder Images Guide | Banatie', - description: - 'Generate AI placeholder images for development. Replace gray boxes with contextual visuals. Sizes for avatars, thumbnails, heroes, and more.', - keywords: [ - 'placeholder images', - 'ai placeholder generator', - 'placeholder image api', - 'image placeholder dark', - 'profile placeholder image', - 'placeholder image url', - 'dummy image generator', - ], -}, -``` - -### 3.3 Create guides index page - -**File:** `apps/landing/src/app/(apps)/docs/guides/page.tsx` - -```tsx -import type { Metadata } from 'next'; -import { DocPage } from '@/components/docs/layout/DocPage'; -import { JsonLd } from '@/components/seo/JsonLd'; -import { createDocsMetadata, DOCS_PAGES } from '@/config/docs-seo'; -import { createBreadcrumbSchema } from '@/config/docs-schema'; -import { Hero, SectionHeader } from '@/components/docs/blocks'; -import Link from 'next/link'; - -const PAGE = DOCS_PAGES['guides']; - -export const metadata: Metadata = createDocsMetadata(PAGE); - -const breadcrumbSchema = createBreadcrumbSchema([ - { name: 'Home', path: '/' }, - { name: 'Documentation', path: '/docs/' }, - { name: 'Guides', path: '/docs/guides/' }, -]); - -export default function GuidesPage() { - return ( - <> - - - - -
    -
    - -

    AI Placeholder Images

    -

    - Generate contextual placeholder images for development. - Replace gray boxes with AI visuals that match your design. -

    - -
    -
    -
    - - ); -} -``` - -### 3.4 Create placeholder images guide page - -**File:** `apps/landing/src/app/(apps)/docs/guides/placeholder-images/page.tsx` - -```tsx -import type { Metadata } from 'next'; -import { TipBox } from '@/components/docs/shared/TipBox'; -import { Table } from '@/components/docs/shared/Table'; -import { CodeBlock } from '@/components/docs/shared/CodeBlock'; -import { DocPage } from '@/components/docs/layout/DocPage'; -import { JsonLd } from '@/components/seo/JsonLd'; -import { createDocsMetadata, DOCS_PAGES } from '@/config/docs-seo'; -import { createBreadcrumbSchema, createTechArticleSchema } from '@/config/docs-schema'; -import { Hero, SectionHeader, InlineCode } from '@/components/docs/blocks'; - -const PAGE = DOCS_PAGES['guide-placeholder-images']; - -export const metadata: Metadata = createDocsMetadata(PAGE); - -const breadcrumbSchema = createBreadcrumbSchema([ - { name: 'Home', path: '/' }, - { name: 'Documentation', path: '/docs/' }, - { name: 'Guides', path: '/docs/guides/' }, - { name: 'Placeholder Images', path: '/docs/guides/placeholder-images/' }, -]); - -const articleSchema = createTechArticleSchema(PAGE); - -const tocItems = [ - { id: 'why-ai-placeholders', text: 'Why AI Placeholders?', level: 2 }, - { id: 'quick-start', text: 'Quick Start', level: 2 }, - { id: 'common-sizes', text: 'Common Sizes', level: 2 }, - { id: 'dark-mode', text: 'Dark Mode Placeholders', level: 2 }, - { id: 'profile-avatars', text: 'Profile Avatars', level: 2 }, - { id: 'tips', text: 'Tips for Better Results', level: 2 }, - { id: 'next-steps', text: 'Next Steps', level: 2 }, -]; - -export default function PlaceholderImagesGuidePage() { - return ( - <> - - - - - -
    - - Why AI Placeholders? - -

    - Traditional placeholder services give you gray rectangles or random photos - that have nothing to do with your actual content. -

    -

    - With Banatie Live URLs, you describe what you need and get a relevant AI-generated image instantly. - Your mockups look real. Client demos make sense. Prototypes feel complete. -

    - -
    - - -
    - - Quick Start - -

    - Use a Live URL directly in your <img> tag: -

    - - `} - language="html" - filename="Basic Usage" - /> - -

    - First request generates the image. Subsequent requests serve from cache instantly. -

    -
    - -
    - - Common Sizes - -

    - Use the aspectRatio parameter for standard sizes: -

    - -
    - - - - - - - - -`} - language="html" - filename="Size Examples" - /> - - -
    - - Dark Mode Placeholders - -

    - For dark UI interfaces, include dark theme hints in your prompt: -

    - - - - - - - - -`} - language="html" - filename="Dark Mode Examples" - /> - -
    - - Keywords like "dark background", "moody lighting", "dark theme", and "night mode" help generate dark-friendly images. - -
    -
    - -
    - - Profile Avatars - -

    - Generate realistic avatar placeholders for user profiles: -

    - - - - - - - - - -`} - language="html" - filename="Avatar Examples" - /> -
    - -
    - - Tips for Better Results - - -
      -
    • - -
      - Be specific -

      - "modern minimalist office with plants" works better than "office". -

      -
      -
    • -
    • - -
      - Include style hints -

      - Add "photorealistic", "illustration", "3D render", or "flat design" for consistent style. -

      -
      -
    • -
    • - -
      - Use scopes to organize -

      - Group related placeholders: /live/avatars/, /live/products/, /live/backgrounds/. -

      -
      -
    • -
    • - -
      - Same prompt = same image -

      - Cached results mean consistent placeholders across your app. -

      -
      -
    • -
    -
    - - - ); -} -``` - ---- - -## Verification - -After all changes: -1. Run `pnpm dev` in `apps/landing` -2. Check `/docs/live-urls/` — verify new "Placeholder Images" section -3. Check `/docs/guides/` — verify guides index page -4. Check `/docs/guides/placeholder-images/` — verify guide content -5. View page source — verify SEO metadata on all pages - ---- - -## Done criteria - -- [ ] live-urls SEO metadata updated with placeholder keywords -- [ ] live-urls page has new "Placeholder Images" section with examples -- [ ] `/docs/guides/` index page created -- [ ] `/docs/guides/placeholder-images/` guide created -- [ ] All pages render without errors -- [ ] sitemap.ts includes new pages (may need manual update) diff --git a/inbox/task-homepage-placeholder-seo.md b/inbox/task-homepage-placeholder-seo.md deleted file mode 100644 index 8a44ee6..0000000 --- a/inbox/task-homepage-placeholder-seo.md +++ /dev/null @@ -1,75 +0,0 @@ -# Task: Homepage Placeholder SEO Keywords - -**Priority:** High -**Estimated time:** 5 min -**Type:** SEO optimization - ---- - -## Change 1: Update keywords in metadata - -**File:** `apps/landing/src/app/(landings)/page.tsx` - -**Find:** -```typescript -keywords: [ - 'API-first image generation', - 'AI image API', - 'image generation for developers', - 'prompt to image API', - 'CDN image delivery', -], -``` - -**Replace with:** -```typescript -keywords: [ - 'AI image API', - 'image generation for developers', - 'prompt to image API', - 'CDN image delivery', - 'placeholder images', - 'ai placeholder generator', - 'placeholder image url', - 'image placeholder api', -], -``` - ---- - -## Change 2: Update PromptUrlsSection subtitle - -**File:** `apps/landing/src/app/(landings)/_components/PromptUrlsSection.tsx` - -**Find:** -```tsx -

    - Perfect for static sites, prototypes, and AI coding agents that generate HTML. -

    -``` - -**Replace with:** -```tsx -

    - Perfect for placeholder images, prototypes, static sites, and AI coding agents. -

    -``` - ---- - -## Verification - -After changes: -1. Run `pnpm dev` in `apps/landing` -2. Check homepage loads without errors -3. Inspect page source — verify new keywords in meta tag -4. Scroll to Prompt URLs section — verify updated text - ---- - -## Done criteria - -- [ ] Keywords array updated with 8 items -- [ ] PromptUrlsSection shows "placeholder images" first in list -- [ ] No TypeScript/lint errors -- [ ] Page renders correctly diff --git a/inbox/task-placeholder-guide-revision.md b/inbox/task-placeholder-guide-revision.md new file mode 100644 index 0000000..b047381 --- /dev/null +++ b/inbox/task-placeholder-guide-revision.md @@ -0,0 +1,267 @@ +# Task: Revise Placeholder Images Guide + +**Priority:** High +**Type:** Content revision +**Related:** Previous guide implementation needs text/UX improvements + +--- + +## Context + +Guide exists at `/docs/guides/placeholder-images/page.tsx`. Structure is OK, but texts need revision based on review session. This task covers text changes and minor UX improvements. + +--- + +## SEO Keywords to Include Naturally + +Target these in headings and body text: +- "placeholder image url" (390/mo, KD 21) +- "html placeholder image" (320/mo, KD 33) +- "placeholder image generator" (480/mo, KD 32) +- "ai placeholder images" (from our research) + +--- + +## Section-by-Section Changes + +### Hero + +**Current subtitle:** "Generate contextual images for development. Copy-paste ready examples with Tailwind CSS." + +**New subtitle:** "Generate contextual images for development. The new era of AI placeholders." + +Remove Tailwind mention from hero — it's implementation detail, not selling point. + +--- + +### What This Guide Covers + +**Current:** +- Live URLs — embed AI-generated images directly in HTML +- Ready-to-use snippets — copy into your project with Tailwind classes +- File download — save images locally via API + +**New:** +- **Live URLs** — describe what you need right in `` src URLs +- **API generation** — full control, permanent URLs, downloadable files + +Remove "snippets" as separate point — that's expected from any guide. + +--- + +### AI Generation Basics → Rename to "How to Create Placeholders" + +**Current content:** Generic AI explanation (prompt → image, enhancement, etc.) + +**New content:** + +Focus on Banatie features, not AI basics: + +**Templates** +Choose a style, get quality results. Banatie enhances your simple prompt based on selected template. + +Available templates: +- `photorealistic` — photo-quality images +- `digital-art` — stylized illustrations +- `3d-render` — 3D graphics + +[Link to full templates documentation] + +**Simple Prompts** +Write minimal descriptions. Templates handle the rest. +- "office" → detailed modern office with proper lighting +- "headshot" → professional portrait with studio background + +No need for complex prompts — this is for placeholders, not art. + +**Remove:** +- "Prompt Enhancement" as separate concept (it's what templates do) +- "Caching" paragraph (belongs to Live URLs section, not here) + +--- + +### Quick Start + +**Add intro paragraph** explaining what Live URLs are and why they're perfect for placeholders: + +> Live URLs let you generate images by describing what you need right in the URL. No API calls, no file management — just an `` tag with your prompt. Each unique prompt is cached, so subsequent loads are instant via CDN. + +**Change example URL** from `{org}/{project}` placeholder to real working URL: + +```html +Mountain landscape +``` + +**Add live result** — show the actual generated image right after the code snippet. + +--- + +### Organizing Placeholders + +**Current:** Dry list of scope examples + +**New approach:** + +Short explanation: "Organize images by sections of your site using scopes." + +One example showing the pattern: +``` +/live/avatars?prompt=... → user photos +/live/hero?prompt=... → hero backgrounds +/live/products?prompt=... → product catalog +``` + +Then link: "Learn more about scopes in [Live URLs documentation](/docs/live-urls/#scopes)." + +Don't teach users how to name things — let them figure it out. + +--- + +### Prompt Tips + +**Current "Be specific"** — contradicts placeholder philosophy + +**New "Write less, not more":** + +> For placeholders, simple prompts work best. Templates add the details. +> +> - Want an office? Write "office" +> - Need something specific? Add only what matters: "office dark theme" +> - Templates handle lighting, composition, style + +**Current "Dark mode"** → **"Colors and themes":** + +> Control the mood with color hints: +> - `dark background` — dark theme +> - `blue and orange accents` — specific palette +> - `warm lighting` — cozy feel + +Keep dark mode examples but expand to general color control. + +**Remove "Consistent style"** — too vague. Consistency comes from templates + references (advanced topic). + +**Change TipBox text:** +From: "All examples in this guide use prompt enhancement..." +To: "Templates automatically enhance your prompts. A simple description becomes a detailed generation instruction." + +--- + +### Recipes Section + +**Add section header:** Create a parent heading "Recipes" or "Common Use Cases" that groups all the examples (Avatar, Product, Hero, OG, Features). + +--- + +### Recipe Cards: Code + Preview + +**UX improvement:** Each recipe should have a tabbed component with "Preview" and "Code" tabs, not separate blocks. + +If tabs are complex to implement, at minimum: +- Show live preview FIRST +- Code snippet below with clear label +- Remove redundant "Code Snippet" / "Live Example" headings — visual separation is enough + +--- + +### Testimonial Card (Avatar section) + +**Current design:** Basic dark card + +**Improve design quality:** +- Add subtle border or gradient +- Better typography hierarchy +- Proper quote styling (quotation marks or left border) +- Make it look like something you'd actually ship + +This is our showcase — it should look good. + +--- + +### File-based Workflow + +**Current intro:** "Sometimes you need image files in your repository instead of URLs." + +**New intro:** "Need files in your repo? Here's how to download generated images." + +Warmer, more direct. + +**Remove "Static site generators" mention** — no SEO value, weak use case. + +**Keep:** +- Next.js with imports (fix the pattern — show `import` from `src/assets`, not `/public`) +- Version-controlled images + +**Simplify download example:** + +Current code is mini-SDK territory. Simplify to: + +```javascript +// 1. Generate image +const response = await fetch('https://api.banatie.app/v1/generations', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-API-Key': process.env.BANATIE_API_KEY, + }, + body: JSON.stringify({ prompt: 'modern office' }), +}); + +const { image } = await response.json(); +console.log(image.cdnUrl); // Download this URL via browser or curl +``` + +Remove the fs.writeFileSync part — that's SDK territory. User can download via browser. + +--- + +### "When to Use Files" List + +**Current:** +- Next.js projects with `/public` folder ❌ +- Static site generators requiring local assets ❌ +- Version-controlled images +- Offline development + +**New:** +- Next.js/React projects with local image imports +- Version-controlled placeholder assets +- Offline or CI/CD environments + +--- + +## Component Changes + +### LivePreview wrapper + +Current implementation is OK. No changes needed unless design quality is poor. + +### Code/Preview tabs + +If implementing tabs is too complex, skip for now. But note it as future improvement. + +--- + +## Quality Checklist + +After implementation: +- [ ] No mention of "Prompt Enhancement" as standalone feature +- [ ] Templates positioned as primary feature +- [ ] All example URLs use `sys/demo` (real project) +- [ ] Quick Start shows actual generated image +- [ ] File-based section uses import pattern, not /public +- [ ] No static site generators mentioned +- [ ] Testimonial card looks professional +- [ ] SEO keywords naturally integrated + +--- + +## Files to Modify + +``` +apps/landing/src/app/(apps)/docs/guides/placeholder-images/page.tsx +``` + +No new files needed. diff --git a/inbox/task-placeholder-guide-rewrite.md b/inbox/task-placeholder-guide-rewrite.md new file mode 100644 index 0000000..bbbb51b --- /dev/null +++ b/inbox/task-placeholder-guide-rewrite.md @@ -0,0 +1,515 @@ +# Task: Rewrite Placeholder Images Guide + +**Priority:** High +**Estimated time:** 1-2 hours +**Type:** Documentation rewrite + +--- + +## Overview + +Delete current `/docs/guides/placeholder-images/page.tsx` and create new guide with structure below. + +**Tone:** Technical, professional, concise. No marketing fluff. +**Audience:** Developers who want practical examples they can copy-paste. + +**Live examples:** Use `https://cdn.banatie.app/sys/demo/live/{scope}` for all images. + +--- + +## SEO Metadata + +Keep existing SEO config in `docs-seo.ts` for `guide-placeholder-images`: + +```typescript +'guide-placeholder-images': { + path: '/docs/guides/placeholder-images/', + title: 'AI Placeholder Images Guide | Banatie', + description: + 'Generate AI placeholder images for development. Replace gray boxes with contextual visuals. Sizes for avatars, thumbnails, heroes, and more.', + keywords: [ + 'placeholder images', + 'ai placeholder generator', + 'placeholder image api', + 'image placeholder dark', + 'profile placeholder image', + 'placeholder image url', + 'dummy image generator', + ], +}, +``` + +--- + +## Page Structure + +``` +tocItems = [ + { id: 'what-this-guide-covers', text: 'What This Guide Covers', level: 2 }, + { id: 'ai-generation-basics', text: 'AI Generation Basics', level: 2 }, + { id: 'quick-start', text: 'Quick Start', level: 2 }, + { id: 'organizing-placeholders', text: 'Organizing Placeholders', level: 2 }, + { id: 'prompt-tips', text: 'Prompt Tips', level: 2 }, + { id: 'avatar-placeholder', text: 'Avatar Placeholder', level: 2 }, + { id: 'product-image', text: 'Product Image', level: 2 }, + { id: 'hero-section', text: 'Hero Section', level: 2 }, + { id: 'og-image', text: 'OG Image', level: 2 }, + { id: 'features-block', text: 'Features Block', level: 2 }, + { id: 'file-based-workflow', text: 'File-based Workflow', level: 2 }, +] +``` + +--- + +## Content + +### Hero + +**Title:** AI Placeholder Images + +**Subtitle:** Generate contextual images for development. Copy-paste ready examples with Tailwind CSS. + +--- + +### Section: What This Guide Covers + +This guide shows how to generate placeholder images with Banatie: + +- **Live URLs** — embed AI-generated images directly in HTML +- **Ready-to-use snippets** — copy into your project with Tailwind classes +- **File download** — save images locally via API + +All examples use real Live URLs. Images you see on this page are generated by Banatie. + +--- + +### Section: AI Generation Basics + +Banatie generates images from text descriptions. Key concepts: + +**Prompt → Image** +Describe what you need. The AI generates a matching image. + +**Prompt Enhancement** +Short prompts are automatically expanded. "office" becomes a detailed description with lighting, composition, and style. + +**Templates** +Control visual style with the `template` parameter: +- `photorealistic` — photo-like images +- `digital-art` — stylized illustrations +- `3d-render` — 3D graphics + +**Caching** +Same prompt returns the same image. First request generates, subsequent requests serve from cache instantly. + +--- + +### Section: Quick Start + +Basic Live URL format: + +``` +https://cdn.banatie.app/{org}/{project}/live/{scope}?prompt={description}&aspectRatio={ratio} +``` + +Minimal example: + +```html +Mountain landscape +``` + +Parameters: + +| Parameter | Required | Description | +|-----------|----------|-------------| +| `prompt` | Yes | Image description (URL-encoded) | +| `aspectRatio` | No | Ratio like `1:1`, `16:9`, `4:3` (default: `16:9`) | +| `template` | No | Style template name | + +For full parameter reference, see [Live URLs documentation](/docs/live-urls/). + +--- + +### Section: Organizing Placeholders + +Use scopes to group related images: + +``` +/live/avatars?prompt=... → team member photos +/live/products?prompt=... → product catalog +/live/blog?prompt=... → article images +/live/hero?prompt=... → hero sections +``` + +Scopes are created automatically on first use. Each scope maintains its own cache. + +For scope configuration and limits, see [Live URLs → Scopes](/docs/live-urls/#scopes). + +--- + +### Section: Prompt Tips + +**Be specific** + +``` +❌ "office" +✅ "modern minimalist office with plants and natural light" +``` + +**Dark mode** + +Include theme context in your prompt: + +``` +"abstract gradient background dark theme" +"product photo on dark surface moody lighting" +"avatar silhouette dark background" +``` + +**Consistent style** + +Use the `template` parameter for visual consistency across multiple images: + +``` +?prompt=...&template=photorealistic +?prompt=...&template=digital-art +``` + +[TIP] All examples in this guide use prompt enhancement. Your short descriptions are automatically expanded into detailed prompts. + +--- + +### Section: Avatar Placeholder + +**Aspect ratio:** `1:1` + +**Use case:** User profiles, team sections, testimonials. + +#### Live Example + +[LIVE_PREVIEW: testimonial-card] + +Create a testimonial card component with: +- Dark card background (slate-800) +- Avatar image: 64x64px, rounded-full +- Quote text +- Author name and role +- Use this exact URL: `https://cdn.banatie.app/landing/demo/live/avatars?prompt=professional+studio+headshot+confident+woman+neutral+background&aspectRatio=1:1` +- Quote: "Banatie cut our design mockup time in half. No more hunting for stock photos." +- Author: "Sarah Chen" +- Role: "Product Designer at Acme" + +[/LIVE_PREVIEW] + +#### Code Snippet + +```html +User avatar +``` + +#### Team Grid Example + +[LIVE_PREVIEW: team-grid] + +Create a 3-column responsive grid with: +- 3 avatar cards side by side on desktop, stacked on mobile +- Each card: avatar (48x48, rounded-full), name, role +- Gap between cards +- Use these URLs: + 1. `https://cdn.banatie.app/landing/demo/live/avatars?prompt=professional+headshot+young+man+friendly+smile&aspectRatio=1:1` — "Alex Rivera", "Engineering Lead" + 2. `https://cdn.banatie.app/landing/demo/live/avatars?prompt=professional+headshot+woman+glasses+confident&aspectRatio=1:1` — "Maria Santos", "Design Director" + 3. `https://cdn.banatie.app/landing/demo/live/avatars?prompt=professional+headshot+man+beard+casual&aspectRatio=1:1` — "James Wilson", "Product Manager" + +[/LIVE_PREVIEW] + +--- + +### Section: Product Image + +**Aspect ratio:** `1:1` (square) or `4:5` (portrait) + +**Use case:** E-commerce catalogs, product cards, listings. + +#### Live Example + +[LIVE_PREVIEW: product-card] + +Create a product card with: +- White/light background card with subtle shadow +- Product image: square, rounded corners +- Product name +- Price +- "Add to Cart" button (small, secondary style) +- Use URL: `https://cdn.banatie.app/landing/demo/live/products?prompt=minimalist+wireless+headphones+white+background+product+photo&aspectRatio=1:1` +- Name: "Wireless Pro Headphones" +- Price: "$299" + +[/LIVE_PREVIEW] + +#### Code Snippet + +```html +Product +``` + +#### Product Grid Example + +[LIVE_PREVIEW: product-grid] + +Create a 2x2 product grid: +- 4 product cards +- Each: image (1:1), name, price +- Use these: + 1. `?prompt=modern+smart+watch+product+photo` — "Smart Watch X1", "$199" + 2. `?prompt=wireless+earbuds+case+product+photo` — "AirPods Pro", "$249" + 3. `?prompt=portable+bluetooth+speaker+product+photo` — "Portable Speaker", "$79" + 4. `?prompt=laptop+stand+aluminum+product+photo` — "Laptop Stand", "$129" + +Base URL: `https://cdn.banatie.app/landing/demo/live/products` with `&aspectRatio=1:1` + +[/LIVE_PREVIEW] + +--- + +### Section: Hero Section + +**Aspect ratio:** `16:9` + +**Use case:** Landing page heroes, section backgrounds, feature highlights. + +#### Live Example + +[LIVE_PREVIEW: hero-section] + +Create a full-width hero section: +- Full width, 400px height +- Background image with dark overlay (50% black) +- Centered white text: heading + subheading +- Rounded corners +- Use URL: `https://cdn.banatie.app/landing/demo/live/hero?prompt=aerial+view+modern+city+skyline+sunset+dramatic+lighting&aspectRatio=16:9` +- Heading: "Build the Future" +- Subheading: "Start your next project with AI-powered tools" + +[/LIVE_PREVIEW] + +#### Code Snippet + +```html +
    + Hero background +
    +

    Your Headline

    +
    +
    +``` + +--- + +### Section: OG Image + +**Aspect ratio:** `1200:630` (standard for social media) + +**Use case:** Social sharing previews, Twitter/LinkedIn cards. + +#### Live Example + +[LIVE_PREVIEW: og-preview] + +Create a social card preview mockup: +- Browser-like frame with URL bar showing "twitter.com" +- Inside: the OG image preview card +- Image with title overlay area +- Use URL: `https://cdn.banatie.app/landing/demo/live/og?prompt=abstract+gradient+purple+blue+tech+background&aspectRatio=1200:630` +- Show how it would appear as a link preview + +[/LIVE_PREVIEW] + +#### Code Snippet + +```html + + + + + + +``` + +[TIP] OG images are crawled once and cached by social platforms. Change the prompt to generate a new image for updated content. + +--- + +### Section: Features Block + +**Aspect ratio:** `1:1` + +**Use case:** Feature grids, benefit sections, service highlights. + +#### Live Example + +[LIVE_PREVIEW: features-grid] + +Create a 3-column features section: +- Section heading: "Why Choose Us" +- 3 feature cards, each with: + - Square illustration (64x64) + - Feature title + - Short description (1-2 lines) +- Use these: + 1. `?prompt=minimal+icon+illustration+lightning+bolt+speed+blue` — "Lightning Fast", "Deploy in seconds with our global CDN" + 2. `?prompt=minimal+icon+illustration+shield+security+green` — "Secure by Default", "Enterprise-grade security built in" + 3. `?prompt=minimal+icon+illustration+puzzle+piece+integration+purple` — "Easy Integration", "Works with your existing stack" + +Base URL: `https://cdn.banatie.app/landing/demo/live/features` with `&aspectRatio=1:1` + +[/LIVE_PREVIEW] + +#### Code Snippet + +```html +
    +
    + Feature +

    Feature Title

    +

    Feature description goes here.

    +
    + +
    +``` + +--- + +### Section: File-based Workflow + +Sometimes you need image files in your repository instead of URLs. + +#### When to Use Files + +- Next.js projects with `/public` folder +- Static site generators requiring local assets +- Version-controlled images +- Offline development + +#### API Generation + Download + +Generate an image and save it locally: + +```javascript +// Node.js example +const fs = require('fs'); + +async function downloadPlaceholder(prompt, outputPath) { + // Generate image + const response = await fetch('https://api.banatie.app/v1/generations', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-API-Key': process.env.BANATIE_API_KEY, + }, + body: JSON.stringify({ + prompt: prompt, + aspectRatio: '16:9', + }), + }); + + const { image } = await response.json(); + + // Download from CDN + const imageResponse = await fetch(image.cdnUrl); + const buffer = await imageResponse.arrayBuffer(); + + // Save to file + fs.writeFileSync(outputPath, Buffer.from(buffer)); + console.log(`Saved: ${outputPath}`); +} + +// Usage +downloadPlaceholder( + 'modern office interior', + './public/images/hero.png' +); +``` + +For full API reference, see [Generations API](/docs/api/generations/). + +--- + +## Implementation Notes for Claude Code + +### Live Preview Component + +Create a new component `LivePreview` or similar wrapper that: +- Has dark background (slate-900 or similar) +- Shows the rendered example +- Has subtle border +- Optionally shows "Live Example" label + +### Code Structure + +``` +/docs/guides/placeholder-images/ + page.tsx ← Main guide page +``` + +Use existing doc components: +- `CodeBlock` for code snippets +- `Table` for parameter tables +- `TipBox` for tips +- `SectionHeader` for sections +- `Hero` for page header + +### Image URLs + +All live example images use: +``` +https://cdn.banatie.app/landing/demo/live/{scope}?prompt=...&aspectRatio=... +``` + +Scopes used: +- `avatars` — avatar examples +- `products` — product photos +- `hero` — hero backgrounds +- `og` — OG images +- `features` — feature illustrations + +--- + +## Verification + +After implementation: +1. All live preview images load correctly +2. Code snippets are properly formatted +3. Links to other docs work +4. Page renders without errors +5. TOC navigation works +6. Mobile responsive + +--- + +## Done Criteria + +- [ ] Old guide deleted +- [ ] New guide created with all sections +- [ ] Live preview components render actual images +- [ ] Code snippets are copy-paste ready +- [ ] All internal links work +- [ ] No TypeScript/lint errors