## Inspiration

Every developer knows the feeling — you join a new codebase, clone the repo, and suddenly you're staring at 400 files with no idea where to start. You spend days reading code you don't understand, interrupting senior developers with questions that should have been answered on day one, and feeling lost in a system everyone else seems to know inside out.

I've been there. That frustration is what inspired DevLift a tool that turns days of confusion into minutes of clarity. ## What I Learned

  • Prompt engineering at scale — getting an LLM to return consistent structured JSON across wildly different codebases required careful design and robust fallback parsing
  • GitHub API internals — how to intelligently score and select the most important files from a repo rather than blindly reading everything
  • AI reliability in production — why you always need a fallback provider; watsonx failing silently will break your whole app without one
  • Full stack deployment — wiring a FastAPI backend on Render to a Next.js frontend on Vercel and keeping environment variables in sync across both

## How I Built It

DevLift was built in roughly 24 hours as a solo project.

Backend

  1. A GitHub fetcher that pulls the full file tree and scores files by importance — README, entry points, and config files rank highest
  2. A prompt builder that assembles the top files into a structured context window
  3. An IBM watsonx.ai client that sends the prompt to Meta Llama 3.3 70B and parses the response into six kit sections
  4. A Groq fallback so the app stays live if watsonx has an outage
  5. A Contribution Readiness Score engine that grades repos across five dimensions

## Challenges I Faced

Getting consistent JSON from an LLM across any codebase

Different repos produce wildly different model outputs — some with markdown fences, some with trailing text, some with partial JSON. I built a two-pass parser that strips fences, finds the first {, and uses raw_decode to extract exactly one valid JSON object regardless of what follows.

Selecting the right files without blowing the context window

Large repos have thousands of files. Reading everything would exceed the context limit and slow responses significantly. I built a file scoring algorithm that ranks files by type, depth, and name patterns — the top 12 files give the model enough signal without overwhelming it.

Render defaulting to Python 3.14

Render's default Python at the time was 3.14, which had no pre-built wheel for pydantic-core. Rust compilation failed on Render's read-only filesystem. The fix was pinning PYTHON_VERSION=3.11.0 as an environment variable — non-obvious and cost several failed deploys to figure out.

Building solo under time pressure

The discipline was to ship the core loop first — URL in, kit out — and only layer features on top once that was solid. Discover Repos, the Readiness Score, and the export button all came after the core worked end to end.

Built With

Share this project:

Updates