From 1de6059b4525be34604785432f29ca5093833e49 Mon Sep 17 00:00:00 2001 From: smakosh Date: Tue, 12 May 2026 22:57:14 +0200 Subject: [PATCH] chore(demo): add LLMGateway showcase deck MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds a 6-page deck under apps/demo/slides/llmgateway/ covering the problem, pitch, AI SDK provider code sample, model breadth, and a closing CTA. Also lists LLMGateway alongside the other AI SDK providers in the vercel-ai-sdk deck (replacing the "+ more" tile to keep the 5×4 grid balanced). Co-Authored-By: Claude Opus 4.7 (1M context) --- apps/demo/slides/llmgateway/index.tsx | 749 +++++++++++++++++++++++ apps/demo/slides/vercel-ai-sdk/index.tsx | 4 +- 2 files changed, 751 insertions(+), 2 deletions(-) create mode 100644 apps/demo/slides/llmgateway/index.tsx diff --git a/apps/demo/slides/llmgateway/index.tsx b/apps/demo/slides/llmgateway/index.tsx new file mode 100644 index 00000000..608e81be --- /dev/null +++ b/apps/demo/slides/llmgateway/index.tsx @@ -0,0 +1,749 @@ +import type { DesignSystem, Page, SlideMeta } from '@open-slide/core'; +import type { ReactNode } from 'react'; + +export const design: DesignSystem = { + palette: { + bg: '#0a0a12', + text: '#ededf4', + accent: '#a78bfa', + }, + fonts: { + display: '"Inter", "SF Pro Display", system-ui, -apple-system, sans-serif', + body: '"Inter", "SF Pro Display", system-ui, -apple-system, sans-serif', + }, + typeScale: { + hero: 168, + body: 36, + }, + radius: 14, +}; + +const palette = { + surface: '#12121a', + surfaceHi: '#1a1a26', + border: 'rgba(255,255,255,0.08)', + borderBright: 'rgba(255,255,255,0.16)', + textSoft: '#cccddc', + muted: '#7d7e8f', + dim: '#42434f', + accentSoft: 'rgba(167,139,250,0.14)', + green: '#7ee787', + pink: '#ff9eb5', + amber: '#fbbf24', + blue: '#60a5fa', +}; + +const font = { + display: design.fonts.display, + body: design.fonts.body, + mono: '"JetBrains Mono", "SF Mono", ui-monospace, Menlo, monospace', +}; + +const fill = { + width: '100%', + height: '100%', + background: 'var(--osd-bg)', + color: 'var(--osd-text)', + fontFamily: 'var(--osd-font-body)', + letterSpacing: '-0.015em', + position: 'relative' as const, + overflow: 'hidden', +} as const; + +const keyframes = ` + @keyframes llg-fadeUp { + from { opacity: 0; transform: translateY(20px); } + to { opacity: 1; transform: translateY(0); } + } + @keyframes llg-fadeIn { + from { opacity: 0; } + to { opacity: 1; } + } + @keyframes llg-pulse { + 0%, 100% { opacity: 0.55; } + 50% { opacity: 1; } + } + @keyframes llg-drift { + 0% { transform: translateY(0px); } + 50% { transform: translateY(-12px); } + 100% { transform: translateY(0px); } + } +`; + +const Style = () => ; + +const fadeUp = (delayMs: number) => + ({ + animation: `llg-fadeUp 700ms cubic-bezier(0.2, 0.7, 0.2, 1) ${delayMs}ms both`, + }) as const; + +const fadeIn = (delayMs: number) => + ({ + animation: `llg-fadeIn 800ms ease-out ${delayMs}ms both`, + }) as const; + +const GridBg = ({ opacity = 0.04 }: { opacity?: number }) => ( +
+); + +const GlowBlob = ({ + top, + left, + size = 720, + color = 'var(--osd-accent)', + opacity = 0.18, +}: { + top?: number | string; + left?: number | string; + size?: number; + color?: string; + opacity?: number; +}) => ( +
+); + +const eyebrow = (n: string, label: string) => ( +
+ {n} + · + {label} +
+); + +// ─── 01 · Cover ─────────────────────────────────────────────────────────────── +const Cover: Page = () => ( +
+