Skip to content

Feature Request: Anonymized Export Mode for Privacy-Safe Data Sharing (maninly for LLM use) #176

Description

@rorar

Overview

Building upon issue #175 (Unified Import/Export Dialog), this feature adds an anonymization mode to the export functionality, enabling users to share CV data safely without exposing personal identifiable information (PII). When importing anonymized data, personal fields remain untouched, allowing users to collaborate and share CV content securely.

Use Cases

Use Case 1: Sharing CV Feedback with Mentors or Peers

  1. User exports CV with anonymization enabled
  2. Personal data (name, email, phone, address) is stripped/masked
  3. User shares anonymized file with mentor for feedback on skills, experience, and achievements
  4. Mentor receives file with placeholder values: [ANONYMIZED_NAME], [ANONYMIZED_EMAIL], etc.
  5. Mentor edits experience descriptions, skills, or project descriptions
  6. User imports edited file; only content updates are applied, personal data stays intact

Use Case 2: Creating Templates from Existing CVs

  1. User wants to create a reusable CV template from their current data
  2. User exports with anonymization to create a generic version
  3. Template is shared with colleagues/friends
  4. When imported, it doesn't overwrite any personal data in their CV
  5. Colleagues benefit from the structure and content without seeing original personal details

Use Case 3: LLM-Assisted CV Enhancement (Privacy-Focused)

  1. User exports CV with anonymization enabled
  2. User pastes anonymized JSON into ChatGPT/Gemini for content improvement
  3. LLM doesn't see personal data; focuses on skills, achievements, and descriptions
  4. User imports LLM-enhanced content with confidence that their personal info stays safe and not used in training data(!)
  5. Workflow integrates seamlessly with issue Feature Request: Create JSON Schema, Full Example and Instructions for LLM Integration #174 (JSON schema) and Feature: Unified Import/Export Dialog with JSON Editor and Smart Filename Generation #175 (unified dialog)

Deliverables

1. Anonymization Toggle in Export Dialog

Add checkbox/toggle in the unified import/export dialog (from #175):

  • Checkbox: "Export with anonymized personal data"
  • When enabled, all PII fields are replaced with placeholder or masked values
  • Preview shows which fields will be anonymized
  • Works with smart filename generation (optionally append -anonymized or similar)

2. Define Anonymizable Fields

These fields are considered personal data and should be anonymized:

Profile Section:

  • profile.firstName[ANONYMIZED_FIRSTNAME] or John
  • profile.lastName[ANONYMIZED_LASTNAME] or Doe
  • profile.email[ANONYMIZED_EMAIL] or user@example.com
  • profile.phone[ANONYMIZED_PHONE] or +1-XXX-XXX-XXXX
  • profile.location[ANONYMIZED_LOCATION] or City, Country
  • profile.photo → Removed or replaced with placeholder URL
  • profile.summary → Keep (not PII, but company-specific context)

Experience Items:

  • Company names (kept by default, but option to anonymize)
  • Optionally anonymize if anonymizeCompanies flag is set

Contact Information:

  • LinkedIn URL → Keep or replace with https://linkedin.com
  • Website URL → Replace with https://example.com
  • GitHub URL → Replace with placeholder or remove

Dates:

  • Keep all dates (non-PII, shows history timeline)

3. Import Behavior — Preserve Personal Data

When importing anonymized data:

  • Fields containing [ANONYMIZED_*] or placeholder values are ignored
  • User's existing personal data is NOT overwritten
  • Only non-anonymized fields (skills, experiences, achievements) are merged/updated
  • Validation logic: If a field contains anonymization markers, skip it during import

Example:

{
  "profile": {
    "firstName": "[ANONYMIZED_FIRSTNAME]",
    "lastName": "[ANONYMIZED_LASTNAME]",
    "email": "[ANONYMIZED_EMAIL]",
    "phone": "[ANONYMIZED_PHONE]",
    "location": "[ANONYMIZED_LOCATION]",
    "summary": "Experienced software engineer with 10+ years in full-stack development"
  },
  "experiences": [
    {
      "title": "Senior Software Engineer",
      "company": "[ANONYMIZED_COMPANY]",
      "description": "Led cross-functional team, improved performance by 40%"
    }
  ]
}

When this is imported into an existing CV:

  • Personal fields (firstName, lastName, email, etc.) remain unchanged
  • Experience descriptions and skills are imported normally
  • The CV structure remains intact with user's original personal data

4. UI/UX in Unified Dialog

Export Enhancements:

  • Add "Anonymization Options" section
  • Checkbox: "Anonymize personal data"
  • Expandable preview: "Fields to be anonymized:"
    • First Name
    • Last Name
    • Email
    • Phone
    • Location
    • Photo
    • Company Names (optional)
  • Optionally adjust anonymization as user checks/unchecks fields

Filename Integration:

  • Smart template can include {anon-mode} variable (e.g., -anonymized suffix)
  • Example: 2026-07-07_143022_projectmanager_v1_en_abc123-anonymized.json

5. Backend API Changes

Option A (Minimal): Handle anonymization purely on the frontend

  • Anonymization logic lives in public/shared/scripts.js or new anonymizer.js module
  • No API changes required
  • Import validation checks for anonymization markers

Option B (Recommended): Add backend anonymization endpoint

  • New endpoint: POST /api/export/anonymized
  • Accepts dataset ID and anonymization options
  • Returns anonymized JSON
  • Ensures consistent anonymization logic (frontend + backend)
  • Better for security (server-side privacy controls)
  • For Agentic LLM usage (e.g. Claude Code, Codex,...)

6. Anonymization Presets

Allow users to save custom anonymization profiles:

  • "Full Anonymization" (preset): All PII fields anonymized
  • "Company Safe" (preset): Only company names anonymized
  • "Custom" (user-defined): User selects which fields to anonymize
  • Saved in user settings or cookies for future exports

Technical Considerations

Data Structure

  • Anonymization markers should be consistent and identifiable
    • Recommended: [ANONYMIZED_FIELDNAME] format
    • Alternative: Use placeholder objects like { "__anonymized": true, "__field": "firstName" }

Validation Logic

  • During import, skip any field that matches anonymization marker pattern
  • Preserve non-anonymized fields as-is
  • Optionally log which fields were skipped (for debugging)

i18n Integration

  • Anonymization markers can be localized: [ANONYMISIERT_VORNAME] (German), [DONNEES_ANONYMISEES] (French)
  • Or keep markers language-agnostic ([ANONYMIZED_*])
  • Placeholder examples should respect user locale

Security

  • Anonymization happens after data retrieval (not in DB)
  • No permanent changes to stored data
  • All personal data remains in the database
  • Browser-side anonymization is sufficient for privacy sharing (not compliance-grade)

Testing

  • Unit tests for anonymization function
  • Test import logic skips anonymized fields
  • Test that valid non-anonymized fields still import
  • Test with different anonymization presets

Benefits

Privacy-safe collaboration: Share CV feedback without exposing PII
LLM-friendly: Use anonymized data with AI assistants confidently
Template creation: Build reusable CV templates from existing data
Data integrity: Personal data never overwrites during import
Flexible: Users choose which fields to anonymize
Non-destructive: Original data always protected

Related Issues

Acceptance Criteria

  • Anonymization toggle appears in export dialog (from Feature: Unified Import/Export Dialog with JSON Editor and Smart Filename Generation #175)
  • Anonymizable fields are clearly listed and user-selectable
  • Export with anonymization creates file with masked personal data
  • Anonymized fields are marked with consistent [ANONYMIZED_*] or similar markers
  • Import logic detects and skips anonymization markers
  • User's personal data is not overwritten during anonymized import
  • Filename template supports {anon-mode} variable (or similar)
  • Tests verify anonymization and import behavior
  • Feature integrates with existing i18n system
  • Documentation explains privacy guard lines and limitations
  • Anonymization presets (Full, Company-Safe, Custom) are available

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions