New Template logo

New Template

Community
roslove44
new-template

Scaffolds a new visual (.tsx) in an existing BrandArtisan project, aligned with its brand.md guidelines. Use when the user wants to create a new image/cover/banner/OG in a project ("new visual", "add a cover for X", "create the OG for Y"). Always reads brands/<project>/brand.md and refuses if it is missing.

Overview

Publisherroslove44
Repositorybrand-artisan
Skill namenew-template
Stars
5
Forks
0
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by roslove44 on GitHub. Read the source before you install it.

Installation

Install the New Template AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/roslove44/brand-artisan/tree/main/skills/new-template
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/roslove44/brand-artisan.git /tmp/brand-artisan
mkdir -p .claude/skills
cp -r /tmp/brand-artisan/skills/new-template .claude/skills/new-template
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable New Template in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads New Template on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so New Template is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

new-template: scaffolding a visual

Goal: create templates/<project>/<name>.tsx conforming to the Template contract and aligned with the project's guidelines.

1. Resolve <project> and <name>

Take them from the arguments. Otherwise ask. <name> is a kebab-case slug (e.g. cover, og-home, linkedin-banner). Check that templates/<project>/<name>.tsx does not already exist.

2. Read the guidelines (blocking)

Read brands/<project>/brand.md. If the file does not exist -> STOP: produce no visual, tell the user to run /new-project <project> first. That is the CLAUDE.md rule, without exception.

While reading the guidelines, extract: the palette (roles + hex), type and weights, logo/favicon variants and their rules, and the don'ts.

3. Build on what is there

If templates/<project>/ already holds a .tsx, read it as a style reference (e.g. og.tsx) and match its conventions. Otherwise start from the skeleton below.

4. Frame the visual (ask, don't guess)

Ask the user for:

  • Dimensions (px). Suggest a default for the use: OG ~1200×630, social cover ~1500×500, LinkedIn banner ~1584×396.
  • Message / content (headline, tagline, elements). If brands/<project>/project.md exists, read it to set the tone and the claims (don't invent figures or promises); otherwise ask for the tone rather than guessing.
  • Which logo variant to use (depending on the background, following the guideline rules).

If the brief has several possible readings -> present them, don't choose in silence (CLAUDE.md principle #1).

5. Write the .tsx

Respect the Template contract (from brand-artisan) and the project's conventions:

  • Colors as named constants taken from the guidelines: don't invent hex.
  • Fonts: those present in fonts/, discovered automatically by the engine. The file name gives the family and the weight (GeistMono-600.ttf -> family Geist Mono, weight 600). If the guidelines require another font that is absent from fonts/, follow the Missing font procedure below: never use one silently.
  • Assets through brand("<project>/...") (never a path relative to the cwd, nor ../../..).
  • scale is optional in size if a retina render is wanted.
  • Default export satisfies Template.

Starting skeleton:

tsx
import type { ReactNode } from "react";
import { brand, type Template } from "brand-artisan";
// import { readFile } from "node:fs/promises"; // if the visual loads an asset (SVG/PNG)

const SIZE = { width: 1200, height: 630 };

// <Project> guideline palette (from brands/<project>/brand.md).
const INK = "#......";

// Load assets at the top level (data-URI for SVG <img>).
// const markSvg = await readFile(brand("<project>/favicon/icon.svg"));

function render(): ReactNode {
	return (
		<div style={{ width: "100%", height: "100%", display: "flex", /* ... */ backgroundColor: INK }}>
			{/* content aligned with the guidelines */}
		</div>
	);
}

export default { size: SIZE, title: "<Human title>", render } satisfies Template;

Keep the code minimal (principle #2): no abstraction for single-use code, no helper nobody asked for. If a background effect (texture, glow) repeats, factor it out locally as banner.tsx does with its rule.

Satori only covers a subset of CSS: read the Satori pitfalls appendix before positioning layers or attempting a text effect.

6. Verify

  • npm run typecheck -> green.
  • Render: npm run build (writes the PNG) or point the user to npm run dev then /<project>/<name> for the preview.

Success criterion: the file typechecks, renders a PNG, and uses only colors and type coming from brand.md.

Appendix: Satori pitfalls

CSS properties that Satori ignores silently (no warning, the layer just disappears or the effect does not happen):

  • inset does not exist. A layer with position: "absolute", inset: 0 is never rendered. Write the four properties instead: top: 0, right: 0, bottom: 0, left: 0.
  • color: "transparent" renders no glyph, even combined with a WebkitTextStroke. For an outlined text effect, give the text a color equal to the background color: the stroke draws the outline, and the fill visually "punches out" the glyph.

Appendix: missing font

If the guidelines require a font that is not in fonts/:

  1. Ask for permission to fetch it: this is an outbound network action, never silent. Name the source and the license before downloading.
  2. Trustworthy source, ttf/otf format (Satori does not read woff2): the raw .ttf from the official repo (github.com/google/fonts) or an @fontsource/<font> package. Most Google Fonts are OFL/Apache -> fine. A proprietary font or an ambiguous license -> refuse and ask the user to provide the file themselves.
  3. Download to fonts/<Family>-<weight>.ttf, using curl -L <url> -o ... or Invoke-WebRequest -OutFile. WebFetch is not suitable (binary). The file name is authoritative: it determines the family the templates cite, in PascalCase (GeistMono-600.ttf -> Geist Mono, 600).
  4. Check the file: non-zero size and a real font header (.ttf starts with 00 01 00 00, OpenType with OTTO), not an HTML error page in disguise, which would crash Satori at runtime.
  5. Document the license: drop its text into fonts/ and add the matching row to the table in fonts/NOTICE.md. No code declaration is needed: the engine discovers the file at startup, provided its name follows the convention from step 3.
  6. Confirm before committing the .ttf (a binary) with the user.

If the user refuses the download -> do not use the font; ask them to drop the file into fonts/, or stay with a font already present in fonts/.

Frequently asked questions

What does the New Template AI skill do?

Scaffolds a new visual (.tsx) in an existing BrandArtisan project, aligned with its brand.md guidelines. Use when the user wants to create a new image/cover/banner/OG in a project ("new visual", "add a cover for X", "create the OG for Y"). Always reads brands/<project>/brand.md and refuses if it is missing.

Why use New Template on TypingMind?

Because you install it once and use it with any model. New Template is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install New Template in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/roslove44/brand-artisan/tree/main/skills/new-template. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use New Template?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with New Template?

As many as you like. As long as a model supports skills, you can use New Template with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the New Template AI skill free?

Yes. It is published on GitHub by roslove44 under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇