howone 0.1.19 → 0.1.22

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 (293) hide show
  1. package/package.json +1 -1
  2. package/templates/vite/.howone/skills/hallmark/LICENSE +21 -0
  3. package/templates/vite/.howone/skills/hallmark/README.md +147 -0
  4. package/templates/vite/.howone/skills/hallmark/ROADMAP.md +201 -0
  5. package/templates/vite/.howone/skills/hallmark/SKILL.md +551 -0
  6. package/templates/vite/.howone/skills/hallmark/docs/recipes.md +186 -0
  7. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-anya.jpg +0 -0
  8. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-bananastudio.jpg +0 -0
  9. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-hyperlane.jpg +0 -0
  10. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-najm.jpg +0 -0
  11. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-slow-pour.jpg +0 -0
  12. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-soroe.jpg +0 -0
  13. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-tally.jpg +0 -0
  14. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-wayfare.jpg +0 -0
  15. package/templates/vite/.howone/skills/hallmark/docs/study-examples.md +176 -0
  16. package/templates/vite/.howone/skills/hallmark/docs/talk-slides.md +364 -0
  17. package/templates/vite/.howone/skills/hallmark/package.json +36 -0
  18. package/templates/vite/.howone/skills/hallmark/references/anti-patterns.md +412 -0
  19. package/templates/vite/.howone/skills/hallmark/references/assets.md +399 -0
  20. package/templates/vite/.howone/skills/hallmark/references/color.md +95 -0
  21. package/templates/vite/.howone/skills/hallmark/references/component-cookbook.md +256 -0
  22. package/templates/vite/.howone/skills/hallmark/references/components/c1-outlined-chip.md +12 -0
  23. package/templates/vite/.howone/skills/hallmark/references/components/c2-inline-form-as-cta.md +16 -0
  24. package/templates/vite/.howone/skills/hallmark/references/components/c3-typographic-link.md +8 -0
  25. package/templates/vite/.howone/skills/hallmark/references/components/c4-sticky-bottom-bar.md +16 -0
  26. package/templates/vite/.howone/skills/hallmark/references/components/f1-bento-grid.md +20 -0
  27. package/templates/vite/.howone/skills/hallmark/references/components/f2-sticky-scroll-stack.md +20 -0
  28. package/templates/vite/.howone/skills/hallmark/references/components/f3-tabular-spec-sheet.md +11 -0
  29. package/templates/vite/.howone/skills/hallmark/references/components/f4-step-sequence.md +11 -0
  30. package/templates/vite/.howone/skills/hallmark/references/components/f5-annotated-screenshot.md +11 -0
  31. package/templates/vite/.howone/skills/hallmark/references/components/f6-product-card-grid.md +41 -0
  32. package/templates/vite/.howone/skills/hallmark/references/components/ft1-mast-headed.md +13 -0
  33. package/templates/vite/.howone/skills/hallmark/references/components/ft2-inline-rule-single-line.md +10 -0
  34. package/templates/vite/.howone/skills/hallmark/references/components/ft3-index-style-category-list.md +12 -0
  35. package/templates/vite/.howone/skills/hallmark/references/components/ft4-dense-typographic.md +10 -0
  36. package/templates/vite/.howone/skills/hallmark/references/components/ft5-statement.md +21 -0
  37. package/templates/vite/.howone/skills/hallmark/references/components/ft6-letter-close.md +19 -0
  38. package/templates/vite/.howone/skills/hallmark/references/components/ft7-newsletter-first.md +27 -0
  39. package/templates/vite/.howone/skills/hallmark/references/components/ft8-marquee-scroll.md +25 -0
  40. package/templates/vite/.howone/skills/hallmark/references/components/h1-marquee.md +15 -0
  41. package/templates/vite/.howone/skills/hallmark/references/components/h2-split-diptych.md +15 -0
  42. package/templates/vite/.howone/skills/hallmark/references/components/h3-quote-led.md +11 -0
  43. package/templates/vite/.howone/skills/hallmark/references/components/h4-stat-led.md +14 -0
  44. package/templates/vite/.howone/skills/hallmark/references/components/h5-letter-hero.md +11 -0
  45. package/templates/vite/.howone/skills/hallmark/references/components/h6-photographic-fold.md +16 -0
  46. package/templates/vite/.howone/skills/hallmark/references/components/h7-demo-video-clipped-by-viewport-edge.md +27 -0
  47. package/templates/vite/.howone/skills/hallmark/references/components/h8-mockup-split-browser-framed.md +23 -0
  48. package/templates/vite/.howone/skills/hallmark/references/components/h9-custom-illustration-centerpiece.md +27 -0
  49. package/templates/vite/.howone/skills/hallmark/references/components/n1-wordmark-2-links.md +12 -0
  50. package/templates/vite/.howone/skills/hallmark/references/components/n10-floating-on-scroll-morph.md +19 -0
  51. package/templates/vite/.howone/skills/hallmark/references/components/n2-floating-chip.md +14 -0
  52. package/templates/vite/.howone/skills/hallmark/references/components/n3-side-rail.md +14 -0
  53. package/templates/vite/.howone/skills/hallmark/references/components/n4-hidden-behind-k.md +9 -0
  54. package/templates/vite/.howone/skills/hallmark/references/components/n5-floating-pill.md +28 -0
  55. package/templates/vite/.howone/skills/hallmark/references/components/n6-newspaper-masthead.md +24 -0
  56. package/templates/vite/.howone/skills/hallmark/references/components/n7-brutal-slab.md +22 -0
  57. package/templates/vite/.howone/skills/hallmark/references/components/n8-terminal-command.md +21 -0
  58. package/templates/vite/.howone/skills/hallmark/references/components/n9-edge-aligned-minimal.md +17 -0
  59. package/templates/vite/.howone/skills/hallmark/references/components/s1-left-margin-numbered.md +15 -0
  60. package/templates/vite/.howone/skills/hallmark/references/components/s2-hanging.md +13 -0
  61. package/templates/vite/.howone/skills/hallmark/references/components/s3-sticky-pinned.md +19 -0
  62. package/templates/vite/.howone/skills/hallmark/references/components/s4-inline-no-break.md +11 -0
  63. package/templates/vite/.howone/skills/hallmark/references/components/s5-bottom-anchored.md +13 -0
  64. package/templates/vite/.howone/skills/hallmark/references/components/t1-pull-quote-with-marginalia.md +12 -0
  65. package/templates/vite/.howone/skills/hallmark/references/components/t2-logo-wall-hairline.md +19 -0
  66. package/templates/vite/.howone/skills/hallmark/references/components/t3-single-huge-quote.md +11 -0
  67. package/templates/vite/.howone/skills/hallmark/references/components/t4-numbered-stat-strip.md +14 -0
  68. package/templates/vite/.howone/skills/hallmark/references/contract.md +24 -0
  69. package/templates/vite/.howone/skills/hallmark/references/copy.md +182 -0
  70. package/templates/vite/.howone/skills/hallmark/references/custom-craft.md +626 -0
  71. package/templates/vite/.howone/skills/hallmark/references/custom-theme.md +329 -0
  72. package/templates/vite/.howone/skills/hallmark/references/design-md.md +116 -0
  73. package/templates/vite/.howone/skills/hallmark/references/export-formats.md +328 -0
  74. package/templates/vite/.howone/skills/hallmark/references/floating-nav.md +89 -0
  75. package/templates/vite/.howone/skills/hallmark/references/genres/atmospheric.md +65 -0
  76. package/templates/vite/.howone/skills/hallmark/references/genres/editorial.md +70 -0
  77. package/templates/vite/.howone/skills/hallmark/references/genres/modern-minimal.md +67 -0
  78. package/templates/vite/.howone/skills/hallmark/references/genres/playful.md +65 -0
  79. package/templates/vite/.howone/skills/hallmark/references/hero-enrichment.md +474 -0
  80. package/templates/vite/.howone/skills/hallmark/references/imagery-kit.md +170 -0
  81. package/templates/vite/.howone/skills/hallmark/references/interaction-and-states.md +207 -0
  82. package/templates/vite/.howone/skills/hallmark/references/layout-and-space.md +111 -0
  83. package/templates/vite/.howone/skills/hallmark/references/macrostructures/01-bento-grid.md +35 -0
  84. package/templates/vite/.howone/skills/hallmark/references/macrostructures/02-long-document.md +34 -0
  85. package/templates/vite/.howone/skills/hallmark/references/macrostructures/03-marquee-hero.md +31 -0
  86. package/templates/vite/.howone/skills/hallmark/references/macrostructures/04-stat-led.md +32 -0
  87. package/templates/vite/.howone/skills/hallmark/references/macrostructures/05-workbench.md +32 -0
  88. package/templates/vite/.howone/skills/hallmark/references/macrostructures/06-conversational-faq.md +33 -0
  89. package/templates/vite/.howone/skills/hallmark/references/macrostructures/07-manifesto.md +32 -0
  90. package/templates/vite/.howone/skills/hallmark/references/macrostructures/08-photographic.md +34 -0
  91. package/templates/vite/.howone/skills/hallmark/references/macrostructures/09-quote-led.md +32 -0
  92. package/templates/vite/.howone/skills/hallmark/references/macrostructures/10-specimen.md +32 -0
  93. package/templates/vite/.howone/skills/hallmark/references/macrostructures/11-catalogue.md +23 -0
  94. package/templates/vite/.howone/skills/hallmark/references/macrostructures/12-letter.md +23 -0
  95. package/templates/vite/.howone/skills/hallmark/references/macrostructures/13-index-first.md +23 -0
  96. package/templates/vite/.howone/skills/hallmark/references/macrostructures/14-narrative-workflow.md +23 -0
  97. package/templates/vite/.howone/skills/hallmark/references/macrostructures/15-split-studio.md +23 -0
  98. package/templates/vite/.howone/skills/hallmark/references/macrostructures/16-feature-stack.md +23 -0
  99. package/templates/vite/.howone/skills/hallmark/references/macrostructures/17-type-specimen.md +23 -0
  100. package/templates/vite/.howone/skills/hallmark/references/macrostructures/18-portfolio-grid.md +23 -0
  101. package/templates/vite/.howone/skills/hallmark/references/macrostructures/19-map-diagram.md +23 -0
  102. package/templates/vite/.howone/skills/hallmark/references/macrostructures/20-ecosystem-index.md +23 -0
  103. package/templates/vite/.howone/skills/hallmark/references/macrostructures/21-component-playground.md +23 -0
  104. package/templates/vite/.howone/skills/hallmark/references/macrostructures.md +89 -0
  105. package/templates/vite/.howone/skills/hallmark/references/microinteractions.md +260 -0
  106. package/templates/vite/.howone/skills/hallmark/references/motion.md +109 -0
  107. package/templates/vite/.howone/skills/hallmark/references/preview-examples.md +49 -0
  108. package/templates/vite/.howone/skills/hallmark/references/responsive.md +138 -0
  109. package/templates/vite/.howone/skills/hallmark/references/slop-test.md +205 -0
  110. package/templates/vite/.howone/skills/hallmark/references/structure.md +164 -0
  111. package/templates/vite/.howone/skills/hallmark/references/study.md +486 -0
  112. package/templates/vite/.howone/skills/hallmark/references/typography.md +243 -0
  113. package/templates/vite/.howone/skills/hallmark/references/verbs/audit.md +25 -0
  114. package/templates/vite/.howone/skills/hallmark/references/verbs/redesign.md +269 -0
  115. package/templates/vite/.howone/skills/hallmark/site/OG-hallmark.png +0 -0
  116. package/templates/vite/.howone/skills/hallmark/site/_tests/01-tide-podcast/brief.md +71 -0
  117. package/templates/vite/.howone/skills/hallmark/site/_tests/01-tide-podcast/index.html +64 -0
  118. package/templates/vite/.howone/skills/hallmark/site/_tests/01-tide-podcast/style.css +240 -0
  119. package/templates/vite/.howone/skills/hallmark/site/_tests/02-streampipe-cli/brief.md +65 -0
  120. package/templates/vite/.howone/skills/hallmark/site/_tests/02-streampipe-cli/index.html +105 -0
  121. package/templates/vite/.howone/skills/hallmark/site/_tests/02-streampipe-cli/style.css +250 -0
  122. package/templates/vite/.howone/skills/hallmark/site/_tests/03-maple-bakery/brief.md +64 -0
  123. package/templates/vite/.howone/skills/hallmark/site/_tests/03-maple-bakery/index.html +131 -0
  124. package/templates/vite/.howone/skills/hallmark/site/_tests/03-maple-bakery/style.css +240 -0
  125. package/templates/vite/.howone/skills/hallmark/site/_tests/04-meridian-manifesto/brief.md +67 -0
  126. package/templates/vite/.howone/skills/hallmark/site/_tests/04-meridian-manifesto/index.html +86 -0
  127. package/templates/vite/.howone/skills/hallmark/site/_tests/04-meridian-manifesto/style.css +262 -0
  128. package/templates/vite/.howone/skills/hallmark/site/_tests/05-tracejam-saas/brief.md +63 -0
  129. package/templates/vite/.howone/skills/hallmark/site/_tests/05-tracejam-saas/index.html +167 -0
  130. package/templates/vite/.howone/skills/hallmark/site/_tests/05-tracejam-saas/style.css +457 -0
  131. package/templates/vite/.howone/skills/hallmark/site/_tests/06-anya-portfolio/brief.md +65 -0
  132. package/templates/vite/.howone/skills/hallmark/site/_tests/06-anya-portfolio/index.html +159 -0
  133. package/templates/vite/.howone/skills/hallmark/site/_tests/06-anya-portfolio/style.css +288 -0
  134. package/templates/vite/.howone/skills/hallmark/site/_tests/07-foundry-compliance/brief.md +64 -0
  135. package/templates/vite/.howone/skills/hallmark/site/_tests/07-foundry-compliance/index.html +146 -0
  136. package/templates/vite/.howone/skills/hallmark/site/_tests/07-foundry-compliance/style.css +484 -0
  137. package/templates/vite/.howone/skills/hallmark/site/_tests/08-cohort-courses/brief.md +64 -0
  138. package/templates/vite/.howone/skills/hallmark/site/_tests/08-cohort-courses/index.html +116 -0
  139. package/templates/vite/.howone/skills/hallmark/site/_tests/08-cohort-courses/style.css +354 -0
  140. package/templates/vite/.howone/skills/hallmark/site/_tests/09-slow-pour/index.html +638 -0
  141. package/templates/vite/.howone/skills/hallmark/site/_tests/10-owl-hours/index.html +515 -0
  142. package/templates/vite/.howone/skills/hallmark/site/_tests/11-soroe-ceramics/index.html +515 -0
  143. package/templates/vite/.howone/skills/hallmark/site/_tests/12-loafer/index.html +608 -0
  144. package/templates/vite/.howone/skills/hallmark/site/_tests/13-alma/index.html +587 -0
  145. package/templates/vite/.howone/skills/hallmark/site/_tests/README.md +157 -0
  146. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/BananaStudio-loop.mp4 +0 -0
  147. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/BananaStudio-still.jpg +0 -0
  148. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Hyperlane-example.mp4 +0 -0
  149. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Hyperlane-still.jpg +0 -0
  150. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Najm-loop.mp4 +0 -0
  151. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Najm-still.jpg +0 -0
  152. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Podcast-loop.mp4 +0 -0
  153. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/SaaS-loop.mp4 +0 -0
  154. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/SaaS-still.jpg +0 -0
  155. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Soroe-loop.mp4 +0 -0
  156. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Soroe-still.jpg +0 -0
  157. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/after-quiet-hour.png +0 -0
  158. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/anya-loop.mp4 +0 -0
  159. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/anya-still.jpg +0 -0
  160. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/audit-example.png +0 -0
  161. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/before-quiet-hour.png +0 -0
  162. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/example-redesign-uractivation.png +0 -0
  163. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/slow-pour-loop.mp4 +0 -0
  164. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/slow-pour-still.jpg +0 -0
  165. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/study-example.png +0 -0
  166. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/uractivation-after-loop.mp4 +0 -0
  167. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/wayfare-loop.mp4 +0 -0
  168. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/wayfare-still.jpg +0 -0
  169. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/01-coffeebox/index.html +77 -0
  170. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/01-coffeebox/style.css +238 -0
  171. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/02-loop/index.html +110 -0
  172. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/02-loop/style.css +326 -0
  173. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/03-mossroot/index.html +134 -0
  174. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/03-mossroot/style.css +262 -0
  175. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/README.md +30 -0
  176. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/README.md +17 -0
  177. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/audit/audit-report.md +56 -0
  178. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/audit/input.html +160 -0
  179. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/audit/notes.md +29 -0
  180. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/redesign/input.html +63 -0
  181. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/redesign/notes.md +72 -0
  182. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/redesign/output.html +374 -0
  183. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/diagnosis.md +52 -0
  184. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/input-description.md +29 -0
  185. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/notes.md +61 -0
  186. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/output.css +193 -0
  187. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/output.html +66 -0
  188. package/templates/vite/.howone/skills/hallmark/site/css/base.css +194 -0
  189. package/templates/vite/.howone/skills/hallmark/site/css/components.css +4886 -0
  190. package/templates/vite/.howone/skills/hallmark/site/css/sections.css +2072 -0
  191. package/templates/vite/.howone/skills/hallmark/site/css/tokens.css +1129 -0
  192. package/templates/vite/.howone/skills/hallmark/site/examples/bananastudio/index.html +475 -0
  193. package/templates/vite/.howone/skills/hallmark/site/examples/bananastudio/styles.css +1584 -0
  194. package/templates/vite/.howone/skills/hallmark/site/examples/bananastudio/tokens.css +96 -0
  195. package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/index.html +344 -0
  196. package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/script.js +103 -0
  197. package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/styles.css +1103 -0
  198. package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/tokens.css +83 -0
  199. package/templates/vite/.howone/skills/hallmark/site/examples/najm/index.html +368 -0
  200. package/templates/vite/.howone/skills/hallmark/site/examples/najm/script.js +133 -0
  201. package/templates/vite/.howone/skills/hallmark/site/examples/najm/styles.css +1062 -0
  202. package/templates/vite/.howone/skills/hallmark/site/examples/najm/tokens.css +97 -0
  203. package/templates/vite/.howone/skills/hallmark/site/examples/tally/app.js +84 -0
  204. package/templates/vite/.howone/skills/hallmark/site/examples/tally/index.html +446 -0
  205. package/templates/vite/.howone/skills/hallmark/site/examples/tally/styles.css +1087 -0
  206. package/templates/vite/.howone/skills/hallmark/site/examples/tally/tokens.css +101 -0
  207. package/templates/vite/.howone/skills/hallmark/site/examples/wayfare/index.html +359 -0
  208. package/templates/vite/.howone/skills/hallmark/site/examples/wayfare/style.css +1168 -0
  209. package/templates/vite/.howone/skills/hallmark/site/examples/wayfare/tokens.css +81 -0
  210. package/templates/vite/.howone/skills/hallmark/site/favicon-dark.svg +5 -0
  211. package/templates/vite/.howone/skills/hallmark/site/favicon-light.svg +5 -0
  212. package/templates/vite/.howone/skills/hallmark/site/index.html +1043 -0
  213. package/templates/vite/.howone/skills/hallmark/site/js/main.js +1175 -0
  214. package/templates/vite/.howone/skills/hallmark/vercel.json +6 -0
  215. package/templates/vite/.howone/skills/howone-sdk/01-architect/01-app-generation.md +101 -0
  216. package/templates/vite/.howone/skills/howone-sdk/02-database/01-schema-design.md +147 -0
  217. package/templates/vite/.howone/skills/howone-sdk/02-database/02-schema-operations.md +96 -0
  218. package/templates/vite/.howone/skills/howone-sdk/02-database/03-data-access-patterns.md +172 -0
  219. package/templates/vite/.howone/skills/howone-sdk/{references → 03-sdk}/01-client-setup.md +3 -3
  220. package/templates/vite/.howone/skills/howone-sdk/{references/04-auth.md → 03-sdk/03-auth.md} +120 -3
  221. package/templates/vite/.howone/skills/howone-sdk/04-ai/.gitkeep +1 -0
  222. package/templates/vite/.howone/skills/howone-sdk/SKILL.md +67 -93
  223. package/templates/vite/.howone/skills/howone-sdk/agents/openai.yaml +3 -3
  224. package/templates/vite/.howone/skills/impeccable/SKILL.md +168 -0
  225. package/templates/vite/.howone/skills/impeccable/agents/impeccable-asset-producer.md +101 -0
  226. package/templates/vite/.howone/skills/impeccable/reference/adapt.md +190 -0
  227. package/templates/vite/.howone/skills/impeccable/reference/animate.md +175 -0
  228. package/templates/vite/.howone/skills/impeccable/reference/audit.md +133 -0
  229. package/templates/vite/.howone/skills/impeccable/reference/bolder.md +113 -0
  230. package/templates/vite/.howone/skills/impeccable/reference/brand.md +118 -0
  231. package/templates/vite/.howone/skills/impeccable/reference/clarify.md +174 -0
  232. package/templates/vite/.howone/skills/impeccable/reference/codex.md +105 -0
  233. package/templates/vite/.howone/skills/impeccable/reference/cognitive-load.md +106 -0
  234. package/templates/vite/.howone/skills/impeccable/reference/color-and-contrast.md +105 -0
  235. package/templates/vite/.howone/skills/impeccable/reference/colorize.md +154 -0
  236. package/templates/vite/.howone/skills/impeccable/reference/craft.md +123 -0
  237. package/templates/vite/.howone/skills/impeccable/reference/critique.md +273 -0
  238. package/templates/vite/.howone/skills/impeccable/reference/delight.md +302 -0
  239. package/templates/vite/.howone/skills/impeccable/reference/distill.md +111 -0
  240. package/templates/vite/.howone/skills/impeccable/reference/document.md +427 -0
  241. package/templates/vite/.howone/skills/impeccable/reference/extract.md +69 -0
  242. package/templates/vite/.howone/skills/impeccable/reference/harden.md +347 -0
  243. package/templates/vite/.howone/skills/impeccable/reference/heuristics-scoring.md +234 -0
  244. package/templates/vite/.howone/skills/impeccable/reference/interaction-design.md +195 -0
  245. package/templates/vite/.howone/skills/impeccable/reference/layout.md +141 -0
  246. package/templates/vite/.howone/skills/impeccable/reference/live.md +622 -0
  247. package/templates/vite/.howone/skills/impeccable/reference/motion-design.md +109 -0
  248. package/templates/vite/.howone/skills/impeccable/reference/onboard.md +234 -0
  249. package/templates/vite/.howone/skills/impeccable/reference/optimize.md +258 -0
  250. package/templates/vite/.howone/skills/impeccable/reference/overdrive.md +130 -0
  251. package/templates/vite/.howone/skills/impeccable/reference/personas.md +179 -0
  252. package/templates/vite/.howone/skills/impeccable/reference/polish.md +242 -0
  253. package/templates/vite/.howone/skills/impeccable/reference/product.md +62 -0
  254. package/templates/vite/.howone/skills/impeccable/reference/quieter.md +99 -0
  255. package/templates/vite/.howone/skills/impeccable/reference/responsive-design.md +114 -0
  256. package/templates/vite/.howone/skills/impeccable/reference/shape.md +165 -0
  257. package/templates/vite/.howone/skills/impeccable/reference/spatial-design.md +100 -0
  258. package/templates/vite/.howone/skills/impeccable/reference/teach.md +156 -0
  259. package/templates/vite/.howone/skills/impeccable/reference/typeset.md +124 -0
  260. package/templates/vite/.howone/skills/impeccable/reference/typography.md +159 -0
  261. package/templates/vite/.howone/skills/impeccable/reference/ux-writing.md +107 -0
  262. package/templates/vite/.howone/skills/impeccable/scripts/cleanup-deprecated.mjs +284 -0
  263. package/templates/vite/.howone/skills/impeccable/scripts/command-metadata.json +94 -0
  264. package/templates/vite/.howone/skills/impeccable/scripts/critique-storage.mjs +242 -0
  265. package/templates/vite/.howone/skills/impeccable/scripts/design-parser.mjs +820 -0
  266. package/templates/vite/.howone/skills/impeccable/scripts/detect-csp.mjs +198 -0
  267. package/templates/vite/.howone/skills/impeccable/scripts/detect.mjs +21 -0
  268. package/templates/vite/.howone/skills/impeccable/scripts/impeccable-paths.mjs +110 -0
  269. package/templates/vite/.howone/skills/impeccable/scripts/is-generated.mjs +69 -0
  270. package/templates/vite/.howone/skills/impeccable/scripts/live-accept.mjs +595 -0
  271. package/templates/vite/.howone/skills/impeccable/scripts/live-browser-session.js +123 -0
  272. package/templates/vite/.howone/skills/impeccable/scripts/live-browser.js +4860 -0
  273. package/templates/vite/.howone/skills/impeccable/scripts/live-complete.mjs +75 -0
  274. package/templates/vite/.howone/skills/impeccable/scripts/live-completion.mjs +18 -0
  275. package/templates/vite/.howone/skills/impeccable/scripts/live-inject.mjs +446 -0
  276. package/templates/vite/.howone/skills/impeccable/scripts/live-poll.mjs +200 -0
  277. package/templates/vite/.howone/skills/impeccable/scripts/live-resume.mjs +48 -0
  278. package/templates/vite/.howone/skills/impeccable/scripts/live-server.mjs +838 -0
  279. package/templates/vite/.howone/skills/impeccable/scripts/live-session-store.mjs +254 -0
  280. package/templates/vite/.howone/skills/impeccable/scripts/live-status.mjs +47 -0
  281. package/templates/vite/.howone/skills/impeccable/scripts/live-wrap.mjs +632 -0
  282. package/templates/vite/.howone/skills/impeccable/scripts/live.mjs +247 -0
  283. package/templates/vite/.howone/skills/impeccable/scripts/load-context.mjs +141 -0
  284. package/templates/vite/.howone/skills/impeccable/scripts/modern-screenshot.umd.js +14 -0
  285. package/templates/vite/.howone/skills/impeccable/scripts/pin.mjs +214 -0
  286. package/templates/vite/AGENTS.md +2 -3
  287. package/templates/vite/package.json +1 -1
  288. /package/templates/vite/.howone/skills/howone-sdk/{references/08-manifest-codegen.md → 01-architect/02-manifest-codegen.md} +0 -0
  289. /package/templates/vite/.howone/skills/howone-sdk/{references → 03-sdk}/02-entity-operations.md +0 -0
  290. /package/templates/vite/.howone/skills/howone-sdk/{references/06-react-integration.md → 03-sdk/04-react-integration.md} +0 -0
  291. /package/templates/vite/.howone/skills/howone-sdk/{references → 03-sdk}/05-file-upload.md +0 -0
  292. /package/templates/vite/.howone/skills/howone-sdk/{references/07-raw-http.md → 03-sdk/06-raw-http.md} +0 -0
  293. /package/templates/vite/.howone/skills/howone-sdk/{references/03-ai-actions.md → 03-sdk/07-ai-action-calls.md} +0 -0
@@ -0,0 +1,6 @@
1
+ {
2
+ "outputDirectory": "site",
3
+ "framework": null,
4
+ "buildCommand": null,
5
+ "installCommand": null
6
+ }
@@ -0,0 +1,101 @@
1
+ # App Generation Architect
2
+
3
+ Use this file to decide the HowOne app implementation path before reading low-level SDK or
4
+ database references.
5
+
6
+ ## Responsibility Split
7
+
8
+ HowOne generated apps have three layers:
9
+
10
+ 1. **Backend contract**: dynamic entities, access rules, indexes, schema versions, and synced
11
+ manifests.
12
+ 2. **SDK binding**: `src/lib/sdk.ts` converts manifests into typed entity and AI clients.
13
+ 3. **Frontend experience**: React/UI code calls the SDK and owns app-specific interaction design.
14
+
15
+ Do not skip the binding layer. The UI should call `src/lib/sdk.ts`, not raw entity names guessed
16
+ from the user prompt.
17
+
18
+ Core source-of-truth rule from the HowOne docs:
19
+
20
+ ```text
21
+ agent proposal != source of truth
22
+ validated backend manifest = source of truth
23
+ generated files = compiler/binding output
24
+ ```
25
+
26
+ The agent proposes structured changes and writes app code. The runtime/schema tools validate,
27
+ apply, version, and sync manifest facts.
28
+
29
+ ## Choose Data Posture First
30
+
31
+ Before designing schema or UI calls, classify the data:
32
+
33
+ | Posture | Backend Access | Frontend Read |
34
+ |---|---|---|
35
+ | Private user data | `authenticated: own`, `public: none` | `howone.entities.Entity.query.mine(...)` |
36
+ | Authenticated shared app data | `authenticated: all`, `public: none` | `howone.entities.Entity.query(...)` |
37
+ | Public list data | `authenticated: all`, `public: list` | `howone.public.entities.Entity.query(...)` |
38
+ | Public scoped share data | usually `authenticated: own`, `public: scoped` | `howone.public.entities.Entity.queryScoped(...)` |
39
+
40
+ If the user says "my todos", "my notes", "per user", "login required", or "data isolation",
41
+ default to private user data.
42
+
43
+ ## Backend Feature Workflow
44
+
45
+ When a request adds persistence or changes data shape:
46
+
47
+ 1. Read `02-database/01-schema-design.md` and `02-database/02-schema-operations.md`.
48
+ 2. Inspect the current schema/manifest.
49
+ 3. Design one complete schema patch for the feature.
50
+ 4. Preview the schema patch.
51
+ 5. Apply the exact previewed operations if risk is acceptable.
52
+ 6. Sync schema artifacts using the returned `next.versionId`.
53
+ 7. Read `.howone/database/manifest.json`.
54
+ 8. Read `01-architect/02-manifest-codegen.md`.
55
+ 9. Update `src/lib/sdk.ts`.
56
+ 10. Read the needed SDK file, usually `03-sdk/02-entity-operations.md` and sometimes `03-sdk/03-auth.md`.
57
+ 11. Update the UI.
58
+ 12. Validate.
59
+
60
+ Do not preview a patch and then execute different single operations. Related schema changes for
61
+ one feature should be grouped into one preview/apply cycle.
62
+
63
+ ## Auth Decision
64
+
65
+ Use hosted auth when the app just needs login:
66
+
67
+ ```tsx
68
+ <HowOneProvider auth="required">
69
+ <App />
70
+ </HowOneProvider>
71
+ ```
72
+
73
+ Use custom in-app auth when the user asks for a designed login page or multiple login methods:
74
+
75
+ ```tsx
76
+ <HowOneProvider auth="none" brand="hidden">
77
+ <App />
78
+ </HowOneProvider>
79
+ ```
80
+
81
+ Custom login must call `howone.auth.setToken(token)` after Email OTP, Phone OTP, Google, or
82
+ GitHub succeeds, then verify the session with `await howone.me({ refresh: true })`.
83
+
84
+ ## Generated Binding Rules
85
+
86
+ - Read manifests after sync, not before.
87
+ - Preserve existing bindings unless the manifest changed.
88
+ - Export explicit `Record`, `Create`, and `Update` types.
89
+ - Do not include system fields in create/update payloads.
90
+ - Do not infer public access from `visibility` alone; inspect `access.public`.
91
+
92
+ ## Common Failure Modes
93
+
94
+ - Repeated login after refresh: app used `auth.isAuthenticated()` as first-load truth or stored
95
+ token outside SDK. Read `03-sdk/03-auth.md`.
96
+ - Data is not isolated: app used `query()` instead of `query.mine()` for `authenticated.read =
97
+ "own"`, or wrote owner fields manually.
98
+ - Public page 401/403: app used authenticated namespace for public content or schema does not
99
+ allow public access.
100
+ - Generated types drift from backend: app edited `src/lib/sdk.ts` from memory instead of synced
101
+ manifest.
@@ -0,0 +1,147 @@
1
+ # Database Architecture Design
2
+
3
+ Use this reference when designing or changing HowOne backend entity schemas. It summarizes
4
+ the contract in `docs/dynamic-entity-architecture.zh.md` for app-building agents.
5
+
6
+ This reference is for **backend entity design**. For schema tool flow, read
7
+ `02-database/02-schema-operations.md`. For frontend read/write calls, read
8
+ `02-database/03-data-access-patterns.md` and `03-sdk/02-entity-operations.md` after schema
9
+ artifacts have been synced.
10
+
11
+ ## Core Model
12
+
13
+ An entity is a versioned database contract, not a loose JSON form. Design all relevant parts:
14
+
15
+ ```ts
16
+ type EntityContract = {
17
+ name: string
18
+ type: 'object'
19
+ description?: string
20
+ visibility: 'private' | 'public'
21
+ properties: Record<string, EntityField>
22
+ required?: string[]
23
+ access: {
24
+ authenticated?: AuthenticatedAccess
25
+ public?: PublicAccess
26
+ }
27
+ indexes?: EntityIndex[]
28
+ relations?: Record<string, EntityRelation>
29
+ presentation?: EntityPresentation
30
+ lifecycle?: EntityLifecycle
31
+ performance?: EntityPerformance
32
+ }
33
+ ```
34
+
35
+ Every schema change should preserve this mental split:
36
+
37
+ - `properties` and `required` define payload validation.
38
+ - `access` defines who can read/write and how ownership is derived.
39
+ - `indexes` and `performance` define expected query paths.
40
+ - `relations` defines valid `include` names.
41
+ - `presentation` helps admin UI and SDK generation.
42
+ - schema versions track the contract applied when future records are written.
43
+
44
+ ## Access Contract
45
+
46
+ Every entity should explicitly define both authenticated and public access. Choose the data posture
47
+ in `02-database/03-data-access-patterns.md`, then encode it in the `access` block here.
48
+
49
+ ## Field Design Rules
50
+
51
+ - Entity and field names must match `^[a-zA-Z_][a-zA-Z0-9_]*$`.
52
+ - Do not define system fields as business fields: `id`, `_id`, `created_date`, `updated_date`,
53
+ `created_by_id`, `schema_version_id`, `schema_version_number`, `is_sample`.
54
+ - Required fields must be supplied on create unless the field has `default`, `defaultValue`, or
55
+ `autoGenerate`.
56
+ - Use explicit enum fields for UI status values instead of free-form strings when choices are known.
57
+ - Use ISO strings for date/datetime fields at the SDK boundary.
58
+ - Complex JSON Schema validation may need frontend validation too; do not assume every nested
59
+ constraint is fully enforced by backend runtime.
60
+
61
+ ## Index and Performance Rules
62
+
63
+ Add indexes for the query paths the UI will actually use:
64
+
65
+ ```json
66
+ {
67
+ "indexes": [
68
+ {
69
+ "name": "owner_status_updated",
70
+ "fields": ["status", "updatedDate"],
71
+ "scope": "owner",
72
+ "order": { "updatedDate": "desc" }
73
+ }
74
+ ],
75
+ "performance": {
76
+ "defaultLimit": 20,
77
+ "maxLimit": 100,
78
+ "allowedSorts": ["createdDate", "updatedDate"]
79
+ }
80
+ }
81
+ ```
82
+
83
+ Guidelines:
84
+
85
+ - Private user lists usually need owner-scoped indexes.
86
+ - Public list pages need `access.public.allowedFilters` and `access.public.allowedSorts`.
87
+ - `performance.allowedSorts` informs SDK/admin generation; public sort enforcement comes from
88
+ `access.public.allowedSorts`.
89
+
90
+ ## Todo Example
91
+
92
+ For a personal Todo app:
93
+
94
+ ```json
95
+ {
96
+ "name": "Todo",
97
+ "type": "object",
98
+ "description": "User-owned todo item",
99
+ "visibility": "private",
100
+ "properties": {
101
+ "text": { "type": "string" },
102
+ "completed": { "type": "boolean", "default": false }
103
+ },
104
+ "required": ["text"],
105
+ "access": {
106
+ "authenticated": {
107
+ "read": "own",
108
+ "create": "own",
109
+ "update": "own",
110
+ "delete": "own"
111
+ },
112
+ "public": {
113
+ "read": "none",
114
+ "create": "none",
115
+ "update": "none",
116
+ "delete": "none"
117
+ }
118
+ },
119
+ "indexes": [
120
+ {
121
+ "name": "owner_updated",
122
+ "fields": ["updatedDate"],
123
+ "scope": "owner",
124
+ "order": { "updatedDate": "desc" }
125
+ }
126
+ ],
127
+ "performance": {
128
+ "defaultLimit": 50,
129
+ "maxLimit": 100,
130
+ "allowedSorts": ["createdDate", "updatedDate"]
131
+ },
132
+ "presentation": {
133
+ "titleField": "text",
134
+ "defaultSort": { "field": "updatedDate", "order": "desc" },
135
+ "listFields": ["text", "completed", "updatedDate"]
136
+ }
137
+ }
138
+ ```
139
+
140
+ Corresponding frontend read:
141
+
142
+ ```ts
143
+ const result = await howone.entities.Todo.query.mine({
144
+ page: { number: 1, size: 50 },
145
+ orderBy: { updatedDate: 'desc' },
146
+ })
147
+ ```
@@ -0,0 +1,96 @@
1
+ # Schema Operations
2
+
3
+ Use this reference when applying backend entity schema changes through HowOne runtime tools.
4
+
5
+ ## Source Of Truth
6
+
7
+ ```text
8
+ agent proposal != source of truth
9
+ validated backend manifest = source of truth
10
+ synced .howone/database files = local copy of a backend version
11
+ src/lib/sdk.ts = app binding generated from synced manifest
12
+ ```
13
+
14
+ Do not hand-write `.howone/database` files. Sync them from a concrete backend schema version.
15
+
16
+ ## Preferred Patch Flow
17
+
18
+ For feature-level schema work:
19
+
20
+ 1. Inspect current schema definitions or schema state.
21
+ 2. Design one complete patch containing all related operations.
22
+ 3. Preview the patch.
23
+ 4. Apply the exact same operations if risk is acceptable.
24
+ 5. Sync schema artifacts using the returned `next.versionId`.
25
+ 6. Read `.howone/database/manifest.json`.
26
+ 7. Update `src/lib/sdk.ts` from the manifest.
27
+ 8. Update frontend calls according to access.
28
+ 9. Validate.
29
+
30
+ Do not preview a patch and then apply a different set of single operations.
31
+
32
+ ## Operation Types
33
+
34
+ Supported schema operations:
35
+
36
+ | Type | Purpose |
37
+ |---|---|
38
+ | `list_entities` | List current entity definitions. |
39
+ | `get_entity` | Read one entity definition before modifying it. |
40
+ | `create_entity` | Create a new entity contract. |
41
+ | `update_entity` | Update entity metadata such as description, visibility, access, indexes, relations, presentation, lifecycle, performance. |
42
+ | `delete_entity` | Soft or hard delete an entity definition. |
43
+ | `add_field` | Add a new field. |
44
+ | `update_field` | Patch an existing field definition. |
45
+ | `delete_field` | Remove a field from schema, optionally from historical data. |
46
+ | `set_field_required` | Add a field to top-level `required`. |
47
+ | `unset_field_required` | Remove a field from top-level `required`. |
48
+
49
+ ## Payload Rules
50
+
51
+ - `entityName` is required for every operation except `list_entities`.
52
+ - `payload.properties` is required for `create_entity`.
53
+ - `payload.required` must only contain fields that exist in `properties`.
54
+ - `add_field` should use `{ fieldName, field, required }`.
55
+ - `update_field` should use `{ fieldName, patch, required? }`.
56
+ - `delete_field` should use `{ fieldName, removeFromData: false }` by default.
57
+ - `required` belongs to the entity top level, not inside individual field definitions.
58
+
59
+ ## Risk Guardrails
60
+
61
+ - Default entity deletion to soft delete.
62
+ - Use hard delete only when the user explicitly asks.
63
+ - Use `deleteData: true` only when the user explicitly asks to delete all records too.
64
+ - Use `removeFromData: true` only after explicit confirmation.
65
+ - Adding a required field to an existing entity should include a default when possible.
66
+ - Changing a field type is high risk; inspect current schema and confirm intent before applying.
67
+ - Schema restore creates a new restore version; it does not roll business data back.
68
+
69
+ ## Version Rules
70
+
71
+ Schema versions manage entity definitions only. They do not roll back `entitydatashares`.
72
+
73
+ After apply, use the returned version context:
74
+
75
+ ```json
76
+ {
77
+ "next": {
78
+ "recommendedAction": "sync_schema_artifacts",
79
+ "versionId": "dbv_next"
80
+ }
81
+ }
82
+ ```
83
+
84
+ The synced manifest must be read before updating SDK bindings.
85
+
86
+ ## Narrow Edit Flow
87
+
88
+ Single operations are acceptable for small explicit edits, such as "add priority to Todo":
89
+
90
+ 1. `get_entity`
91
+ 2. Check whether field already exists.
92
+ 3. Preview/apply one `add_field` patch or use the schema operation fallback.
93
+ 4. Sync artifacts.
94
+ 5. Update SDK/UI.
95
+
96
+ For broader features, batch operations into one patch.
@@ -0,0 +1,172 @@
1
+ # Data Access Patterns
2
+
3
+ Use this reference to connect backend `access` design to frontend SDK calls.
4
+
5
+ ## Private Per-User Data
6
+
7
+ Use for todos, notes, journals, saved generations, personal files, dashboards, and user-owned
8
+ settings.
9
+
10
+ Schema posture:
11
+
12
+ ```json
13
+ {
14
+ "visibility": "private",
15
+ "access": {
16
+ "authenticated": {
17
+ "read": "own",
18
+ "create": "own",
19
+ "update": "own",
20
+ "delete": "own"
21
+ },
22
+ "public": {
23
+ "read": "none",
24
+ "create": "none",
25
+ "update": "none",
26
+ "delete": "none"
27
+ }
28
+ }
29
+ }
30
+ ```
31
+
32
+ Frontend calls:
33
+
34
+ ```ts
35
+ const result = await howone.entities.Todo.query.mine({
36
+ page: { number: 1, size: 50 },
37
+ orderBy: { updatedDate: 'desc' },
38
+ })
39
+ ```
40
+
41
+ Rules:
42
+
43
+ - Use `query.mine(...)` for list pages.
44
+ - Use authenticated `create/update/delete`.
45
+ - Do not pass owner fields such as `ownerId`, `created_by_id`, `createdById`,
46
+ `created_by_user_id`, or `puid`.
47
+
48
+ ## Authenticated Shared Data
49
+
50
+ Use when logged-in users in the app should see shared records.
51
+
52
+ Schema posture:
53
+
54
+ ```json
55
+ {
56
+ "visibility": "private",
57
+ "access": {
58
+ "authenticated": {
59
+ "read": "all",
60
+ "create": "all",
61
+ "update": "all",
62
+ "delete": "all"
63
+ },
64
+ "public": {
65
+ "read": "none",
66
+ "create": "none",
67
+ "update": "none",
68
+ "delete": "none"
69
+ }
70
+ }
71
+ }
72
+ ```
73
+
74
+ Frontend calls:
75
+
76
+ ```ts
77
+ const result = await howone.entities.Project.query({
78
+ page: { number: 1, size: 20 },
79
+ orderBy: { updatedDate: 'desc' },
80
+ })
81
+ ```
82
+
83
+ Use `query(...)`, not `query.mine(...)`.
84
+
85
+ ## Public Read-Only Content
86
+
87
+ Use for public articles, templates, catalogs, profiles, or landing-page content.
88
+
89
+ Schema posture:
90
+
91
+ ```json
92
+ {
93
+ "visibility": "public",
94
+ "access": {
95
+ "authenticated": {
96
+ "read": "all",
97
+ "create": "all",
98
+ "update": "all",
99
+ "delete": "all"
100
+ },
101
+ "public": {
102
+ "read": "list",
103
+ "create": "none",
104
+ "update": "none",
105
+ "delete": "none",
106
+ "allowedFilters": ["slug", "status", "category"],
107
+ "allowedSorts": ["publishedAt", "updatedDate"],
108
+ "defaultLimit": 20,
109
+ "maxLimit": 100
110
+ }
111
+ }
112
+ }
113
+ ```
114
+
115
+ Frontend calls:
116
+
117
+ ```ts
118
+ const result = await howone.public.entities.Article.query({
119
+ where: { status: 'published' },
120
+ page: { number: 1, size: 20 },
121
+ orderBy: { publishedAt: 'desc' },
122
+ })
123
+ ```
124
+
125
+ Public query types should expose only allowed filters and allowed sorts.
126
+
127
+ ## Public Scoped Share Pages
128
+
129
+ Use for public URLs that expose one owner-scoped record, such as QR pages or profile pages.
130
+
131
+ Schema posture:
132
+
133
+ ```json
134
+ {
135
+ "visibility": "public",
136
+ "access": {
137
+ "authenticated": {
138
+ "read": "own",
139
+ "create": "own",
140
+ "update": "own",
141
+ "delete": "own"
142
+ },
143
+ "public": {
144
+ "read": "scoped",
145
+ "create": "none",
146
+ "update": "none",
147
+ "delete": "none",
148
+ "requiredScopes": ["ownerId", "slug"],
149
+ "allowedFilters": ["slug", "active"],
150
+ "allowedSorts": ["updatedDate"],
151
+ "defaultLimit": 1,
152
+ "maxLimit": 10
153
+ }
154
+ }
155
+ }
156
+ ```
157
+
158
+ Frontend calls:
159
+
160
+ ```ts
161
+ const result = await howone.public.entities.QrProfile.queryScoped({
162
+ where: { ownerId, slug, active: true },
163
+ page: { number: 1, size: 1 },
164
+ })
165
+ ```
166
+
167
+ Rules:
168
+
169
+ - Pass every `requiredScopes` field.
170
+ - Do not use current user's `puid` as public owner scope unless schema explicitly stores that
171
+ value as the public scope.
172
+ - Public scoped reads must stay inside `howone.public.entities.*`.
@@ -86,7 +86,7 @@ client.schema.restore(versionId, reason?)
86
86
  // AI action runner (low-level)
87
87
  client.ai: AiClient
88
88
 
89
- // HTTP utilities (low-level — see 07-raw-http.md)
89
+ // HTTP utilities (low-level — see 03-sdk/06-raw-http.md)
90
90
  client.raw: RawHttpClient
91
91
 
92
92
  // File upload
@@ -134,7 +134,7 @@ const client = createClient({
134
134
  })
135
135
 
136
136
  // ── 2. Define entity types & bind ────────────────────────────
137
- // (see 02-entity-operations.md for full details)
137
+ // (see 03-sdk/02-entity-operations.md for full details)
138
138
  export type NoteRecord = EntityRecord & { title: string; body: string }
139
139
  export type NoteCreate = { title: string; body: string }
140
140
  export type NoteUpdate = Partial<NoteCreate>
@@ -144,7 +144,7 @@ export const entities = defineEntities({
144
144
  })
145
145
 
146
146
  // ── 3. Define AI actions ─────────────────────────────────────
147
- // (see 03-ai-actions.md for full details)
147
+ // (see 03-sdk/07-ai-action-calls.md for full details)
148
148
  export const summarizeInputSchema = z.object({ noteId: z.string() })
149
149
  export type SummarizeInput = z.infer<typeof summarizeInputSchema>
150
150
 
@@ -7,7 +7,7 @@ HowOne has two distinct auth layers:
7
7
  1. **Client-level auth** (`client.auth.*`) — low-level token management, login/logout redirects.
8
8
  2. **HowOne Auth service** (`unifiedAuth`, standalone functions) — headless OTP and OAuth flows for building custom login UIs.
9
9
 
10
- For React auth UI, see `references/06-react-integration.md` (`HowOneProvider`, `useHowoneContext`).
10
+ For React auth UI, see `03-sdk/04-react-integration.md` (`HowOneProvider`, `useHowoneContext`).
11
11
 
12
12
  ---
13
13
 
@@ -113,6 +113,15 @@ function useCurrentUser() {
113
113
 
114
114
  Use `sendEmailVerificationCode` → `loginWithEmailCode` to build a custom email login form.
115
115
 
116
+ The SDK normalizes HowOne auth envelopes. Both of these backend response shapes are valid:
117
+
118
+ ```ts
119
+ { success: true, token: 'jwt...' }
120
+ { code: 0, data: { success: true, token: 'jwt...' } }
121
+ ```
122
+
123
+ After normalization, read `result.success`, `result.token`, and `result.message` from the top level.
124
+
116
125
  ### Standalone functions (imported directly)
117
126
 
118
127
  ```ts
@@ -145,7 +154,7 @@ const loginResult = await loginWithEmailCode(
145
154
 
146
155
  if (loginResult.success && loginResult.token) {
147
156
  howone.auth.setToken(loginResult.token)
148
- // Now client.auth.isAuthenticated() === true
157
+ // Persists the token and updates the active SDK client.
149
158
  }
150
159
  ```
151
160
 
@@ -423,6 +432,112 @@ async function checkToken(token: string) {
423
432
  }
424
433
  ```
425
434
 
435
+ ## Custom Login UI Pattern
436
+
437
+ Use this when the app should show its own login page instead of redirecting to `/howone/auth`.
438
+
439
+ ### SDK setup
440
+
441
+ ```ts
442
+ // src/lib/sdk.ts
443
+ import { createClient } from '@howone/sdk'
444
+
445
+ const client = createClient({
446
+ projectId: import.meta.env.VITE_HOWONE_PROJECT_ID,
447
+ env: import.meta.env.VITE_HOWONE_ENV,
448
+ auth: { mode: 'managed' },
449
+ })
450
+
451
+ export default client
452
+ ```
453
+
454
+ `managed` is still correct for most custom login pages because `howone.auth.setToken(token)`
455
+ persists the token through the SDK auth store. Use `headless` only when an external auth
456
+ provider owns token storage.
457
+
458
+ ### Provider setup
459
+
460
+ ```tsx
461
+ <HowOneProvider auth="none" brand="hidden">
462
+ <App />
463
+ </HowOneProvider>
464
+ ```
465
+
466
+ `auth="none"` disables the provider redirect so the app can render its own login form.
467
+
468
+ ### App startup
469
+
470
+ ```tsx
471
+ useEffect(() => {
472
+ let cancelled = false
473
+
474
+ howone.me()
475
+ .then((user) => {
476
+ if (!cancelled) setUser(user)
477
+ })
478
+ .catch(() => {
479
+ if (!cancelled) setUser(null)
480
+ })
481
+ .finally(() => {
482
+ if (!cancelled) setLoading(false)
483
+ })
484
+
485
+ return () => {
486
+ cancelled = true
487
+ }
488
+ }, [])
489
+ ```
490
+
491
+ Do not use `howone.auth.isAuthenticated()` as the first-load gate for protected UI. It is a
492
+ synchronous token presence check. `howone.me()` verifies/restores the current session and is the
493
+ right source of truth for initial render.
494
+
495
+ ### Login success
496
+
497
+ ```ts
498
+ const result = await loginWithEmailCode(email, code)
499
+ if (!result.success || !result.token) {
500
+ setError(result.message ?? 'Invalid code')
501
+ return
502
+ }
503
+
504
+ howone.auth.setToken(result.token)
505
+ const user = await howone.me({ refresh: true })
506
+ setUser(user)
507
+ ```
508
+
509
+ Use the same pattern for phone OTP and OAuth popup results.
510
+
511
+ ### Logout
512
+
513
+ ```ts
514
+ const token = howone.auth.getToken()
515
+ if (token) await unifiedAuth.logout(token)
516
+ howone.auth.logout()
517
+ setUser(null)
518
+ ```
519
+
520
+ `howone.auth.logout()` clears the SDK token store and active client token.
521
+
522
+ ## Headless External Auth Pattern
523
+
524
+ Use `auth.mode = "headless"` only when another auth system owns the token lifecycle.
525
+
526
+ ```ts
527
+ const client = createClient({
528
+ projectId: import.meta.env.VITE_HOWONE_PROJECT_ID,
529
+ env: import.meta.env.VITE_HOWONE_ENV,
530
+ auth: {
531
+ mode: 'headless',
532
+ getToken: async () => externalAuth.getJwt(),
533
+ tokenCacheMs: 30_000,
534
+ },
535
+ })
536
+ ```
537
+
538
+ Do not invent a second localStorage key for HowOne OTP/OAuth login. Use `howone.auth.setToken`
539
+ unless the user explicitly asks to integrate an external auth provider.
540
+
426
541
  ---
427
542
 
428
543
  ## Logout
@@ -495,5 +610,7 @@ const client = createClient({
495
610
  |---|---|
496
611
  | Phone number without country code: `'13800138000'` | Use E.164: `'+8613800138000'` |
497
612
  | Using `loginWithEmailCode` without first calling `sendEmailVerificationCode` | Always send the code first |
498
- | Setting token manually when using `auth.mode: 'managed'` | Use `managed` mode which handles storage, or switch to `headless` |
613
+ | Hand-writing a separate localStorage token key for HowOne OTP/OAuth | Use `howone.auth.setToken(token)` |
614
+ | Using `auth.isAuthenticated()` to decide first render after refresh | Use `await howone.me()` |
615
+ | Setting `HowOneProvider auth="required"` with a custom in-app login form | Use `auth="none"` so the provider does not redirect |
499
616
  | Calling `unifiedAuth.logout()` without the token argument | Pass `token`: `await unifiedAuth.logout(howone.auth.getToken()!)` |