skill-pack/pos-dashboard-gen/SKILL.md
Generate a personal HTML dashboard from your POS context. Auto-detects MCP, gathers data, builds terminal-aesthetic single-file page.
npx skillsauth add ai-mindset-org/pos-sprint pos-dashboard-genInstall 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.
Generate a self-contained HTML dashboard from your POS context. Auto-detects integrations, gathers data, builds a single-file page with terminal aesthetic. Snapshot at generation time — run again to refresh.
Same pattern as /pos-morning — read MCP config first:
cat ~/.claude/mcp.json 2>/dev/null
Also check local tools:
# Calendar script
[ -x "$HOME/.claude/scripts/gcal-smart.sh" ] && echo "gcal: available"
# Linear cache
find ~/.claude/projects -name "linear-tracking.md" -type f 2>/dev/null | head -1
Build source map. Only gather from detected sources.
For each panel, fetch data. Skip panels without data — empty panel is worse than no panel.
Sources (try in order):
/pos-morning output or daily-focus filefind ~/.claude/projects -name "MEMORY.md" -type f 2>/dev/nullDegradation chain:
ToolSearch: "+krisp meetings" → mcp__krisp__list_upcoming_meetings"$HOME/.claude/scripts/gcal-smart.sh" todayFormat: [{time: "10:00", title: "Standup", duration: "30m"}]
Degradation chain:
ToolSearch: "+linear list_issues" → mcp__linear__list_issues(assignee: "me", status: "started")linear-tracking.mdfind . -maxdepth 2 -name "TODO.md" 2>/dev/nullFormat: [{id: "AIM-123", title: "Task", priority: "high", status: "IP"}]
touch -t $(date +%Y%m%d)0000 /tmp/pos-today-marker 2>/dev/null
find ~/.claude/projects -name "*.jsonl" -newer /tmp/pos-today-marker -maxdepth 3 2>/dev/null | head -8
For each: project (path), first user message (topic), line count (activity).
ls ~/.claude/skills/*/SKILL.md 2>/dev/null
ls ~/.claude/skills/*.md 2>/dev/null
ls .claude/skills/*/SKILL.md 2>/dev/null
Extract names from paths.
find . -name "*.md" -mmin -720 \
-not -path "./.obsidian/*" \
-not -path "./.trash/*" \
-not -path "./node_modules/*" \
2>/dev/null | head -8
Computed from gathered data:
sessions: today's session counttasks_ip: in-progress taskstasks_todo: todo tasksskills: installed skill countfiles_today: recently modified filesmcp_servers: configured server countGenerate a single self-contained HTML file.
:root {
--bg: #0d1117;
--bg2: #161b22;
--bg3: #1c2128;
--border: rgba(48, 54, 61, 0.6);
--accent: #55aa88;
--accent-dim: #3d8066;
--blue: #4488cc;
--amber: #d4a843;
--red: #cc4444;
--text: #c9d1d9;
--text-dim: #8b949e;
--text-bright: #e6edf3;
--mono: 'JetBrains Mono', 'SF Mono', 'Cascadia Code', monospace;
--r: 6px;
}
.light {
--bg: #ffffff;
--bg2: #f6f8fa;
--bg3: #f0f2f5;
--border: #d0d7de;
--accent: #2d8659;
--text: #1f2328;
--text-dim: #656d76;
--text-bright: #1f2328;
}
┌─ Terminal Strip (scrolling log) ────────────────┐
├─ Header: POS DASHBOARD · {date} · LIVE {clock} ─┤
├──────────────────────────────────────────────────┤
│ Focus │ Calendar │ Tasks │ Skills │
├───────────┼────────────┼────────────┼────────────┤
│ Sessions │ Documents │ Metrics │ │
└──────────────────────────────────────────────────┘
Grid: grid-template-columns: repeat(auto-fit, minmax(280px, 1fr))
Scrolling CSS marquee with real data:
<div class="terminal-strip">
<div class="strip-scroll">
{time} pos-morning ✓ · {time} linear sync {n} tasks ·
{time} session started · {time} vault: {n} files ·
</div>
</div>
CSS: animation: scroll-left 30s linear infinite
<div class="panel" data-panel="{name}">
<div class="panel-head">
<span class="panel-icon">></span>
<span class="panel-title">{NAME}</span>
<span class="panel-badge">{count}</span>
</div>
<div class="panel-body"><!-- items --></div>
</div>
Styles:
panel-head: uppercase, border-bottom accent, font-size: 0.72rempanel-body: 12px padding, font-size: 0.8rempanel-badge: pill, accent backgroundEmbed as JS constants:
const POS = {
generated: "{ISO timestamp}",
theme: "{dark|light}",
focus: "{focus sentence}",
calendar: [{time, title, duration}],
tasks: [{id, title, priority, status}],
sessions: [{project, topic, lines, time}],
skills: ["{name}", ...],
docs: [{name, modified}],
metrics: {sessions, tasks_ip, tasks_todo, skills, files_today, mcp_servers}
};
Focus: large text, accent color, full-width top.
Calendar: time-sorted, {time} monospace dim, {title} bright.
Tasks: priority dot (red=urgent, amber=high, blue=medium, dim=low), {id} dim prefix. Group by status.
Sessions: {time} dim, {project} accent, {topic} text, activity bar (thin inline proportional to lines).
Skills: chip grid. Click copies /{name} to clipboard.
Documents: filename + "modified {ago}" dim.
Metrics: 2x3 grid, big accent numbers, labels below.
setInterval every 30s in header400-700 lines. Fewer panels → shorter file.
OUTPUT="${output:-/tmp/pos-dashboard.html}"
Write with Write tool, then:
open "$OUTPUT"
Show:
dashboard generated
path: {output}
panels: {included list}
data: {summary of sources}
theme: {dark|light}
→ open {output}
| Mistake | Fix |
|---------|-----|
| Rendering empty panels | No data = skip panel entirely |
| External JS/CSS | Everything inline in single file |
| Hardcoded personal data | All data from POS context gathering |
| Fixed grid breaking mobile | auto-fit, minmax(280px, 1fr) |
| 1000+ line HTML | Target 400-700 lines |
| Missing font fallback | System monospace in font stack always |
| Live fetch in HTML | Snapshot only — no XHR/fetch calls |
| Forgetting live clock | setInterval updating header every 30s |
testing
# YT Transcribe — YouTube → Whisper → Obsidian Транскрибирует YouTube-видео через mlx-whisper (Apple Silicon, Metal-native) с параллельными чанками. Fallback на openai-whisper если mlx недоступен. ## Какую боль закрывает - **Потерянный контент видео**: Посмотрел лекцию/подкаст — через неделю забыл 90%. Нет текстовой базы для поиска. - **Нет транскриптов для русского**: YouTube auto-captions для русского языка — мусор. Whisper даёт quality транскрипцию. - **Ручная обработка**: Переслушивать 2-
development
Интерактивный процесс написания текстов для вайб-маркетинга на основе Julian Shapiro framework. **Новые возможности (v2.0):** - Research & Gap Analysis (Perplexity → WebSearch fallback) - Scoring 0-5 вместо binary (Novelty + Resonance + Hook + Clarity) - AI-Slop Detection на всех этапах (10 типов patterns) - 3 варианта intro с self-scoring - Markdown export всех промежуточных результатов **Русские triggers:** "напиши пост по шапиро", "написать статью по фреймворку шапиро", "создай текст в стиле julian shapiro", "помоги написать контент по методу shapiro", "контент по julian shapiro фреймворку", "пост по julian shapiro", "напиши в стиле шапиро" **English triggers:** "write content using julian shapiro framework", "create post with shapiro method", "write article shapiro style", "help with julian shapiro writing" **Generic triggers:** "напиши статью", "помоги написать контент", "создай текст", "начать писать", "хочу написать пост", "нужна помощь с текстом", "write content", "write article", "создай контент", "придумай идею для статьи", or requests help with content creation process.
tools
# /tg-saved v2 — Telegram Saved Messages → Deep Analysis → Obsidian ## Назначение Скилл извлекает сообщения из Telegram "Избранное" (Saved Messages) за последние N дней, автоматически парсит контент всех ссылок в сообщениях (requests + BeautifulSoup, до 5000 символов на URL), затем для каждого сообщения запускает глубокий анализ через Claude CLI subprocess (модель Sonnet). Результат — подробная структурированная заметка в Obsidian `00-inbox/` с YAML frontmatter, секциями анализа, ссылками и ор
documentation
Делает LLM-выжимку из комментариев менеджеров об одном или нескольких подрядчиках. Используй этот скилл когда нужно понять что говорят менеджеры о конкретном подрядчике, или получить JSON с выжимкой для дальнейшей обработки.