.claude/skills/fusionaly-qa/SKILL.md
Use after code changes, before releases, or when testing features - runs the right level of QA based on what changed
npx skillsauth add karloscodes/fusionaly-oss fusionaly-qaInstall 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.
| Change | Test level | Command |
|--------|-----------|---------|
| Bug fix, refactor, small feature | Unit | make test |
| Feature, UI, big change | Unit + E2E | make test then make test-e2e |
| Visual / UI verification | Agent-browser | make dev + agent-browser |
| Install script, matcha, infra | VM install | multipass VM |
| Release | All of the above | See release checklist |
make test
Run after every change. No excuses.
# CRITICAL: Kill any running dev server first — E2E uses its own database
lsof -ti :3000 | xargs kill -9 2>/dev/null
make test-e2e
Playwright tests that run onboarding, create websites, check dashboards, ingest events. Run after features or big changes.
For verifying UI rendering, checking that data displays correctly, or testing flows that E2E doesn't cover.
npm i -g agent-browser
agent-browser install
make dev # MUST use make dev (Go + Vite together)
[email protected]passwordmake db-seedagent-browser open "http://localhost:3000/login"
agent-browser snapshot -i
agent-browser fill @e1 "[email protected]"
agent-browser fill @e3 "password"
agent-browser click @e4
agent-browser snapshot -i # list interactive elements with refs
agent-browser click @e11 # click element by ref
agent-browser scroll down 1000 # scroll to find sections
agent-browser screenshot # capture page as PNG
agent-browser get url # check current URL
# The /_demo page includes the tracking script — fires real pageviews
agent-browser open "http://localhost:3000/_demo"
# Wait for event processing (~10s), then check dashboard
| Page | How to reach | What to check |
|------|-------------|---------------|
| Admin home | /admin | Website list loads |
| Dashboard | Click arrow (→) on a website | Charts, stats, time range |
| Browsers tab | Scroll to Device Analytics, click "Browsers" | Browser names (Brave, Edge, etc.) |
| Settings | Click "Settings" in nav | Forms save, flash messages |
| Events | Click "Events" tab on dashboard | Event list, sessions view |
make dev — make watch-go alone won't render Inertia pagesopen after login (breaks Inertia state)/_demo for real events — sends actual Sec-CH-UA headers from the browserstorage/fusionaly-development.dbOnly needed when changing: install script, matcha, Docker setup, or release infrastructure.
multipass delete fusionaly-test --purge 2>/dev/null || true
multipass launch 24.04 --name fusionaly-test --cpus 2 --memory 2G --disk 10G
multipass exec fusionaly-test -- bash -c '
sudo apt-get update -qq && sudo apt-get install -y -qq expect
cat > /tmp/run_install.exp << '\''EXPECTSCRIPT'\''
#!/usr/bin/expect -f
set timeout 300
spawn sudo bash -c "curl -fsSL https://fusionaly.com/install | bash"
expect "Enter your domain name"
send "test.local\r"
expect "Proceed with this configuration"
send "Y\r"
expect eof
EXPECTSCRIPT
expect /tmp/run_install.exp
'
multipass exec fusionaly-test -- bash -c '
echo "=== Containers ===" && sudo docker ps
echo "=== Version ===" && fusionaly version
echo "=== Health ===" && curl -s http://172.18.0.2:8080/_health
'
VM_IP=$(multipass info fusionaly-test | grep IPv4 | awk '{print $2}')
ssh -L 8080:172.18.0.2:8080 ubuntu@$VM_IP
# Open http://localhost:8080/setup
multipass delete fusionaly-test --purge
Before tagging a release:
make test passesmake test-e2e passes (kill dev server first!)| Issue | Cause | Fix |
|-------|-------|-----|
| E2E fails "Setup already complete" | Dev server running (wrong DB) | lsof -ti :3000 \| xargs kill -9 |
| agent-browser login doesn't work | Vite not running | Use make dev, not make watch-go |
| Dashboard shows JSON error | Navigated directly after forced POST | Start fresh browser, click through UI |
| /_demo events not appearing | Processing job hasn't run yet | Wait ~10 seconds, check ingested_events table |
| VM can't reach app | Docker internal network | Use SSH tunnel to 172.18.0.2:8080 |
development
Use when user asks about website analytics, traffic, visitors, page views, referrers, or mentions "fusionaly". Queries Fusionaly analytics via SQL API.
content-media
Use when styling Fusionaly UI components, pages, or charts - applies the Fusionaly design system with black/white palette and brand accents
testing
Use ONLY when explicitly invoked. Deploys Fusionaly to a new Hetzner server or an existing server, with optional hardening and Cloudflare DNS.
tools
Use when working on Fusionaly OSS or Pro - enforces clean separation between repos, prevents Pro features in OSS, forbids modifying OSS from Pro