The Problem

Developers need fast, AI‑augmented feedback on code quality, security, and performance, but integrating such analysis into a CI pipeline is rarely turnkey. Without a unified front‑end and back‑end, teams end up cobbling together scripts, missing consistent scoring, and lacking actionable reports.

What This Does

CodeVibes provides a web UI (React + Vite) that lets a user paste a GitHub repository URL and watch a live analysis stream. The backend (codevibes-backend/src/server.ts) orchestrates calls to the GitHub API and the DeepSeek LLM, stores results in a SQLite DB, and returns a Vibe Score plus issue lists.

Key files:

  • Front‑end entry – src/main.tsxsrc/App.tsx → page components such as src/pages/AnalyzePage.tsx.
  • Backend entry – codevibes-backend/src/server.ts sets up Express routes (/api/analyze) and wires controllers (analysisController.ts, authController.ts).
  • Core services – codevibes-backend/src/services/githubService.ts fetches repo trees, deepseekService.ts streams AI analysis, and analysisService.ts aggregates results.

Shared utilities (logger.ts, auth.ts, database.ts) are imported across many modules, making them the primary “hub” points.

How It Is Wired

  1. User request – UI component AnalyzePage posts to POST /api/analyze.
  2. Route handlingcodevibes-backend/src/routes/analysisRoutes.ts forwards to analysisController.analyze.
  3. Service orchestrationanalysisService.analyzeRepo calls githubService.getRepoTree → iterates files by priority (P1 security, P2 core, P3 quality).
  4. AI streaming – For each file, deepseekService.streamAnalysis sends file content to DeepSeek and receives a JSON issue stream.
  5. Result persistence – Issues and the computed Vibe Score are stored via database.ts (SQLite).
  6. Live feedback – The controller pipes server‑sent events back to the front end, which updates the UI in real time.

The import graph shows 112 modules with 54 edges and no cycles. The most depended‑upon module is codevibes-backend/src/utils/logger.ts (12 inbound imports). src/App.tsx has the highest instability (0.89) because it imports many UI components but is not itself imported elsewhere, indicating a potential refactor point. The backend server (server.ts) has instability 1, reflecting its role as the sole entry point.

How To Use It

# Clone the repo
git clone https://github.com/moses-y/codevibes
cd codevibes

# Install dependencies (both front‑end and back‑end share the root package.json)
npm ci

# Prepare backend env (copy example and edit as needed)
cp codevibes-backend/.env.example codevibes-backend/.env
# Required keys: GITHUB_TOKEN, DEEPSEEK_API_KEY (documented in .env.example)

# Start the backend (refer to scripts in codevibes-backend/package.json)
npm run backend   # typically runs `ts-node src/server.ts` or compiled start

# Start the frontend (refer to root package.json scripts)
npm run dev       # Vite dev server on http://localhost:5173

If the scripts differ, inspect package.json and codevibes-backend/package.json for the exact command names. The Dockerfile can build the backend image with docker build -t codevibes-backend . and run it with the supplied .env.

Real‑World Use

A SaaS security team integrates CodeVibes into their PR workflow by invoking the backend API from a GitHub Action (once CI is added). When a pull request opens, the action posts the repo URL to /api/analyze; the resulting Vibe Score is posted as a comment, giving reviewers a quick risk signal without manual code review.

Code Health & Issues

  • HIGH – No test suite – 112 source files, zero test files.
  • HIGH – No CI workflow – No .github/workflows/* present.
  • HIGH – No build gate for Docker imagecodevibes-backend/Dockerfile not validated by CI.
  • MEDIUM – Dependabot missing – No dependabot.yml for 2 manifests.
  • MEDIUM – Base image not pinnednode:20-alpine used without digest.
  • MEDIUM – Container runs as root – Dockerfile lacks a non‑root USER.
  • LOW – Repository conventions absent – No .editorconfig, .gitattributes, or formatter config.

Additional static findings: deep nesting (max depth 10) in several page components, duplicated 6‑line blocks across 11 files, oversized services (deepseekService.ts, AnalyzePage.tsx), empty catch blocks, and a high‑branching database.ts/encryption.ts.

The Bottom Line

CodeVibes delivers a complete AI‑driven analysis stack with a clear front‑end UI and a modular back‑end, but it currently lacks the engineering safeguards needed for production (tests, CI, hardened Docker image). Teams comfortable adding those missing pieces can benefit from the ready‑made analysis flow; otherwise, the repo should be treated as a prototype rather than a drop‑in service.