How I Finished My AI Code Reviewer Using GitHub Copilot A developer built Bugloo, a free AI code reviewer for students that analyzes code snippets for bugs, style issues, and improvements using FastAPI, Supabase, and Groq's llama3-70b-8192 model. The project was completed as part of the GitHub Finish-Up-A-Thon Challenge, with GitHub Copilot assisting in writing error-handling functions that convert raw Supabase and Groq error messages into human-readable responses. Bugloo is now live at bugloo.vercel.app with features including automatic language detection, user dashboards, and API documentation. This is a submission for the GitHub Finish-Up-A-Thon Challenge In college, nobody really reviews your code. You submit assignments, get a grade, and move on. There's no one telling you "this function is doing too much" or "you're ignoring this edge case." I got tired of that, so I built Bugloo. Bugloo is a free AI code reviewer for students. Paste any snippet, in any language, and you get back a breakdown of bugs, style issues, improvements, a quality score, and a plain-English explanation of what your code is actually doing. The whole thing runs on FastAPI, Supabase, and Groq's llama3-70b-8192 , all free tier, no credit card. Live demo: bugloo.vercel.app Home Page — paste your code and the language is detected automatically Review Output — bugs, style issues, improvements, and a quality score in one shot Dashboard — every review you've run, saved to your account API Docs — auto-generated by FastAPI, all endpoints documented out of the box Honest version of where this project started: it worked on my laptop, barely. The Groq integration was functional but the rest was a mess. No real auth flow, raw Supabase error objects printing directly to the UI, manual language selection that nobody would actually use, and .pyc files committed to Git like I had no shame. I knew what I wanted to build. I just kept hitting friction and leaving it half-done. Here's what I actually finished for this challenge: highlight.js to detect the language as you type. A badge updates in real time. Nobody has to pick from a dropdown. get current user dependency on every protected route. .env.example , set up render.yaml for deployment.Before this challenge it was a prototype I was embarrassed to share. Now it's something I'd actually put in front of a recruiter. User pastes code ↓ highlight.js detects language client-side ↓ POST /api/review → FastAPI ↓ Groq API llama3-70b-8192 analyzes code ↓ Structured JSON response parsed ↓ Review saved to Supabase + displayed to user I used Copilot mostly for the stuff I kept putting off because it felt tedious. The error mapper was the clearest example. I needed a function that takes raw Supabase and Groq error messages and returns something a human can read. I wrote two cases by hand, Copilot filled in the rest. I just checked it over and adjusted a few strings. php def map auth error error msg: str - str: msg lower = error msg.lower if any term in msg lower for term in "connection", "network", "timeout", "offline", "cannot connect", "failed to connect", "unreachable" : return "Authentication service is unavailable. Please try again shortly." if "invalid login credentials" in msg lower or "invalid credentials" in msg lower: return "Incorrect email or password. Please try again." if "already registered" in msg lower or "user already exists" in msg lower: return "An account with this email already exists. Try logging in." if "weak password" in msg lower or "password should be at least" in msg lower: return "Password must be at least 8 characters." if "invalid email" in msg lower or "valid email" in msg lower: return "Please enter a valid email address." return "Something went wrong. Please try again." def map groq error status code: int, error msg: str - dict: if status code == 400: return {"status": 400, "message": "Please paste at least 10 characters of code."} elif status code == 504: return {"status": 504, "message": "The AI took too long to respond. Please try again."} elif status code == 429: return {"status": 429, "message": "You've hit the rate limit. Please wait 30 seconds and try again."} elif status code == 503: return {"status": 503, "message": "Couldn't reach the AI service. Check your connection and retry."} else: return {"status": 500, "message": "Internal configuration error. Please contact the admin."} Prompt engineering was another area where Copilot saved me real time. Getting Groq to consistently return clean JSON without markdown fences or any extra text took more iteration than I expected. Copilot helped me try variations faster than I could write them myself. The highlight.js debounce logic for the language detection badge was also Copilot-assisted. JavaScript isn't where I'm strongest and I was avoiding that part. I described the behavior, it gave me a working implementation, I read through it, tweaked it, and moved on. Mainly what Copilot gave me was speed on the parts I was putting off. Once those were done the project actually started feeling finished. Built and maintained by Mohit Pandey https://github.com/mohitpandeycs