Files
rendercv/docs/developer_guide/project_management.md
Sina Atalay 5cc5fbdf9e Massive Refactor: Architecture Redesign and Technical Debt Cleanup (#528)
* Rename `data` folder with schema

* Start refactoring data models

* Work on entry models

* Keep working on entries

* Keep working on data models

* Push old data files

* Keep working on data models

* First draft of schema.cv

* Keep working on schema

* Keep working on schema

* Improve schema.models

* Keep working on rendercv.schema

* Work on schema.design

* Keep working on rendercv.schema

* Complete variant_class_generator

* Keep working rendercv.schema

* Keep working on rendercv.schema

* Final touches to rendercv.schema

* Improve json schema descriptions in rendercv.schema

* Start working on rendercv.schema tests

* Keep implementing rendercv.schema tests

* Add more tests for rendercv.schema

* Improve rendercv.schema

* Improve docstrings and comments in rendercv.schema

* Implement better pydantic error handling in `rendercv.schema`

* Improve variant class system

* Fix rendercv.schema tests

* Start working on rendercv.templater

* Update template names

* Switching to new rendercv typst template soon

* Work on new templater

* Rename renderer with renderer_old

* Don't use utils in rendercv.schema

* Complete connections

* Update renderer folder structure

* Work on new renderer

* Work on new renderer

* Date processing on new renderer

* Improve date processing, support multiple emails, phones, and websites

* Improve markdown to Typst

* Complete entry template processing

* Time span computation in new renderer

* Better entry templates

* Setup new templates

* Improve rendercv.schema

* Start adding tests for rendercv.renderer

* New markdown parser!

* Improve markdown to typst conversion

* Finalize markdown parser

* Add new test files for rendercv.renderer

* Fix cv and connections

* Add connections test

* Improve connection tests

* Improve entry templates

* Add model processor tests

* Improve templater

* Rename old folders

* Improve schema

* Add file generation logic to renderer

* Fix naming issues

* Fix schema tests

* Add path type tests

* Add font family and typst dimension type tests

* Rename old tests

* Fix design tests

* Start integration testing of renderer

* Improve entry tempates

* Handle nested highlights properly

* Finalize Typst preamble template

* Start working on new CLI

* Remove old test files

* Implement override dictionary in new schema

* Start working on new CLI

* Better prints on render command

* New structure

* New render printer

* Add all the commands to new CLI

* Work on new command in new cli

* Improve new command

* Add error handler to new cli

* Work on create theme command

* Complete create theme command

* Remove old source files

* Improve exceptions

* Create new docs

* Add writing tests guide

* Fix cli printer and write tests

* Test copy templates

* Add app tests

* Bring back accidentally removed files

* Imporve cli and tests

* Fix path issues

* Improve

* Improve

* Add reference file comparison tests

* Fix path resolver

* Start working on test_pdf_png

* Implement comparison of multiple files (png)

* Start testing typst

* Fix templating issues

* Fix header and entry templates issues

* Implement short second rows

* Fix date issues

* Fix nested bullets and add summary

* Update testdata

* Implement footer

* Update testdata

* Reimagined design and locale schema, first iteration

* Reimagined design and locale second iteration

* Update design and locale schemas

* Adapt templater to the new design and locale

* Fix tests

* Update lib.typ and testdata for the new locale and design

* Implement proper tests with all combinations of entries

* Remove some docstrings

* fix connections logic

* Improve

* Start working on examples

* Update testdata

* Fix long second row issue

* fix templating issues

* Fix lib.typ issues

* Update testdata

* Fix clean_trailing_parts

* Update test cv

* update test cv

* Update theme defaults

* update schema and fix moderncv

* Fix moderncv issues

* Update testdata

* Update testdata and examples

* Fix issues about photo

* Fix typst photo path issues

* improve entry templates from yaml

* add new locale

* Rename writing tests doc

* Update writing tests

* Improve tests

* Add more cli tests

* Increase test coverage

* Rename variant pydantic model generator

* Improve tests

* Update testdata and improve tests

* Format, fix pre-commit errors

* Fix scripts and update entry figures

* Improve tests

* Write docstrings of schema

* Write schema docstrings

* Setup api reference

* Start working on new docs

* Work on docs

* Improve progress panel of render command

* Finalize new docs index

* Complete CLI docs

* Work on YAML input structure page

* Finalize user guide

* Start working on developer guide

* Improve api reference

* Improve developer guide

* Improve developer guide

* Improve developer gide

* Improve developer guide

* Improve developer guide

* Update developer guide

* Improve developer guide

* Improve developer guide

* Improve developer guide

* Developer guide first draft

* update developer guide

* Update examples

* Update testdata

* Handle wrong installation (rendercv instead of rendercv[full])

* Remove unnecessary files

* Write set up vs code page

* Update README.md

* Change docs description

* Compress design options gif

* minor updates

* Polish all the json schema descriptions

* Update testdata and examples

* Remove some emdashed from docs

* Add whatsapp support

* Add TestEscapeTypstCharacters to tests

* Implement custom connections

* Add page break before sections feature

* Revert page break before sections feature

* Rebase to main

* Fix social network tests, update schema
2025-12-09 17:03:56 +03:00

6.4 KiB

toc_depth
toc_depth
3

Project Management

What is "Project Management"?

When you look at RenderCV's repository, you see:

.
├── src/                     ← The actual RenderCV code
├── pyproject.toml           ← Project configuration
├── justfile                 ← Command shortcuts
├── scripts/                 ← Supplementary Python scripts
├── .pre-commit-config.yaml  ← Pre-commit configuration
└── uv.lock                  ← Dependency lock file

Project management is everything except src/. It's all the infrastructure that lets us:

  • Share RenderCV with users (pip install rendercv)
  • Manage dependencies consistently
  • Automate testing, building, and releases
  • Ensure reproducibility across machines and time

Why Can't We Just Write Python Code?

RenderCV is a Python project. The actual source code lives in src/rendercv/. Why do we need all these other files - pyproject.toml, uv.lock, justfile, .github/workflows/, etc.?

Because code alone doesn't solve two critical problems: distribution and development environment.

Problem 1: Distribution

How do users get your code?

You could tell them "download these files, install dependencies with pip install -r requirements.txt, and run them with python main.py". But users want pip install rendercv and have it work instantly with rendercv command.

This requires: Packaging your code and uploading to PyPI (Python Package Index).

Problem 2: Development Environment

You have the source code. Two developers want to contribute.

Developer A installs today with Python 3.11 and gets pydantic==2.10. Tests pass. Developer B installs one month later with Python 3.12 and gets pydantic==2.11 which has breaking changes. Tests fail. "Works on A's machine" but not B's. B asks: "What formatter do you use? What settings? How do I run tests?"

What needs to happen: Everyone gets the same Python version, same package versions (locked, not "latest"), same development tools with same settings. All in one command.

This requires: Locking dependencies (Python version, every package, frozen in time), configuring all tools in one place, and automating setup so it's identical for everyone.

The Solution

All those files you see in the repository (pyproject.toml, uv.lock, justfile, and more) work together to solve these problems. The result:

For users:

pip install rendercv

Works instantly. Every time. Anywhere. All dependencies installed automatically.

For developers (Setup):

just sync

One command. Identical environment for everyone: correct Python version, exact dependency versions, all dev tools ready. Works today, works in 2027. Bug from 6 months ago? Check out that commit, run just sync, exact environment recreated.

The rest of this guide explains what each file does.

Files and Folders in the Root

pyproject.toml

The project definition file. This is the standard way to configure a Python project.

This file defines:

  • Project metadata (name, version, description)
  • Dependencies (what packages RenderCV needs)
  • Entry points (makes rendercv a command)
  • Build configuration (how to package RenderCV)
  • Tool settings (ruff, pyright, pytest, etc.)

Open the file to see the full configuration with detailed comments.

justfile

just is a command runner, a tool that lets you define terminal commands in a file and run them easily.

Why do we need it? During development, you constantly run commands like "run tests with coverage", "format all code", "build and serve docs". Without standardization:

  • Everyone types different commands with different options
  • You have to remember long command strings

The justfile solves this: define each command once, and everyone runs the same thing:

just test           # Runs pytest with the right options
just format         # Formats code with ruff
just serve-docs     # Builds and serves documentation locally
just update-schema  # Regenerates schema.json

This is why just sync works so elegantly. It's a standardized command that does exactly the same thing for everyone.

scripts/

Python scripts that automate some repetitive tasks.

Why do we need it? Some tasks need to be done repeatedly but are too complex for simple shell commands:

  • update_schema.py: Generate schema.json from pydantic models
  • update_examples.py: Regenerate all example YAML files and PDFs in examples/ folder
  • create_executable.py: Build standalone executable of RenderCV

These scripts are called by just commands (just update-schema, just update-examples, etc.).

.pre-commit-config.yaml

Configuration file for pre-commit, a tool that runs code quality checks.

Why do we need it? Pre-commit's value is fast CI/CD. pre-commit.ci (free for open-source projects) automatically runs checks on every push and pull request. Forgot to format your code? The workflow fails, making it immediately obvious. Without pre-commit, we'd have to set up our own workflow to run these checks.

Run just check locally to check your code before committing. We don't use pre-commit as git hooks (that run before every commit). We prefer manual checks when ready.

uv.lock

A dependency lock file. This is a record of the exact version of every package RenderCV uses (including dependencies of dependencies).

Why do we need it? Remember development environment problem? This file solves it. When you run just sync, uv reads this file and installs the exact same versions everyone else has, not "the latest version", but "the exact version that's known to work". Without this file, developers would get different package versions and environments would drift apart.

Never edit this manually. uv generates and updates it automatically. Always commit it to git. That's how everyone gets identical environments.

Learn More

See the uv documentation for more information on project management.