Skip to content

Contributing a Theme

All themes live in the open-source devresume-themes repo. Anyone can contribute, no access to the main devResume backend required.

You need Go 1.24 or newer (for the preview CLI) and git.

Terminal window
git clone https://github.com/STACK25/devresume-themes.git
cd devresume-themes/cli
go run .

The last command starts a local preview server at http://localhost:7171 that live-reloads on every CSS, YAML, or font edit. It renders with the real bundled fonts so what you see matches production exactly.

Full CLI flags and live-reload details are in the CLI README.

Four templates are available: classic, compact, modern, technical. Choose the one whose layout is closest to what you want. You do not create a new template, only a new variant inside an existing template.

2. Copy an existing variant as a starting point

Section titled “2. Copy an existing variant as a starting point”
Terminal window
cp classic/themes/navy.css classic/themes/my-theme.css

Variant CSS files only define colors, borders, and accents. Layout comes from the parent template’s HTML. See any existing variant for the full list of CSS variables the templates consume.

In one terminal:

Terminal window
cd cli && go run .

Edit classic/themes/my-theme.css in your editor. The browser at http://localhost:7171 reloads on every save.

To switch theme while iterating, edit the theme: field in _examples/sample.yaml:

theme: classic-my-theme

The watcher picks up YAML changes and reloads — no CLI restart needed.

Make sure your variant renders cleanly with every section type: text, experience, skills, projects, education, certifications, languages. The bundled _examples/sample.yaml already covers all seven.

  • Branch name: theme/<your-variant-name>
  • Commit message: feat(classic): add "<variant>" theme (or the template you chose)
  • Include a screenshot of the rendered sample YAML in the PR description

Renovate auto-merges theme repo updates into the main devResume backend, so your variant will be live on devresume.io shortly after the PR is merged.

  • Respect the existing CSS variable API. Templates define variables like --color-accent, --color-text, --bg-primary. Override those; do not re-style elements directly, or you will break when the template HTML changes.
  • Keep contrast accessible. Aim for WCAG AA (contrast ratio 4.5:1 for body text).
  • Test at print sizes. The resume is generally rendered at A4 / Letter in PDF. Open the CLI preview at 8.5” wide and confirm text, spacing, and borders all look right.
  • No external assets. Keep everything inline in the CSS. No @import, no external fonts. Fonts come from the bundled font pipeline.
  • Clear visual hierarchy. Name > title > sections > items. A reader should scan the resume and know where to look for each piece.
  • Readable body text. Size, line height, and contrast matter more than decoration.
  • Consistent spacing. Gutters, margins, and paddings should feel intentional across every section.
  • Works on both screen and paper. Remember the final artifact is usually a PDF.