The personal webpage of Wes Henderson.
This site is powered by Alea and hosted with GitHub Pages. Alea is the templating engine that creates index.html
and resume.html
based off of their respective yaml config files. All resume versions are generated from configs/resume.yaml
, which is fully compliant with the JSON Resume 1.0.0 spec.
flowchart LR
A[Workstation]-->B{{Git Hooks}};
B-->C((HTML));
B-->D((PDF));
B-->E((JSON));
C-->F[GitHub];
D-->F[GitHub];
E-->F[GitHub];
F-->G{{Actions}};
G-->H[Pages];
G-->I[Gist];
I-->J(Registry);
- A change is made to
configs/resume.yaml
. - A pre-commit hook is executed which generates the following versions of the resume:
resume.json
(JSON)resume.html
(HTML)resume.pdf
(PDF)
- The changes are pushed to GitHub.
- The following GitHub Actions are ran:
- PyLint: Lints my code.
- Update Resume Gist: Uploads
configs/resume.json
to a public gist. - pages-build-deployment: Builds and deploys my GitHub Page.
- The JSON Resume registry is updated with my new resume.
- My GitHub Page is updated with my new content/resume.
This repo relies heavily on pre-commit hooks to auto-generate new resources whenever certain files are updated. This is especially important for my resume as I would have to maintain 4 versions otherwise. The hooks (and Actions) allow me to effectively separate the content from the format!
PDF Resume
The PDF version of my resume is generated via Google Chrome dev tools:
/usr/bin/google-chrome \
--headless \
--disable-gpu \
--no-pdf-header-footer \
--no-margins \
--run-all-compositor-stages-before-draw \
--print-to-pdf=${PDF} \
file://${BASE_PATH}/${TMP}
Previously this work was done via Pandoc, however this results in a prettier end product without having to create LateX templates since Chrome is able to render the underlying CSS.
I am using Javascript and data attributes to toggle the CSS layout in order to give the resume a retro vibe. To view this version simply enter the Konami Code on /resume:
up, up, down, down, left, right, left, right, b, a
These URLs are integrated with OpenAI's ChatGPT; they will pass my resume to ChatGPT with a predefined prompt to get a new response generated each time. They can take 10 seconds (or more) to run.
Cover Letter
This endpoint attempts to write a cover letter that matches my resume:
Resume Suggestions
This endpoint asks ChatGPT to provide feedback and suggest improvements: