Skip to content

Restructure into a pnpm + Turborepo monorepo (library + docs, unified manifest) - #1

Merged
devsaifmohamed merged 63 commits into
mainfrom
monorepo
Jul 16, 2026
Merged

Restructure into a pnpm + Turborepo monorepo (library + docs, unified manifest)#1
devsaifmohamed merged 63 commits into
mainfrom
monorepo

Conversation

@devsaifmohamed

Copy link
Copy Markdown
Owner

Merges the library and docs into one repo with a single source of truth. Built and tested in a worktree; gate green.

What changed

  • Structure: library → `packages/hookli/`; docs → `apps/docs/` (brought in via `git subtree`, history preserved).
  • Tooling: pnpm + Turborepo. `pnpm build/test/lint/typecheck` green across both workspaces. Docs consume the library via `workspace:*` and prerender all 40 hook pages against the local build.
  • Single source of truth: `packages/hookli/hooks.manifest.json` (shipped + exported as `hookli/manifest`). The README hook-list + count badge are generated (`scripts/gen-readme.mjs`, on prepublishOnly); the docs registry imports the manifest (the hardcoded 40-entry array is gone). Version + hook-count + metadata now live in exactly one place.
  • Claude structure (Nzmly-style): root `CLAUDE.md` + per-workspace `CLAUDE.md`; `.claude/` with git-safety hooks + reusable commands/agents.
  • Ralph: root harness with a scoped `check.sh` — gates only the workspace that changed (via turbo filters).

After merge (human steps)

  1. Vercel: set project Root Directory = `apps/docs`, install `pnpm install`, redeploy.
  2. Archive `saifmohamedsv/hookli-docs` (its history now lives here under `apps/docs`).
  3. Publish the library from `packages/hookli` as usual (human-gated, needs npm 2FA).

🤖 Generated with Claude Code

devsaifmohamed and others added 30 commits July 11, 2026 16:50
create-next-app (TS/Tailwind/App Router) with hookli@1.3.16 installed from npm
for live demos, brand assets in public/, and the Ralph loop ported in:
check.sh gate (lint + tsc + next build), docs-tuned prompt.md, prd.json seeded
with 15 tasks (research usehooks-ts first -> design system -> landing -> per-hook
doc pages with interactive demos -> search -> donation placeholder -> SEO/OG ->
polish -> final QA).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…rce of truth

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…oter, Wordmark)

Brand tokens from docs/DESIGN.md as Tailwind v4 @theme vars; JetBrains Mono
via next/font for headings/wordmark; root metadata (title template, svg
favicon, separate viewport export); shared Header/Footer; boilerplate
page/svgs/favicon.ico removed; interim branded home page (T3 builds the hero).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Hero headline reuses Wordmark with new xl size + steps() cursor blink
(solid under prefers-reduced-motion); InstallCommand + CopyButton (2s
check feedback, aria-live) as shared components for later reuse
(footer/docs index per DESIGN.md); Copy/Check icons added to Icons.tsx.
T3 marked done in prd.json.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…lock, useToggle demo)

Six-feature grid with new lucide-style icons; LiveProofSection pairs a
shiki-highlighted useToggle sample with the same hook running live,
imported from the published hookli package. CodeBlock (css-variables
theme wired to brand tokens in globals.css) + lib/shiki.ts are built
for T6 reuse. shiki@4.3.1 added per DESIGN.md dependency policy.
T4 marked done in prd.json.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…sidebar, [slug] scaffold)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…age (tabs, error boundary, API tables)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…orage (live demos, shared demo UI)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…rkMode (TTL countdown, scoped theme panel) + useToggle polish

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…osition, useInfiniteScroll (dropdown, crosshair panel, window-scroll batches)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ocation (jsonplaceholder demo with 404 state, click-gated geolocation)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…pattern, focus trap, full-screen mobile sheet)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…t page, footer link)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…, apple-icon, metadataBase)

Root + per-hook opengraph-image via next/og ImageResponse (brand lockup /
hook card, JetBrains Mono from @fontsource devDep); {h} apple-icon;
sitemap.ts + robots.ts derived from the hooks registry; openGraph/twitter
metadata wired through layout and [slug] generateMetadata. SITE_URL is a
placeholder origin until deploy (NEXT_PUBLIC_SITE_URL overrides).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ng hooks index + bottom CTA, pressed states, /docs + /support og titles)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…a Sans, hookli. wordmark + hook mark, OG/apple-icon recolor)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…phy cleanup)

Complete the brand v3 pass: the recolor + Plus Jakarta headings + hookli.
wordmark landed in 5c3fa89, but the font-mono cleanup across UI chrome was
left uncommitted and prd.json still marked T17 todo. Strip font-mono from
category eyebrows, pager, sidebar/mobile-nav, demo tabs, cards, CTAs, ApiTable
heads, support cards, and the search palette — monospace now stays only on
code-like content (CodeBlock, InstallCommand, type/value cells, demo inputs,
kbd keycaps). Reverted a stray shiki default-lang change (no caller uses it).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…e template)

Single reusable components/HookPage.tsx renders all 11 hook pages from
registry + HOOK_DOCS + hook-sources; [slug]/page.tsx is now a thin routing
wrapper. Adds right-rail On-This-Page TOC (scroll-spy) + support slot,
line-numbered Usage with auto-highlighted hook-call line, embedded vendored
hook source + view-on-GitHub, Parameters default chips, type-alias tables,
and MDN Web-API chips in the lead description.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…klog

Author the real conventions by reading the Nzmly storefront-v2 CLAUDE.md:
kebab-case files AND folders (components included), PascalCase exports only,
role->feature folders with index.ts barrels, named exports, token-only styling,
import order, a11y. Refresh the stale brand section + prompt.md quality bar to
brand v3. Rewrite T18 as a pure kebab-case rename of components/*.tsx (demos/lib
already comply) and re-add T19 (dark-theme tonal-scale fix).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Rename all 21 root components/*.tsx to kebab-case (exports stay PascalCase)
per AGENTS.md Conventions; update every @/components alias import and the
relative imports inside header/footer/sidebar/search-palette. demos/ and
lib/ were already kebab-case and are untouched.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ay scale)

#003748 was doing double duty as page + card base, so the site read as a
bright saturated teal-blue with cards that barely separated. Recast it as a
token-only tonal scale in the same hue family:

  --color-ground          #04191f  near-black page (was #003748)
  --color-ground-raised   #003748  cards/surfaces  (was #0a4557)
  --color-ground-overlay  #0a4557  nested/hover/active (new step)

Every bg-ground/bg-ground-raised usage inherits the new depth automatically —
cards now visibly lift off a near-black ground; inset wells (demo inputs, api
default chips) read as recessed. One component edit: search-palette active
result now uses bg-ground-overlay (post-remap bg-ground/70 would render darker
than its panel — a selection must lift, not recess). Borders stay translucent
slate/40, which adapts a step lighter than whichever surface it sits on.
DESIGN.md + AGENTS.md brand notes synced to the new scale.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Rewrite README from create-next-app boilerplate to a real app README (stack,
dev/build/gate commands, sitemap, structure, how to add a hook). QA every route
against DESIGN.md + quality bar via a read-only audit — codebase clean. Small
fixes: sync viewport themeColor to the T19 near-black ground (#04191f),
de-hardcode a stale hook-count comment, reconcile DESIGN.md to the T16 TOC.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Fix the monotone 'teal everything' look: retune ground tokens to a near-black
neutral base (ground #0A1315 / raised #101D21 / overlay #17282E) so cards read
as subtle bordered panels and #003748/#30C5CA become accents, not fills. Sync
the new variant-4 banner into public/. Token-only — every surface inherits it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
devsaifmohamed and others added 25 commits July 15, 2026 14:40
Docs index gains a numbered 3-step Quick start (install / import / use) in
place of the bare Install heading. Each hook page now ends with a registry-
derived "Related hooks" grid (same category first, topped up in registry
order) via a new relatedHooks() helper — improving discoverability.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…o wrap

Adopt .surface and accent icon chips on the /support cards for consistency
with the rest of the site. Add w-full to the hero and 404 taglines so the
max-w-md paragraph wraps inside the viewport instead of overflowing at 375px.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…nter, useStep, useCountdown, useMap)

Add full doc pages for five state hooks, each following the data-driven
HookPage template: registry entry + interactive demo + HOOK_DOCS entry
(usage, parameters, returns, type aliases) + vendored source snapshot.

- useBoolean: value with setTrue/setFalse/toggle
- useCounter: count with increment/decrement/reset/setCount
- useStep: 1-indexed stepper with bounded Back/Next
- useCountdown: self-stopping countdown timer
- useMap: key/value editor over an immutable Map

Registry now derives 16 hooks. Sources vendored from hookli@1.4.0
(installed) — stale 1.3.16 version comments updated. DemoButton gains
disabled-state styling for useStep's bounded controls.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…morphicLayoutEffect, useEventCallback, useEventListener, useUnmount)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…sMounted, useDocumentTitle)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…seDebounceCallback)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ocalStorage)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ectionObserver, useResizeObserver, useScrollLock, useClickAnyWhere)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…eScreen, useWindowSize)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…useScript, useTernaryDarkMode)

Adds full doc pages (registry + live demo + HOOK_DOCS + vendored source)
for the last three undocumented hooks, completing the DH backlog:

- useTernaryDarkMode (state): segmented light/system/dark control + Cycle,
  scoped preview panel, mounted-gated to avoid a hydration mismatch.
- useCopyToClipboard (dom): input + Copy button with aria-live status.
- useScript (dom): click-gated external load of canvas-confetti with a
  status readout and a reduced-motion-aware Celebrate button.

Registry now 40 hooks; all three prerender. Gate green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ce root

Restructure the hookli repo into a pnpm + Turborepo monorepo. Library files
moved to packages/hookli/ (src, package.json, tsup/vitest/tsconfig, README,
CLAUDE, CHANGELOG). Root: pnpm-workspace.yaml, turbo.json, workspace package.json.
yarn.lock dropped (pnpm). LICENSE/CONTRIBUTING/SECURITY/CODE_OF_CONDUCT stay at root.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
git-subtree-dir: apps/docs
git-subtree-mainline: 95a55b8
git-subtree-split: 14d9d64
Docs now consume the library via workspace:* (symlinked, no npm round-trip);
dropped apps/docs lockfile + ralph (root governs). pnpm 11: verifyDepsBeforeRun
off (esbuild/sharp use prebuilt binaries). turbo run build/test/lint/typecheck
= 6/6 green across both workspaces; docs prerenders all 40 hook pages against
the local library. Root package.json/pnpm-workspace.yaml/turbo.json/.npmrc added.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Root CLAUDE.md (whole-repo) linking the two workspace CLAUDE.md files (Nzmly
  hierarchical pattern); library + docs each keep their own conventions doc.
- ralph/check.sh is now SCOPED — gates only the changed workspace via turbo filters.
- ralph prompt.md/prd.json/progress.txt rewritten for the monorepo; retired
  library-only ralph docs.
- .claude: bring reusable Nzmly commands (speckit.*, watch-prs, way-of-working,
  local-dev) + agents (frontend-code-reviewer, task-orchestrator, product-owner);
  git-safety hooks already present.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The library now owns the canonical hook list: packages/hookli/hooks.manifest.json
(40 hooks, shipped + exported as 'hookli/manifest'). One source feeds both:
- README 'Available hooks' list + count badge are GENERATED (scripts/gen-readme.mjs,
  runs on prepublishOnly) — no more hand-edited list or stale '11 hooks'.
- apps/docs registry imports 'hookli/manifest' (hardcoded 40-entry array deleted);
  sidebar/search/pages/counts all derive from it.
turbo: typecheck now dependsOn build so Next's .next/types exist first. Gate green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Keeps the real brand assets (hookli-banner.svg/.png, hookli-icon.svg); removes
the banner/site exploration screenshots — matches d6b13a3 on the library main.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 252 files, which is 202 over the limit of 50.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 06612220-d98c-44f2-b963-c7813574bcc9

📥 Commits

Reviewing files that changed from the base of the PR and between d6b13a3 and 6b3cc34.

⛔ Files ignored due to path filters (41)
  • apps/docs/public/hookli-banner.png is excluded by !**/*.png
  • apps/docs/public/hookli-banner.svg is excluded by !**/*.svg
  • apps/docs/public/hookli-icon.svg is excluded by !**/*.svg
  • assets/variants/site-docpage-v2.png is excluded by !**/*.png
  • assets/variants/site-docpage.png is excluded by !**/*.png
  • assets/variants/site-landing-v2.png is excluded by !**/*.png
  • assets/variants/site-landing.png is excluded by !**/*.png
  • assets/variants/variant-1-horizontal.png is excluded by !**/*.png
  • assets/variants/variant-1-horizontal.svg is excluded by !**/*.svg
  • assets/variants/variant-2-stacked.png is excluded by !**/*.png
  • assets/variants/variant-2-stacked.svg is excluded by !**/*.svg
  • assets/variants/variant-3-editorial.png is excluded by !**/*.png
  • assets/variants/variant-3-editorial.svg is excluded by !**/*.svg
  • packages/hookli/node_modules/.bin/esbuild is excluded by !**/node_modules/**
  • packages/hookli/node_modules/.bin/jiti is excluded by !**/node_modules/**
  • packages/hookli/node_modules/.bin/ts-node is excluded by !**/node_modules/**
  • packages/hookli/node_modules/.bin/ts-node-cwd is excluded by !**/node_modules/**
  • packages/hookli/node_modules/.bin/ts-node-esm is excluded by !**/node_modules/**
  • packages/hookli/node_modules/.bin/ts-node-script is excluded by !**/node_modules/**
  • packages/hookli/node_modules/.bin/ts-node-transpile-only is excluded by !**/node_modules/**
  • packages/hookli/node_modules/.bin/ts-script is excluded by !**/node_modules/**
  • packages/hookli/node_modules/.bin/tsc is excluded by !**/node_modules/**
  • packages/hookli/node_modules/.bin/tsserver is excluded by !**/node_modules/**
  • packages/hookli/node_modules/.bin/tsup is excluded by !**/node_modules/**
  • packages/hookli/node_modules/.bin/tsup-node is excluded by !**/node_modules/**
  • packages/hookli/node_modules/.bin/vite is excluded by !**/node_modules/**
  • packages/hookli/node_modules/.bin/vitest is excluded by !**/node_modules/**
  • packages/hookli/node_modules/.vite/vitest/results.json is excluded by !**/node_modules/**
  • packages/hookli/node_modules/@testing-library/dom is excluded by !**/node_modules/**
  • packages/hookli/node_modules/@testing-library/react is excluded by !**/node_modules/**
  • packages/hookli/node_modules/@types/react is excluded by !**/node_modules/**
  • packages/hookli/node_modules/@types/react-dom is excluded by !**/node_modules/**
  • packages/hookli/node_modules/jsdom is excluded by !**/node_modules/**
  • packages/hookli/node_modules/react is excluded by !**/node_modules/**
  • packages/hookli/node_modules/react-dom is excluded by !**/node_modules/**
  • packages/hookli/node_modules/ts-node is excluded by !**/node_modules/**
  • packages/hookli/node_modules/tsup is excluded by !**/node_modules/**
  • packages/hookli/node_modules/typescript is excluded by !**/node_modules/**
  • packages/hookli/node_modules/vitest is excluded by !**/node_modules/**
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • yarn.lock is excluded by !**/yarn.lock, !**/*.lock
📒 Files selected for processing (256)
  • .claude/agents/frontend-code-reviewer.md
  • .claude/agents/product-owner.md
  • .claude/agents/task-orchestrator.md
  • .claude/commands/local-dev.md
  • .claude/commands/speckit.analyze.md
  • .claude/commands/speckit.checklist.md
  • .claude/commands/speckit.clarify.md
  • .claude/commands/speckit.constitution.md
  • .claude/commands/speckit.implement.md
  • .claude/commands/speckit.plan.md
  • .claude/commands/speckit.specify.md
  • .claude/commands/speckit.tasks.md
  • .claude/commands/speckit.taskstoissues.md
  • .claude/commands/watch-prs.md
  • .claude/commands/way-of-working.md
  • .gitignore
  • .npmrc
  • CLAUDE.md
  • apps/docs/.gitignore
  • apps/docs/AGENTS.md
  • apps/docs/CLAUDE.md
  • apps/docs/README.md
  • apps/docs/app/apple-icon.tsx
  • apps/docs/app/docs/[slug]/opengraph-image.tsx
  • apps/docs/app/docs/[slug]/page.tsx
  • apps/docs/app/docs/layout.tsx
  • apps/docs/app/docs/page.tsx
  • apps/docs/app/globals.css
  • apps/docs/app/layout.tsx
  • apps/docs/app/not-found.tsx
  • apps/docs/app/opengraph-image.tsx
  • apps/docs/app/page.tsx
  • apps/docs/app/robots.ts
  • apps/docs/app/sitemap.ts
  • apps/docs/app/support/page.tsx
  • apps/docs/components/api-table.tsx
  • apps/docs/components/bottom-cta-section.tsx
  • apps/docs/components/code-block.tsx
  • apps/docs/components/copy-button.tsx
  • apps/docs/components/demo-error-boundary.tsx
  • apps/docs/components/demos/ui.tsx
  • apps/docs/components/demos/use-boolean-demo.tsx
  • apps/docs/components/demos/use-click-any-where-demo.tsx
  • apps/docs/components/demos/use-click-outside-demo.tsx
  • apps/docs/components/demos/use-copy-to-clipboard-demo.tsx
  • apps/docs/components/demos/use-countdown-demo.tsx
  • apps/docs/components/demos/use-counter-demo.tsx
  • apps/docs/components/demos/use-dark-mode-demo.tsx
  • apps/docs/components/demos/use-debounce-callback-demo.tsx
  • apps/docs/components/demos/use-debounce-demo.tsx
  • apps/docs/components/demos/use-debounce-value-demo.tsx
  • apps/docs/components/demos/use-document-title-demo.tsx
  • apps/docs/components/demos/use-event-callback-demo.tsx
  • apps/docs/components/demos/use-event-listener-demo.tsx
  • apps/docs/components/demos/use-fetch-demo.tsx
  • apps/docs/components/demos/use-form-demo.tsx
  • apps/docs/components/demos/use-geo-location-demo.tsx
  • apps/docs/components/demos/use-hover-demo.tsx
  • apps/docs/components/demos/use-infinite-scroll-demo.tsx
  • apps/docs/components/demos/use-intersection-observer-demo.tsx
  • apps/docs/components/demos/use-interval-demo.tsx
  • apps/docs/components/demos/use-is-client-demo.tsx
  • apps/docs/components/demos/use-is-mounted-demo.tsx
  • apps/docs/components/demos/use-isomorphic-layout-effect-demo.tsx
  • apps/docs/components/demos/use-local-storage-demo.tsx
  • apps/docs/components/demos/use-local-storage-with-expiry-demo.tsx
  • apps/docs/components/demos/use-map-demo.tsx
  • apps/docs/components/demos/use-media-query-demo.tsx
  • apps/docs/components/demos/use-mouse-position-demo.tsx
  • apps/docs/components/demos/use-read-local-storage-demo.tsx
  • apps/docs/components/demos/use-resize-observer-demo.tsx
  • apps/docs/components/demos/use-screen-demo.tsx
  • apps/docs/components/demos/use-script-demo.tsx
  • apps/docs/components/demos/use-scroll-lock-demo.tsx
  • apps/docs/components/demos/use-session-storage-demo.tsx
  • apps/docs/components/demos/use-step-demo.tsx
  • apps/docs/components/demos/use-ternary-dark-mode-demo.tsx
  • apps/docs/components/demos/use-timeout-demo.tsx
  • apps/docs/components/demos/use-toggle-demo.tsx
  • apps/docs/components/demos/use-unmount-demo.tsx
  • apps/docs/components/demos/use-window-size-demo.tsx
  • apps/docs/components/donate-button.tsx
  • apps/docs/components/feature-card.tsx
  • apps/docs/components/features-section.tsx
  • apps/docs/components/footer.tsx
  • apps/docs/components/header.tsx
  • apps/docs/components/hook-card.tsx
  • apps/docs/components/hook-demo.tsx
  • apps/docs/components/hook-page.tsx
  • apps/docs/components/hooks-index-section.tsx
  • apps/docs/components/icons.tsx
  • apps/docs/components/install-command.tsx
  • apps/docs/components/live-proof-section.tsx
  • apps/docs/components/on-this-page.tsx
  • apps/docs/components/search-palette.tsx
  • apps/docs/components/section-heading.tsx
  • apps/docs/components/sidebar.tsx
  • apps/docs/components/support-section.tsx
  • apps/docs/components/wordmark.tsx
  • apps/docs/docs/DESIGN.md
  • apps/docs/eslint.config.mjs
  • apps/docs/lib/hook-docs.ts
  • apps/docs/lib/hook-sources.ts
  • apps/docs/lib/hooks-registry.ts
  • apps/docs/lib/og.tsx
  • apps/docs/lib/shiki.ts
  • apps/docs/lib/site.ts
  • apps/docs/lib/web-apis.tsx
  • apps/docs/next.config.ts
  • apps/docs/package.json
  • apps/docs/postcss.config.mjs
  • apps/docs/tsconfig.json
  • apps/docs/types/hookli-manifest.d.ts
  • assets/variants/compare.html
  • package.json
  • packages/hookli/CHANGELOG.md
  • packages/hookli/CLAUDE.md
  • packages/hookli/README.md
  • packages/hookli/hooks.manifest.json
  • packages/hookli/package.json
  • packages/hookli/scripts/gen-readme.mjs
  • packages/hookli/src/hooks/index.ts
  • packages/hookli/src/hooks/use-boolean/index.ts
  • packages/hookli/src/hooks/use-boolean/use-boolean.test.ts
  • packages/hookli/src/hooks/use-boolean/use-boolean.ts
  • packages/hookli/src/hooks/use-click-any-where/index.ts
  • packages/hookli/src/hooks/use-click-any-where/use-click-any-where.test.ts
  • packages/hookli/src/hooks/use-click-any-where/use-click-any-where.ts
  • packages/hookli/src/hooks/use-click-outside/index.ts
  • packages/hookli/src/hooks/use-click-outside/use-click-outside.test.ts
  • packages/hookli/src/hooks/use-click-outside/use-click-outside.ts
  • packages/hookli/src/hooks/use-copy-to-clipboard/index.ts
  • packages/hookli/src/hooks/use-copy-to-clipboard/use-copy-to-clipboard.test.ts
  • packages/hookli/src/hooks/use-copy-to-clipboard/use-copy-to-clipboard.ts
  • packages/hookli/src/hooks/use-countdown/index.ts
  • packages/hookli/src/hooks/use-countdown/use-countdown.test.ts
  • packages/hookli/src/hooks/use-countdown/use-countdown.ts
  • packages/hookli/src/hooks/use-counter/index.ts
  • packages/hookli/src/hooks/use-counter/use-counter.test.ts
  • packages/hookli/src/hooks/use-counter/use-counter.ts
  • packages/hookli/src/hooks/use-dark-mode/index.ts
  • packages/hookli/src/hooks/use-dark-mode/use-dark-mode.test.ts
  • packages/hookli/src/hooks/use-dark-mode/use-dark-mode.ts
  • packages/hookli/src/hooks/use-debounce-callback/index.ts
  • packages/hookli/src/hooks/use-debounce-callback/use-debounce-callback.test.ts
  • packages/hookli/src/hooks/use-debounce-callback/use-debounce-callback.ts
  • packages/hookli/src/hooks/use-debounce-value/index.ts
  • packages/hookli/src/hooks/use-debounce-value/use-debounce-value.test.ts
  • packages/hookli/src/hooks/use-debounce-value/use-debounce-value.ts
  • packages/hookli/src/hooks/use-debounce/index.ts
  • packages/hookli/src/hooks/use-debounce/use-debounce.test.ts
  • packages/hookli/src/hooks/use-debounce/use-debounce.ts
  • packages/hookli/src/hooks/use-document-title/index.ts
  • packages/hookli/src/hooks/use-document-title/use-document-title.test.ts
  • packages/hookli/src/hooks/use-document-title/use-document-title.ts
  • packages/hookli/src/hooks/use-event-callback/index.ts
  • packages/hookli/src/hooks/use-event-callback/use-event-callback.test.ts
  • packages/hookli/src/hooks/use-event-callback/use-event-callback.ts
  • packages/hookli/src/hooks/use-event-listener/index.ts
  • packages/hookli/src/hooks/use-event-listener/use-event-listener.test.ts
  • packages/hookli/src/hooks/use-event-listener/use-event-listener.ts
  • packages/hookli/src/hooks/use-fetch/index.ts
  • packages/hookli/src/hooks/use-fetch/use-fetch.test.ts
  • packages/hookli/src/hooks/use-fetch/use-fetch.ts
  • packages/hookli/src/hooks/use-form/index.ts
  • packages/hookli/src/hooks/use-form/use-form.test.ts
  • packages/hookli/src/hooks/use-form/use-form.ts
  • packages/hookli/src/hooks/use-geo-location/index.ts
  • packages/hookli/src/hooks/use-geo-location/use-geo-location.test.ts
  • packages/hookli/src/hooks/use-geo-location/use-geo-location.ts
  • packages/hookli/src/hooks/use-hover/index.ts
  • packages/hookli/src/hooks/use-hover/use-hover.test.ts
  • packages/hookli/src/hooks/use-hover/use-hover.ts
  • packages/hookli/src/hooks/use-infinite-scroll/index.ts
  • packages/hookli/src/hooks/use-infinite-scroll/use-infinite-scroll.test.ts
  • packages/hookli/src/hooks/use-infinite-scroll/use-infinite-scroll.ts
  • packages/hookli/src/hooks/use-intersection-observer/index.ts
  • packages/hookli/src/hooks/use-intersection-observer/use-intersection-observer.test.ts
  • packages/hookli/src/hooks/use-intersection-observer/use-intersection-observer.ts
  • packages/hookli/src/hooks/use-interval/index.ts
  • packages/hookli/src/hooks/use-interval/use-interval.test.ts
  • packages/hookli/src/hooks/use-interval/use-interval.ts
  • packages/hookli/src/hooks/use-is-client/index.ts
  • packages/hookli/src/hooks/use-is-client/use-is-client.test.ts
  • packages/hookli/src/hooks/use-is-client/use-is-client.ts
  • packages/hookli/src/hooks/use-is-mounted/index.ts
  • packages/hookli/src/hooks/use-is-mounted/use-is-mounted.test.ts
  • packages/hookli/src/hooks/use-is-mounted/use-is-mounted.ts
  • packages/hookli/src/hooks/use-isomorphic-layout-effect/index.ts
  • packages/hookli/src/hooks/use-isomorphic-layout-effect/use-isomorphic-layout-effect.test.ts
  • packages/hookli/src/hooks/use-isomorphic-layout-effect/use-isomorphic-layout-effect.ts
  • packages/hookli/src/hooks/use-local-storage-with-expiry/index.ts
  • packages/hookli/src/hooks/use-local-storage-with-expiry/use-local-storage-with-expiry.test.ts
  • packages/hookli/src/hooks/use-local-storage-with-expiry/use-local-storage-with-expiry.ts
  • packages/hookli/src/hooks/use-local-storage/index.ts
  • packages/hookli/src/hooks/use-local-storage/use-local-storage.test.ts
  • packages/hookli/src/hooks/use-local-storage/use-local-storage.ts
  • packages/hookli/src/hooks/use-map/index.ts
  • packages/hookli/src/hooks/use-map/use-map.test.ts
  • packages/hookli/src/hooks/use-map/use-map.ts
  • packages/hookli/src/hooks/use-media-query/index.ts
  • packages/hookli/src/hooks/use-media-query/use-media-query.test.ts
  • packages/hookli/src/hooks/use-media-query/use-media-query.ts
  • packages/hookli/src/hooks/use-mouse-position/index.ts
  • packages/hookli/src/hooks/use-mouse-position/use-mouse-position.test.ts
  • packages/hookli/src/hooks/use-mouse-position/use-mouse-position.ts
  • packages/hookli/src/hooks/use-read-local-storage/index.ts
  • packages/hookli/src/hooks/use-read-local-storage/use-read-local-storage.test.ts
  • packages/hookli/src/hooks/use-read-local-storage/use-read-local-storage.ts
  • packages/hookli/src/hooks/use-resize-observer/index.ts
  • packages/hookli/src/hooks/use-resize-observer/use-resize-observer.test.ts
  • packages/hookli/src/hooks/use-resize-observer/use-resize-observer.ts
  • packages/hookli/src/hooks/use-screen/index.ts
  • packages/hookli/src/hooks/use-screen/use-screen.test.ts
  • packages/hookli/src/hooks/use-screen/use-screen.ts
  • packages/hookli/src/hooks/use-script/index.ts
  • packages/hookli/src/hooks/use-script/use-script.test.ts
  • packages/hookli/src/hooks/use-script/use-script.ts
  • packages/hookli/src/hooks/use-scroll-lock/index.ts
  • packages/hookli/src/hooks/use-scroll-lock/use-scroll-lock.test.ts
  • packages/hookli/src/hooks/use-scroll-lock/use-scroll-lock.ts
  • packages/hookli/src/hooks/use-session-storage/index.ts
  • packages/hookli/src/hooks/use-session-storage/use-session-storage.test.ts
  • packages/hookli/src/hooks/use-session-storage/use-session-storage.ts
  • packages/hookli/src/hooks/use-step/index.ts
  • packages/hookli/src/hooks/use-step/use-step.test.ts
  • packages/hookli/src/hooks/use-step/use-step.ts
  • packages/hookli/src/hooks/use-ternary-dark-mode/index.ts
  • packages/hookli/src/hooks/use-ternary-dark-mode/use-ternary-dark-mode.test.ts
  • packages/hookli/src/hooks/use-ternary-dark-mode/use-ternary-dark-mode.ts
  • packages/hookli/src/hooks/use-timeout/index.ts
  • packages/hookli/src/hooks/use-timeout/use-timeout.test.ts
  • packages/hookli/src/hooks/use-timeout/use-timeout.ts
  • packages/hookli/src/hooks/use-toggle/index.ts
  • packages/hookli/src/hooks/use-toggle/use-toggle.test.ts
  • packages/hookli/src/hooks/use-toggle/use-toggle.ts
  • packages/hookli/src/hooks/use-unmount/index.ts
  • packages/hookli/src/hooks/use-unmount/use-unmount.test.ts
  • packages/hookli/src/hooks/use-unmount/use-unmount.ts
  • packages/hookli/src/hooks/use-window-size/index.ts
  • packages/hookli/src/hooks/use-window-size/use-window-size.test.ts
  • packages/hookli/src/hooks/use-window-size/use-window-size.ts
  • packages/hookli/src/index.ts
  • packages/hookli/src/types.ts
  • packages/hookli/tsconfig.json
  • packages/hookli/tsup.config.ts
  • packages/hookli/vitest.config.mts
  • pnpm-workspace.yaml
  • ralph/GUIDE.md
  • ralph/README.md
  • ralph/check.sh
  • ralph/prd.json
  • ralph/progress.txt
  • ralph/prompt.md
  • ralph/seed-review-comments.sh
  • turbo.json

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • Review on demand using usage pricing
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch monorepo

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@ecc-tools

ecc-tools Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Analyzing 200 commits...

@ecc-tools

ecc-tools Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Analysis Complete

Generated ECC bundle from 63 commits | Confidence: 90%

View Pull Request #2

Repository Profile
Attribute Value
Language TypeScript
Framework Next.js
Commit Convention conventional
Test Directory mixed
Changed Files (297)
Metric Value
Files changed 297
Additions 19695
Deletions 3147

Top hotspots

Path Status +/-
pnpm-lock.yaml added +6486 / -0
apps/docs/lib/hook-docs.ts added +2199 / -0
yarn.lock removed +0 / -2045
apps/docs/lib/hook-sources.ts added +1694 / -0
.claude/commands/way-of-working.md added +398 / -0

Top directories

Directory Files Total changes
. 8 8817
apps/docs/lib 7 4183
apps/docs/components/demos 41 2168
.claude/commands 12 1917
apps/docs/components 23 1713
Analysis Depth Readiness (evidence-backed, 57%)

ECC Tools uses this to decide whether recommendations should stay at commit-history/setup guidance or expand into CI, security, harness, reference-set, AI-routing, and team backlog work.

Area Status Evidence / Next Step
Commit history Ready 63 commits sampled
CI/CD signals Missing Add workflow files or CI troubleshooting evidence so ECC Tools can reason about pipeline setup.
Security evidence Missing Add AgentShield, audit, SARIF, SBOM, or security review evidence so recommendations can cover security posture.
Harness configuration Ready .claude/agents/frontend-code-reviewer.md, .claude/agents/product-owner.md, .claude/agents/task-orchestrator.md
Reference/eval evidence Ready packages/hookli/src/hooks/use-local-storage-with-expiry/use-local-storage-with-expiry.test.ts, packages/hookli/src/hooks/use-local-storage/use-local-storage.test.ts, packages/hookli/src/hooks/use-read-local-storage/use-read-local-storage.test.ts
AI routing and cost controls Ready .claude/commands/speckit.plan.md, CLAUDE.md, apps/docs/CLAUDE.md
Team handoff and project tracking Missing Add roadmap, runbook, project, Linear, or follow-up tracking docs so generated work can land in a team queue.
Reference Set Readiness (2/7, 29%)
Area Status Evidence / Next Step
Deep analyzer corpus Missing Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions.
RAG/evaluator comparison Present packages/hookli/src/hooks/use-local-storage-with-expiry/use-local-storage-with-expiry.test.ts, packages/hookli/src/hooks/use-local-storage/use-local-storage.test.ts, packages/hookli/src/hooks/use-read-local-storage/use-read-local-storage.test.ts
PR salvage/review corpus Missing Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation.
Discussion triage corpus Missing Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications.
Harness compatibility Present .claude/agents/frontend-code-reviewer.md, .claude/agents/product-owner.md, .claude/agents/task-orchestrator.md
Security evidence Missing Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs.
CI failure-mode evidence Missing Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes.
Likely Future Issues (5)
Severity Signal Why it may show up
MEDIUM Runtime config changes may ship without example or template updates 4 runtime config paths changed; 0 example or template config files changed
MEDIUM User-facing UI changes may ship without browser coverage 69 user-facing UI paths changed; 0 browser or e2e coverage files changed
HIGH Security-sensitive changes may ship without scanner evidence 124 security-sensitive paths changed; 0 security scanner or security-focused validation artifacts changed
MEDIUM AI or harness analysis changes may ship without reference-set validation 15 reference-sensitive path(s) changed; 0 eval, golden trace, benchmark, or reference-set artifacts changed
MEDIUM Harness config changes may ship without compatibility evidence 15 harness config paths changed; 0 harness compatibility evidence artifacts changed
  • Runtime config changes may ship without example or template updates: The PR changes runtime config or deployment settings but does not update any obvious example env file or config template.
  • User-facing UI changes may ship without browser coverage: The PR changes components, pages, or other user-facing UI files without touching any obvious browser or end-to-end coverage.
  • Security-sensitive changes may ship without scanner evidence: The PR touches billing, secrets, auth, webhooks, agent, or CI-sensitive surfaces without adding obvious security scanner, code scanning, or security-focused validation evidence.
  • AI or harness analysis changes may ship without reference-set validation: The PR changes analyzer, skill, agent, command, or harness guidance without updating any obvious eval, golden trace, benchmark, or reference-set artifact.
  • Harness config changes may ship without compatibility evidence: The PR changes harness, MCP, plugin, or agent configuration without touching harness audit, adapter matrix, cross-harness docs, or compatibility regression evidence.
Suggested Follow-up Work (5)
Type Suggested title Targets
PR chore: sync config templates for apps/docs/eslint.config.mjs + apps/docs/next.config.ts apps/docs/eslint.config.mjs, apps/docs/next.config.ts
PR test: add browser coverage for apps/docs/app/docs/[slug]/page.tsx + apps/docs/app/docs/page.tsx apps/docs/app/docs/[slug]/page.tsx, apps/docs/app/docs/page.tsx
PR security: add scanner evidence for .claude/agents/frontend-code-reviewer.md + .claude/agents/product-owner.md .claude/agents/frontend-code-reviewer.md, .claude/agents/product-owner.md
PR analysis: add reference-set evidence for .claude/agents/frontend-code-reviewer.md + .claude/agents/product-owner.md .claude/agents/frontend-code-reviewer.md, .claude/agents/product-owner.md
PR harness: add config quality evidence for .claude/agents/frontend-code-reviewer.md + .claude/agents/product-owner.md .claude/agents/frontend-code-reviewer.md, .claude/agents/product-owner.md
  • chore: sync config templates for apps/docs/eslint.config.mjs + apps/docs/next.config.ts: Backfill example env files or config templates before a fresh setup drifts from the shipped runtime surface.
  • test: add browser coverage for apps/docs/app/docs/[slug]/page.tsx + apps/docs/app/docs/page.tsx: Backfill browser coverage before another user-facing UI change lands on the touched surface.
  • security: add scanner evidence for .claude/agents/frontend-code-reviewer.md + .claude/agents/product-owner.md: Backfill explicit scanner or code-scanning evidence before another security-sensitive change lands on the touched surface.
  • analysis: add reference-set evidence for .claude/agents/frontend-code-reviewer.md + .claude/agents/product-owner.md: Backfill eval, golden trace, benchmark, or reference-set evidence before another AI or harness-analysis change lands on the touched surface.
  • harness: add config quality evidence for .claude/agents/frontend-code-reviewer.md + .claude/agents/product-owner.md: Backfill harness audit, adapter matrix, or cross-harness compatibility evidence before another config change lands on the touched surface.

Copy-ready bodies

chore: sync config templates for apps/docs/eslint.config.mjs + apps/docs/next.config.ts

## Summary
- Update the example env files, sample configs, or deployment templates that should mirror the changed runtime configuration surface.

## Why
- Backfill example env files or config templates before a fresh setup drifts from the shipped runtime surface.

## Touched paths
- `apps/docs/eslint.config.mjs`
- `apps/docs/next.config.ts`

## Validation
- Update the repo example env file or config template that should reflect the new runtime settings.
- Run the setup, boot, or deployment validation flow that depends on the changed config surface.

test: add browser coverage for apps/docs/app/docs/[slug]/page.tsx + apps/docs/app/docs/page.tsx

## Summary
- Add browser or end-to-end coverage for the recently changed user-facing surface.

## Why
- Backfill browser coverage before another user-facing UI change lands on the touched surface.

## Touched paths
- `apps/docs/app/docs/[slug]/page.tsx`
- `apps/docs/app/docs/page.tsx`

## Validation
- Add or extend browser / e2e coverage for the changed component, page, or flow.
- Exercise the visible user journey that depends on the touched UI surface.

security: add scanner evidence for .claude/agents/frontend-code-reviewer.md + .claude/agents/product-owner.md

## Summary
- Add security scanner or code-scanning evidence for the recently changed security-sensitive surface.

## Why
- Backfill explicit scanner or code-scanning evidence before another security-sensitive change lands on the touched surface.

## Touched paths
- `.claude/agents/frontend-code-reviewer.md`
- `.claude/agents/product-owner.md`

## Validation
- Run or add the relevant security scanner, code scanning, secret scanning, or dependency/security review check for the touched surface.
- Attach the scanner output, SARIF/code-scanning result, or focused security regression test to the follow-up PR.
- Confirm the changed auth, billing, webhook, secret-handling, agent, or CI surface has an explicit pass/fail gate.

analysis: add reference-set evidence for .claude/agents/frontend-code-reviewer.md + .claude/agents/product-owner.md

## Summary
- Add reference-set or eval evidence for the recently changed AI, analyzer, skill, agent, command, or harness guidance surface.

## Why
- Backfill eval, golden trace, benchmark, or reference-set evidence before another AI or harness-analysis change lands on the touched surface.

## Touched paths
- `.claude/agents/frontend-code-reviewer.md`
- `.claude/agents/product-owner.md`

## Validation
- Add or update an eval, golden trace, benchmark, fixture, or reference-set artifact for the changed AI/harness behavior.
- Compare the changed behavior against the maintained reference set and record the pass/fail evidence.
- Confirm the follow-up evidence covers the same analyzer, skill, agent, command, or harness surface touched by this PR.

harness: add config quality evidence for .claude/agents/frontend-code-reviewer.md + .claude/agents/product-owner.md

## Summary
- Add harness compatibility evidence for the recently changed config surface.

## Why
- Backfill harness audit, adapter matrix, or cross-harness compatibility evidence before another config change lands on the touched surface.

## Touched paths
- `.claude/agents/frontend-code-reviewer.md`
- `.claude/agents/product-owner.md`

## Validation
- Run or update the harness audit, adapter compliance matrix, or cross-harness compatibility check for the changed config.
- Add or update a regression, fixture, or doc evidence path that covers the affected harness, MCP, plugin, or agent loading behavior.
Detected Workflows (7)
Workflow Description
feature-development Standard feature implementation workflow
add-new-hook-doc-page Adds documentation for a new React hook, including interactive demo, registry entry, docs metadata, and vendored source snapshot.
batch-add-multiple-hook-doc-pages Adds documentation for several new hooks in a single commit, following the same steps as adding a single hook doc page, but for multiple hooks at once.
feature-development-with-prd-tracking Implements a new feature or completes a task, updating both the implementation and the project tracking files.
design-system-token-update Updates color/typography/design tokens in globals.css and syncs design documentation.
Generated Instincts (33)
Domain Count
git 4
code-style 9
architecture 1
testing 6
workflow 13

After merging, import with:

/instinct-import .claude/homunculus/instincts/inherited/hookli-instincts.yaml

Files

  • .claude/ecc-tools.json
  • .claude/skills/hookli/SKILL.md
  • .agents/skills/hookli/SKILL.md
  • .agents/skills/hookli/agents/openai.yaml
  • .claude/identity.json
  • .codex/config.toml
  • .codex/AGENTS.md
  • .codex/agents/explorer.toml
  • .codex/agents/reviewer.toml
  • .codex/agents/docs-researcher.toml
  • .claude/homunculus/instincts/inherited/hookli-instincts.yaml
  • .claude/commands/feature-development.md
  • .claude/commands/add-new-hook-doc-page.md
  • .claude/commands/batch-add-multiple-hook-doc-pages.md

ECC Tools | Everything Claude Code

@devsaifmohamed
devsaifmohamed merged commit 835fa16 into main Jul 16, 2026
1 of 2 checks passed
@devsaifmohamed
devsaifmohamed deleted the monorepo branch July 16, 2026 12:49
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