@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
Markdown
<!-- 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.