skills/XiangyuSu611/obsidian-theme-designer/SKILL.md
Use when the user wants to design, preview, or customize an Obsidian vault theme — including choosing styles, comparing color schemes, adjusting typography, or generating CSS snippets. Triggers on keywords like "Obsidian theme", "color scheme", "CSS snippet", "appearance".
npx skillsauth add aiskillstore/marketplace obsidian-theme-designerInstall 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.
Help users iteratively design Obsidian themes through visual browser previews, then generate an importable CSS snippet.
Language: Respond in the same language the user writes in. If they write in Chinese, reply in Chinese. If English, reply in English.
digraph theme_design {
"1. Analyze Vault" [shape=box];
"2. Extract Theme Variables" [shape=box];
"3. Launch Visual Companion" [shape=box];
"4. Gather Preferences" [shape=box];
"5. Iterative Design Refinement" [shape=diamond];
"5b. Install Fonts" [shape=box];
"6. Generate CSS Snippet" [shape=box];
"7. Import Guide" [shape=doublecircle];
"1. Analyze Vault" -> "2. Extract Theme Variables";
"2. Extract Theme Variables" -> "3. Launch Visual Companion";
"3. Launch Visual Companion" -> "4. Gather Preferences";
"4. Gather Preferences" -> "5. Iterative Design Refinement";
"5. Iterative Design Refinement" -> "5. Iterative Design Refinement" [label="user requests changes"];
"5. Iterative Design Refinement" -> "5b. Install Fonts" [label="user approves"];
"5b. Install Fonts" -> "6. Generate CSS Snippet";
"6. Generate CSS Snippet" -> "7. Import Guide";
}
Read the following files to understand current configuration:
.obsidian/appearance.json — current theme, font size, light/dark mode.obsidian/community-plugins.json — installed plugins (check for Style Settings).obsidian/themes/ — downloaded community themes.obsidian/snippets/ — existing custom CSSAlso scan the vault directory structure to understand note types (papers, journals, project management, etc.) so preview content reflects real usage.
Use grep to extract key variables from each installed theme's theme.css:
| Category | Key Variables |
|----------|--------------|
| Background | --background-primary, --background-secondary, --color-base-00 |
| Text | --text-normal, --text-muted, --text-accent |
| Accent | --interactive-accent, --color-accent |
| Font | --font-text-theme, --font-interface-theme |
| Headings | --h1-color ~ --h6-color, --size-h1 ~ --size-h6 |
| Typography | line-height, --p-spacing, font-size |
Extract values for both .theme-light and .theme-dark. Use an Explore agent for parallel extraction.
Use the superpowers brainstorming Visual Companion to show options in the browser.
Windows:
# run_in_background: true
scripts/start-server.sh --project-dir /path/to/vault
Then read $STATE_DIR/server-info for URL.
Ask one question at a time with multiple choices. Always provide a recommended default for users who are unsure ("if you're not sure, I recommend X because...").
Before showing style options, ask the user:
"Do you have any references you like — a screenshot, website, or app whose look you want to emulate? If not, no worries, I'll show you some options."
If the user provides a reference, analyze its visual characteristics (color temperature, font style, density, decoration level) and use them to guide subsequent choices. If the reference clearly determines style direction and/or color preference, skip the corresponding sub-steps (4b, 4c) and go directly to the next undecided question. Don't ask what the user has already shown you.
Show style directions visually in the browser with mini mockups, not just text labels. Each option should include a relatable analogy so non-designers can understand:
| Direction | Analogy for non-designers | |-----------|--------------------------| | Academic | "Like a LaTeX PDF or printed journal" | | Minimal | "Like Apple Notes — clean, lots of white space" | | Dark immersive | "Like a code editor at night — easy on the eyes" | | Cyberpunk-dev | "Like VS Code or a hacker terminal" | | Warm texture | "Like writing on real paper — soft, warm tones" |
If the user says "I don't know" or "any is fine", recommend the direction that best matches their vault content (e.g., academic for research-heavy vaults).
Ask in plain terms, NOT hex codes:
"Do you prefer cool tones (blue, teal, gray), warm tones (gold, orange, brown), or neutral (pure black & white)?"
Then show 2-3 color palette options visually in the browser with the chosen direction applied. Never ask users to pick hex values directly.
REQUIRED: Invoke the frontend-design:frontend-design skill to select distinctive font pairings.
Critical: NEVER present font names in the terminal as the primary selection method. Users don't know what "Playfair Display" looks like. Always show fonts rendered in the browser — users choose by visual appearance, not by name.
Principles (from frontend-design):
<link> tags in previews. In the final CSS snippet, use locally-installable font names with fallbacks.| Role | Examples | |------|---------| | Heading (display) | Playfair Display, DM Sans, Outfit, Libre Baskerville, Sora | | Body (reading) | Source Serif 4, Literata, DM Sans, Outfit | | CJK pairing | Noto Serif SC (with serif), Noto Sans SC (with sans-serif), LXGW WenKai | | Code (monospace) | JetBrains Mono, IBM Plex Mono, Fira Code, Cascadia Code |
Font showcase format: Create a full-page HTML gallery (not content fragments) with 8-10 font cards. Each card should render the SAME sample content (including bilingual text AND numbers/data) in that card's font pairing. Include a Dark/Light mode toggle at the top. Users can click cards to select. The sample text must include:
Users may mix-and-match: A user may like the Chinese rendering from one card and the English/number rendering from another. Support this — the final CSS can combine fonts from different cards (e.g., Spectral for Latin + Noto Serif SC for CJK).
Show full simulation in browser (sidebar + editor), confirm step by step.
Critical rules (MUST follow):
<div class="split"> to show light/dark modes next to each otherWrite a new file for each iteration (e.g., design-v2.html). Never overwrite previous versions.
After the user approves the font selection, download and install the chosen fonts to the system so Obsidian can use them.
Download from Google Fonts CSS API:
# 1. Fetch the CSS which contains direct .ttf URLs
CSS=$(curl -s "https://fonts.googleapis.com/css2?family=FontName:wght@400;600;700" \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)")
# 2. Extract and download all .ttf URLs
echo "$CSS" | grep -o 'https://[^)]*' | while read url; do
curl -sL "$url" -o "/tmp/fonts/$(basename "$url")"
done
Install per platform:
.ttf files to $HOME/AppData/Local/Microsoft/Windows/Fonts/ and register in registry:
FONTDIR="$HOME/AppData/Local/Microsoft/Windows/Fonts"
cp /tmp/fonts/*.ttf "$FONTDIR/"
# Register each font in HKCU registry
for f in /tmp/fonts/*.ttf; do
fname=$(basename "$f")
powershell.exe -Command "New-ItemProperty -Path 'HKCU:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts' -Name '$fname' -Value '$(cygpath -w "$FONTDIR")\\$fname' -PropertyType String -Force"
done
~/Library/Fonts/~/.local/share/fonts/ then run fc-cache -fImportant: Remind user to restart Obsidian after font installation for changes to take effect.
Once the user approves, generate a CSS snippet file to .obsidian/snippets/.
CSS structure template:
/* Shared fonts */
body {
--font-text-theme: '...';
--font-interface-theme: '...';
}
/* Light mode */
.theme-light {
--background-primary: ...;
--text-accent: ...;
--h1-color: ...; --h2-color: ...;
}
/* Dark mode */
.theme-dark {
--background-primary: ...;
--text-accent: ...;
--h1-color: ...; --h2-color: ...;
}
/* Element-specific styles: headings, blockquotes, code, tags, etc. */
Notes:
!important only when necessary to override a base theme.theme-light / .theme-darkTell the user how to enable the snippet:
| Mistake | Correct Approach |
|---------|-----------------|
| Asking user to pick hex colors or font names in terminal | Always show colors and fonts visually in browser — users choose by appearance |
| Using generic fonts (Inter, Arial, Roboto) | Invoke frontend-design skill for distinctive font pairings per variant |
| Showing text-only style options without visual examples | Every style direction must have a visual mockup in browser |
| No fallback when user says "I don't know" | Always provide a recommended default with reasoning |
| Not asking for references first | Ask if user has screenshots/websites they like before showing options |
| Preview in English only | Must include bilingual content (Chinese + English) in headings and body |
| Different fonts in light/dark modes | Font family must be unified; only change colors |
| Too many options at once | Show 3-4 options max per screen |
| Oversimplified preview | Must include headings, body, quotes, code, tables, tags |
| Generate CSS without preview | Always confirm design in browser before generating |
| Snippet in wrong directory | Must be placed in .obsidian/snippets/ |
development
Apple Human Interface Guidelines for content display components. Use this skill when the user asks about charts component, collection view, image view, web view, color well, image well, activity view, lockup, data visualization, content display, displaying images, rendering web content, color pickers, or presenting collections of items in Apple apps. Also use when the user says how should I display charts, what's the best way to show images, should I use a web view, how do I build a grid of items, what component shows media, or how do I present a share sheet. Cross-references: hig-foundations for color/typography/accessibility, hig-patterns for data visualization patterns, hig-components-layout for structural containers, hig-platforms for platform-specific component behavior.
tools
Automate HelpDesk tasks via Rube MCP (Composio): list tickets, manage views, use canned responses, and configure custom fields. Always search tools first for current schemas.
testing
Expert Haskell engineer specializing in advanced type systems, pure functional design, and high-reliability software. Use PROACTIVELY for type-level programming, concurrency, and architecture guidance.
tools
GraphQL gives clients exactly the data they need - no more, no less. One endpoint, typed schema, introspection. But the flexibility that makes it powerful also makes it dangerous. Without proper controls, clients can craft queries that bring down your server. This skill covers schema design, resolvers, DataLoader for N+1 prevention, federation for microservices, and client integration with Apollo/urql. Key insight: GraphQL is a contract. The schema is the API documentation. Design it carefully.