Skip to content

feat(docs): generate llms.txt and un-deprecate the browser-dependent hooks - #435

Draft
hyesungoh wants to merge 6 commits into
mainfrom
docs/ai-friendly-phase-0-1
Draft

feat(docs): generate llms.txt and un-deprecate the browser-dependent hooks#435
hyesungoh wants to merge 6 commits into
mainfrom
docs/ai-friendly-phase-0-1

Conversation

@hyesungoh

Copy link
Copy Markdown
Member

Summary

Phase 0·1 of making the library legible to AI coding agents. Related: #433.

Un-deprecate the browser-dependent hooks

  • Remove the @deprecated JSDoc from useDoubleClick, useGeolocation, useImpressionRef, useIntersectionObserver, useLongPress, useOutsideClickEffect, useStorageState and useVisibilityEvent. They are maintained hooks again — editors stop rendering them struck-through and agents stop routing around them. Patch changeset included.
  • Cross-link useVisibilityEventusePageVisibility with @see, since the two solve the same problem with different shapes (callback vs state).
  • The README paragraphs that still call these hooks deprecated are left for Rename packages/core to packages/react-simplikit, absorb the mobile package, add subpath imports #433, which rewrites the READMEs anyway (package rename + mobile merge). Until that lands the published packages/core README lags the .d.ts by one release.

Serve LLM-friendly docs

  • Add vitepress-plugin-llms so yarn docs:build emits /llms.txt, /llms-full.txt, and a raw Markdown twin of every page (e.g. /core/hooks/useDebounce.md). The plugin follows the existing VitePress rewrites, so the links are the clean URLs rather than source paths.
  • The listing covers 65 pages: 55 API references (32 core hooks, 3 components, 3 utils, 8 mobile hooks, 9 mobile utils) plus 10 guide pages. Localized copies (ko/, ja/, generated fallbacks) and non-doc Markdown (READMEs, plugin skills, examples) are excluded so each page is listed exactly once.
  • Remove the hand-maintained root llms.txt. It was never actually served — srcDir is the repo root, so a non-Markdown file there never reached the build and /llms.txt returned 404. Its "Usage Guidelines for AI Agents" section moved into the plugin's details, and it had drifted (missing all components, all utils, and 8 hooks).

Keep it from drifting

test:docs already builds the site in CI, so the new assertLlmsOutput check rides along on that build rather than adding a job. It asserts that:

  • every value export of packages/core/src/index.ts and packages/mobile/src/index.ts has a page linked in llms.txt — the list is derived from the index files, so a new hook is covered without touching this check;
  • no localized page leaks into the listing;
  • llms-full.txt inlines page contents, and the per-page Markdown is Markdown (no <Interface> components).

collectPublicExports is split out because the skill generator planned for the next phase needs the same list.

Notes for reviewers

  • chore(docs): add vitepress-plugin-llms is only the lockfile plus .yarn/cache archives — nothing to read there.
  • The plugin's injectLLMHint defaults to on, so each page now carries a display: none line pointing agents at its .md twin (Are you an LLM? You can read better optimized documentation at /core/hooks/useDebounce.md …). Invisible to human readers; say the word and I'll set injectLLMHint: false.
  • Verified the new check actually fails: excluding useDebounce from the plugin's ignoreFiles makes test:docs exit 1 with llms.txt must link the documentation page of useDebounce.

Checklist

  • Tests pass (yarn test, yarn test:docs, yarn test:spec)
  • Lint/format pass (yarn fix)
  • 100% coverage maintained (JSDoc-only source changes)
  • Changeset added (react-simplikit patch)

@changeset-bot

changeset-bot Bot commented Aug 25, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: d850a8a

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
react-simplikit Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@github-actions

Copy link
Copy Markdown
Contributor

Size Change: -1.4 kB (-1.42%)

Total Size: 97.3 kB

📦 View Changed
Filename Size Change
packages/core/dist/hooks/useDoubleClick/useDoubleClick.cjs 965 B -119 B (-10.98%) 👏
packages/core/dist/hooks/useDoubleClick/useDoubleClick.mjs 950 B -119 B (-11.13%) 👏
packages/core/dist/hooks/useGeolocation/useGeolocation.cjs 2.02 kB -118 B (-5.51%)
packages/core/dist/hooks/useGeolocation/useGeolocation.mjs 2.02 kB -117 B (-5.48%)
packages/core/dist/hooks/useImpressionRef/useImpressionRef.cjs 1.09 kB -112 B (-9.31%)
packages/core/dist/hooks/useImpressionRef/useImpressionRef.mjs 1.05 kB -111 B (-9.54%) 👏
packages/core/dist/hooks/useIntersectionObserver/useIntersectionObserver.cjs 967 B -105 B (-9.79%) 👏
packages/core/dist/hooks/useIntersectionObserver/useIntersectionObserver.mjs 939 B -104 B (-9.97%) 👏
packages/core/dist/hooks/useLongPress/useLongPress.cjs 1.68 kB -119 B (-6.63%)
packages/core/dist/hooks/useLongPress/useLongPress.mjs 1.64 kB -119 B (-6.75%)
packages/core/dist/hooks/useOutsideClickEffect/useOutsideClickEffect.cjs 789 B -115 B (-12.72%) 👏
packages/core/dist/hooks/useOutsideClickEffect/useOutsideClickEffect.mjs 758 B -120 B (-13.67%) 👏
packages/core/dist/hooks/useVisibilityEvent/useVisibilityEvent.cjs 702 B -67 B (-8.71%)
packages/core/dist/hooks/useVisibilityEvent/useVisibilityEvent.mjs 686 B -63 B (-8.41%)
packages/mobile/dist/hooks/usePageVisibility/usePageVisibility.cjs 969 B +55 B (+6.02%) 🔍
packages/mobile/dist/hooks/usePageVisibility/usePageVisibility.mjs 949 B +54 B (+6.03%) 🔍
ℹ️ View Unchanged
Filename Size
packages/core/dist/components/ImpressionArea/ImpressionArea.cjs 1.01 kB
packages/core/dist/components/ImpressionArea/ImpressionArea.mjs 984 B
packages/core/dist/components/Separated/Separated.cjs 686 B
packages/core/dist/components/Separated/Separated.mjs 684 B
packages/core/dist/components/SwitchCase/SwitchCase.cjs 701 B
packages/core/dist/components/SwitchCase/SwitchCase.mjs 699 B
packages/core/dist/hooks/useAsyncEffect/useAsyncEffect.cjs 626 B
packages/core/dist/hooks/useAsyncEffect/useAsyncEffect.mjs 615 B
packages/core/dist/hooks/useBooleanState/useBooleanState.cjs 539 B
packages/core/dist/hooks/useBooleanState/useBooleanState.mjs 529 B
packages/core/dist/hooks/useCallbackOncePerRender/useCallbackOncePerRender.cjs 790 B
packages/core/dist/hooks/useCallbackOncePerRender/useCallbackOncePerRender.mjs 762 B
packages/core/dist/hooks/useConditionalEffect/useConditionalEffect.cjs 955 B
packages/core/dist/hooks/useConditionalEffect/useConditionalEffect.mjs 934 B
packages/core/dist/hooks/useControlledState/useControlledState.cjs 865 B
packages/core/dist/hooks/useControlledState/useControlledState.mjs 855 B
packages/core/dist/hooks/useCounter/useCounter.cjs 1.03 kB
packages/core/dist/hooks/useCounter/useCounter.mjs 1.01 kB
packages/core/dist/hooks/useDebounce/debounce.cjs 458 B
packages/core/dist/hooks/useDebounce/debounce.mjs 456 B
packages/core/dist/hooks/useDebounce/useDebounce.cjs 974 B
packages/core/dist/hooks/useDebounce/useDebounce.mjs 953 B
packages/core/dist/hooks/useDebouncedCallback/useDebouncedCallback.cjs 1.05 kB
packages/core/dist/hooks/useDebouncedCallback/useDebouncedCallback.mjs 1.03 kB
packages/core/dist/hooks/useInputState/useInputState.cjs 663 B
packages/core/dist/hooks/useInputState/useInputState.mjs 654 B
packages/core/dist/hooks/useInterval/useInterval.cjs 837 B
packages/core/dist/hooks/useInterval/useInterval.mjs 811 B
packages/core/dist/hooks/useIsClient/useIsClient.cjs 585 B
packages/core/dist/hooks/useIsClient/useIsClient.mjs 574 B
packages/core/dist/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.cjs 577 B
packages/core/dist/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.mjs 575 B
packages/core/dist/hooks/useList/useList.cjs 850 B
packages/core/dist/hooks/useList/useList.mjs 825 B
packages/core/dist/hooks/useLoading/useLoading.cjs 919 B
packages/core/dist/hooks/useLoading/useLoading.mjs 909 B
packages/core/dist/hooks/useMap/useMap.cjs 730 B
packages/core/dist/hooks/useMap/useMap.mjs 713 B
packages/core/dist/hooks/usePreservedCallback/usePreservedCallback.cjs 691 B
packages/core/dist/hooks/usePreservedCallback/usePreservedCallback.mjs 675 B
packages/core/dist/hooks/usePreservedReference/usePreservedReference.cjs 805 B
packages/core/dist/hooks/usePreservedReference/usePreservedReference.mjs 789 B
packages/core/dist/hooks/usePrevious/usePrevious.cjs 643 B
packages/core/dist/hooks/usePrevious/usePrevious.mjs 635 B
packages/core/dist/hooks/useRefEffect/useRefEffect.cjs 780 B
packages/core/dist/hooks/useRefEffect/useRefEffect.mjs 753 B
packages/core/dist/hooks/useSet/useSet.cjs 822 B
packages/core/dist/hooks/useSet/useSet.mjs 791 B
packages/core/dist/hooks/useStorageState/storage.cjs 543 B
packages/core/dist/hooks/useStorageState/storage.mjs 527 B
packages/core/dist/hooks/useStorageState/useStorageState.cjs 966 B
packages/core/dist/hooks/useStorageState/useStorageState.mjs 957 B
packages/core/dist/hooks/useThrottle/throttle.cjs 306 B
packages/core/dist/hooks/useThrottle/throttle.mjs 298 B
packages/core/dist/hooks/useThrottle/useThrottle.cjs 864 B
packages/core/dist/hooks/useThrottle/useThrottle.mjs 838 B
packages/core/dist/hooks/useThrottledCallback/useThrottledCallback.cjs 1.11 kB
packages/core/dist/hooks/useThrottledCallback/useThrottledCallback.mjs 1.08 kB
packages/core/dist/hooks/useTimeout/useTimeout.cjs 627 B
packages/core/dist/hooks/useTimeout/useTimeout.mjs 600 B
packages/core/dist/hooks/useToggle/useToggle.cjs 524 B
packages/core/dist/hooks/useToggle/useToggle.mjs 506 B
packages/core/dist/index.cjs 967 B
packages/core/dist/index.mjs 697 B
packages/core/dist/utils/buildContext/buildContext.cjs 809 B
packages/core/dist/utils/buildContext/buildContext.mjs 788 B
packages/core/dist/utils/mergeProps/mergeProps.cjs 669 B
packages/core/dist/utils/mergeProps/mergeProps.mjs 668 B
packages/core/dist/utils/mergeRefs/mergeRefs.cjs 614 B
packages/core/dist/utils/mergeRefs/mergeRefs.mjs 612 B
packages/mobile/dist/hooks/useAvoidKeyboard/useAvoidKeyboard.cjs 1.01 kB
packages/mobile/dist/hooks/useAvoidKeyboard/useAvoidKeyboard.mjs 986 B
packages/mobile/dist/hooks/useBodyScrollLock/useBodyScrollLock.cjs 568 B
packages/mobile/dist/hooks/useBodyScrollLock/useBodyScrollLock.mjs 544 B
packages/mobile/dist/hooks/useKeyboardHeight/useKeyboardHeight.cjs 709 B
packages/mobile/dist/hooks/useKeyboardHeight/useKeyboardHeight.mjs 692 B
packages/mobile/dist/hooks/useNetworkStatus/useNetworkStatus.cjs 1.22 kB
packages/mobile/dist/hooks/useNetworkStatus/useNetworkStatus.mjs 1.2 kB
packages/mobile/dist/hooks/useSafeAreaInset/useSafeAreaInset.cjs 965 B
packages/mobile/dist/hooks/useSafeAreaInset/useSafeAreaInset.mjs 950 B
packages/mobile/dist/hooks/useScrollDirection/useScrollDirection.cjs 979 B
packages/mobile/dist/hooks/useScrollDirection/useScrollDirection.mjs 967 B
packages/mobile/dist/hooks/useVisualViewport/useVisualViewport.cjs 1.26 kB
packages/mobile/dist/hooks/useVisualViewport/useVisualViewport.mjs 1.25 kB
packages/mobile/dist/index.cjs 530 B
packages/mobile/dist/index.mjs 377 B
packages/mobile/dist/utils/disableBodyScrollLock/disableBodyScrollLock.cjs 706 B
packages/mobile/dist/utils/disableBodyScrollLock/disableBodyScrollLock.mjs 698 B
packages/mobile/dist/utils/enableBodyScrollLock/enableBodyScrollLock.cjs 696 B
packages/mobile/dist/utils/enableBodyScrollLock/enableBodyScrollLock.mjs 687 B
packages/mobile/dist/utils/getKeyboardHeight/getKeyboardHeight.cjs 632 B
packages/mobile/dist/utils/getKeyboardHeight/getKeyboardHeight.mjs 626 B
packages/mobile/dist/utils/getSafeAreaInset/getSafeAreaInset.cjs 925 B
packages/mobile/dist/utils/getSafeAreaInset/getSafeAreaInset.mjs 916 B
packages/mobile/dist/utils/isAndroid/isAndroid.cjs 566 B
packages/mobile/dist/utils/isAndroid/isAndroid.mjs 558 B
packages/mobile/dist/utils/isIOS/isIOS.cjs 776 B
packages/mobile/dist/utils/isIOS/isIOS.mjs 769 B
packages/mobile/dist/utils/isKeyboardVisible/isKeyboardVisible.cjs 455 B
packages/mobile/dist/utils/isKeyboardVisible/isKeyboardVisible.mjs 443 B
packages/mobile/dist/utils/isServer/isServer.cjs 404 B
packages/mobile/dist/utils/isServer/isServer.mjs 403 B
packages/mobile/dist/utils/subscribeKeyboardHeight/subscribeKeyboardHeight.cjs 1.14 kB
packages/mobile/dist/utils/subscribeKeyboardHeight/subscribeKeyboardHeight.mjs 1.12 kB

compressed-size-action

@codecov-commenter

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (b202400) to head (d850a8a).

Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff            @@
##              main      #435   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files           58        58           
  Lines         1652      1652           
  Branches       499       499           
=========================================
  Hits          1652      1652           
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

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.

2 participants