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 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.
+
+ + 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. +
+Every line of the file, with the diff in context. Toggle back to changes-only when you do not need it.
+Collapsible directories, status icons, per-file counts, a filter, a draggable width, and viewed state that sticks.
+A tab beside Files changed, using GitHub's own colours, fonts and icons. Your theme is its theme.
+Jump between changes and files without reaching for the mouse.
+Every file is fetched in the background as soon as the diff loads, so clicking one opens it immediately.
+Add your company's GitHub host from the toolbar popup. Nothing about it is baked into the extension.
+| n / p | Next or previous change in the file |
| ] / [ | Next or previous file |
| w | Whole file or changes only |
| v | Mark the file viewed |
| / | Filter files |
| esc | Back to GitHub |
+ 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.
+
+ 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. +
+