howone 0.1.20 → 0.1.23

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 (298) hide show
  1. package/package.json +1 -1
  2. package/templates/nextjs/lib/sdk.ts +3 -0
  3. package/templates/vite/.howone/skills/hallmark/LICENSE +21 -0
  4. package/templates/vite/.howone/skills/hallmark/README.md +147 -0
  5. package/templates/vite/.howone/skills/hallmark/ROADMAP.md +201 -0
  6. package/templates/vite/.howone/skills/hallmark/SKILL.md +551 -0
  7. package/templates/vite/.howone/skills/hallmark/docs/recipes.md +186 -0
  8. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-anya.jpg +0 -0
  9. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-bananastudio.jpg +0 -0
  10. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-hyperlane.jpg +0 -0
  11. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-najm.jpg +0 -0
  12. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-slow-pour.jpg +0 -0
  13. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-soroe.jpg +0 -0
  14. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-tally.jpg +0 -0
  15. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-wayfare.jpg +0 -0
  16. package/templates/vite/.howone/skills/hallmark/docs/study-examples.md +176 -0
  17. package/templates/vite/.howone/skills/hallmark/docs/talk-slides.md +364 -0
  18. package/templates/vite/.howone/skills/hallmark/package.json +36 -0
  19. package/templates/vite/.howone/skills/hallmark/references/anti-patterns.md +412 -0
  20. package/templates/vite/.howone/skills/hallmark/references/assets.md +399 -0
  21. package/templates/vite/.howone/skills/hallmark/references/color.md +95 -0
  22. package/templates/vite/.howone/skills/hallmark/references/component-cookbook.md +256 -0
  23. package/templates/vite/.howone/skills/hallmark/references/components/c1-outlined-chip.md +12 -0
  24. package/templates/vite/.howone/skills/hallmark/references/components/c2-inline-form-as-cta.md +16 -0
  25. package/templates/vite/.howone/skills/hallmark/references/components/c3-typographic-link.md +8 -0
  26. package/templates/vite/.howone/skills/hallmark/references/components/c4-sticky-bottom-bar.md +16 -0
  27. package/templates/vite/.howone/skills/hallmark/references/components/f1-bento-grid.md +20 -0
  28. package/templates/vite/.howone/skills/hallmark/references/components/f2-sticky-scroll-stack.md +20 -0
  29. package/templates/vite/.howone/skills/hallmark/references/components/f3-tabular-spec-sheet.md +11 -0
  30. package/templates/vite/.howone/skills/hallmark/references/components/f4-step-sequence.md +11 -0
  31. package/templates/vite/.howone/skills/hallmark/references/components/f5-annotated-screenshot.md +11 -0
  32. package/templates/vite/.howone/skills/hallmark/references/components/f6-product-card-grid.md +41 -0
  33. package/templates/vite/.howone/skills/hallmark/references/components/ft1-mast-headed.md +13 -0
  34. package/templates/vite/.howone/skills/hallmark/references/components/ft2-inline-rule-single-line.md +10 -0
  35. package/templates/vite/.howone/skills/hallmark/references/components/ft3-index-style-category-list.md +12 -0
  36. package/templates/vite/.howone/skills/hallmark/references/components/ft4-dense-typographic.md +10 -0
  37. package/templates/vite/.howone/skills/hallmark/references/components/ft5-statement.md +21 -0
  38. package/templates/vite/.howone/skills/hallmark/references/components/ft6-letter-close.md +19 -0
  39. package/templates/vite/.howone/skills/hallmark/references/components/ft7-newsletter-first.md +27 -0
  40. package/templates/vite/.howone/skills/hallmark/references/components/ft8-marquee-scroll.md +25 -0
  41. package/templates/vite/.howone/skills/hallmark/references/components/h1-marquee.md +15 -0
  42. package/templates/vite/.howone/skills/hallmark/references/components/h2-split-diptych.md +15 -0
  43. package/templates/vite/.howone/skills/hallmark/references/components/h3-quote-led.md +11 -0
  44. package/templates/vite/.howone/skills/hallmark/references/components/h4-stat-led.md +14 -0
  45. package/templates/vite/.howone/skills/hallmark/references/components/h5-letter-hero.md +11 -0
  46. package/templates/vite/.howone/skills/hallmark/references/components/h6-photographic-fold.md +16 -0
  47. package/templates/vite/.howone/skills/hallmark/references/components/h7-demo-video-clipped-by-viewport-edge.md +27 -0
  48. package/templates/vite/.howone/skills/hallmark/references/components/h8-mockup-split-browser-framed.md +23 -0
  49. package/templates/vite/.howone/skills/hallmark/references/components/h9-custom-illustration-centerpiece.md +27 -0
  50. package/templates/vite/.howone/skills/hallmark/references/components/n1-wordmark-2-links.md +12 -0
  51. package/templates/vite/.howone/skills/hallmark/references/components/n10-floating-on-scroll-morph.md +19 -0
  52. package/templates/vite/.howone/skills/hallmark/references/components/n2-floating-chip.md +14 -0
  53. package/templates/vite/.howone/skills/hallmark/references/components/n3-side-rail.md +14 -0
  54. package/templates/vite/.howone/skills/hallmark/references/components/n4-hidden-behind-k.md +9 -0
  55. package/templates/vite/.howone/skills/hallmark/references/components/n5-floating-pill.md +28 -0
  56. package/templates/vite/.howone/skills/hallmark/references/components/n6-newspaper-masthead.md +24 -0
  57. package/templates/vite/.howone/skills/hallmark/references/components/n7-brutal-slab.md +22 -0
  58. package/templates/vite/.howone/skills/hallmark/references/components/n8-terminal-command.md +21 -0
  59. package/templates/vite/.howone/skills/hallmark/references/components/n9-edge-aligned-minimal.md +17 -0
  60. package/templates/vite/.howone/skills/hallmark/references/components/s1-left-margin-numbered.md +15 -0
  61. package/templates/vite/.howone/skills/hallmark/references/components/s2-hanging.md +13 -0
  62. package/templates/vite/.howone/skills/hallmark/references/components/s3-sticky-pinned.md +19 -0
  63. package/templates/vite/.howone/skills/hallmark/references/components/s4-inline-no-break.md +11 -0
  64. package/templates/vite/.howone/skills/hallmark/references/components/s5-bottom-anchored.md +13 -0
  65. package/templates/vite/.howone/skills/hallmark/references/components/t1-pull-quote-with-marginalia.md +12 -0
  66. package/templates/vite/.howone/skills/hallmark/references/components/t2-logo-wall-hairline.md +19 -0
  67. package/templates/vite/.howone/skills/hallmark/references/components/t3-single-huge-quote.md +11 -0
  68. package/templates/vite/.howone/skills/hallmark/references/components/t4-numbered-stat-strip.md +14 -0
  69. package/templates/vite/.howone/skills/hallmark/references/contract.md +24 -0
  70. package/templates/vite/.howone/skills/hallmark/references/copy.md +182 -0
  71. package/templates/vite/.howone/skills/hallmark/references/custom-craft.md +626 -0
  72. package/templates/vite/.howone/skills/hallmark/references/custom-theme.md +329 -0
  73. package/templates/vite/.howone/skills/hallmark/references/design-md.md +116 -0
  74. package/templates/vite/.howone/skills/hallmark/references/export-formats.md +328 -0
  75. package/templates/vite/.howone/skills/hallmark/references/floating-nav.md +89 -0
  76. package/templates/vite/.howone/skills/hallmark/references/genres/atmospheric.md +65 -0
  77. package/templates/vite/.howone/skills/hallmark/references/genres/editorial.md +70 -0
  78. package/templates/vite/.howone/skills/hallmark/references/genres/modern-minimal.md +67 -0
  79. package/templates/vite/.howone/skills/hallmark/references/genres/playful.md +65 -0
  80. package/templates/vite/.howone/skills/hallmark/references/hero-enrichment.md +474 -0
  81. package/templates/vite/.howone/skills/hallmark/references/imagery-kit.md +170 -0
  82. package/templates/vite/.howone/skills/hallmark/references/interaction-and-states.md +207 -0
  83. package/templates/vite/.howone/skills/hallmark/references/layout-and-space.md +111 -0
  84. package/templates/vite/.howone/skills/hallmark/references/macrostructures/01-bento-grid.md +35 -0
  85. package/templates/vite/.howone/skills/hallmark/references/macrostructures/02-long-document.md +34 -0
  86. package/templates/vite/.howone/skills/hallmark/references/macrostructures/03-marquee-hero.md +31 -0
  87. package/templates/vite/.howone/skills/hallmark/references/macrostructures/04-stat-led.md +32 -0
  88. package/templates/vite/.howone/skills/hallmark/references/macrostructures/05-workbench.md +32 -0
  89. package/templates/vite/.howone/skills/hallmark/references/macrostructures/06-conversational-faq.md +33 -0
  90. package/templates/vite/.howone/skills/hallmark/references/macrostructures/07-manifesto.md +32 -0
  91. package/templates/vite/.howone/skills/hallmark/references/macrostructures/08-photographic.md +34 -0
  92. package/templates/vite/.howone/skills/hallmark/references/macrostructures/09-quote-led.md +32 -0
  93. package/templates/vite/.howone/skills/hallmark/references/macrostructures/10-specimen.md +32 -0
  94. package/templates/vite/.howone/skills/hallmark/references/macrostructures/11-catalogue.md +23 -0
  95. package/templates/vite/.howone/skills/hallmark/references/macrostructures/12-letter.md +23 -0
  96. package/templates/vite/.howone/skills/hallmark/references/macrostructures/13-index-first.md +23 -0
  97. package/templates/vite/.howone/skills/hallmark/references/macrostructures/14-narrative-workflow.md +23 -0
  98. package/templates/vite/.howone/skills/hallmark/references/macrostructures/15-split-studio.md +23 -0
  99. package/templates/vite/.howone/skills/hallmark/references/macrostructures/16-feature-stack.md +23 -0
  100. package/templates/vite/.howone/skills/hallmark/references/macrostructures/17-type-specimen.md +23 -0
  101. package/templates/vite/.howone/skills/hallmark/references/macrostructures/18-portfolio-grid.md +23 -0
  102. package/templates/vite/.howone/skills/hallmark/references/macrostructures/19-map-diagram.md +23 -0
  103. package/templates/vite/.howone/skills/hallmark/references/macrostructures/20-ecosystem-index.md +23 -0
  104. package/templates/vite/.howone/skills/hallmark/references/macrostructures/21-component-playground.md +23 -0
  105. package/templates/vite/.howone/skills/hallmark/references/macrostructures.md +89 -0
  106. package/templates/vite/.howone/skills/hallmark/references/microinteractions.md +260 -0
  107. package/templates/vite/.howone/skills/hallmark/references/motion.md +109 -0
  108. package/templates/vite/.howone/skills/hallmark/references/preview-examples.md +49 -0
  109. package/templates/vite/.howone/skills/hallmark/references/responsive.md +138 -0
  110. package/templates/vite/.howone/skills/hallmark/references/slop-test.md +205 -0
  111. package/templates/vite/.howone/skills/hallmark/references/structure.md +164 -0
  112. package/templates/vite/.howone/skills/hallmark/references/study.md +486 -0
  113. package/templates/vite/.howone/skills/hallmark/references/typography.md +243 -0
  114. package/templates/vite/.howone/skills/hallmark/references/verbs/audit.md +25 -0
  115. package/templates/vite/.howone/skills/hallmark/references/verbs/redesign.md +269 -0
  116. package/templates/vite/.howone/skills/hallmark/site/OG-hallmark.png +0 -0
  117. package/templates/vite/.howone/skills/hallmark/site/_tests/01-tide-podcast/brief.md +71 -0
  118. package/templates/vite/.howone/skills/hallmark/site/_tests/01-tide-podcast/index.html +64 -0
  119. package/templates/vite/.howone/skills/hallmark/site/_tests/01-tide-podcast/style.css +240 -0
  120. package/templates/vite/.howone/skills/hallmark/site/_tests/02-streampipe-cli/brief.md +65 -0
  121. package/templates/vite/.howone/skills/hallmark/site/_tests/02-streampipe-cli/index.html +105 -0
  122. package/templates/vite/.howone/skills/hallmark/site/_tests/02-streampipe-cli/style.css +250 -0
  123. package/templates/vite/.howone/skills/hallmark/site/_tests/03-maple-bakery/brief.md +64 -0
  124. package/templates/vite/.howone/skills/hallmark/site/_tests/03-maple-bakery/index.html +131 -0
  125. package/templates/vite/.howone/skills/hallmark/site/_tests/03-maple-bakery/style.css +240 -0
  126. package/templates/vite/.howone/skills/hallmark/site/_tests/04-meridian-manifesto/brief.md +67 -0
  127. package/templates/vite/.howone/skills/hallmark/site/_tests/04-meridian-manifesto/index.html +86 -0
  128. package/templates/vite/.howone/skills/hallmark/site/_tests/04-meridian-manifesto/style.css +262 -0
  129. package/templates/vite/.howone/skills/hallmark/site/_tests/05-tracejam-saas/brief.md +63 -0
  130. package/templates/vite/.howone/skills/hallmark/site/_tests/05-tracejam-saas/index.html +167 -0
  131. package/templates/vite/.howone/skills/hallmark/site/_tests/05-tracejam-saas/style.css +457 -0
  132. package/templates/vite/.howone/skills/hallmark/site/_tests/06-anya-portfolio/brief.md +65 -0
  133. package/templates/vite/.howone/skills/hallmark/site/_tests/06-anya-portfolio/index.html +159 -0
  134. package/templates/vite/.howone/skills/hallmark/site/_tests/06-anya-portfolio/style.css +288 -0
  135. package/templates/vite/.howone/skills/hallmark/site/_tests/07-foundry-compliance/brief.md +64 -0
  136. package/templates/vite/.howone/skills/hallmark/site/_tests/07-foundry-compliance/index.html +146 -0
  137. package/templates/vite/.howone/skills/hallmark/site/_tests/07-foundry-compliance/style.css +484 -0
  138. package/templates/vite/.howone/skills/hallmark/site/_tests/08-cohort-courses/brief.md +64 -0
  139. package/templates/vite/.howone/skills/hallmark/site/_tests/08-cohort-courses/index.html +116 -0
  140. package/templates/vite/.howone/skills/hallmark/site/_tests/08-cohort-courses/style.css +354 -0
  141. package/templates/vite/.howone/skills/hallmark/site/_tests/09-slow-pour/index.html +638 -0
  142. package/templates/vite/.howone/skills/hallmark/site/_tests/10-owl-hours/index.html +515 -0
  143. package/templates/vite/.howone/skills/hallmark/site/_tests/11-soroe-ceramics/index.html +515 -0
  144. package/templates/vite/.howone/skills/hallmark/site/_tests/12-loafer/index.html +608 -0
  145. package/templates/vite/.howone/skills/hallmark/site/_tests/13-alma/index.html +587 -0
  146. package/templates/vite/.howone/skills/hallmark/site/_tests/README.md +157 -0
  147. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/BananaStudio-loop.mp4 +0 -0
  148. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/BananaStudio-still.jpg +0 -0
  149. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Hyperlane-example.mp4 +0 -0
  150. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Hyperlane-still.jpg +0 -0
  151. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Najm-loop.mp4 +0 -0
  152. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Najm-still.jpg +0 -0
  153. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Podcast-loop.mp4 +0 -0
  154. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/SaaS-loop.mp4 +0 -0
  155. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/SaaS-still.jpg +0 -0
  156. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Soroe-loop.mp4 +0 -0
  157. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Soroe-still.jpg +0 -0
  158. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/after-quiet-hour.png +0 -0
  159. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/anya-loop.mp4 +0 -0
  160. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/anya-still.jpg +0 -0
  161. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/audit-example.png +0 -0
  162. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/before-quiet-hour.png +0 -0
  163. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/example-redesign-uractivation.png +0 -0
  164. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/slow-pour-loop.mp4 +0 -0
  165. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/slow-pour-still.jpg +0 -0
  166. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/study-example.png +0 -0
  167. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/uractivation-after-loop.mp4 +0 -0
  168. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/wayfare-loop.mp4 +0 -0
  169. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/wayfare-still.jpg +0 -0
  170. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/01-coffeebox/index.html +77 -0
  171. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/01-coffeebox/style.css +238 -0
  172. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/02-loop/index.html +110 -0
  173. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/02-loop/style.css +326 -0
  174. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/03-mossroot/index.html +134 -0
  175. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/03-mossroot/style.css +262 -0
  176. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/README.md +30 -0
  177. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/README.md +17 -0
  178. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/audit/audit-report.md +56 -0
  179. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/audit/input.html +160 -0
  180. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/audit/notes.md +29 -0
  181. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/redesign/input.html +63 -0
  182. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/redesign/notes.md +72 -0
  183. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/redesign/output.html +374 -0
  184. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/diagnosis.md +52 -0
  185. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/input-description.md +29 -0
  186. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/notes.md +61 -0
  187. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/output.css +193 -0
  188. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/output.html +66 -0
  189. package/templates/vite/.howone/skills/hallmark/site/css/base.css +194 -0
  190. package/templates/vite/.howone/skills/hallmark/site/css/components.css +4886 -0
  191. package/templates/vite/.howone/skills/hallmark/site/css/sections.css +2072 -0
  192. package/templates/vite/.howone/skills/hallmark/site/css/tokens.css +1129 -0
  193. package/templates/vite/.howone/skills/hallmark/site/examples/bananastudio/index.html +475 -0
  194. package/templates/vite/.howone/skills/hallmark/site/examples/bananastudio/styles.css +1584 -0
  195. package/templates/vite/.howone/skills/hallmark/site/examples/bananastudio/tokens.css +96 -0
  196. package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/index.html +344 -0
  197. package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/script.js +103 -0
  198. package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/styles.css +1103 -0
  199. package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/tokens.css +83 -0
  200. package/templates/vite/.howone/skills/hallmark/site/examples/najm/index.html +368 -0
  201. package/templates/vite/.howone/skills/hallmark/site/examples/najm/script.js +133 -0
  202. package/templates/vite/.howone/skills/hallmark/site/examples/najm/styles.css +1062 -0
  203. package/templates/vite/.howone/skills/hallmark/site/examples/najm/tokens.css +97 -0
  204. package/templates/vite/.howone/skills/hallmark/site/examples/tally/app.js +84 -0
  205. package/templates/vite/.howone/skills/hallmark/site/examples/tally/index.html +446 -0
  206. package/templates/vite/.howone/skills/hallmark/site/examples/tally/styles.css +1087 -0
  207. package/templates/vite/.howone/skills/hallmark/site/examples/tally/tokens.css +101 -0
  208. package/templates/vite/.howone/skills/hallmark/site/examples/wayfare/index.html +359 -0
  209. package/templates/vite/.howone/skills/hallmark/site/examples/wayfare/style.css +1168 -0
  210. package/templates/vite/.howone/skills/hallmark/site/examples/wayfare/tokens.css +81 -0
  211. package/templates/vite/.howone/skills/hallmark/site/favicon-dark.svg +5 -0
  212. package/templates/vite/.howone/skills/hallmark/site/favicon-light.svg +5 -0
  213. package/templates/vite/.howone/skills/hallmark/site/index.html +1043 -0
  214. package/templates/vite/.howone/skills/hallmark/site/js/main.js +1175 -0
  215. package/templates/vite/.howone/skills/hallmark/vercel.json +6 -0
  216. package/templates/vite/.howone/skills/howone-sdk/01-architect/01-app-generation.md +126 -0
  217. package/templates/vite/.howone/skills/howone-sdk/{references/08-manifest-codegen.md → 01-architect/02-manifest-codegen.md} +31 -19
  218. package/templates/vite/.howone/skills/howone-sdk/02-database/01-schema-design.md +147 -0
  219. package/templates/vite/.howone/skills/howone-sdk/02-database/02-schema-operations.md +96 -0
  220. package/templates/vite/.howone/skills/howone-sdk/02-database/03-data-access-patterns.md +172 -0
  221. package/templates/vite/.howone/skills/howone-sdk/{references → 03-sdk}/01-client-setup.md +3 -3
  222. package/templates/vite/.howone/skills/howone-sdk/{references/04-auth.md → 03-sdk/03-auth.md} +120 -3
  223. package/templates/vite/.howone/skills/howone-sdk/{references/06-react-integration.md → 03-sdk/04-react-integration.md} +2 -4
  224. package/templates/vite/.howone/skills/howone-sdk/{references/03-ai-actions.md → 03-sdk/07-ai-action-calls.md} +31 -34
  225. package/templates/vite/.howone/skills/howone-sdk/04-ai/.gitkeep +1 -0
  226. package/templates/vite/.howone/skills/howone-sdk/04-ai/01-ai-capability-architecture.md +142 -0
  227. package/templates/vite/.howone/skills/howone-sdk/04-ai/02-workflow-contract-rules.md +169 -0
  228. package/templates/vite/.howone/skills/howone-sdk/04-ai/03-ai-sdk-handoff.md +80 -0
  229. package/templates/vite/.howone/skills/howone-sdk/SKILL.md +118 -93
  230. package/templates/vite/.howone/skills/howone-sdk/agents/openai.yaml +3 -3
  231. package/templates/vite/.howone/skills/impeccable/SKILL.md +168 -0
  232. package/templates/vite/.howone/skills/impeccable/agents/impeccable-asset-producer.md +101 -0
  233. package/templates/vite/.howone/skills/impeccable/reference/adapt.md +190 -0
  234. package/templates/vite/.howone/skills/impeccable/reference/animate.md +175 -0
  235. package/templates/vite/.howone/skills/impeccable/reference/audit.md +133 -0
  236. package/templates/vite/.howone/skills/impeccable/reference/bolder.md +113 -0
  237. package/templates/vite/.howone/skills/impeccable/reference/brand.md +118 -0
  238. package/templates/vite/.howone/skills/impeccable/reference/clarify.md +174 -0
  239. package/templates/vite/.howone/skills/impeccable/reference/codex.md +105 -0
  240. package/templates/vite/.howone/skills/impeccable/reference/cognitive-load.md +106 -0
  241. package/templates/vite/.howone/skills/impeccable/reference/color-and-contrast.md +105 -0
  242. package/templates/vite/.howone/skills/impeccable/reference/colorize.md +154 -0
  243. package/templates/vite/.howone/skills/impeccable/reference/craft.md +123 -0
  244. package/templates/vite/.howone/skills/impeccable/reference/critique.md +273 -0
  245. package/templates/vite/.howone/skills/impeccable/reference/delight.md +302 -0
  246. package/templates/vite/.howone/skills/impeccable/reference/distill.md +111 -0
  247. package/templates/vite/.howone/skills/impeccable/reference/document.md +427 -0
  248. package/templates/vite/.howone/skills/impeccable/reference/extract.md +69 -0
  249. package/templates/vite/.howone/skills/impeccable/reference/harden.md +347 -0
  250. package/templates/vite/.howone/skills/impeccable/reference/heuristics-scoring.md +234 -0
  251. package/templates/vite/.howone/skills/impeccable/reference/interaction-design.md +195 -0
  252. package/templates/vite/.howone/skills/impeccable/reference/layout.md +141 -0
  253. package/templates/vite/.howone/skills/impeccable/reference/live.md +622 -0
  254. package/templates/vite/.howone/skills/impeccable/reference/motion-design.md +109 -0
  255. package/templates/vite/.howone/skills/impeccable/reference/onboard.md +234 -0
  256. package/templates/vite/.howone/skills/impeccable/reference/optimize.md +258 -0
  257. package/templates/vite/.howone/skills/impeccable/reference/overdrive.md +130 -0
  258. package/templates/vite/.howone/skills/impeccable/reference/personas.md +179 -0
  259. package/templates/vite/.howone/skills/impeccable/reference/polish.md +242 -0
  260. package/templates/vite/.howone/skills/impeccable/reference/product.md +62 -0
  261. package/templates/vite/.howone/skills/impeccable/reference/quieter.md +99 -0
  262. package/templates/vite/.howone/skills/impeccable/reference/responsive-design.md +114 -0
  263. package/templates/vite/.howone/skills/impeccable/reference/shape.md +165 -0
  264. package/templates/vite/.howone/skills/impeccable/reference/spatial-design.md +100 -0
  265. package/templates/vite/.howone/skills/impeccable/reference/teach.md +156 -0
  266. package/templates/vite/.howone/skills/impeccable/reference/typeset.md +124 -0
  267. package/templates/vite/.howone/skills/impeccable/reference/typography.md +159 -0
  268. package/templates/vite/.howone/skills/impeccable/reference/ux-writing.md +107 -0
  269. package/templates/vite/.howone/skills/impeccable/scripts/cleanup-deprecated.mjs +284 -0
  270. package/templates/vite/.howone/skills/impeccable/scripts/command-metadata.json +94 -0
  271. package/templates/vite/.howone/skills/impeccable/scripts/critique-storage.mjs +242 -0
  272. package/templates/vite/.howone/skills/impeccable/scripts/design-parser.mjs +820 -0
  273. package/templates/vite/.howone/skills/impeccable/scripts/detect-csp.mjs +198 -0
  274. package/templates/vite/.howone/skills/impeccable/scripts/detect.mjs +21 -0
  275. package/templates/vite/.howone/skills/impeccable/scripts/impeccable-paths.mjs +110 -0
  276. package/templates/vite/.howone/skills/impeccable/scripts/is-generated.mjs +69 -0
  277. package/templates/vite/.howone/skills/impeccable/scripts/live-accept.mjs +595 -0
  278. package/templates/vite/.howone/skills/impeccable/scripts/live-browser-session.js +123 -0
  279. package/templates/vite/.howone/skills/impeccable/scripts/live-browser.js +4860 -0
  280. package/templates/vite/.howone/skills/impeccable/scripts/live-complete.mjs +75 -0
  281. package/templates/vite/.howone/skills/impeccable/scripts/live-completion.mjs +18 -0
  282. package/templates/vite/.howone/skills/impeccable/scripts/live-inject.mjs +446 -0
  283. package/templates/vite/.howone/skills/impeccable/scripts/live-poll.mjs +200 -0
  284. package/templates/vite/.howone/skills/impeccable/scripts/live-resume.mjs +48 -0
  285. package/templates/vite/.howone/skills/impeccable/scripts/live-server.mjs +838 -0
  286. package/templates/vite/.howone/skills/impeccable/scripts/live-session-store.mjs +254 -0
  287. package/templates/vite/.howone/skills/impeccable/scripts/live-status.mjs +47 -0
  288. package/templates/vite/.howone/skills/impeccable/scripts/live-wrap.mjs +632 -0
  289. package/templates/vite/.howone/skills/impeccable/scripts/live.mjs +247 -0
  290. package/templates/vite/.howone/skills/impeccable/scripts/load-context.mjs +141 -0
  291. package/templates/vite/.howone/skills/impeccable/scripts/modern-screenshot.umd.js +14 -0
  292. package/templates/vite/.howone/skills/impeccable/scripts/pin.mjs +214 -0
  293. package/templates/vite/AGENTS.md +2 -12
  294. package/templates/vite/package.json +1 -1
  295. package/templates/vite/src/lib/sdk.ts +3 -0
  296. /package/templates/vite/.howone/skills/howone-sdk/{references → 03-sdk}/02-entity-operations.md +0 -0
  297. /package/templates/vite/.howone/skills/howone-sdk/{references → 03-sdk}/05-file-upload.md +0 -0
  298. /package/templates/vite/.howone/skills/howone-sdk/{references/07-raw-http.md → 03-sdk/06-raw-http.md} +0 -0
@@ -0,0 +1,6 @@
1
+ {
2
+ "outputDirectory": "site",
3
+ "framework": null,
4
+ "buildCommand": null,
5
+ "installCommand": null
6
+ }
@@ -0,0 +1,126 @@
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. **AI contract + workflow implementation**: AI capability contracts are versioned by HowOne;
13
+ external workflow create/update is submitted from synced AI manifests.
14
+ 3. **SDK binding**: `src/lib/sdk.ts` converts manifests into typed entity and AI clients.
15
+ 4. **Frontend experience**: React/UI code calls the SDK and owns app-specific interaction design.
16
+
17
+ Do not skip the binding layer. The UI should call `src/lib/sdk.ts`, not raw entity names guessed
18
+ from the user prompt.
19
+
20
+ Core source-of-truth rule from the HowOne docs:
21
+
22
+ ```text
23
+ agent proposal != source of truth
24
+ validated backend manifest = source of truth
25
+ generated files = compiler/binding output
26
+ ```
27
+
28
+ The agent proposes structured changes and writes app code. The runtime/schema tools validate,
29
+ apply, version, and sync manifest facts.
30
+
31
+ ## Choose Data Posture First
32
+
33
+ Before designing schema or UI calls, classify the data:
34
+
35
+ | Posture | Backend Access | Frontend Read |
36
+ |---|---|---|
37
+ | Private user data | `authenticated: own`, `public: none` | `howone.entities.Entity.query.mine(...)` |
38
+ | Authenticated shared app data | `authenticated: all`, `public: none` | `howone.entities.Entity.query(...)` |
39
+ | Public list data | `authenticated: all`, `public: list` | `howone.public.entities.Entity.query(...)` |
40
+ | Public scoped share data | usually `authenticated: own`, `public: scoped` | `howone.public.entities.Entity.queryScoped(...)` |
41
+
42
+ If the user says "my todos", "my notes", "per user", "login required", or "data isolation",
43
+ default to private user data.
44
+
45
+ ## Backend Feature Workflow
46
+
47
+ When a request adds persistence or changes data shape:
48
+
49
+ 1. Read `02-database/01-schema-design.md` and `02-database/02-schema-operations.md`.
50
+ 2. Inspect the current schema/manifest.
51
+ 3. Design one complete schema patch for the feature.
52
+ 4. Preview the schema patch.
53
+ 5. Apply the exact previewed operations if risk is acceptable.
54
+ 6. Sync schema artifacts using the returned `next.versionId`.
55
+ 7. Read `.howone/database/manifest.json`.
56
+ 8. Read `01-architect/02-manifest-codegen.md`.
57
+ 9. Update `src/lib/sdk.ts`.
58
+ 10. Read the needed SDK file, usually `03-sdk/02-entity-operations.md` and sometimes `03-sdk/03-auth.md`.
59
+ 11. Update the UI.
60
+ 12. Validate.
61
+
62
+ Do not preview a patch and then execute different single operations. Related schema changes for
63
+ one feature should be grouped into one preview/apply cycle.
64
+
65
+ ## AI Feature Workflow
66
+
67
+ When a request adds an AI capability or changes an AI workflow:
68
+
69
+ 1. Read `04-ai/01-ai-capability-architecture.md` and
70
+ `04-ai/02-workflow-contract-rules.md`.
71
+ 2. Inspect current AI capability state.
72
+ 3. Design one complete AI capability patch for the feature.
73
+ 4. Preview the AI patch.
74
+ 5. Apply the exact previewed operations.
75
+ 6. Sync AI artifacts.
76
+ 7. Read `.howone/ai/manifest.json`.
77
+ 8. Submit external workflow create/update with `external-ai-capability`.
78
+ 9. Preserve returned request IDs for the status/background-task layer.
79
+ 10. Read `04-ai/03-ai-sdk-handoff.md`, `01-architect/02-manifest-codegen.md`, and
80
+ `03-sdk/07-ai-action-calls.md`.
81
+ 11. Update `src/lib/sdk.ts` from the synced manifest.
82
+ 12. Update the UI.
83
+ 13. Validate.
84
+
85
+ If generated output must be saved, design the AI capability first. Then derive persistence entities
86
+ from the synced AI `outputSchema`, plus only necessary request metadata.
87
+
88
+ ## Auth Decision
89
+
90
+ Use hosted auth when the app just needs login:
91
+
92
+ ```tsx
93
+ <HowOneProvider auth="required">
94
+ <App />
95
+ </HowOneProvider>
96
+ ```
97
+
98
+ Use custom in-app auth when the user asks for a designed login page or multiple login methods:
99
+
100
+ ```tsx
101
+ <HowOneProvider auth="none" brand="hidden">
102
+ <App />
103
+ </HowOneProvider>
104
+ ```
105
+
106
+ Custom login must call `howone.auth.setToken(token)` after Email OTP, Phone OTP, Google, or
107
+ GitHub succeeds, then verify the session with `await howone.me({ refresh: true })`.
108
+
109
+ ## Generated Binding Rules
110
+
111
+ - Read manifests after sync, not before.
112
+ - Preserve existing bindings unless the manifest changed.
113
+ - Export explicit `Record`, `Create`, and `Update` types.
114
+ - Do not include system fields in create/update payloads.
115
+ - Do not infer public access from `visibility` alone; inspect `access.public`.
116
+
117
+ ## Common Failure Modes
118
+
119
+ - Repeated login after refresh: app used `auth.isAuthenticated()` as first-load truth or stored
120
+ token outside SDK. Read `03-sdk/03-auth.md`.
121
+ - Data is not isolated: app used `query()` instead of `query.mine()` for `authenticated.read =
122
+ "own"`, or wrote owner fields manually.
123
+ - Public page 401/403: app used authenticated namespace for public content or schema does not
124
+ allow public access.
125
+ - Generated types drift from backend: app edited `src/lib/sdk.ts` from memory instead of synced
126
+ manifest.
@@ -13,6 +13,11 @@ HowOne apps are driven by two backend-synced manifests:
13
13
 
14
14
  Sync tools (`sync_schema_artifacts`, `sync_ai_artifacts`) write the manifests. The coding agent reads the manifests and writes `src/lib/sdk.ts`.
15
15
 
16
+ For AI capabilities, external workflow create/update is submitted by `external-ai-capability` from
17
+ the synced manifest. Do not duplicate AI schemas in app code beyond generated zod/type bindings.
18
+ For workflow edits, `workflowConfigID` belongs to the external workflow operation; it is not an SDK
19
+ binding field.
20
+
16
21
  ---
17
22
 
18
23
  ## Reading `.howone/database/manifest.json`
@@ -157,6 +162,7 @@ export type CommentUpdate = Partial<CommentCreate>
157
162
  {
158
163
  "id": "generateStory",
159
164
  "name": "Generate Story",
165
+ "workflowId": "d69ab648-2c00-4d94-928e-01bd7b2a5bb2",
160
166
  "inputSchema": {
161
167
  "type": "object",
162
168
  "properties": {
@@ -179,6 +185,7 @@ export type CommentUpdate = Partial<CommentCreate>
179
185
  {
180
186
  "id": "translateText",
181
187
  "name": "Translate Text",
188
+ "workflowId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
182
189
  "inputSchema": {
183
190
  "type": "object",
184
191
  "properties": {
@@ -219,12 +226,12 @@ export const generateStoryInputSchema = z.object({
219
226
  })
220
227
  export type GenerateStoryInput = z.infer<typeof generateStoryInputSchema>
221
228
 
222
- // Output type for manual unwrapping (do NOT put in defineAiAction as outputSchema)
223
- export type GenerateStoryOutput = {
224
- title: string
225
- content: string
226
- summary?: string
227
- }
229
+ export const generateStoryOutputSchema = z.object({
230
+ title: z.string(),
231
+ content: z.string(),
232
+ summary: z.string().optional(),
233
+ })
234
+ export type GenerateStoryOutput = z.infer<typeof generateStoryOutputSchema>
228
235
 
229
236
  // ── translateText ─────────────────────────────────────────────
230
237
  export const translateTextInputSchema = z.object({
@@ -235,6 +242,10 @@ export const translateTextInputSchema = z.object({
235
242
  export type TranslateTextInput = z.infer<typeof translateTextInputSchema>
236
243
  ```
237
244
 
245
+ Do not make required output fields optional to silence validation failures. Do not add
246
+ `.passthrough()` as a workaround for EAX execution envelopes. `defineAiAction` validates the
247
+ workflow `finalResult` payload when an `outputSchema` is configured.
248
+
238
249
  ---
239
250
 
240
251
  ## Full Generated `src/lib/sdk.ts`
@@ -303,11 +314,12 @@ export const generateStoryInputSchema = z.object({
303
314
  language: z.string().optional(),
304
315
  })
305
316
  export type GenerateStoryInput = z.infer<typeof generateStoryInputSchema>
306
- export type GenerateStoryOutput = {
307
- title: string
308
- content: string
309
- summary?: string
310
- }
317
+ export const generateStoryOutputSchema = z.object({
318
+ title: z.string(),
319
+ content: z.string(),
320
+ summary: z.string().optional(),
321
+ })
322
+ export type GenerateStoryOutput = z.infer<typeof generateStoryOutputSchema>
311
323
 
312
324
  export const translateTextInputSchema = z.object({
313
325
  text: z.string(),
@@ -315,10 +327,6 @@ export const translateTextInputSchema = z.object({
315
327
  formality: z.enum(['formal', 'informal']).optional(),
316
328
  })
317
329
  export type TranslateTextInput = z.infer<typeof translateTextInputSchema>
318
- export type TranslateTextOutput = {
319
- translatedText: string
320
- detectedLang?: string
321
- }
322
330
 
323
331
  // ═══════════════════════════════════════════════════════════════
324
332
  // CLIENT
@@ -344,9 +352,12 @@ export const entities = defineEntities({
344
352
 
345
353
  export const ai = defineAiActions({
346
354
  generateStory: defineAiAction('generateStory', {
355
+ workflowId: 'd69ab648-2c00-4d94-928e-01bd7b2a5bb2',
347
356
  inputSchema: generateStoryInputSchema,
357
+ outputSchema: generateStoryOutputSchema,
348
358
  }),
349
359
  translateText: defineAiAction('translateText', {
360
+ workflowId: 'a1b2c3d4-e5f6-7890-abcd-ef1234567890',
350
361
  inputSchema: translateTextInputSchema,
351
362
  }),
352
363
  })
@@ -371,7 +382,11 @@ Before finalising generated code, verify:
371
382
  - [ ] System fields are not present in create/update input types
372
383
  - [ ] Public query/write types are generated only from `access.public.allowedFilters`, `allowedSorts`, `requiredScopes`, and write permissions
373
384
  - [ ] Every AI action from `.howone/ai/manifest.json` has an `inputSchema` zod object
385
+ - [ ] Every AI action with manifest `outputSchema` has a matching zod `outputSchema`
386
+ - [ ] Every AI action binding includes the exact manifest `workflowId`
374
387
  - [ ] Required input fields are not `.optional()` in zod
388
+ - [ ] Required output fields are not `.optional()` in zod
389
+ - [ ] AI output schemas do not use `.passthrough()` to hide execution-envelope mismatches
375
390
  - [ ] AI action names match the manifest `id` exactly (case-sensitive)
376
391
  - [ ] `createClient` uses `import.meta.env.*` only
377
392
  - [ ] `withEntities` is applied before `withAiActions` in the composition chain
@@ -418,10 +433,7 @@ When the app generates data with AI and saves it to an entity:
418
433
  // Save it to Story entity which adds: authorId, status, wordCount
419
434
 
420
435
  async function generateAndSave(input: GenerateStoryInput, authorId: string) {
421
- const result = await howone.ai.generateStory.run(input)
422
- if (!result.success) throw new Error(result.errors.join(', '))
423
-
424
- const output = result.finalResult as GenerateStoryOutput
436
+ const output = await howone.ai.generateStory.run(input)
425
437
 
426
438
  return howone.entities.Story.create({
427
439
  title: output.title,
@@ -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