Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
b993ba0
Merge pull request #3 from ashproto/main
ashproto Jul 6, 2026
12bacd6
chore: vendor git-filter-repo script + bundling spec and plan
ashproto Jul 6, 2026
3884f50
feat(rewrite): parameterize git-filter-repo invocation via argv prefix
ashproto Jul 6, 2026
6bb6293
feat(desktop): resolve + bundle git-filter-repo and add install-CLT c…
ashproto Jul 6, 2026
00318f1
feat: actionable prereq banner for bundled git-filter-repo
ashproto Jul 7, 2026
0bd6996
Merge pull request #4 from ashproto/bundle-filter-repo
ashproto Jul 7, 2026
fb81426
fix(ci): use workspace-root target dir for macos release artifacts
ashproto Jul 7, 2026
202714c
Merge pull request #5 from ashproto/fix-release-artifact-paths
ashproto Jul 7, 2026
00a93d1
fix(ci): guard ai changelog by size, bump ai-inference to v2, pin mac…
ashproto Jul 7, 2026
448204f
Merge pull request #6 from ashproto/fix-changelog-size-guard
ashproto Jul 7, 2026
1c9ef7e
feat: add git-it.app marketing landing site in website/
ashproto Jul 7, 2026
422f8c1
ci: deploy website/ to github pages on main
ashproto Jul 7, 2026
2a32832
chore: license under CC BY-NC-SA 4.0 (source-available, noncommercial)
ashproto Jul 7, 2026
ffbb05b
docs: add DESIGN.md documenting Classic + NERV design languages as ap…
ashproto Jul 7, 2026
c18e949
chore: ship SIL OFL notices for bundled Anton + IBM Plex fonts
ashproto Jul 7, 2026
512b942
chore: sync package-lock.json license to CC-BY-NC-SA-4.0
ashproto Jul 7, 2026
fb490ee
fix: scope sticky nav styles to the primary nav so the footer nav doe…
ashproto Jul 7, 2026
74c4c32
fix: add html5 doctype + full document structure to pages (exits quir…
ashproto Jul 7, 2026
56691ee
fix: prevent nav overflow at narrow widths (hide github link <=400px,…
ashproto Jul 7, 2026
b231de8
Merge pull request #7 from ashproto/landing-site
ashproto Jul 7, 2026
e0163c8
fix: read current branch from full ref so a same-named tag can't shad…
ashproto Jul 7, 2026
7fb0145
Merge pull request #8 from ashproto/fix-current-branch-tag-shadow
ashproto Jul 7, 2026
5478fb7
docs(theme): add NERV app-theme design spec (5-lens adversarial review)
ashproto Jul 7, 2026
f5f8d5e
docs(theme): add NERV app-theme implementation plan (phased, task-by-…
ashproto Jul 7, 2026
e67496b
docs(theme): record NERV HUD spike findings (bracket hosts + overlay …
ashproto Jul 7, 2026
cef431d
feat(theme): bundle NERV woff2 fonts (Anton, IBM Plex Sans 400/500/60…
ashproto Jul 7, 2026
268cd99
feat(theme): global nerv.css (@font-face) + no-FOUC themeMode wired v…
ashproto Jul 7, 2026
5231786
feat(theme): add persisted theme state (classic/nerv) to the store
ashproto Jul 7, 2026
8b1049d
feat(theme): add Classic/NERV toggle to Settings → Appearance
ashproto Jul 7, 2026
e3925ed
feat(theme): add NERV token block + tokenize font/radius/on-accent/diff
ashproto Jul 7, 2026
e527574
feat(theme): theme-aware commit-graph lane palette (NERV) via pure la…
ashproto Jul 7, 2026
460beb9
feat(theme): add NERV Shiki diff theme + app-theme-aware selection
ashproto Jul 7, 2026
7a9cdb3
refactor(theme): route hardcoded mono font-family through --font-mono
ashproto Jul 7, 2026
a5d7758
refactor(theme): tokenize rectangular border-radius (angular in NERV)
ashproto Jul 7, 2026
331bdac
feat(theme): route on-accent button text + fix stuck-in-Classic color…
ashproto Jul 7, 2026
7e9d33c
fix(theme): route danger:hover text through --on-accent (NERV AA on o…
ashproto Jul 7, 2026
a164b9a
feat(theme): apply Anton display face to NERV chrome headers/labels
ashproto Jul 7, 2026
43e1bd5
fix(theme): drop Svelte-only :global() from plain-CSS nerv.css (rules…
ashproto Jul 7, 2026
6f6e475
feat(theme): add NERV HUD scanline overlay + corner brackets on .pane…
ashproto Jul 7, 2026
5f34c21
feat(theme): add NERV HUD mono status readout, live dot, header sigil…
ashproto Jul 7, 2026
ffce1dd
docs(theme): add NERV motion/presets/settings-tabs spec (3-lens revie…
ashproto Jul 8, 2026
6e34a93
docs(theme): add NERV motion/presets/settings-tabs implementation plan
ashproto Jul 8, 2026
b2bd431
feat(graph): angular fork edge stubs out of the node before angling
ashproto Jul 8, 2026
ebccb7b
feat(graph): 3-state line style (auto) + theme-aware effectiveGraphLi…
ashproto Jul 8, 2026
a18205f
feat(settings): tabbed sections + Auto graph-line segment
ashproto Jul 8, 2026
cbb52e0
feat(theme): scheme setting + per-scheme NERV lane palettes (pure)
ashproto Jul 8, 2026
e276d08
feat(theme): route NERV decoration through --accent + 6 scheme preset…
ashproto Jul 8, 2026
99664ca
feat(settings): add NERV color-scheme selector (Appearance tab)
ashproto Jul 8, 2026
561fb3b
feat(theme): add NERV motion setting + ambient drift + interaction (g…
ashproto Jul 8, 2026
a3862cc
feat(theme): add NERV boot reveal on activation (gated)
ashproto Jul 8, 2026
c3e93b6
feat(graph): add NERV timeline reveal (armed on repo identity, one-shot)
ashproto Jul 8, 2026
900e684
fix(theme): gate NERV drift layer on data-motion + freeze NERV lane p…
ashproto Jul 8, 2026
bd62fa1
docs(theme): add NERV motion-polish round-2 spec (reveal, hover, boot…
ashproto Jul 8, 2026
dc3ef11
docs(theme): add NERV motion-polish round-2 implementation plan
ashproto Jul 8, 2026
2eee06a
feat(graph): enlarge angular stub so the step reads clearly
ashproto Jul 8, 2026
0e9ef95
feat(graph): timeline reveal grows as one continuous bottom-to-top wipe
ashproto Jul 8, 2026
18b9bab
fix(graph): size the timeline reveal wipe to the content extent (no e…
ashproto Jul 8, 2026
2b586e2
feat(theme): register @property --b and make panel-hover brackets gro…
ashproto Jul 8, 2026
f267791
feat(theme): collapse extends NERV brackets into a full panel outline
ashproto Jul 8, 2026
d27a314
feat(theme): style NERV toolbar buttons as website-style console buttons
ashproto Jul 8, 2026
70636d5
feat(theme): add pulsing live dot to the NERV status bar
ashproto Jul 8, 2026
aa071bf
feat(theme): boot reveal cascades panels in and draws brackets on
ashproto Jul 8, 2026
c07fc91
feat(theme): theme and animate the context menu and settings dialog
ashproto Jul 8, 2026
e7e82da
fix(theme): widen boot window to 1100ms so the full panel cascade com…
ashproto Jul 8, 2026
f9644a4
fix(theme): repair NERV right-click, boot cascade, and timeline reveal
ashproto Jul 8, 2026
15de3c1
feat(theme): add NERV materialize boot, fix loading-bar jank
ashproto Jul 8, 2026
1253451
fix(theme): hold panel box + content hidden until the materialize fra…
ashproto Jul 8, 2026
5757ab7
fix(theme): stop the timeline flashing at rest before the reveal draws
ashproto Jul 8, 2026
26585bc
fix(theme): address PR review — static-NERV spinner + hydrate mirror …
ashproto Jul 8, 2026
881384b
fix(theme): resolve theme in <head> to kill the launch background flash
ashproto Jul 8, 2026
8ff0325
fix(theme): launch the window hidden until the webview paints to kill…
ashproto Jul 8, 2026
9992c67
fix(theme): reveal the window from on_page_load, not a throttled webv…
ashproto Jul 8, 2026
7b705cb
feat(theme): open the materialize fill from the centre out into the o…
ashproto Jul 9, 2026
f5bb36c
feat(icon): redesign the app icon for the NERV theme (hexagon + tri-c…
ashproto Jul 9, 2026
2f1b6cf
docs: archive git-it landing-page plan, spec, and hero mockup
ashproto Jul 9, 2026
debb052
fix(theme): address Codex review — pre-paint scheme mirror + portable…
ashproto Jul 10, 2026
db60609
docs(readme): document the Classic ↔ NERV theme toggle
ashproto Jul 11, 2026
c9420a6
Merge pull request #9 from ashproto/nerv-theme
ashproto Jul 11, 2026
14c5ba4
Merge pull request #10 from ashproto/site-planning-docs
ashproto Jul 11, 2026
e735448
feat(website): add OP // THEME panel showcasing the Classic ↔ NERV theme
ashproto Jul 11, 2026
279f0af
fix(website): replace the dead theme toggle with a swap mark, drop no…
ashproto Jul 15, 2026
16bc39c
Merge pull request #11 from ashproto/website-theme-panel
ashproto Jul 15, 2026
6b79e1d
docs: refresh docs for the shipped NERV theme, icon, and release pipe…
ashproto Jul 15, 2026
6a49b65
docs: fix stale git-filter-repo rationale in ensure_homebrew_path com…
ashproto Jul 15, 2026
54f0867
Merge pull request #12 from ashproto/docs-post-nerv-sweep
ashproto Jul 15, 2026
7447b20
chore(deps-dev): bump vite to 8, plugin-svelte to 7, vitest to 4
ashproto Jul 16, 2026
31c5b68
Merge pull request #15 from ashproto/deps-bump-vite8
ashproto Jul 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ jobs:
run: npm audit --omit=dev --audit-level=high

rust-check:
runs-on: macos-latest
runs-on: macos-26
steps:
- name: Check out repository
uses: actions/checkout@v6
Expand Down
36 changes: 36 additions & 0 deletions .github/workflows/deploy-pages.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: deploy-pages

# Deploys the static marketing site in website/ to GitHub Pages whenever it
# changes on main. Requires Pages to be enabled with "Source: GitHub Actions"
# in repo Settings -> Pages (one-time). Runs on demand via workflow_dispatch too.
on:
push:
branches: [main]
paths:
- 'website/**'
- '.github/workflows/deploy-pages.yml'
workflow_dispatch:

permissions:
contents: read
pages: write
id-token: write

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: website
- id: deployment
uses: actions/deploy-pages@v4
18 changes: 12 additions & 6 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ jobs:
build-macos:
permissions:
contents: read
runs-on: macos-latest
runs-on: macos-26
needs: decide
if: ${{ needs.decide.outputs.skip != 'true' }}
strategy:
Expand Down Expand Up @@ -167,7 +167,7 @@ jobs:

- name: Normalize macOS artifact filenames
shell: bash
working-directory: src-tauri/target/${{ matrix.target }}/release/bundle
working-directory: target/${{ matrix.target }}/release/bundle
env:
ARCH: ${{ matrix.arch }}
run: |
Expand All @@ -186,9 +186,9 @@ jobs:
with:
name: release-macos-${{ matrix.arch }}
path: |
src-tauri/target/${{ matrix.target }}/release/bundle/dmg/*.dmg
src-tauri/target/${{ matrix.target }}/release/bundle/macos/*.app.tar.gz
src-tauri/target/${{ matrix.target }}/release/bundle/macos/*.app.tar.gz.sig
target/${{ matrix.target }}/release/bundle/dmg/*.dmg
target/${{ matrix.target }}/release/bundle/macos/*.app.tar.gz
target/${{ matrix.target }}/release/bundle/macos/*.app.tar.gz.sig
if-no-files-found: error

release:
Expand Down Expand Up @@ -219,6 +219,7 @@ jobs:
path: release-assets/macos-x86_64

- name: Group the changelog
id: group
env:
PREV_TAG: ${{ needs.decide.outputs.previous_tag }}
VERSION: ${{ needs.decide.outputs.version }}
Expand All @@ -227,13 +228,18 @@ jobs:
[ -n "$PREV_TAG" ] && range="${PREV_TAG}..HEAD"
git log "$range" --no-merges --pretty='%s' \
| node scripts/ci/gen-changelog.mjs > grouped-changelog.md
echo "chars=$(wc -c < grouped-changelog.md | tr -d ' ')" >> "$GITHUB_OUTPUT"
echo "----- grouped-changelog.md -----"
cat grouped-changelog.md

- name: Rewrite the changelog (GitHub Models)
id: changelog_ai
# gpt-5 via GitHub Models caps the request body near 4000 tokens; skip the
# AI rewrite for an oversized changelog (e.g. the first release, which spans
# all history) and fall back to the grouped changelog in the next step.
if: ${{ fromJSON(steps.group.outputs.chars) <= 10000 }}
continue-on-error: true
uses: actions/ai-inference@v1
uses: actions/ai-inference@v2
with:
model: openai/gpt-5
system-prompt: |
Expand Down
14 changes: 10 additions & 4 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
**Git It** — a native macOS git client (commit graph, branches, merges, rebases, working-copy
diffs, remotes) with first-class commit-time editing. Also hosts the headless **agent** that
lets the sibling iOS app drive local git remotely. Tauri 2 (Rust) + SvelteKit 5 (runes).
macOS only; window uses native `NSVisualEffect` vibrancy (glass panels). Private; `UNLICENSED`
— licensing is intentionally undecided, do not add a LICENSE.
macOS only; window uses native `NSVisualEffect` vibrancy (glass panels). Licensed
**CC BY-NC-SA 4.0** (source-available, noncommercial — see `LICENSE`); **not** OSI
open source, so never describe it as "open source".

## Commands

Expand All @@ -28,7 +29,7 @@ Frontend-only changes hot-reload under `npm run tauri dev`. **Vitest and the bro
cannot exercise Tauri-only paths** (anything behind `invoke`: native dialogs, working-copy
staging, reword, real git). Those require a running `tauri dev`/`build`.

Requires system `git` on `PATH`. Commit-time editing additionally shells out to `git-filter-repo`.
Requires system `git` and `python3` on `PATH` (both ship with the Xcode Command Line Tools). Commit-time editing runs the **bundled** `git-filter-repo` script (`src-tauri/resources/git-filter-repo/`) via the host `python3` — it is not a `PATH` binary.

## Architecture

Expand All @@ -47,9 +48,12 @@ Three-layer split; a **cargo workspace** (root `Cargo.toml`, members below) with
`relay.rs` (Convex client + message loop), `auth.rs`, `repos.rs`, `crypto/` (HPKE/Ed25519 E2E).
- **`src/`** — SvelteKit 5 SPA (static adapter, single `+page.svelte` route). `lib/store.svelte.ts`
is central runes state; `lib/gitActions.ts` calls Tauri commands; `lib/graph/` renders the lane
graph; `lib/diff/` is Shiki-highlighted diffs; `lib/github/` is the GitHub dashboard screen.
graph; `lib/diff/` is Shiki-highlighted diffs; `lib/github/` is the GitHub dashboard screen;
`lib/theme/` (`nerv.css`, `nerv-motion.css`, `themeMode.ts`) is the Classic↔NERV theme system.
**Pure logic modules are unit-tested with vitest** and must stay Tauri-free: `dates.ts`,
`fileTree.ts`, `refTree.ts`, `commitBody.ts`, graph windowing (`.test.ts` alongside each).
- **`website/`** — the static NERV-themed marketing site (git-it.app), deployed by
`.github/workflows/deploy-pages.yml`; plain HTML/CSS/JS, independent of the SvelteKit app build.

**Data flow:** Svelte `invoke` (`@tauri-apps/api`) → `src-tauri/commands.rs` → `git-core` →
shells out to system `git` (and `gh` for the GitHub screen).
Expand All @@ -64,6 +68,8 @@ shells out to system `git` (and `gh` for the GitHub screen).
whole app during the call (this exact bug froze the GitHub screen).
- Business logic that can be pure belongs in a testable `src/lib/*.ts` module (vitest), not inside
a `.svelte` component — the graph/date/tree logic is covered this way.
- **NERV theme CSS:** never use `:global()` in plain `src/lib/theme/nerv.css` — it isn't a Svelte
`<style>` block, so the browser silently drops the selector. Use bare `:root[data-theme="nerv"]`.

## Sibling repo (`../git-it-ios`)

Expand Down
Loading
Loading