Skip to content

Commit 22febf4

Browse files
committed
Improve the README
1 parent b8f51f5 commit 22febf4

File tree

3 files changed

+41
-32
lines changed

3 files changed

+41
-32
lines changed

README.md

Lines changed: 20 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3,53 +3,44 @@
33
Pulldash
44
</h1>
55

6-
The fastest way to review pull requests that makes massive PRs feel instant.
6+
Review pull requests in a high-performance UI, driven by keybinds.
77

8-
- Keybord-driven: navigate, comment, and approve without touching your mouse
9-
- Performant: giant diffs render smoothly, virtualized rendering keeps you at 60fps even on 10k+ line changes
10-
- Local or hosted: download the desktop app to avoid sending your credentials anywhere
8+
> [!WARNING]
9+
> Pulldash is in alpha. Please report bugs.
1110
12-
## Try It
11+
[![Example](./docs/screenshots/overview.png)](https://pulldash.com)
1312

14-
Head to [pulldash.com](https://pulldash.com) to explore pull-requests (no auth required).
13+
## Try
1514

16-
[Download for Desktop](https://github.com/coder/pulldash/releases).
15+
**Browser**: on [pulldash.com](https://pulldash.com) [no auth required]
1716

18-
## Features
17+
> [!NOTE]
18+
> GitHub tokens are stored in your browser, never on the Pulldash server post-authentication.
19+
20+
**Desktop**: download the [latest release](https://github.com/coder/pulldash/releases) available for Linux, macOS, and Windows.
1921

20-
- Fast
2122

22-
![]
23+
## Features
2324

2425
- Customize your PR list with search queries:
2526

2627
![Filtering PRs](./docs/screenshots/filtering.png)
2728

28-
## Why Not GitHub's Web UI?
29-
30-
- Lack of native PR tracking
29+
- Use keybinds to add/remove comments, select line ranges, switch files, and submit reviews:
3130

32-
GitHub's PR interface is slow, especially for large PRs.
31+
![Keybinds](./docs/screenshots/keybind-driven.png)
3332

34-
GitHub's PR interface is slow, especially for large PRs.
33+
- Instantly search across files:
3534

36-
| Issue | GitHub Web | Pulldash |
37-
| ----------------------- | ----------------------------- | ----------------------------------- |
38-
| **Large PRs** | Truncates diffs, loads slowly | ✓ Renders everything, stays smooth |
39-
| **Keyboard navigation** | Limited shortcuts | ✓ Full keyboard-driven workflow |
40-
| **Multi-file review** | Constant page loads | ✓ Instant tab switching |
41-
| **Context switching** | Browser tabs everywhere | ✓ Dedicated app, focused experience |
35+
![Search](./docs/screenshots/search.png)
4236

43-
GitHub supports [CORS](https://docs.github.com/en/rest/using-the-rest-api/using-cors-and-jsonp-to-make-cross-origin-requests) on their API, making Pulldash a simple UI.
37+
## Why not GitHub's UI?
4438

45-
## Keyboard Shortcuts
39+
GitHub supports [CORS](https://docs.github.com/en/rest/using-the-rest-api/using-cors-and-jsonp-to-make-cross-origin-requests) for their API, making Pulldash a simple UI wrapper with some nicities:
4640

47-
| Action | Shortcut |
48-
| --------------- | ------------------ |
49-
| Command palette | `⌘K` or `⌘P` |
50-
| Switch tabs | `⌘1` - `⌘9` |
51-
| Close tab | `⌘W` |
52-
| Navigate files | `` `` in palette |
41+
- Filtering on repositories you care about.
42+
- Opening large files in GitHub is slow (Pulldash performs all diff parsing and syntax highlighting in worker threads).
43+
- GitHub lacks comprehensive keybinds that allow you to be fully keyboard-driven.
5344

5445
## License
5546

docs/screenshots/overview.png

643 KB
Loading

src/browser/components/pr-review.tsx

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1383,9 +1383,6 @@ const DiffViewer = memo(function DiffViewer({
13831383
overscan: 100,
13841384
// Add padding at the end so we can scroll the last line to center
13851385
paddingEnd: 300,
1386-
// Account for KeybindsBar height when calculating visibility for scrollToIndex
1387-
// This prevents lines from being hidden under the bar when jumping to bottom
1388-
scrollMargin: 50,
13891386
});
13901387

13911388
const onDragStart = useCallback(
@@ -1659,6 +1656,27 @@ const DiffViewer = memo(function DiffViewer({
16591656
virtualizer.scrollToIndex(rowIndex, {
16601657
align: "auto",
16611658
});
1659+
1660+
// Account for KeybindsBar: if line is near bottom of viewport, scroll a bit more
1661+
// This prevents lines from being hidden under the bar
1662+
const scrollEl = parentRef.current;
1663+
if (scrollEl) {
1664+
requestAnimationFrame(() => {
1665+
const item = virtualizer
1666+
.getVirtualItems()
1667+
.find((v) => v.index === rowIndex);
1668+
if (item) {
1669+
const itemBottom = item.start + item.size;
1670+
const viewportBottom =
1671+
scrollEl.scrollTop + scrollEl.clientHeight;
1672+
const KEYBINDS_BAR_HEIGHT = 50;
1673+
// If item is within 50px of viewport bottom, scroll down to give clearance
1674+
if (itemBottom > viewportBottom - KEYBINDS_BAR_HEIGHT) {
1675+
scrollEl.scrollTop += KEYBINDS_BAR_HEIGHT;
1676+
}
1677+
}
1678+
});
1679+
}
16621680
}
16631681
}
16641682
});

0 commit comments

Comments
 (0)