@askrjs/cli 0.0.2

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 (460) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +140 -0
  3. package/dist/add-DqhqRzBQ.js +555 -0
  4. package/dist/add-DqhqRzBQ.js.map +1 -0
  5. package/dist/add.js +3 -0
  6. package/dist/cli.js +91 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/create.js +923 -0
  9. package/dist/create.js.map +1 -0
  10. package/dist/is-direct-execution-Cdlr-ZUl.js +20 -0
  11. package/dist/is-direct-execution-Cdlr-ZUl.js.map +1 -0
  12. package/dist/openapi.js +127 -0
  13. package/dist/openapi.js.map +1 -0
  14. package/dist/skills/askr-accessibility/SKILL.md +68 -0
  15. package/dist/skills/askr-accessibility/agents/openai.yaml +4 -0
  16. package/dist/skills/askr-agent-execution/SKILL.md +85 -0
  17. package/dist/skills/askr-agent-execution/agents/openai.yaml +4 -0
  18. package/dist/skills/askr-agent-workflows/SKILL.md +57 -0
  19. package/dist/skills/askr-agent-workflows/agents/openai.yaml +4 -0
  20. package/dist/skills/askr-api-integration/SKILL.md +79 -0
  21. package/dist/skills/askr-api-integration/agents/openai.yaml +4 -0
  22. package/dist/skills/askr-app-builder/SKILL.md +99 -0
  23. package/dist/skills/askr-app-builder/agents/openai.yaml +4 -0
  24. package/dist/skills/askr-auth-access/SKILL.md +74 -0
  25. package/dist/skills/askr-auth-access/agents/openai.yaml +4 -0
  26. package/dist/skills/askr-cli-vite/SKILL.md +76 -0
  27. package/dist/skills/askr-cli-vite/agents/openai.yaml +4 -0
  28. package/dist/skills/askr-dashboard-charts/SKILL.md +82 -0
  29. package/dist/skills/askr-dashboard-charts/agents/openai.yaml +4 -0
  30. package/dist/skills/askr-design-system/SKILL.md +86 -0
  31. package/dist/skills/askr-design-system/agents/openai.yaml +4 -0
  32. package/dist/skills/askr-env-config/SKILL.md +74 -0
  33. package/dist/skills/askr-env-config/agents/openai.yaml +4 -0
  34. package/dist/skills/askr-error-loading-empty/SKILL.md +89 -0
  35. package/dist/skills/askr-error-loading-empty/agents/openai.yaml +4 -0
  36. package/dist/skills/askr-file-upload-artifacts/SKILL.md +77 -0
  37. package/dist/skills/askr-file-upload-artifacts/agents/openai.yaml +4 -0
  38. package/dist/skills/askr-forms-tables-crud/SKILL.md +98 -0
  39. package/dist/skills/askr-forms-tables-crud/agents/openai.yaml +4 -0
  40. package/dist/skills/askr-mental-model/SKILL.md +109 -0
  41. package/dist/skills/askr-mental-model/agents/openai.yaml +4 -0
  42. package/dist/skills/askr-migration-react/SKILL.md +81 -0
  43. package/dist/skills/askr-migration-react/agents/openai.yaml +4 -0
  44. package/dist/skills/askr-observability-debugging/SKILL.md +83 -0
  45. package/dist/skills/askr-observability-debugging/agents/openai.yaml +4 -0
  46. package/dist/skills/askr-project-structure/SKILL.md +79 -0
  47. package/dist/skills/askr-project-structure/agents/openai.yaml +4 -0
  48. package/dist/skills/askr-query-mutation/SKILL.md +115 -0
  49. package/dist/skills/askr-query-mutation/agents/openai.yaml +4 -0
  50. package/dist/skills/askr-realtime-streaming/SKILL.md +76 -0
  51. package/dist/skills/askr-realtime-streaming/agents/openai.yaml +4 -0
  52. package/dist/skills/askr-resources-data/SKILL.md +100 -0
  53. package/dist/skills/askr-resources-data/agents/openai.yaml +4 -0
  54. package/dist/skills/askr-routing-layouts/SKILL.md +107 -0
  55. package/dist/skills/askr-routing-layouts/agents/openai.yaml +4 -0
  56. package/dist/skills/askr-runtime-reactivity/SKILL.md +92 -0
  57. package/dist/skills/askr-runtime-reactivity/agents/openai.yaml +4 -0
  58. package/dist/skills/askr-ssr-ssg/SKILL.md +76 -0
  59. package/dist/skills/askr-ssr-ssg/agents/openai.yaml +4 -0
  60. package/dist/skills/askr-testing-determinism/SKILL.md +75 -0
  61. package/dist/skills/askr-testing-determinism/agents/openai.yaml +4 -0
  62. package/dist/skills/askr-theming/SKILL.md +86 -0
  63. package/dist/skills/askr-theming/agents/openai.yaml +4 -0
  64. package/dist/skills/askr-ui-composition/SKILL.md +92 -0
  65. package/dist/skills/askr-ui-composition/agents/openai.yaml +4 -0
  66. package/dist/skills-Bh0mEhIx.js +682 -0
  67. package/dist/skills-Bh0mEhIx.js.map +1 -0
  68. package/dist/skills.js +3 -0
  69. package/dist/ssg.js +188 -0
  70. package/dist/ssg.js.map +1 -0
  71. package/dist/templates/full-stack/AGENTS.md +12 -0
  72. package/dist/templates/full-stack/README.md +18 -0
  73. package/dist/templates/full-stack/gitignore.template +4 -0
  74. package/dist/templates/full-stack/index.html +14 -0
  75. package/dist/templates/full-stack/package.json +37 -0
  76. package/dist/templates/full-stack/server.ts +13 -0
  77. package/dist/templates/full-stack/src/action-authorizations.ts +10 -0
  78. package/dist/templates/full-stack/src/actions/create-message.ts +10 -0
  79. package/dist/templates/full-stack/src/i18n.ts +8 -0
  80. package/dist/templates/full-stack/src/main.tsx +12 -0
  81. package/dist/templates/full-stack/src/pages/home.tsx +25 -0
  82. package/dist/templates/full-stack/src/pages/layout.tsx +33 -0
  83. package/dist/templates/full-stack/src/pages/not-found.tsx +4 -0
  84. package/dist/templates/full-stack/src/routes.tsx +20 -0
  85. package/dist/templates/full-stack/src/schemas.ts +11 -0
  86. package/dist/templates/full-stack/src/server/action-registry.ts +12 -0
  87. package/dist/templates/full-stack/src/server/actions/create-message.ts +14 -0
  88. package/dist/templates/full-stack/src/server/app.ts +66 -0
  89. package/dist/templates/full-stack/src/server/dependencies.ts +55 -0
  90. package/dist/templates/full-stack/src/server/entry-server.ts +8 -0
  91. package/dist/templates/full-stack/src/telemetry.ts +4 -0
  92. package/dist/templates/full-stack/src/vite-server.d.ts +6 -0
  93. package/dist/templates/full-stack/tests/actions/create-message.test.ts +13 -0
  94. package/dist/templates/full-stack/tsconfig.json +16 -0
  95. package/dist/templates/full-stack/vite.config.ts +11 -0
  96. package/dist/templates/spa/AGENTS.md +60 -0
  97. package/dist/templates/spa/README.md +96 -0
  98. package/dist/templates/spa/gitignore.template +16 -0
  99. package/dist/templates/spa/index.html +13 -0
  100. package/dist/templates/spa/package.json +35 -0
  101. package/dist/templates/spa/src/adapters/operations-client.ts +90 -0
  102. package/dist/templates/spa/src/components/shared/metric-card.tsx +27 -0
  103. package/dist/templates/spa/src/components/shared/status-badge.tsx +24 -0
  104. package/dist/templates/spa/src/features/operations/operations.query.ts +9 -0
  105. package/dist/templates/spa/src/main.tsx +10 -0
  106. package/dist/templates/spa/src/pages/_layout.tsx +9 -0
  107. package/dist/templates/spa/src/pages/_routes.tsx +27 -0
  108. package/dist/templates/spa/src/pages/app/_layout.tsx +94 -0
  109. package/dist/templates/spa/src/pages/app/_routes.tsx +10 -0
  110. package/dist/templates/spa/src/pages/app/admin-home.tsx +152 -0
  111. package/dist/templates/spa/src/pages/app/agent-runs.tsx +93 -0
  112. package/dist/templates/spa/src/pages/app/settings.tsx +91 -0
  113. package/dist/templates/spa/src/pages/auth/_layout.tsx +38 -0
  114. package/dist/templates/spa/src/pages/auth/_routes.tsx +6 -0
  115. package/dist/templates/spa/src/pages/auth/login.tsx +63 -0
  116. package/dist/templates/spa/src/pages/not-found.tsx +22 -0
  117. package/dist/templates/spa/src/pages/public/_layout.tsx +47 -0
  118. package/dist/templates/spa/src/pages/public/_routes.tsx +6 -0
  119. package/dist/templates/spa/src/pages/public/home.tsx +143 -0
  120. package/dist/templates/spa/src/shared/format.ts +12 -0
  121. package/dist/templates/spa/src/shared/navigation.ts +15 -0
  122. package/dist/templates/spa/src/styles/components.css +49 -0
  123. package/dist/templates/spa/src/styles/layout.css +192 -0
  124. package/dist/templates/spa/src/styles/reset.css +44 -0
  125. package/dist/templates/spa/src/styles/theme.css +57 -0
  126. package/dist/templates/spa/src/styles/tokens.css +20 -0
  127. package/dist/templates/spa/src/styles.css +7 -0
  128. package/dist/templates/spa/src/styles.d.ts +1 -0
  129. package/dist/templates/spa/tests/app.test.tsx +37 -0
  130. package/dist/templates/spa/tests/components/shared.test.tsx +12 -0
  131. package/dist/templates/spa/tests/resources.test.ts +22 -0
  132. package/dist/templates/spa/tsconfig.json +20 -0
  133. package/dist/templates/spa/tsconfig.node.json +10 -0
  134. package/dist/templates/spa/vite.config.ts +24 -0
  135. package/dist/templates/spa/vitest.config.ts +17 -0
  136. package/dist/templates/ssg/AGENTS.md +55 -0
  137. package/dist/templates/ssg/README.md +39 -0
  138. package/dist/templates/ssg/gitignore.template +17 -0
  139. package/dist/templates/ssg/index.html +13 -0
  140. package/dist/templates/ssg/package.json +35 -0
  141. package/dist/templates/ssg/src/app.tsx +14 -0
  142. package/dist/templates/ssg/src/components/badge.tsx +3 -0
  143. package/dist/templates/ssg/src/components/counter.tsx +30 -0
  144. package/dist/templates/ssg/src/components/site-shell.tsx +111 -0
  145. package/dist/templates/ssg/src/jsx.d.ts +23 -0
  146. package/dist/templates/ssg/src/main.tsx +8 -0
  147. package/dist/templates/ssg/src/pages/about.tsx +82 -0
  148. package/dist/templates/ssg/src/pages/content.tsx +63 -0
  149. package/dist/templates/ssg/src/pages/example.tsx +97 -0
  150. package/dist/templates/ssg/src/pages/home.tsx +51 -0
  151. package/dist/templates/ssg/src/resources/user.ts +15 -0
  152. package/dist/templates/ssg/src/routes.tsx +15 -0
  153. package/dist/templates/ssg/src/styles.css +89 -0
  154. package/dist/templates/ssg/src/vite-env.d.ts +5 -0
  155. package/dist/templates/ssg/ssg.config.ts +34 -0
  156. package/dist/templates/ssg/tests/app.test.tsx +19 -0
  157. package/dist/templates/ssg/tests/components/counter.test.tsx +18 -0
  158. package/dist/templates/ssg/tests/resources.test.ts +11 -0
  159. package/dist/templates/ssg/tests/ssg-config.test.ts +11 -0
  160. package/dist/templates/ssg/tsconfig.json +20 -0
  161. package/dist/templates/ssg/tsconfig.node.json +10 -0
  162. package/dist/templates/ssg/vite.config.ts +24 -0
  163. package/dist/templates/ssg/vitest.config.ts +17 -0
  164. package/dist/templates/ssr/AGENTS.md +28 -0
  165. package/dist/templates/ssr/README.md +38 -0
  166. package/dist/templates/ssr/gitignore.template +16 -0
  167. package/dist/templates/ssr/index.html +13 -0
  168. package/dist/templates/ssr/package.json +34 -0
  169. package/dist/templates/ssr/server.ts +16 -0
  170. package/dist/templates/ssr/src/app.tsx +21 -0
  171. package/dist/templates/ssr/src/components/counter.tsx +26 -0
  172. package/dist/templates/ssr/src/entry-server.tsx +10 -0
  173. package/dist/templates/ssr/src/main.tsx +11 -0
  174. package/dist/templates/ssr/src/pages/about.tsx +75 -0
  175. package/dist/templates/ssr/src/pages/example.tsx +113 -0
  176. package/dist/templates/ssr/src/pages/home.tsx +56 -0
  177. package/dist/templates/ssr/src/resources/user.ts +15 -0
  178. package/dist/templates/ssr/src/routes.tsx +13 -0
  179. package/dist/templates/ssr/src/styles.css +148 -0
  180. package/dist/templates/ssr/src/vite-server.d.ts +7 -0
  181. package/dist/templates/ssr/tests/app.test.tsx +24 -0
  182. package/dist/templates/ssr/tests/components/counter.test.tsx +13 -0
  183. package/dist/templates/ssr/tests/resources.test.ts +11 -0
  184. package/dist/templates/ssr/tsconfig.json +22 -0
  185. package/dist/templates/ssr/tsconfig.node.json +10 -0
  186. package/dist/templates/ssr/tsconfig.server.json +15 -0
  187. package/dist/templates/ssr/vite.config.ts +25 -0
  188. package/dist/templates/ssr/vitest.config.ts +13 -0
  189. package/dist/templates/startkit/AGENTS.md +77 -0
  190. package/dist/templates/startkit/README.md +192 -0
  191. package/dist/templates/startkit/gitignore.template +16 -0
  192. package/dist/templates/startkit/index.html +13 -0
  193. package/dist/templates/startkit/package.json +35 -0
  194. package/dist/templates/startkit/src/components/app-header.tsx +93 -0
  195. package/dist/templates/startkit/src/components/app-sidebar.tsx +95 -0
  196. package/dist/templates/startkit/src/components/data-table.tsx +80 -0
  197. package/dist/templates/startkit/src/components/empty-state.tsx +13 -0
  198. package/dist/templates/startkit/src/components/page-header.tsx +23 -0
  199. package/dist/templates/startkit/src/components/stat-card.tsx +24 -0
  200. package/dist/templates/startkit/src/features/accounts/account-filters.tsx +61 -0
  201. package/dist/templates/startkit/src/features/accounts/account-table.tsx +79 -0
  202. package/dist/templates/startkit/src/lib/format.ts +31 -0
  203. package/dist/templates/startkit/src/lib/mock-data.ts +441 -0
  204. package/dist/templates/startkit/src/lib/routes.ts +116 -0
  205. package/dist/templates/startkit/src/main.tsx +12 -0
  206. package/dist/templates/startkit/src/pages/_layout.tsx +56 -0
  207. package/dist/templates/startkit/src/pages/auth/_layout.tsx +7 -0
  208. package/dist/templates/startkit/src/pages/auth/login.tsx +129 -0
  209. package/dist/templates/startkit/src/pages/home.tsx +83 -0
  210. package/dist/templates/startkit/src/pages/not-found.tsx +24 -0
  211. package/dist/templates/startkit/src/pages/workspace/_layout.tsx +17 -0
  212. package/dist/templates/startkit/src/pages/workspace/accounts/index.tsx +217 -0
  213. package/dist/templates/startkit/src/pages/workspace/dashboard.tsx +118 -0
  214. package/dist/templates/startkit/src/pages/workspace/settings.tsx +218 -0
  215. package/dist/templates/startkit/src/router.tsx +7 -0
  216. package/dist/templates/startkit/src/routes/auth-config.ts +38 -0
  217. package/dist/templates/startkit/src/routes/auth.ts +8 -0
  218. package/dist/templates/startkit/src/routes/index.ts +28 -0
  219. package/dist/templates/startkit/src/routes/public.ts +8 -0
  220. package/dist/templates/startkit/src/routes/workspace/accounts.ts +8 -0
  221. package/dist/templates/startkit/src/routes/workspace/index.ts +14 -0
  222. package/dist/templates/startkit/src/styles/components.css +396 -0
  223. package/dist/templates/startkit/src/styles/layout.css +192 -0
  224. package/dist/templates/startkit/src/styles/reset.css +38 -0
  225. package/dist/templates/startkit/src/styles/theme.css +76 -0
  226. package/dist/templates/startkit/src/styles/tokens.css +67 -0
  227. package/dist/templates/startkit/src/styles.css +7 -0
  228. package/dist/templates/startkit/src/toast.ts +55 -0
  229. package/dist/templates/startkit/src/utils/join-classes.ts +4 -0
  230. package/dist/templates/startkit/src/vite-env.d.ts +5 -0
  231. package/dist/templates/startkit/tests/app.test.tsx +32 -0
  232. package/dist/templates/startkit/tests/preferences.test.ts +43 -0
  233. package/dist/templates/startkit/tests/resources.test.ts +82 -0
  234. package/dist/templates/startkit/tsconfig.json +20 -0
  235. package/dist/templates/startkit/tsconfig.node.json +10 -0
  236. package/dist/templates/startkit/vite.config.ts +32 -0
  237. package/dist/templates/startkit/vitest.config.ts +13 -0
  238. package/dist/update-DyW1na5V.js +1140 -0
  239. package/dist/update-DyW1na5V.js.map +1 -0
  240. package/dist/update.js +3 -0
  241. package/package.json +84 -0
  242. package/skills/askr-accessibility/SKILL.md +68 -0
  243. package/skills/askr-accessibility/agents/openai.yaml +4 -0
  244. package/skills/askr-agent-execution/SKILL.md +85 -0
  245. package/skills/askr-agent-execution/agents/openai.yaml +4 -0
  246. package/skills/askr-agent-workflows/SKILL.md +57 -0
  247. package/skills/askr-agent-workflows/agents/openai.yaml +4 -0
  248. package/skills/askr-api-integration/SKILL.md +79 -0
  249. package/skills/askr-api-integration/agents/openai.yaml +4 -0
  250. package/skills/askr-app-builder/SKILL.md +99 -0
  251. package/skills/askr-app-builder/agents/openai.yaml +4 -0
  252. package/skills/askr-auth-access/SKILL.md +74 -0
  253. package/skills/askr-auth-access/agents/openai.yaml +4 -0
  254. package/skills/askr-cli-vite/SKILL.md +76 -0
  255. package/skills/askr-cli-vite/agents/openai.yaml +4 -0
  256. package/skills/askr-dashboard-charts/SKILL.md +82 -0
  257. package/skills/askr-dashboard-charts/agents/openai.yaml +4 -0
  258. package/skills/askr-design-system/SKILL.md +86 -0
  259. package/skills/askr-design-system/agents/openai.yaml +4 -0
  260. package/skills/askr-env-config/SKILL.md +74 -0
  261. package/skills/askr-env-config/agents/openai.yaml +4 -0
  262. package/skills/askr-error-loading-empty/SKILL.md +89 -0
  263. package/skills/askr-error-loading-empty/agents/openai.yaml +4 -0
  264. package/skills/askr-file-upload-artifacts/SKILL.md +77 -0
  265. package/skills/askr-file-upload-artifacts/agents/openai.yaml +4 -0
  266. package/skills/askr-forms-tables-crud/SKILL.md +98 -0
  267. package/skills/askr-forms-tables-crud/agents/openai.yaml +4 -0
  268. package/skills/askr-mental-model/SKILL.md +109 -0
  269. package/skills/askr-mental-model/agents/openai.yaml +4 -0
  270. package/skills/askr-migration-react/SKILL.md +81 -0
  271. package/skills/askr-migration-react/agents/openai.yaml +4 -0
  272. package/skills/askr-observability-debugging/SKILL.md +83 -0
  273. package/skills/askr-observability-debugging/agents/openai.yaml +4 -0
  274. package/skills/askr-project-structure/SKILL.md +79 -0
  275. package/skills/askr-project-structure/agents/openai.yaml +4 -0
  276. package/skills/askr-query-mutation/SKILL.md +115 -0
  277. package/skills/askr-query-mutation/agents/openai.yaml +4 -0
  278. package/skills/askr-realtime-streaming/SKILL.md +76 -0
  279. package/skills/askr-realtime-streaming/agents/openai.yaml +4 -0
  280. package/skills/askr-resources-data/SKILL.md +100 -0
  281. package/skills/askr-resources-data/agents/openai.yaml +4 -0
  282. package/skills/askr-routing-layouts/SKILL.md +107 -0
  283. package/skills/askr-routing-layouts/agents/openai.yaml +4 -0
  284. package/skills/askr-runtime-reactivity/SKILL.md +92 -0
  285. package/skills/askr-runtime-reactivity/agents/openai.yaml +4 -0
  286. package/skills/askr-ssr-ssg/SKILL.md +76 -0
  287. package/skills/askr-ssr-ssg/agents/openai.yaml +4 -0
  288. package/skills/askr-testing-determinism/SKILL.md +75 -0
  289. package/skills/askr-testing-determinism/agents/openai.yaml +4 -0
  290. package/skills/askr-theming/SKILL.md +86 -0
  291. package/skills/askr-theming/agents/openai.yaml +4 -0
  292. package/skills/askr-ui-composition/SKILL.md +92 -0
  293. package/skills/askr-ui-composition/agents/openai.yaml +4 -0
  294. package/templates/full-stack/AGENTS.md +12 -0
  295. package/templates/full-stack/README.md +18 -0
  296. package/templates/full-stack/gitignore.template +4 -0
  297. package/templates/full-stack/index.html +14 -0
  298. package/templates/full-stack/package.json +37 -0
  299. package/templates/full-stack/server.ts +13 -0
  300. package/templates/full-stack/src/action-authorizations.ts +10 -0
  301. package/templates/full-stack/src/actions/create-message.ts +10 -0
  302. package/templates/full-stack/src/i18n.ts +8 -0
  303. package/templates/full-stack/src/main.tsx +12 -0
  304. package/templates/full-stack/src/pages/home.tsx +25 -0
  305. package/templates/full-stack/src/pages/layout.tsx +33 -0
  306. package/templates/full-stack/src/pages/not-found.tsx +4 -0
  307. package/templates/full-stack/src/routes.tsx +20 -0
  308. package/templates/full-stack/src/schemas.ts +11 -0
  309. package/templates/full-stack/src/server/action-registry.ts +12 -0
  310. package/templates/full-stack/src/server/actions/create-message.ts +14 -0
  311. package/templates/full-stack/src/server/app.ts +66 -0
  312. package/templates/full-stack/src/server/dependencies.ts +55 -0
  313. package/templates/full-stack/src/server/entry-server.ts +8 -0
  314. package/templates/full-stack/src/telemetry.ts +4 -0
  315. package/templates/full-stack/src/vite-server.d.ts +6 -0
  316. package/templates/full-stack/tests/actions/create-message.test.ts +13 -0
  317. package/templates/full-stack/tsconfig.json +16 -0
  318. package/templates/full-stack/vite.config.ts +11 -0
  319. package/templates/spa/AGENTS.md +60 -0
  320. package/templates/spa/README.md +96 -0
  321. package/templates/spa/gitignore.template +16 -0
  322. package/templates/spa/index.html +13 -0
  323. package/templates/spa/package.json +35 -0
  324. package/templates/spa/src/adapters/operations-client.ts +90 -0
  325. package/templates/spa/src/components/shared/metric-card.tsx +27 -0
  326. package/templates/spa/src/components/shared/status-badge.tsx +24 -0
  327. package/templates/spa/src/features/operations/operations.query.ts +9 -0
  328. package/templates/spa/src/main.tsx +10 -0
  329. package/templates/spa/src/pages/_layout.tsx +9 -0
  330. package/templates/spa/src/pages/_routes.tsx +27 -0
  331. package/templates/spa/src/pages/app/_layout.tsx +94 -0
  332. package/templates/spa/src/pages/app/_routes.tsx +10 -0
  333. package/templates/spa/src/pages/app/admin-home.tsx +152 -0
  334. package/templates/spa/src/pages/app/agent-runs.tsx +93 -0
  335. package/templates/spa/src/pages/app/settings.tsx +91 -0
  336. package/templates/spa/src/pages/auth/_layout.tsx +38 -0
  337. package/templates/spa/src/pages/auth/_routes.tsx +6 -0
  338. package/templates/spa/src/pages/auth/login.tsx +63 -0
  339. package/templates/spa/src/pages/not-found.tsx +22 -0
  340. package/templates/spa/src/pages/public/_layout.tsx +47 -0
  341. package/templates/spa/src/pages/public/_routes.tsx +6 -0
  342. package/templates/spa/src/pages/public/home.tsx +143 -0
  343. package/templates/spa/src/shared/format.ts +12 -0
  344. package/templates/spa/src/shared/navigation.ts +15 -0
  345. package/templates/spa/src/styles/components.css +49 -0
  346. package/templates/spa/src/styles/layout.css +192 -0
  347. package/templates/spa/src/styles/reset.css +44 -0
  348. package/templates/spa/src/styles/theme.css +57 -0
  349. package/templates/spa/src/styles/tokens.css +20 -0
  350. package/templates/spa/src/styles.css +7 -0
  351. package/templates/spa/src/styles.d.ts +1 -0
  352. package/templates/spa/tests/app.test.tsx +37 -0
  353. package/templates/spa/tests/components/shared.test.tsx +12 -0
  354. package/templates/spa/tests/resources.test.ts +22 -0
  355. package/templates/spa/tsconfig.json +20 -0
  356. package/templates/spa/tsconfig.node.json +10 -0
  357. package/templates/spa/vite.config.ts +24 -0
  358. package/templates/spa/vitest.config.ts +17 -0
  359. package/templates/ssg/AGENTS.md +55 -0
  360. package/templates/ssg/README.md +39 -0
  361. package/templates/ssg/gitignore.template +17 -0
  362. package/templates/ssg/index.html +13 -0
  363. package/templates/ssg/package.json +35 -0
  364. package/templates/ssg/src/app.tsx +14 -0
  365. package/templates/ssg/src/components/badge.tsx +3 -0
  366. package/templates/ssg/src/components/counter.tsx +30 -0
  367. package/templates/ssg/src/components/site-shell.tsx +111 -0
  368. package/templates/ssg/src/jsx.d.ts +23 -0
  369. package/templates/ssg/src/main.tsx +8 -0
  370. package/templates/ssg/src/pages/about.tsx +82 -0
  371. package/templates/ssg/src/pages/content.tsx +63 -0
  372. package/templates/ssg/src/pages/example.tsx +97 -0
  373. package/templates/ssg/src/pages/home.tsx +51 -0
  374. package/templates/ssg/src/resources/user.ts +15 -0
  375. package/templates/ssg/src/routes.tsx +15 -0
  376. package/templates/ssg/src/styles.css +89 -0
  377. package/templates/ssg/src/vite-env.d.ts +5 -0
  378. package/templates/ssg/ssg.config.ts +34 -0
  379. package/templates/ssg/tests/app.test.tsx +19 -0
  380. package/templates/ssg/tests/components/counter.test.tsx +18 -0
  381. package/templates/ssg/tests/resources.test.ts +11 -0
  382. package/templates/ssg/tests/ssg-config.test.ts +11 -0
  383. package/templates/ssg/tsconfig.json +20 -0
  384. package/templates/ssg/tsconfig.node.json +10 -0
  385. package/templates/ssg/vite.config.ts +24 -0
  386. package/templates/ssg/vitest.config.ts +17 -0
  387. package/templates/ssr/AGENTS.md +28 -0
  388. package/templates/ssr/README.md +38 -0
  389. package/templates/ssr/gitignore.template +16 -0
  390. package/templates/ssr/index.html +13 -0
  391. package/templates/ssr/package.json +34 -0
  392. package/templates/ssr/server.ts +16 -0
  393. package/templates/ssr/src/app.tsx +21 -0
  394. package/templates/ssr/src/components/counter.tsx +26 -0
  395. package/templates/ssr/src/entry-server.tsx +10 -0
  396. package/templates/ssr/src/main.tsx +11 -0
  397. package/templates/ssr/src/pages/about.tsx +75 -0
  398. package/templates/ssr/src/pages/example.tsx +113 -0
  399. package/templates/ssr/src/pages/home.tsx +56 -0
  400. package/templates/ssr/src/resources/user.ts +15 -0
  401. package/templates/ssr/src/routes.tsx +13 -0
  402. package/templates/ssr/src/styles.css +148 -0
  403. package/templates/ssr/src/vite-server.d.ts +7 -0
  404. package/templates/ssr/tests/app.test.tsx +24 -0
  405. package/templates/ssr/tests/components/counter.test.tsx +13 -0
  406. package/templates/ssr/tests/resources.test.ts +11 -0
  407. package/templates/ssr/tsconfig.json +22 -0
  408. package/templates/ssr/tsconfig.node.json +10 -0
  409. package/templates/ssr/tsconfig.server.json +15 -0
  410. package/templates/ssr/vite.config.ts +25 -0
  411. package/templates/ssr/vitest.config.ts +13 -0
  412. package/templates/startkit/AGENTS.md +77 -0
  413. package/templates/startkit/README.md +192 -0
  414. package/templates/startkit/gitignore.template +16 -0
  415. package/templates/startkit/index.html +13 -0
  416. package/templates/startkit/package.json +35 -0
  417. package/templates/startkit/src/components/app-header.tsx +93 -0
  418. package/templates/startkit/src/components/app-sidebar.tsx +95 -0
  419. package/templates/startkit/src/components/data-table.tsx +80 -0
  420. package/templates/startkit/src/components/empty-state.tsx +13 -0
  421. package/templates/startkit/src/components/page-header.tsx +23 -0
  422. package/templates/startkit/src/components/stat-card.tsx +24 -0
  423. package/templates/startkit/src/features/accounts/account-filters.tsx +61 -0
  424. package/templates/startkit/src/features/accounts/account-table.tsx +79 -0
  425. package/templates/startkit/src/lib/format.ts +31 -0
  426. package/templates/startkit/src/lib/mock-data.ts +441 -0
  427. package/templates/startkit/src/lib/routes.ts +116 -0
  428. package/templates/startkit/src/main.tsx +12 -0
  429. package/templates/startkit/src/pages/_layout.tsx +56 -0
  430. package/templates/startkit/src/pages/auth/_layout.tsx +7 -0
  431. package/templates/startkit/src/pages/auth/login.tsx +129 -0
  432. package/templates/startkit/src/pages/home.tsx +83 -0
  433. package/templates/startkit/src/pages/not-found.tsx +24 -0
  434. package/templates/startkit/src/pages/workspace/_layout.tsx +17 -0
  435. package/templates/startkit/src/pages/workspace/accounts/index.tsx +217 -0
  436. package/templates/startkit/src/pages/workspace/dashboard.tsx +118 -0
  437. package/templates/startkit/src/pages/workspace/settings.tsx +218 -0
  438. package/templates/startkit/src/router.tsx +7 -0
  439. package/templates/startkit/src/routes/auth-config.ts +38 -0
  440. package/templates/startkit/src/routes/auth.ts +8 -0
  441. package/templates/startkit/src/routes/index.ts +28 -0
  442. package/templates/startkit/src/routes/public.ts +8 -0
  443. package/templates/startkit/src/routes/workspace/accounts.ts +8 -0
  444. package/templates/startkit/src/routes/workspace/index.ts +14 -0
  445. package/templates/startkit/src/styles/components.css +396 -0
  446. package/templates/startkit/src/styles/layout.css +192 -0
  447. package/templates/startkit/src/styles/reset.css +38 -0
  448. package/templates/startkit/src/styles/theme.css +76 -0
  449. package/templates/startkit/src/styles/tokens.css +67 -0
  450. package/templates/startkit/src/styles.css +7 -0
  451. package/templates/startkit/src/toast.ts +55 -0
  452. package/templates/startkit/src/utils/join-classes.ts +4 -0
  453. package/templates/startkit/src/vite-env.d.ts +5 -0
  454. package/templates/startkit/tests/app.test.tsx +32 -0
  455. package/templates/startkit/tests/preferences.test.ts +43 -0
  456. package/templates/startkit/tests/resources.test.ts +82 -0
  457. package/templates/startkit/tsconfig.json +20 -0
  458. package/templates/startkit/tsconfig.node.json +10 -0
  459. package/templates/startkit/vite.config.ts +32 -0
  460. package/templates/startkit/vitest.config.ts +13 -0
@@ -0,0 +1,99 @@
1
+ ---
2
+ name: askr-app-builder
3
+ description: Use when building or substantially extending an Askr application, choosing scaffolds, planning app architecture, combining routing, state, data, UI primitives, theming, charts, SSR/SSG, or deciding which more specific Askr skill should guide the work.
4
+ ---
5
+
6
+ # Askr App Builder
7
+
8
+ Use this only when a task spans multiple owned workflows and no single narrower skill is enough. This is a planning and dispatch skill, not the default starting point for everyday feature work.
9
+
10
+ ## Use This When
11
+
12
+ - A new feature spans routing, data ownership, UI composition, and validation together.
13
+ - You need to choose a scaffold or template path before implementation.
14
+ - You need to break a broad feature into smaller owned slices.
15
+ - The task touches multiple branches, features, and render surfaces at once.
16
+
17
+ ## Do Not Use This First When
18
+
19
+ - The task is only about one route, one component, one async owner, or one UI surface.
20
+ - File ownership is unclear but still local; use `askr-project-structure` instead.
21
+ - The hard problem is already clearly routing, state, theming, auth, or validation.
22
+
23
+ ## Inspect First
24
+
25
+ - `AGENTS.md` when it exists
26
+ - `package.json`
27
+ - `src/main.tsx`
28
+ - The top-level route registry and nearest branch layout
29
+ - Existing `src/features`, `src/adapters`, `src/shared`, and `src/styles` ownership
30
+ - Existing tests for the surfaces involved
31
+
32
+ ## Plan The Slice
33
+
34
+ 1. Pick the template or existing app baseline.
35
+ 2. Identify the route owner, layout owner, feature owner, adapter owner, and validation owner.
36
+ 3. Split the work into smaller slices that can each be guided by one narrower skill.
37
+ 4. Apply those narrower skills in sequence instead of keeping the whole task under this one.
38
+ 5. End with `askr-testing-determinism` once the slices are implemented.
39
+
40
+ ## Choose The Baseline
41
+
42
+ - New product app: `askr create startkit <name>`.
43
+ - Minimal interactive app: `spa`.
44
+ - Server-rendered app: `ssr`.
45
+ - Static or docs site: `ssg`.
46
+ - Existing app: follow its current route, layout, style, and test conventions before introducing new ones.
47
+
48
+ ## Route The Work To Narrower Skills
49
+
50
+ - File placement or ownership: `askr-project-structure`.
51
+ - Route tree, metadata, shell boundaries, navigation: `askr-routing-layouts`.
52
+ - Local state or keyed rendering: `askr-runtime-reactivity`.
53
+ - Route-owned async reads: `askr-resources-data`.
54
+ - Shared keyed reads and writes: `askr-query-mutation`.
55
+ - Async truth states: `askr-error-loading-empty`.
56
+ - CRUD workflow: `askr-forms-tables-crud`.
57
+ - Auth and access: `askr-auth-access`.
58
+ - Theming and UI composition: `askr-theming` and `askr-ui-composition`.
59
+ - Realtime or event streams: `askr-realtime-streaming`.
60
+ - SSR or SSG: `askr-ssr-ssg`.
61
+ - Final validation: `askr-testing-determinism`.
62
+
63
+ ## Copy This Shape
64
+
65
+ ```text
66
+ route owner -> src/pages/app/_routes.tsx
67
+ layout owner -> src/pages/app/_layout.tsx
68
+ feature owner -> src/features/agents/
69
+ adapter owner -> src/adapters/agents-client.ts
70
+ validation owner -> tests/ or nearest package test script
71
+ ```
72
+
73
+ ## Never Do These
74
+
75
+ - React-shaped defaults such as `useEffect` data loading or implicit mutable state.
76
+ - Mixing route registration, data transport, layout shell, and visual theme logic in one component.
77
+ - Treating this skill as a substitute for narrower workflow skills.
78
+ - Raw interactive HTML when an `@askrjs/ui` primitive owns the behavior.
79
+ - App-local layout, shell, card, nav, feedback, or form primitives when `@askrjs/themes` already owns the surface.
80
+ - Hardcoded `--ak-*` token literals in runtime TypeScript or JavaScript.
81
+
82
+ ## Validate
83
+
84
+ - The app has one clear route tree.
85
+ - Route branches, layouts, feature workflows, adapters, shared helpers, UI behavior, and theme concerns sit in separate layers.
86
+ - Loading, empty, error, disabled, and narrow-screen states are explicit.
87
+ - `npm run check` or the closest available project check passes.
88
+
89
+ ## Done When
90
+
91
+ - The chosen template path still matches the app surface.
92
+ - Each slice is routed to one narrower skill.
93
+ - Route, layout, feature, adapter, shared, and theme concerns are separated.
94
+ - No foreign framework defaults or invented primitives slipped in.
95
+
96
+ ## Handoff
97
+
98
+ - Use the narrower skill that owns the next slice.
99
+ - Use `askr-testing-determinism` before finalizing the assembled result.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Askr App Builder"
3
+ short_description: "Build idiomatic Askr applications"
4
+ default_prompt: "Use $askr-app-builder to plan and build an idiomatic Askr app."
@@ -0,0 +1,74 @@
1
+ ---
2
+ name: askr-auth-access
3
+ description: Use when building Askr authentication, session loading, public/app route branches, protected layouts, role and permission requirements, redirects, login/logout, and access-denied UX.
4
+ ---
5
+
6
+ # Askr Auth Access
7
+
8
+ Use this for authentication and authorization in route-first Askr apps. The goal is explicit route policy, explicit session resolution, and no token or permission logic leaking into pages.
9
+
10
+ ## Inspect First
11
+
12
+ - `src/pages/_routes.tsx`, `src/pages/public/_routes.tsx`, and `src/pages/app/_routes.tsx`
13
+ - `src/pages/public/_layout.tsx` and `src/pages/app/_layout.tsx`
14
+ - Existing session, token, and user helpers in `src/shared` or `src/features/auth`
15
+ - Router auth resolver configuration
16
+
17
+ ## Use This When
18
+
19
+ - You need guest-only and authenticated route branches.
20
+ - You need route-level auth or permission requirements.
21
+ - You need login, logout, redirect, or forbidden behavior.
22
+ - You need to keep access checks out of page-local component logic.
23
+
24
+ ## Do This In Order
25
+
26
+ 1. Keep public and authenticated branches explicit in the route tree.
27
+ 2. Put an `AuthRequirement` on the narrowest route group or route that owns the policy.
28
+ 3. Resolve session state before rendering protected data or destructive controls.
29
+ 4. Redirect unauthenticated users to login with a return target when useful.
30
+ 5. Show a signed-in forbidden state when the user is authenticated but lacks permission.
31
+ 6. Keep token storage, refresh, and header policy in auth helpers or adapters, not components.
32
+
33
+ ## Copy This Shape
34
+
35
+ ```tsx
36
+ import { requireAnonymous, requireUser } from "@askrjs/auth";
37
+
38
+ group({ layout: AuthLayout, auth: requireAnonymous() }, () => {
39
+ registerAuthRoutes();
40
+ });
41
+
42
+ group({ layout: AppLayout, auth: requireUser() }, () => {
43
+ registerAppRoutes();
44
+ });
45
+ ```
46
+
47
+ ## Never Do These
48
+
49
+ - Per-page auth checks duplicated across protected routes.
50
+ - Rendering protected app data before session resolution.
51
+ - Putting token storage or API auth header logic in components.
52
+ - Treating roles and permissions as visual-only state.
53
+ - Client-only authorization decisions for sensitive server actions.
54
+ - Silent redirects when the user is signed in but lacks access.
55
+
56
+ ## Validate
57
+
58
+ - Public and app branches are explicit.
59
+ - Protected routes have a function-based auth requirement in the route tree.
60
+ - Access-denied, loading, and redirect behavior are tested.
61
+ - Auth state is available to adapters without leaking transport details into UI.
62
+
63
+ ## Done When
64
+
65
+ - Session resolution is explicit before protected data renders.
66
+ - Auth and authorization live in route requirements or auth workflows, not scattered through pages.
67
+ - Unauthorized, redirect, and signed-out states are all covered.
68
+ - Sensitive transport or token logic did not leak into UI components.
69
+
70
+ ## Handoff
71
+
72
+ - Use `askr-routing-layouts` when auth changes also reshape the route tree.
73
+ - Use `askr-api-integration` when auth headers, session refresh, or adapter policy is changing.
74
+ - Use `askr-observability-debugging` when denial reasons or audit trails must stay visible.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Askr Auth Access"
3
+ short_description: "Model auth branches and access"
4
+ default_prompt: "Use $askr-auth-access to add authentication and route access."
@@ -0,0 +1,76 @@
1
+ ---
2
+ name: askr-cli-vite
3
+ description: Use when scaffolding Askr projects with @askrjs/cli, choosing spa/ssr/ssg/startkit templates, configuring @askrjs/vite, JSX import source, Vite build setup, generated app customization, or fixing transform wiring.
4
+ ---
5
+
6
+ # Askr CLI Vite
7
+
8
+ Use this only when the task is scaffold choice, initial project setup, or repair of Vite and transform wiring. It is not a normal feature-work skill after the app is already on the canonical path.
9
+
10
+ ## Use This When
11
+
12
+ - Choosing between `spa`, `ssr`, `ssg`, and `startkit`.
13
+ - Fixing `@askrjs/vite` plugin wiring or JSX import-source setup.
14
+ - Repairing generated `package.json`, `vite.config.ts`, or `tsconfig` settings.
15
+ - Adjusting scaffolded build integration without changing runtime architecture.
16
+
17
+ ## Inspect First
18
+
19
+ - `docs/create.md`
20
+ - `docs/workflows.md`
21
+ - Existing `package.json`, `vite.config.ts`, and `tsconfig.json`
22
+ - The nearest matching template under `templates/`
23
+
24
+ ## Start From The Closest Template
25
+
26
+ - `startkit`: default for new product apps with dashboard, accounts, settings, login, themes, icons, and common checks.
27
+ - `spa`: minimal client-rendered interactive app.
28
+ - `ssr`: server-rendered app boundary.
29
+ - `ssg`: static generation scaffold with `ssg.config.ts`.
30
+
31
+ ## Do This In Order
32
+
33
+ 1. Choose the closest template instead of starting from raw Vite.
34
+ 2. Preserve generated Vite wiring unless the app has a concrete build requirement.
35
+ 3. Keep `askr()` as the owning plugin for Askr JSX and transforms.
36
+ 4. Keep runtime route, data, and component decisions out of build config.
37
+ 5. Treat generated files as app-owned after scaffold, not immutable.
38
+ 6. Validate scripts and transforms before moving on to feature work.
39
+
40
+ ## Copy This Shape
41
+
42
+ ```ts
43
+ import { defineConfig } from "vite";
44
+ import { askr } from "@askrjs/vite";
45
+
46
+ export default defineConfig({
47
+ plugins: [askr()],
48
+ });
49
+ ```
50
+
51
+ ## Never Do These
52
+
53
+ - Duplicating JSX transform setup in Vite, `tsconfig`, and custom esbuild config.
54
+ - Choosing `startkit` for a tiny isolated demo when `spa` fits better.
55
+ - Treating CLI-generated files as immutable.
56
+ - Adding runtime route or data decisions to build config.
57
+
58
+ ## Validate
59
+
60
+ - `vite.config.ts` uses `askr()`.
61
+ - `package.json` scripts match the selected template.
62
+ - `tsconfig` JSX settings match template conventions.
63
+ - `npm run dev`, `npm run build`, and available checks pass after setup.
64
+
65
+ ## Done When
66
+
67
+ - The template matches the runtime boundary the app actually needs.
68
+ - Vite wiring stays package-owned and minimal.
69
+ - Generated files are ready for normal workflow skills.
70
+ - No runtime architecture leaked into build config.
71
+
72
+ ## Handoff
73
+
74
+ - Use `askr-app-builder` only when the task is still a broad app brief.
75
+ - Use `askr-ssr-ssg` when the render boundary is the hard part.
76
+ - Use the normal route, data, or UI workflow skills once the scaffold exists.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Askr CLI Vite"
3
+ short_description: "Scaffold and configure Askr apps"
4
+ default_prompt: "Use $askr-cli-vite to scaffold or configure an askr Vite app."
@@ -0,0 +1,82 @@
1
+ ---
2
+ name: askr-dashboard-charts
3
+ description: Use when building askr dashboards, stat cards, activity feeds, product metrics, tables, async feedback, and @askrjs/charts visualizations such as area, bar, line, donut, heatmap, timeline, gauges, and chart chrome.
4
+ ---
5
+
6
+ # Askr Dashboard Charts
7
+
8
+ Use this for product dashboards and metric-heavy screens. The goal is route-owned data, deterministic metric formatting, and charts that answer product questions without inventing parallel UI systems.
9
+
10
+ ## Use This When
11
+
12
+ - You are building a dashboard, metrics screen, stat-card surface, or chart-heavy route.
13
+ - The page needs resource-owned async loading plus chart composition.
14
+ - Charts and tables must share the same formatter logic.
15
+ - You need loading, empty, and error truth on a dense metrics screen.
16
+
17
+ ## Inspect First
18
+
19
+ - `templates/startkit/src/pages/workspace/dashboard.tsx`
20
+ - Existing stat card, table, empty state, and chart styles
21
+ - Existing format helpers in `src/shared`
22
+ - Existing route or feature owners for the metrics you need
23
+
24
+ ## Choose The Owner
25
+
26
+ - The route or page owns high-level loading and composition.
27
+ - `src/components/shared` owns reusable stat cards, page headers, tables, and empty states.
28
+ - `src/features/<domain>` owns domain-specific dashboard panels and metric workflows.
29
+ - `src/shared` owns formatting helpers so cards, tables, and charts stay consistent.
30
+
31
+ ## Do This In Order
32
+
33
+ 1. Load dashboard data in the route or feature container with `resource()` unless the data must be shared across screens.
34
+ 2. Keep metric formatting in shared helpers.
35
+ 3. Use `@askrjs/charts` components for chart visuals and keep CSS imported at the app boundary.
36
+ 4. Pair charts with labels, summaries, or tables when precision matters.
37
+ 5. Keep loading, empty, error, and refresh states explicit.
38
+
39
+ ## Copy This Shape
40
+
41
+ ```tsx
42
+ import { resource } from "@askrjs/askr/resources";
43
+ import { AreaChart, ChartPanel, ChartShell } from "@askrjs/charts/components";
44
+
45
+ const dashboard = resource(({ signal }) => loadDashboard({ signal }), []);
46
+
47
+ if (dashboard.pending && !dashboard.value) return <p>Loading dashboard...</p>;
48
+ if (dashboard.error) return <p role="alert">Unable to load dashboard.</p>;
49
+
50
+ <ChartShell title="Revenue" description="Last 7 days">
51
+ <ChartPanel title="Trend">
52
+ <AreaChart label="Revenue trend" data={dashboard.value.revenue} />
53
+ </ChartPanel>
54
+ </ChartShell>;
55
+ ```
56
+
57
+ ## Never Do These
58
+
59
+ - Inline mock metrics inside page JSX.
60
+ - Hardcoded chart colors in runtime code.
61
+ - Decorative charts that do not answer a product question.
62
+ - Dense dashboards without loading, empty, and error states.
63
+
64
+ ## Validate
65
+
66
+ - Cards and charts share formatter logic.
67
+ - The page scans cleanly at mobile, tablet, and desktop widths.
68
+ - Chart data has stable labels and keys.
69
+ - Loading, empty, error, and refresh states are visible.
70
+
71
+ ## Done When
72
+
73
+ - Route-owned loading and chart composition are clear.
74
+ - Metric formatting is shared and deterministic.
75
+ - Charts support the page's product question instead of decorating it.
76
+ - Async states remain explicit on the dashboard surface.
77
+
78
+ ## Handoff
79
+
80
+ - Use `askr-resources-data` when async ownership is the real blocker.
81
+ - Use `askr-theming` when the hard part is shell and visual coherence.
82
+ - Use `askr-testing-determinism` before closing responsive or stateful chart changes.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Askr Dashboard Charts"
3
+ short_description: "Build dashboards and charts"
4
+ default_prompt: "Use $askr-dashboard-charts to build dashboard metrics and charts."
@@ -0,0 +1,86 @@
1
+ ---
2
+ name: askr-design-system
3
+ description: Use when creating product-grade Askr interfaces, design-system rules, density, page hierarchy, navigation, forms, tables, panels, action placement, tokens, dark mode, responsive behavior, and operational UI polish.
4
+ ---
5
+
6
+ # Askr Design System
7
+
8
+ Use this only when a repeated product pattern must become shared across multiple screens. This is not the default starting skill for a single UI task.
9
+
10
+ ## Inspect First
11
+
12
+ - Existing `src/styles`, tokens, theme imports, and shared components.
13
+ - `src/components/shared` before adding new UI building blocks.
14
+ - `@askrjs/themes` primitives already in use.
15
+ - Target product audience and primary workflows.
16
+
17
+ ## Use This When
18
+
19
+ - The same pattern repeats across three or more screens.
20
+ - Theme primitives alone are not enough to express a product-specific shared pattern.
21
+ - You need consistent density, hierarchy, and action placement across the app.
22
+ - You are about to create a reusable product component, not just style one page.
23
+
24
+ ## Product UI Defaults
25
+
26
+ - Prefer quiet, dense, scannable SaaS/admin interfaces.
27
+ - Use page headers, toolbars, panels, forms, tables, and clear action hierarchy.
28
+ - Keep primary actions close to the object or workflow they affect.
29
+ - Use icons for familiar tool actions and text for consequential commands.
30
+ - Use tokens and semantic slots rather than one-off visual styles.
31
+ - Before inventing a component, check `@askrjs/themes` layout, control, surface, feedback, shell, nav, and overlay exports.
32
+
33
+ ## Do This In Order
34
+
35
+ 1. Prove the pattern is repeated enough to deserve extraction.
36
+ 2. Start from existing theme primitives and shared styles.
37
+ 3. Extract the smallest product-specific shared component or CSS recipe that removes repetition.
38
+ 4. Keep tokens in CSS and keep workflow logic out of design-system components.
39
+ 5. Validate the pattern in light, dark, responsive, empty, error, and disabled states.
40
+
41
+ ## Start From These Primitives
42
+
43
+ - Page width/rhythm: `Container`, `Section`.
44
+ - Vertical and horizontal composition: `Stack`, `Inline`, `Flex`.
45
+ - Responsive groups: `Block`.
46
+ - Low-level layout: `Box`, `Spacer`, `AspectRatio`.
47
+ - Product surfaces: `Card`, `Alert`, `Badge`, `ListGroup`, `Separator`, `Skeleton`.
48
+ - Forms/actions: `Button`, `ButtonGroup`, `Close`, `Field`, `FieldHint`, `FieldError`, `InputGroup`.
49
+ - Async states: `EmptyState`, `Spinner`, plus query/resource state-specific copy.
50
+ - App chrome: `Shell`, `ShellNav`, `ShellMain`, `Header`, `Sidebar`, `Navbar`.
51
+ - Navigation: `Nav`, `NavLink`, `NavGroup`, `NavBrand`, `Breadcrumb`, `Pagination`.
52
+ - Menus: themed `Dropdown`, `Menu`, and `Menubar` from `@askrjs/themes/components`.
53
+
54
+ ## Never Do These
55
+
56
+ - Route layouts own shell chrome.
57
+ - Shared components own repeatable product surfaces.
58
+ - Page sections should be unframed layout regions; use cards/panels for repeated items or contained tools.
59
+ - Do not wrap cards inside cards; use `Section`, `Container`, `Stack`, and `Block` for page-level composition.
60
+ - Tables and forms should be compact but readable.
61
+ - Long labels must wrap or truncate intentionally.
62
+ - Marketing-page composition for operational apps.
63
+ - Decorative gradients, oversized hero panels, or low-density cards in work surfaces.
64
+ - Hardcoded colors and spacing outside tokens.
65
+ - Component variants that duplicate what CSS state or slots should handle.
66
+ - App-local design-system clones of theme primitives.
67
+ - Custom CSS grids or flex wrappers when `Block`, `Flex`, `Inline`, or `Stack` already express the layout.
68
+
69
+ ## Validate
70
+
71
+ - Mobile, tablet, desktop, light, and dark modes are considered.
72
+ - Focus, hover, disabled, loading, empty, and error states feel consistent.
73
+ - Text does not overflow buttons, cards, navs, tables, or overlays.
74
+ - The interface optimizes repeated use, not only first impression.
75
+
76
+ ## Done When
77
+
78
+ - A repeated product pattern became shared without creating a second component catalog.
79
+ - Theme primitives still provide the baseline behavior and styling model.
80
+ - The extracted pattern improves coherence across real repeated screens.
81
+
82
+ ## Handoff
83
+
84
+ - Use `askr-theming` when the next step is token or shell styling.
85
+ - Use `askr-ui-composition` when the next step is interactive behavior.
86
+ - Use `askr-testing-determinism` before closing broad visual-system changes.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Askr Design System"
3
+ short_description: "Shape polished product UI"
4
+ default_prompt: "Use $askr-design-system to design an Askr product surface."
@@ -0,0 +1,74 @@
1
+ ---
2
+ name: askr-env-config
3
+ description: Use when configuring Askr apps with environment variables, API base URLs, feature flags, deployment config, local mocks, generated client configuration, and separating config from runtime state.
4
+ ---
5
+
6
+ # Askr Env Config
7
+
8
+ Use this for environment-specific application configuration. The goal is one typed config boundary, explicit public values, and no env reads scattered through UI code.
9
+
10
+ ## Use This When
11
+
12
+ - You need API base URLs, feature flags, deployment config, or client configuration.
13
+ - The app has local mocks, staging behavior, or environment-specific stream endpoints.
14
+ - You need missing required config to fail early.
15
+ - You want tests to override config deterministically.
16
+
17
+ ## Inspect First
18
+
19
+ - Existing Vite or runtime environment usage and app config helpers
20
+ - Generated API client configuration
21
+ - Local mock data and development-only switches
22
+ - Deployment target requirements
23
+
24
+ ## Put Config In One Boundary
25
+
26
+ - Parse and validate config in `src/shared/config` or the repo's existing shared config module.
27
+ - Pass API base URLs and auth providers into `src/adapters`.
28
+ - Keep feature flags readable from features and pages without coupling them to transport details.
29
+ - Keep secrets out of client bundles.
30
+
31
+ ## Do This In Order
32
+
33
+ 1. Define a typed config object for the public values the client needs.
34
+ 2. Validate required values at app startup.
35
+ 3. Pass config into adapters and shared helpers instead of reading env values ad hoc.
36
+ 4. Keep local mocks explicit and easy to disable.
37
+ 5. Name and document reconnect intervals, stale thresholds, or polling settings centrally when the app is event-driven.
38
+
39
+ ## Copy This Shape
40
+
41
+ ```ts
42
+ export const appConfig = {
43
+ apiBaseUrl: requireEnv("VITE_API_BASE_URL"),
44
+ enableMocks: import.meta.env.VITE_ENABLE_MOCKS === "true",
45
+ streamReconnectMs: Number(import.meta.env.VITE_STREAM_RECONNECT_MS ?? 3000),
46
+ };
47
+ ```
48
+
49
+ ## Never Do These
50
+
51
+ - Reading env variables directly in many components.
52
+ - Shipping server secrets to the browser.
53
+ - Hidden dev mocks that change production behavior.
54
+ - Feature flags that fork route structure unpredictably.
55
+
56
+ ## Validate
57
+
58
+ - Missing required config fails early with a useful message.
59
+ - API adapters receive config through one boundary.
60
+ - Local, staging, and production config paths are obvious.
61
+ - Tests can override config deterministically.
62
+
63
+ ## Done When
64
+
65
+ - Public config is typed and centralized.
66
+ - Env reads no longer leak through UI files.
67
+ - Event-driven timing or fallback config is explicit where relevant.
68
+ - Secret and public config boundaries are clear.
69
+
70
+ ## Handoff
71
+
72
+ - Use `askr-api-integration` when config shapes adapter behavior.
73
+ - Use `askr-realtime-streaming` when reconnect or polling config is the hard part.
74
+ - Use `askr-testing-determinism` when config override behavior needs validation.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Askr Env Config"
3
+ short_description: "Configure env and feature flags"
4
+ default_prompt: "Use $askr-env-config to configure an Askr app environment."
@@ -0,0 +1,89 @@
1
+ ---
2
+ name: askr-error-loading-empty
3
+ description: Use when designing Askr loading, empty, error, stale, refreshing, pending-write, retry, disabled, partial-data, and eventual-consistency UX across routes, tables, forms, dashboards, queries, and mutations.
4
+ ---
5
+
6
+ # Askr Error Loading Empty
7
+
8
+ Use this whenever a feature touches async data or failure states. The goal is one truthful UI meaning per async state.
9
+
10
+ ## Use This When
11
+
12
+ - You added a `resource()`, `createQuery()`, or `createMutation()` path.
13
+ - The screen can load, refresh, fail, be empty, or lag behind a write.
14
+ - The UX currently hides too much behind one spinner or one toast.
15
+ - The user needs truthful state during eventual consistency.
16
+
17
+ ## Inspect First
18
+
19
+ - The owner of the async state.
20
+ - Existing shared alert, empty-state, skeleton, toast, and status components.
21
+ - Query fields such as `loading`, `refreshing`, `stale`, and `consistency`.
22
+ - Mutation fields such as `pending`, `error`, `result`, and `status`.
23
+
24
+ ## Use This Vocabulary
25
+
26
+ - Initial loading: no usable data yet.
27
+ - Refreshing: old data is visible while new data loads.
28
+ - Empty: request succeeded but no records match.
29
+ - Error: request failed and user needs recovery or explanation.
30
+ - Partial: some data is usable, some failed or is still loading.
31
+ - Pending write: command accepted but read model may not reflect it yet.
32
+ - Stale: current read model is known or suspected to be behind.
33
+
34
+ ## Do This In Order
35
+
36
+ 1. Render a distinct state for initial load, empty, error, refresh, and pending write.
37
+ 2. Keep useful old data visible during refresh when it is safe to do so.
38
+ 3. Use truthful copy such as `refreshing`, `saved, syncing`, or `reconnecting`.
39
+ 4. Disable only the actions that are actually unsafe.
40
+ 5. Prefer row-level or local status when only one record is stale or pending.
41
+
42
+ ## Copy This Shape
43
+
44
+ ```tsx
45
+ if (accounts.pending && !accounts.value) {
46
+ return <p>Loading accounts...</p>;
47
+ }
48
+
49
+ if (accounts.error && !accounts.value) {
50
+ return <p role="alert">Unable to load accounts.</p>;
51
+ }
52
+
53
+ return (
54
+ <section>
55
+ <Show when={accounts.refreshing || accounts.consistency === "pending-write"}>
56
+ <p role="status">Saved, syncing...</p>
57
+ </Show>
58
+
59
+ <Show when={(accounts.value?.items.length ?? 0) === 0}>
60
+ <p>No accounts matched this filter.</p>
61
+ </Show>
62
+
63
+ <AccountsTable rows={accounts.value?.items ?? []} />
64
+ </section>
65
+ );
66
+ ```
67
+
68
+ - One spinner for every async state.
69
+ - Empty states that hide errors.
70
+ - Toast-only errors for important failed workflows.
71
+ - Claiming a write is fully complete before the read side confirms it.
72
+ - Clearing useful data during refresh.
73
+ - Global blocking UI when only one row or one mutation is actually stale.
74
+
75
+ ## Validate
76
+
77
+ - Initial, refresh, empty, error, stale, and pending-write states are distinct.
78
+ - Retry paths call the real owner.
79
+ - Important failures are visible without depending only on color or toast.
80
+ - Copy tells the truth about eventual consistency.
81
+
82
+ ## Done When
83
+
84
+ - The screen no longer hides multiple async truths behind one spinner.
85
+
86
+ ## Handoff
87
+
88
+ - Use `askr-query-mutation` or `askr-resources-data` when the owning state model is still unclear.
89
+ - Use `askr-accessibility` when announcements, focus, or row-level status semantics need review.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Askr Error Loading Empty"
3
+ short_description: "Design async UX states clearly"
4
+ default_prompt: "Use $askr-error-loading-empty to design async UI states."