neuron-explorer
Steering-first neuron explorer for Qwen3.5-4B: push every MLP neuron, keep every rollout, browse the results
An AI Senior developer that understands your codebase - health reports, issues, and chat grounded in your real code.
Developer toolsTypeScript · CSSGitHub @renatomfOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
Auditor de codebases JavaScript/TypeScript com IA: importe um repositório do GitHub (ou envie um ZIP) e receba uma nota de saúde por categoria, uma lista priorizada de problemas, um explorador que explica cada arquivo e um chat que responde com base no código real (RAG). codedriven é uma aplicação Next.js 16 (App Router) que faz o papel de um revisor sênior: importa um repositório, mede o código com regras determinísticas, pede a um LLM uma revisão de arquitetura, segurança e performance, e junta tudo numa nota por categoria com os problemas priorizados.Read the full README ↗
Auditor de codebases JavaScript/TypeScript com IA: importe um repositório do GitHub (ou envie um ZIP) e receba uma nota de saúde por categoria, uma lista priorizada de problemas, um explorador que explica cada arquivo e um chat que responde com base no código real (RAG).
Acesse: nextjs-codedriven.vercel.app
codedriven é uma aplicação Next.js 16 (App Router) que faz o papel de um revisor sênior: importa um repositório, mede o código com regras determinísticas, pede a um LLM uma revisão de arquitetura, segurança e performance, e junta tudo numa nota por categoria com os problemas priorizados.
Todo pull request roda a análise sobre este repositório e sobre dois apps propositalmente vulneráveis (OWASP NodeGoat e Juice Shop, com as vulnerabilidades anotadas). Ele falha se a análise piorar (evals/README.md).
A nota determinística deixa as categorias do LLM no valor-base, para ser comparável entre resultados. A linha tracejada é a mesma medida com a fórmula da v1.
/data diz o que vai para o LLM e o que fica guardado.| Camada | Tecnologia |
|---|---|
| Framework | Next.js 16 (App Router, Server Actions, proxy.ts), React 19 |
| Linguagem | TypeScript 5, zod 4 |
| UI | Tailwind CSS 4, shadcn/ui (Base UI) |
| Autenticação | Auth.js (NextAuth v5, sessões JWT): email e senha, GitHub, Google |
| Banco de dados | Neon Postgres + pgvector, Drizzle ORM (migrations versionadas) |
| Execução assíncrona | Vercel Workflows (análise e importação como runs duráveis) |
| Arquivos | Neon Object Storage (ZIP enviado por POST assinado) |
| LLM | AI SDK 7 + Groq (gpt-oss-120b, Zero Data Retention) |
| Embeddings | @huggingface/transformers + ONNX (all-MiniLM-L6-v2, 384 dimensões), em CPU |
| Parsing de código | Tree-sitter (JS, TS, TSX) |
| Integração GitHub | GitHub App (contents e metadata, só leitura) |
| Billing | Stripe |
| Observabilidade | Sentry (erros e traces, sem PII nem código do usuário), logs JSON com correlation id |
| Testes | Vitest (unidade, componentes, integração em Postgres real), Playwright (E2E) |
| Regras de arquitetura | dependency-cruiser no CI |
| Entrega | Vercel (Hobby), GitHub Actions, OSV-Scanner |
flowchart LR
User(["Usuário"])
Visitor(["Visitante<br/>link público"])
subgraph Vercel["Vercel"]
App["codedriven<br/>Next.js 16"]
WF["Vercel Workflows<br/>análise durável"]
Cron["Cron diário<br/>reaper + retenção"]
end
DB[("Neon Postgres<br/>+ pgvector")]
Bucket[("Neon Object Storage<br/>ZIPs enviados")]
Groq["Groq<br/>LLM"]
HF["Hugging Face Hub<br/>modelo de embeddings"]
GH["GitHub<br/>login + GitHub App"]
Google["Google<br/>login"]
Stripe["Stripe<br/>checkout + webhook"]
Sentry[["Sentry"]]
User --> App
Visitor --> App
App --> WF
Cron --> App
App --> DB
WF --> DB
User -- ZIP por POST assinado --> Bucket
WF --> Bucket
WF -- revisão --> Groq
App -- chat e explicações --> Groq
WF -- cold start --> HF
App --> GH
WF -- zipball, token de 1 h --> GH
App --> Google
App <--> Stripe
App -.-> Sentry
WF -.-> Sentry
O sistema é um monólito modular (ADR-001): um único deploy Next.js, com o domínio dividido em módulos. Clean Architecture e DDD entram só onde há regra de negócio.
flowchart TB
subgraph Entrega["Entrega"]
Pages["Pages e route handlers<br/>src/app"]
Actions["Server actions<br/>src/lib/actions"]
Proxy["proxy.ts<br/>sessão + CSP com nonce"]
end
subgraph Modulos["Módulos — src/modules"]
direction LR
Identity["identity"]
Projects["projects"]
Ingestion["ingestion"]
Analysis["analysis"]
Chat["chat"]
Billing["billing"]
end
Lib["src/lib<br/>Auth.js, pipeline, arquivos, GitHub, rate limit"]
Shared["src/shared<br/>logger, redação, env, CSP, tracing"]
DB[("Postgres + pgvector")]
Pages --> Modulos
Actions --> Modulos
Pages --> Lib
Modulos --> Lib
Modulos --> Shared
Lib --> Shared
Modulos --> DB
Lib --> DB
Cada módulo tem a mesma forma (convenção, ADR-002):
src/modules/<módulo>/
├── domain/ # regras em TypeScript puro: sem banco, sem framework, sem process.env
├── application/ # use cases e as portas que eles usam
├── infrastructure/ # implementações: Drizzle, Stripe, GitHub, ONNX
├── index.ts # API pública pura: tipos e regras
└── server.ts # API pública de servidor: use cases ligados ao banco ("server-only")
| Módulo | Responsabilidade |
|---|---|
| identity | Conta, cadastro, credenciais, instalações do GitHub App (só ids), exclusão de conta |
| projects | Ciclo de vida do projeto (queued → processing → completed/failed), importação, link público |
| ingestion | Embeddings e armazenamento vetorial, atrás das portas Embedder e VectorStore |
| analysis | Métricas, uma regra por heurística, amostragem para o LLM, verificação de evidência, fórmula da nota |
| chat | Política do prompt (código como dado) e recuperação de contexto |
| billing | Planos, cota diária com lock transacional (withQuota), Stripe atrás de uma camada anticorrupção |
As regras são verificadas no CI (npm run lint:arch, baseline de violações: 0):
domain/ não importa infraestrutura nem frameworks;index.ts e server.ts podem ser importados;src/app não toca o banco;Uma porta só existe quando há duas implementações ou um teste precisa de um fake.
sequenceDiagram
autonumber
actor U as Usuário
participant A as Server action / rota
participant B as billing
participant W as Vercel Workflow
participant G as GitHub App
participant L as Groq
participant D as Postgres
U->>A: importar repositório
A->>A: sessão, zod, dono da instalação
A->>B: withQuota (lock, checagem, uso)
B->>D: cria o projeto
A->>W: dispara o run e responde na hora
W->>G: token de 1 h, só leitura, só este repositório
G-->>W: zipball
W->>D: arquivos extraídos
W->>D: chunks (Tree-sitter) e embeddings em lotes
W->>W: métricas e regras determinísticas
W->>L: amostra do código em blocos de dados
L-->>W: achados com a linha citada
W->>W: descarta achado sem evidência, agrupa, calcula a nota
W->>D: relatório
U->>A: acompanha o progresso
FatalError), e um run que morre sem gravar a falha é encerrado pelo reaper.Os fluxos de chat, link público, billing e observabilidade estão em docs/architecture.md.
proxy.ts. Toda consulta filtra pelo userId da sessão, com testes de IDOR em Postgres real.Report-Only enquanto os relatórios são revisados (TD-34); framing bloqueado.As decisões ficam em docs/decisions/, cada uma com contexto, alternativas e consequências:
| ADR | Decisão |
|---|---|
| 001 | Monólito modular com Clean Architecture e DDD seletivos |
| 002 | Convenção dos módulos e regras de arquitetura no CI |
| 003 | Cota de uso do plano: lock, checagem e uso numa transação; falha nossa devolve |
| 004 | Custo do LLM: orçamento diário de tokens por plano, teto por chamada, kill switch no banco |
| 005 | Vercel Workflows como job runner da importação e da análise |
| 006 | Embeddings em runtime serverless (ONNX em CPU, cache por hash) |
| 007 | GitHub App só de leitura no lugar do OAuth App com escopo repo |
| 008 | Retenção de 90 dias para o código e exclusão de conta de ponta a ponta |
| 009 | Evals em dois níveis: determinístico obrigatório e LLM real quando a análise muda |
| 010 |
nextjs-codedriven/
├── src/
│ ├── app/ # Pages, route handlers e o link público (/r/<token>)
│ ├── components/ # UI: ui/ (shadcn), shared/ e pastas por feature
│ ├── modules/ # identity, projects, ingestion, analysis, chat, billing
│ ├── lib/ # Auth.js, server actions, pipeline, arquivos, GitHub, rate limit
│ ├── shared/ # logger, redação, env, CSP, tracing, prompt-data
│ ├── db/ # Schema do Drizzle
│ └── proxy.ts # Sessão das páginas protegidas + CSP com nonce
├── drizzle/ # Migrations versionadas
├── evals/ # Evals da análise, do chat e do LLM (casos, repositórios, resultados)
├── e2e/ # Playwright
├── scripts/ # Gráfico de dogfooding, medição de cobertura
└── docs/
├── decisions/ # ADRs
├── runbooks/ # Migrations, GitHub App, object storage, kill switch do LLM
├── retros/ # Retrospectivas por fase
├── architecture.md # Como o sistema é hoje
├── baseline.md # O "antes" medido
├── roadmap-v2.md # Fases, escopo e critérios de saída
└── technical-debt.md # Dívida técnica (TD-xx)
543 testes unitários em 58 arquivos, 180 de integração em 20 arquivos (Postgres real e descartável) e 7 E2E (Playwright, na build de produção).
CI obrigatório para merge:
LLM eval com o modelo real, quando o prompt ou a análise mudam:
Cada versão do prompt fica registrada com o resultado que a mediu (evals/prompts.lock.json).
Medição antes de otimizar: todo número da documentação tem data e método (baseline, resultados das fases 3, 5 e 6).
| Comando | Descrição |
|---|---|
npm run dev | Servidor de desenvolvimento |
npm run build / start | Build e servidor de produção |
npm run lint / lint:arch / typecheck | ESLint, regras de arquitetura, tipos |
npm test | Testes unitários e de componentes (Vitest) |
npm run test:integration | Integração em Postgres local e descartável (recusa hosts remotos) |
npm run test:e2e | Playwright |
npm run eval / eval:chart | Evals da análise e do chat; gráfico de dogfooding |
npm run measure:coverage | Cobertura real (v8) de unidade + integração |
npm run db:generate / db:migrate / db:studio | Migrations e studio do Drizzle |
Integração local com Docker:
docker run -d --rm --name it-pg -e POSTGRES_USER=app -e POSTGRES_PASSWORD=app \
-e POSTGRES_DB=app -p 5432:5432 pgvector/pgvector:0.8.6-pg18
DATABASE_URL="postgresql://app:app@localhost:5432/app" npm run test:integration
Pré-requisitos: Node.js 24, npm e um Postgres 16+ com a extensão pgvector (um projeto gratuito do Neon serve).
npm ci
cp .env.example .env.local # preencha os valores
npm run db:migrate
npm run dev # http://localhost:3000
O .env.example documenta cada variável e diz quais são opcionais. Login com GitHub ou Google, importação pelo GitHub App, billing e object storage podem ficar desligados no desenvolvimento local. A configuração de cada integração está nos runbooks.
Use um banco de desenvolvimento (por exemplo, uma branch do Neon), nunca o de produção: migrations e dados locais vão para onde o
.env.localapontar (runbook de migrations).
O registro de dívida técnica tem a lista completa, com gravidade e destino. As que mais afetam a leitura das notas:
max-lines-per-function, pela fatia de funções longas. Arquitetura, segurança e performance partem de um valor fixo menos os achados: arquitetura, por exemplo, não passa de 88 nem sem achados. O plano de calibração, com metas medidas, está no TD-50.Report-Only até os relatórios do Sentry ficarem limpos (TD-34).Construído a partir do tutorial AliSadeghi-dev/AI-Code-Analyzer, adaptado de Prisma para Drizzle ORM + Neon. A v1 (tag v1-tutorial) acrescentou uma camada de segurança; a v2 acrescentou arquitetura modular, execução durável, testes, evals e operação em produção.
| Fórmula da nota: achados agrupados, penalidade decrescente, testes calibrados |
| 011 | ZIP enviado direto ao object storage até o job processá-lo |