NFSFU234 Open Source Day: Three Tools, One Scope
Today's NFSFU234 Open Source Day — the first one we've run. FormValidation and TourGuide, previously two separate unscoped npm packages built years apart, are moving under the @nfsfu234 scope. ShotSweep, a new CLI for visual regression testing, launches scoped from day one. For the first time, all three live under one namespace.
Here's what's actually in each release.
ShotSweep — new, v1.0.0
A CLI that captures screenshots of a site and diffs them between runs. A build can pass, every test can pass, a page can return 200 — and still look broken visually. This closes that gap.
npm install -g @nfsfu234/shotsweep
shotsweep capture --sitemap https://example.com/sitemap.xml --viewport 1440x900 --dark
shotsweep diff before/manifest.json after/manifest.json
- Full sitemap capture, including sitemap indexes
- Full-page or sectioned screenshots, multiple viewports, light/dark emulation per run
- Auth support: form login with saved sessions, bearer tokens, custom headers, cookies
-
--replace-originto point a production sitemap at localhost/staging without maintaining a second URL list - Deterministic pixel diffing (
shotsweep diff) with configurable thresholds, non-zero exit on a real regression — built to gate CI -
--resume,--concurrency,--retriesfor large sites;--describefor an AI-ready run summary (the diff decision itself stays fully deterministic)
We ran it against our own docs site before shipping: 28 routes, light and dark mode, 136 manifest entries per run, 0 capture errors on either run.
Docs: https://shotsweep.nforshifu234dev.com
Repo: https://github.com/nforshifu234dev/shotsweep
TourGuide v2
npm install @nfsfu234/tour-guide
-
defineConfig()+ for shared config across multiple tours instead of repeating props per instance - Real accessibility pass: focus trapping, keyboard nav, ARIA roles, screen-reader announcements
- First real automated test suite (Vitest)
- Tooltip positioning fixes near viewport edges; highlight cleanup now correctly restores a target element's original inline styles after a tour ends
⚠️ Breaking: package renamed from nfsfu234-tour-guide to @nfsfu234/tour-guide.
Docs: https://tourguide.nforshifu234dev.com
Repo: https://github.com/nforshifu234dev/nfsfu234-tour-guide
FormValidation v3
npm install @nfsfu234/form-validation
The largest release in this library's history:
-
.submit(),.validate(), and.validateInput()are now consistentlyasync - File/image upload validation (type, size, dimensions)
-
configureForms()/autoInit()for site-wide validation rules across multiple forms from one config - Real Jest test suite, CI-gated releases
The change worth calling out on its own: we removed client-side password hashing (.hashPassword(), .verifyPassword(), .passwordMatch(), and the bcryptjs dependency) entirely. It never protected a password in transit — that's what TLS and your backend are for — so it was providing the appearance of security without the substance. Not a bugfix. A feature we decided shouldn't have existed.
Docs: https://formvalidation.nforshifu234dev.com
Repo: https://github.com/nforshifu234dev/nfsfu234-form-validation
Why one scope matters more than any single feature here
These three tools were built at different points over several years as separate, unrelated packages. Getting them under one @nfsfu234 namespace isn't a technical achievement so much as a bookkeeping one — but it's the thing that turns "three tools I happened to build" into "an ecosystem," and that distinction is doing real work for how we plan what comes next.
All three are MIT licensed and open for issues/PRs starting today. If you try one and something's broken, that's useful — open an issue.