A community-driven registry for the Claude Code ecosystem. Not affiliated with Anthropic.
Are you the author? Sign in to claim
A practical example of integrating AI code review into a real-world codebase. Built with Next.js and Firebase, this repo
A Next.js 16 (App Router) + Firebase application used as a reference project for demonstrating AI/LLM code review with Claude Code and OpenAI Codex. The app itself is a lightweight test-case management tool (projects → modules → test cases → test runs); the interesting part of this repo is how it is reviewed.
This repository is a working example of how to wire LLM-based code review into a real Next.js + Firebase codebase. It shows:
CLAUDE.md, AGENTS.md, and GEMINI.md at the repo root define the architecture, conventions, and review criteria that every AI reviewer reads before producing findings..claude/agents/ and .codex/agents/ define three specialized reviewers (quality, performance, security) that run in parallel..claude/skills/code-review/ contains the shared review checklist, rubric, and a bad-review.md of known false positives to suppress..claude/commands/review-pr.md and .codex/prompts/review-pr.md define the review procedure both tools follow..github/workflows/claude-review.yml) whitelists a narrow set of gh commands. The Codex Action (.github/workflows/codex-review.yml) runs with sandbox: read-only and safety-strategy: drop-sudo.@claude-review or @codex-review on any PR runs the respective reviewer and posts a single consolidated comment back.If you want to study the review wiring without running the app, start by reading, in this order:
AGENTS.md| Layer | Technology |
|---|---|
| Framework | Next.js 16+ (App Router) |
| Language | TypeScript 5+ (strict: true) |
| Styling | Tailwind CSS v4 |
| UI | shadcn/ui (Radix primitives) |
| Auth | Firebase Authentication (Email/Password + Google) |
| Database | Cloud Firestore (client SDK) |
| Storage | Firebase Storage (client SDK) |
| Forms | react-hook-form + zod |
Full architectural rules live in AGENTS.md.
npm install
cp .env.local.example .env.local # then fill in Firebase values — see below
npm run dev
Open http://localhost:3000.
The app uses the Firebase client SDK only — no firebase-admin, no Server Actions for Firestore, no API routes for data access. Everything is authenticated client-side.
fullcase-web-dev). Google Analytics is optional — disable it for local dev if you want.firebaseConfig object — keep this tab open; you'll copy those values into .env.local in the next section.localhost is allowlisted by default).In the left sidebar, open Build → Firestore Database → Create database.
Choose a region (pick one close to your users — you cannot change this later).
Start in production mode (we will paste custom rules next, don't pick "test mode").
Once the database is provisioned, open the Rules tab and paste:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
}
}
Click Publish.
These are permissive defaults — any signed-in user can read and write any document. Tighten them before going to production. The production rule shape the application code is written against is documented in AGENTS.md §14.
In the left sidebar, open Build → Storage → Get started.
Accept the default bucket location (it is tied to your Firestore region).
Start in production mode.
Once the bucket exists, open the Rules tab and paste:
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
Click Publish.
.env.localCreate a file named .env.local in the repo root with the following keys. Fill in the values from the firebaseConfig object shown during app registration (Project settings → General → Your apps).
NEXT_PUBLIC_FIREBASE_API_KEY=
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=
NEXT_PUBLIC_FIREBASE_PROJECT_ID=
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=
NEXT_PUBLIC_FIREBASE_APP_ID=
These are consumed by lib/firebase/config.ts:
const firebaseConfig = {
apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY,
authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN,
projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID,
storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET,
messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID,
appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID,
};
The NEXT_PUBLIC_ prefix is required so Next.js exposes these values to the browser. .env.local is gitignored — never commit it.
Two reviewers are wired into this repo and both are triggered by PR comments:
| Trigger comment | Reviewer | Workflow |
|---|---|---|
@claude-review | Anthropic Claude | .github/workflows/claude-review.yml |
@codex-review | OpenAI Codex | .github/workflows/codex-review.yml |
Each reviewer reads the PR diff, follows its review-pr prompt, spawns three specialized subagents (quality, performance, security) in parallel, deduplicates findings, applies the severity rubric in AGENTS.md §17, and posts a single consolidated comment.
.github/workflows/claude-review.yml ──▶ Claude GitHub Action
│
├─ reads CLAUDE.md + AGENTS.md
├─ runs .claude/commands/review-pr.md
└─ spawns .claude/agents/*
(quality, performance, security)
using .claude/skills/code-review/
.github/workflows/codex-review.yml ──▶ Codex GitHub Action
│
├─ reads AGENTS.md
├─ runs .codex/prompts/review-pr.md
└─ spawns .codex/agents/*
(quality, performance, security)
Both workflows read keys from Settings → Secrets and variables → Actions → New repository secret:
| Secret | Used by |
|---|---|
ANTHROPIC_API_KEY | claude-review.yml |
OPENAI_API_KEY | codex-review.yml |
GITHUB_TOKEN | both (provided automatically by Actions) |
ANTHROPIC_API_KEY (Claude)fullcase-web-ci), and choose the workspace it should belong to.sk-ant-….ANTHROPIC_API_KEY.You will need billing enabled on the workspace. The review action uses
claude-sonnet-4-6by default (configured in claude-review.yml).
OPENAI_API_KEY (Codex)fullcase-web-ci), and scope it to the project you want billed.sk-…. It will not be shown again.OPENAI_API_KEY.Codex review uses
gpt-5.3-codex(configured in codex-review.yml). You need an OpenAI org with billing enabled and access to the Codex model family.
/review-pr command from inside this repo. It will read CLAUDE.md, load .claude/skills/code-review/, and drive the same subagents the Action uses.CODEX_HOME=.codex, and run the review-pr prompt defined in .codex/prompts/review-pr.md.app/ # Next.js App Router pages + layouts (thin — no business logic)
components/ui/ # shadcn CLI output — do not edit manually
components/<feature>/ # Presentational feature components
hooks/ # Data hooks with loading + error state
services/ # Pure async Firestore/Storage functions (no React)
lib/firebase/ # Singleton init + low-level helpers
types/ # Single source of truth for domain types
.claude/ # Claude-specific agents, commands, skills, settings
.codex/ # Codex-specific agents, prompts, rules, config
.github/workflows/ # PR review + pre-merge CI
AGENTS.md # Canonical architecture + review rubric (read first)
CLAUDE.md # Claude-specific extensions to AGENTS.md
GEMINI.md # Gemini-specific extensions to AGENTS.md
| Command | Purpose |
|---|---|
npm run dev | Start the dev server on :3000 |
npm run build | Production build |
npm run lint:check | Report lint errors without modifying files |
npm run lint:fix | Auto-fix formatting, import order, unused imports |
Always run npm run lint:fix before committing.
next/image, route groups1000+ skills curated from Anthropic, Vercel, Stripe, and other engineering teams
Design enforcement with memory — keeps your UI consistent across a project
Universal SEO skill for Claude Code. 25 sub-skills + 18 sub-agents covering technical SEO, E-E-A-T, schema, GEO/AEO, bac
Route Claude Code traffic to any of 17 provider backends including free or local models