reviewmaster.devDownload d

reviewmaster.dev / features

Every feature. Each one shown.

The whole loop, from the first read to the merge, with the app's own screens. Sample data throughout.

01 / review-map+5−47

A reading order, not a file list.

A preflight pass groups the changed files into sections, orders them from contracts to tests, explains each, and marks the risky one. It runs again when new commits land.

acme/dashboard #482
1The invite contractStart here. Everything else depends on these types.
Msrc/shared/types.ts+18−2
Msrc/shared/schemas.ts+11−0
2Expiry column and migrationChanges stored data. Read before the logic that relies on it.HIGH · DATA LOSS
Adb/migrations/0042_invite_expiry.sql+24−0
Msrc/db/invites.ts+31−9
3Expiry rulesThe core of the change: when an invite stops working.
Msrc/services/InviteService.ts+64−12
Msrc/api/invites.ts+22−6
Msrc/services/mailer.ts+9−3
4Invite screenWhat people see once the rules above apply.
Msrc/ui/InviteList.tsx+40−18
Asrc/ui/InviteRow.tsx+52−0
5TestsLast: check they cover the rules you just read.
Atests/InviteService.test.ts+88−0
Mtests/invites.e2e.ts+17−4
02 / ai-review-draft+14−0

The first draft is written for you.

Streams in as it is written, with files and lines. Steer it with reviewer notes ("ignore formatting-only issues"). Edit the markdown, watch the preview, submit once. Saved locally as it streams, so a crash loses nothing.

AI Review DraftWaiting for the model…
Raw Markdown
Live Preview

Review Summary

Solid change. One migration issue must be fixed before merge; the rest is small.

Findings

HIGH1. Backfill expires every existing invite

db/migrations/0042_invite_expiry.sql:14

The backfill sets expires_at = now() on old rows, so every current invite stops working the moment this ships. Backfill created_at + 7 days instead.

MED2. Expiry compared in local time

src/services/InviteService.ts:88

new Date() is compared with a UTC column. Compare Date.now() and store UTC.

Final Recommendation

Needs changes before merge.

2 inline comments attachedSaved locally
Review submitted successfully. It is on GitHub as you, on acme/dashboard #482.
03 / risks+4−0

Risks first. Sixteen kinds of them.

Each finding has a type, a severity and a file. Click one and the diff opens there.

AI Issues & Risks4 · 1 critical
  • criticalBackfill expires every existing inviteData loss · db/migrations/0042_invite_expiry.sql:14
  • highExpiry compared in local timeBug · src/services/InviteService.ts:88
  • mediumNo test for the 7-day boundaryTest gap · tests/InviteService.test.ts
  • lowTwo copies of the expiry constantMaintainability · src/shared/types.ts:41
BugSecurityRegressionPerformanceMaintainabilityTest gapData lossAPI contractAccessibilityConfigurationDeploymentConcurrencyCompatibilityMigrationDependency
04 / diff-viewer+3−1

A diff you can actually read.

Word-level highlighting inside changed lines. Find in the file or across every file. The whole file with the changes in place, and a minimap. j and k walk the files; v marks one viewed.

src/services/InviteService.tsexpires2/5Aa3 / 6 viewed
8484 const invite = await repo.find(id)
85- if (invite.expiresAt < new Date()) throw expired()
85+ if (invite.expires_at < Date.now()) throw expired()
8686 return invite
87+ // UTC on both sides; see 0042_invite_expiry.sql
+Compare in UTC here, and add a test for the boundary.PENDING
05 / fix-verification+3−0

They pushed a fix. Did they fix it?

After new commits, every open piece of feedback, yours or anyone's, gets a verdict with the evidence: addressed, partly, not at all, outdated. A suggested reply, resolve the thread, or post one follow-up listing what is still open.

Backfill expires old invitesOPENBackfill now keeps existing invites valid. a41c9e2
Compare expiry in UTCOPENFixed in the service; the API route still uses local time.
Test the 7-day boundaryOPENNo new test in these commits.
06 / autopilot+4−0

Work done while you were out.

Rules per repository or per account. Preflight, full draft, regenerate on push, verify fixes. Skips bots and draft PRs. A daily cap, a pause switch, a 30-day log. It keeps watching from the menu bar after you close the window, and it never posts.

Rule · acme/dashboard
Run automatically
Skip

Never posts. Drafts wait for you.

Next check in 3:42 · 12/50 runs today
Activity
  • ✓#482 Expire team invitesReview · new PR
  • ✓#480 Invite list virtualisedPreflight · new commits
  • —#479 Bump eslint to 10.2skipped — bot author
  • ✓#477 Expiry rulesVerify fixes · review feedback
07 / inbox+4−0

Everything waiting on you. One list.

Across every connected GitHub account: drafts ready to send, new commits since your review, reviews requested from you, runs that failed. Mark one done and it comes back by itself when something new happens.

Inbox · 4All accounts
  • AI review ready#482 Expire team invites after 7 daysacme/dashboard · sam work
  • Needs re-review#479 Rate-limit the invite endpointacme/dashboard · priya work
  • Review requested#51 Rotate signing keysacme/infra · harsh work
  • Preflight ready#12 Migrate to Vite 8sam/side-project · sam personal
08 / bulk-runs+25−0

Twenty-five pull requests. One click.

Select what you like in the list and run the preflight, the preflight and a draft, or verification on all of them. Existing work is kept unless you say otherwise. One summary when it is done.

#482 Expire team invites after 7 daysAI review ready
#480 Invite list virtualisedPreflight ready
#477 Expiry rulesNeeds re-review
#471 Bump eslint to 10.2New
3 selected
09 / create-and-merge+2−0

Open it here. Merge it here.

New pull request: branch pickers that search every branch on GitHub, a live compare, your repo's PR template filled in, and a description the AI writes from the commits. Merge: squash, merge commit or rebase, with the branch rules shown first.

New pull request
basemain ← headfeat/invite-expiry
3 commits ahead of main · 11 files changed
DescriptionExpires team invites 7 days after they are sent. Adds the expiry column, the backfill…
Merge pull request
Review required · 1 of 1 approvals · checks passed
10 / models+2−0

Your model. Your call.

Codex or Claude, any model your CLI offers, any effort level. Pin a different model for the preflight. See your plan's usage before you run. New models reach the picker with a CLI update alone.

Active modelClaude › Sonnet · High
Preflight modelCodex › gpt-5.4 · Medium
5-hour limit42% used · resets in 2h 15m
Weekly limit18% used · resets in 4 days
11 / themes+5−0

Five looks. One keyboard.

Graphite, Paper, Nocturne, Carbon, Sandstone: colour, type and corners change, the layout never does. Press ? in the app for every shortcut.

acme/dashboard #482
1The invite contract
types.ts
schemas.ts
2Expiry column
0042_invite_expiry.sql
HIGHBackfill expires every old invite
MEDExpiry in local time
12 / privacy+0−0

We can't read your code.

There is no server of ours in the path. The pull request goes from your Mac to your own AI vendor through your own CLI; your review goes to GitHub when you submit. GitHub tokens stay in the macOS keychain. No telemetry.

Your MacReview Master · your CLIYour AI vendorunder your own loginGitHubwith your own tokenOur serversnothing of yoursthe diff, through your CLIyour review, when you submit
The phone relay carries only encrypted traffic it cannot read. When you subscribe, our billing partner keeps your email and plan status, and nothing else.
13 / phone+5−0

Approve from the couch.

Paired with one scan, end-to-end encrypted, a push when a review is ready. Read the draft, comment on a line, approve, merge, pause Autopilot. The phone, in full →

All of it. $5 a month, flat.

Download for macOS
REVIEWj k section · v viewed · c comment · ? keysDownload
Keys
j kNext / previous sectionvMark viewed and move oncComment on the current section⌘KJump anywheretLight / darkdDownloadescClose
Menu
Download for macOS