Modern CV generation system combining Typst templating with Python CLI - create multiple professional document variants from unified YAML data
Project description
resumyst โจ
Conjure the perfect CV with Typst magic - transform YAML data into professional documents.
๐ง Alpha Software: This project is in early development. Features may change and you might encounter bugs. Always review generated CVs before submitting them!
| Academic | Industry | Short |
|---|---|---|
A modern, hybrid CV generation system that combines the power of Typst templating with Python CLI convenience. Generate multiple CV variants from a single data source with intelligent filtering and beautiful typography.
Features
- ๐ฏ Multiple Variants: Academic, industry, and ultra-compact formats
- ๐ง Interactive Wizard: Guided project setup for beginners
- โก Live Preview: Real-time server with auto-reload
- โ Smart Validation: Helpful error messages and data checking
- ๐ Interactive Editor: Menu-driven content editing
- ๐จ Intelligent Filtering:
exclude_fromflags for precise control - ๐ Zero Config: Works out of the box, customize when needed
- ๐ฑ Modern Output: PDF and PNG generation
Installation
pip install resumyst
Prerequisites: Install Typst first.
Quick Start
Interactive Mode
# Create a new CV project with guided setup
resumyst init my-cv
cd my-cv
# Interactive content editing
resumyst edit
# Live preview with auto-reload
resumyst serve
# Build specific variant
resumyst build academic
Direct Mode
# Initialize with minimal setup
resumyst init my-cv --quick
cd my-cv
# Build all variants
resumyst build --all
# Validate data before building
resumyst validate
Make Commands (Traditional workflow)
make academic # Full academic CV
make industry # Industry-focused CV
make short # Ultra-compact CV
make all # Build all variants
make watch # Live development mode
make clean # Remove generated files
Architecture Overview
Single Source of Truth โ Template System โ Multiple Outputs**
data/ Template Layer Output
โโโ personal.yaml โโโโโโโโโโโโโโโโโโโ โโโ academic.pdf
โโโ config.yaml โโโโค Typst Templates โโโโโผโโ industry.pdf
โโโ sections/ โโโโค + Smart Filter โโโโโผโโ short.pdf
โโโ variants/ โโโโค System โโโโโโโ *.png
โโโโโโโโโโโโโโโโโโโ
Core Design Principles
- Configuration Hierarchy: Base config + variant overrides = final config
- Smart Filtering:
exclude_fromflags for precise content control - Template Modularity: Separate concerns across focused files
- Hybrid Architecture: Python CLI + direct Typst access
Project Structure
my-cv/
โโโ build/
โ โโโ cv.typ # 17-line build coordinator
โโโ data/
โ โโโ config.yaml # Typography, colors, layout
โ โโโ personal.yaml # Contact information
โ โโโ sections/ # Content modules
โ โ โโโ experience.yaml
โ โ โโโ education.yaml
โ โ โโโ publication.yaml
โ โ โโโ awards.yaml
โ โ โโโ skills.yaml
โ โ โโโ ...
โ โโโ variants/ # Variant-specific settings
โ โโโ academic.yaml # Complete academic CV
โ โโโ industry.yaml # Industry-focused
โ โโโ short.yaml # Ultra-compact
โโโ lib/ # Template system
โ โโโ template.typ # Main template logic
โ โโโ config.typ # Configuration merging
โ โโโ data.typ # Data loading & filtering
โ โโโ components.typ # Reusable UI components
โ โโโ renderers.typ # Section renderers
โ โโโ styles.typ # Typography utilities
โโโ out/ # Generated PDFs and PNGs
CLI Commands
Project Management
resumyst init <project> # Create new CV project
resumyst init --quick # Skip interactive wizard
resumyst clean # Remove generated files
Development Workflow
resumyst build <variant> # Build specific variant
resumyst build --all # Build all variants
resumyst build --no-png # Skip PNG generation
resumyst build --no-validate # Skip validation
resumyst validate # Check data integrity
resumyst serve # Live preview server
resumyst serve --port 8080 # Custom port
resumyst edit # Interactive content editor
Intelligent Filtering System
The exclude_from Flag
Control exactly where each item appears using simple flags:
# data/sections/publication.yaml
papers:
- title: "Advanced Research Methods"
authors: ["Alice Wonderland", "Eve Explorer"]
year: 2024
venue: "Conference on Marginally Useful Algorithms (CMUA)"
# No exclude_from = appears in ALL variants
- title: "Specialized Academic Methods"
authors: ["Alice Wonderland", "Grace Hopper-Like"]
year: 2023
venue: "International Journal of Unimportant Thoughts (IJUT)"
exclude_from: ["industry", "short"] # Academic only
- title: "Foundational Techniques"
authors: ["Alice Wonderland", "Oscar Algorithm"]
year: 2020
venue: "Proceedings of Dubious Research Excellence (PDRE)"
exclude_from: ["short"] # Skip in ultra-compact
Smart Sorting Logic
- Publications: Year priority + first-author boost
- Experience: Most recent positions first
- Education: Most recent degrees first
Variant Comparison
| Feature | Academic | Industry | Short |
|---|---|---|---|
| Target | Complete record | Practical focus | Ultra-compact |
| Publications | All papers | Max 5, filtered | Max 3, recent |
| Experience | All positions | All positions | Max 2, recent |
| Education | All degrees | All degrees | Max 2, recent |
| Details | Full bullets | Full bullets | Hidden |
| Links | โ Paper links | โ Clean | โ Print-ready |
| Author Lists | Complete | "et al." format | "et al." format |
| Spacing | Standard | Standard | 40% tighter |
| Use Case | Academic jobs | Industry roles | Networking events |
Data Format Examples
Personal Information
# data/personal.yaml
name:
full: "Dr. Alice Wonderland"
variants: ["Alice Wonderland", "A. Wonderland", "Wonderland, A."]
contact:
email: "alice.wonderland@university.eu"
website: "https://example.com/~alicewonderland"
location: "Berlin, Germany"
Publications
# data/sections/publication.yaml
papers:
- id: "paper_2024"
title: "Novel Methods for Data Analysis and Processing"
authors: ["Alice Wonderland", "Bob Builder", "Charlie Chocolate"]
year: 2024
venue: "International Conference on Negligible Research (ICNR)"
link: "https://example.com/paper1"
# Appears in all variants (no exclude_from)
- id: "niche_paper"
title: "Advanced Techniques for Specialized Applications"
authors: ["Alice Wonderland", "Max Planck-ish"]
year: 2023
venue: "Journal of Questionable AI Advances (JQAIA)"
link: "https://example.com/paper2"
exclude_from: ["industry", "short"] # Academic only
Experience
# data/sections/experience.yaml
positions:
- id: "current_position"
position: "Research Scientist"
company: "Tech Company"
start_date: "2023-01"
end_date: "present"
location: "Berlin, Germany"
details:
- "Led team developing novel AI architectures"
- "Published 5 papers in top-tier conferences"
- "Mentored 3 junior researchers"
Configuration System
Hierarchy: Base + Variant = Final Config
# data/config.yaml (base typography and styling)
typography:
font_size: 11pt
heading_color: rgb(0, 0, 128)
spacing: 1.2em
# data/variants/short.yaml (variant-specific overrides)
formatting:
compact_spacing: true # 40% reduced spacing
hide_details: true # Remove bullet points
include_paper_links: false # Clean, print-ready
filters:
publications:
max_entries: 3 # Only top 3 papers
experience:
max_entries: 2 # Only 2 most recent
Advanced Features
Live Preview Server
resumyst serve
# โ Opens http://localhost:8000
# โ Auto-reloads on file changes
# โ Serves PDFs with proper headers
# โ File watcher monitors data/ directory
Interactive Editor
resumyst edit
# โ Menu-driven interface for editing CV content
# โ Built-in validation with helpful error messages
# โ Rich terminal UI with color and formatting
Validation System
resumyst validate
# โ Comprehensive YAML structure validation
# โ Checks required fields and data types
# โ Helpful error messages with file locations
# โ Validates all sections and configurations
Template System Details
Clean Architecture
template.typ: Main template combining section renderersdata.typ: Data loading with intelligent filteringconfig.typ: Simple configuration mergingrenderers.typ: Section-specific rendering logiccomponents.typ: Reusable UI elementsstyles.typ: Typography and formatting utilities
Section Configuration
// Single source of truth in template.typ
let sections_config = (
awards: ("Awards & Scholarships", render-awards),
education: ("Education", render-education),
experience: ("Experience", render-experience),
publication: ("Publications", render-publications),
// ... other sections
)
Python CLI Architecture
Built with modern Python practices:
- Click: Command-line interface framework
- Rich: Beautiful terminal output and progress indicators
- PyYAML: Configuration and data file parsing
- Watchdog: File system monitoring for live reload
- Type Hints: Full type safety with Python 3.10+ syntax
Key Components
cli.py: Main command interfacewizard.py: Interactive project setupvalidator.py: Comprehensive data validationserver.py: Live preview HTTP servereditor.py: Interactive content editing
Troubleshooting
Build Errors
# Check YAML syntax
resumyst validate
# Detailed error output
resumyst build academic --no-validate 2>&1 | head -20
# Test Typst directly
typst compile build/cv.typ --input variant=academic
Common Issues
Empty sections:
- Check
exclude_fromflags aren't too restrictive - Verify section names match between data and config files
Missing content:
- Ensure required fields are present (run
resumyst validate) - Check variant filter settings (max_entries, date ranges)
Styling problems:
- Confirm Typst packages are installed (
@preview/fontawesome,@preview/datify) - Verify config.yaml syntax with a YAML validator
Server issues:
- Check port availability (default 8000)
- Ensure file permissions allow reading data/ directory
Extending the System
Adding New Sections
- Create YAML data file in
data/sections/new_section.yaml - Add renderer function to
lib/renderers.typ - Register in
sections_configdictionary inlib/template.typ - Add to section order in variant configs
Custom Variants
- Create new variant file in
data/variants/custom.yaml - Define filtering rules and formatting options
- Build with
resumyst build custom
Template Customization
- Modify
lib/styles.typfor typography changes - Edit
lib/components.typfor UI elements - Customize
lib/renderers.typfor section-specific formatting
Development
Running from Source
git clone https://github.com/guerrantif/resumyst.git
cd resumyst
pip install -e .
resumyst --help
Project Standards
- Python 3.10+: Modern type hints with built-in union syntax
- Type Safety: Full type annotations throughout
- Rich Output: Colored terminal interfaces with progress indicators
- Error Handling: Comprehensive validation with helpful messages
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Add tests if applicable
- Test all variants:
make all - Submit a pull request
License
MIT License - see LICENSE file for details.
Built with โค๏ธ using Typst and modern Python
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file resumyst-0.1.1a1.tar.gz.
File metadata
- Download URL: resumyst-0.1.1a1.tar.gz
- Upload date:
- Size: 5.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.32.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eaf49e2a237b70addbf43071041f44f8509c545f26dd0980908e01c0f7218861
|
|
| MD5 |
12281e99a6dff3acf1df4cdcf9aa4c4c
|
|
| BLAKE2b-256 |
1d9b04fc6771b9b997ac3a630fab31eba641eda4fc9b852053c7bb18e340e41f
|
File details
Details for the file resumyst-0.1.1a1-py3-none-any.whl.
File metadata
- Download URL: resumyst-0.1.1a1-py3-none-any.whl
- Upload date:
- Size: 33.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.32.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a47839a06be4fa9c2a7e2876daab95ae8d16cba8e065ebba78310a17cf687592
|
|
| MD5 |
e26fc0abae6ce920bff7629a2b86d1e2
|
|
| BLAKE2b-256 |
b3569c6aa3647664362e81962ab663111fce2745d280cb25b2e3eddf209107cd
|