create-disposabl-app 0.0.4 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (399) hide show
  1. package/dist/index.js +490 -105
  2. package/dist/templates/default/LICENSE +21 -0
  3. package/dist/templates/default/apps/blog/package.json +1 -0
  4. package/dist/templates/default/apps/changelog/package.json +1 -0
  5. package/dist/templates/default/apps/desktop/.oxfmtrc.json +5 -0
  6. package/dist/templates/default/apps/desktop/.oxlintrc.json +6 -0
  7. package/dist/templates/default/apps/desktop/README.md +58 -0
  8. package/dist/templates/default/apps/desktop/forge.config.mts +90 -0
  9. package/dist/templates/default/apps/desktop/index.html +12 -0
  10. package/dist/templates/default/apps/desktop/package.json +55 -0
  11. package/dist/templates/default/apps/desktop/src/declarations.d.ts +2 -0
  12. package/dist/templates/default/apps/desktop/src/index.css +8 -0
  13. package/dist/templates/default/apps/desktop/src/main.ts +58 -0
  14. package/dist/templates/default/apps/desktop/src/preload.ts +3 -0
  15. package/dist/templates/default/apps/desktop/src/renderer.ts +19 -0
  16. package/dist/templates/default/apps/desktop/tsconfig.json +14 -0
  17. package/dist/templates/default/apps/desktop/vite.main.config.mts +4 -0
  18. package/dist/templates/default/apps/desktop/vite.preload.config.mts +4 -0
  19. package/dist/templates/default/apps/desktop/vite.renderer.config.mts +4 -0
  20. package/dist/templates/default/apps/docs/package.json +1 -0
  21. package/dist/templates/default/apps/mobile/.agents/skills/agent-device/SKILL.md +22 -0
  22. package/dist/templates/default/apps/mobile/.agents/skills/android-emulator/SKILL.md +32 -0
  23. package/dist/templates/default/apps/mobile/.agents/skills/dogfood/SKILL.md +27 -0
  24. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/SKILL.md +176 -0
  25. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/agents/openai.yaml +4 -0
  26. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/app-store-metadata.md +497 -0
  27. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/ios-app-store.md +376 -0
  28. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/native-ios.md +167 -0
  29. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/play-store.md +244 -0
  30. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/testflight.md +62 -0
  31. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/workflows.md +120 -0
  32. package/dist/templates/default/apps/mobile/.agents/skills/eas-hosting/SKILL.md +431 -0
  33. package/dist/templates/default/apps/mobile/.agents/skills/eas-hosting/agents/openai.yaml +4 -0
  34. package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/SKILL.md +46 -0
  35. package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/agents/openai.yaml +4 -0
  36. package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/references/metrics.md +98 -0
  37. package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/references/queries.md +444 -0
  38. package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/references/setup.md +529 -0
  39. package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/references/third-party.md +136 -0
  40. package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/SKILL.md +237 -0
  41. package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/agents/openai.yaml +4 -0
  42. package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/references/controllers.md +139 -0
  43. package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/references/logs-and-crashes.md +101 -0
  44. package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/references/run-your-app.md +256 -0
  45. package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/references/troubleshooting.md +56 -0
  46. package/dist/templates/default/apps/mobile/.agents/skills/eas-update/SKILL.md +146 -0
  47. package/dist/templates/default/apps/mobile/.agents/skills/eas-update/agents/openai.yaml +4 -0
  48. package/dist/templates/default/apps/mobile/.agents/skills/eas-update-insights/SKILL.md +238 -0
  49. package/dist/templates/default/apps/mobile/.agents/skills/eas-update-insights/agents/openai.yaml +4 -0
  50. package/dist/templates/default/apps/mobile/.agents/skills/eas-update-insights/references/channel-insights-schema.md +47 -0
  51. package/dist/templates/default/apps/mobile/.agents/skills/eas-update-insights/references/update-insights-schema.md +69 -0
  52. package/dist/templates/default/apps/mobile/.agents/skills/eas-workflows/SKILL.md +99 -0
  53. package/dist/templates/default/apps/mobile/.agents/skills/eas-workflows/agents/openai.yaml +4 -0
  54. package/dist/templates/default/apps/mobile/.agents/skills/eas-workflows/scripts/fetch.js +109 -0
  55. package/dist/templates/default/apps/mobile/.agents/skills/eas-workflows/scripts/package.json +6 -0
  56. package/dist/templates/default/apps/mobile/.agents/skills/expo-animation/LICENSE +21 -0
  57. package/dist/templates/default/apps/mobile/.agents/skills/expo-animation/RECIPES.md +385 -0
  58. package/dist/templates/default/apps/mobile/.agents/skills/expo-animation/SKILL.md +274 -0
  59. package/dist/templates/default/apps/mobile/.agents/skills/expo-animation/agents/openai.yaml +4 -0
  60. package/dist/templates/default/apps/mobile/.agents/skills/expo-app-clip/SKILL.md +290 -0
  61. package/dist/templates/default/apps/mobile/.agents/skills/expo-app-clip/agents/openai.yaml +4 -0
  62. package/dist/templates/default/apps/mobile/.agents/skills/expo-app-clip/references/native-module.md +96 -0
  63. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/SKILL.md +69 -0
  64. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/agents/openai.yaml +4 -0
  65. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/brownfield-integrated.md +551 -0
  66. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/brownfield-isolated.md +449 -0
  67. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/comparison.md +63 -0
  68. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/feature-integration.md +163 -0
  69. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/troubleshooting.md +88 -0
  70. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/version-compatibility.md +40 -0
  71. package/dist/templates/default/apps/mobile/.agents/skills/expo-data-fetching/SKILL.md +478 -0
  72. package/dist/templates/default/apps/mobile/.agents/skills/expo-data-fetching/agents/openai.yaml +4 -0
  73. package/dist/templates/default/apps/mobile/.agents/skills/expo-data-fetching/references/expo-router-loaders.md +341 -0
  74. package/dist/templates/default/apps/mobile/.agents/skills/expo-data-fetching/references/offline-and-cancellation.md +68 -0
  75. package/dist/templates/default/apps/mobile/.agents/skills/expo-design-system/SKILL.md +376 -0
  76. package/dist/templates/default/apps/mobile/.agents/skills/expo-design-system/agents/openai.yaml +4 -0
  77. package/dist/templates/default/apps/mobile/.agents/skills/expo-design-system/references/audit.md +190 -0
  78. package/dist/templates/default/apps/mobile/.agents/skills/expo-design-system/references/native-slop.md +74 -0
  79. package/dist/templates/default/apps/mobile/.agents/skills/expo-dev-client/SKILL.md +184 -0
  80. package/dist/templates/default/apps/mobile/.agents/skills/expo-dev-client/agents/openai.yaml +4 -0
  81. package/dist/templates/default/apps/mobile/.agents/skills/expo-dom/SKILL.md +425 -0
  82. package/dist/templates/default/apps/mobile/.agents/skills/expo-dom/agents/openai.yaml +4 -0
  83. package/dist/templates/default/apps/mobile/.agents/skills/expo-examples/SKILL.md +106 -0
  84. package/dist/templates/default/apps/mobile/.agents/skills/expo-examples/agents/openai.yaml +4 -0
  85. package/dist/templates/default/apps/mobile/.agents/skills/expo-examples/references/catalog.md +105 -0
  86. package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/SKILL.md +124 -0
  87. package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/agents/openai.yaml +4 -0
  88. package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/references/compatibility.md +130 -0
  89. package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/references/example.md +212 -0
  90. package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/references/migration-map.md +457 -0
  91. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/SKILL.md +151 -0
  92. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/agents/openai.yaml +4 -0
  93. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/config-plugin.md +90 -0
  94. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/create-expo-module.md +206 -0
  95. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/lifecycle.md +127 -0
  96. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/module-config.md +48 -0
  97. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/native-module.md +286 -0
  98. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/native-view.md +171 -0
  99. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/SKILL.md +201 -0
  100. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/agents/openai.yaml +4 -0
  101. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/controls.md +231 -0
  102. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/gradients.md +106 -0
  103. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/icons.md +232 -0
  104. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/media.md +193 -0
  105. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/storage.md +121 -0
  106. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/visual-effects.md +198 -0
  107. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/webgpu-three.md +605 -0
  108. package/dist/templates/default/apps/mobile/.agents/skills/expo-overview/SKILL.md +120 -0
  109. package/dist/templates/default/apps/mobile/.agents/skills/expo-overview/agents/openai.yaml +4 -0
  110. package/dist/templates/default/apps/mobile/.agents/skills/expo-overview/references/launch-without-dev-menu.md +24 -0
  111. package/dist/templates/default/apps/mobile/.agents/skills/expo-project-structure/SKILL.md +114 -0
  112. package/dist/templates/default/apps/mobile/.agents/skills/expo-project-structure/agents/openai.yaml +4 -0
  113. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/SKILL.md +240 -0
  114. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/agents/openai.yaml +4 -0
  115. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/form-sheet.md +253 -0
  116. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/route-structure.md +229 -0
  117. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/search.md +248 -0
  118. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/tabs.md +433 -0
  119. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/toolbar-and-headers.md +284 -0
  120. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/zoom-transitions.md +158 -0
  121. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/SKILL.md +314 -0
  122. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/agents/visual-grader.md +52 -0
  123. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/references/design-rubric.md +45 -0
  124. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/references/runtime-matrix.md +34 -0
  125. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/check-static.sh +64 -0
  126. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/clean-fixture.sh +56 -0
  127. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/generate_viewer.py +450 -0
  128. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/latest-sdk.sh +46 -0
  129. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/make-fixture.sh +95 -0
  130. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/make-workspace.sh +31 -0
  131. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/snapshot-android.sh +284 -0
  132. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/snapshot-ios.sh +132 -0
  133. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/snapshot-web.sh +61 -0
  134. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/SKILL.md +101 -0
  135. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/agents/openai.yaml +4 -0
  136. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/references/drop-in-replacements.md +27 -0
  137. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/references/jetpack-compose.md +73 -0
  138. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/references/swift-ui.md +73 -0
  139. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/references/universal.md +104 -0
  140. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/scripts/list-components.js +193 -0
  141. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/SKILL.md +150 -0
  142. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/agents/openai.yaml +4 -0
  143. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/expo-av-to-audio.md +132 -0
  144. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/expo-av-to-video.md +160 -0
  145. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/native-tabs.md +124 -0
  146. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/new-architecture.md +79 -0
  147. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/react-19.md +79 -0
  148. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/react-compiler.md +59 -0
  149. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/react-navigation-to-expo-router.md +61 -0
  150. package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/SKILL.md +91 -0
  151. package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/agents/openai.yaml +4 -0
  152. package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/references/false-friends.md +119 -0
  153. package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/references/native-patterns.md +39 -0
  154. package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/references/run-as-goal.md +48 -0
  155. package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/references/verify-on-device.md +45 -0
  156. package/dist/templates/default/apps/mobile/.agents/skills/ios-simulator/SKILL.md +32 -0
  157. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/POWER.md +172 -0
  158. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/SKILL.md +238 -0
  159. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/agents/openai.yaml +4 -0
  160. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-analyze-app.md +208 -0
  161. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-analyze-js.md +264 -0
  162. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-barrel-exports.md +250 -0
  163. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-code-splitting.md +255 -0
  164. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-hermes-mmap.md +167 -0
  165. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-library-size.md +164 -0
  166. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-native-assets.md +208 -0
  167. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-r8-android.md +231 -0
  168. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-tree-shaking.md +215 -0
  169. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/bundle-treemap-source-map-explorer.png +0 -0
  170. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/controlled-textinput-pingpong.png +0 -0
  171. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/devtools-flamegraph.png +0 -0
  172. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/emerge-xray-ios.png +0 -0
  173. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/expo-atlas-treemap.png +0 -0
  174. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/flashlight-flatlist-vs-flashlist.png +0 -0
  175. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/fps-drop-graph.png +0 -0
  176. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/memory-heap-snapshot.png +0 -0
  177. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/tti-warm-start-diagram.png +0 -0
  178. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/view-hierarchy-flattening.png +0 -0
  179. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/xcode-instruments-templates.png +0 -0
  180. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/xcode-thread-view.png +0 -0
  181. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-animations-reanimated.md +273 -0
  182. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-atomic-state.md +190 -0
  183. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-bottomsheet.md +339 -0
  184. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-concurrent-react.md +238 -0
  185. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-lists-flatlist-flashlist.md +223 -0
  186. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-measure-fps.md +178 -0
  187. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-memory-leaks.md +168 -0
  188. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-profile-react.md +138 -0
  189. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-react-compiler.md +261 -0
  190. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-uncontrolled-components.md +219 -0
  191. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-android-16kb-alignment.md +114 -0
  192. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-measure-tti.md +221 -0
  193. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-memory-leaks.md +206 -0
  194. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-memory-patterns.md +240 -0
  195. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-platform-setup.md +112 -0
  196. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-profiling.md +140 -0
  197. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-sdks-over-polyfills.md +192 -0
  198. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-threading-model.md +230 -0
  199. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-turbo-modules.md +210 -0
  200. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-view-flattening.md +180 -0
  201. package/dist/templates/default/apps/mobile/AGENTS.md +41 -0
  202. package/dist/templates/default/apps/mobile/app.json +38 -0
  203. package/dist/templates/default/apps/mobile/assets/expo.icon/Assets/expo-symbol 2.svg +3 -0
  204. package/dist/templates/default/apps/mobile/assets/expo.icon/Assets/grid.png +0 -0
  205. package/dist/templates/default/apps/mobile/assets/expo.icon/icon.json +40 -0
  206. package/dist/templates/default/apps/mobile/assets/images/android-icon-background.png +0 -0
  207. package/dist/templates/default/apps/mobile/assets/images/android-icon-foreground.png +0 -0
  208. package/dist/templates/default/apps/mobile/assets/images/android-icon-monochrome.png +0 -0
  209. package/dist/templates/default/apps/mobile/assets/images/icon.png +0 -0
  210. package/dist/templates/default/apps/mobile/assets/images/splash-icon.png +0 -0
  211. package/dist/templates/default/apps/mobile/eslint.config.js +10 -0
  212. package/dist/templates/default/apps/mobile/package.json +43 -0
  213. package/dist/templates/default/apps/mobile/skills-lock.json +185 -0
  214. package/dist/templates/default/apps/mobile/src/app/_layout.tsx +5 -0
  215. package/dist/templates/default/apps/mobile/src/app/index.tsx +17 -0
  216. package/dist/templates/default/apps/mobile/tsconfig.json +20 -0
  217. package/dist/templates/default/apps/web/.agents/skills/frontend-design/SKILL.md +71 -0
  218. package/dist/templates/default/apps/web/.agents/skills/web-design-guidelines/SKILL.md +39 -0
  219. package/dist/templates/default/apps/web/.env.example +3 -0
  220. package/dist/templates/default/apps/web/components.json +23 -0
  221. package/dist/templates/default/apps/web/eslint.config.ts +21 -0
  222. package/dist/templates/default/apps/web/package.json +39 -0
  223. package/dist/templates/default/apps/web/public/disposabl-logo.svg +8 -0
  224. package/dist/templates/default/apps/web/public/favicon.ico +0 -0
  225. package/dist/templates/default/apps/web/public/manifest.json +25 -0
  226. package/dist/templates/default/apps/web/skills-lock.json +17 -0
  227. package/dist/templates/default/apps/web/src/index.css +92 -0
  228. package/dist/templates/default/apps/web/src/routeTree.gen.ts +282 -0
  229. package/dist/templates/default/apps/web/src/router/__root.tsx +63 -0
  230. package/dist/templates/default/apps/web/src/router/_authenticated/dashboard.tsx +9 -0
  231. package/dist/templates/default/apps/web/src/router/_authenticated/todos/$id.tsx +27 -0
  232. package/dist/templates/default/apps/web/src/router/_authenticated/todos/index.tsx +33 -0
  233. package/dist/templates/default/apps/web/src/router/index.tsx +15 -0
  234. package/dist/templates/default/apps/web/src/router.tsx +20 -0
  235. package/dist/templates/default/apps/web/tsconfig.json +33 -0
  236. package/dist/templates/default/apps/web/tsr.config.json +6 -0
  237. package/dist/templates/default/apps/web/vite.config.ts +67 -0
  238. package/dist/templates/default/bun.lock +3932 -0
  239. package/dist/templates/default/bunfig.toml +5 -0
  240. package/dist/templates/default/disposabl.json +5 -0
  241. package/dist/templates/default/gitignore +10 -0
  242. package/dist/templates/default/package.json +31 -10
  243. package/dist/templates/default/packages/backend/.agents/skills/convex/SKILL.md +69 -0
  244. package/dist/templates/default/packages/backend/.agents/skills/convex-add/SKILL.md +26 -0
  245. package/dist/templates/default/packages/backend/.agents/skills/convex-advisor/SKILL.md +32 -0
  246. package/dist/templates/default/packages/backend/.agents/skills/convex-agent/SKILL.md +25 -0
  247. package/dist/templates/default/packages/backend/.agents/skills/convex-auth/SKILL.md +29 -0
  248. package/dist/templates/default/packages/backend/.agents/skills/convex-authz/SKILL.md +36 -0
  249. package/dist/templates/default/packages/backend/.agents/skills/convex-backup/SKILL.md +33 -0
  250. package/dist/templates/default/packages/backend/.agents/skills/convex-billing/SKILL.md +69 -0
  251. package/dist/templates/default/packages/backend/.agents/skills/convex-cost/SKILL.md +29 -0
  252. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/SKILL.md +325 -0
  253. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/agents/openai.yaml +14 -0
  254. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/assets/icon.svg +3 -0
  255. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/references/advanced-patterns.md +146 -0
  256. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/references/hybrid-components.md +38 -0
  257. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/references/local-components.md +39 -0
  258. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/references/packaged-components.md +54 -0
  259. package/dist/templates/default/packages/backend/.agents/skills/convex-crons/SKILL.md +23 -0
  260. package/dist/templates/default/packages/backend/.agents/skills/convex-deploy-guard/SKILL.md +29 -0
  261. package/dist/templates/default/packages/backend/.agents/skills/convex-design/SKILL.md +30 -0
  262. package/dist/templates/default/packages/backend/.agents/skills/convex-docs/SKILL.md +31 -0
  263. package/dist/templates/default/packages/backend/.agents/skills/convex-domains/SKILL.md +26 -0
  264. package/dist/templates/default/packages/backend/.agents/skills/convex-env/SKILL.md +24 -0
  265. package/dist/templates/default/packages/backend/.agents/skills/convex-expert/SKILL.md +38 -0
  266. package/dist/templates/default/packages/backend/.agents/skills/convex-explain-app/SKILL.md +29 -0
  267. package/dist/templates/default/packages/backend/.agents/skills/convex-improve-convex-plugin/SKILL.md +24 -0
  268. package/dist/templates/default/packages/backend/.agents/skills/convex-insights/SKILL.md +32 -0
  269. package/dist/templates/default/packages/backend/.agents/skills/convex-launch-readiness/SKILL.md +35 -0
  270. package/dist/templates/default/packages/backend/.agents/skills/convex-migrate/SKILL.md +23 -0
  271. package/dist/templates/default/packages/backend/.agents/skills/convex-migrate-rehearse/SKILL.md +31 -0
  272. package/dist/templates/default/packages/backend/.agents/skills/convex-monitor/SKILL.md +22 -0
  273. package/dist/templates/default/packages/backend/.agents/skills/convex-optimize/SKILL.md +26 -0
  274. package/dist/templates/default/packages/backend/.agents/skills/convex-quickstart/SKILL.md +29 -0
  275. package/dist/templates/default/packages/backend/.agents/skills/convex-quickstart/agents/openai.yaml +14 -0
  276. package/dist/templates/default/packages/backend/.agents/skills/convex-quickstart/assets/icon.svg +4 -0
  277. package/dist/templates/default/packages/backend/.agents/skills/convex-reviewer/SKILL.md +26 -0
  278. package/dist/templates/default/packages/backend/.agents/skills/convex-seed/SKILL.md +23 -0
  279. package/dist/templates/default/packages/backend/.agents/skills/convex-self-heal/SKILL.md +38 -0
  280. package/dist/templates/default/packages/backend/.agents/skills/convex-sentinel/SKILL.md +25 -0
  281. package/dist/templates/default/packages/backend/.agents/skills/convex-suggest/SKILL.md +27 -0
  282. package/dist/templates/default/packages/backend/.agents/skills/convex-test/SKILL.md +23 -0
  283. package/dist/templates/default/packages/backend/.agents/skills/convex-verify/SKILL.md +34 -0
  284. package/dist/templates/default/packages/backend/.prettierignore +4 -0
  285. package/dist/templates/default/packages/backend/AGENTS.md +18 -0
  286. package/dist/templates/default/packages/backend/CLAUDE.md +13 -0
  287. package/dist/templates/default/packages/backend/README.md +25 -0
  288. package/dist/templates/default/packages/backend/convex/_generated/ai/ai-files.state.json +6 -0
  289. package/dist/templates/default/packages/backend/convex/_generated/ai/guidelines.md +286 -0
  290. package/dist/templates/default/packages/backend/convex/_generated/api.d.ts +66 -0
  291. package/dist/templates/default/packages/backend/convex/_generated/api.js +23 -0
  292. package/dist/templates/default/packages/backend/convex/_generated/dataModel.d.ts +60 -0
  293. package/dist/templates/default/packages/backend/convex/_generated/server.d.ts +164 -0
  294. package/dist/templates/default/packages/backend/convex/_generated/server.js +101 -0
  295. package/dist/templates/default/packages/backend/convex/auth.config.ts +14 -0
  296. package/dist/templates/default/packages/backend/convex/auth.ts +15 -0
  297. package/dist/templates/default/packages/backend/convex/convex.config.ts +30 -0
  298. package/dist/templates/default/packages/backend/convex/http.ts +5 -0
  299. package/dist/templates/default/packages/backend/convex/mcp.ts +8 -0
  300. package/dist/templates/default/packages/backend/convex/schema.ts +10 -0
  301. package/dist/templates/default/packages/backend/convex/todos/index.ts +26 -0
  302. package/dist/templates/default/packages/backend/convex/todos/internal.ts +43 -0
  303. package/dist/templates/default/packages/backend/convex/tsconfig.json +27 -0
  304. package/dist/templates/default/packages/backend/convex/users.ts +20 -0
  305. package/dist/templates/default/packages/backend/eslint.config.mjs +62 -0
  306. package/dist/templates/default/packages/backend/package.json +36 -0
  307. package/dist/templates/default/packages/backend/skills-lock.json +203 -0
  308. package/dist/templates/default/packages/disposabl-kit/client/components/ui/accordion.tsx +77 -0
  309. package/dist/templates/default/packages/disposabl-kit/client/components/ui/alert-dialog.tsx +185 -0
  310. package/dist/templates/default/packages/disposabl-kit/client/components/ui/alert.tsx +75 -0
  311. package/dist/templates/default/packages/disposabl-kit/client/components/ui/aspect-ratio.tsx +22 -0
  312. package/dist/templates/default/packages/disposabl-kit/client/components/ui/attachment.tsx +207 -0
  313. package/dist/templates/default/packages/disposabl-kit/client/components/ui/avatar.tsx +106 -0
  314. package/dist/templates/default/packages/disposabl-kit/client/components/ui/badge.tsx +51 -0
  315. package/dist/templates/default/packages/disposabl-kit/client/components/ui/breadcrumb.tsx +121 -0
  316. package/dist/templates/default/packages/disposabl-kit/client/components/ui/bubble.tsx +127 -0
  317. package/dist/templates/default/packages/disposabl-kit/client/components/ui/button-group.tsx +87 -0
  318. package/dist/templates/default/packages/disposabl-kit/client/components/ui/button.tsx +57 -0
  319. package/dist/templates/default/packages/disposabl-kit/client/components/ui/calendar.tsx +241 -0
  320. package/dist/templates/default/packages/disposabl-kit/client/components/ui/card.tsx +102 -0
  321. package/dist/templates/default/packages/disposabl-kit/client/components/ui/carousel.tsx +239 -0
  322. package/dist/templates/default/packages/disposabl-kit/client/components/ui/chart.tsx +368 -0
  323. package/dist/templates/default/packages/disposabl-kit/client/components/ui/checkbox.tsx +27 -0
  324. package/dist/templates/default/packages/disposabl-kit/client/components/ui/code-block.tsx +243 -0
  325. package/dist/templates/default/packages/disposabl-kit/client/components/ui/collapsible.tsx +19 -0
  326. package/dist/templates/default/packages/disposabl-kit/client/components/ui/combobox.tsx +300 -0
  327. package/dist/templates/default/packages/disposabl-kit/client/components/ui/command.tsx +194 -0
  328. package/dist/templates/default/packages/disposabl-kit/client/components/ui/context-menu.tsx +271 -0
  329. package/dist/templates/default/packages/disposabl-kit/client/components/ui/dialog.tsx +156 -0
  330. package/dist/templates/default/packages/disposabl-kit/client/components/ui/direction.tsx +4 -0
  331. package/dist/templates/default/packages/disposabl-kit/client/components/ui/drawer.tsx +224 -0
  332. package/dist/templates/default/packages/disposabl-kit/client/components/ui/dropdown-menu.tsx +269 -0
  333. package/dist/templates/default/packages/disposabl-kit/client/components/ui/empty.tsx +103 -0
  334. package/dist/templates/default/packages/disposabl-kit/client/components/ui/field.tsx +236 -0
  335. package/dist/templates/default/packages/disposabl-kit/client/components/ui/hover-card.tsx +50 -0
  336. package/dist/templates/default/packages/disposabl-kit/client/components/ui/input-group.tsx +158 -0
  337. package/dist/templates/default/packages/disposabl-kit/client/components/ui/input-otp.tsx +83 -0
  338. package/dist/templates/default/packages/disposabl-kit/client/components/ui/input.tsx +19 -0
  339. package/dist/templates/default/packages/disposabl-kit/client/components/ui/item.tsx +201 -0
  340. package/dist/templates/default/packages/disposabl-kit/client/components/ui/kbd.tsx +26 -0
  341. package/dist/templates/default/packages/disposabl-kit/client/components/ui/label.tsx +19 -0
  342. package/dist/templates/default/packages/disposabl-kit/client/components/ui/marker.tsx +70 -0
  343. package/dist/templates/default/packages/disposabl-kit/client/components/ui/menubar.tsx +284 -0
  344. package/dist/templates/default/packages/disposabl-kit/client/components/ui/message-scroller.tsx +128 -0
  345. package/dist/templates/default/packages/disposabl-kit/client/components/ui/message.tsx +91 -0
  346. package/dist/templates/default/packages/disposabl-kit/client/components/ui/native-select.tsx +64 -0
  347. package/dist/templates/default/packages/disposabl-kit/client/components/ui/navigation-menu.tsx +170 -0
  348. package/dist/templates/default/packages/disposabl-kit/client/components/ui/pagination.tsx +133 -0
  349. package/dist/templates/default/packages/disposabl-kit/client/components/ui/popover.tsx +87 -0
  350. package/dist/templates/default/packages/disposabl-kit/client/components/ui/progress.tsx +82 -0
  351. package/dist/templates/default/packages/disposabl-kit/client/components/ui/questionnaire.tsx +330 -0
  352. package/dist/templates/default/packages/disposabl-kit/client/components/ui/radio-group.tsx +35 -0
  353. package/dist/templates/default/packages/disposabl-kit/client/components/ui/resizable.tsx +49 -0
  354. package/dist/templates/default/packages/disposabl-kit/client/components/ui/scroll-area.tsx +51 -0
  355. package/dist/templates/default/packages/disposabl-kit/client/components/ui/select.tsx +201 -0
  356. package/dist/templates/default/packages/disposabl-kit/client/components/ui/separator.tsx +22 -0
  357. package/dist/templates/default/packages/disposabl-kit/client/components/ui/sheet.tsx +132 -0
  358. package/dist/templates/default/packages/disposabl-kit/client/components/ui/sidebar.tsx +723 -0
  359. package/dist/templates/default/packages/disposabl-kit/client/components/ui/skeleton.tsx +13 -0
  360. package/dist/templates/default/packages/disposabl-kit/client/components/ui/slider.tsx +51 -0
  361. package/dist/templates/default/packages/disposabl-kit/client/components/ui/spinner.tsx +16 -0
  362. package/dist/templates/default/packages/disposabl-kit/client/components/ui/switch.tsx +31 -0
  363. package/dist/templates/default/packages/disposabl-kit/client/components/ui/table.tsx +113 -0
  364. package/dist/templates/default/packages/disposabl-kit/client/components/ui/tabs.tsx +81 -0
  365. package/dist/templates/default/packages/disposabl-kit/client/components/ui/textarea.tsx +17 -0
  366. package/dist/templates/default/packages/disposabl-kit/client/components/ui/toast.tsx +229 -0
  367. package/dist/templates/default/packages/disposabl-kit/client/components/ui/toggle-group.tsx +87 -0
  368. package/dist/templates/default/packages/disposabl-kit/client/components/ui/toggle.tsx +42 -0
  369. package/dist/templates/default/packages/disposabl-kit/client/components/ui/tooltip.tsx +65 -0
  370. package/dist/templates/default/packages/disposabl-kit/client/components/ui/trace.tsx +161 -0
  371. package/dist/templates/default/packages/disposabl-kit/client/hooks/use-mobile.ts +21 -0
  372. package/dist/templates/default/packages/disposabl-kit/client/lib/prerender.ts +89 -0
  373. package/dist/templates/default/packages/disposabl-kit/client/lib/return-to.ts +12 -0
  374. package/dist/templates/default/packages/disposabl-kit/client/lib/utils.ts +1 -0
  375. package/dist/templates/default/packages/disposabl-kit/client/routes/_auth-pages/login.tsx +114 -0
  376. package/dist/templates/default/packages/disposabl-kit/client/routes/_auth-pages/signUp.tsx +120 -0
  377. package/dist/templates/default/packages/disposabl-kit/client/routes/_authenticated/route.tsx +38 -0
  378. package/dist/templates/default/packages/disposabl-kit/client/routes/consent.tsx +137 -0
  379. package/dist/templates/default/packages/disposabl-kit/client/routes/route.tsx +30 -0
  380. package/dist/templates/default/packages/disposabl-kit/client/styles/globals.css +60 -0
  381. package/dist/templates/default/packages/disposabl-kit/client/vite.config.ts +32 -0
  382. package/dist/templates/default/packages/disposabl-kit/components.json +23 -0
  383. package/dist/templates/default/packages/disposabl-kit/eslint.config.js +21 -0
  384. package/dist/templates/default/packages/disposabl-kit/package.json +60 -0
  385. package/dist/templates/default/packages/disposabl-kit/server/http.ts +86 -0
  386. package/dist/templates/default/packages/disposabl-kit/server/lib/functions.ts +40 -0
  387. package/dist/templates/default/packages/disposabl-kit/server/lib/platforms.ts +20 -0
  388. package/dist/templates/default/packages/disposabl-kit/server/lib/static-routes.ts +56 -0
  389. package/dist/templates/default/packages/disposabl-kit/tsconfig.json +17 -0
  390. package/dist/templates/default/patches/@convex-dev%2Fauth@2.0.0-beta.0.patch +310 -0
  391. package/dist/templates/default/patches/@convex-dev%2Fstatic-hosting@0.2.1.patch +187 -0
  392. package/dist/templates/default/tsconfig.json +9 -0
  393. package/dist/templates/default/turbo.json +51 -0
  394. package/package.json +21 -5
  395. package/README.md +0 -34
  396. package/dist/templates/default/README.md +0 -12
  397. package/dist/templates/default/docs/index.html +0 -8
  398. package/dist/templates/default/eslint.config.js +0 -18
  399. package/dist/templates/default/index.ts +0 -14
@@ -0,0 +1,261 @@
1
+ ---
2
+ title: React Compiler
3
+ impact: HIGH
4
+ tags: memoization, react-compiler, memo, useMemo, useCallback
5
+ ---
6
+
7
+ # Skill: React Compiler
8
+
9
+ Set up React Compiler to automatically memoize components and eliminate unnecessary re-renders.
10
+
11
+ ## Quick Pattern
12
+
13
+ **Before (manual memoization):**
14
+
15
+ ```jsx
16
+ const MemoizedButton = memo(({ onPress }) => <Pressable onPress={onPress} />);
17
+ const handler = useCallback(() => doSomething(), []);
18
+ ```
19
+
20
+ **After (automatic with React Compiler):**
21
+
22
+ ```jsx
23
+ // No memo/useCallback needed - compiler handles it
24
+ const Button = ({ onPress }) => <Pressable onPress={onPress} />;
25
+ const handler = () => doSomething();
26
+ ```
27
+
28
+ ## When to Use
29
+
30
+ - Want automatic performance optimization without manual `memo`/`useMemo`/`useCallback`
31
+ - Codebase follows Rules of React
32
+ - React Native 0.76+ or Expo SDK 52+
33
+ - Ready to remove boilerplate memoization code
34
+
35
+ ## Prerequisites
36
+
37
+ - Babel-based build system
38
+ - Code follows [Rules of React](https://react.dev/reference/rules)
39
+ - Check current React Native, Expo, and React Compiler release notes before copying version-specific setup
40
+
41
+ ## Step-by-Step Instructions
42
+
43
+ ### Step 1: Check Compatibility
44
+
45
+ Before enabling the compiler, verify your project is compatible:
46
+
47
+ ```bash
48
+ npx react-compiler-healthcheck@latest
49
+ ```
50
+
51
+ This checks if your app follows the Rules of React and identifies potential issues.
52
+
53
+ ### Step 2: Install React Compiler
54
+
55
+ #### Expo
56
+
57
+ Use Expo's SDK-specific path:
58
+
59
+ ```bash
60
+ # SDK 54 and later: Babel is auto-configured
61
+ npx expo install babel-plugin-react-compiler@beta
62
+
63
+ # SDK 53: install runtime too
64
+ npx expo install babel-plugin-react-compiler@beta react-compiler-runtime@beta
65
+ ```
66
+
67
+ Then enable the experiment in app config:
68
+
69
+ ```json
70
+ {
71
+ "expo": {
72
+ "experiments": {
73
+ "reactCompiler": true
74
+ }
75
+ }
76
+ }
77
+ ```
78
+
79
+ #### React Native without Expo
80
+
81
+ ```bash
82
+ npm install -D babel-plugin-react-compiler@latest
83
+ ```
84
+
85
+ For React 17 or 18 targets, also install the compiler runtime:
86
+
87
+ ```bash
88
+ npm install react-compiler-runtime@latest
89
+ ```
90
+
91
+ Prefer the setup path documented for the app's exact Expo SDK, React Native, and React versions.
92
+
93
+ ### Step 3: Configure Babel (React Native without Expo)
94
+
95
+ For non-Expo React Native projects, configure Babel manually and keep the compiler first in the plugin pipeline:
96
+
97
+ ```javascript
98
+ // babel.config.js
99
+ const ReactCompilerConfig = {
100
+ target: '19', // Use '18' for React Native < 0.78
101
+ };
102
+
103
+ module.exports = function (api) {
104
+ api.cache(true);
105
+ return {
106
+ presets: ['module:@react-native/babel-preset'],
107
+ plugins: [
108
+ ['babel-plugin-react-compiler', ReactCompilerConfig],
109
+ // ... other plugins
110
+ ],
111
+ };
112
+ };
113
+ ```
114
+
115
+ ### Step 4: Set Up ESLint (Recommended)
116
+
117
+ Use the React Hooks/Compiler lint rules that match the app's React version. For Expo, SDK 55+ includes React Compiler lint rules through `eslint-config-expo`; SDK 54 and earlier need `eslint-plugin-react-compiler`. Fix rule violations before treating a component as compiler-optimized; skipped components are safe but do not get the intended memoization.
118
+
119
+ ### Step 5: Verify Optimizations
120
+
121
+ Verify with `agent-device react-devtools` before/after render measurements. For release-build verification, connect [`@callstack/inspector`](https://github.com/callstackincubator/inspector#inspector) first so React DevTools can attach. Some visual DevTools versions show compiler memoization badges, but profiler evidence is the stable signal.
122
+
123
+ ## Incremental Adoption
124
+
125
+ You can incrementally adopt React Compiler using two strategies:
126
+
127
+ ### Strategy 1: Limit to Specific Directories
128
+
129
+ Configure the Babel plugin to only run on specific files, e.g. `src/path/to/dir` in the following examples:
130
+
131
+ **Expo** (create `babel.config.js` with `npx expo customize babel.config.js`):
132
+
133
+ ```javascript
134
+ // babel.config.js
135
+ module.exports = function (api) {
136
+ api.cache(true);
137
+ return {
138
+ presets: [
139
+ [
140
+ 'babel-preset-expo',
141
+ {
142
+ 'react-compiler': {
143
+ sources: (filename) => {
144
+ return filename.includes('src/path/to/dir');
145
+ },
146
+ },
147
+ },
148
+ ],
149
+ ],
150
+ };
151
+ };
152
+ ```
153
+
154
+ **React Native (without Expo)**:
155
+
156
+ ```javascript
157
+ // babel.config.js
158
+ const ReactCompilerConfig = {
159
+ target: '19',
160
+ sources: (filename) => {
161
+ return filename.includes('src/path/to/dir');
162
+ },
163
+ };
164
+
165
+ module.exports = function (api) {
166
+ api.cache(true);
167
+ return {
168
+ presets: ['module:@react-native/babel-preset'],
169
+ plugins: [['babel-plugin-react-compiler', ReactCompilerConfig]],
170
+ };
171
+ };
172
+ ```
173
+
174
+ After changing Babel config, restart Metro with a cleared cache.
175
+
176
+ ### Strategy 2: Opt Out Specific Components
177
+
178
+ Use the `"use no memo"` directive to skip optimization for specific components or files:
179
+
180
+ ```jsx
181
+ function ProblematicComponent() {
182
+ 'use no memo';
183
+
184
+ return <Text>Will not be optimized</Text>;
185
+ }
186
+ ```
187
+
188
+ This is useful for temporarily opting out components that cause issues. Fix the underlying problem and remove the directive once resolved.
189
+
190
+ ## Code Examples
191
+
192
+ ### React Compiler Playground
193
+
194
+ Test transformations at [React Playground](https://playground.react.dev/).
195
+
196
+ ### What Gets Optimized
197
+
198
+ ```jsx
199
+ // Components - auto-memoized
200
+ const Button = ({ onPress, label }) => (
201
+ <Pressable onPress={onPress}>
202
+ <Text>{label}</Text>
203
+ </Pressable>
204
+ );
205
+
206
+ // Callbacks - auto-cached (no useCallback needed)
207
+ const handlePress = () => {
208
+ console.log('pressed');
209
+ };
210
+
211
+ // Expensive computations - auto-cached (no useMemo needed)
212
+ const filtered = items.filter((item) => item.active);
213
+ ```
214
+
215
+ ### What Breaks Compilation
216
+
217
+ ```jsx
218
+ // BAD: Mutating props
219
+ const BadComponent = ({ items }) => {
220
+ items.push('new item'); // Mutation!
221
+ return <List data={items} />;
222
+ };
223
+
224
+ // BAD: Mutating during render
225
+ const BadMutation = () => {
226
+ const [items, setItems] = useState([]);
227
+ items.push('new'); // Mutation during render!
228
+ return <List data={items} />;
229
+ };
230
+
231
+ // BAD: Non-idempotent render
232
+ let counter = 0;
233
+ const BadRender = () => {
234
+ counter++; // Side effect during render!
235
+ return <Text>{counter}</Text>;
236
+ };
237
+ ```
238
+
239
+ ## Should You Remove Manual Memoization?
240
+
241
+ Improvements are primarily automatic. You can remove instances of `useCallback`, `useMemo`, and `React.memo` in favor of automatic memoization once the compiler is working correctly in your project.
242
+
243
+ **Note**: Class components will not be optimized. Migrate to function components for full benefits.
244
+
245
+ Expo's implementation only runs on application code (not node_modules), and only when bundling for the client (disabled in server rendering).
246
+
247
+ ## Expected Performance Improvements
248
+
249
+ Expect the largest wins in components that currently rely on manual memoization discipline or have cascading re-renders. Already well-memoized code may show little change; keep the compiler only when profiling or maintenance cost justifies it.
250
+
251
+ ## Common Pitfalls
252
+
253
+ - **Not fixing ESLint errors first**: When ESLint reports an error, the compiler skips that component—this is safe but means you miss optimization
254
+ - **Expecting it to fix bad patterns**: Compiler optimizes good code, doesn't fix bad code
255
+ - **Forgetting shallow comparison**: Like `memo`, compiler uses shallow comparison for objects/arrays
256
+ - **Not running healthcheck**: Always run `npx react-compiler-healthcheck@latest` before enabling
257
+
258
+ ## Related Skills
259
+
260
+ - [js-profile-react.md](./js-profile-react.md) - Verify optimization impact
261
+ - [js-atomic-state.md](./js-atomic-state.md) - Alternative for state-related re-renders
@@ -0,0 +1,219 @@
1
+ ---
2
+ title: Uncontrolled Components
3
+ impact: HIGH
4
+ tags: textinput, forms, controlled, uncontrolled
5
+ ---
6
+
7
+ # Skill: Uncontrolled Components
8
+
9
+ Fix TextInput synchronization and flickering issues by using the uncontrolled component pattern where React does not need to own every keystroke.
10
+
11
+ ## Quick Pattern
12
+
13
+ **Before (controlled - may flicker on legacy arch):**
14
+
15
+ ```jsx
16
+ <TextInput value={text} onChangeText={setText} />
17
+ ```
18
+
19
+ **After (uncontrolled - native owns state):**
20
+
21
+ ```jsx
22
+ <TextInput defaultValue={text} onChangeText={setText} />
23
+ ```
24
+
25
+ ## When to Use
26
+
27
+ - TextInput flickers or shows wrong characters during fast typing
28
+ - Text input lags behind user input on low-end devices
29
+ - Using legacy (non-New Architecture) React Native
30
+ - Need maximum input responsiveness
31
+ - React does not need to transform, mask, validate, or own the value on every keystroke
32
+
33
+ ## Prerequisites
34
+
35
+ - Understanding of React controlled vs uncontrolled components
36
+ - TextInput component in use
37
+
38
+ ## Problem Description
39
+
40
+ ![Controlled TextInput Ping-Pong Communication](images/controlled-textinput-pingpong.png)
41
+
42
+ The diagram shows what happens when typing "TEST" with a controlled `TextInput`:
43
+
44
+ 1. User types "T" → `onChangeText('T')` fires
45
+ 2. React calls `setValue('T')` → native updates to "T"
46
+ 3. User types "E" → `onChangeText('TE')` fires
47
+ 4. React calls `setValue('TE')` → native updates to "TE"
48
+ 5. ...continues for each character
49
+
50
+ **The problem**: Each character requires a round-trip between native and JavaScript. On legacy architecture, if React state update is slow, native may show intermediate states (flicker).
51
+
52
+ **New Architecture note:** This issue is largely resolved in New Architecture, but uncontrolled pattern still provides best performance.
53
+
54
+ Use uncontrolled TextInput primarily as a responsiveness or legacy-architecture escape hatch. Keep controlled inputs when React must transform, mask, validate, or own the value on every keystroke.
55
+
56
+ ## Step-by-Step Instructions
57
+
58
+ ### 1. Identify Controlled TextInput
59
+
60
+ ```jsx
61
+ // Controlled - value prop syncs state to native
62
+ const ControlledInput = () => {
63
+ const [value, setValue] = useState('');
64
+
65
+ return (
66
+ <TextInput
67
+ value={value} // This causes sync issues
68
+ onChangeText={setValue}
69
+ />
70
+ );
71
+ };
72
+ ```
73
+
74
+ ### 2. Convert to Uncontrolled
75
+
76
+ Remove the `value` prop to make it uncontrolled:
77
+
78
+ ```jsx
79
+ // Uncontrolled - native owns the state
80
+ const UncontrolledInput = () => {
81
+ const [value, setValue] = useState('');
82
+
83
+ return (
84
+ <TextInput
85
+ defaultValue={value} // Only sets initial value
86
+ onChangeText={setValue} // Still updates React state
87
+ />
88
+ );
89
+ };
90
+ ```
91
+
92
+ ### 3. Use Ref for Programmatic Control
93
+
94
+ If you need to read/set value programmatically:
95
+
96
+ ```jsx
97
+ const UncontrolledWithRef = () => {
98
+ const inputRef = useRef(null);
99
+
100
+ const clearInput = () => {
101
+ inputRef.current?.clear();
102
+ };
103
+
104
+ const getValue = () => {
105
+ // Use onChangeText to track value, or native methods
106
+ };
107
+
108
+ return (
109
+ <TextInput
110
+ ref={inputRef}
111
+ defaultValue=""
112
+ onChangeText={(text) => console.log('Current:', text)}
113
+ />
114
+ );
115
+ };
116
+ ```
117
+
118
+ ## Code Examples
119
+
120
+ ### Full Migration Example
121
+
122
+ **Before (Controlled):**
123
+
124
+ ```jsx
125
+ const SearchInput = () => {
126
+ const [query, setQuery] = useState('');
127
+ const [results, setResults] = useState([]);
128
+
129
+ const handleChange = (text) => {
130
+ setQuery(text);
131
+ fetchResults(text).then(setResults);
132
+ };
133
+
134
+ return (
135
+ <View>
136
+ <TextInput
137
+ value={query} // Remove this
138
+ onChangeText={handleChange}
139
+ placeholder="Search..."
140
+ />
141
+ <ResultsList data={results} />
142
+ </View>
143
+ );
144
+ };
145
+ ```
146
+
147
+ **After (Uncontrolled):**
148
+
149
+ ```jsx
150
+ const SearchInput = () => {
151
+ const [query, setQuery] = useState('');
152
+ const [results, setResults] = useState([]);
153
+
154
+ const handleChange = (text) => {
155
+ setQuery(text);
156
+ fetchResults(text).then(setResults);
157
+ };
158
+
159
+ return (
160
+ <View>
161
+ <TextInput
162
+ defaultValue="" // Initial value only
163
+ onChangeText={handleChange}
164
+ placeholder="Search..."
165
+ />
166
+ <ResultsList data={results} />
167
+ </View>
168
+ );
169
+ };
170
+ ```
171
+
172
+ ### When You Need Value Control
173
+
174
+ For input masking or validation that modifies input:
175
+
176
+ ```jsx
177
+ // Option 1: Accept the controlled behavior (may flicker)
178
+ const MaskedInput = () => {
179
+ const [value, setValue] = useState('');
180
+
181
+ const handleChange = (text) => {
182
+ // Phone mask: (123) 456-7890
183
+ const masked = maskPhone(text);
184
+ setValue(masked);
185
+ };
186
+
187
+ return (
188
+ <TextInput
189
+ value={value} // Necessary for masking
190
+ onChangeText={handleChange}
191
+ />
192
+ );
193
+ };
194
+
195
+ // Option 2: Use a native masked input library
196
+ // react-native-masked-text handles this natively
197
+ ```
198
+
199
+ ## Decision Matrix
200
+
201
+ | Scenario | Recommendation |
202
+ |----------|---------------|
203
+ | Simple text input | Uncontrolled |
204
+ | Search/filter input | Uncontrolled |
205
+ | Form with validation on submit | Uncontrolled |
206
+ | Input masking (phone, credit card) | Controlled or native library |
207
+ | Character-by-character validation | Controlled |
208
+ | New Architecture app | Either works well |
209
+
210
+ ## Common Pitfalls
211
+
212
+ - **Forgetting `defaultValue`**: Without it, input starts empty
213
+ - **Trying to clear with state**: Use `ref.current.clear()` instead
214
+ - **Mixing patterns**: Don't use both `value` and `defaultValue`
215
+
216
+ ## Related Skills
217
+
218
+ - [js-profile-react.md](./js-profile-react.md) - Profile input performance
219
+ - [js-concurrent-react.md](./js-concurrent-react.md) - Defer expensive search operations
@@ -0,0 +1,114 @@
1
+ ---
2
+ title: Android 16 KB Page Size Alignment
3
+ impact: CRITICAL
4
+ tags: android, native, 16kb, alignment, page-size, google-play, third-party
5
+ ---
6
+
7
+ # Android 16 KB page size alignment
8
+
9
+ ---
10
+
11
+ ## Quick Reference
12
+
13
+ | Item | Details |
14
+ | ---------------------- | ---------------------------------------------------- |
15
+ | Google Play requirement | Apps and updates targeting Android 15+ must support 16 KB page sizes on 64-bit devices |
16
+ | React Native support | RN 0.79+ includes aligned RN-provided native binaries; still verify third-party `.so` files |
17
+ | What to check | Third-party native libraries (`.so` files) |
18
+ | Official documentation | [developer.android.com/guide/practices/page-sizes][] |
19
+
20
+ [developer.android.com/guide/practices/page-sizes]: https://developer.android.com/guide/practices/page-sizes
21
+
22
+ ---
23
+
24
+ ## Quick Command
25
+
26
+ Verify generated APK alignment using Android's official `zipalign` tool:
27
+
28
+ ```bash
29
+ zipalign -c -P 16 -v 4 app-release.apk
30
+ ```
31
+
32
+ If any 64-bit libraries (`arm64-v8a`, `x86_64`) show misalignment, they need updating.
33
+
34
+ For deeper ELF-level inspection, use Android's [check_elf_alignment.sh][] script.
35
+
36
+ [check_elf_alignment.sh]: https://cs.android.com/android/platform/superproject/main/+/main:system/extras/tools/check_elf_alignment.sh
37
+
38
+ ---
39
+
40
+ ## When to Check
41
+
42
+ React Native 0.79+ builds core binaries with correct alignment. However, **third-party
43
+ native libraries** may still be misaligned. Check alignment when:
44
+
45
+ * Adding or updating SDKs with native code
46
+ * Preparing a release for Google Play
47
+ * Investigating crashes on Android 15+ devices with 16 KB page size
48
+
49
+ ---
50
+
51
+ ## CI Integration
52
+
53
+ Add alignment checks to your release pipeline after producing release APKs. If you ship AABs, generate device APKs with your normal release tooling or `bundletool`, then run `zipalign` on those APKs:
54
+
55
+ ```bash
56
+ zipalign -c -P 16 -v 4 app-release.apk 2>&1 | tee alignment.log
57
+ if grep -q "Verification FAILED" alignment.log; then exit 1; fi
58
+ ```
59
+
60
+ ## Step-by-Step
61
+
62
+ 1. Build your release artifact
63
+ 2. Generate or locate the release APK(s)
64
+ 3. Run `zipalign` verification (see Quick Command)
65
+ 4. If misaligned libraries are found, trace them to source packages (see below)
66
+ 5. Update, replace, or remove the affected dependencies
67
+
68
+ For runtime testing, use the [16KB Android Emulator image][] or enable
69
+ "Boot with 16KB page size" on Pixel 8/8a/9 devices.
70
+
71
+ [16KB Android Emulator image]: https://developer.android.com/guide/practices/page-sizes#set-up-the-android-emulator-with-a-16-kb-based-system-image
72
+
73
+ ---
74
+
75
+ ## Tracing Misaligned Libraries
76
+
77
+ When `zipalign` reports a misaligned library like `libfoo.so`, find its source package:
78
+
79
+ ```bash
80
+ # Find the .so file in node_modules
81
+ find node_modules -name "libfoo.so" 2>/dev/null
82
+
83
+ # Or search gradle files for references
84
+ grep -r "foo" node_modules/*/android --include="*.gradle" 2>/dev/null
85
+ ```
86
+
87
+ Once identified, update the dependency or contact the vendor for a 16KB-compatible build.
88
+
89
+ ---
90
+
91
+ ## Common Pitfalls
92
+
93
+ * Waiting for Play Store rejection instead of checking in CI
94
+ * Assuming a React Native upgrade rebuilds third-party native binaries
95
+ * Only checking 32-bit ABIs (`armeabi-v7a`, `x86`) — these are not affected
96
+ * Using `zipalign` without the `-P 16` flag (checks 4 KB, not 16 KB)
97
+ * Validating only debug builds
98
+
99
+ ---
100
+
101
+ ## Fixing Alignment Issues
102
+
103
+ Alignment issues require **rebuilding** the native library with a compatible toolchain.
104
+ Repackaging alone does not fix them.
105
+
106
+ See [official remediation steps][] for detailed guidance.
107
+
108
+ [official remediation steps]: https://developer.android.com/guide/practices/page-sizes#build-app-16kb
109
+
110
+ ---
111
+
112
+ ## Related Skills
113
+
114
+ * [native-profiling.md](./native-profiling.md) — Native debugging tools