Skip to content
northguildPublic

About

A mainframe-inspired terminal program to explore a candidate's cv

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

run-cv

A mainframe-inspired terminal CV viewer built with Node.js, React, and Ink.

Terminal UI

Features

  • 📟 Retro Terminal UI: Green-screen aesthetic with keyboard navigation.
  • 📝 Markdown Driven: CV content is managed entirely via Markdown files.
  • 📂 Multi-Human Support: Easily switch between different profiles.

Usage

  • 📟 MacOS/Linux: Just run npx run-cv
  • 🪟 Windows: Ensure Node.js is installed, then run npx run-cv in your terminal.
npx run-cv <name>

Development

To run the project locally:

pnpm install
pnpm run dev
# or for a specific profile
pnpm run dev <name>

Usage

To run the CV for a specific human:

pnpm run dev <name>

Adding a New Human

  1. Create a folder in src/humans/<name>.
  2. Create an introduction.md file. This acts as the manifest and entry point. (PDF generator now reads from this file; pdf-intro.md is deprecated.)
    • Frontmatter may include a skills: field (comma-separated) and you can place <!-- Skills badges --> somewhere in the body to have them rendered as retro badges in the terminal and as styled labels above the intro text in the PDF.
---
name: Your Name
role: Your Role
menu:
  - label: Work Experience
    file: experience/index.md
  - label: Contact
    file: contact.md
---

# SYSTEM ONLINE

Welcome to the terminal.
  1. Add the referenced markdown files (e.g., experience.md, contact.md) in the same folder.

PDF Generation

You can generate a PDF version of a CV using the gen-pdf script. It will include the text from introduction.md at the top; separate pdf-intro.md files are no longer required.

pnpm run gen-pdf <name> [-- --theme <theme-name>]
  • <name>: The name of the human.
  • --theme <theme-name>: (Optional) Specify a theme. Defaults to vintage.

A companion utility, gen-json, will export the same CV content as a plain JSON file (frontmatter plus markdown body). It ignores any UI/menu fields so you can consume it from other tools.

pnpm run gen-json <name> [-- --all]

Available themes:

  • vintage
  • terminal

Each theme supports a handful of CSS variables you can tweak in styles/themes/<theme>/base.css. A new variable --list-item-spacing controls vertical distance between <li> elements (default 1 mm), so PDFs render without excessive gaps.

Example:

# Generate a PDF for <name> with the 'terminal' theme
  pnpm run gen-pdf <name> -- --theme terminal

NPM Publishing & Versioning Guide

We use Semantic Versioning (SemVer) to manage releases. Instead of manually editing package.json, use the following workflow to keep the repository tags, GitHub Releases, and the npm registry in sync.

1. Bump the version

Start from a clean, up-to-date main (git pull, git status). Decide which part of the version number ($X.Y.Z$) to increment:

Command Result Use Case
npm version patch 0.0.x → 0.0.x+1 Bug fixes, style tweaks, or minor text updates.
npm version minor 0.x.0 → 0.x+1.0 New features (e.g., a new PDF theme) that are backward-compatible.
npm version major x.0.0 → x+1.0.0 Breaking changes (e.g., changing the data tape structure or CLI API).

Note: These commands update package.json, create a git commit, and create an annotated git tag (vX.Y.Z). Use npm version, not pnpm version — pnpm rejects the -m flag. %s in the message is replaced with the new version.

Example:

npm version patch -m "Release v%s: Fixed header spacing and updated blah theme"

2. Sync to GitHub (with tags)

git push origin main --follow-tags

--follow-tags only pushes annotated tags. If a tag was created by hand with git tag vX.Y.Z (lightweight), push it explicitly: git push origin vX.Y.Z. Verify with git ls-remote --tags origin.

3. Publish to npm

pnpm login
pnpm publish

4. Create the GitHub Release

gh release create vX.Y.Z --verify-tag --title vX.Y.Z --generate-notes --latest

Or in the browser: Releases → Draft a new release → select the pushed tag → Generate release notes → Publish release.

About

A mainframe-inspired terminal program to explore a candidate's cv

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages