Edit in Overleaf, and one fixed URL always serves the latest compiled PDF. No download, no re-upload. A scheduled GitHub Action pulls your project, compiles it, and commits the PDF.
The flow
Project ID comes from the Overleaf URL overleaf.com/project/<ID>. The cookie: open DevTools (F12) → Network → reload → click any www.overleaf.com request → copy the full cookie: request header.
Make a public GitHub repo (e.g. resume). Then in Settings → Secrets and variables → Actions, add OVERLEAF_COOKIE and OVERLEAF_PROJECT_ID. Public is needed for free GitHub Pages, meaning your .tex source is browsable too.
Create .github/workflows/build.yml. The wizard generates this for you with the right filenames filled in. It runs on a schedule, downloads the project zip, compiles, and commits the PDF under a fixed name.
Plain templates compile on pdfLaTeX, the default. Templates like Deedy use fontspec, which fails on pdfLaTeX with a fatal "requires XeTeX or LuaTeX" error; pick XeLaTeX in the wizard (or LuaLaTeX if your template needs it). For custom fonts, bundle the font files inside your Overleaf project so the build can find them. If your resume uses minted for code, turn on the minted option so the build enables shell-escape and installs Pygments.
.tex lives in a subfolder, give its path (e.g. resume/main.tex) as the main filename.Two ways to serve the committed PDF from a fixed URL:
GitHub Pages
Settings → Pages → deploy from main / root. Reliable fresh updates.
username.github.io/repo/resume.pdf
raw.githack
Zero setup, serves with correct PDF type. Caches harder, so updates lag a bit.
raw.githack.com/username/repo/main/resume.pdf
Once live, wrap the link in the Google viewer so it opens like a native PDF reader on mobile and desktop. The wizard builds this URL from whatever live link you paste.