PrimoDev/ apps

ReviewifyWork in progress

Self-hosted AI pull request reviewer with human curation

  • Web
  • Self-hosted
  • Docker
  • Free
  • Open source · MIT
View on GitHub

What is Reviewify?

Reviewify is a self-hosted AI pull request review dashboard: bring your own model key, get a full review in one click and decide what reaches the PR. Every comment can be accepted, edited, rejected or redone before it hits GitHub.

MIT licensed. Run it with docker compose up --build after registering a GitHub App and filling in .env, and it ships with a Railway deploy config.

What it does

  1. 01Full AI review of the diff in one click
  2. 02Accept, edit, reject or redo each comment before posting
  3. 03Only approved comments are posted to GitHub
  4. 04Bring your own OpenRouter, Anthropic or OpenAI key
  5. 05Model keys stored with AES-256-GCM encryption
  6. 06ADRs, house rules and coding standards as review inputs
  7. 07Inbox of PRs assigned to you, solo or as a team
  8. 08Background worker for async reviews

FAQ

How do I install Reviewify?
Register a GitHub App with read and write access to pull requests, copy .env.example to .env, generate ENCRYPTION_KEY and SESSION_SECRET, and run docker compose up --build. Then sign in with GitHub at localhost:3000 and add your key in Settings.
Which platforms and models does it support?
GitHub only for now; GitLab is on the roadmap. Models come through an OpenRouter key (Claude, GPT, Kimi, Minimax and more) or directly from Anthropic or OpenAI.
What is the license?
MIT.
How is it different from other AI PR reviewers?
Nothing is posted automatically: the AI proposes and a human approves each comment. It runs on your infrastructure, so diffs and keys stay there.
Is it ready?
It is an early MVP. The manual loop (sign in, inbox, review, curate, post) is scaffolded end to end, and phase 1 of the roadmap is still in progress.

Documentation

README from the lucianodiisouza/reviewify repository, refreshed on every deploy.

CI

AI reviews your pull requests. You keep the pen.

Reviewify is a self-hosted PR-review dashboard. Bring your own model key, get a full AI review in one click, then curate every comment — accept, edit, reject, or redo — before a single word reaches the PR. Run it solo or invite a team; the operator decides.

  • 🔑 Bring your own model — one OpenRouter key unlocks Claude, Kimi, Minimax, GPT and dozens more, on your quota.
  • ✋ Curate before posting — the AI proposes, a human approves. Nothing is posted to GitHub until you say so.
  • 🏠 Open & self-hostable — your diffs and keys never leave your infrastructure.
  • 📐 Standards as config — ADRs, house rules, and coding standards are first-class inputs the model actually applies.

Status: early MVP. The manual review loop (sign in → inbox → review → curate → post) is scaffolded end to end. See the roadmap.

How it works

Propose  →  Curate  →  Post
  │           │          │
  AI review   accept /   only approved
  on the      edit /     comments go
  diff        reject     to GitHub

Stack

Next.js (App Router) · PostgreSQL + Prisma · a polling worker for async reviews. Everything comes up with one docker compose up.

Quick start (self-host)

1. Register a GitHub App at https://github.com/settings/apps/new for your org or account:

  • Permissions: Pull requests (read & write), Contents (read), Metadata (read)
  • Subscribe to the Pull request webhook event
  • Callback URL: ${APP_URL}/api/auth/callback
  • Setup URL: ${APP_URL}/api/github/setup (enable "Redirect on update")
  • Webhook URL: ${APP_URL}/api/webhooks/github

2. Configure secrets:

cp .env.example .env
# generate the two secrets
openssl rand -base64 32   # -> ENCRYPTION_KEY
openssl rand -base64 32   # -> SESSION_SECRET
# then paste your GitHub App's id, client id/secret, webhook secret & private key

3. Bring it up:

docker compose up --build

Open http://localhost:3000, sign in with GitHub, install the App on your repos, and add your OpenRouter key in Settings.

Deploy to Railway

Reviewify ships with a railway.json that builds from the Dockerfile and runs migrations on boot.

  1. Create a project and add a Postgres database (Railway → New → Postgres).
  2. Deploy this repo as a service; set variables:
    • DATABASE_URL → reference the Postgres plugin (${{Postgres.DATABASE_URL}})
    • ENCRYPTION_KEY, SESSION_SECRET → openssl rand -base64 32 each
    • APP_URL → your service's public URL (e.g. https://reviewify.up.railway.app)
    • GITHUB_* → from your GitHub App (paste the PEM into GITHUB_APP_PRIVATE_KEY)
  3. Add a second service from the same repo for the worker. Both services share one image; the start command dispatches on SERVICE_ROLE, so just set SERVICE_ROLE=worker on the worker service (plus the same DATABASE_URL, ENCRYPTION_KEY, and GITHUB_* variables). Leave it unset on the web service.

Point your GitHub App's callback, setup, and webhook URLs at APP_URL.

Local development

npm install
# start Postgres however you like, then point DATABASE_URL at it
npm run db:migrate       # create the schema
npm run dev              # web app on :3000
npm run worker:dev       # background review worker (separate terminal)

Run the checks CI runs:

npm run lint
npm run build
npm test                 # Vitest unit tests (diff parser, crypto)

Project layout

prisma/schema.prisma        the 8-table data model
src/lib/env.ts              validated config
src/lib/crypto.ts           AES-256-GCM for stored model keys
src/lib/providers/          OpenRouter client + the JSON findings contract
src/lib/vcs/                platform-agnostic VCS seam + GitHub impl
src/lib/review/             prompt builder + run orchestration
src/app/api/                auth, webhooks, review/finding actions
src/app/{inbox,pr,settings} the review UI
worker/                     polls for pending runs and executes them

Roadmap

  • Phase 1 — the self-hosted loop (MVP, in progress): GitHub sign-in, assigned-PR inbox, one-click review, inline curation, team rules, post to GitHub.
  • Phase 2 — depth & breadth: repo-level context beyond the diff, native Anthropic prompt caching, per-team model policy, outbound notifications.
  • Phase 3 — autopilot (gated): optional auto-review + auto-post on assignment; GitLab support.

Contributing

Issues and PRs welcome — see CONTRIBUTING.md.

License

MIT