Skip to content

Rewrite Hashpass with Vite+ and React 19#91

Merged
stepchowfun merged 18 commits into
mainfrom
rewrite
Jul 8, 2026
Merged

Rewrite Hashpass with Vite+ and React 19#91
stepchowfun merged 18 commits into
mainfrom
rewrite

Conversation

@stepchowfun

@stepchowfun stepchowfun commented Jul 3, 2026

Copy link
Copy Markdown
Owner

This PR replaces the entire implementation with a from-scratch rewrite. The functionality is unchanged, and the password generation algorithm is bit-for-bit identical — the original test vectors (and the README's worked example) pass against the new implementation.

The notable changes:

  • The toolchain is now Vite+ (Vite, Vitest, Oxlint, Oxfmt, Rolldown), replacing webpack, jest, eslint, and prettier. A single pinned vite-plus dev dependency provides building, testing, linting, formatting, and type checking through the vp CLI.
  • The UI is now React 19 with CSS modules, replacing React 18 with react-jss.
  • The extension manifest now lives in public/manifest.json, and the built extension is fully contained in dist (the release ZIP is just the contents of dist).
  • The version is bumped to 3.0.0, and the changelog records the rewrite while preserving the existing release history.

Status: Ready

Fixes: N/A

🤖 Generated with Claude Code

stepchowfun and others added 4 commits July 3, 2026 15:48
Replace the entire implementation with a from-scratch rewrite. The
functionality is unchanged, and the password generation algorithm is
bit-for-bit identical (verified against the original test vectors). The
notable changes:

- The toolchain is now Vite+ (Vite, Vitest, Oxlint, Oxfmt, Rolldown),
  replacing webpack, jest, eslint, and prettier.
- The UI is now React 19 with CSS modules, replacing React 18 with
  react-jss.
- The extension manifest now lives in `public/manifest.json` and the
  built extension is fully contained in `dist`.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file was unintentionally deleted by the rewrite.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Restore the original changelog history and bump the version to 3.0.0,
following the published 2.1.7.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The rewrite took this template from stem-cell, which dropped the
Chrome-specific line.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@stepchowfun stepchowfun changed the title Rewrite Hashpass with a modern toolchain Rewrite Hashpass with Vite+ and React 19 Jul 3, 2026
stepchowfun and others added 5 commits July 5, 2026 23:34
Configure the formatter with `singleQuote: true`, matching the style
previously enforced by Prettier, and reformat accordingly. Note that
JSX attributes keep double quotes, as is conventional.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Now that Markdown files are not formatted automatically, restore the
formatting conventions from the template these files came from: asterisk
bullets in the code of conduct, the original issue template layout, and
unwrapped prose in the README and changelog. No content changes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The icons keep their existing file names and the #333333 stroke
customization, but their contents now come from the current Heroicons
release (where several were renamed: clipboard-document, eye-slash,
arrow-right-end-on-rectangle, and arrow-path). The license file is
updated to match. Note that the stroke width is now 1.5 instead of 2,
per the v2 design.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The formatter is configured to ignore Markdown files, so they can never
be modified by this task.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
stepchowfun and others added 5 commits July 7, 2026 21:00
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There is nothing meaningful for it to do, since the extension cannot be
run headlessly in a container.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Update Vite+ to 0.2.3, Node.js to 24.18.0, NVM to 0.40.5, and the
Docker login action to 4.4.0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
stepchowfun and others added 3 commits July 7, 2026 22:09
Adopt the pieces of the current `vp create` output that this project was
missing: the React plugin (enabling Fast Refresh), the React lint rules,
the split tsconfig with project references (which also type checks
vite.config.ts), and the pre-commit hook setup. The hook installation is
skipped in the Toast container, where there is no Git repository. The
scaffolding's `devEngines` field is not adopted, since plain npm fails
on a package manager version mismatch rather than downloading the
requested version.

To satisfy the new lint rules, the debounced password update is now
memoized with an analyzable inline function, and the root component
moved from main.tsx to its own file app.tsx.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Formatting and linting are enforced by CI, as in other projects. This
also removes the need to skip the hook installation in the container.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@stepchowfun stepchowfun merged commit 67c4d13 into main Jul 8, 2026
2 checks passed
@stepchowfun stepchowfun deleted the rewrite branch July 8, 2026 05:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant