goose-ads
Edit, resize, animate and study image ads with GooseWorks in this chat. New static or image ads go to the make-static-ads skill…
Render a static iOS QWERTY keyboard as inline HTML+CSS sized for the 750-wide 9:16 stage. Includes the 3-suggestion bar, alpha keys, shift/backspace, 123/emoji/space/return row, and the bottom globe+mic strip. No animation logic — slide up/down is the molecule's job (CSS
Claude Code
$ npx -y skills add gooseworks-ai/goose-skills --skill render-ios-keyboard --agent claude-code
Codex
$ npx skills add gooseworks-ai/goose-skills --skill render-ios-keyboard -a codex -y
Cursor
$ npx skills add gooseworks-ai/goose-skills --skill render-ios-keyboard -a cursor -y
Gemini CLI
$ npx skills add gooseworks-ai/goose-skills --skill render-ios-keyboard -a gemini-cli -y
GitHub Copilot
$ npx skills add gooseworks-ai/goose-skills --skill render-ios-keyboard -a github-copilot -y
OpenCode
$ npx skills add gooseworks-ai/goose-skills --skill render-ios-keyboard -a opencode -y
Windsurf
$ npx skills add gooseworks-ai/goose-skills --skill render-ios-keyboard -a windsurf -y
name: render-ios-keyboard description: Render a static iOS QWERTY keyboard as inline HTML+CSS sized for the 750-wide 9:16 stage. Includes the 3-suggestion bar, alpha keys, shift/backspace, 123/emoji/space/return row, and the bottom globe+mic strip. No animation logic — slide up/down is the molecule's job (CSS transform on the .keyboard root). status: superseded superseded_by: phone-chat@1.2.0
> **Superseded:** the video kit now does this with the phone-chat part, version 1.2.0, in the parts folder of this repository. Every phone-chat style is a style file that draws the same screen frame by frame from the plan's scenes, with the original sounds, in the kit's browser. This atom stays, unchanged in behaviour, for skills outside the kit until they move; its scripts still run.
Provide a drop-in iOS QWERTY keyboard fragment that pairs with messaging atoms (create-chatgpt-mockup, create-imessage-mockup) when a video needs to show someone typing. Static only: the keyboard sits at the bottom of the screen, the molecule's recorder slides it up/down with `transform: translateY(...)`.
const { renderKeyboardHTML, renderKeyboardCSS } = require('./generate');
const html = renderKeyboardHTML({
suggestions: ['"He"', 'Hey', 'Heating'], // optional, default ['I', 'The', "I'm"]
layout: 'qwerty-lower', // 'qwerty-lower' | 'qwerty-upper' | 'numbers'
});The atom returns an HTML fragment (one `<div class="ios-keyboard">…</div>`) plus the matching CSS. The CSS uses scoped class names so it won't collide with the rest of the page.
1. **Require the module.** `const { renderKeyboardHTML, renderKeyboardCSS } = require('./generate');` — no build step, no dependencies beyond Node's `fs`/`path`. 2. **Pick a layout.** `renderKeyboardHTML` reads `opts.layout` and looks it up in `ROWS`: `qwerty-lower` (default), `qwerty-upper`, or `numbers`. An unknown layout silently falls back to `qwerty-lower`. The molecule decides which state to show; this atom never switches on its own. 3. **Pass suggestions.** `opts.suggestions` is an array of up to three strings rendered into the suggestion bar; each value is run through `escapeHTML` so quotes/angle brackets are safe. Omit it to get the default `['I', 'The', "I'm"]`. 4. **Receive the fragment.** The function returns a single root `<div class="ios-keyboard" data-layout="…">` containing, in order: the `.kb-suggestions` bar, three letter rows (`row-1` 10 keys, `row-2` 9 keys padded with two 18px spacers, `row-3` = shift/`#+=` modifier + 7 keys + backspace), the `row-bottom` (`123`/`ABC` switch, emoji, wide `space`, return), and the `.kb-system-row` globe + mic strip. 5. **Inject the CSS once.** Call `renderKeyboardCSS()` (which reads `templates/keyboard.css` from disk) and place it in a `<style>` block on the page. The molecule mounts the fragment at the bottom of the stage next to `.composer-wrap`. 6. **Animate externally.** The atom emits no JS and never sets a `transform`. The owning molecule slides the keyboard in/out via `transform: translateY(...)` on the `.ios-keyboard` root (the CSS sets `will-change: transform` for this). 7. **(Optional) Preview standalone.** `render.js` wraps the fragment + CSS in a 750×1334 white `.stage` HTML page and writes it to `--out` for eyeballing padding/colors.
node render.js --out /tmp/kb.html --suggestions 'I,The,I'\''m'
Produces a standalone HTML page with just the keyboard, useful for tweaking padding/colors.
| Output | Shape | |---|---| | `renderKeyboardHTML(opts)` | HTML string (one root `<div class="ios-keyboard">`) | | `renderKeyboardCSS()` | CSS string (scoped to `.ios-keyboard *`) |
The molecule injects these into the chatgpt-mockup page next to `.composer-wrap`.
| File | Purpose | |---|---| | `generate.js` | Returns `{renderKeyboardHTML, renderKeyboardCSS}` | | `render.js` | Standalone CLI for visual review | | `templates/keyboard.css` | All keyboard styling |
Put your AI agent on the growth team. Research customers and competitors, analyze what is working, create the next campaign, and learn from the result.
Edit, resize, animate and study image ads with GooseWorks in this chat. New static or image ads go to the make-static-ads skill…
Make product photos (studio, lifestyle or on a model) of a brand's real products with GooseWorks in this chat. Start brand work…
Make an approved GooseWorks video when an answer's next_step gives its command.
Make a video ad in this chat from a real reference ad, found or theirs; styles are the fallback. Follow every answer's next_step.
GooseWorks growth coworker and router for markets, competitors, audiences, creators, campaigns, ads, photos, graphics, video,…
Create a custom video with sourced product accuracy, explicit sound routing and exact-final audiovisual review.
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use…
Comprehensive SEO analysis for any website or business type. Full site audits, single-page analysis, technical SEO (crawlability,…
Turn the current project website into a short, polished, shareable launch video using Hyperframes. Use when someone says "/brag",…
Full website GEO+SEO audit with parallel subagent delegation. Orchestrates a comprehensive Generative Engine Optimization audit…