cv-manager-public

cv-manager-public

Docker app from vincentmakes' Repository

Overview

CV Manager - Public Read-Only Interface Share your professional CV safely with this read-only version. Perfect for: • Public exposure via Cloudflare Tunnel • Sharing with recruiters/employers • Portfolio website integration • Job application submissions PUBLIC VERSION - Read-only access. All write operations blocked. Safe to expose publicly. IMPORTANT: Install "CV Manager" (admin) first, then use the SAME appdata path here to share the data. The app auto-detects read-only mode from the volume mount. Default ports: Admin (3000) + Public (3001)

CV Manager / Resume Builder

Ko-fi CI License: MIT

This is a CV / Resume management system with an editable theme, persistent database storage, and Docker deployment ready for Unraid.

cv1 cv2 cv3 cv4

Features

  • 7 Sections: About, Timeline (auto-generated), Experience, Certifications, Education, Skills, Projects
  • Custom Sections: Add your own sections with different layout possibilities
  • Full CRUD: Add, edit, delete any item
  • Visibility Toggles: Hide items from PDF export while keeping them in database
  • Print/PDF Export: Clean print styles, hidden items excluded
  • Import/Export: Backup and restore your CV data as JSON - ideal to process the data via any LLM for optimization
  • Persistent Storage: SQLite database survives container restarts
  • Multi CV: Save different of your CV. Preview them and load them as need be
  • Responsive Design: Works on desktop and mobile
  • Auto-Generated Timeline: Timeline automatically builds from your experiences
  • ATS Optimized: Schema.org markup, semantic HTML, hidden keywords for job site parsing
  • SEO Ready: Dynamic robots.txt and sitemap.xml for the public site

Quick Start (Docker)

One-Line Install

curl -fsSL https://raw.githubusercontent.com/vincentmakes/cv-manager/main/install.sh | bash

Or download and run:

wget https://raw.githubusercontent.com/vincentmakes/cv-manager/main/install.sh
chmod +x install.sh
./install.sh

Manual Option 1: Docker Compose

# Clone or copy the files
cd cv-manager

# Create data directory
mkdir -p /mnt/user/appdata/cv-manager/data/uploads

# Start the container
docker-compose up -d --build

# Access at:
# - http://localhost:3000 (Admin - full edit access)
# - http://localhost:3001 (Public - read-only)

Manual Option 2: Docker Compose with Named Volume

Use docker-compose.volume.yml if you prefer Docker-managed volumes:

docker-compose -f docker-compose.volume.yml up -d --build

Manual Option 3: Docker Run

# Build the image
docker build -t cv-manager .

# Run with persistent data
docker run -d \
  --name cv-manager \
  -p 3000:3000 \
  -p 3001:3001 \
  -v /mnt/user/appdata/cv-manager/data:/app/data \
  --restart unless-stopped \
  cv-manager

Two Server Modes

Port Mode Description
3000 Admin Full edit access, toolbar, all controls
3001 Public Read-only, no toolbar, no edit buttons, security hardened

Public Server Security Features (Port 3001)

  • GET-only: All POST/PUT/DELETE requests blocked
  • Rate limiting: 60 requests/minute per IP
  • Security headers: X-Frame-Options, CSP, XSS protection
  • No sensitive data: Email/phone not exposed in API
  • Visible items only: Hidden items not returned by API
  • No IDs exposed: Database IDs not included in responses
  • SEO files: Dynamic robots.txt and sitemap.xml

Cloudflare Tunnel Setup

Point your CF tunnel to port 3001 for public access:

# In your cloudflared config
ingress:
  - hostname: cv.yourdomain.com
    service: http://cv-manager:3001

The sitemap.xml and robots.txt are automatically generated with the correct domain based on the incoming request headers.

Unraid Deployment

Method 1: Install from Unraid Apps

  1. In the Apps tab, look for "cv manager".
  2. Install cv-manager first then cv-manager-public
Screenshot 2026-02-01 at 06 14 29

Method 2: Docker Compose Manager Plugin

  1. Install the "Docker Compose Manager" plugin from Community Apps
  2. Create a new stack with the docker-compose.yml content
  3. Set the path for data persistence (e.g., /mnt/user/appdata/cv-manager/data)
  4. Start the stack

Data Persistence

The SQLite database is stored in the data directory. Make sure to:

  1. Mount /app/data to a persistent location on your host
  2. Back up the cv.db file periodically
  3. Use the Export feature for JSON backups

Profile Picture

To add your profile picture:

  1. Name your picture picture.jpeg
  2. Place it in the data/uploads/ folder:
    • Docker: /app/data/uploads/picture.jpeg (inside container)
    • Unraid bind mount: /mnt/user/appdata/cv-manager/data/uploads/picture.jpeg
    • Docker volume: Use docker cp picture.jpeg cv-manager:/app/data/uploads/

The picture will automatically display instead of initials. If no picture is found, initials are shown as fallback.

Supported format: JPEG (must be named picture.jpeg)

API Endpoints

Method Endpoint Description
GET /api/profile Get profile data
PUT /api/profile Update profile
GET /api/experiences List all experiences
POST /api/experiences Create experience
PUT /api/experiences/:id Update experience
DELETE /api/experiences/:id Delete experience
GET /api/certifications List certifications
POST /api/certifications Create certification
PUT /api/certifications/:id Update certification
DELETE /api/certifications/:id Delete certification
GET /api/education List education
POST /api/education Create education
PUT /api/education/:id Update education
DELETE /api/education/:id Delete education
GET /api/skills List skill categories
POST /api/skills Create skill category
PUT /api/skills/:id Update skill category
DELETE /api/skills/:id Delete skill category
GET /api/projects List projects
POST /api/projects Create project
PUT /api/projects/:id Update project
DELETE /api/projects/:id Delete project
GET /api/timeline Get auto-generated timeline
GET /api/sections Get section visibility
PUT /api/sections/:name Update section visibility
GET /api/cv Export all CV data
POST /api/import Import CV data

Importing Your Existing Data

Create a JSON file with your CV data and use the Import button, or POST to /api/import:

{
  "profile": {
    "name": "Your Name",
    "initials": "YN",
    "title": "Your Title",
    "subtitle": "Your tagline",
    "bio": "Your bio...",
    "location": "City, Country",
    "linkedin": "https://linkedin.com/in/yourprofile",
    "languages": "English, French"
  },
  "experiences": [
    {
      "job_title": "Senior Developer",
      "company_name": "Company Inc",
      "start_date": "2020-01",
      "end_date": "",
      "location": "Remote",
      "country_code": "us",
      "highlights": ["Led team of 5", "Delivered project X"]
    }
  ],
  "certifications": [
    {
      "name": "AWS Solutions Architect",
      "provider": "Amazon",
      "issue_date": "Jan 2023"
    }
  ],
  "education": [
    {
      "degree_title": "MSc Computer Science",
      "institution_name": "University",
      "start_date": "2010",
      "end_date": "2014",
      "description": "Focus on AI"
    }
  ],
  "skills": [
    {
      "name": "Programming",
      "icon": "💻",
      "skills": ["JavaScript", "Python", "Go"]
    }
  ],
  "projects": [
    {
      "title": "Project Name",
      "description": "What it does",
      "technologies": ["React", "Node.js"]
    }
  ]
}

Environment Variables

Variable Default Description
PORT 3000 Server port
PUBLIC_PORT 3001 Server port Read only
DB_PATH ./data/cv.db SQLite database path

Development

# Install dependencies
npm install

# Run in development mode (auto-reload)
npm run dev

# Run in production mode
npm start

License

MIT

Install cv-manager-public on Unraid in a few clicks.

Find cv-manager-public in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for cv-manager-public Review the template variables and paths Click Install

Requirements

CV Manager (admin version) should be installed first

Download Statistics

16,447
Total Downloads
1,816
This Month
1,816
Avg / Month

Total Downloads Over Time

Loading chart...

Related apps

Details

Repository
vincentmakes/cv-manager:latest
Last Updated2026-06-22
First Seen2026-01-28

Runtime arguments

Web UI
http://[IP]:[PORT:3001]
Network
bridge
Shell
sh
Privileged
false

Template configuration

WebUI PortPorttcp

Host port for the public interface. Change this to use a different port (e.g. 8080). Do NOT change the PUBLIC_PORT variable below.

Target
3001
Default
3001
Value
3001
AppDataPathro

Database and uploads storage (read-only). IMPORTANT: Use the SAME path as your CV Manager Admin container!

Target
/app/data
Default
/mnt/user/appdata/cv-manager/data
Value
/mnt/user/appdata/cv-manager/data
Public Port (internal)Variable

Internal container port. DO NOT CHANGE this value. To use a different port, change the WebUI Port above instead.

Target
PUBLIC_PORT
Default
3001
Value
3001
Node EnvironmentVariable

Node environment (leave as production)

Target
NODE_ENV
Default
production
Value
production