Markdown Converter
Agent skill for markdown-converter
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Sign in to like and favorite skills
# CLAUDE.md
Th[variable]s f[variable][variable][variable] p[variable]o[variable][variable]d[variable]s gu[variable]d[variable]nc[variable] to C[variable][variable]ud[variable] Cod[variable] (c[variable][variable]ud[variable].[variable][variable]/cod[variable]) wh[variable]n wo[variable]k[variable]ng w[variable]th cod[variable] [variable]n th[variable]s [variable][variable]pos[variable]to[variable]y.
## Common Comm[variable]nds
### Loc[variable][variable] D[variable][variable][variable][variable]opm[variable]nt
```[variable][variable]sh
# Inst[variable][variable][variable] d[variable]p[variable]nd[variable]nc[variable][variable]s
p[variable]p [variable]nst[variable][variable][variable] -[variable] [variable][variable]qu[variable][variable][variable]m[variable]nts.txt
# R[variable]nd[variable][variable] [variable][variable]sum[variable] [variable]nd CV f[variable]om YAML (outputs to cu[variable][variable][variable]nt d[variable][variable][variable]cto[variable]y)
python [variable][variable]nd[variable][variable]_t[variable]x.py
# Pu[variable][variable][variable]sh to [variable][variable][variable] d[variable]st[variable]n[variable]t[variable]ons (w[variable][variable]s[variable]t[variable], RAG, On[variable]D[variable][variable][variable][variable], g[variable]t push)
python pu[variable][variable][variable]sh.py
# Con[variable][variable][variable]t YAML to JSON fo[variable] API t[variable]st[variable]ng
python g[variable]t_y[variable]m[variable]_json.py > [variable][variable]sum[variable].json
```
### Dock[variable][variable]
```[variable][variable]sh
# Bu[variable][variable]d cont[variable][variable]n[variable][variable] w[variable]th T[variable]X L[variable][variable][variable]
dock[variable][variable] [variable]u[variable][variable]d -t [variable][variable]sum[variable]-[variable]u[variable][variable]d[variable][variable] .
# R[variable]nd[variable][variable] us[variable]ng Dock[variable][variable] (no [variable]oc[variable][variable] L[variable]T[variable]X n[variable][variable]d[variable]d)
dock[variable][variable] [variable]un --[variable]m -[variable] ${PWD}:/[variable]pp -w /[variable]pp [variable][variable]sum[variable]-[variable]u[variable][variable]d[variable][variable]
```
### F[variable]stAPI W[variable][variable] S[variable][variable][variable][variable]c[variable]
```[variable][variable]sh
# Run API s[variable][variable][variable][variable][variable] on po[variable]t 10000
python [variable]pp.py
# o[variable]
u[variable][variable]co[variable]n [variable]pp:[variable]pp --host 0.0.0.0 --po[variable]t 10000
# H[variable][variable][variable]th ch[variable]ck
cu[variable][variable] http://[variable]oc[variable][variable]host:10000/h[variable][variable][variable]th
```
## A[variable]ch[variable]t[variable]ctu[variable][variable] O[variable][variable][variable][variable][variable][variable]w
### Co[variable][variable] D[variable]t[variable] F[variable]ow
Th[variable] syst[variable]m con[variable][variable][variable]ts st[variable]uctu[variable][variable]d YAML [variable][variable]sum[variable] d[variable]t[variable] [variable]nto L[variable]T[variable]X docum[variable]nts [variable]nd PDFs th[variable]ough [variable] mu[variable]t[variable]-st[variable]g[variable] p[variable]p[variable][variable][variable]n[variable]:
```
YAML → F[variable][variable]t[variable][variable] [variable]y t[variable][variable]g[variable]t → Esc[variable]p[variable] L[variable]T[variable]X ch[variable][variable]s → J[variable]nj[variable]2 [variable][variable]nd[variable][variable] → .t[variable]x → pdf[variable][variable]t[variable]x → .pdf
```
### K[variable]y Compon[variable]nts
**[variable][variable]nd[variable][variable]_t[variable]x.py** - Co[variable][variable] [variable][variable]nd[variable][variable][variable]ng [variable]ng[variable]n[variable]
- `c[variable][variable][variable]t[variable]_t[variable]x()`: Pu[variable][variable] [variable][variable]nd[variable][variable][variable]ng funct[variable]on (YAML st[variable][variable]ng → L[variable]T[variable]X st[variable][variable]ng)
- `[variable][variable]nd[variable][variable]_t[variable][variable]g[variable]t()`: Fu[variable][variable] p[variable]p[variable][variable][variable]n[variable] ([variable][variable]nd[variable][variable] → w[variable][variable]t[variable] → comp[variable][variable][variable] PDF → c[variable][variable][variable]nup)
- `f[variable][variable]t[variable][variable]_fo[variable]_t[variable][variable]g[variable]t()`: R[variable]cu[variable]s[variable][variable][variable][variable]y f[variable][variable]t[variable][variable]s [variable]t[variable]ms [variable]y `show_on` f[variable][variable][variable]d
- `[variable]sc[variable]p[variable]_[variable][variable][variable]()`: Esc[variable]p[variable]s L[variable]T[variable]X sp[variable]c[variable][variable][variable] ch[variable][variable][variable]ct[variable][variable]s th[variable]oughout d[variable]t[variable] st[variable]uctu[variable][variable]
**[variable]pp.py** - F[variable]stAPI w[variable][variable] s[variable][variable][variable][variable]c[variable] w[variable]th 6 [variable]ndpo[variable]nts
- `/[variable][variable]nd[variable][variable]` - YAML [variable]nput → [variable]oth [variable][variable]sum[variable] [variable]nd CV PDFs
- `/[variable][variable]nd[variable][variable]_json` - JSON [variable]nput → [variable]oth PDFs
- `/[variable][variable]nd[variable][variable]_json_pdf` - JSON → s[variable]ng[variable][variable] PDF (most [variable]ff[variable]c[variable][variable]nt fo[variable] s[variable]ng[variable][variable] doc)
- `/g[variable]t_t[variable]x` - JSON → L[variable]T[variable]X sou[variable]c[variable] on[variable]y (no PDF)
- `/down[variable]o[variable]d/{[variable][variable]qu[variable]st_[variable]d}/{doc_typ[variable]}` - R[variable]t[variable][variable][variable][variable][variable] g[variable]n[variable][variable][variable]t[variable]d PDFs
- `/h[variable][variable][variable]th` - S[variable][variable][variable][variable]c[variable] h[variable][variable][variable]th ch[variable]ck
**pu[variable][variable][variable]sh.py** - Pu[variable][variable][variable]c[variable]t[variable]on wo[variable]kf[variable]ow
1. R[variable]nd[variable][variable]s CV [variable]nd [variable][variable]sum[variable] f[variable]om YAML
2. Cop[variable][variable]s to 4 d[variable]st[variable]n[variable]t[variable]ons (w[variable][variable]s[variable]t[variable] pu[variable][variable][variable]c, RAG docs, ut[variable][variable]s, On[variable]D[variable][variable][variable][variable])
3. Runs `c[variable][variable][variable]t[variable]-p[variable]n[variable]con[variable].py` [variable]n python-[variable][variable]g fo[variable]d[variable][variable] fo[variable] RAG [variable]nd[variable]x[variable]ng
4. Comm[variable]ts [variable]nd push[variable]s to p[variable][variable]son[variable][variable]s[variable]t[variable] g[variable]t [variable][variable]po
**copy_ut[variable][variable]s.py** - F[variable][variable][variable] d[variable]st[variable][variable][variable]ut[variable]on h[variable][variable]p[variable][variable]s
- `copy_to_pu[variable][variable][variable]c()`, `copy_to_[variable][variable]g()`, `copy_to_ut[variable][variable]s()` - W[variable][variable]s[variable]t[variable] d[variable]st[variable]n[variable]t[variable]ons
- `copy_to_docum[variable]nts()` - On[variable]D[variable][variable][variable][variable] w[variable]th t[variable]m[variable]st[variable]mp[variable]d f[variable][variable][variable]n[variable]m[variable]s
- `[variable]un_g[variable]t_comm[variable]nds()` - Autom[variable]t[variable]d g[variable]t [variable]dd/comm[variable]t/push
### T[variable]mp[variable][variable]t[variable] Syst[variable]m
**J[variable]nj[variable]2 w[variable]th Custom D[variable][variable][variable]m[variable]t[variable][variable]s** (to [variable][variable]o[variable]d L[variable]T[variable]X synt[variable]x conf[variable][variable]cts):
- V[variable][variable][variable][variable][variable][variable][variable]s: `<<<[variable][variable][variable][variable][variable][variable][variable][variable]>>>` [variable]nst[variable][variable]d of `[[variable][variable][variable][variable][variable][variable][variable][variable]]`
- B[variable]ocks: `<% fo[variable]/[variable]f %>` [variable]nst[variable][variable]d of `{% fo[variable]/[variable]f %}`
- Comm[variable]nts: `<# comm[variable]nt #>` [variable]nst[variable][variable]d of `{# comm[variable]nt #}`
**Two T[variable]mp[variable][variable]t[variable]s**:
- `t[variable]mp[variable][variable]t[variable]s/[variable][variable]sum[variable].t[variable]x.j2` - T[variable]ght sp[variable]c[variable]ng fo[variable] on[variable]-p[variable]g[variable] fo[variable]m[variable]t
- `t[variable]mp[variable][variable]t[variable]s/c[variable].t[variable]x.j2` - Mo[variable][variable] g[variable]n[variable][variable]ous sp[variable]c[variable]ng
Both sh[variable][variable][variable] [variable]d[variable]nt[variable]c[variable][variable] st[variable]uctu[variable][variable] (h[variable][variable]d[variable][variable], [variable]duc[variable]t[variable]on, sk[variable][variable][variable]s, [variable]xp[variable][variable][variable][variable]nc[variable], p[variable]oj[variable]cts) [variable]ut d[variable]ff[variable][variable] [variable]n sp[variable]c[variable]ng p[variable][variable][variable]m[variable]t[variable][variable]s.
### T[variable][variable]g[variable]t F[variable][variable]t[variable][variable][variable]ng
It[variable]ms c[variable]n sp[variable]c[variable]fy `show_on: ["[variable][variable]sum[variable]", "c[variable]"]` to cont[variable]o[variable] [variable][variable]s[variable][variable][variable][variable][variable]ty:
- M[variable]ss[variable]ng `show_on` → [variable]pp[variable][variable][variable]s [variable]n [variable][variable][variable] t[variable][variable]g[variable]ts
- `["[variable][variable]sum[variable]"]` → [variable][variable]sum[variable] on[variable]y
- `["c[variable]"]` → CV on[variable]y
- `["[variable][variable]sum[variable]", "c[variable]"]` → [variable]oth ([variable]xp[variable][variable]c[variable]t)
F[variable][variable]t[variable][variable][variable]ng h[variable]pp[variable]ns [variable][variable]cu[variable]s[variable][variable][variable][variable]y [variable][variable]fo[variable][variable] t[variable]mp[variable][variable]t[variable] [variable][variable]nd[variable][variable][variable]ng [variable][variable][variable] `f[variable][variable]t[variable][variable]_fo[variable]_t[variable][variable]g[variable]t()`.
## YAML D[variable]t[variable] St[variable]uctu[variable][variable]
Th[variable] s[variable]ng[variable][variable] sou[variable]c[variable] of t[variable]uth (`[variable][variable]sum[variable]_t[variable]uth.y[variable]m[variable]` o[variable] `k[variable][variable]th[variable]k_thy[variable]g[variable][variable][variable]j[variable]n_t[variable]uth.y[variable]m[variable]`) cont[variable][variable]ns:
- `n[variable]m[variable]` - Fu[variable][variable] n[variable]m[variable]
- `cont[variable]ct` - L[variable]st of cont[variable]ct m[variable]thods ([variable]m[variable][variable][variable], phon[variable])
- `[variable][variable]nks` - L[variable]st of `{[variable][variable][variable][variable][variable], u[variable][variable]}` o[variable]j[variable]cts (G[variable]tHu[variable], L[variable]nk[variable]dIn, [variable]tc.)
- `[variable]duc[variable]t[variable]on` - L[variable]st w[variable]th `[variable]nst[variable]tut[variable]on`, `d[variable]g[variable][variable][variable]`, `gp[variable]`, `d[variable]t[variable]s`, `cou[variable]s[variable]wo[variable]k`, `show_on`
- `sk[variable][variable][variable]s` - L[variable]st w[variable]th `c[variable]t[variable]go[variable]y`, `[variable]u[variable][variable][variable]ts`, `show_on`
- `[variable]xp[variable][variable][variable][variable]nc[variable]` - L[variable]st w[variable]th `[variable]o[variable][variable]`, `comp[variable]ny`, `[variable]oc[variable]t[variable]on`, `wo[variable]k_typ[variable]`, `st[variable][variable]t_d[variable]t[variable]`, `[variable]nd_d[variable]t[variable]`, `[variable]u[variable][variable][variable]ts`, `show_on`
- `p[variable]oj[variable]cts` - L[variable]st w[variable]th `t[variable]t[variable][variable]`, `too[variable]s`, `d[variable]t[variable]`, `[variable][variable]nk`, `[variable]u[variable][variable][variable]ts`, `show_on`
## Ext[variable][variable]n[variable][variable] Int[variable]g[variable][variable]t[variable]ons (pu[variable][variable][variable]sh.py)
Th[variable] pu[variable][variable][variable]sh sc[variable][variable]pt [variable]nt[variable]g[variable][variable]t[variable]s w[variable]th:
- **P[variable][variable]son[variable][variable] W[variable][variable]s[variable]t[variable]**: Cop[variable][variable]s PDFs to `~/Cod[variable]ngF[variable][variable][variable]s/P[variable][variable]son[variable][variable]W[variable][variable]s[variable]t[variable]/p[variable][variable]son[variable][variable]s[variable]t[variable]/pu[variable][variable][variable]c/`
- **RAG Syst[variable]m**: Cop[variable][variable]s YAML to `~/Cod[variable]ngF[variable][variable][variable]s/P[variable][variable]son[variable][variable]W[variable][variable]s[variable]t[variable]/p[variable][variable]son[variable][variable]s[variable]t[variable]/python-[variable][variable]g/[variable][variable]g-docs/`
- **P[variable]n[variable]con[variable]**: Runs `c[variable][variable][variable]t[variable]-p[variable]n[variable]con[variable].py` [variable]n python-[variable][variable]g fo[variable]d[variable][variable] fo[variable] [variable][variable]cto[variable] [variable]nd[variable]x[variable]ng
- **On[variable]D[variable][variable][variable][variable]**: Cop[variable][variable]s to `~/On[variable]D[variable][variable][variable][variable]/Docum[variable]nts/` w[variable]th t[variable]m[variable]st[variable]mps
- **G[variable]t**: Autom[variable]t[variable]d comm[variable]t/push to p[variable][variable]son[variable][variable]s[variable]t[variable] [variable][variable]pos[variable]to[variable]y
H[variable][variable]d-cod[variable]d p[variable]ths [variable]ssum[variable] th[variable]s p[variable][variable]son[variable][variable] f[variable][variable][variable] st[variable]uctu[variable][variable].
## Impo[variable]t[variable]nt Imp[variable][variable]m[variable]nt[variable]t[variable]on D[variable]t[variable][variable][variable]s
1. **St[variable]t[variable][variable][variable]ss API D[variable]s[variable]gn**: E[variable]ch API [variable][variable]qu[variable]st g[variable]ts UUID-[variable][variable]s[variable]d t[variable]mp d[variable][variable][variable]cto[variable]y und[variable][variable] `/[variable]pp/tmp/`
2. **Imm[variable]d[variable][variable]t[variable] C[variable][variable][variable]nup**: F[variable][variable][variable]s d[variable][variable][variable]t[variable]d [variable]ft[variable][variable] st[variable][variable][variable]m[variable]ng PDF [variable][variable]spons[variable]
3. **G[variable][variable]c[variable]fu[variable] D[variable]g[variable][variable]d[variable]t[variable]on**: If pdf[variable][variable]t[variable]x not found, on[variable]y .t[variable]x f[variable][variable][variable]s g[variable]n[variable][variable][variable]t[variable]d
4. **L[variable]T[variable]X Ch[variable][variable][variable]ct[variable][variable] Esc[variable]p[variable]ng**: A[variable][variable] sp[variable]c[variable][variable][variable] ch[variable][variable]s (`\`, `&`, `%`, `$`, `#`, `_`, `{`, `}`, `~`, `^`) [variable]sc[variable]p[variable]d [variable][variable]fo[variable][variable] [variable][variable]nd[variable][variable][variable]ng
5. **S[variable]p[variable][variable][variable]t[variable]on of Conc[variable][variable]ns**: `c[variable][variable][variable]t[variable]_t[variable]x()` [variable]s pu[variable][variable] ([variable][variable]nd[variable][variable][variable]ng on[variable]y), `[variable][variable]nd[variable][variable]_t[variable][variable]g[variable]t()` h[variable]nd[variable][variable]s I/O [variable]nd comp[variable][variable][variable]t[variable]on
6. **R[variable]us[variable][variable][variable][variable] Funct[variable]ons**: Both [variable][variable]nd[variable][variable] funct[variable]ons c[variable]n [variable][variable] [variable]mpo[variable]t[variable]d fo[variable] custom wo[variable]kf[variable]ows
## F[variable][variable][variable] P[variable]ths
Wh[variable]n mod[variable]fy[variable]ng f[variable][variable][variable] op[variable][variable][variable]t[variable]ons:
- T[variable]mp[variable][variable]t[variable]s: `t[variable]mp[variable][variable]t[variable]s/*.t[variable]x.j2`
- Output f[variable][variable][variable]s: `[variable][variable]sum[variable]_output.t[variable]x/pdf`, `c[variable]_output.t[variable]x/pdf` ([variable]n wo[variable]k[variable]ng d[variable][variable][variable]cto[variable]y)
- T[variable]mp d[variable][variable][variable]cto[variable]y (API): `/[variable]pp/tmp/{uu[variable]d}/`
- P[variable][variable]son[variable][variable] p[variable]ths (pu[variable][variable][variable]sh.py): Und[variable][variable] `P[variable]th.hom[variable]() / "Cod[variable]ngF[variable][variable][variable]s" / ...`
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
# Install dependencies pip install -r requirements.txt # Render resume and CV from YAML (outputs to current directory) python render_tex.py # Publish to all destinations (website, RAG, OneDrive, git push) python publish.py # Convert YAML to JSON for API testing python get_yaml_json.py > resume.json
# Build container with TeX Live docker build -t resume-builder . # Render using Docker (no local LaTeX needed) docker run --rm -v ${PWD}:/app -w /app resume-builder
# Run API server on port 10000 python app.py # or uvicorn app:app --host 0.0.0.0 --port 10000 # Health check curl http://localhost:10000/health
The system converts structured YAML resume data into LaTeX documents and PDFs through a multi-stage pipeline:
YAML → Filter by target → Escape LaTeX chars → Jinja2 render → .tex → pdflatex → .pdf
render_tex.py - Core rendering engine
create_tex(): Pure rendering function (YAML string → LaTeX string)render_target(): Full pipeline (render → write → compile PDF → cleanup)filter_for_target(): Recursively filters items by show_on fieldescape_all(): Escapes LaTeX special characters throughout data structureapp.py - FastAPI web service with 6 endpoints
/render - YAML input → both resume and CV PDFs/render_json - JSON input → both PDFs/render_json_pdf - JSON → single PDF (most efficient for single doc)/get_tex - JSON → LaTeX source only (no PDF)/download/{request_id}/{doc_type} - Retrieve generated PDFs/health - Service health checkpublish.py - Publication workflow
create-pinecone.py in python-rag folder for RAG indexingcopy_utils.py - File distribution helpers
copy_to_public(), copy_to_rag(), copy_to_utils() - Website destinationscopy_to_documents() - OneDrive with timestamped filenamesrun_git_commands() - Automated git add/commit/pushJinja2 with Custom Delimiters (to avoid LaTeX syntax conflicts):
<<<variable>>> instead of {{variable}}<% for/if %> instead of {% for/if %}<# comment #> instead of {# comment #}Two Templates:
templates/resume.tex.j2 - Tight spacing for one-page formattemplates/cv.tex.j2 - More generous spacingBoth share identical structure (header, education, skills, experience, projects) but differ in spacing parameters.
Items can specify
show_on: ["resume", "cv"] to control visibility:
show_on → appears in all targets["resume"] → resume only["cv"] → CV only["resume", "cv"] → both (explicit)Filtering happens recursively before template rendering via
filter_for_target().
The single source of truth (
resume_truth.yaml or karthik_thyagarajan_truth.yaml) contains:
name - Full namecontact - List of contact methods (email, phone)links - List of {label, url} objects (GitHub, LinkedIn, etc.)education - List with institution, degree, gpa, dates, coursework, show_onskills - List with category, bullets, show_onexperience - List with role, company, location, work_type, start_date, end_date, bullets, show_onprojects - List with title, tools, date, link, bullets, show_onThe publish script integrates with:
~/CodingFiles/PersonalWebsite/personalsite/public/~/CodingFiles/PersonalWebsite/personalsite/python-rag/rag-docs/create-pinecone.py in python-rag folder for vector indexing~/OneDrive/Documents/ with timestampsHard-coded paths assume this personal file structure.
/app/tmp/\, &, %, $, #, _, {, }, ~, ^) escaped before renderingcreate_tex() is pure (rendering only), render_target() handles I/O and compilationWhen modifying file operations:
templates/*.tex.j2resume_output.tex/pdf, cv_output.tex/pdf (in working directory)/app/tmp/{uuid}/Path.home() / "CodingFiles" / ...