Inspiration

We've all been there: staring at a blank screen, trying to rewrite our resume for the hundredth time to match a specific job description (JD). The modern hiring process is a "black box" dominated by Applicant Tracking Systems (ATS) that filter out qualified candidates simply because they missed a keyword. We wanted to build a tool that doesn't just "spam" keywords but acts as an intelligent career coach—bridging the gap between a candidate's actual experience and the recruiter's requirements.

The true spark came when we realized that most AI resume tools hallucinate—inventing skills to get a higher score. We wanted to build something different: a tool built on truth.

What it does

CadmusAI is an intelligent resume tailoring engine.

  1. Ingests your existing resume (DOCX) and the target Job Description.
  2. Analyzes the semantic gap between the two using an AI agent acting as an expert Technical Recruiter and ATS optimization algorithm.
  3. Rewrites your resume bullet points to highlight relevant experience without fabricating facts.
  4. Evaluates a "Match Score" (0–100) via prompt engineering, where the AI agent:
    • Extracts critical keywords, hard/soft skills, and experience requirements from the JD
    • Scans the resume for exact keyword matches and semantic equivalents
    • Performs gap analysis to identify what's missing
    • Assigns a score based on defined criteria (90–100 for perfect match, down to 0–49 for weak match)

This prompt-driven approach allowed us to iterate quickly during the hackathon. With a larger dataset in the future, we could enhance this with vector embedding similarity for even more precise matching.

It strictly adheres to an Integrity Protocol, ensuring that while the phrasing changes to match the JD's "corporate dialect," the core truth of your experience remains untouched.

How we built it

We built CadmusAI using a modern, modular stack:

  • Backend: Python & FastAPI for a high-performance, async REST API.
  • AI Orchestration: We integrated OpenAI (GPT-4o) and Ollama (Mistral) for local, also added DigitalOcean GenAI .
  • Frontend: Server-side rendering with Jinja2 allows for fast, SEO-friendly pages without the overhead of a complex SPA framework for the MVP.
  • Prompt Engineering: We spent significant time refining our "System Prompts" (Markdown-based templates) to enforce JSON output structures and the "Anti-Block" formatting rules.

Challenges we ran into

  • The Hallucination Problem: Early versions of the model would invent "10 years of Python experience" for a junior dev. We had to implement a strict "Evidence-Based" constraint in our system prompt.
  • JSON Instability: Getting LLMs to consistently output valid JSON for our frontend to parse was a nightmare. We had to iterate on our "Anti-Block" rules to ensure bullet points were correctly formatted with newlines (\n) and not just returned as giant blobs of text.

Accomplishments that we're proud of

  • The "Integrity Protocol": We successfully tuned the prompt so that it refuses to lie. If a skill isn't in the input, it's not in the output.

What we learned

  • Prompt Engineering is Software Engineering: We learned that prompts are not just "text"; they are code. They need version control, and debugging.
  • Structured Output is Key: Relying on free-text output from LLMs is a recipe for broken UIs. Enforcing JSON schemas is non-negotiable for app development.

What's next for CadmusAI

  • Vector Database Integration: Implement OpenSearch with vector embeddings for more precise semantic matching and gap detection at scale.
  • Strategic Gap Aggregation: Instead of just one job, analyzing a user's resume against ten target jobs to find the "missing link" skill they should learn next.
  • Browser Extension: To let users analyze JDs directly on LinkedIn or Indeed.

Built With

Share this project:

Updates