How I Built an ATS-Optimized AI Portfolio with Antigravity: From Nginx Hell to Cloud Run

Published: (January 17, 2026 at 09:52 AM EST)
3 min read
Source: Dev.to

Source: Dev.to

About Me

I’m Veríssimo Cassange, an AI Software Engineer based in Luanda, Angola 🇦🇴. I’ve always been obsessed with how technical architecture can drive social impact. My day‑to‑day usually involves Python, Machine Learning, and trying to explain to my family why Infrastructure as Code is actually exciting.

For this challenge, I didn’t just want a “pretty” site. I wanted a portfolio that acts like a Trojan Horse—looking premium to human recruiters while being perfectly tuned for the ATS (Applicant Tracking Systems) that often filter out talented engineers before they even get a chance.

Portfolio

I deployed the app to Google Cloud Run. You can check the live version here:

🔗 Live Portfolio:

How I Built It

The “ATS Algorithm” Strategy

I treated the portfolio as a data‑rich document. Instead of just listing projects, I integrated specific keywords—Generative AI, RAG, Docker, CI/CD—directly into the metadata and descriptions.

The GitHub API doesn’t provide the “why” behind a project, so I manually augmented my repository data with custom objectives and technology tags. I built a local manifest system to enrich the data fetched from GitHub.

The Tech Stack

  • Frontend: React 19 + Vite
  • Styling: Tailwind CSS 4 (glassmorphism look with accessibility in mind)
  • Animations: Framer Motion (e.g., the smooth scroll progress bar BPROGRESS)
  • Deployment: Docker + Google Cloud Run

The Google AI Copilot

I used Antigravity (Google’s AI‑first dev environment) as my second brain. It wasn’t about “click a button, get a site”; it felt like having a senior engineer beside me.

For example, Antigravity helped me use nanobanana Pro to generate consistent, professional thumbnails for all my projects, iterating on the visual style until it matched a unified brand.

What I’m Most Proud Of

1. Breaking (and Fixing) Docker for Cloud Run

Deploying was the biggest headache. I wanted to run Nginx as a non‑root user for security, but Cloud Run’s filesystem restrictions caused permission errors when touching /var/cache/nginx. After hours of debugging, I rewrote nginx.conf to use /tmp for PIDs and temporary files.

# Fixing permissions for a non‑root Nginx user
RUN mkdir -p /var/cache/nginx /tmp/nginx && \
    chown -R nginx:nginx /var/cache/nginx /tmp/nginx && \
    chmod -R 755 /var/cache/nginx /tmp/nginx

Seeing the “Service is Healthy” checkmark in the Google Cloud Console was incredibly rewarding.

2. The Project Modal System

Instead of redirecting visitors straight to GitHub, I built a modal system that provides a quick technical deep‑dive (Technologies, Objectives, Challenges) before the user decides to explore the code. This keeps engagement high.

3. Localization and Impact

As someone from Luanda, I highlighted my work with Frontier Tech Leaders – Angola to ensure the portfolio reflects my local context while showcasing global technical standards.

Key Learnings

  • AI as a Copilot: Using Antigravity changed how I debug. Rather than searching StackOverflow, I had a context‑aware assistant helping me optimize Docker multi‑stage builds.
  • Structure Matters: ATS optimization isn’t just “keyword stuffing”—it’s about semantic HTML. Proper use of and a lean DOM are crucial.
  • Trade‑offs: I chose Nginx over a simple Node server for better control over headers and compression, even though it meant wrestling with Cloud Run’s filesystem restrictions.
Back to Blog

Related posts

Read more »