pos-dashboard-gen
Generate a personal HTML dashboard from your POS context. Auto-detects MCP, gathers data, builds terminal-aesthetic single-file page.
Best use case
pos-dashboard-gen is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Generate a personal HTML dashboard from your POS context. Auto-detects MCP, gathers data, builds terminal-aesthetic single-file page.
Teams using pos-dashboard-gen should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/pos-dashboard-gen/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How pos-dashboard-gen Compares
| Feature / Agent | pos-dashboard-gen | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Generate a personal HTML dashboard from your POS context. Auto-detects MCP, gathers data, builds terminal-aesthetic single-file page.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# POS Dashboard Generator
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.
## Step 0: Detect Integrations
Same pattern as `/pos-morning` — read MCP config first:
```bash
cat ~/.claude/mcp.json 2>/dev/null
```
Also check local tools:
```bash
# 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.
## Step 1: Gather Data
For each panel, fetch data. **Skip panels without data** — empty panel is worse than no panel.
### Focus Panel
Sources (try in order):
1. Today's focus from recent `/pos-morning` output or daily-focus file
2. Memory files: `find ~/.claude/projects -name "MEMORY.md" -type f 2>/dev/null`
3. CLAUDE.md project description
4. Fallback: "run /pos-morning to set today's focus"
### Calendar Panel
**Degradation chain:**
1. Krisp MCP: `ToolSearch: "+krisp meetings"` → `mcp__krisp__list_upcoming_meetings`
2. gcal script: `"$HOME/.claude/scripts/gcal-smart.sh" today`
3. Skip panel
Format: `[{time: "10:00", title: "Standup", duration: "30m"}]`
### Tasks Panel
**Degradation chain:**
1. Linear MCP: `ToolSearch: "+linear list_issues"` → `mcp__linear__list_issues(assignee: "me", status: "started")`
2. Linear cache: read `linear-tracking.md`
3. Local TODO: `find . -maxdepth 2 -name "TODO.md" 2>/dev/null`
4. Skip panel
Format: `[{id: "AIM-123", title: "Task", priority: "high", status: "IP"}]`
### Sessions Panel
```bash
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).
### Skills Panel
```bash
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.
### Documents Panel
```bash
find . -name "*.md" -mmin -720 \
-not -path "./.obsidian/*" \
-not -path "./.trash/*" \
-not -path "./node_modules/*" \
2>/dev/null | head -8
```
### Metrics Panel
Computed from gathered data:
- `sessions`: today's session count
- `tasks_ip`: in-progress tasks
- `tasks_todo`: todo tasks
- `skills`: installed skill count
- `files_today`: recently modified files
- `mcp_servers`: configured server count
## Step 2: Build HTML
Generate a **single self-contained HTML file**.
### CSS Design System
```css
: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;
}
```
### Layout
```
┌─ 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))`
### Terminal Strip
Scrolling CSS marquee with real data:
```html
<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`
### Panel Template
```html
<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.72rem`
- `panel-body`: 12px padding, `font-size: 0.8rem`
- `panel-badge`: pill, accent background
### Data Injection
Embed as JS constants:
```javascript
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}
};
```
### Panel Rendering
**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.
### Must-Have Features
- **Live clock**: `setInterval` every 30s in header
- **Terminal strip**: CSS marquee with real data
- **Monospace**: JetBrains Mono from Google Fonts (with system fallback)
- **Skill chips**: click-to-copy skill name
- **Priority dots**: colored circles for tasks
- **No external JS**: everything inline
- **Google Fonts fallback**: works without CDN
### Size Target
400-700 lines. Fewer panels → shorter file.
## Step 3: Write and Open
```bash
OUTPUT="${output:-/tmp/pos-dashboard.html}"
```
Write with Write tool, then:
```bash
open "$OUTPUT"
```
Show:
```
dashboard generated
path: {output}
panels: {included list}
data: {summary of sources}
theme: {dark|light}
→ open {output}
```
## Principles
- **Snapshot**: static at generation time — run again to refresh
- **Zero runtime deps**: Google Fonts optional (degrades to system mono)
- **Terminal aesthetic**: dark bg, green accent, monospace, box-drawing
- **Portable**: share as file, open on any machine with browser
- **Data-driven panels**: no data = no panel (skip entirely)
- **Single file**: CSS, JS, data, fonts fallback — all inline
## Common Mistakes
| 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 |Related Skills
writing-content
Интерактивный процесс написания текстов для вайб-маркетинга на основе 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.
YT Transcribe — YouTube → Whisper → Obsidian
Транскрибирует YouTube-видео через mlx-whisper (Apple Silicon, Metal-native) с параллельными чанками.
/tg-saved v2 — Telegram Saved Messages → Deep Analysis → Obsidian
## Назначение
summarize-comments
Делает LLM-выжимку из комментариев менеджеров об одном или нескольких подрядчиках. Используй этот скилл когда нужно понять что говорят менеджеры о конкретном подрядчике, или получить JSON с выжимкой для дальнейшей обработки.
skill-security
This skill activates when the user mentions "security audit", "skill audit", "проверка безопасности скилла", "аудит скилла", "skill-security", "проверить скилл", "пересобрать скилл", "rebuild skill", "security check", "dual memory audit", "credential isolation check". Also activates on /skill-security command. Use this skill when the user wants to audit, validate, or rebuild any Claude Code skill for security compliance.
session-status
Statusline shown in Claude Code UI status bar via settings.json. No action needed in responses.
session-save
Compress and save current session context for handoff to next session. Use when: (1) context pressure >50%, (2) user says "сохрани сессию", "session save", "checkpoint", (3) before ending a long productive session, (4) switching to a different task mid-session. Supports named sessions: /session-save vpn-fix
continue-session
Restore context from a named or latest session checkpoint. Use when: (1) user says "продолжи", "continue", "что было в прошлой сессии", (2) starting work after a crash or context overflow, (3) "resume", "восстанови контекст", "где я остановился". Supports named sessions: /continue vpn-fix
compress
Info-Compressor: compress text/context by 60-70% without losing meaning. Use when: (1) context pressure >50%, (2) user says "сжать", "compress", "compact", (3) need to fit more context into remaining window, (4) preparing handoff blob for next session.
seo-strategist
Strategic SEO planning and analysis toolkit for site-wide optimization, keyword research, technical SEO audits, and competitive positioning. Complements content-creator's on-page SEO with strategic planning, topic cluster architecture, and SEO roadmap generation. Use for keyword strategy, technical SEO audits, SERP analysis, site architecture planning, or when user mentions SEO strategy, keyword research, technical SEO, or search rankings.
roi-razvitie-draft
Generates a draft meeting document for the weekly "Roi Развитие" (Wednesday, product Roi Navigator). Use when the user asks for a draft for the meeting, for Wednesday's doc, for "Roi Развитие", or for the weekly team meeting agenda.
project-knowledge-base
Collects, structures and maintains a Project Knowledge Base (PKB.md) in Obsidian for a marketing agency. Aggregates data from Google Drive, Gmail, Telegram (group chat and DMs via MTProto), moo.team tasks/comments, and local Obsidian meeting transcripts. Uses async parallel collection and a two-stage LLM pipeline for init. Use when the user wants to initialize, update or enrich a project's knowledge base, mentions PKB, project knowledge base, синхронизация проекта, база знаний проекта, init_project_knowledge, update_project_knowledge, or ad_hoc_add_context.