add-portal
CommandYou are helping the user build a job-portal search skill for a job board in their market. The repo ships worked examples of the…
Generate a self-contained HTML dashboard from `job_search_tracker.csv` and the application archives under `documents/applications/`. The output is a single `.html` file — no server, no dependencies — that can be opened directly in a browser.
$ npx -y skills add ai-job-search-dev/ai-job-search --agent claude-code
Generate a self-contained HTML dashboard from `job_search_tracker.csv` and the application archives under `documents/applications/`. The output is a single `.html` file — no server, no dependencies — that can be opened directly in a browser.
Create `reports/` if it does not exist.
---
Read in parallel:
1. **`job_search_tracker.csv`** — the primary source. Parse every row into a record with fields: `date`, `company`, `sector`, `role`, `role_type`, `channel`, `status`, `contact_person`, `fit_rating`, `notes`, `cv_file`, `cover_letter_file`, `source`, `deadline`
Rows written before `deadline` existed have thirteen fields and no fourteenth value. Treat the missing field as empty - never drop the row, and never infer a deadline from its `date`.
2. **`documents/applications/*/outcome.md`** — for each resolved application, read the outcome file to get the exact interview stages reached (the checkboxes) and any notes. Merge this into the matching tracker row by company+role fuzzy match (lowercase, ignore punctuation). If an archive exists for a row but there is no match, attach it as extra context anyway.
Status normalisation — map tracker values to six canonical buckets before computing stats:
The bucket map tolerates the legacy space spellings on read so nothing written before the canonical forms were locked drops out of the stats; the **Tracker status vocabulary** in `/outcome` is the authoritative set.
---
From the normalised data compute:
**Drafted rows are excluded from every statistic below** — they were never submitted. Report the Drafted count on its own, and include it only in the status breakdown.
---
Write a single self-contained HTML file. All CSS is inline in a `<style>` block. All JS is inline in a `<script>` block. Draw the doughnut and bar charts as hand-generated inline SVG — no Chart.js, no CDN, no external dependencies of any kind. The report must render fully offline on every open.
**Escaping (required):** HTML-escape every CSV/outcome-file value (`&` `<` `>` `"` `'`) before interpolating it into the page — this includes table cells, `title` attributes on truncated notes, and any text placed inside SVG (`<text>` labels, chart tooltips). Notes and company names copied from job postings routinely contain these characters; unescaped, they break the layout or inject markup into a page the user opens routinely.
┌─────────────────────────────────────────────┐ │ 🔍 Job Search Dashboard Generated: DATE │ ├──────┬──────┬──────┬──────┬──────┬───────────┤ │Sent │Draft │Active│Inter-│Offer │Rejected/ │ ← stat cards │ N │ N │ N │view N│ N │Closed N │ ├──────┴──────┴──────┴──────┴──────┴───────────┤ │ Status breakdown (doughnut) │ By sector (bar)│ ← charts row ├───────────────────────────────────────────── ┤ │ By channel (bar) │ Funnel (horizontal bar) │ ← charts row ├────────────────────────────────────────────── ┤ │ Applications [Status ▾] [Sector ▾] [🔍 ...]│ ← table with filters │ date │ company │ sector │ role │ status │ ... │ │ ... │ └───────────────────────────────────────────────┘
The job search that runs on your machine. AI job application framework built on Claude Code: evaluate postings, tailor CVs, write cover letters, prep interviews. Fork it and own it.
You are helping the user build a job-portal search skill for a job board in their market. The repo ships worked examples of the…
You are helping the user register their own CV or cover letter template with the AI Job Search framework — LaTeX, Typst, or any…
You are orchestrating a two-agent job application workflow. The job posting is provided below as `$ARGUMENTS` (either a URL or…
You are enriching the candidate profile by discovering competencies hidden in documents and public online presence. This command…
You are scanning the user's Gmail for status signals on tracked job applications (interview invites, assessment links, offers,…
You are preparing the user for a real, scheduled interview on one of their applications. The frameworks for this already exist -…
Install pitchcraft skill for structured persuasion and executive reporting
Generate PDF documents (resume, cover letter, or both) with automatic validation and theme selection | argument-hint:…
Collect job-posting URLs into ~/.dear-hiring-manager/urls.txt by running your Apify job scraper, for /batch.