# Mike Eberlein — Resume

Single-page resume for Mike Eberlein (Engineering Manager — automotive infotainment / software-defined vehicles).

**Single content source: `resume.yaml`.** Two renderers (LaTeX and ODT) read the YAML and emit format-specific files. DOCX is produced by converting the ODT with LibreOffice. Edit `resume.yaml`; the generated `.tex` should not be edited by hand.

Two flavors are produced from the same YAML:

- **Short** — condensed single-page resume. Outputs: `MikeEberlein_Resume.{tex,pdf,odt,docx}`.
- **Detailed** — longer version with extra bullets / roles / jobs. Outputs: `MikeEberlein_Resume_Detailed.{tex,pdf,odt,docx}`.

## Files

| File | Purpose |
| --- | --- |
| `resume.yaml` | **Source of truth.** Edit this. |
| `render_tex.py` | YAML → `MikeEberlein_Resume.tex`. LaTeX preamble lives inline. |
| `render_odt.py` | YAML → `MikeEberlein_Resume.odt`. ODT styles live inline. |
| `MikeEberlein_Resume.tex` | Generated. Do not edit by hand. |
| `MikeEberlein_Resume.pdf` | Built from `.tex` via `pdflatex`. |
| `MikeEberlein_Resume.odt` | Built from YAML via `render_odt.py`. |
| `MikeEberlein_Resume.docx` | Built from `.odt` via LibreOffice. |
| `Makefile` | Build orchestration. |
| `fonts/` | Official Google Roboto font repo. Variable fonts at the top level; individual weights under `fonts/static/`. License in `fonts/OFL.txt`. |

## Build

```bash
make            # short PDF (default)
make odt        # short ODT
make docx       # short DOCX
make short      # short PDF + ODT + DOCX
make detailed   # detailed PDF + ODT + DOCX
make all        # both flavors, every format
make clean      # remove TeX aux files
make distclean  # also remove generated PDF/ODT/DOCX/TEX
```

Run the renderers directly if you want a custom output path:

```bash
python3 render_tex.py --level=full --output=foo.tex
python3 render_odt.py --level=short --output=foo.odt
```

Required system packages (Debian/Ubuntu):

```bash
sudo apt install texlive-latex-recommended texlive-latex-extra texlive-fonts-extra
sudo apt install libreoffice                  # for the .docx output
sudo apt install python3-yaml                 # for the renderers (usually pre-installed)
```

## Editing

Open `resume.yaml`. The schema:

```yaml
header:    { name, tagline, email }
summary:   <paragraph>
experience:
  - company, dates
    roles:
      - title, dates
        # either:
        bullets: [ ... ]
        # or, for nested sub-roles (used for one role with concurrent focus areas):
        subroles:
          - title, dates
            bullets: [ ... ]
education:
  - school, dates, bullets
certifications: [ ... ]
```

### Short vs. Detailed

Any list field above can have a sibling list with the `_full` suffix. The base list always renders. The `_full` list is appended only in `--level=full`. Examples:

```yaml
bullets:                # always shown
  - Short bullet.
bullets_full:           # appended in detailed only
  - Extra detail bullet.

subroles:
  - { title: Always-shown sub-role, ... }
subroles_full:
  - { title: Detailed-only sub-role, ... }

experience: [ ... ]
experience_full:        # an entire extra job, only in detailed
  - { company: ..., dates: ..., roles: [ ... ] }
```

Same convention works on `roles_full`, `education_full`, `certifications_full`.

After editing, `make all` rebuilds both flavors in every format from the same YAML.

## Layout / styling

Both renderers contain their own styling code (LaTeX preamble in `render_tex.py`, ODT XML styles in `render_odt.py`). Tweak typography, colors, spacing, etc. there. The two renderers aim for visual parity but are not byte-identical — pdflatex and LibreOffice differ on font metrics and line breaking.

The DOCX is produced from the ODT (LibreOffice's ODT→DOCX conversion is essentially lossless because the formats are siblings). DOCX fidelity is therefore nearly identical to ODT.
