UNPKG

@kolbo/mcp

Version:

Kolbo AI MCP Server - Generate images, videos, music, speech, and sound effects from Claude Code

140 lines (104 loc) β€’ 10.1 kB
<!-- PARITY: this file mirrors getHtmlPresentationSystemPrompt() + HTML_ARTIFACT_BOILERPLATE in kolbo-api/src/config/systemPrompt.js (lines ~1377–1515). When that function changes, update this file in the same session. --> # HTML Presentation β€” Build Rules Load this file when the user wants to **build / create / generate an HTML presentation, slide deck, or pitch deck**. For landing pages see `models/landing-page.md`; for any other interactive HTML artifact (dashboard, game, chart, widget) see `models/visual-code.md`. **Kobi Code routing:** write the artifact as a single HTML block in your reply. The Kobi Code panel renders it as a previewable artifact card. Optionally call `publish_html_artifact({ title, content })` afterward to get a public `sites.kolbo.ai` URL. ## 🚨 NON-NEGOTIABLE: Viewport Fitting Every single slide MUST fit exactly within 100vh. **No scrolling within a slide, ever.** If content doesn't fit, SPLIT into multiple slides. This is the #1 rule, no exceptions. Apply these invariants to EVERY slide in EVERY deck: - Every `.slide` element has: `height: 100vh; height: 100dvh; overflow: hidden;` and a centered flex/grid layout. - ALL font sizes and spacing use `clamp(min, preferred, max)` β€” **never fixed px/rem**. Example: `font-size: clamp(2.5rem, 5vw, 5rem);`. - Content containers need explicit `max-height` constraints. - Images: `max-height: min(50vh, 400px); object-fit: contain;`. - Include short-viewport breakpoints: `@media (max-height: 700px)`, `(max-height: 600px)`, `(max-height: 500px)` β€” reduce font sizes / hide decoration / tighten gaps at each. - Add `@media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; } }`. - Never negate CSS functions directly. `-clamp()` is silently ignored. Use `calc(-1 * clamp(...))`. ## 🚨 NON-NEGOTIABLE: Content Density Limits per Slide | Slide Type | Maximum Content | | -------------- | --------------- | | Title slide | 1 heading + 1 subtitle + optional tagline | | Content slide | 1 heading + 4–6 bullets OR 1 heading + 2 short paragraphs | | Feature grid | 1 heading + max 6 cards (2Γ—3 or 3Γ—2) | | Code slide | 1 heading + 8–10 lines of code max | | Quote slide | 1 quote (≀3 lines) + attribution | | Image slide | 1 heading + 1 image (max 60vh height) | **Content exceeds limits? Split into more slides. Never cram, never shrink fonts to fit, never enable scrolling.** ## Deck Length & Structure - **Default 8–12 slides** unless the user specifies otherwise. **Hard cap 16 slides** β€” bigger decks become unwieldy. - Pick a structure based on the purpose: - **Pitch deck**: Hook β†’ Problem β†’ Solution β†’ How it works β†’ Traction β†’ Market β†’ Team β†’ Ask - **Product / feature demo**: Title β†’ Why β†’ What β†’ How (3 features) β†’ Demo β†’ Pricing β†’ Next steps - **Educational**: Title β†’ Learning goals β†’ Concept 1 β†’ Concept 2 β†’ Concept 3 β†’ Example β†’ Recap β†’ Q&A - **Status / review**: Title β†’ Wins β†’ Numbers β†’ Challenges β†’ Next quarter β†’ Ask - **One idea per slide.** Headlines lead: short, declarative, ideally <8 words. Body copy supports. ## Slide Layout Palette (vary these β€” never use the same layout twice in a row) - **Title slide**: oversized headline, subtitle, optional brand mark / date / speaker name. - **Content slide**: headline + 4–6 bullets OR 2-column split (text left, visual right). - **Quote / pull-quote**: big quote, attribution, optional accent. - **Data slide**: big number (kpi) + label + small supporting chart (Chart.js). - **Image-led slide**: full-bleed image with caption overlay. - **Comparison slide**: side-by-side with checkmarks/crosses. - **Process / flow slide**: numbered steps with arrows / chevrons. - **Closing / CTA slide**: short CTA, contact, thank-you. ## Aesthetic Direction β€” COMMIT BOLDLY **Pick a clear conceptual direction and execute it with precision.** No timid middle-ground choices. Bold maximalism and refined minimalism both work β€” what matters is intentionality. Before writing CSS, pick ONE aesthetic and commit: - **Bold Signal** β€” high-contrast monochrome + one electric accent, oversized type - **Electric Studio** β€” saturated brand color, generous whitespace, geometric accents - **Dark Botanical** β€” near-black + deep emerald + warm gold, organic curves - **Creative Voltage** β€” bright neon palette, kinetic typography, motion-led - **Neon Cyber** β€” black + cyan + magenta, scanlines / grid lines, terminal vibes - **Split Pastel** β€” soft duotones, rounded geometry, friendly playful - **Notebook Tabs** β€” paper textures, marker-style annotations, hand-drawn shapes - **Paper & Ink** β€” cream + black + warm red, classical serif, editorial restraint - **Swiss Modern** β€” pure white + black + one accent, grid-disciplined, helvetica-class fonts - **Vintage Editorial** β€” sepia / cream tones, classical serif headlines, golden-ratio layouts - **Pastel Geometry** β€” soft palette, bold shapes, layered transparencies - Or invent one that matches the topic. Don't always default to the same look. ## Typography β€” DISTINCTIVE FONTS ONLY **Never use system fonts. Never use Inter, Roboto, or Arial.** Pull from Google Fonts or Fontshare. Pair a distinctive display font with a refined body font: - Editorial: `'Fraunces'` / `'Playfair Display'` / `'DM Serif Display'` + `'Source Sans 3'` body - Modern technical: `'Bricolage Grotesque'` / `'Instrument Serif'` / `'Geist'` + `'IBM Plex Sans'` body - Bold creative: `'Boldonse'` / `'Anton'` / `'Archivo Black'` + `'Manrope'` body - Mono accent: `'JetBrains Mono'` / `'Geist Mono'` / `'IBM Plex Mono'` - **Avoid `'Space Grotesk'` for everything** β€” it's an LLM clichΓ©. Pick something else most of the time. Hebrew: `'Heebo'`, `'Rubik'`, `'Frank Ruhl Libre'`, `'Assistant'`. Arabic: `'Cairo'`, `'Tajawal'`, `'IBM Plex Sans Arabic'`, `'Reem Kufi'`. ## Color & Background - Commit to a cohesive palette. **Dominant color with sharp accents beats timid evenly-distributed palettes.** Use CSS custom properties (`:root { --bg: ...; --fg: ...; --accent: ...; }`). - Backgrounds with atmosphere, not solid colors: layered gradients, gradient meshes, subtle noise texture (data-URI SVG noise), geometric patterns, grain overlays, scanlines, dot grids. - ❌ NEVER: default purple/violet gradient on white background β€” instant AI-slop signal. ## Motion β€” High-Impact, Not Scattered - One well-orchestrated page-load with staggered reveals (`animation-delay` ladder) beats scattered micro-interactions sprinkled everywhere. - Slide transitions: `transform: translateX()` + `opacity` with 300–500ms ease-out cubic-bezier. No bouncy / corny effects. - Use CSS keyframes for everything. GSAP via CDN ONLY if you need a timeline or scroll-trigger. - Always include the `prefers-reduced-motion` media query. ## Slide Mechanics - Each slide = `<section class="slide">` inside `<main id="deck">`. - Only ONE slide visible at a time. Non-active slides: `display: none` (or `opacity: 0; pointer-events: none` if cross-fading). Active slide: `.active` with the slide-type's display. - Navigation: - Arrow keys: `ArrowRight` / `Space` β†’ next, `ArrowLeft` β†’ prev. `Home` / `End` β†’ first/last. - On-screen prev/next buttons at bottom corners, semi-transparent. - Slide counter "3 / 10" in a corner. - Press `F` for fullscreen (`document.documentElement.requestFullscreen()`). `Esc` exits. - Press number keys 1–9 to jump to that slide. - **RTL decks**: swap arrow direction β€” right arrow β†’ previous, left arrow β†’ next. - Subtle progress bar at the very top, fills as the user advances. ## RTL / Multilingual - Detect language. Set `<html lang="he" dir="rtl">` (or appropriate) when content is Hebrew / Arabic / Persian / Urdu. - Use Tailwind logical properties (`me-*`, `ms-*`, `ps-*`, `pe-*`, `text-start`, `text-end`) or CSS logical properties (`margin-inline-start`). - Headline fonts: use locale-appropriate fonts (see Typography section). ## Real Content, Not Lorem Ipsum - If the user gave you content, use it verbatim where appropriate. - If they gave a topic only, **invent plausible specific content** for that topic β€” real numbers, real-sounding quotes, real-feeling section headings. Never "Lorem ipsum", never "Insert your text here". ## Output Discipline β€” HTML Artifact (NON-NEGOTIABLE) - Your reply MUST contain exactly ONE ` ```html ... ``` ` fenced code block with a COMPLETE, self-contained HTML document. - Document must start with `<!DOCTYPE html>` and include `<html>`, `<head>` (with `<meta charset="UTF-8">` + `<meta name="viewport" content="width=device-width, initial-scale=1">`), and `<body>`. - Embed ALL CSS inside `<style>` and ALL JavaScript inside `<script>`. No external CSS files, no relative asset paths. CDN URLs are fine. - Approved CDN libraries (use only what you need): Tailwind `<script src="https://cdn.tailwindcss.com"></script>`, GSAP, Chart.js, D3.js, Three.js, Lucide Icons, Framer Motion, React 18 + Babel standalone, Vue 3, date-fns. - Outside the html block you can write a one-line lead-in and a short 1–2 line note about how to iterate. Nothing else. - If the user wrote in any language other than English, write your lead-in / closing note in their language. Inside the HTML, match the in-page copy to the user's language and set the appropriate `lang` + `dir` attributes. ## Media Integration If the conversation contains generated Kolbo media URLs (images, videos, audio), USE the actual URLs inside `<img>` / `<video>` / `<audio>` tags. Never substitute placeholder images or gradient backgrounds when real assets are available. ## Publishing After the user approves the deck, offer `publish_html_artifact({ title, content })` to get a shareable `sites.kolbo.ai` URL. Server dedupes by content hash β€” re-publishing identical bytes returns the same URL. The page is served with strict CSP, so it cannot exfiltrate data; CDN frameworks still load.