Skip to content

Releases: juanmanueldaza/linkedin2md

v0.7.1

Choose a tag to compare

@juanmanueldaza juanmanueldaza released this 15 Jun 04:52

Fixes

  • Prefix matching in _get_csv — LinkedIn appends user IDs to content CSV filenames (e.g., Shares_26645013.csv). The parser layer now falls back to ^{key}_\\d+$ regex matching when exact lookup fails. Fixes 7 content parsers: posts, comments, reactions, reposts, votes, saved items, and member follows. ~950 records recovered.

  • LAN ads dual-key — supports both lan_ads_engagement (current LinkedIn export) and linkedin_audience_network_ad_engagement (older format). 155 ad records recovered.

  • Known-empty warning suppression — 4 new LinkedIn CSV types that are always empty no longer trigger WARNING noise.

Tests

  • 7 new tests for prefix matching and known-empty key suppression
  • 436 tests passing (ruff, pyright clean)

v0.7.0

Choose a tag to compare

@juanmanueldaza juanmanueldaza released this 15 Jun 04:30

What's New

  • 17 new parsers/formatters — complete CSV coverage for profile extensions (causes, interests, courses, honors/awards, test scores, patents, organizations, publications, volunteer experience), network (groups), and privacy/account data
  • SimpleListParser/SimpleListFormatter base classes for reducing boilerplate
  • Unconsumed-CSV warning — detects CSV files in your export that no parser handles

Bugs Fixed

  • LAN Ads parser now matches the actual filename ()
  • Profile metadata: maiden name, public profile URL, and address are now extracted
  • Education: Field of Study and Grade are now parsed and rendered
  • Job applications: Status and Withdraw Date are now captured

Tests

  • 121 new tests (430 total)
  • Full E2E test updated with additional CSV types

v0.6.0 — Security Hardening & Architecture Cleanup

Choose a tag to compare

@juanmanueldaza juanmanueldaza released this 15 Jun 01:43

v0.6.0 — Security Hardening & Architecture Cleanup

11 issues fixed. 309 tests. Zero open issues.

Security

  • URL sanitization wired into all formatters (was dead code)
  • Markdown table injection fixed across 25+ formatters
  • Per-CSV row limit (100k) for ZIP bomb protection
  • Content length truncation with warnings

Architecture

  • Monolithic parser.py/formatter.py removed (~2600 lines)
  • ProfileFormatter contract fixed, converter special-case eliminated
  • Registration decoupled from instantiation
  • 47 redundant empty-data guards removed via BaseFormatter template method

Community

  • 2 external PRs merged (#43, #44)
  • Script/Articles parsers wired in
  • Dead code and aliases cleaned up

Full changelog

v0.5.0 — 304 Tests, Complete Content Coverage

Choose a tag to compare

@juanmanueldaza juanmanueldaza released this 15 Jun 00:47

What's New

Testing

  • 304 tests (up from 189 in v0.4.0)
  • 86 new tests for 8 content parser/formatter pairs: Posts, Comments, Reactions, Reposts, Votes, SavedItems, Events, Media
  • 23 unit tests for PDF exporter covering ImportError, template structure, unicode, injection blocking, exceptions
  • 10 CLI integration tests for --pdf flag: section ordering, quiet mode, failure handling
  • All tests pass on Python 3.10–3.13

Milestones Complete

  • ✅ v0.4.0 — Infrastructure & Quality (6/6)
  • ✅ v0.5.0 — New Features & Tests (5/5)

Zero Open Issues

See CHANGELOG.md for full details.

v0.4.0 — Python 3.10+, JD Parser, 189 Tests

Choose a tag to compare

@juanmanueldaza juanmanueldaza released this 15 Jun 00:10

What's New

Python 3.10+ Support

Minimum Python version dropped from 3.13 to 3.10. Works on Ubuntu LTS, Debian stable, and older environments.

Job Description Parser

New JobDescriptionParser and JobDescriptionFormatter parse job posting CSV data from LinkedIn exports. Outputs structured Markdown with company, title, description, date, and status.

New Features

  • --quiet flag to suppress file listing in CLI output (#6)
  • --version flag (linkedin2md --version)
  • Script and Articles parser/formatter for content exports

Testing

  • 189 tests (up from 151), passing on Python 3.10–3.13
  • CI matrix on 4 Python versions
  • Dependabot, stale bot, welcome bot workflows
  • Pre-commit hooks (ruff, pyright)

Infrastructure

  • N3RV agent framework rename (nerv → n3rv)
  • MCP server configuration overhaul
  • GitHub MCP restored to auto-detecting wrapper

See CHANGELOG.md for full details.

v0.3.1 - PDF Resume Generator & NERV Framework

Choose a tag to compare

@juanmanueldaza juanmanueldaza released this 23 May 01:25

What's New in v0.3.1

📄 PDF Resume Generator

New --pdf flag converts your parsed LinkedIn profile into a beautiful, print-ready A4 PDF resume (profile.pdf). Uses WeasyPrint (optional dependency — zero-impact on core installs).

linkedin2md export.zip --pdf

🤖 NERV Agentic Development

The repository now ships with full NERV framework configuration for Spec-Driven Development. Use /sdd-new <change> in opencode to coordinate autonomous subagents for exploration, design, coding, and auditing.

🌐 GitHub Pages Landing Page

Custom domain with structured data, OG meta tags, and GA4 Consent Mode v2.

Bug Fixes

  • Fixed pyright type-checking errors for optional imports in pdf.py
  • Fixed ruff 88-char line length compliance in pdf.py
  • Full codebase formatting compliance with ruff standards

Full Changelog: v0.3.0...v0.3.1

v0.3.0

Choose a tag to compare

@juanmanueldaza juanmanueldaza released this 20 Jan 20:58

What's Changed

Added

  • Extensible multilingual system: BilingualTextMultilingualText supporting N languages
  • LanguageDetector.supported_languages property for detector introspection
  • Proper logging module integration (replaces print statements)
  • Fallback chain support in _get_text() for flexible language resolution

Changed

  • Version now single-sourced from pyproject.toml via importlib.metadata
  • CLI errors now use structured logging to stderr
  • MultilingualText uses **kwargs for language flexibility while maintaining backward compatibility

Fixed

  • Version mismatch between __init__.py and pyproject.toml

Full Changelog: v0.2.0...v0.3.0

Release 0.2.3

Choose a tag to compare

@juanmanueldaza juanmanueldaza released this 20 Jan 20:28

Fix CI workflow

Release 0.2.2

Choose a tag to compare

@juanmanueldaza juanmanueldaza released this 20 Jan 20:10

Update license in README

Release 0.2.1

Choose a tag to compare

@juanmanueldaza juanmanueldaza released this 20 Jan 20:02

Relicensed to GPL-2.0