{"slug":"marketing-content","title":"marketing-content","summary":"Make any vibekit or qt314 promotional asset — tweets and threads, promo videos of the TUI, title cards, OG/link-preview images, quote cards, lore dossier cards, qt314 animations, GIFs, and TUI screenshots — in the vibekit voice and on the brand palette. Use whenever asked to writ","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-09-01T17:43:36.435647Z","repo":{"url":"https://github.com/initlabsai/vibekit","stars":27,"forks":10,"license":"MIT","updatedAt":"2026-09-03T00:03:42Z"},"bodyHtml":"<hr>\n<h2>name: marketing-content\ninternal: true\ndescription: Make any vibekit or qt314 promotional asset — tweets and threads, promo videos of the TUI, title cards, OG/link-preview images, quote cards, lore dossier cards, qt314 animations, GIFs, and TUI screenshots — in the vibekit voice and on the brand palette. Use whenever asked to write social copy, announce or launch something, draft a tweet/thread/dev-diary post, make a promo or demo video, produce any image or video destined for social media, or use vibekit's colors, fonts, or kaomoji.</h2>\n<h1>vibekit marketing content</h1>\n<p>Everything that goes out in public: the copy, the images, the video. One voice\nacross all of it, because a follower sees the tweet and the card in the same\nscroll — if they sound like different companies, the brand is doing nothing.</p>\n<h2>Pick your asset</h2>\n<p>Read the linked file before making the thing; each has the recipe and the\nfailure modes.</p>\n<table>\n<thead>\n<tr>\n<th>you want</th>\n<th>read</th>\n<th>make it with</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>tweet, thread, dev diary, announcement, reply</td>\n<td><code>references/voice.md</code></td>\n<td>—</td>\n</tr>\n<tr>\n<td>promo or demo video of the TUI</td>\n<td><code>references/video.md</code></td>\n<td><code>scripts/*.tape</code> + ffmpeg</td>\n</tr>\n<tr>\n<td>title card between video segments</td>\n<td><code>references/cards.md</code></td>\n<td><code>scripts/make-card.sh</code></td>\n</tr>\n<tr>\n<td>OG / link-preview image, quote card</td>\n<td><code>references/cards.md</code></td>\n<td><code>PNG=1 scripts/make-card.sh</code></td>\n</tr>\n<tr>\n<td>lore dossier card (the /lore series)</td>\n<td><code>references/cards.md</code></td>\n<td><code>scripts/make-lore-card.sh</code></td>\n</tr>\n<tr>\n<td>qt314 animation, GIF loop</td>\n<td><code>references/qt314.md</code></td>\n<td><code>scripts/qt314-*.py</code></td>\n</tr>\n<tr>\n<td>a still of the TUI</td>\n<td><code>references/cards.md</code></td>\n<td>a one-line vhs tape</td>\n</tr>\n<tr>\n<td>colors, fonts, sizes</td>\n<td><code>references/brand.md</code></td>\n<td><code>assets/card.css</code></td>\n</tr>\n</tbody>\n</table>\n<p>Everything visual is HTML → headless chromium → png, then ffmpeg if it moves.\nThat is one pipeline with different templates, not four pipelines, and it is\nwhy a still and a video card can't drift apart. Never hand-roll an ffmpeg\n<code>drawtext</code> card because it looks quicker — it is, and it looks it.</p>\n<h2>Preflight</h2>\n<p>Check before starting, not after a failed take:</p>\n<ul>\n<li><code>vhs</code> <strong>and</strong> <code>ttyd</code> — vhs fails every recording with \"ttyd is not installed\"\nand the message arrives after you've written the whole tape.</li>\n<li><code>chromium</code>, <code>ffmpeg</code>, <code>python3</code> — the card and qt314 renderers.</li>\n<li>JetBrains Mono. Resolve the family with <code>fc-match \"JetBrains Mono\"</code> and use\nthe name it reports (currently <code>JetBrainsMono Nerd Font</code>); an assumed family\nname silently falls back to sans-serif and the card stops looking like a\nterminal.</li>\n<li>Recording live mainnet also needs the keystore daemon\n(<code>bun run apps/cli/src/index.ts keystore status</code>), and AI segments need the\nconfigured agent provider reachable (probe zs-proxy's <code>/v1/models</code>).</li>\n</ul>\n<p>Finished assets go in <code>out/</code> at the repo root — gitignored, and they stay that\nway. Never commit a video. Work files (tapes, frames, QA stills) go in a temp\ndir. Keep a silent master of every cut in <code>out/silent/</code> so a track can be\nswapped without re-encoding video.</p>\n<h2>Voice, in one paragraph</h2>\n<p>lowercase, short, one idea per post. Say the mechanism, not the adjective —\n\"the keys never left the OS keychain\" beats \"secure key management\", because\nthe mechanism is the thing that's actually impressive. Alpha is stated as a\nfeature, not apologized for. Kaomoji are vocabulary, not decoration, and\nqt314 is a character with her own register who signs her own posts. No\nhashtags, no \"please check out\", no visible effort to meme — if the joke needs\nexplaining, cut it. <code>references/voice.md</code> has the corpus, the sigils, the\nthread format, and the drafts that get rejected; read it before writing copy,\nincluding image copy.</p>\n<h2>Brand, in one paragraph</h2>\n<p>Two hues and a ground: amber is structure and figures, teal is alive and\ntouchable, red is danger only and never decoration. The palette's source of\ntruth is <code>apps/tui/src/theme.ts</code>, mirrored for rendering in <code>assets/card.css</code>\n— use the CSS variables rather than pasting hex, so a theme change doesn't\nleave stale cards behind. Everything is monospace, title cards included, so\nthe graphics read as part of the terminal. <code>references/brand.md</code> has the\nvalues, sizes, and card grammar.</p>\n<h2>Reference images</h2>\n<p>When an asset needs a photograph (the lore portraits are the current case),\nask the user for a royalty-free image rather than sourcing one. Save the\ncredit next to the file when the license asks for attribution.</p>\n","files":[{"path":"assets/card.css","sizeBytes":1472,"isText":false},{"path":"assets/lore-portrait.png","sizeBytes":206907,"isText":false},{"path":"references/brand.md","sizeBytes":4219,"isText":true},{"path":"references/cards.md","sizeBytes":5228,"isText":true},{"path":"references/demos/apps-call.md","sizeBytes":3378,"isText":true},{"path":"references/qt314.md","sizeBytes":3166,"isText":true},{"path":"references/video.md","sizeBytes":6179,"isText":true},{"path":"references/voice.md","sizeBytes":8086,"isText":true},{"path":"scripts/add-music.sh","sizeBytes":1004,"isText":true},{"path":"scripts/lore-ascii.py","sizeBytes":1877,"isText":true},{"path":"scripts/lore-portrait-prep.py","sizeBytes":1650,"isText":true},{"path":"scripts/make-card.sh","sizeBytes":4458,"isText":true},{"path":"scripts/make-lore-card.sh","sizeBytes":3876,"isText":true},{"path":"scripts/qt314-boot.py","sizeBytes":7424,"isText":true},{"path":"scripts/qt314-ecosystem.py","sizeBytes":15129,"isText":true},{"path":"scripts/qt314-loop.py","sizeBytes":5036,"isText":true},{"path":"scripts/segA.tape","sizeBytes":792,"isText":false},{"path":"scripts/segB.tape","sizeBytes":789,"isText":false},{"path":"SKILL.md","sizeBytes":4342,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-01T17:44:36.704784Z","sha256":"B794EFAA39094569AD953E37A91F4AF1B8450E09801AFCB8693929B128494D79","sizeBytes":247416},"review":null,"source":{"repositoryUrl":"https://github.com/initlabsai/vibekit","path":"skills/marketing-content","license":"MIT","commit":"ca4bfa7925cbe2e36e166dea2007485ff3b57f84","subtreeSha":"B9D45C8CAE18C1B6318D010BC5E25291DF62F4824E3FE428D45C692D5A35E52E","lastSyncedAt":"2026-09-26T23:11:48.385653Z"},"reviewedAt":"2026-09-01T17:49:03.323542Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/initlabsai/vibekit/tree/main/skills/marketing-content"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install initlabsai-vibekit@llmmart"},{"target":"git","command":"git clone https://github.com/initlabsai/vibekit.git"}]}