diff --git a/README.md b/README.md index 7b68b19..abbc106 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@

JobSnap

Save BDJobs circulars before they disappear.

- Version + Version Node.js JavaScript Chrome @@ -24,9 +24,10 @@ `JobSnap` fixes this: -- ๐Ÿ’ป **CLI:** `jobsnap save ` -- ๐ŸŒ **Extension:** One-click from your browser +- ๐Ÿ’ป **CLI:** `jobsnap save `, `jobsnap list`, `jobsnap export` +- ๐ŸŒ **Extension:** One-click download (Markdown or PDF) + ![JobSnap demo](assets/jobsnap-demo.gif) ## What JobSnap Does @@ -136,9 +137,11 @@ jobsnap save "https://bdjobs.com/jobs/details/1436687" --skip | ----------------------- | ------------------------------------------------------------------- | | ๐Ÿ”’ **Offline-First** | Your data stays on your disk. No cloud dependencies. | | ๐Ÿค– **AI-Ready** | Clean Markdown works seamlessly with ChatGPT, Claude, etc. | +| ๐Ÿ“‹ **List & Filter** | View, sort, and filter saved jobs by deadline, company, or tags. | +| ๐Ÿ“„ **PDF Export** | Export jobs to professional PDFs or HTML with one command. | | ๐Ÿ”„ **Future-Proof** | Re-parse old snapshots if BDJobs changes their format. | | โšก **Dual-Path Parser** | Extracts embedded JSON + text fallback for resilience. | -| ๐Ÿ“‹ **Stable Contract** | v1.0 guarantees consistent output format across updates. | +| ๐ŸŽฏ **Smart Dates** | Unambiguous date format (Jan 08, 2026) prevents confusion. | | ๐ŸŽจ **Flexible Output** | Customize filenames with templates: `{title}_{company}_{job_id}.md` | | ๐Ÿงช **Tested** | Unit tests, schema validation, fixture regression suite. | | ๐ŸŒ **Two Interfaces** | CLI for power users, Chrome extension for one-click saves. | @@ -166,11 +169,13 @@ jobsnap save "https://bdjobs.com/jobs/details/1436687" --skip ## CLI Commands -| Command | Description | -| ----------------------- | --------------------------------- | -| `jobsnap save ` | Fetch and save a BDJobs circular | -| `jobsnap reparse

` | Re-parse from existing `raw.html` | -| `jobsnap --help` | Show usage information | +| Command | Description | +| -------------------------- | ---------------------------------------------- | +| `jobsnap save ` | Fetch and save a BDJobs circular | +| `jobsnap list` | List all saved jobs with filtering/sorting | +| `jobsnap export ` | Export job to PDF or HTML | +| `jobsnap reparse ` | Re-parse from existing `raw.html` | +| `jobsnap --help` | Show usage information | ### Common Options @@ -342,25 +347,32 @@ npm test ## Roadmap -### v1.0 (Current) โœ… +### v1.0 โœ… - Stable output contract - Dual-path parser with fallback - CLI + Chrome extension - Regression test suite -### v2.0 (Finger crossed!) +### v2.0 (Current) โœ… + +- ๐Ÿ“‹ **List command** - View, sort, and filter saved jobs +- ๐Ÿ“„ **PDF/HTML export** - Export jobs to PDF or HTML with professional styling +- ๐ŸŽจ **Enhanced extension** - PDF download with native Chrome support +- ๐Ÿ“… **Date standardization** - Unambiguous date format (MMM DD, YYYY) + +### v3.0 (Planned) - ๐Ÿค– **LLM-powered JD summaries** - Extract must-haves vs nice-to-haves - ๐Ÿ“Š **CV gap analysis** - Compare resume against saved JDs - ๐Ÿ“ **Interview prep** - Auto-generate topic checklists -- ๐Ÿ” **Local search** - Grep-like search with tagging +- ๐Ÿท๏ธ **Tagging system** - Tag and categorize saved jobs -### v3.0+ (Future) +### v4.0+ (Future) - ๐ŸŒ **Multi-platform** - LinkedIn, Glassdoor, etc. -- ๐Ÿ“„ **PDF export** - Customizable templates - ๐Ÿ‡ง๐Ÿ‡ฉ **Bangla support** - Local job board compatibility +- ๐Ÿ” **Advanced search** - Full-text search across all saved jobs --- diff --git a/assets/jobsnap-demo-v2.svg b/assets/jobsnap-demo-v2.svg new file mode 100644 index 0000000..24e688f --- /dev/null +++ b/assets/jobsnap-demo-v2.svg @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + bdjobs.com/jobs/details/1234567 + + + + + J + + + + + + + + + โ‡’ + + + JobSnap + Save a BDJobs JD in one click. + + + + Download format + + + + + + + + Markdown + + + + + + + PDF + + + + + Download from current tab + + + OR + + + Paste BDJobs link + + + + https://bdjobs.com/jobs/details/1234567 + + + Filename parts + + + + + + + + Title + + + + + + + + Company + + + + + + + + Job ID + + + + Fixed order: title -> company -> job id + + + + Download from URL + + + + 2. Choose format & download + diff --git a/assets/jobsnap-demo.gif b/assets/jobsnap-demo.gif index 1c0bfbb..b19ae0d 100644 Binary files a/assets/jobsnap-demo.gif and b/assets/jobsnap-demo.gif differ diff --git a/assets/jobsnap-demo.png b/assets/jobsnap-demo.png index de0545f..53c0ad3 100644 Binary files a/assets/jobsnap-demo.png and b/assets/jobsnap-demo.png differ diff --git a/core/version.js b/core/version.js index 4ef7ea7..9e12b9f 100644 --- a/core/version.js +++ b/core/version.js @@ -1 +1 @@ -export const PARSER_VERSION = '1.0.0'; +export const PARSER_VERSION = '2.0.0'; diff --git a/docs/cli-reference.md b/docs/cli-reference.md index cd21da7..f04e803 100644 --- a/docs/cli-reference.md +++ b/docs/cli-reference.md @@ -95,6 +95,158 @@ jobs/index.jsonl --- +### `list` + +List all saved jobs with sorting, filtering, and grouping options. + +**Usage:** + +```bash +jobsnap list [options] +``` + +**Options:** + +- `--sort ` - Sort by: `deadline` (default), `company`, `title`, `saved` +- `--active` - Show only active jobs (deadline not passed) +- `--expired` - Show only expired jobs (deadline passed) +- `--tag ` - Filter by tag (e.g., `--tag backend`) +- `--group-by ` - Group by: `company` or `deadline` + +**Examples:** + +List all jobs sorted by deadline (default): + +```bash +jobsnap list +``` + +Show only active jobs: + +```bash +jobsnap list --active +``` + +Sort by company alphabetically: + +```bash +jobsnap list --sort company +``` + +Filter by tag: + +```bash +jobsnap list --tag remote +``` + +Group by company: + +```bash +jobsnap list --group-by company +``` + +Show expired jobs sorted by company: + +```bash +jobsnap list --expired --sort company +``` + +**What it does:** + +1. Reads `jobs/index.jsonl` +2. Parses and validates all job entries +3. Applies filters (active/expired/tag) +4. Sorts by specified field +5. Groups if requested +6. Displays formatted output with color-coded deadlines + +**Output format:** + +``` +โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +โ”‚ Job ID โ”‚ Title โ”‚ Company โ”‚ Deadline โ”‚ +โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค +โ”‚ 1445561 โ”‚ Graphic Designer โ”‚ Eden Study โ”‚ 23d left โ”‚ +โ”‚ 1436685 โ”‚ Senior Engineer โ”‚ ABC Tech โ”‚ 15d left โ”‚ +โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ +``` + +**Deadline color coding:** + +- ๐Ÿ”ด Red: Expired +- ๐ŸŸก Yellow: 3 days or less +- ๐ŸŸข Green: 4-7 days +- โšช Gray: More than 7 days + +--- + +### `export` + +Export a saved job to PDF or HTML format. + +**Usage:** + +```bash +jobsnap export [options] +``` + +**Arguments:** + +- `` - Path to job directory (e.g., `jobs/1436685`) + +**Options:** + +- `--format ` - Export format: `pdf` (default) or `html` + +**Examples:** + +Export to PDF (default): + +```bash +jobsnap export jobs/1436685 +``` + +Export to HTML: + +```bash +jobsnap export jobs/1436685 --format html +``` + +**What it does:** + +1. Reads `job.json` and `job.md` from the specified directory +2. Generates styled HTML with professional layout +3. For PDF: Uses Puppeteer (headless Chrome) to render vector PDF +4. For HTML: Saves standalone HTML file +5. Updates `index.jsonl` with `has_pdf: true` metadata + +**Output:** + +``` +jobs/1436685/ + raw.html + job.json + job.md + job.pdf โ† New PDF file (~200KB) + # or + job.html โ† New HTML file +``` + +**PDF Features:** + +- Vector-based (crisp quality, small file size ~200KB) +- Professional styling with metadata header +- Consistent branding and layout +- Print-optimized margins and page breaks +- Unambiguous date format (Jan 08, 2026) + +**Requirements:** + +- Puppeteer is automatically installed with JobSnap +- No additional setup needed + +--- + ### `reparse` Re-parse an existing `raw.html` snapshot without re-downloading. diff --git a/extension/core/version.js b/extension/core/version.js index 4ef7ea7..9e12b9f 100644 --- a/extension/core/version.js +++ b/extension/core/version.js @@ -1 +1 @@ -export const PARSER_VERSION = '1.0.0'; +export const PARSER_VERSION = '2.0.0'; diff --git a/extension/manifest.json b/extension/manifest.json index af85454..4c9a71a 100644 --- a/extension/manifest.json +++ b/extension/manifest.json @@ -1,8 +1,8 @@ { "manifest_version": 3, "name": "JobSnap", - "version": "1.0.0", - "description": "Download BDJobs job circulars as Markdown", + "version": "2.0.0", + "description": "Download BDJobs job circulars as Markdown or PDF", "permissions": ["activeTab", "downloads", "scripting", "storage", "tabs"], "host_permissions": ["https://bdjobs.com/*", "https://*.bdjobs.com/*"], "background": { diff --git a/package.json b/package.json index 7f52a44..2e756e6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "jobsnap", - "version": "1.0.0", + "version": "2.0.0", "description": "Save BDJobs job circulars as clean, LLM-friendly Markdown", "type": "module", "private": false,