A self-hosted resume/CV management system. Build, customize, and share professional CVs from your own server.
CV Manager is a web application that runs on your own server (via Docker). It gives you two interfaces:
- Admin (default port 3000) — where you build and manage your CV
- Public (default port 3001) — a read-only version you can share with recruiters, employers, or anyone
Your data is stored locally in a SQLite database. Nothing is sent to external servers.
- Open the admin interface at
http://your-server:3000 - Click the edit icon on the header to set your name, title, bio, and contact info
- Add your work experiences, education, certifications, skills, and projects
- Use the Theme button in the toolbar to pick a color that matches your style
- Hit Print / PDF to export, or share the public URL at port 3001
CV Manager comes with 7 built-in sections:
| Section | Description |
|---|---|
| About | Your professional summary / bio. Supports multi-line text. |
| Timeline | Auto-generated from your work experiences. Shows a visual timeline with country flags. |
| Experience | Work history with job title, company, dates, location, country flag, and bullet-point highlights. |
| Certifications | Professional certifications with provider and dates. |
| Education | Degrees, institutions, dates, and descriptions. |
| Skills | Grouped skill categories with individual skill tags. Each category can have a custom icon. |
| Projects | Featured projects with descriptions, technology tags, and external links. |
- Click Settings in the toolbar
- Go to the Sections & Headlines tab
- Use the arrow buttons to move sections up or down
- Click Save — the order applies to both admin and public views
In the same Sections & Headlines tab, you can rename any section's display title. For example, rename "Experience" to "Work History" or "Skills" to "Technical Expertise". Clear the custom name to revert to the default.
Each section has a visibility toggle (eye icon) in its top-right corner. Toggling it off hides the section from print/PDF output while keeping it visible in the admin for editing.
Click the edit icon on the header section. You can set:
- Name and Initials (shown in the avatar circle if no photo is uploaded)
- Title (your main role/position)
- Subtitle (additional context, e.g., department or specialization)
- Bio (professional summary — line breaks are preserved)
- Location
- Email, Phone, LinkedIn (shown as contact badges)
- Languages (spoken languages, e.g., "English, French, German" — shown as a badge with a globe icon)
In the profile edit dialog, you can upload a profile picture (JPEG, PNG, or WebP). The image replaces the initials circle. To remove it, use the delete option in the same dialog.
Display a green "Open to Work" badge on your public CV to signal availability to recruiters:
- Click the edit icon on the header to open the profile editor
- Find the Open to Work toggle
- Switch it on and save
The badge appears as a circular overlay on your profile picture (or next to your avatar if no picture is set). It is visible on the public site but hidden in print/PDF output so it won't appear on exported documents.
Each experience entry includes:
- Job Title and Company Name
- Start Date and End Date (leave end date empty for current positions — shows "Present")
- Location and Country Code (2-letter code like
us,ch,fr— used for flag icons on the timeline) - Highlights — bullet points describing your achievements (one per line)
Each experience entry can have a company logo. Logos appear on the timeline as images instead of plain company names.
Uploading a logo:
- Edit an experience entry
- In the Company Logo section, click Choose image to upload a file (JPEG, PNG, or WebP, max 5MB)
- A small square image works best
Reusing logos:
Click Use existing to open the logo picker grid, which shows all previously uploaded logos. Click one to reuse it — this avoids uploading the same logo multiple times.
Auto-fill:
When you type a company name that already has a logo (from a current or saved experience), the logo is automatically filled in. This works across datasets.
Global propagation:
When a logo is set, a toggle appears: "Sync logo across all [Company] experiences". When enabled:
- The logo is applied to all experiences with the same company name — including those in saved datasets
- Future experiences for the same company will automatically inherit the logo
- Toggling it off does not remove already-applied logos — it only stops future auto-propagation
Removing a logo:
Click the Remove button in the logo section to unlink a logo from an experience. The file is kept on disk for reuse. To permanently delete an unused logo file, open the logo picker and click the delete button on any logo that is not in use.
Each certification has a name, provider, issue date, and optional expiry date and credential ID.
Each entry has a degree/title, institution, start/end dates, and an optional description.
Education entries can have an institution logo, just like company logos on work experiences.
Uploading a logo:
- Edit an education entry
- In the Institution Logo section, click Choose image to upload a file (JPEG, PNG, or WebP, max 5MB)
- A small square image works best
Reusing logos:
Click Use existing to open the logo picker grid, which shows all previously uploaded logos (including company logos from experiences). Click one to reuse it.
Global propagation:
When a logo is set, a toggle appears: "Sync logo across all [Institution] education entries". When enabled, the logo is applied to all education entries with the same institution name — including those in saved datasets.
Removing a logo:
Click the Remove button in the logo section to unlink a logo from an education entry.
Skills are organized into categories (e.g., "Programming Languages", "Tools & Platforms"). Each category contains individual skill tags. Categories can have an icon selected from a preset list: code, server, database, cloud, settings, users, briefcase, cpu, layers, or default. If no icon is chosen, the system auto-detects one based on the category name (e.g., a category named "Programming" automatically gets the code icon).
Each project has a title, description, technologies (shown as tags), and an optional external link.
Every individual item (experience, certification, education entry, etc.) has a visibility toggle. Hidden items are excluded from print/PDF and the public view, but remain in the admin for future use.
Within most sections, items can be reordered by dragging them. The sort order is saved automatically.
Custom sections let you add any content that doesn't fit the built-in sections.
- Open Settings → Custom Sections tab
- Click Add Custom Section
- Enter a section name
- Choose a layout type (see below)
- Optionally choose a section icon (star, book, link, globe, heart, award, briefcase) — displayed next to the heading
- Save — the new section appears in your CV
| Layout | Best For |
|---|---|
| 2-Column Grid | Paired items like languages & proficiency, tools & experience level |
| 3-Column Grid | Compact items like awards, publications, or short credentials |
| Vertical List | Sequential items with optional links, like volunteer work or memberships |
| Card Grid | Rich items with title, subtitle, description, and link — like portfolio pieces |
| Social Links | Platform-specific links with icons (LinkedIn, GitHub, Twitter/X, YouTube, Instagram, Dribbble, Behance, Website, Email, Phone, or Custom) |
| Bullet Points | Grouped bullet lists, similar to experience highlights — great for key achievements or competencies |
| Free Text | Plain text block with preserved line breaks — similar to the About section, useful for cover letters, personal statements, or any freeform content |
| Picture Grid | Image gallery with optional captions — great for portfolios, certificates, or visual work samples |
| Additional Experiences | Experience-style entries (job title, company, dates, highlights, logo) — extends your work history without mixing into the main Experience section |
The Picture Grid layout displays images in a responsive grid with optional captions.
- Create a custom section and select Picture Grid as the layout type
- Choose the number of grid columns (1, 2, or 3 — default is 3)
- Click Add Picture to upload images (JPEG, PNG, or WebP, max 5MB)
- Optionally add a caption below each image
Images are centered and maintain their aspect ratio. In 3-column mode, images display as squares for a uniform look.
The Additional Experiences layout creates experience-style entries identical to the built-in Work Experience section. Each item includes:
- Job title and company/organization name
- Start and end dates (with optional "Present" for current roles)
- Location and country code
- Highlights (key achievements, one per line)
- Optional logo (same upload/reuse workflow as company logos)
Show on Career Timeline: When managing items in an Additional Experiences section, you can enable "Show items on Career Timeline". This merges the additional experience entries into the main timeline visualization — they appear alongside your regular work experiences with full support for branching, logos, and duration display.
For grid, list, card, and bullet layouts, each item has a "Hide title" checkbox. When enabled, the item displays without its title heading — useful when the content speaks for itself.
Click Manage Items on any custom section to add, edit, reorder, or delete items within that section.
The timeline is automatically generated from your work experiences. It displays:
- Company logos (or company names if no logo is set)
- Job titles
- Date ranges
- Country flags (when the country changes between experiences)
Clicking any item on the timeline scrolls you to the corresponding experience card and highlights it briefly.
When two or more work experiences overlap in time by at least 1 month, the timeline automatically renders them as parallel tracks:
- The concurrent position splits onto a branch track — an elevated line above the main timeline
- S-curve connectors visually show where the branch forks from and merges back to the main track
- If a parallel position is ongoing (no end date), the branch line extends to the right edge of the timeline
- Cards for branch-track items are positioned separately to avoid overlapping with main-track cards
No configuration is needed — branching is fully automatic based on your experience dates. Short overlaps under 1 month (common during job transitions) are intentionally ignored. If you prefer a flat timeline without branching, you can disable it in Settings → Advanced → Timeline: Branching.
By default, timeline branching is enabled. You can disable it in Settings → Advanced → Timeline: Branching. When disabled, all experiences are rendered in a flat, alternating layout on a single track — no fork/merge curves or elevated branch lines are shown, even if experiences overlap in time.
By default, the timeline shows years only (e.g., "2020 - 2023"). You can change this in Settings → Advanced → Timeline: Years Only. When disabled, the timeline uses the same date format as the rest of your CV.
Click the Theme button in the toolbar to open the color picker. You can:
- Pick a color from the color wheel
- Adjust brightness with the slider
- Enter a specific hex code
- Choose from 8 preset colors (Blue, Emerald, Purple, Red, Orange, Cyan, Indigo, Pink)
The theme color affects headings, borders, links, tags, and accent elements throughout the entire CV.
Go to Settings → Advanced → Date Format to choose how dates appear on your CV:
| Format | Example |
|---|---|
| MMM YYYY | Jan 2020 |
| MMM YY | Jan 20 |
| MMMM YYYY | January 2020 |
| MM/YYYY | 01/2020 |
| MM.YYYY | 01.2020 |
| MM-YYYY | 01-2020 |
| YYYY-MM | 2020-01 |
| YYYY | 2020 (year only) |
Click the globe icon in the toolbar to switch the admin interface language. A dropdown grid shows all available languages — click one to apply it immediately.
Supported languages: English, German (Deutsch), French (Français), Dutch (Nederlands), Spanish (Español), Italian (Italiano), Portuguese (Português), Chinese (中文).
The language setting only affects the admin interface — it does not change the content of your CV. Your preference is saved and persists across sessions.
Open Settings — the current version (e.g., v1.11.0) is shown in the bottom-left corner of the modal footer.
CV Manager automatically checks GitHub for newer versions. If an update is available, a blue banner appears below the toolbar:
Update available: v1.12.0 (you're on v1.11.0) — What's new
The "What's new" link opens the changelog. You can dismiss the banner with the X button.
The version check is cached for 24 hours — if you just published a new version to GitHub, your running instance may not detect it until the cache expires or you restart the server (which clears the in-memory cache).
Click Print / PDF in the toolbar (or press Ctrl+P / Cmd+P). Use your browser's "Save as PDF" option to create a PDF file. The print output excludes all admin controls, hidden items, and hidden sections.
Enable page numbers in Settings → Print & Export → Page Numbers. You can configure:
- Position: top or bottom of the page
- Format: "Page 1 of 3", "1 / 3", "1", or "- 1 -"
Two options control how content breaks across pages:
- Allow Section Splits — lets a section start on one page and continue on the next (instead of pushing the entire section to a new page)
- Allow Item Splits — lets individual items (like an experience card) break across pages
Both are found in Settings → Print & Export. If your CV has long sections, enabling these prevents excessive white space.
Toggle Settings → Print & Export → Public Print Button to show or hide a print button on the public-facing CV. When enabled, visitors can print your CV directly.
Scaling: Most browsers have a Scale option in the print dialog (sometimes under "More settings" or "Advanced"). Setting it to 80–90% often produces a much better result — it tightens spacing and can help fit your CV onto fewer pages without losing readability.
Margins: Adjust the print margins to Minimum or None in your browser's print dialog for maximum content area. The CV has its own internal padding, so removing browser margins won't cause text to touch the edges.
Tip: Combine scaling at 85% with minimum margins for the most professional-looking output. Preview the result before saving — small adjustments can make a big difference.
Datasets are saved snapshots of your CV. One dataset is always the default — this is the version visitors see at your root URL (/). You can create additional datasets for different audiences (e.g., a technical CV, a management CV) and share them at their own URLs.
When you first install CV Manager, a "Default" dataset is automatically created from your CV data. All edits you make in the admin are auto-saved back to the active dataset — there's no separate "save" step.
A banner below the toolbar shows which dataset you're currently editing. It displays:
- The dataset name (e.g., "Default", "Technical CV")
- A "Default" badge if this dataset is the one served at
/ - An auto-save status — briefly shows "Saving…" then "✓ Saved" after each edit
Every change you make (adding items, editing content, reordering, toggling visibility) is automatically saved to the active dataset after a short delay.
Click Save As... in the toolbar, enter a name (e.g., "Technical CV", "Marketing Role"), and your current CV state is saved as a new snapshot. The new dataset becomes the active one.
Click Open... to see all saved datasets. A legend at the top explains the three controls:
| Control | Purpose |
|---|---|
| Radio button | Select which dataset is served at your root URL / (the default) |
| Toggle | Share other datasets at their own /v/slug URL |
| Eye button | Preview a saved dataset without making it public |
Each dataset row shows:
- Name and last-updated date
- "Default" badge — on the dataset selected with the radio button
- "Editing" badge — on the dataset currently loaded in the admin
- A versioned URL (e.g.,
/v/technical-cv-1) — hidden for the default dataset since it's served at/ - Load button — switches to this dataset (shows "Reload" if already active)
- Delete button — permanently removes the dataset (disabled for the current default)
The default dataset is the version visitors see when they visit your root URL (/). To change it:
- Open the Open... modal
- Click the radio button next to the dataset you want as your public CV
- The change takes effect immediately — the public site now serves that dataset
This decouples your public CV from your editing. You can freely edit content in the admin without visitors seeing work-in-progress changes until you're ready.
Each saved dataset (other than the default) gets a unique URL path (e.g., /v/technical-cv-1). By default, these are private — only accessible from the admin interface for previewing.
To share a specific version publicly:
- Open the Open... modal
- Find the dataset you want to share
- Toggle the switch next to it — it turns blue and a green Public badge appears
- The
/v/slugURL is now accessible on the public site (port 3001)
This lets you share tailored CV versions with different audiences. For example, you might make a "Technical CV" public for engineering roles while keeping a "Management CV" private until needed.
Copying the URL: Click the copy icon next to the slug to copy the full URL to your clipboard. The toast message will tell you whether you copied a public or preview-only URL.
Note: The main public page at
/always shows the default dataset — not your live edits. This means you can safely experiment in the admin without affecting what visitors see.
Click Export in the toolbar to download your entire CV as a JSON file. This includes all sections, items, settings, and custom sections. Use this for backups or to transfer your CV to another instance.
Click Import and select a previously exported JSON file. This replaces your current CV data with the imported data. Custom sections and all settings are included.
Tip: Export your CV before importing, so you have a backup of the current state.
Control how search engines interact with your public CV in Settings → Advanced → Search Engine Indexing:
| Option | Effect |
|---|---|
| Index, Follow | CV appears in search results, search engines follow your links (default) |
| No Index, Follow | CV is hidden from search results, but links are followed |
| Index, No Follow | CV appears in search results, but outbound links are ignored |
| No Index, No Follow | Fully invisible to search engines |
This setting affects both the <meta name="robots"> tag and the /robots.txt file, and is applied server-side for compatibility with all search engine crawlers.
By default, public versioned URLs (/v/slug) are not indexed by search engines — they get a noindex, nofollow meta tag. This is useful if you want to share direct links without those pages appearing in search results.
To allow search engines to crawl versioned URLs, enable Index Versioned URLs in Settings → Advanced. This setting is independent of the main Search Engine Indexing option above, which only affects the main / page.
Paste analytics tracking code (Google Analytics, Matomo, Plausible, etc.) in Settings → Advanced → Tracking Code. The code is injected into the public CV pages only — not the admin interface.
The admin interface (port 3000) gives full access to edit and delete your CV data. It should never be exposed directly to the internet.
Recommended approaches:
- Cloudflare Access — If you use Cloudflare Tunnel, set up a Cloudflare Access policy on your admin hostname. This adds an authentication layer (email OTP, SSO, etc.) before anyone can reach the admin page. Only expose port 3001 (public) without authentication.
- VPN only — Keep port 3000 accessible only from your local network or VPN. Never port-forward it to the internet.
- Reverse proxy with auth — If using Nginx, Caddy, or Traefik, add HTTP basic auth or an authentication middleware in front of port 3000.
The public site (port 3001) is designed to be internet-facing — it blocks all write operations, enforces rate limiting (60 requests/minute per IP), and includes security headers (CSP, X-Frame-Options, XSS protection).
Rule of thumb: Public port → open to the world. Admin port → behind authentication, always.
CV Manager generates ATS (Applicant Tracking System) friendly output:
- Schema.org markup — structured data that ATS systems can parse (Person, OrganizationRole, EducationalOccupationalCredential, etc.)
- Semantic HTML — proper heading hierarchy, article elements, and lists
- Hidden ATS block — a plain-text version of your CV is embedded in the page for parsers that don't process styled HTML
- Clean print output — no visual clutter, proper content hierarchy
No special configuration is needed — ATS optimization is always active.
docker-compose up -d --buildThis starts both the admin (port 3000) and public (port 3001) servers.
curl -fsSL https://raw.githubusercontent.com/vincentmakes/cv-manager/main/install.sh | bashdocker pull vincentmakes/cv-manager:latest
docker run -d -p 3000:3000 -p 3001:3001 -v cv-data:/app/data vincentmakes/cv-manager:latestInstall via Community Applications — search for "cv-manager". Two templates are available:
- cv-manager (Admin) — mapped to port 3000
- cv-manager-public (Public) — mapped to port 3001, read-only
Both containers share the same data directory (typically /mnt/user/appdata/cv-manager).
- Set up a Cloudflare Tunnel pointing to port 3001 (the public server)
- Use Cloudflare Access to protect port 3000 (admin) behind authentication
- Your CV is now accessible at your domain while the admin stays secured
Q: Is my data stored on any external server?
No. Everything runs locally on your server. Your CV data is stored in a SQLite database file in the /data directory.
Q: Can I run CV Manager without Docker?
Yes. Install Node.js 18+, run npm install in the project directory, then node src/server.js. The admin runs on port 3000 and the public site on port 3001.
Q: Can multiple people use the same instance? CV Manager is designed as a single-user application. Each instance manages one person's CV. For multiple people, run separate containers.
Q: How do I mark a position as "current"? Leave the End Date field empty. It will display as "Present" on the CV.
Q: Can I reorder items within a section? Yes. Most items support drag-and-drop reordering. The order is saved automatically.
Q: How do I add bullet points to an experience? Edit the experience and enter highlights in the Highlights field — one bullet point per line.
Q: How do I add a company logo? Edit the experience, scroll to the Company Logo section, and click Choose image to upload. You can also click Use existing to reuse a logo you've already uploaded. Enable the "Sync logo across all [Company]" toggle to apply the same logo to all experiences at that company.
Q: I accidentally deleted something. Can I undo it? There's no undo feature. Since edits are auto-saved to the active dataset, the change is persisted immediately. If you have a previous export or a separate saved dataset, you can restore from that. It's good practice to export your CV regularly as a backup.
Q: How many custom sections can I create? There's no hard limit. Create as many as you need.
Q: Can I change a custom section's layout type after creating it? Yes. Edit the section and select a different layout. Note that some fields may not carry over between layout types (e.g., switching from cards to social links).
Q: What's the difference between "Bullet Points" and "Free Text" layouts? Bullet Points renders each line as a bulleted list item with a group title. Free Text renders plain text with preserved line breaks and no title — similar to the About/Bio section.
Q: What is the "Picture Grid" layout? An image gallery layout for custom sections. Upload images with optional captions, displayed in a 1, 2, or 3-column grid. Great for portfolios, certificate scans, or visual work samples.
Q: What is the "Additional Experiences" layout? A layout that creates experience-style entries (job title, company, dates, highlights, logo) inside a custom section. You can optionally merge these entries into the Career Timeline by enabling "Show items on Career Timeline".
Q: Why does my PDF look different from the screen? The print output uses dedicated print styles optimized for paper. Some visual effects (hover states, animations, gradients) are simplified. Hidden items and admin controls are automatically removed.
Q: How do I fit my CV on fewer pages? Try enabling Allow Section Splits and Allow Item Splits in Print & Export settings. You can also hide less important items or sections, or use more compact custom section layouts. Also scale the print via the print modal from any browser. (sometimes a bit hidden)
Q: Why are some items missing from my printed CV? Check if those items have been toggled to hidden (eye icon). Hidden items are excluded from print output and the public view.
Q: Page numbers aren't showing up? Make sure Page Numbers is enabled in Settings → Print & Export. Some browser PDF viewers may not display CSS-generated page numbers — try downloading the PDF and opening it in a dedicated reader.
Q: The timeline shows the wrong dates / only years / full dates? The timeline has its own date setting. Go to Settings → Advanced → Timeline: Years Only to toggle between year-only display and the full date format.
Q: Can I add entries to the timeline directly? Not from the timeline itself, but you can create an Additional Experiences custom section and enable "Show items on Career Timeline" to merge extra entries into the timeline alongside your regular work experiences.
Q: How do I show the "Open to Work" badge? Edit your profile (click the edit icon on the header) and toggle Open to Work on. The green badge appears on your public CV but is hidden from print/PDF output.
Q: The country flag isn't showing on the timeline?
Make sure the Country Code field on the experience is set to a valid 2-letter ISO country code (e.g., us, gb, ch, de, fr). Flags are loaded from an external CDN.
Q: What happens when I have two jobs at the same time? The timeline automatically detects overlapping positions and renders them as parallel tracks. The concurrent job appears on an elevated branch line with S-curve connectors showing the fork and merge points. No configuration needed — it's based entirely on your start/end dates. Overlaps shorter than 1 month are ignored (common during job transitions).
Q: Why does the timeline show a logo instead of the company name? If you've uploaded a company logo for that experience, the timeline displays the logo image instead of text. If the logo file is missing, it falls back to the company name. To remove a logo from the timeline, edit the experience and click Remove in the Company Logo section.
Q: How do I change the admin language? Click the globe icon in the toolbar and select a language from the dropdown grid. The change applies immediately and is saved across sessions.
Q: How do I check what version I'm running?
Open Settings — the version number is shown in the bottom-left corner of the modal (e.g., v1.11.0).
Q: I don't see the update banner even though a new version is out?
The version check is cached for 24 hours. Restart your server (or Docker container) to clear the cache and force a fresh check. Your server also needs outbound internet access to reach raw.githubusercontent.com.
Q: What is the "Default" dataset?
The default dataset is the version of your CV that visitors see at your root URL (/). On first install, CV Manager automatically creates a "Default" dataset from your CV data. You can change which dataset is the default at any time using the radio button in the Open modal.
Q: Are my edits saved automatically? Yes. Every change you make in the admin (adding, editing, deleting, reordering, toggling visibility) is automatically saved back to the active dataset after a short delay. The banner shows "Saving…" then "✓ Saved" to confirm.
Q: What happens when I "Load" a dataset? Loading a dataset switches your working copy to that dataset. Your previous edits were already auto-saved, so nothing is lost.
Q: Can visitors see my edits in real time? No. The public site serves the frozen default dataset, not your live edits. Visitors only see changes after auto-save writes them to the default dataset. If you're editing a non-default dataset, visitors won't see those changes at all until you set it as the default.
Q: Can visitors see my saved datasets?
Only if you make them public. Each dataset has a toggle in the Open modal. When set to public, that version becomes accessible at /v/slug on the public site (port 3001). Private datasets are only previewable from the admin interface.
Q: How do I share a specific CV version with someone? Open the Open... modal, toggle the dataset to public, then click the copy icon next to the slug URL. Share that link — it works on the public site without exposing your admin interface.
Q: Can I have multiple public versions at the same time?
Yes. You can make as many datasets public as you want. Each gets its own URL (e.g., /v/technical-cv-1, /v/marketing-cv-2). The main / page shows the default dataset.
Q: Can I delete the default dataset? No. The dataset currently selected as default (via the radio button) cannot be deleted. Set a different dataset as default first, then delete the old one.
Q: Will search engines index my versioned URLs?
By default, no — versioned pages get noindex, nofollow. To allow indexing, enable Index Versioned URLs in Settings → Advanced.
Q: How do I share my CV? Share the URL of your public server (port 3001). If you've set up a domain with Cloudflare Tunnel or a reverse proxy, share that domain. The root URL always shows your default dataset. You can also share specific versions using public versioned URLs (see Datasets section above).
Q: Will search engines index my CV?
By default, yes — the main public page includes proper meta tags, a sitemap, and robots.txt. To prevent indexing, change the Search Engine Indexing setting to "No Index" in Settings → Advanced. Public versioned URLs (/v/slug) are not indexed by default; enable Index Versioned URLs if you want them crawled.
Q: Can I add Google Analytics to my CV? Yes. Paste your tracking code in Settings → Advanced → Tracking Code. It's injected only on the public-facing pages.
Q: My changes aren't appearing on the public site?
The public site serves the default dataset, which is updated automatically when you edit in the admin. Try a hard refresh (Ctrl+Shift+R) on the public site. If running separate containers, make sure they share the same data volume.
Q: I'm getting a "port already in use" error?
Change the host port mapping in your Docker configuration. For example, map to 3010:3000 and 3011:3001. Do not change the PUBLIC_PORT environment variable — that's the internal container port.
Q: How do I back up my data?
Two options: use the Export button in the admin toolbar (exports JSON), or back up the data/ directory which contains the SQLite database and uploaded images.
Q: Profile picture isn't showing?
Make sure the image was uploaded through the admin interface. The file is stored at data/uploads/picture.jpeg. Check file permissions if running on Linux.
| Shortcut | Action |
|---|---|
Ctrl+P / Cmd+P |
Print / Save as PDF |
- GitHub Issues: github.com/vincentmakes/cv-manager/issues
- Support the project: ko-fi.com/vincentmakes