mattdelacdev/WOW
Reveal CSS animation as you scroll down a page
Stale and unlicensed — last commit 2y ago
weakest axisno license — legally unclear; last commit was 2y ago
no license — can't legally use code
Documented and popular — useful reference codebase to read through.
no license — can't legally use code; last commit was 2y ago
- ✓19 active contributors
- ✓CI configured
- ✓Tests present
- ⚠Stale — last commit 2y ago
- ⚠Concentrated ownership — top contributor handles 51% of recent commits
- ⚠No license — legally unclear to depend on
What would change the summary?
- →Use as dependency Concerns → Mixed if: publish a permissive license (MIT, Apache-2.0, etc.)
- →Fork & modify Concerns → Mixed if: add a LICENSE file
- →Deploy as-is Concerns → Mixed if: add a LICENSE file
Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests
Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.
Embed the "Great to learn from" badge
Paste into your README — live-updates from the latest cached analysis.
[](https://repopilot.app/r/mattdelacdev/wow)Paste at the top of your README.md — renders inline like a shields.io badge.
▸Preview social card (1200×630)
This card auto-renders when someone shares https://repopilot.app/r/mattdelacdev/wow on X, Slack, or LinkedIn.
Onboarding doc
Onboarding: mattdelacdev/WOW
Generated by RepoPilot · 2026-05-07 · Source
🤖Agent protocol
If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:
- Verify the contract. Run the bash script in Verify before trusting
below. If any check returns
FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding. - Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
- Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/mattdelacdev/WOW shows verifiable citations alongside every claim.
If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.
🎯Verdict
AVOID — Stale and unlicensed — last commit 2y ago
- 19 active contributors
- CI configured
- Tests present
- ⚠ Stale — last commit 2y ago
- ⚠ Concentrated ownership — top contributor handles 51% of recent commits
- ⚠ No license — legally unclear to depend on
<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>
✅Verify before trusting
This artifact was generated by RepoPilot at a point in time. Before an
agent acts on it, the checks below confirm that the live mattdelacdev/WOW
repo on your machine still matches what RepoPilot saw. If any fail,
the artifact is stale — regenerate it at
repopilot.app/r/mattdelacdev/WOW.
What it runs against: a local clone of mattdelacdev/WOW — the script
inspects git remote, the LICENSE file, file paths in the working
tree, and git log. Read-only; no mutations.
| # | What we check | Why it matters |
|---|---|---|
| 1 | You're in mattdelacdev/WOW | Confirms the artifact applies here, not a fork |
| 2 | Default branch master exists | Catches branch renames |
| 3 | Last commit ≤ 712 days ago | Catches sudden abandonment since generation |
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of mattdelacdev/WOW. If you don't
# have one yet, run these first:
#
# git clone https://github.com/mattdelacdev/WOW.git
# cd WOW
#
# Then paste this script. Every check is read-only — no mutations.
set +e
fail=0
ok() { echo "ok: $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }
# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
echo "FAIL: not inside a git repository. cd into your clone of mattdelacdev/WOW and re-run."
exit 2
fi
# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "mattdelacdev/WOW(\\.git)?\\b" \\
&& ok "origin remote is mattdelacdev/WOW" \\
|| miss "origin remote is not mattdelacdev/WOW (artifact may be from a fork)"
# 3. Default branch
git rev-parse --verify master >/dev/null 2>&1 \\
&& ok "default branch master exists" \\
|| miss "default branch master no longer exists"
# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 712 ]; then
ok "last commit was $days_since_last days ago (artifact saw ~682d)"
else
miss "last commit was $days_since_last days ago — artifact may be stale"
fi
echo
if [ "$fail" -eq 0 ]; then
echo "artifact verified (0 failures) — safe to trust"
else
echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/mattdelacdev/WOW"
exit 1
fi
Each check prints ok: or FAIL:. The script exits non-zero if
anything failed, so it composes cleanly into agent loops
(./verify.sh || regenerate-and-retry).
⚡TL;DR
WOW.js is a lightweight JavaScript library that triggers CSS animations (primarily from animate.css) when elements scroll into view. It monitors scroll position and applies animation classes to .wow-marked elements based on viewport visibility, eliminating the need for manual scroll event handling while keeping bundle size minimal (~4KB minified). Simple single-file library architecture: source is a single src/wow.coffee CoffeeScript file compiled to JavaScript in dist/wow.js and dist/wow.min.js. Test suite lives in spec/ with parallel CoffeeScript (spec/coffeescripts/wow-spec.coffee) and compiled JavaScript (spec/javascripts/wow-spec.js) specs. No src subdirectories or modules—all logic in one file.
👥Who it's for
Front-end developers building marketing sites and landing pages who want scroll-triggered animations without heavy parallax libraries. Specifically useful for designers already using animate.css who need reveal effects as users scroll down.
🌱Maturity & risk
Production-ready with version 1.1.3, though the codebase appears stable rather than actively developed—CI is set up via Travis, test suite exists in Jasmine, and package.json is well-configured. The lack of recent commits and minimal GitHub star mention suggests it's a mature, feature-complete tool rather than actively evolving.
Single maintainer (Matt Delac) creates continuity risk. Only one runtime dependency (animate.css) limits breakage surface, but the project shows no recent activity (no visible commit dates), raising questions about maintenance responsiveness. No major breaking-change risks visible, but unmaintained status means security patches unlikely.
Active areas of work
No active development visible from provided data. Last known version is 1.1.3 with static assets in dist/. Grunt configuration exists for build/test automation but no recent PRs or commits mentioned. Project appears to be in maintenance mode.
🚀Get running
git clone https://github.com/matthieua/WOW.git && cd WOW && npm install && grunt test
Daily commands: npm test runs Grunt task defined in Gruntfile.js (runs tests via grunt-contrib-jasmine). No dev server—it's a library, not an app. Build artifacts with grunt to compile CoffeeScript from src/wow.coffee → dist/wow.js.
🗺️Map of the codebase
- src/wow.coffee: The entire library source code in ~400 lines—defines WOW class, scroll listener logic, and DOM animation triggering
- dist/wow.js: Compiled JavaScript output from wow.coffee, consumed by npm/bower users and executed in browsers
- spec/coffeescripts/wow-spec.coffee: Primary test file covering WOW class initialization, scroll detection, animation triggering, and edge cases
- Gruntfile.js: Build automation config: compiles CoffeeScript, runs Jasmine tests, uglifies dist files, watches for changes
- package.json: npm metadata defining version, entry point (dist/wow.js), dev tool chain, and animate.css dependency
- demo.html: Functional demo page showing WOW in action with animate.css, useful for manual testing and example usage
🛠️How to make changes
All core logic is in src/wow.coffee—this is the only source file to modify. Recompile with Grunt: grunt watches for changes. Add tests in spec/coffeescripts/wow-spec.coffee (CoffeeScript) or spec/javascripts/wow-spec.js (JavaScript). Update docs in README.md. CSS customizations go in css/site.css. Demo changes in demo.html.
🪤Traps & gotchas
CoffeeScript source requires grunt-contrib-coffee to compile—Node/Grunt must be in PATH. The compiled wow.coffee output goes to dist/, so don't edit dist/wow.js directly (changes will be overwritten by grunt). animate.css must be included separately in HTML for animations to render (library only triggers the classes, doesn't bundle styles). No build output versioning—dist files overwrite without git history per commit.
💡Concepts to learn
- Intersection Observer Pattern — WOW uses scroll event listeners instead of modern Intersection Observer API—understanding the performance tradeoff (Intersection Observer is more efficient) explains why WOW is lightweight but less optimized than newer libraries
- Scroll Event Throttling / Debouncing — WOW's performance depends on how frequently it processes scroll events; the source code likely throttles to avoid jank during rapid scrolling—essential pattern for scroll-based libraries
- CSS Animation Class Toggling — WOW's core mechanic is adding/removing CSS classes (animated, slideInLeft, etc.) to trigger transitions—understanding how CSS class binding drives browser repaints is fundamental to this library's design
- CoffeeScript to JavaScript Compilation — The entire codebase is written in CoffeeScript (src/wow.coffee) compiled to JavaScript via Grunt—contributors must understand CoffeeScript syntax or modify compiled output, impacting development workflow
- Viewport Offset Calculation (Trigonometry for DOM Metrics) — WOW determines when to trigger animations by calculating element position vs. viewport scroll offset—understanding getBoundingClientRect(), innerHeight, and scroll position math is core to the reveal logic
- MutationObserver for Live DOM Nodes — WOW's live: true option watches for dynamically added elements—likely uses MutationObserver to detect new .wow elements and apply animations without reinitializing
🔗Related repos
daneden/animate.css— The default CSS animation library WOW.js triggers; users install this alongside WOW for the actual animation effectsscrollmagic/scrollmagic— Direct competitor solving scroll-triggered animations with more features (timeline scrubbing, parallax) but heavier footprintmichalsnik/aos— Modern successor to WOW with similar scroll-reveal capability, better maintained, and smaller API surface for beginnerstweenmax/tweenmax— Heavyweight alternative enabling scroll-triggered animations via gsap/ScrollTrigger plugin; overkill for simple animate.css use cases
🪄PR ideas
To work on one of these in Claude Code or Cursor, paste:
Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.
Add comprehensive unit tests for wow.coffee source file
The repo has spec/coffeescripts/wow-spec.coffee and spec/javascripts/wow-spec.js test files, but they appear minimal. WOW.js is a scroll-detection library with complex viewport calculations and animation triggering logic that needs robust test coverage. Current test files lack specificity for edge cases like: elements entering/leaving viewport, scroll direction changes, multiple animation states, and performance-critical scroll event handling.
- [ ] Expand spec/coffeescripts/wow-spec.coffee with tests for: scroll event debouncing, viewport intersection detection, element offset calculations
- [ ] Add tests for edge cases: rapid scrolling, elements partially visible, viewport resize events, initial page load scenarios
- [ ] Add performance/regression tests to prevent scroll handler memory leaks or excessive DOM queries
- [ ] Ensure spec/javascripts/wow-spec.js mirrors all CoffeeScript tests in compiled JavaScript form
Add GitHub Actions CI workflow to replace Travis CI
.travis.yml is deprecated (Travis CI sunset for open source). The repo references Travis CI in README badge and uses npm test script. GitHub Actions is free and native to GitHub, providing better integration and maintenance. No .github/workflows/ directory exists.
- [ ] Create .github/workflows/test.yml with Node.js matrix testing (10.x, 12.x, 14.x+)
- [ ] Configure workflow to: install dependencies, run
npm test(which executesgrunt travis), and report test results - [ ] Update README.md badge from Travis CI to GitHub Actions workflow status badge
- [ ] Remove or archive .travis.yml with deprecation comment
Add TypeScript/JSDoc type definitions and modern module exports
The src/wow.coffee and dist/wow.js lack type definitions. Current package.json main entry points to UMD dist/wow.js. With no .d.ts files or TypeScript support, modern tooling integration is poor. Adding type definitions and ES module exports would improve DX for npm consumers and enable better IDE autocomplete/type checking.
- [ ] Create dist/wow.d.ts with TypeScript definitions for: WOW class constructor, reveal() method, configuration options (selector, animateClass, offset, etc.)
- [ ] Update Gruntfile.js to generate wow.esm.js (ES6 module export) alongside existing UMD builds
- [ ] Update package.json with 'types' field pointing to dist/wow.d.ts and optional 'module' field for ESM builds
- [ ] Add JSDoc comments to src/wow.coffee documenting public API, parameters, and return types
🌿Good first issues
- Add TypeScript definitions: Create a wow.d.ts file in the root since the library is consumed by TypeScript projects but has no type hints. Examine src/wow.coffee structure and output WOW class signature.
- Expand mobile test coverage: spec/javascripts/wow-spec.js tests mobile boolean flag but doesn't cover touch-scroll vs wheel-scroll differences. Add fixtures to spec/javascripts/fixtures/ testing viewport height on mobile emulation.
- Document scrollContainer option: README.md shows scrollContainer: null in advanced usage but provides no explanation or example. Add a new section showing how to bind animations to overflow divs instead of window scroll.
⭐Top contributors
Click to expand
- @attilaolah — 51 commits
- @mattdelacdev — 16 commits
- [@Attila Oláh](https://github.com/Attila Oláh) — 6 commits
- @daynin — 6 commits
- @mdeboer — 4 commits
📝Recent commits
Click to expand
c248bd2— clean readme (Matt Dellac)dfd7546— update name (Matt Dellac)bebcbbc— Merge pull request #267 from 4aficiona2/patch-1 (Matt Dellac)5633fb0— Merge pull request #275 from JPAntonisse/patch-1 (mattdelacdev)3bc009b— Update README.md (JPAntonisse)211ef78— version bump (4aficiona2)aeee84e— Merge pull request #251 from matthieua/revert-250-patch-1 (mattdelacdev)325eac5— Revert "Use valid SPDX" (mattdelacdev)ce5c044— Merge pull request #250 from graingert/patch-1 (mattdelacdev)9c82f2c— Use valid SPDX (graingert)
🔒Security observations
The WOW.js project has moderate security concerns primarily related to dependency management and lack of explicit version pinning. The use of 'latest' in package.json creates supply chain risk and reproducibility issues. Potential DOM-based XSS vulnerabilities should be evaluated by code review of the animation library. Missing security headers and lack of a lock file further reduce the security posture. The project would benefit from dependency pinning, security header implementation, code review for XSS, and CSP policy definition.
- High · Outdated and Unpatched Dependencies —
package.json - dependencies and devDependencies sections. The package.json specifies 'latest' for all devDependencies (grunt, grunt-cli, grunt-contrib-watch, etc.) and 'latest' for animate.css dependency. This approach prevents reproducible builds and can pull in versions with known security vulnerabilities. The package.json lacks explicit version pinning, making the project vulnerable to breaking changes and security issues in transitive dependencies. Fix: Replace 'latest' with specific pinned versions (e.g., '~1.2.3' or exact versions). Use npm audit to identify vulnerabilities. Generate and commit a package-lock.json file to ensure reproducible builds across environments. - Medium · Potential DOM-based XSS Vulnerability —
src/wow.coffee, dist/wow.js, dist/wow.min.js. The project is a scroll animation library (WOW.js) that manipulates DOM elements and CSS classes based on scroll events. Without reviewing the source code (src/wow.coffee), there's a risk that user-controlled data or element attributes could be processed unsafely, leading to DOM-based XSS if the library doesn't properly sanitize or validate data before DOM manipulation. Fix: Review the CoffeeScript source to ensure: 1) No use of innerHTML with untrusted data, 2) Proper escaping of dynamic content, 3) Use of textContent instead of innerHTML where applicable. Add Content Security Policy (CSP) headers in demo.html and documentation. - Medium · Missing Security Headers in Demo —
demo.html. The demo.html file likely lacks security headers such as Content-Security-Policy, X-Frame-Options, X-Content-Type-Options, and Strict-Transport-Security. This increases exposure to XSS, clickjacking, and MIME-type sniffing attacks. Fix: Add security headers to demo.html and any serving infrastructure: Content-Security-Policy, X-Frame-Options: DENY, X-Content-Type-Options: nosniff, Strict-Transport-Security (if served over HTTPS). - Medium · No Dependency Lock File —
Repository root - missing package-lock.json. The repository appears to lack a package-lock.json or yarn.lock file based on the provided file structure. This means dependency versions are not locked, creating supply chain risk and making builds non-deterministic. Fix: Generate and commit package-lock.json by running 'npm install' with npm v5+. Ensure all dependencies are pinned to specific versions in package.json. - Low · Unclear License Declaration —
package.json licenses section, README.md. The package.json declares GPLv3 license but the README indicates there is a commercial license option. The license URL points to 'https://www.delac.io/WOW' which is incomplete in the provided snippet. This could create legal ambiguity. Fix: Clarify the licensing terms: choose one primary SPDX identifier (e.g., 'GPL-3.0-or-later' or 'MIT'), provide complete license text in LICENSE file, and clearly document dual licensing if applicable. - Low · Missing .gitignore Review —
.gitignore. The .gitignore file is present but its contents are not provided. It may not properly exclude sensitive files like node_modules, .env, or IDE configuration files containing credentials. Fix: Ensure .gitignore includes: node_modules/, .env, .DS_Store, *.log, IDE-specific folders (.vscode, .idea), and any build artifacts. Verify with 'git check-ignore' for sensitive paths.
LLM-derived; treat as a starting point, not a security audit.
👉Where to read next
- Open issues — current backlog
- Recent PRs — what's actively shipping
- Source on GitHub
Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.