Curriculum Vitae Manager

Role: Solo Developer Timeline: Ongoing (2024–Present) Platform: Windows / macOS / Linux

An offline-only desktop application that automates the management of Research Experience sections in CV documents. It parses Word files, injects new studies from Excel master lists, redacts protocols for blinded submissions, and maintains a local SQLite database — all without ever connecting to the internet.

The Problem

In clinical research organizations, staff CVs must list every study they've worked on — often hundreds of entries organized by clinical trial phase and therapeutic area. Keeping these documents current is a tedious, error-prone process:

Staff could spend hours per CV update, and mistakes in redacted documents could compromise clinical trial integrity.

Solution Overview

Mode A: Update & Inject

  • Parses the Research Experience section from any .docx CV
  • Compares against a master study list (.xlsx or SQLite database)
  • Injects only new studies above a calculated benchmark year
  • Prevents duplicates using both exact and fuzzy matching
  • Preserves all existing formatting and document structure

Mode B: Redact Protocols

  • Identifies protocol-bearing studies using text analysis (not font color)
  • Replaces protocol numbers and treatment names with XXX masks
  • Operates in-place — no paragraphs added or removed
  • Idempotent: already-masked studies are automatically skipped
  • Optional re-sorting of affected subcategories only

Mode C: Database Management

  • Per-user private SQLite databases with WAL journaling
  • Import/export between Excel and database formats
  • Full CRUD for phases, subcategories, and studies
  • Automatic versioned backups with configurable retention
  • Automatic category order maintenance

Architecture Highlights

  • 15+ Python modules with clear single-responsibility design
  • 460+ automated tests (hermetic, zero external dependencies)
  • Offline enforcement: socket blocking and proxy detection at startup
  • Packaged as a single .exe via PyInstaller (25 MB)
  • Both GUI (tkinter) and CLI interfaces

Tech Stack

Python 3.8+ Tkinter python-docx openpyxl rapidfuzz SQLite (WAL) PyInstaller pytest

Screenshots

Challenges & Solutions

Outcomes & Impact

Lessons Learned

Future Improvements