Personal resume source built with XeLaTeX and published to GitHub Pages.
hanisntsolo-resume.tex— main resume source.hanisntsolo-resume.cls— custom style class.index.html— landing page with resume download and analytics hooks.output/— generated artifacts (PDF output target).assets/— logo/assets used in resume.
latexmk -xelatex -output-directory=output hanisntsolo-resume.texxelatex -output-directory=output hanisntsolo-resume.texGenerated PDF:
output/hanisntsolo-resume.pdf
In your workflow, compile the .tex file and publish output/.
Example key settings:
root_file: hanisntsolo-resume.texcompiler: xelatexargs: -output-directory=output- copy
index.htmlintooutput/
You asked a great question: yes, analytics needs a central counter/data sink.
You have 3 practical options:
-
Hosted analytics (fastest): GoatCounter (already wired)
index.htmlnow includes your GoatCounter script snippet.- Download button logs a dedicated event path:
/resume-download. - The landing page also attempts to fetch and show total download clicks from GoatCounter's counter endpoint.
-
Custom endpoint (most control)
- If you want full ownership, replace the
loadDownloadCount()fetch URL and event writer with your own API endpoint. - Store counts in Redis/PostgreSQL (or serverless DB) and expose your own dashboard.
- If you want full ownership, replace the
-
Cloudflare Analytics / edge logs (low effort, coarse-grained)
- Useful for total traffic trends.
- Not as explicit as click-level events unless custom event collection is added.
- GoatCounter is now the default tracking implementation in this repo.
- If public counter endpoint is restricted, you will still see exact numbers in GoatCounter dashboard.
- For guaranteed public count display on the page, either enable GoatCounter public counter endpoint or add a tiny proxy endpoint.
- Resume content is tuned for one-page density; avoid adding long paragraphs.
- Prefer impact-oriented bullets (action + tech + measurable outcome).