renew-social
Produce Renew Implant Centre Instagram, Facebook, and Meta ads from the social catalog. Every unit is video, static, or carousel, and every frame stays on the Renew design system. Use when drafting, f
SKILL.md.cursor/skills/renew-social/SKILL.md
GitHubRenew social and paid ads
Blog posts still follow renew-blog-writing. This skill is for Instagram, Facebook, and Meta ads. The feed and the paid catalog are a mix of video, static, and carousel. Do not ship a week or a campaign that is only one of those.
The catalog is docs/content/social/. Entity facts and locked claims stay in docs/search-visibility.md.
Skills
pipeline.json names the skills to open for a stage, and the brand those skills paint.
- Read
skills.useand open a skill when itswhenmatches the stage and the unit format. - Take the line under
take. Leave the line underignore. - The brand is Renew Implant Centre. Colors, type, and the wordmark come from
design-system.json. A skill supplies a technique. It does not supply a brand. - Design skills in that list cover banner layout, token checks, carousel structure, and contrast. Video skills cover Remotion compositions and OpenMontage motion, captions, and cuts. They change how a frame is built. They leave the Renew palette, the two typefaces, and the wordmark alone.
Design system, every time
- Read
docs/content/social/design-system.jsonbefore writing a frame, a prompt, or a caption. - Colors are token names (
accent,carbon,aqua-deep, …). The hex values are copied from:rootinsrc/app/globals.css. If the CSS changes, update the JSON in the same change. Do not invent a green, a blue, or a gold. - Type is DM Serif Display (headlines, weight 400) and Plus Jakarta Sans (labels and body). The wordmark is the word
renewin the serif andimplantsin small caps. There is no logo file. Do not draw a tooth icon in its place. - Light grounds use aqua eyebrows. Dark grounds use lime eyebrows. The CTA is always a fully rounded lime pill with near-black text.
- A single thin aqua arch stroke is allowed. It reads as a jaw curve, not a logo.
- Formats are declared in
design-system.json:videois 1080×1920, with a spoken line. The last 2.5 seconds are layoutvideo-end-card.staticis one 1080×1350 frame, also cut to 1080×1080. No voiceover.carouselis 1080×1350 slides. The last slide is layoutcta-still.
- Call
buildPromptPrefix()fromsrc/lib/social-pipeline.tsfor any generated frame. Clinic stills must be paths inapprovedMedia.
Produce one unit
- Pick a
readyunit fromads.json(paid) ororganic-calendar.json(feed). Skip anything that needs a signed social release. - Follow
format. Video speakshook,spoken, andonScreen. Static and carousel putonScreenand slide lines on the frame and usebodyas the caption. Do not paste the original Gemini hook back in. Do not turn a static or carousel unit into a video to save a setup. - The click is
https://renewimplants.vercel.appplusctaHref. Build it withabsoluteClickHref()fromsrc/lib/social-pipeline.ts. The quiz is about two minutes and nine questions.www.renewimplants.cadoes not serve that page. On video the phone613-841-6111may be spoken. On static and carousel it sits on the card. It is not a second price offer. - If
testimonialNameis set, the words must stay a verbatim excerpt of that review insrc/content/testimonials.ts. Do not show that person’s face. concept-denture-slipis a generated older adult with lived-in skin, wrinkles, and laugh lines. No name, no blood, no needles, no extra facial or hand features. The end card is still the design system.- Cross-posting follows
distribution.json. Do not invent a third clinic, a new domain, or a city price page.
Gate
npx vitest run src/lib/social-pipeline.test.ts
The test fails if a catalog collapses back to one format, a unit leaves the palette, a static or carousel grows a voiceover, a carousel skips the closing card, the copy quotes a price, calls Tom Szarski “Dr.”, says guarantee, or names a patient who is not in the review file.