From personal-finance
Use when the user wants to view the finance dashboard, see all invoices, check payment status overview, browse transactions, open the data viewer, or launch datasette.
npx claudepluginhub karimstekelenburg/k3m-marketplace --plugin personal-financeThis skill is limited to using the following tools:
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Analyzes BMad project state from catalog CSV, configs, artifacts, and query to recommend next skills or answer questions. Useful for help requests, 'what next', or starting BMad.
Parse arguments from $ARGUMENTS. Determine the data directory: use --data-dir if provided, otherwise default to ~/Documents/finance-data/.
Run the export/viewer script:
uv run ${CLAUDE_PLUGIN_ROOT}/scripts/export_db.py [--summary-only] [--data-dir PATH]
Without --summary-only (default behaviour):
The script launches a datasette instance. After the command starts, tell the user:
Datasette is running at http://localhost:8001 — open this URL in your browser.
The datasette UI exposes all database tables, fully searchable and filterable:
invoices — all parsed invoice records with status and confidencetransactions — imported bank transactionsmatches — links between invoices and transactions with confidence levelsemails — scanned inbox messagesqr_codes — generated EPC QR code recordsWith --summary-only:
The script prints a text summary to stdout instead of launching datasette. Display the full output from the script verbatim, preserving any table formatting.
Filtering tip for unpaid invoices: Tell the user they can find all unpaid invoices in datasette using this SQL query in the datasette query editor:
SELECT * FROM invoices
WHERE id NOT IN (
SELECT invoice_id FROM matches WHERE confidence != 'review'
)
Direct them to: datasette → top-right menu → "Execute SQL" → paste the query.
If the script exits with a non-zero code or datasette fails to bind the port (e.g. already in use), show the raw error. If the port is in use, suggest the user stop any existing datasette process or specify an alternate port if the script supports it.