Inspiration

Balancing a 400-level Computer Science workload at Lagos State University with the impending reality of the tech job market highlights a major friction point. Transitioning into professional backend engineering roles involves a grueling, high-volume application process. Applying for jobs shouldn't feel like a full-time job itself. The repetitive strain of manually tailoring resume snippets for specific job responsibilities to beat Applicant Tracking Systems (ATS) and copying identical profile data into complex portals sparked the idea for AJA. The goal was to build something that didn't just track job links, but actually executed the applications—an autonomous cloud-based employee that handles the entire pipeline.

What it does

AJA (Autonomous Job Agent) is a decoupled, multi-agent AI system that puts the software engineering job search on autopilot. Instead of just organizing links, AJA actively works for the user.

Through a clean, multi-page interface, users input a target job description. In seconds, AJA:

Instantly tailors a specific resume snippet optimized to beat the ATS filters for that exact role.

Analyzes the user's skill gaps against the job description to generate a highly technical, customized interview study guide.

Routes the user to a dedicated "Interview Vault" focus room to study those specific architectural questions.

Executes a One-Click Auto-Apply feature, where a headless browser in the cloud navigates the target job portal and submits the application completely hands-free.

How we built it

AJA relies on a highly decoupled microservice architecture:

The Frontend Orchestration (MeDo): MeDo's prompt-driven engine generated the multi-page React application. MeDo handles the global state management, cleanly routing user data and asynchronous API responses from the main dashboard directly into the "Interview Vault."

The Intelligence Backend (FastAPI & Gemini): The backend is a custom Python FastAPI microservice. It intercepts the JSON payload from MeDo and communicates with the Google Gemini API to analyze the job descriptions, identify missing skills, and generate the tailored interview prep and ATS optimization.

The Execution Engine (Playwright): To achieve true automation, the backend integrates Playwright. When the user clicks "Auto Apply," the server spins up a headless Chromium browser instance, semantically analyzes the DOM of the target job portal, injects the user's data, and submits the form.

The Infrastructure (Docker & Render): The entire backend system, along with all browser dependencies, is containerized using Docker and deployed 24/7 on Render.

Challenges we ran into

Building a multi-agent cloud automation platform within a tight timeframe brought several intense technical hurdles:

Container Dependency Clashes: Initial containerization efforts hit deep dependency conflicts between numpy and older Ubuntu base images. The Dockerfile had to be pivoted to utilize a Python 3.12 'noble' base image to stabilize the build.

Headless Cloud Environments: Transitioning from local testing to a cloud server caused Playwright to crash instantly due to missing XServer displays. We had to engineer environment-specific headless execution configurations to ensure the Chromium instance ran silently and smoothly on Render's Linux servers.

API Volatility and Spikes: During peak development, the Gemini 2.5-Flash model experienced 503 Unavailable spikes due to global demand. To protect the application and ensure zero downtime, we implemented a rapid fallback configuration to the highly stable gemini-1.5-flash model.

Prompt-Driven State Management: Moving the MeDo frontend from a single-page utility to a multi-page SaaS platform required highly specific, structured prompt engineering to instruct the compiler on exactly how to parse deeply nested JSON arrays and execute dynamic page routing.

Accomplishments that we're proud of

Successfully decoupling the architecture is the biggest win. Mapping MeDo's Custom API Skills directly to a Dockerized FastAPI container running headless Playwright is a complex orchestration. We are incredibly proud of the seamless data flow: watching MeDo catch a deeply nested JSON array of Gemini-generated interview questions and instantly transition the user into a beautifully formatted "Interview Vault" page without writing any frontend React code feels like magic. Above all, getting the headless browser to successfully navigate and submit a form on a live cloud server proved the core thesis of the project.

What we learned

This project leveled up our backend engineering and cloud deployment capabilities. It deepened our understanding of passing strict, sanitized JSON payloads safely between a prompt-generated frontend and a custom Python backend. We gained invaluable hands-on experience containerizing complex browser dependencies with Docker, engineering robust fallback logic for LLM API calls, and mastering the nuances of headless DOM manipulation in a serverless environment.

What's next for AJA :-Autonomous Job Agent

The core execution engine is solid, but the vision for AJA is much larger:

Database Integration: Implementing PostgreSQL to save application history, allowing users to track the status of jobs the agent has applied to over time.

Dynamic Credential Extraction: Moving away from static profile text and implementing an integration that dynamically extracts user experience data directly from LinkedIn or GitHub archives to keep the "Master Resume" constantly updated.

Multi-Step Authentication Handling: Upgrading the Playwright engine to handle complex OAuth flows (like "Sign in with Google") to unlock applications on stricter job portals.

Built With

Share this project:

Updates

Submission history