← All work
Tools · infraSecurity · AI

CodeSentinel

An AI-assisted vulnerability scanner for Python codebases. Bandit, Safety and Semgrep find the issues; an LLM explains the fix side by side with the vulnerable code.

Role
Full-stack engineer
Status
Security · AI
Stack
Next.js 16 · React 19 · Tailwind v4 · Framer Motion · Recharts · FastAPI · SQLAlchemy · Bandit · Safety · Semgrep · Groq · Docker
Links
AdamMostofi/codesentinel ↗
Upload: ZIP → Scan: Bandit · Safety → Score: Risk 0–100 → Explain: LLM remediation → History: SQLiteNext.js 16 frontend ↔ FastAPI backend · docker-compose up --build01 · UploadZIPdrag and drop02 · ScanBandit · Safety+ Semgrep CE03 · ScoreRisk 0–100severity breakdown04 · ExplainLLM remediationvulnerable vs fixed05 · HistorySQLitepast scans

Three industry scanners do the finding; the model only explains and suggests.

The problem

Security tools are good at finding problems and bad at explaining them. A wall of Bandit output doesn’t tell a junior developer what to change.

What it does

  • Multi-tool scanning: Bandit (SAST), Safety (dependencies) and Semgrep Community Edition run on an uploaded ZIP.
  • Risk score: a 0–100 score with a severity breakdown, charted with Recharts.
  • AI remediation: Groq-hosted models suggest fixes, shown as vulnerable code next to fixed code. It’s optional, and the scanner works without a key.
  • Scan history: past scans are stored in local SQLite.
  • Docker-ready: docker-compose up --build brings up the Next.js frontend and the FastAPI backend.

Design decision

The LLM never decides whether something is a vulnerability. Deterministic tools do the finding; the model only explains and proposes. That keeps the results reproducible and the AI in a role where its mistakes are cheap.