skills/pptx-surjit/SKILL.md
Use this skill any time you need to create or edit a .pptx presentation for Surjit. This skill enforces the IBM Plex design language — typography-forward, flat geometry, sharp corners, restrained color. Trigger whenever the user asks for a deck, slides, or presentation, or references a .pptx file, and especially when they want slides that feel clean, modern, or 'IBM-style'. If the user just says 'make me a deck' or 'build slides', use this skill — it overrides the generic pptx skill for this user.
npx skillsauth add neurongraph/skills_repo pptx-surjitInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Presentations for Surjit follow the IBM Plex design language: typography is the primary design element, shapes are flat and rectangular, and decoration is used only when it carries meaning.
Read references/pptxgenjs.md for the technical API reference.
This is a restrained, precision-driven system. Every decision should feel considered, not embellished.
Font: IBM Plex Sans at all weights. Use Light (weight 300) for titles and headlines. Use Regular for body copy. Use Mono for code or data.
If IBM Plex Sans is not available in the environment, substitute Calibri Light for headers and Calibri for body — never Arial, never Trebuchet.
Size scale — follow this hierarchy strictly: | Role | Size | |------|------| | Cover/impact title | 68–132pt | | Section headline | 42–68pt | | Content title | 28–36pt | | Body / bullets | 16–20pt | | Captions / metadata | 12–14pt |
Case: Always sentence case. Never title case or ALL CAPS for body text. Short standalone labels (e.g. "IBM", acronyms) may use uppercase.
Line spacing: 1.0–1.1× for headlines. 1.2–1.4× for body text. Tight is intentional.
Alignment: Left-align everything. Center only when text is deliberately isolated as a visual statement (rare).
The IBM Plex palette. Use colors as flat, solid fills only — no gradients, no opacity blends for decorative effect.
| Name | Hex | Use |
|------|-----|-----|
| Black | 161616 | Primary text, dark backgrounds |
| White | FFFFFF | Text on dark, light backgrounds |
| Cool Gray 10 | F4F4F4 | Default slide background |
| Cool Gray 20 | E0E0E0 | Subtle dividers, secondary containers |
| Cool Gray 60 | 8D8D8D | Captions, metadata, secondary labels |
| Blue 60 | 0F62FE | Primary accent — use sparingly |
| Purple 50 | A56EFF | Alternate accent |
| Teal 50 | 009D9A | Data/science accent |
| Magenta 60 | 9F1853 | Emphasis, contrast |
| Red 50 | FA4D56 | Warnings, high-emphasis callouts |
Background strategy: Default to F4F4F4 (Cool Gray 10) for content slides. Use 161616 (Black) for impact/cover slides. Use FFFFFF sparingly for high-contrast content need. Never use a colored background for a regular content slide.
Color discipline: One accent color per presentation (pick from the palette above). Use it for 1–2 elements per slide max. If in doubt, add no color — black and gray are sufficient.
Sharp corners only. Every rectangle, container, or dividing element must have 0 corner radius. This is non-negotiable — it defines the IBM aesthetic.
Thin lines over thick shapes. Use 1pt (w: 0.01") hairlines as dividers. A thin horizontal rule at y=0.9" separating the title from the body is a valid structural element.
Small rectangular nodes (e.g., a 0.15"×0.15" solid square in an accent color) can be used as micro-accents near a title or section marker. Use at most one per slide.
No decorative shapes. Every shape on a slide must serve a structural or informational purpose. Shapes placed purely for visual "energy" don't belong here.
// Default content slide — Cool Gray 10
slide.background = { color: "F4F4F4" };
// Impact/cover/section divider — Black
slide.background = { color: "161616" };
// When black background: flip text to white
// color: "FFFFFF" on title, "8D8D8D" on metadata
Pick one of these per slide. Don't mix multiple patterns on one slide.
1. Full-bleed type (cover, section titles, impact statements)
2. Headline + body (most content slides)
3. Two-column split (comparisons, quote + context)
4. Stat/callout grid (metrics, key numbers)
E0E0E05. Horizontal stepped list (process flows, steps)
E0E0E0 connects them horizontallyThese patterns are never acceptable in this design system:
// Cover title — IBM Plex Sans Light, black on light or white on dark
slide.addText("Title text here", {
x: 0.6, y: 0.8, w: 8.8, h: 3.5,
fontFace: "IBM Plex Sans Light",
fontSize: 84,
color: "161616", // or "FFFFFF" on dark background
bold: false,
align: "left",
valign: "top",
margin: 0,
});
// Content slide title — smaller, same weight
slide.addText("Section title", {
x: 0.6, y: 0.4, w: 8.8, h: 0.7,
fontFace: "IBM Plex Sans Light",
fontSize: 28,
color: "161616",
bold: false,
align: "left",
margin: 0,
});
// Hairline rule under title
slide.addShape(pres.ShapeType.rect, {
x: 0.6, y: 1.15, w: 8.8, h: 0.01,
fill: { color: "E0E0E0" },
line: { color: "E0E0E0", width: 0 },
});
// Body text
slide.addText("Body content", {
x: 0.6, y: 1.4, w: 8.8, h: 3.5,
fontFace: "IBM Plex Sans",
fontSize: 18,
color: "161616",
align: "left",
valign: "top",
lineSpacingMultiple: 1.3,
});
// Micro-accent node (optional, max one per slide)
slide.addShape(pres.ShapeType.rect, {
x: 0.6, y: 0.38, w: 0.12, h: 0.12,
fill: { color: "0F62FE" },
line: { color: "0F62FE", width: 0 },
});
// Caption / metadata
slide.addText("Source: IBM", {
x: 0.6, y: 5.3, w: 8.8, h: 0.2,
fontFace: "IBM Plex Sans",
fontSize: 12,
color: "8D8D8D",
align: "left",
margin: 0,
});
Every slide should follow this spatial skeleton:
y=0.4" ┌─ Title (28–36pt, IBM Plex Sans Light) ────────────────────┐
y=1.15" ├─ Thin rule (1pt, E0E0E0) ──────────────────────────────────┤
y=1.3" │ │
│ Content area │
│ │
y=5.1" ├─ Footer rule (optional, 1pt, E0E0E0) ──────────────────────┤
y=5.25" └─ Caption / source (12pt, 8D8D8D) Slide number ───┘
Left margin: x=0.6". Right edge: x=9.4" (for 10" wide slide). Content width: w=8.8".
Use pptxgenjs. Follow the design rules above for every element.
npm install -g pptxgenjs
node generate.js
Read references/pptxgenjs.md for full API reference.
When working from the IBM template (.potx file at /Users/surjitdas/Library/CloudStorage/OneDrive-Personal/Landing/IBM_presentation_template_v_2_0_Plex.potx):
python -m markitdown presentation.pptxpython scripts/office/unpack.py presentation.pptx unpacked/Visual bugs are common. Treat first render as broken until proven otherwise.
python -m markitdown output.pptx
python -m markitdown output.pptx | grep -iE "xxxx|lorem|ipsum|placeholder"
python scripts/office/soffice.py --headless --convert-to pdf output.pptx
pdftoppm -jpeg -r 150 output.pdf slide
F4F4F4, 161616, or FFFFFFpip install "markitdown[pptx]" — text extractionnpm install -g pptxgenjs — create from scratchsoffice) — PDF conversion (use scripts/office/soffice.py)pdftoppm) — PDF to imagestesting
--- name: obsidian-todo-action description: Action a single Obsidian todo: reads project context and related tasks, adaptively assesses what's needed (sub-tasks, email drafts, calendar invites), generates all artifacts into the project folder, and updates project.md — all in one session. --- # Obsidian Todo Action Skill Actions a single todo from the user's Obsidian vault in one focused session. Reads project context, decides adaptively what help is needed, generates artifacts (sub-tasks, emai
data-ai
Transcribes audio files (voice memos, recordings, meetings) into text using a local ASR model (qwen3_asr_rs). Processes all audio in the configured input directory and saves transcripts as text files. Use this skill whenever the user wants to transcribe audio, convert speech to text, process voice memos, or get spoken content into written form — even if they don't use the word "transcribe".
devops
--- name: obsidian-daily-process description: Orchestrates the full Obsidian vault processing pipeline: transcribes voice memos and audio recordings, classifies them into todos, ideas, or daily notes, and files each into the right place in the vault. Also triggers downstream Obsidian pipelines (wiki update, ArtMind knowledge graph). Use this skill whenever the user wants to process voice memos, audio recordings, or run any Obsidian vault update — even if they only mention "voice memo", "recordin
development
Answer questions about "The Geek Way" by Andrew McAfee — including its four core norms (Science, Ownership, Speed, Openness), supporting concepts like Homo ultrasocialis, cultural evolution, the OODA loop, the press secretary brain module, and real-world case studies. Use this skill whenever someone asks about The Geek Way, geek culture in business, McAfee's framework for organizational excellence, or concepts from the book such as ultrasociality, agile iteration, radical candor, or why tech companies outperform traditional firms. Also trigger when users ask how to apply these ideas to their own organization, team, or leadership style.