惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

aimingoo的专栏
aimingoo的专栏
Y
Y Combinator Blog
云风的 BLOG
云风的 BLOG
Microsoft Azure Blog
Microsoft Azure Blog
腾讯CDC
T
The Blog of Author Tim Ferriss
P
Proofpoint News Feed
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
小众软件
小众软件
美团技术团队
Martin Fowler
Martin Fowler
爱范儿
爱范儿
有赞技术团队
有赞技术团队
博客园 - 【当耐特】
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Microsoft Security Blog
Microsoft Security Blog
宝玉的分享
宝玉的分享
J
Java Code Geeks
B
Blog
V
V2EX
Stack Overflow Blog
Stack Overflow Blog
B
Blog RSS Feed
博客园 - Franky

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
How I Finished My AI Code Reviewer Using GitHub Copilot
Mohit Pandey · 2026-05-28 · via DEV Community

This is a submission for the GitHub Finish-Up-A-Thon Challenge


What I Built

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


Demo

Home Page — paste your code and the language is detected automatically
Home Page

Review Output — bugs, style issues, improvements, and a quality score in one shot
Features

Dashboard — every review you've run, saved to your account
Dashboard

API Docs — auto-generated by FastAPI, all endpoints documented out of the box
API Documentation

🔗 bugloo.vercel.app


The Comeback Story

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:

  • Auth that makes sense. Replaced the old broken two-page login flow with a single page that toggles between login and signup without a reload. Also disabled Supabase's email confirmation so new users don't get stuck waiting for an email that might land in spam.
  • Auto language detection. Wired up highlight.js to detect the language as you type. A badge updates in real time. Nobody has to pick from a dropdown.
  • Proper error handling. Every API failure, Groq timeouts, Supabase errors, network issues, now maps to a readable message instead of a 500 page or a raw error object.
  • PDF export. Users can download any review as a PDF to save or share.
  • Actual security. JWT stored in HttpOnly cookies, Supabase RLS policies per user, and a get_current_user dependency on every protected route.
  • Clean project structure. Removed the compiled files, added .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.


How It Works

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


My Experience with GitHub Copilot

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.

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.


Connect With Me :)

Built and maintained by Mohit Pandey