React Email
viclafouch/meme-studio
A skill your agent uses when creating HTML email templates with React components - welcome emails, password resets, notifications, order confirmations, newsletters, or transactional emails.
A skill your agent uses when a PinMe project (Worker TypeScript) needs to integrate email sending (sendemail).
$ npx skills add glitternetwork/pinme --skill pinme-email -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install glitternetwork/pinme pinme-email --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/glitternetwork/pinme.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/pinme-email .claude/skills/pinme-email && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "pinme-email" agent skill from https://github.com/glitternetwork/pinme/tree/main/skills/pinme-email into .claude/skills/pinme-email/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pinme-email", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/glitternetwork/pinme/tree/main/skills/pinme-emailType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add glitternetwork/pinme --skill pinme-email -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install glitternetwork/pinme pinme-email --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/glitternetwork/pinme.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/pinme-email .agents/skills/pinme-email && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pinme-email" agent skill from https://github.com/glitternetwork/pinme/tree/main/skills/pinme-email into .agents/skills/pinme-email/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pinme-email", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add glitternetwork/pinme --skill pinme-email -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install glitternetwork/pinme pinme-email --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/glitternetwork/pinme.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/pinme-email .cursor/skills/pinme-email && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "pinme-email" agent skill from https://github.com/glitternetwork/pinme/tree/main/skills/pinme-email into .cursor/skills/pinme-email/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pinme-email", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/glitternetwork/pinme.git --path skills/pinme-email--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add glitternetwork/pinme --skill pinme-email -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install glitternetwork/pinme pinme-email --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/glitternetwork/pinme.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/pinme-email .gemini/skills/pinme-email && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "pinme-email" agent skill from https://github.com/glitternetwork/pinme/tree/main/skills/pinme-email into .gemini/skills/pinme-email/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pinme-email", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install glitternetwork/pinme pinme-emailInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add glitternetwork/pinme --skill pinme-email -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/glitternetwork/pinme.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/pinme-email .github/skills/pinme-email && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "pinme-email" agent skill from https://github.com/glitternetwork/pinme/tree/main/skills/pinme-email into .github/skills/pinme-email/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pinme-email", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add glitternetwork/pinme --skill pinme-email -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install glitternetwork/pinme pinme-email --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/glitternetwork/pinme.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/pinme-email .opencode/skills/pinme-email && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "pinme-email" agent skill from https://github.com/glitternetwork/pinme/tree/main/skills/pinme-email into .opencode/skills/pinme-email/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pinme-email", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
pinme-emailA skill your agent uses when a PinMe project (Worker TypeScript) needs to integrate email sending (sendemail).
Pinme Email is an agent skill from glitternetwork/pinme. Use this skill when a PinMe project (Worker TypeScript) needs to integrate email sending (sendemail). Guides AI to generate correct Worker TS code.
Its SKILL.md is about 1.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Backend & APIs, covering Transactional email. It works with TypeScript. The repository describes itself as: Deploy Your Frontend in a Single Command. Claude Code Skills supported. The licence is MIT.
Read from SKILL.md and the folder at commit 7822b05. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are typescript and json).
From the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
pinme.cloudFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Pinme Email loads about 1.2k tokens when it runs. Until then it costs about 40 tokens; SKILL.md has 156 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from glitternetwork/pinme at commit 7822b05, republished under its MIT licence (© glitternetwork). 156 words, ~1,207 tokens.
.claude/skills/pinme-email/SKILL.md (or your agent's skills folder).Guides how to call PinMe platform's email sending API in a PinMe Worker (TypeScript).
The following environment variables are automatically injected when the Worker is created — no manual configuration needed:
// backend/src/worker.ts
export interface Env {
DB: D1Database;
API_KEY: string; // Project API Key — used for send_email authentication
BASE_URL?: string; // Optional override for PinMe API base URL, defaults to https://pinme.cloud
}
API_KEYis the sole credential for the Worker to call PinMe platform APIs. WhenBASE_URLis not set, it defaults tohttps://pinme.cloud.
Endpoint: POST {BASE_URL}/api/v4/send_email
Authentication: X-API-Key header (using env.API_KEY)
Sender: Automatically set to {project_name}@pinme.cloud
{
"to": "user@example.com",
"subject": "Your verification code",
"html": "<p>Your code is <strong>123456</strong></p>"
}| Field | Type | Required | Description |
|---|---|---|---|
to | string | Yes | Recipient email address |
subject | string | Yes | Email subject |
html | string | Yes | HTML body |
Success (200):
{ "code": 200, "msg": "ok", "data": { "ok": true } }Errors:
| HTTP Status | Meaning | data.error Example |
|---|---|---|
| 401 | API Key missing or invalid | "X-API-Key header is required" / "Invalid API key" |
| 400 | Parameter validation failed | "Invalid email address" / "Subject is required" |
| 500 | Email service error | "Failed to send email" |
async function sendEmail(env: Env, to: string, subject: string, html: string): Promise<{ ok: boolean; error?: string }> {
const baseUrl = env.BASE_URL ?? 'https://pinme.cloud';
const resp = await fetch(`${baseUrl}/api/v4/send_email`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': env.API_KEY,
},
body: JSON.stringify({ to, subject, html }),
});
const result = await resp.json() as { code: number; msg: string; data?: { ok?: boolean; error?: string } };
if (resp.status !== 200 || result.code !== 200) {
return { ok: false, error: result.data?.error || result.msg || 'Unknown error' };
}
return { ok: true };
}
// Usage in routes
async function handleSendVerification(request: Request, env: Env): Promise<Response> {
const { email } = await request.json() as { email: string };
const code = Math.random().toString().slice(2, 8);
const result = await sendEmail(env, email, 'Verification Code',
`<p>Your code is <strong>${code}</strong></p>`);
if (!result.ok) {
return json({ error: result.error }, 500);
}
return json({ ok: true });
}PinMe platform API unified response format:
interface PinmeResponse<T = unknown> {
code: number; // 200=success, other=failure
msg: string; // "ok" | "error" | "invalid params"
data?: T; // Business data on success, may contain { error: string } on failure
}async function callPinmeAPI<T>(url: string, apiKey: string, body: unknown): Promise<{ data?: T; error?: string }> {
let resp: Response;
try {
resp = await fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'X-API-Key': apiKey },
body: JSON.stringify(body),
});
} catch {
return { error: 'Network error' };
}
if (!resp.ok) {
try {
const err = await resp.json() as PinmeResponse;
return { error: err.data && typeof err.data === 'object' && 'error' in err.data
? (err.data as { error: string }).error
: err.msg || `HTTP ${resp.status}` };
} catch {
return { error: `HTTP ${resp.status}` };
}
}
const result = await resp.json() as PinmeResponse<T>;
if (result.code !== 200) {
return { error: result.data && typeof result.data === 'object' && 'error' in result.data
? (result.data as { error: string }).error
: result.msg };
}
return { data: result.data as T };
}const baseUrl = env.BASE_URL ?? 'https://pinme.cloud';
// Send email
const emailResult = await callPinmeAPI<{ ok: boolean }>(
`${baseUrl}/api/v4/send_email`, env.API_KEY,
{ to: 'user@example.com', subject: 'Hello', html: '<p>Hi</p>' },
);
if (emailResult.error) return json({ error: emailResult.error }, 500);© glitternetwork, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/pinme-email of glitternetwork/pinme.
Open the folder on GitHubat commit 7822b05
Pinme Email next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Pinme Email this skillglitternetwork/pinme | 3.7k | — | ~1.2k | Automated safety check: Pass | MIT | |
| React Emailviclafouch/meme-studio | 110 | 2 repos | ~3.6k | Automated safety check: Pass | MIT | |
| E2a Integratetokencanopy/e2a | 193 | — | ~840 | Automated safety check: Pass | Apache-2.0 | |
| Email Template Builderborghei/Claude-Skills | 886 | — | ~5.7k | Automated safety check: Pass | MIT | |
| Templatical Email Templatestemplatical/sdk | 521 | — | ~870 | Automated safety check: Pass | MIT | |
| Node Backend Development Guidelinesdiet103/claude-code-infrastructure-showcase | 10k | 2 repos | ~2k | Automated safety check: Pass | MIT |
viclafouch/meme-studio
A skill your agent uses when creating HTML email templates with React components - welcome emails, password resets, notifications, order confirmations, newsletters, or transactional emails.
tokencanopy/e2a
A skill your agent uses when adding e2a email capabilities to an application or codebase: outbound sending, inbound signed webhooks, REST polling, or SDK integration.
borghei/Claude-Skills
Build email template systems with React Email or MJML: responsive layouts, dark mode, multi-provider sending, and spam score optimization.
templatical/sdk
Authors, edits, validates and previews Templatical email template JSON and helps integrate the @templatical/editor SDK into an application.
diet103/claude-code-infrastructure-showcase
Sets layered architecture and coding rules for Node.js, Express and TypeScript microservices, covering routes, controllers, services, repositories, Prisma, Sentry and Zod.
mcp-use/mcp-use
Turns an OpenAPI or Swagger spec into an MCP server with the mcp-use TypeScript SDK, mapping each operation to a tool, wiring auth, testing and deploying.
glitternetwork/pinme
A skill your agent uses when the user mentions "pinme", or needs to upload files, store to IPFS, create/publish/deploy websites or full-stack services (including frontend pages, backend APIs…
glitternetwork/pinme
A skill your agent uses when a PinMe project (Worker TypeScript) needs to integrate user authentication — creating email/password users, verifying idtokens, querying user info, or listing users via…
glitternetwork/pinme
A skill your agent uses when a PinMe project (Worker TypeScript) needs to call OpenRouter-backed LLM APIs, including models, chat/completions, streaming, or OpenRouter web search.
glitternetwork/pinme
A skill your agent uses when a PinMe Cloudflare Worker needs R2 object storage, including secure file or image upload, streaming download, metadata lookup, deletion, listing, Range requests, or…
glitternetwork/pinme
A skill your agent uses when the user wants to share, publish, or upload a static result through PinMe, especially by generating a static HTML share page for a PinMe project link, deployed…
glitternetwork/pinme
A skill your agent uses when generating, modifying, or reviewing PinMe Worker (Cloudflare Worker TypeScript) code that accepts payments through UniwebPay — payment links, products/prices, checkout…
Works with
Categories
A skill your agent uses when a PinMe project (Worker TypeScript) needs to integrate email sending (sendemail). Pinme Email is an agent skill from glitternetwork/pinme. Use this skill when a PinMe project (Worker TypeScript) needs to integrate email sending (sendemail).
Pinme Email fits situations like: A PinMe project (Worker TypeScript) needs to integrate email sending (sendemail); tasks that involve Transactional email.
Run `npx skills add glitternetwork/pinme --skill pinme-email -a claude-code`. Or copy the skill folder (skills/pinme-email in glitternetwork/pinme) into .claude/skills/pinme-email in your project. Claude Code loads it when a task matches its description.
Run `npx skills add glitternetwork/pinme --skill pinme-email -a codex`. Or copy the skill folder (skills/pinme-email in glitternetwork/pinme) into .agents/skills/pinme-email in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add glitternetwork/pinme --skill pinme-email -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pinme-email, .gemini/skills/pinme-email, .github/skills/pinme-email and .opencode/skills/pinme-email in your project.
Going by SKILL.md and its folder, Pinme Email needs credentials named API_KEY. Our summary lists: A credential in API_KEY.
SKILL.md names 1 domain. In commands or code: pinme.cloud; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Pinme Email is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.2k tokens (SKILL.md is roughly 4.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Pinme Email: React Email (viclafouch/meme-studio, 110 stars), E2a Integrate (tokencanopy/e2a, 193 stars), Email Template Builder (borghei/Claude-Skills, 886 stars) and Templatical Email Templates (templatical/sdk, 521 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
glitternetwork (a GitHub organization) maintains it in glitternetwork/pinme, which has 3,748 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on September 12, 2026.
Source: glitternetwork/pinme on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.