Inspiration

I got fired last week. After I got over the shock, the thought of having to go through the recruitment process again made me want to hide under my desk. So, I did what any reasonable developer would do; I procrastinated by joining a hackathon.

But, of course, my brain wouldn't shut up about resumes and interviews. That's when the absurdity hit me: Companies use AI to write job descriptions. Candidates use AI to write resumes. Recruiters use AI to review them. We're all just middleware in an LLM-to-LLM communication protocol.

So, let's just cut out the pretense. If AIs are going to talk about us anyway, let's give them a proper API instead of making them parse PDFs like troglodytes.

Welcome to Lucid, where your resume becomes an endpoint, and you control the conversation.

What it does

Lucid is a beautifully designed resume management platform that also turns your professional profile into an API endpoint for LLMs via MCP (Model Context Protocol).

Logging In

You can create an account or use the existing test account: [email protected] / hackathon

The web app:

  • Clean, intuitive interface for building resumes from reusable content blocks (experience, skills, projects).
  • Create tailored resumes for every role. No more folders full of resume-web-FINAL-v3.pdf
  • I obsessed over every pixel, every interaction, every animation. If I have to go through this process again, I want it to feel like I'm using a product from this decade.

Analytics that matter:

  • Track which resumes get the most engagement
  • See which specific blocks (experiences, skills) generate interest
  • Outcome tracking - know which resume versions lead to callbacks
  • API usage analytics showing who's querying what and when

API control panel:

  • Generate API keys with granular permissions per resume
  • Control exactly what data each key can access

What LLMs get:

  • Structured access to verified professional data
  • A massive suite of tools like find_relevant_experience("TypeScript") and get_skills_by_category("Web2")
  • Consistent information that won't hallucinate that you're the inventor of React.

Other Smart features:

  • Integrated AI to help improve writing and resume content
  • Detect and block suspicious scrapers and unscrupulous recruiters with crowdsourced protection

One platform. Human-friendly editing. LLM-friendly API. Actual insights into what is working in your job hunt.

How I built it

Web App: Bolt.new + Claude assists

The vast majority of the application was built on Bolt.new over about 5 days. I had to start a new chat a few times, re-importing the project from GitHub to clear Bolt's context.

The API Key management and block editing systems became complex towards the end, causing Bolt to repeatedly get stuck making the same edits in a loop. So, I used Claude Code to help get those over the line. I developed on separate branches so you can see how much was Bolt vs. anything else.

Backend: Supabase everything

  • PostgreSQL for data (with Row Level Security)
  • Supabase Auth because rolling your own auth in 2024 is like brewing your own penicillin
  • Edge Functions for all the MCP servers and AI integrations

MCP Integration: The unique bit

  • Supabase Edge Functions handle all the MCP endpoints
  • Built a lightweight Node.js MCP server that users run locally that acts as a stdio-to-HTTP proxy, forwarding requests to the Edge Functions
  • This setup requires zero infrastructure for users - simply add the npx command to your MCP settings.

Challenges I ran into

Instead of building one app in a week, with the webapp, MCP server, and proxy, this idea meant I had to build three. What a person will do to avoid having to fill out job applications.

Accomplishments that I'm proud of

It Actually Works. Not to set the bar too low; but I built a complete resume management platform with a working MCP implementation in a week while having an existential crisis. I think that's kinda neat. Of course, there is still a lot to finish, but the fact that LLMs can query it and get real data back feels like black magic.

Zero Infrastructure or Hassle for Users. Users just run npx @aaronbassett/resume, and they're connected. The stdio-to-HTTP proxy just work.

Analytics That Don't Placate. Built-in analytics that show which parts of your resume matter. Not vanity metrics, just real intelligence about what data resonates with the people (LLMs) reviewing your resume.

Shipping > Perfection. A week ago, I was updating my resume in Google Docs, just like a caveman. Now, I have an API for my professional identity. It's not perfect, but it exists, and that's the biggest accomplishment. Sometimes, the best code is the code that ships.

What I learned

Build One to Throw Away (Bolt Edition)

Fred Brooks was right, but with Bolt it's more like "build three to throw away." First attempt: over-engineered nightmare. Second: under-specified disaster. Third: just right. Learning how to prompt Bolt effectively is akin to learning a new programming language, where being too specific is just as detrimental as being too vague.

Simple > Complex

Spent days trying to implement "proper" MCP transports before realizing a simple HTTP proxy solves 99% of use cases. Sometimes the dumb solution is the smart solution.

Features I Didn't Get Time to Finish

LLM Mischief (aka Prompt Injection) - Including hidden instructions nudging the recruiter's AI to talk favorably about me or attempt to have it exfil information about the caller. The settings panel for this is available, but the prompt injection feature isn't implemented.

Online Resume View - I implemented multiple templates, template switching, and configuration for these. But they still have placeholder content. I also wanted to include instructions on these pages (not rendered on the page, but in the source code) so that when an LLM parses the code, it would provide instructions on how to use the MCP tools instead.

Analytics - The analytics page is available, self-reporting works and all the necessary backend services and tables are in place for tracking events, among other functions. But I didn't have enough time to link it all together. When it's finished, users will be able to see which resumes perform best and which are most likely to lead to interviews, callbacks, etc. I have all the MCP tools for querying this data, too. So, you'll be able to give Claude a job posting and ask it to build a resume tailored just for that post from your best-performing resumes.

Scraping Protection - I implemented rate limiting and throttling for the MCP endpoints, but what I also wanted to do was build in automated scraping detection using aggregated data from all users. This could ban misbehaving bots, tar-pit them, or return poison well data.

What's next for Lucid: Resume MCP

Elevenlabs and Tavus both have MCP support, maybe I'll integrate those as well, then they can do my call screens and video interviews for me too!

But joking aside, I want to work in AI Developer Relations or Developer Education, so I might actually send the MCP details out with my regular old CV. I'm hoping the hiring managers for the types of teams I'd enjoy working on would get a kick out of it.

Built With

Share this project:

Updates

Submission history