diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml new file mode 100644 index 0000000..8b8805b --- /dev/null +++ b/.github/workflows/pages.yml @@ -0,0 +1,40 @@ +# Publishes the landing page to GitHub Pages. +# +# Pages' branch deployments can only serve the repository root or docs/, and +# docs/ is reserved for documentation, so the site is uploaded as an artifact +# instead. Set Settings > Pages > Source to "GitHub Actions" for this to run. +name: pages + +on: + push: + branches: [main, develop] + paths: + - 'landing/**' + - '.github/workflows/pages.yml' + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +# One deployment at a time, and never cancel one midway: a half-finished +# deployment would leave the site down. +concurrency: + group: pages + cancel-in-progress: false + +jobs: + deploy: + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - uses: actions/checkout@v4 + - uses: actions/configure-pages@v5 + - uses: actions/upload-pages-artifact@v3 + with: + path: landing + - id: deployment + uses: actions/deploy-pages@v4 diff --git a/README.md b/README.md index 729406b..8fea888 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # sofa -Agentic PR reviews at your comfort. +Agentic PR reviews at your comfort. [sofa.rousanali.com](https://sofa.rousanali.com) Sofa is a Chrome extension that adds a **Sofa** tab next to *Files changed* on any GitHub pull request and reviews it the way an editor would: file tree on the left, @@ -133,6 +133,8 @@ plus at least one 1280x800 screenshot. ``` manifest.json extension manifest (paths are rewritten into dist/) +landing/ the site at sofa.rousanali.com, deployed by a Pages workflow +store/ Chrome Web Store listing copy and screenshot build.mjs esbuild driver: bundles every entry, copies the assets src/ content.ts entry: injects the Sofa tab, tracks SPA navigation diff --git a/landing/CNAME b/landing/CNAME new file mode 100644 index 0000000..586154f --- /dev/null +++ b/landing/CNAME @@ -0,0 +1 @@ +sofa.rousanali.com diff --git a/landing/icon.png b/landing/icon.png new file mode 100644 index 0000000..603a44b Binary files /dev/null and b/landing/icon.png differ diff --git a/landing/index.html b/landing/index.html new file mode 100644 index 0000000..804fb75 --- /dev/null +++ b/landing/index.html @@ -0,0 +1,249 @@ + + + + + + Sofa - read a pull request like an editor + + + + + + + + + + +
+
+ +

Read a pull request like an editor

+

+ Sofa adds a tab to GitHub that shows each changed file in full, with the + diff spliced into it. No more judging a change through three lines of context. +

+ +

Chrome Web Store listing is in review. Free and open source.

+
+ +
+ The Sofa tab open on a GitHub pull request, showing a file tree on the left and a whole file with an added line highlighted on the right. +
The Sofa tab, sitting next to Files changed.
+
+ +
+

The problem

+

+ GitHub shows a diff as a handful of hunks with three lines of context + around each one. When the change sits inside a long function, that is not + enough to judge it: you cannot see what the variable was, what the branch + above does, or whether the early return you are reading is the one that + matters. Expanding line by line is slow, and sometimes it simply does not load. +

+

+ Sofa fetches the whole file at the pull request's head commit and renders + every line of it, with added lines marked green, + removed lines red and interleaved where they used + to be, and both line-number gutters correct from the first line to the last. +

+
+ +
+

What you get

+
+
+

Whole files

+

Every line of the file, with the diff in context. Toggle back to changes-only when you do not need it.

+
+
+

A real file tree

+

Collapsible directories, status icons, per-file counts, a filter, a draggable width, and viewed state that sticks.

+
+
+

Native to the page

+

A tab beside Files changed, using GitHub's own colours, fonts and icons. Your theme is its theme.

+
+
+

Keyboard first

+

Jump between changes and files without reaching for the mouse.

+
+
+

Instant

+

Every file is fetched in the background as soon as the diff loads, so clicking one opens it immediately.

+
+
+

Enterprise too

+

Add your company's GitHub host from the toolbar popup. Nothing about it is baked into the extension.

+
+
+
+ +
+

Keyboard

+ + + + + + + +
n / pNext or previous change in the file
] / [Next or previous file
wWhole file or changes only
vMark the file viewed
/Filter files
escBack to GitHub
+
+ +
+

Install

+

+ From source, until the store listing is approved: +

+
git clone https://github.com/rousan/sofa.git
+cd sofa
+npm install
+npm run build
+

+ Then open chrome://extensions, turn on Developer mode, choose + Load unpacked, and pick the dist folder. + Open any pull request and click the Sofa tab. +

+
+ +
+

Privacy

+

+ Sofa reads the pages you already have open, using the session you are + already signed in with. It collects nothing, sends nothing anywhere, and + has no server of its own. The only thing it stores is which files you have + marked viewed, in your browser, per pull request. +

+
+
+ + + + diff --git a/landing/screenshot.png b/landing/screenshot.png new file mode 100644 index 0000000..ab36756 Binary files /dev/null and b/landing/screenshot.png differ