As a developer, keeping your resume updated across multiple platforms is a classic friction point. You tweak a bullet point or add a new project in your LaTeX source file, and suddenly you have to recompile, download the PDF, log into your portfolio site, delete the old file, and upload the new one.
I wanted a single source of truth: Edit in Overleaf, click push, and have my personal Google Site portfolio instantly update with the newly compiled PDF in under 60 seconds.
Here is how I chained Overleaf, GitHub Actions, and a clever proxy trick to build a zero-maintenance, automated CV deployment pipeline.
The Architecture
The data flow is entirely hands-off once configured:
Overleaf (Editor) ➔ GitHub Repo (Trigger) ➔ GitHub Actions (Compile) ➔ Live Google Site (Embed)
Step 1: Syncing Overleaf with GitHub
Overleaf allows you to link a project directly to a GitHub repository.
- I created a blank resume repository on GitHub.
- Inside Overleaf, I selected Import from GitHub to link the two.
Now, whenever I make edits to my .tex files inside Overleaf, I can use the Overleaf Git menu to cleanly push those commits straight back to my GitHub main branch.
Step 2: Automating the LaTeX Compilation via GitHub Actions
Instead of manually compiling the PDF and tracking binary files in source control, I offloaded the compilation to a CI/CD runner.
I created a workflow file at .github/workflows/compile.yml that triggers on every push. It compiles the LaTeX files cleanly and pushes the fresh PDF right back into the repo directory.
name: Build and Deploy LaTeX Resume
on:
push:
branches: [ main ]
jobs:
build_latex:
runs-on: ubuntu-latest
steps:
- name: Set up Git Repository
uses: actions/checkout@v4
- name: Compile LaTeX Document
uses: xu-cheng/latex-action@v3
with:
root_file: generic/main.pdf
- name: Commit and Push Compiled PDF
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git add generic/main.pdf
git commit -m "Automated CI/CD PDF Compilation [skip ci]" || echo "No changes"
git push
Note on Edge Cases: Notice the [skip ci] tag in the commit message? This is critical. It ensures that when GitHub Actions pushes the compiled PDF back to the repo, it doesn't trigger an infinite workflow loop.
Step 3: Bypassing the Google Sites CORS Block
This is where things got interesting. Google Sites allows you to embed assets via URLs, but if you attempt to paste a raw GitHub URL (raw.githubusercontent.com), Google Sites strips the PDF rendering and displays a grumpy page preview or a broken GitHub header wrapper. This happens due to strict cross-origin security headers (CORS).
To solve this, I leveraged raw.githack.com—a proxy service that streams raw files directly from GitHub repos with the correct Content-Type: application/pdf parameters.
I took my raw asset path and mapped it like this:
https://raw.githack.com/shaifurcodes/resume/main/generic/main.pdf
The Ultimate Fix for Mobile/Desktop Rendering
To guarantee that the document acts exactly like a native Google Doc PDF viewer across both desktop and mobile browsers, I wrapped the raw Git proxy link inside the official Google Docs viewer parameters:
Step 4: The Live Embed
- Open the Google Sites editor dashboard.
- Select Embed from the right side panel.
- Paste the complete Google Docs viewer URL from Step 3 into the By URL input.
- Hit Insert and stretch the bounding canvas boxes so the layout flows cleanly down the page.
The Result
Now, my resume maintenance stack is completely decoupled. I can optimize system-level descriptions, change formatting parameters, or update project statuses inside a high-end LaTeX environment on Overleaf. The moment I hit push, the automation takes over, hot-swapping the live PDF asset on my portfolio dynamically.
Have you automated your portfolio or documentation workflows? Let's talk about alternative CI/CD configurations or caching optimizations in the comments!
Top comments (0)