Pulldash: Fast, filterable GitHub PR review. Entirely client-side
12 points by kylecarbs
12 points by kylecarbs
the instant i open https://pulldash.com/ghostty-org/ghostty/pull/9803 on my browser, i see:
Anonymous users are limited to 60 requests per hour. Sign in with GitHub for 5,000 requests per hour.
and signing in with github requires:
This application will be able to read and write all public and private repository data. This includes the following:
- Code
- Issues
- Pull requests
- Wikis
- Settings
- Webhooks and services
- Deploy keys
- Collaboration invites
I'll check up on the anon rate-limit thing, thanks for reporting.
Signing in with GitHub unfortunately requires all of these perms. For OAuth apps, GitHub does not allow scoping tighter than repo for PR reviews.
I understand that this can be GitHub limitation, but I can imagine this being a deal breaker for many of the users. It certainly is a deal breaker for me.
It looks a great project and I passionately hate GitHub's PR pages. It's unfortuante I have to give full access to my account to a third-party app to be able to use it.
If you download the desktop app, there is no token ever sent externally, nor does it give permissions to Pulldash.
The app itself makes calls directly to GitHub, never proxied through a backend - the token is truly client-side, no GitHub App has permissions to access your repositories - even if we wanted to.
Would a PAT be better for you?
Diffs ... only render visible rows.
Could you explain why this is faster? Feels counter-intuitive. I would expect the user to view every single line of a diff, so the browser will have to render any dom node anyway, and it feels like adding JS dom tracking on top would be just pure latency&throughput overhead?
That part of the question which is more a comment than a question:
I'd make two assumptions here:
which I think suggest the architecture where we try to do everything as fast as possible, while trying to mask latency. Something like this:
You're right that for most PRs, a user will view every line. But that's actually not where virtualization helps - it's about avoiding the initial render cost and interaction jank.
Consider a 5,000-line diff. Without virtualization:
With virtualization (20 rows visible, 100 in overscan), we:
On the architecture you suggest, we actually do a lot of this already:
Just remove code highlighting from diff =) This is what I did for https://github.com/antonmedv/gitmal
And prowser for sure can render huge amound of DOM nodes. I checked Gitmal on some enormous commits - it works.
Scrolling triggers layout recalculations across all nodes
I thought page layout is unaffected by scrolling?
Each line has hover states, selection handlers, and comment affordances - all wired up for invisible rows
Can’t you attach the handlers to just the enclosing element and use event.target to work out which line was clicked?
Have you benchmarked a 5000 line diff?
I'll be doing benchmarks (I'm not a fan of the arbitrary feeling either).
Once I do we can have certainty, but on my feeling, it's a lot faster than GitHub.
GitHub is infamous for being incredibly slow, so surely you can set yourself a better target such as Forgejo or cgit, eg https://cgit.freebsd.org/src/commit/?id=1c7c36f67f4670a5e3c256a3a8cea7b4857b8b69