close

DEV Community

Md Shaifur Rahman
Md Shaifur Rahman

Posted on

Building a Zero-Touch Resume Pipeline: Overleaf + GitHub Actions + Google Sites

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.

  1. I created a blank resume repository on GitHub.
  2. 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
Enter fullscreen mode Exit fullscreen mode

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:

https://docs.google.com/viewer?url=https://raw.githack.com/shaifurcodes/resume/main/generic/main.pdf&embedded=true


Step 4: The Live Embed

  1. Open the Google Sites editor dashboard.
  2. Select Embed from the right side panel.
  3. Paste the complete Google Docs viewer URL from Step 3 into the By URL input.
  4. 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)