Best for
- User is actively developing the Overdeck dashboard (frontend or server)
- User wants HMR for frontend changes
- User says "start overdeck in dev mode", "pan dev", or "bring up dev"
eltmon/overdeck/sync-sources/skills/pan-dev/SKILL.md
Start Overdeck in development mode with Vite HMR for the frontend and the Node 22 server
Decision brief
Start the dashboard server (Node 22, bundled) and the Vite frontend dev server (HMR on port 3010) for active dashboard development. Traefik, skills sync, and TLDR are started the same as pan up.
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/eltmon/overdeck --skill "sync-sources/skills/pan-dev"Inspect the Agent Skill "pan-dev" from https://github.com/eltmon/overdeck/blob/b6d7106f7044de1a243a38b3f2d43b5bbe9b0aaf/sync-sources/skills/pan-dev/SKILL.md at commit b6d7106f7044de1a243a38b3f2d43b5bbe9b0aaf. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
Review the “Step 1: Kill any existing dashboard processes” section in the pinned source before continuing.
This is read by generateOverdeckTraefikConfig() (src/lib/traefik.ts) so the Traefik dynamic config routes the frontend to Vite (port 3010) instead of the bundled Node server (3011). Without this, https://overdeck.localhost serves the production-mode static build and you do not g…
If ports are still occupied, kill the specific PIDs shown.
Review the “Step 3: Run skills sync (same as pan up)” section in the pinned source before continuing.
Regenerate the Traefik dynamic config in dev mode so the frontend route points to Vite (3010) instead of the bundled server (3011): bash OVERDECKDEV=1 node -e " import('/Projects/overdeck/dist/cli/index.js').catch(()={}); import('/Projects/overdeck/src/lib/traefik.ts').catch(()=…
Permission review
The documentation includes network, browsing, or remote request actions.
Browser → https://overdeck.localhost (Traefik)The documentation asks the agent to run terminal commands or scripts.
Node 22 server (port 3011) ── Effect API, WebSocket, terminal PTYThe documentation includes network, browsing, or remote request actions.
if curl -s http://localhost:3011/api/health | grep -q ok; thenEvidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 85/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 14 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Start the dashboard server (Node 22, bundled) and the Vite frontend dev server (HMR on port 3010) for active dashboard development. Traefik, skills sync, and TLDR are started the same as pan up.
~/.config/nvm/versions/node/v22.22.0/bin/node (or in PATH)npm run build has been run at least once (server needs dist/dashboard/server.js)node_modules installed in both root and src/dashboard/frontend/Browser → https://overdeck.localhost (Traefik)
↓
Vite dev server (port 3010) ── HMR, serves React with hot reload
↓ proxies /api/* and /ws/*
Node 22 server (port 3011) ── Effect API, WebSocket, terminal PTY
Why not Bun for the server? Two hard blockers:
node-pty native addon exits immediately under Bun (breaks /ws/terminal)So the server always runs the pre-built dist/dashboard/server.js under Node 22. After server code changes, rebuild with npm run build:dashboard:server and restart the server process.
The frontend runs via Vite dev server with HMR — changes are reflected instantly without rebuild.
# Kill existing server and frontend processes
pkill -f "node.*dist/dashboard/server\.js" 2>/dev/null
pkill -f "vite.*3010" 2>/dev/null
# Brief pause for port release
sleep 1
export OVERDECK_DEV=1
This is read by generateOverdeckTraefikConfig() (src/lib/traefik.ts) so the
Traefik dynamic config routes the frontend to Vite (port 3010) instead of the
bundled Node server (3011). Without this, https://overdeck.localhost serves the
production-mode static build and you do not get HMR. Export it before any
subsequent step that may regenerate the Traefik config (notably any pan up or
pan install invocation in this shell).
lsof -i :3010 -i :3011 2>/dev/null
If ports are still occupied, kill the specific PIDs shown.
cd ~/Projects/overdeck && pan sync 2>&1 | tail -3
Check config first:
grep -A2 '\[traefik\]' ~/.overdeck/config.toml 2>/dev/null
If Traefik is enabled:
cd ~/.overdeck/traefik && docker compose up -d 2>&1
Regenerate the Traefik dynamic config in dev mode so the frontend route points to Vite (3010) instead of the bundled server (3011):
OVERDECK_DEV=1 node -e "
import('~/Projects/overdeck/dist/cli/index.js').catch(()=>{});
import('~/Projects/overdeck/src/lib/traefik.ts').catch(()=>{});
" 2>/dev/null
# Or, more reliably via tsx:
cd ~/Projects/overdeck && \
OVERDECK_DEV=1 npx tsx -e "import('./src/lib/traefik.ts').then(m => m.generateOverdeckTraefikConfig())" 2>&1
Verify the rendered file has the frontend on port 3010:
grep 'host.docker.internal' ~/.overdeck/traefik/dynamic/overdeck.yml
# Expected: 3010 (frontend) and 3011 (api). If both show 3011, the regen above
# did not run with OVERDECK_DEV=1; check the env var.
If server code has changed since last build:
cd ~/Projects/overdeck && npm run build:dashboard:server 2>&1
If unsure, always rebuild — it takes ~2 seconds.
cd ~/Projects/overdeck && \
nohup node dist/dashboard/server.js \
> /tmp/overdeck-server.log 2>&1 &
echo "Server PID: $!"
for i in $(seq 1 15); do
if curl -s http://localhost:3011/api/health | grep -q ok; then
echo "Server ready"
break
fi
sleep 1
done
cd ~/Projects/overdeck/src/dashboard/frontend && \
nohup npx vite --host 0.0.0.0 --port 3010 \
> /tmp/overdeck-frontend.log 2>&1 &
echo "Frontend PID: $!"
for i in $(seq 1 10); do
if curl -s -o /dev/null -w "%{http_code}" http://localhost:3010 | grep -q 200; then
echo "Frontend ready"
break
fi
sleep 1
done
cd ~/Projects/overdeck
if [ -d .venv ]; then
pan tldr start 2>/dev/null || echo "TLDR unavailable (non-fatal)"
fi
Print:
http://localhost:3011 (API)http://localhost:3010 (Vite HMR)https://overdeck.localhost (if enabled, proxies to Vite on 3010)/tmp/overdeck-server.log/tmp/overdeck-frontend.logThe server runs pre-built JS, so after editing src/dashboard/server/**:
cd ~/Projects/overdeck && npm run build:dashboard:server
pkill -f "node.*dist/dashboard/server\.js"
nohup node dist/dashboard/server.js \
> /tmp/overdeck-server.log 2>&1 &
Nothing needed — Vite HMR picks up changes automatically.
Server isn't running or crashed. Check /tmp/overdeck-server.log.
Server is running under wrong runtime. Verify: ps aux | grep server.js should show Node 22, not Bun.
lsof -i :3010
kill <PID>
Vite HMR WebSocket needs WSS through Traefik. The vite.config.ts handles this when TRAEFIK_ENABLED=true. Start the Vite server with:
TRAEFIK_ENABLED=true npx vite --host 0.0.0.0 --port 3010
pkill -f "node.*dist/dashboard/server\.js"
pkill -f "vite.*3010"
Or use /pan-down which handles all cleanup.
Alternatives
coreyhaines31/marketingskills
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," "how long should I run this test," "growth experiments," "experiment velocity," "experiment backlog," "ICE score," "experimentation program
alirezarezvani/claude-skills
App Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store. Use when the user asks about ASO, app store rankings, app metadata, app titles and descriptions, app store listings, app visibility, or mobile app marketing on iOS or Android. Supports keyword research and scoring, competitor keyword analysis, metadata optimization, A/B test planning, launch checklist
JasonColapietro/suede-creator-skills
Suede-owned experimentation discipline for hypotheses, sample sizing, test duration, significance, and repeatable experiment programs. Use when comparing variants, deciding whether a result is reliable, or building an experiment backlog and cadence. NOT FOR: analytics instrumentation (use suede-analytics), post-click conversion diagnosis (use suede-site-alchemy), or writing the variant copy itself (use suede-copy).
narrative-io/narrative-skills-marketplace
Translate a fuzzy analytical question into a rigorous investigation plan. Interrogates the ask, grounds the plan in the available data dictionary, applies analytical best practices, and produces a structured brief of query specifications for a downstream query-writing skill. Plans, does not write SQL. Use when: "why did X drop", "is there a relationship between A and B", "who are our highest-value customers", "what's driving the change in Y", "investigate this trend", "design an analysis for", "