@pylonsync/create-pylon 0.19.0 → 0.20.0

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 (675) hide show
  1. package/bin/create-pylon.js +30 -7
  2. package/package.json +1 -1
  3. package/templates/agency/.env.example +7 -0
  4. package/templates/agency/README.md +28 -3
  5. package/templates/agency/app/(marketing)/contact-form.tsx +20 -18
  6. package/templates/agency/app/(marketing)/page.tsx +3 -3
  7. package/templates/agency/app/(marketing)/work/page.tsx +3 -3
  8. package/templates/agency/app/auth-form.tsx +4 -4
  9. package/templates/agency/app/dashboard/dashboard-client.tsx +110 -64
  10. package/templates/agency/app/dashboard/page.tsx +14 -16
  11. package/templates/agency/app/icon.svg +3 -0
  12. package/templates/agency/app/login/page.tsx +12 -14
  13. package/templates/agency/components/marketing.tsx +12 -5
  14. package/templates/agency/functions/seedStudioBackoffice.ts +42 -11
  15. package/templates/agency/lib/agency.ts +22 -0
  16. package/templates/agency/lib/demo.ts +118 -0
  17. package/templates/agency/lib/site.config.ts +19 -13
  18. package/templates/agency/public/favicon.ico +0 -0
  19. package/templates/agency/tests/agency.test.ts +57 -0
  20. package/templates/ai-chat/.env.example +13 -27
  21. package/templates/ai-chat/README.md +53 -60
  22. package/templates/ai-chat/app/(chat)/c/[id]/page.tsx +19 -0
  23. package/templates/ai-chat/app/(chat)/chat-client.tsx +657 -622
  24. package/templates/ai-chat/app/(chat)/layout.tsx +6 -43
  25. package/templates/ai-chat/app/(chat)/not-found.tsx +6 -10
  26. package/templates/ai-chat/app/(chat)/page.tsx +7 -11
  27. package/templates/ai-chat/app/auth-form.tsx +45 -38
  28. package/templates/ai-chat/app/error.tsx +9 -12
  29. package/templates/ai-chat/app/globals.css +464 -102
  30. package/templates/ai-chat/app/layout.tsx +11 -19
  31. package/templates/ai-chat/app/login/page.tsx +39 -24
  32. package/templates/ai-chat/app.ts +118 -43
  33. package/templates/ai-chat/components/chat/composer.tsx +193 -0
  34. package/templates/ai-chat/components/chat/empty-state.tsx +65 -0
  35. package/templates/ai-chat/components/chat/icons.tsx +198 -0
  36. package/templates/ai-chat/components/chat/markdown.tsx +164 -0
  37. package/templates/ai-chat/components/chat/message.tsx +183 -0
  38. package/templates/ai-chat/components/chat/setup.tsx +71 -0
  39. package/templates/ai-chat/components/chat/sidebar.tsx +288 -0
  40. package/templates/ai-chat/functions/_beginTurn.ts +145 -0
  41. package/templates/ai-chat/functions/_finishTurn.ts +55 -0
  42. package/templates/ai-chat/functions/assistantStatus.ts +13 -0
  43. package/templates/ai-chat/functions/claimGuestHistory.ts +39 -0
  44. package/templates/ai-chat/functions/createConversation.ts +28 -0
  45. package/templates/ai-chat/functions/deleteConversation.ts +15 -20
  46. package/templates/ai-chat/functions/prepareGuestClaim.ts +32 -0
  47. package/templates/ai-chat/functions/renameConversation.ts +19 -0
  48. package/templates/ai-chat/functions/respond.ts +88 -0
  49. package/templates/ai-chat/functions/seedExamples.ts +46 -0
  50. package/templates/ai-chat/functions/stopResponse.ts +30 -0
  51. package/templates/ai-chat/lib/brand-icon.ts +7 -0
  52. package/templates/ai-chat/lib/chat.ts +277 -0
  53. package/templates/ai-chat/lib/claim.ts +15 -0
  54. package/templates/ai-chat/lib/examples.ts +179 -0
  55. package/templates/ai-chat/lib/highlight.ts +107 -0
  56. package/templates/ai-chat/lib/markdown.ts +317 -0
  57. package/templates/ai-chat/lib/provider.ts +38 -0
  58. package/templates/ai-chat/lib/site.config.ts +55 -39
  59. package/templates/ai-chat/tests/chat.test.ts +174 -0
  60. package/templates/ai-chat/tests/components.test.tsx +57 -0
  61. package/templates/ai-chat/tests/markdown.test.ts +88 -0
  62. package/templates/ai-chat/tests/provider.test.ts +32 -0
  63. package/templates/backend/consumer/apps/api/app/layout.tsx +33 -0
  64. package/templates/backend/consumer/apps/api/app/page.tsx +54 -0
  65. package/templates/backend/consumer/apps/api/app.ts +166 -0
  66. package/templates/backend/consumer/apps/api/functions/addComment.ts +24 -0
  67. package/templates/backend/consumer/apps/api/functions/createPost.ts +19 -36
  68. package/templates/backend/consumer/apps/api/functions/deletePost.ts +15 -13
  69. package/templates/backend/consumer/apps/api/functions/myProfile.ts +5 -8
  70. package/templates/backend/consumer/apps/api/functions/seedDemo.ts +95 -0
  71. package/templates/backend/consumer/apps/api/functions/setFollow.ts +36 -0
  72. package/templates/backend/consumer/apps/api/functions/setLike.ts +36 -0
  73. package/templates/backend/consumer/apps/api/functions/upsertProfile.ts +43 -37
  74. package/templates/backend/consumer/apps/api/lib/seed.ts +89 -0
  75. package/templates/backend/consumer/apps/api/lib/social.ts +50 -0
  76. package/templates/backend/consumer/apps/api/package.json +8 -2
  77. package/templates/backend/consumer/apps/api/public/images/posts/arch.jpg +0 -0
  78. package/templates/backend/consumer/apps/api/public/images/posts/coffee.jpg +0 -0
  79. package/templates/backend/consumer/apps/api/public/images/posts/dog.jpg +0 -0
  80. package/templates/backend/consumer/apps/api/public/images/posts/lisbon.jpg +0 -0
  81. package/templates/backend/consumer/apps/api/public/images/posts/ramen.jpg +0 -0
  82. package/templates/backend/consumer/apps/api/public/images/posts/run.jpg +0 -0
  83. package/templates/backend/consumer/apps/api/public/images/posts/sunset.jpg +0 -0
  84. package/templates/backend/consumer/apps/api/tsconfig.json +12 -2
  85. package/templates/chat/README.md +43 -21
  86. package/templates/chat/app/chat-client.tsx +495 -85
  87. package/templates/chat/app/error.tsx +1 -1
  88. package/templates/chat/app/globals.css +170 -54
  89. package/templates/chat/app/layout.tsx +12 -9
  90. package/templates/chat/app/not-found.tsx +4 -2
  91. package/templates/chat/app/page.tsx +9 -19
  92. package/templates/chat/app.ts +96 -17
  93. package/templates/chat/components/chat/avatar.tsx +45 -0
  94. package/templates/chat/components/chat/composer.tsx +110 -0
  95. package/templates/chat/components/chat/message-list.tsx +285 -0
  96. package/templates/chat/components/chat/sidebar.tsx +190 -0
  97. package/templates/chat/functions/joinChat.ts +83 -0
  98. package/templates/chat/functions/renameMember.ts +25 -0
  99. package/templates/chat/lib/chat.ts +188 -0
  100. package/templates/chat/lib/seed.ts +78 -0
  101. package/templates/chat/tests/chat.test.ts +159 -0
  102. package/templates/chat/tests/composer.test.tsx +54 -0
  103. package/templates/consumer/README.md +3 -3
  104. package/templates/consumer/app/globals.css +10 -3
  105. package/templates/consumer/app/icon.svg +1 -0
  106. package/templates/consumer/components/social/avatar.tsx +25 -11
  107. package/templates/consumer/functions/seedFeed.ts +3 -3
  108. package/templates/consumer/lib/seed.ts +43 -85
  109. package/templates/consumer/public/favicon.ico +0 -0
  110. package/templates/consumer/public/images/posts/arch.jpg +0 -0
  111. package/templates/consumer/public/images/posts/coffee.jpg +0 -0
  112. package/templates/consumer/public/images/posts/dog.jpg +0 -0
  113. package/templates/consumer/public/images/posts/lisbon.jpg +0 -0
  114. package/templates/consumer/public/images/posts/ramen.jpg +0 -0
  115. package/templates/consumer/public/images/posts/run.jpg +0 -0
  116. package/templates/consumer/public/images/posts/sunset.jpg +0 -0
  117. package/templates/consumer/tests/seed.test.ts +39 -0
  118. package/templates/creator/.env.example +7 -0
  119. package/templates/creator/README.md +24 -5
  120. package/templates/creator/app/(marketing)/newsletter-signup.tsx +33 -12
  121. package/templates/creator/app/auth-form.tsx +7 -7
  122. package/templates/creator/app/dashboard/dashboard-client.tsx +137 -100
  123. package/templates/creator/app/dashboard/page.tsx +18 -18
  124. package/templates/creator/app/icon.svg +2 -0
  125. package/templates/creator/app/login/page.tsx +14 -14
  126. package/templates/creator/app.ts +4 -4
  127. package/templates/creator/functions/seedDemo.ts +32 -0
  128. package/templates/creator/functions/subscribe.ts +4 -15
  129. package/templates/creator/lib/demo.ts +94 -0
  130. package/templates/creator/lib/site.config.ts +15 -10
  131. package/templates/creator/lib/stats.ts +35 -0
  132. package/templates/creator/public/favicon.ico +0 -0
  133. package/templates/creator/tests/counter.test.ts +92 -0
  134. package/templates/creator/tests/live-count.test.tsx +45 -0
  135. package/templates/crm/README.md +22 -1
  136. package/templates/crm/app/apple-icon.png +0 -0
  137. package/templates/crm/app/companies/companies-view.tsx +32 -14
  138. package/templates/crm/app/companies/page.tsx +2 -1
  139. package/templates/crm/app/contacts/contacts-view.tsx +34 -10
  140. package/templates/crm/app/contacts/page.tsx +2 -1
  141. package/templates/crm/app/deals/[id]/deal-view.tsx +137 -98
  142. package/templates/crm/app/deals/[id]/page.tsx +2 -1
  143. package/templates/crm/app/globals.css +29 -14
  144. package/templates/crm/app/icon.svg +1 -0
  145. package/templates/crm/app/layout.tsx +7 -5
  146. package/templates/crm/app/page.tsx +2 -1
  147. package/templates/crm/app/pipeline-view.tsx +5 -5
  148. package/templates/crm/app/workspace.tsx +29 -17
  149. package/templates/crm/app.ts +5 -5
  150. package/templates/crm/components/activity-timeline.tsx +14 -4
  151. package/templates/crm/components/app-shell.tsx +94 -0
  152. package/templates/crm/components/auth-form.tsx +35 -5
  153. package/templates/crm/components/avatar.tsx +5 -1
  154. package/templates/crm/components/board-skeleton.tsx +5 -5
  155. package/templates/crm/components/brand-mark.tsx +25 -0
  156. package/templates/crm/components/command-palette.tsx +17 -17
  157. package/templates/crm/components/data-table.tsx +97 -36
  158. package/templates/crm/components/deal-card.tsx +23 -27
  159. package/templates/crm/components/filter-tabs.tsx +101 -0
  160. package/templates/crm/components/metrics-bar.tsx +6 -6
  161. package/templates/crm/components/nav.tsx +15 -0
  162. package/templates/crm/components/page-header.tsx +43 -7
  163. package/templates/crm/components/pipeline-board.tsx +16 -10
  164. package/templates/crm/components/require-auth.tsx +24 -26
  165. package/templates/crm/components/sidebar.tsx +54 -49
  166. package/templates/crm/components/stage-badge.tsx +4 -2
  167. package/templates/crm/components/ui/button.tsx +5 -4
  168. package/templates/crm/components/ui/dialog.tsx +1 -1
  169. package/templates/crm/components/ui/input.tsx +1 -1
  170. package/templates/crm/components/ui/select.tsx +1 -1
  171. package/templates/crm/components/ui/textarea.tsx +1 -1
  172. package/templates/crm/functions/seedWorkspace.ts +32 -17
  173. package/templates/crm/lib/brand.ts +9 -0
  174. package/templates/crm/lib/demo-team.ts +51 -0
  175. package/templates/crm/lib/pipeline.ts +37 -0
  176. package/templates/crm/lib/search.ts +4 -3
  177. package/templates/crm/lib/seed.ts +53 -8
  178. package/templates/crm/public/favicon.ico +0 -0
  179. package/templates/crm/tests/components.test.tsx +5 -5
  180. package/templates/crm/tests/demo-team.test.ts +18 -0
  181. package/templates/crm/tests/pipeline.test.ts +59 -3
  182. package/templates/directory/.env.example +7 -0
  183. package/templates/directory/README.md +22 -3
  184. package/templates/directory/app/(marketing)/directory-browse.tsx +30 -12
  185. package/templates/directory/app/(marketing)/page.tsx +6 -4
  186. package/templates/directory/app/auth-form.tsx +4 -4
  187. package/templates/directory/app/dashboard/dashboard-client.tsx +177 -90
  188. package/templates/directory/app/dashboard/page.tsx +16 -14
  189. package/templates/directory/app/icon.svg +4 -0
  190. package/templates/directory/app/login/page.tsx +16 -15
  191. package/templates/directory/functions/seedDemo.ts +43 -0
  192. package/templates/directory/lib/demo.ts +145 -0
  193. package/templates/directory/lib/directory.ts +27 -0
  194. package/templates/directory/lib/site.config.ts +21 -16
  195. package/templates/directory/public/favicon.ico +0 -0
  196. package/templates/directory/tests/directory.test.ts +46 -0
  197. package/templates/expo/consumer/apps/expo/App.tsx +360 -288
  198. package/templates/expo/consumer/apps/expo/app.json +9 -1
  199. package/templates/expo/consumer/apps/expo/package.json +2 -1
  200. package/templates/helpdesk/README.md +21 -0
  201. package/templates/helpdesk/app/apple-icon.png +0 -0
  202. package/templates/helpdesk/app/customers/customers-view.tsx +23 -7
  203. package/templates/helpdesk/app/customers/page.tsx +2 -1
  204. package/templates/helpdesk/app/globals.css +29 -14
  205. package/templates/helpdesk/app/icon.svg +1 -0
  206. package/templates/helpdesk/app/inbox-view.tsx +66 -47
  207. package/templates/helpdesk/app/layout.tsx +7 -5
  208. package/templates/helpdesk/app/page.tsx +4 -7
  209. package/templates/helpdesk/app/tickets/[id]/page.tsx +2 -1
  210. package/templates/helpdesk/app/tickets/[id]/ticket-view.tsx +134 -97
  211. package/templates/helpdesk/app/workspace.tsx +33 -22
  212. package/templates/helpdesk/app.ts +2 -2
  213. package/templates/helpdesk/components/app-shell.tsx +94 -0
  214. package/templates/helpdesk/components/auth-form.tsx +35 -5
  215. package/templates/helpdesk/components/avatar.tsx +5 -1
  216. package/templates/helpdesk/components/brand-mark.tsx +28 -0
  217. package/templates/helpdesk/components/command-palette.tsx +17 -17
  218. package/templates/helpdesk/components/data-table.tsx +97 -36
  219. package/templates/helpdesk/components/filter-tabs.tsx +101 -0
  220. package/templates/helpdesk/components/nav.tsx +14 -0
  221. package/templates/helpdesk/components/page-header.tsx +43 -7
  222. package/templates/helpdesk/components/priority-badge.tsx +49 -6
  223. package/templates/helpdesk/components/require-auth.tsx +24 -26
  224. package/templates/helpdesk/components/sidebar.tsx +54 -48
  225. package/templates/helpdesk/components/sla-indicator.tsx +5 -8
  226. package/templates/helpdesk/components/thread.tsx +7 -7
  227. package/templates/helpdesk/components/ticket-list.tsx +79 -19
  228. package/templates/helpdesk/components/ui/button.tsx +5 -4
  229. package/templates/helpdesk/components/ui/dialog.tsx +1 -1
  230. package/templates/helpdesk/components/ui/input.tsx +1 -1
  231. package/templates/helpdesk/components/ui/select.tsx +1 -1
  232. package/templates/helpdesk/components/ui/textarea.tsx +1 -1
  233. package/templates/helpdesk/functions/seedWorkspace.ts +25 -15
  234. package/templates/helpdesk/lib/brand.ts +9 -0
  235. package/templates/helpdesk/lib/demo-team.ts +51 -0
  236. package/templates/helpdesk/lib/search.ts +4 -3
  237. package/templates/helpdesk/lib/seed.ts +43 -2
  238. package/templates/helpdesk/lib/tickets.ts +68 -20
  239. package/templates/helpdesk/public/favicon.ico +0 -0
  240. package/templates/helpdesk/tests/components.test.tsx +10 -0
  241. package/templates/helpdesk/tests/demo-team.test.ts +18 -0
  242. package/templates/helpdesk/tests/tickets.test.ts +70 -0
  243. package/templates/imessage/.env.example +49 -0
  244. package/templates/imessage/AGENTS.md +153 -0
  245. package/templates/imessage/CLAUDE.md +7 -0
  246. package/templates/imessage/README.md +187 -0
  247. package/templates/imessage/app/console.tsx +382 -0
  248. package/templates/imessage/app/contacts/page.tsx +13 -0
  249. package/templates/imessage/app/error.tsx +16 -0
  250. package/templates/imessage/app/gate.tsx +31 -0
  251. package/templates/imessage/app/globals.css +183 -0
  252. package/templates/imessage/app/layout.tsx +17 -0
  253. package/templates/imessage/app/login/login-form.tsx +115 -0
  254. package/templates/imessage/app/login/page.tsx +30 -0
  255. package/templates/imessage/app/not-found.tsx +13 -0
  256. package/templates/imessage/app/page.tsx +14 -0
  257. package/templates/imessage/app/robots.ts +6 -0
  258. package/templates/imessage/app/setup/page.tsx +13 -0
  259. package/templates/imessage/app/sign-out.tsx +20 -0
  260. package/templates/imessage/app.ts +299 -0
  261. package/templates/imessage/bunfig +4 -0
  262. package/templates/imessage/components/avatar.tsx +46 -0
  263. package/templates/imessage/components/contact-panel.tsx +263 -0
  264. package/templates/imessage/components/contacts-view.tsx +172 -0
  265. package/templates/imessage/components/conversation-list.tsx +129 -0
  266. package/templates/imessage/components/nav-rail.tsx +67 -0
  267. package/templates/imessage/components/setup-view.tsx +408 -0
  268. package/templates/imessage/components/thread.tsx +229 -0
  269. package/templates/imessage/components/ui/badge.tsx +37 -0
  270. package/templates/imessage/components/ui/button.tsx +56 -0
  271. package/templates/imessage/components/ui/card.tsx +90 -0
  272. package/templates/imessage/components/ui/dialog.tsx +110 -0
  273. package/templates/imessage/components/ui/input.tsx +30 -0
  274. package/templates/imessage/components/ui/label.tsx +21 -0
  275. package/templates/imessage/components/ui/select.tsx +39 -0
  276. package/templates/imessage/components/ui/table.tsx +124 -0
  277. package/templates/imessage/components/ui/textarea.tsx +24 -0
  278. package/templates/imessage/components.json +20 -0
  279. package/templates/imessage/functions/answerNow.ts +34 -0
  280. package/templates/imessage/functions/assistant.ts +96 -0
  281. package/templates/imessage/functions/beginTurn.ts +101 -0
  282. package/templates/imessage/functions/cancelReminder.ts +13 -0
  283. package/templates/imessage/functions/claimOutbound.ts +44 -0
  284. package/templates/imessage/functions/clearDemo.ts +18 -0
  285. package/templates/imessage/functions/deleteNote.ts +11 -0
  286. package/templates/imessage/functions/deliverOutbound.ts +55 -0
  287. package/templates/imessage/functions/finishTurn.ts +84 -0
  288. package/templates/imessage/functions/fireReminder.ts +42 -0
  289. package/templates/imessage/functions/ingestInbound.ts +22 -0
  290. package/templates/imessage/functions/ownerAccount.ts +13 -0
  291. package/templates/imessage/functions/processTurn.ts +74 -0
  292. package/templates/imessage/functions/relayApply.ts +102 -0
  293. package/templates/imessage/functions/relaySync.ts +63 -0
  294. package/templates/imessage/functions/releaseOutbound.ts +18 -0
  295. package/templates/imessage/functions/resolveTurn.ts +25 -0
  296. package/templates/imessage/functions/saveContact.ts +27 -0
  297. package/templates/imessage/functions/seedDemo.ts +70 -0
  298. package/templates/imessage/functions/sendOwnerMessage.ts +28 -0
  299. package/templates/imessage/functions/sendblueWebhook.ts +49 -0
  300. package/templates/imessage/functions/setContactStatus.ts +17 -0
  301. package/templates/imessage/functions/settleOutbound.ts +35 -0
  302. package/templates/imessage/functions/setupStatus.ts +33 -0
  303. package/templates/imessage/functions/sweep.ts +58 -0
  304. package/templates/imessage/functions/toolCancelReminder.ts +17 -0
  305. package/templates/imessage/functions/toolForgetNote.ts +15 -0
  306. package/templates/imessage/functions/toolListNotes.ts +16 -0
  307. package/templates/imessage/functions/toolListReminders.ts +17 -0
  308. package/templates/imessage/functions/toolSaveNote.ts +22 -0
  309. package/templates/imessage/functions/toolSetReminder.ts +55 -0
  310. package/templates/imessage/functions/updateSettings.ts +48 -0
  311. package/templates/imessage/gitignore +11 -0
  312. package/templates/imessage/lib/agent-call.ts +251 -0
  313. package/templates/imessage/lib/assistant.ts +74 -0
  314. package/templates/imessage/lib/chunk.ts +135 -0
  315. package/templates/imessage/lib/demo.ts +68 -0
  316. package/templates/imessage/lib/format.ts +170 -0
  317. package/templates/imessage/lib/gate.ts +104 -0
  318. package/templates/imessage/lib/handles.ts +67 -0
  319. package/templates/imessage/lib/provider.ts +38 -0
  320. package/templates/imessage/lib/relay-protocol.ts +95 -0
  321. package/templates/imessage/lib/reminders.ts +41 -0
  322. package/templates/imessage/lib/secrets.ts +59 -0
  323. package/templates/imessage/lib/sendblue.ts +173 -0
  324. package/templates/imessage/lib/store.ts +407 -0
  325. package/templates/imessage/lib/transport.ts +135 -0
  326. package/templates/imessage/lib/utils.ts +10 -0
  327. package/templates/imessage/package.json +40 -0
  328. package/templates/imessage/relay/.env.example +14 -0
  329. package/templates/imessage/relay/applescript.ts +70 -0
  330. package/templates/imessage/relay/chatdb.ts +165 -0
  331. package/templates/imessage/relay/client.ts +41 -0
  332. package/templates/imessage/relay/main.ts +137 -0
  333. package/templates/imessage/relay/state.ts +35 -0
  334. package/templates/imessage/tests/agent-call.test.ts +112 -0
  335. package/templates/imessage/tests/applescript.test.ts +88 -0
  336. package/templates/imessage/tests/chatdb.test.ts +139 -0
  337. package/templates/imessage/tests/chunk.test.ts +61 -0
  338. package/templates/imessage/tests/fake-ctx.ts +88 -0
  339. package/templates/imessage/tests/ingest.test.ts +141 -0
  340. package/templates/imessage/tests/lib.test.ts +99 -0
  341. package/templates/imessage/tests/review-fixes.test.ts +138 -0
  342. package/templates/imessage/tests/secrets.test.ts +36 -0
  343. package/templates/imessage/tests/sendblue.test.ts +143 -0
  344. package/templates/imessage/tests/setup.ts +5 -0
  345. package/templates/imessage/tsconfig.json +18 -0
  346. package/templates/inventory/README.md +21 -0
  347. package/templates/inventory/app/apple-icon.png +0 -0
  348. package/templates/inventory/app/globals.css +29 -14
  349. package/templates/inventory/app/icon.svg +1 -0
  350. package/templates/inventory/app/layout.tsx +7 -5
  351. package/templates/inventory/app/movements/movements-view.tsx +32 -10
  352. package/templates/inventory/app/movements/page.tsx +2 -1
  353. package/templates/inventory/app/page.tsx +4 -6
  354. package/templates/inventory/app/products/[id]/page.tsx +2 -1
  355. package/templates/inventory/app/products/[id]/product-view.tsx +55 -25
  356. package/templates/inventory/app/products-view.tsx +74 -33
  357. package/templates/inventory/app/workspace.tsx +34 -16
  358. package/templates/inventory/app.ts +10 -2
  359. package/templates/inventory/components/app-shell.tsx +94 -0
  360. package/templates/inventory/components/auth-form.tsx +35 -5
  361. package/templates/inventory/components/avatar.tsx +5 -1
  362. package/templates/inventory/components/brand-mark.tsx +25 -0
  363. package/templates/inventory/components/category-tile.tsx +49 -0
  364. package/templates/inventory/components/command-palette.tsx +17 -17
  365. package/templates/inventory/components/data-table.tsx +97 -36
  366. package/templates/inventory/components/filter-tabs.tsx +101 -0
  367. package/templates/inventory/components/nav.tsx +14 -0
  368. package/templates/inventory/components/page-header.tsx +43 -7
  369. package/templates/inventory/components/require-auth.tsx +24 -26
  370. package/templates/inventory/components/sidebar.tsx +54 -48
  371. package/templates/inventory/components/stock-level.tsx +30 -14
  372. package/templates/inventory/components/summary-bar.tsx +8 -15
  373. package/templates/inventory/components/ui/button.tsx +5 -4
  374. package/templates/inventory/components/ui/dialog.tsx +1 -1
  375. package/templates/inventory/components/ui/input.tsx +1 -1
  376. package/templates/inventory/components/ui/select.tsx +1 -1
  377. package/templates/inventory/components/ui/textarea.tsx +1 -1
  378. package/templates/inventory/functions/seedWorkspace.ts +18 -8
  379. package/templates/inventory/lib/brand.ts +9 -0
  380. package/templates/inventory/lib/demo-team.ts +51 -0
  381. package/templates/inventory/lib/search.ts +4 -3
  382. package/templates/inventory/lib/seed.ts +29 -2
  383. package/templates/inventory/lib/stock.ts +32 -0
  384. package/templates/inventory/public/favicon.ico +0 -0
  385. package/templates/inventory/tests/demo-team.test.ts +18 -0
  386. package/templates/inventory/tests/stock.test.ts +29 -0
  387. package/templates/invoices/README.md +16 -0
  388. package/templates/invoices/app/apple-icon.png +0 -0
  389. package/templates/invoices/app/clients/clients-view.tsx +18 -6
  390. package/templates/invoices/app/clients/page.tsx +2 -1
  391. package/templates/invoices/app/globals.css +29 -14
  392. package/templates/invoices/app/icon.svg +1 -0
  393. package/templates/invoices/app/invoices/[id]/invoice-view.tsx +72 -48
  394. package/templates/invoices/app/invoices/[id]/page.tsx +2 -1
  395. package/templates/invoices/app/invoices-view.tsx +81 -32
  396. package/templates/invoices/app/layout.tsx +7 -5
  397. package/templates/invoices/app/page.tsx +4 -6
  398. package/templates/invoices/app/workspace.tsx +26 -16
  399. package/templates/invoices/app.ts +2 -2
  400. package/templates/invoices/components/app-shell.tsx +94 -0
  401. package/templates/invoices/components/auth-form.tsx +35 -5
  402. package/templates/invoices/components/avatar.tsx +5 -1
  403. package/templates/invoices/components/brand-mark.tsx +26 -0
  404. package/templates/invoices/components/command-palette.tsx +17 -17
  405. package/templates/invoices/components/data-table.tsx +97 -36
  406. package/templates/invoices/components/filter-tabs.tsx +101 -0
  407. package/templates/invoices/components/line-items.tsx +19 -14
  408. package/templates/invoices/components/nav.tsx +14 -0
  409. package/templates/invoices/components/page-header.tsx +43 -7
  410. package/templates/invoices/components/require-auth.tsx +24 -26
  411. package/templates/invoices/components/sidebar.tsx +54 -48
  412. package/templates/invoices/components/status-badge.tsx +7 -7
  413. package/templates/invoices/components/summary-bar.tsx +5 -5
  414. package/templates/invoices/components/ui/button.tsx +5 -4
  415. package/templates/invoices/components/ui/dialog.tsx +1 -1
  416. package/templates/invoices/components/ui/input.tsx +1 -1
  417. package/templates/invoices/components/ui/select.tsx +1 -1
  418. package/templates/invoices/components/ui/textarea.tsx +1 -1
  419. package/templates/invoices/functions/recordPayment.ts +3 -0
  420. package/templates/invoices/lib/billing.ts +40 -0
  421. package/templates/invoices/lib/brand.ts +9 -0
  422. package/templates/invoices/lib/search.ts +4 -3
  423. package/templates/invoices/public/favicon.ico +0 -0
  424. package/templates/invoices/tests/billing.test.ts +27 -0
  425. package/templates/ios/consumer/apps/ios/Package.swift +4 -3
  426. package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/ActivityView.swift +107 -0
  427. package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/AppModel.swift +171 -0
  428. package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/AuthView.swift +182 -0
  429. package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/CommentsView.swift +136 -0
  430. package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/ComposeView.swift +152 -0
  431. package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/ExploreView.swift +117 -0
  432. package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/FeedView.swift +175 -159
  433. package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/MainTabView.swift +54 -0
  434. package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/Media.swift +271 -0
  435. package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/Models.swift +101 -4
  436. package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/PostCard.swift +245 -0
  437. package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/ProfileEditorView.swift +208 -0
  438. package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/ProfileView.swift +183 -0
  439. package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/RootView.swift +25 -31
  440. package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/SocialStore.swift +285 -0
  441. package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/StoryViewer.swift +155 -0
  442. package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/Theme.swift +82 -0
  443. package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/__APP_NAME_PASCAL__App.swift +4 -47
  444. package/templates/ios/consumer/apps/ios/project.yml +13 -9
  445. package/templates/local-service/.env.example +7 -0
  446. package/templates/local-service/README.md +26 -2
  447. package/templates/local-service/app/(marketing)/booking-widget.tsx +48 -9
  448. package/templates/local-service/app/(marketing)/page.tsx +66 -42
  449. package/templates/local-service/app/auth-form.tsx +8 -8
  450. package/templates/local-service/app/dashboard/dashboard-client.tsx +119 -92
  451. package/templates/local-service/app/dashboard/page.tsx +14 -14
  452. package/templates/local-service/app/icon.svg +2 -0
  453. package/templates/local-service/app/login/page.tsx +15 -15
  454. package/templates/local-service/functions/seedDemo.ts +49 -0
  455. package/templates/local-service/lib/demo.ts +135 -0
  456. package/templates/local-service/lib/hours.ts +44 -0
  457. package/templates/local-service/lib/site.config.ts +8 -3
  458. package/templates/local-service/lib/slots.ts +3 -0
  459. package/templates/local-service/public/favicon.ico +0 -0
  460. package/templates/local-service/tests/booking.test.ts +104 -0
  461. package/templates/marketplace/README.md +23 -15
  462. package/templates/marketplace/app/globals.css +172 -114
  463. package/templates/marketplace/app/layout.tsx +75 -30
  464. package/templates/marketplace/app/listing/[id]/page.tsx +210 -123
  465. package/templates/marketplace/app/me/page.tsx +4 -4
  466. package/templates/marketplace/app/page.tsx +221 -298
  467. package/templates/marketplace/app/sell/page.tsx +8 -11
  468. package/templates/marketplace/app.ts +32 -7
  469. package/templates/marketplace/client/ActivityFeed.tsx +311 -0
  470. package/templates/marketplace/client/AuthNav.tsx +24 -16
  471. package/templates/marketplace/client/ListingCard.tsx +118 -0
  472. package/templates/marketplace/client/LiveGrid.tsx +92 -0
  473. package/templates/marketplace/client/LiveListingStatus.tsx +32 -24
  474. package/templates/marketplace/client/LoginCard.tsx +114 -136
  475. package/templates/marketplace/client/MarketProvider.tsx +3 -5
  476. package/templates/marketplace/client/MyMarket.tsx +371 -185
  477. package/templates/marketplace/client/OfferPanel.tsx +421 -287
  478. package/templates/marketplace/client/SellForm.tsx +271 -192
  479. package/templates/marketplace/client/ThemeToggle.tsx +1 -0
  480. package/templates/marketplace/client/WatchButton.tsx +16 -16
  481. package/templates/marketplace/client/market.ts +61 -14
  482. package/templates/marketplace/functions/seedMarket.ts +143 -36
  483. package/templates/marketplace/functions/seedOffers.ts +101 -0
  484. package/templates/marketplace/lib/catalog.ts +72 -1
  485. package/templates/marketplace/public/images/listings/ceramic-lamp-640.webp +0 -0
  486. package/templates/marketplace/public/images/listings/ceramic-lamp.webp +0 -0
  487. package/templates/marketplace/public/images/listings/duffel-640.webp +0 -0
  488. package/templates/marketplace/public/images/listings/duffel.webp +0 -0
  489. package/templates/marketplace/public/images/listings/film-camera-640.webp +0 -0
  490. package/templates/marketplace/public/images/listings/film-camera.webp +0 -0
  491. package/templates/marketplace/public/images/listings/lounge-chair-640.webp +0 -0
  492. package/templates/marketplace/public/images/listings/lounge-chair.webp +0 -0
  493. package/templates/marketplace/public/images/listings/road-bike-640.webp +0 -0
  494. package/templates/marketplace/public/images/listings/road-bike.webp +0 -0
  495. package/templates/marketplace/public/images/listings/slipper-chair-640.webp +0 -0
  496. package/templates/marketplace/public/images/listings/slipper-chair.webp +0 -0
  497. package/templates/marketplace/public/images/listings/turntable-640.webp +0 -0
  498. package/templates/marketplace/public/images/listings/turntable.webp +0 -0
  499. package/templates/marketplace/public/images/listings/wardrobe-640.webp +0 -0
  500. package/templates/marketplace/public/images/listings/wardrobe.webp +0 -0
  501. package/templates/marketplace/public/images/listings/watch-640.webp +0 -0
  502. package/templates/marketplace/public/images/listings/watch.webp +0 -0
  503. package/templates/marketplace/public/images/listings/weekender-bag-640.webp +0 -0
  504. package/templates/marketplace/public/images/listings/weekender-bag.webp +0 -0
  505. package/templates/marketplace/tests/example.test.ts +64 -2
  506. package/templates/marketplace/tests/listing-card.test.tsx +61 -0
  507. package/templates/projects/README.md +24 -3
  508. package/templates/projects/app/apple-icon.png +0 -0
  509. package/templates/projects/app/clients/clients-view.tsx +20 -6
  510. package/templates/projects/app/clients/page.tsx +2 -1
  511. package/templates/projects/app/globals.css +29 -14
  512. package/templates/projects/app/icon.svg +1 -0
  513. package/templates/projects/app/layout.tsx +7 -5
  514. package/templates/projects/app/page.tsx +3 -5
  515. package/templates/projects/app/projects/[id]/page.tsx +2 -1
  516. package/templates/projects/app/projects/[id]/project-view.tsx +45 -30
  517. package/templates/projects/app/projects-view.tsx +105 -52
  518. package/templates/projects/app/workspace.tsx +41 -20
  519. package/templates/projects/app.ts +2 -2
  520. package/templates/projects/components/app-shell.tsx +94 -0
  521. package/templates/projects/components/auth-form.tsx +35 -5
  522. package/templates/projects/components/avatar.tsx +5 -1
  523. package/templates/projects/components/board-skeleton.tsx +3 -3
  524. package/templates/projects/components/brand-mark.tsx +25 -0
  525. package/templates/projects/components/command-palette.tsx +17 -17
  526. package/templates/projects/components/data-table.tsx +97 -36
  527. package/templates/projects/components/filter-tabs.tsx +101 -0
  528. package/templates/projects/components/meter.tsx +48 -0
  529. package/templates/projects/components/nav.tsx +14 -0
  530. package/templates/projects/components/page-header.tsx +43 -7
  531. package/templates/projects/components/require-auth.tsx +24 -26
  532. package/templates/projects/components/sidebar.tsx +54 -48
  533. package/templates/projects/components/summary-bar.tsx +49 -0
  534. package/templates/projects/components/task-board.tsx +10 -9
  535. package/templates/projects/components/time-dialog.tsx +29 -5
  536. package/templates/projects/components/ui/button.tsx +5 -4
  537. package/templates/projects/components/ui/dialog.tsx +1 -1
  538. package/templates/projects/components/ui/input.tsx +1 -1
  539. package/templates/projects/components/ui/select.tsx +1 -1
  540. package/templates/projects/components/ui/textarea.tsx +1 -1
  541. package/templates/projects/functions/seedWorkspace.ts +26 -12
  542. package/templates/projects/lib/brand.ts +9 -0
  543. package/templates/projects/lib/demo-team.ts +51 -0
  544. package/templates/projects/lib/search.ts +4 -3
  545. package/templates/projects/lib/seed.ts +35 -1
  546. package/templates/projects/lib/work.ts +63 -0
  547. package/templates/projects/public/favicon.ico +0 -0
  548. package/templates/projects/tests/demo-team.test.ts +18 -0
  549. package/templates/projects/tests/work.test.ts +65 -0
  550. package/templates/restaurant/.env.example +7 -0
  551. package/templates/restaurant/README.md +29 -3
  552. package/templates/restaurant/app/(marketing)/layout.tsx +4 -2
  553. package/templates/restaurant/app/(marketing)/page.tsx +47 -23
  554. package/templates/restaurant/app/(marketing)/reservation-widget.tsx +37 -7
  555. package/templates/restaurant/app/auth-form.tsx +8 -8
  556. package/templates/restaurant/app/dashboard/dashboard-client.tsx +241 -109
  557. package/templates/restaurant/app/dashboard/page.tsx +14 -14
  558. package/templates/restaurant/app/icon.svg +4 -0
  559. package/templates/restaurant/app/login/page.tsx +15 -15
  560. package/templates/restaurant/functions/seedDemo.ts +44 -0
  561. package/templates/restaurant/lib/demo.ts +144 -0
  562. package/templates/restaurant/lib/hours.ts +45 -0
  563. package/templates/restaurant/lib/site.config.ts +3 -3
  564. package/templates/restaurant/public/favicon.ico +0 -0
  565. package/templates/restaurant/tests/reservations.test.ts +67 -0
  566. package/templates/saas/README.md +54 -35
  567. package/templates/saas/app/(auth)/auth-form.tsx +25 -23
  568. package/templates/saas/app/(auth)/forgot-password/page.tsx +1 -1
  569. package/templates/saas/app/(auth)/layout.tsx +27 -33
  570. package/templates/saas/app/(auth)/login/page.tsx +1 -1
  571. package/templates/saas/app/(auth)/reset-password/page.tsx +1 -1
  572. package/templates/saas/app/(auth)/signup/page.tsx +1 -1
  573. package/templates/saas/app/(marketing)/layout.tsx +127 -253
  574. package/templates/saas/app/(marketing)/page.tsx +133 -372
  575. package/templates/saas/app/(marketing)/pricing/page.tsx +21 -19
  576. package/templates/saas/app/(marketing)/products/[slug]/page.tsx +40 -95
  577. package/templates/saas/app/dashboard/board-client.tsx +416 -0
  578. package/templates/saas/app/dashboard/dashboard-client.tsx +30 -615
  579. package/templates/saas/app/dashboard/layout.tsx +27 -13
  580. package/templates/saas/app/dashboard/overview-client.tsx +332 -0
  581. package/templates/saas/app/dashboard/page.tsx +29 -35
  582. package/templates/saas/app/dashboard/projects/[id]/page.tsx +29 -0
  583. package/templates/saas/app/dashboard/projects/page.tsx +11 -7
  584. package/templates/saas/app/dashboard/projects-client.tsx +398 -0
  585. package/templates/saas/app/globals.css +5 -4
  586. package/templates/saas/app/icon.svg +1 -0
  587. package/templates/saas/app/onboarding/onboarding-client.tsx +93 -26
  588. package/templates/saas/app/onboarding/page.tsx +6 -2
  589. package/templates/saas/app.ts +68 -13
  590. package/templates/saas/components/dashboard-shell.tsx +212 -132
  591. package/templates/saas/components/marketing.tsx +137 -274
  592. package/templates/saas/components/pricing-table.tsx +12 -11
  593. package/templates/saas/components/setup-checklist.tsx +31 -29
  594. package/templates/saas/components/task-ui.tsx +199 -0
  595. package/templates/saas/functions/createProject.ts +7 -13
  596. package/templates/saas/functions/createTask.ts +67 -0
  597. package/templates/saas/functions/deleteProject.ts +17 -0
  598. package/templates/saas/functions/deleteTask.ts +14 -0
  599. package/templates/saas/functions/seedWorkspace.ts +46 -0
  600. package/templates/saas/functions/setProjectStatus.ts +41 -0
  601. package/templates/saas/functions/updateProfile.ts +13 -0
  602. package/templates/saas/functions/updateProject.ts +4 -5
  603. package/templates/saas/functions/updateTask.ts +88 -0
  604. package/templates/saas/lib/members.ts +53 -0
  605. package/templates/saas/lib/names.ts +53 -0
  606. package/templates/saas/lib/plans.ts +11 -0
  607. package/templates/saas/lib/sample-workspace.ts +117 -0
  608. package/templates/saas/lib/site.config.ts +200 -463
  609. package/templates/saas/lib/tasks.ts +101 -0
  610. package/templates/saas/lib/use-live.ts +25 -0
  611. package/templates/saas/public/favicon.ico +0 -0
  612. package/templates/saas/public/screenshots/board.png +0 -0
  613. package/templates/saas/public/screenshots/members.png +0 -0
  614. package/templates/saas/public/screenshots/overview.png +0 -0
  615. package/templates/saas/public/screenshots/projects.png +0 -0
  616. package/templates/saas/scripts/capture-screenshots.mjs +156 -0
  617. package/templates/saas/tests/names.test.ts +35 -0
  618. package/templates/saas/tests/plans.test.ts +12 -0
  619. package/templates/saas/tests/sample-workspace.test.ts +46 -0
  620. package/templates/saas/tests/tasks.test.ts +81 -0
  621. package/templates/shop/README.md +25 -13
  622. package/templates/shop/app/(marketing)/layout.tsx +94 -67
  623. package/templates/shop/app/(marketing)/not-found.tsx +13 -12
  624. package/templates/shop/app/(marketing)/page.tsx +120 -59
  625. package/templates/shop/app/(marketing)/shop-client.tsx +364 -237
  626. package/templates/shop/app/(marketing)/success/page.tsx +75 -22
  627. package/templates/shop/app/globals.css +94 -1
  628. package/templates/shop/app/layout.tsx +4 -4
  629. package/templates/shop/app/login/page.tsx +4 -4
  630. package/templates/shop/app.ts +18 -6
  631. package/templates/shop/components/cart-button.tsx +33 -0
  632. package/templates/shop/components/marketing.tsx +17 -87
  633. package/templates/shop/components/shelf-count.tsx +36 -0
  634. package/templates/shop/functions/checkout.ts +17 -1
  635. package/templates/shop/lib/cart-store.ts +57 -0
  636. package/templates/shop/lib/shelf-store.ts +35 -0
  637. package/templates/shop/lib/shop.ts +27 -0
  638. package/templates/shop/lib/site.config.ts +108 -98
  639. package/templates/shop/public/images/hero.jpg +0 -0
  640. package/templates/shop/public/images/products/cedar-smoke.jpg +0 -0
  641. package/templates/shop/public/images/products/fig-leaf.jpg +0 -0
  642. package/templates/shop/public/images/products/linen.jpg +0 -0
  643. package/templates/shop/public/images/products/sea-salt.jpg +0 -0
  644. package/templates/shop/public/images/products/tobacco-oak.jpg +0 -0
  645. package/templates/shop/tests/shop.test.ts +64 -0
  646. package/templates/waitlist/.env.example +7 -0
  647. package/templates/waitlist/README.md +29 -13
  648. package/templates/waitlist/app/(marketing)/page.tsx +9 -7
  649. package/templates/waitlist/app/(marketing)/waitlist-hero.tsx +64 -31
  650. package/templates/waitlist/app/auth-form.tsx +8 -8
  651. package/templates/waitlist/app/dashboard/dashboard-client.tsx +132 -95
  652. package/templates/waitlist/app/dashboard/page.tsx +17 -16
  653. package/templates/waitlist/app/icon.svg +2 -0
  654. package/templates/waitlist/app/login/page.tsx +14 -14
  655. package/templates/waitlist/app.ts +6 -6
  656. package/templates/waitlist/functions/joinWaitlist.ts +6 -18
  657. package/templates/waitlist/functions/seedDemo.ts +32 -0
  658. package/templates/waitlist/lib/demo.ts +94 -0
  659. package/templates/waitlist/lib/launch.ts +19 -0
  660. package/templates/waitlist/lib/site.config.ts +14 -9
  661. package/templates/waitlist/lib/stats.ts +35 -0
  662. package/templates/waitlist/public/favicon.ico +0 -0
  663. package/templates/waitlist/tests/counter.test.ts +107 -0
  664. package/templates/waitlist/tests/live-count.test.tsx +48 -0
  665. package/templates/ai-chat/tests/example.test.ts +0 -12
  666. package/templates/backend/consumer/apps/api/functions/feed.ts +0 -57
  667. package/templates/backend/consumer/apps/api/functions/profilePosts.ts +0 -17
  668. package/templates/backend/consumer/apps/api/functions/toggleLike.ts +0 -48
  669. package/templates/backend/consumer/apps/api/schema.ts +0 -143
  670. package/templates/chat/functions/_keep.ts +0 -13
  671. package/templates/chat/tests/example.test.ts +0 -12
  672. package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/ProfileSetupView.swift +0 -68
  673. package/templates/marketplace/client/LiveTicker.tsx +0 -116
  674. package/templates/marketplace/client/ScrollToListingsLink.tsx +0 -29
  675. package/templates/marketplace/public/images/marketplace-hero.webp +0 -0
@@ -1,11 +1,24 @@
1
- import { PLANS, formatPrice } from "./plans";
2
- // Business-specific copy and settings live here. The marketing components,
3
- // `create-pylon` scaffolder, and automated generators all read this file.
1
+ import type { LucideIcon } from "lucide-react";
2
+ import {
3
+ BookOpen,
4
+ Code2,
5
+ FolderKanban,
6
+ History,
7
+ KanbanSquare,
8
+ LayoutGrid,
9
+ LifeBuoy,
10
+ Users,
11
+ } from "lucide-react";
12
+ import { FREE_PROJECT_LIMIT, PLANS, TRIAL_DAYS, formatPrice } from "./plans";
13
+
14
+ // Business-specific copy and settings. The landing page, the nav and footer,
15
+ // the /products, /solutions, /resources, /company, and /compare pages, and the
16
+ // sitemap all read this file, so the whole site rebrands from here.
4
17
  //
5
- // Colors live here (applied as CSS variables on <html> in app/layout.tsx), so
6
- // you don't touch globals.css to re-theme the marketing pages.
18
+ // Colors are applied as CSS variables on <html> in app/layout.tsx.
7
19
  //
8
- // Fictional demo copy. Replace the values and keep the shape.
20
+ // "Acme" and every name, quote, and competitor below are placeholders.
21
+ // Replace them with your product's real copy before you launch.
9
22
 
10
23
  /* ----------------------------- types ----------------------------- */
11
24
 
@@ -13,15 +26,21 @@ export type ProductFeature = { title: string; body: string };
13
26
 
14
27
  export type Product = {
15
28
  slug: string;
16
- icon: string;
17
- title: string; // nav label + page <h1> subject
18
- tagline: string; // one-line blurb for the nav dropdown
19
- eyebrow: string; // section/page eyebrow
20
- headline: string; // page hero headline
21
- summary: string; // page hero paragraph
29
+ icon: LucideIcon;
30
+ title: string; // nav label and page subject
31
+ tagline: string; // one line for the nav menu
32
+ headline: string; // section and page heading
33
+ summary: string; // section and page paragraph
22
34
  features: ProductFeature[];
23
- mockupUrl: string; // fake browser URL in the screenshot frame
24
- mockupLabel: string; // placeholder label inside the frame
35
+ // A capture of this app's own dashboard (scripts/capture-screenshots.mjs).
36
+ screenshot: string;
37
+ screenshotAlt: string;
38
+ // The region of the screenshot the landing page shows, as fractions of
39
+ // its width and height (see ProductShot in components/marketing.tsx).
40
+ crop: { left: number; top: number; width: number; ratio: number };
41
+ // Shown as a section on the landing page. Every product gets its own
42
+ // /products/<slug> page either way.
43
+ onLanding: boolean;
25
44
  };
26
45
 
27
46
  export type ContentSection = { title: string; body: string };
@@ -29,8 +48,7 @@ export type ContentSection = { title: string; body: string };
29
48
  export type SitePage = {
30
49
  slug: string;
31
50
  navLabel: string; // label in nav/footer
32
- eyebrow: string;
33
- title: string; // hero headline
51
+ title: string; // page heading
34
52
  summary: string;
35
53
  sections: ContentSection[];
36
54
  };
@@ -45,8 +63,6 @@ export type Comparison = {
45
63
  };
46
64
 
47
65
  export type Social = { label: string; href: string; path: string };
48
- export type TextItem = { title: string; body: string };
49
- export type IconItem = { icon: string; title: string; body: string };
50
66
  export type Quote = { quote: string; name: string; role: string };
51
67
  export type Plan = {
52
68
  name: string;
@@ -58,51 +74,35 @@ export type Plan = {
58
74
  features: string[];
59
75
  };
60
76
  export type Faq = { q: string; a: string };
77
+ export type ResourceLink = { icon: LucideIcon; title: string; desc: string; href: string };
61
78
 
62
79
  export type SiteConfig = {
63
80
  brand: {
64
81
  name: string;
65
82
  letter: string; // logo monogram
66
- domain: string; // shown in mockup browser frames, e.g. "acme.app"
83
+ domain: string;
67
84
  email: string;
68
85
  footerBlurb: string;
69
86
  copyrightName: string;
70
87
  socials: Social[];
71
88
  };
72
- // Marketing accent + surfaces. Applied as CSS vars on <html> in layout.tsx.
89
+ // Accent + surfaces. Applied as CSS vars on <html> in layout.tsx.
73
90
  colors: { brand: string; brandSoft: string; paper: string };
74
91
  seo: { title: string; description: string };
75
92
  hero: {
76
- badge: string;
77
93
  headline: string;
78
94
  subcopy: string;
79
- mockupLabel: string;
95
+ note: string;
96
+ screenshot: string;
97
+ screenshotAlt: string;
80
98
  };
81
- logoCloud: { label: string; companies: string[] };
82
- outcomes: { eyebrow: string; headline: string; body: string; items: TextItem[] };
83
- featuredTestimonial: { quote: string; name: string; role: string };
84
- entryPoints: { eyebrow: string; title: string; body: string; items: IconItem[] };
85
- engagement: {
86
- eyebrow: string;
87
- headline: string;
88
- paragraphs: string[];
89
- items: TextItem[];
90
- };
91
- customers: { eyebrow: string; title: string; body: string; quotes: Quote[] };
92
- gettingStarted: { eyebrow: string; headline: string; body: string; steps: TextItem[] };
93
- pricing: { eyebrow: string; headline: string; body: string; plans: Plan[] };
94
- team: { eyebrow: string; headline: string; body: string; items: TextItem[] };
95
- finalCta: {
96
- eyebrow: string;
97
- headline: string;
98
- bodyLead: string;
99
- highlight: string;
100
- bodyTail: string;
101
- cta: string;
102
- footnote: string;
103
- };
104
- faq: { eyebrow: string; headline: string; items: Faq[] };
99
+ // One customer quote. Leave `quote` empty to hide the section.
100
+ quote: Quote;
101
+ pricing: { headline: string; body: string; plans: Plan[] };
102
+ finalCta: { headline: string; body: string; cta: string };
103
+ faq: { headline: string; items: Faq[] };
105
104
  products: Product[];
105
+ resourcesMenu: ResourceLink[];
106
106
  solutions: SitePage[];
107
107
  resources: SitePage[];
108
108
  company: SitePage[];
@@ -115,10 +115,9 @@ export const siteConfig: SiteConfig = {
115
115
  brand: {
116
116
  name: "Acme",
117
117
  letter: "A",
118
- domain: "acme.app",
118
+ domain: "acme.example",
119
119
  email: "hello@acme.example",
120
- footerBlurb:
121
- "Plan, build, and ship with projects, docs, and automation in one workspace.",
120
+ footerBlurb: "Projects, tasks, and the people doing them, in one shared workspace.",
122
121
  copyrightName: "Acme, Inc.",
123
122
  socials: [
124
123
  {
@@ -134,154 +133,33 @@ export const siteConfig: SiteConfig = {
134
133
  ],
135
134
  },
136
135
 
137
- colors: { brand: "#2563eb", brandSoft: "#e8f0fe", paper: "#fafafa" },
136
+ colors: { brand: "#4353ff", brandSoft: "#eef0ff", paper: "#fafafa" },
138
137
 
139
138
  seo: {
140
- title: "Acme — the workspace where work gets done",
139
+ title: "Acme: projects and tasks for small teams",
141
140
  description:
142
- "Acme brings your projects, your people, and your updates into one fast, real-time workspace. Plan together, ship together, keep everyone in the loop.",
141
+ "Acme is a shared workspace for your team's projects and tasks. Assign work, set due dates, and see every change as it happens.",
143
142
  },
144
143
 
145
144
  hero: {
146
- badge: "Acme for teams is here →",
147
- headline: "The workspace where work gets done.",
145
+ headline: "Track every project and task your team is working on.",
148
146
  subcopy:
149
- "Acme brings your projects, your people, and your updates into one fast, real-time workspace. Plan together, ship together, and keep everyone in the loop without the busywork.",
150
- mockupLabel: "Dashboard preview",
151
- },
152
-
153
- logoCloud: {
154
- label: "Powering fast-moving teams",
155
- companies: ["Northwind", "Globex", "Initech", "Umbrella", "Soylent", "Hooli"],
156
- },
157
-
158
- outcomes: {
159
- eyebrow: "Why Acme",
160
- headline: "Keep work moving from kickoff to launch.",
161
- body: "Most teams lose work somewhere between the kickoff and the ship date. Acme keeps the whole path in one place, so every idea has a clear route from planned, to in progress, to done.",
162
- items: [
163
- {
164
- title: "Work in one place",
165
- body: "Plans, tasks, and docs live together, so nothing gets lost between tools.",
166
- },
167
- {
168
- title: "Clear priorities",
169
- body: "Everyone can see what is planned, in progress, and done — and why.",
170
- },
171
- {
172
- title: "Real-time by default",
173
- body: "Every change syncs instantly, so the workspace is the same on every screen.",
174
- },
175
- {
176
- title: "Less busywork",
177
- body: "Automations handle the routine, so your team focuses on the work that matters.",
178
- },
179
- ],
147
+ "Acme keeps your projects, tasks, and owners in one shared workspace. A change made by one teammate shows up on everyone's screen within a second.",
148
+ note: `Free for up to ${FREE_PROJECT_LIMIT} projects. No card required.`,
149
+ screenshot: "/screenshots/overview.png",
150
+ screenshotAlt: "The Acme overview: open tasks by due date, project progress, and recently completed work",
180
151
  },
181
152
 
182
- featuredTestimonial: {
153
+ quote: {
183
154
  quote:
184
- "Acme gives our team one view of the work. We can see what is happening, decide what is next, and move in the same direction.",
185
- name: "Maya Chen",
186
- role: "Head of Product, Northwind",
187
- },
188
-
189
- entryPoints: {
190
- eyebrow: "Anywhere",
191
- title: "Meet your team where they already are.",
192
- body: "Web, desktop, and a typed API all share the same workspace underneath, so nothing lives in two places.",
193
- items: [
194
- {
195
- icon: "◇",
196
- title: "Cloud workspace",
197
- body: "Your whole team works in the browser. Nothing to install, always up to date, and secure by default.",
198
- },
199
- {
200
- icon: "◆",
201
- title: "Open API",
202
- body: "A typed API and webhooks for everything in Acme, so you can wire it into the rest of your stack.",
203
- },
204
- ],
205
- },
206
-
207
- engagement: {
208
- eyebrow: "Momentum",
209
- headline: "Most tools go quiet after the kickoff.",
210
- paragraphs: [
211
- "Someone shares an idea, it lands in a list, and that is the last anyone hears of it. Acme treats every idea as the start of a loop, not the end of one.",
212
- "When the status moves to planned, the people who care hear about it. When it ships, they hear about it first. And every week a digest pulls them back with the work worth weighing in on.",
213
- "The loop starts running the same day, without a separate configuration step.",
214
- ],
215
- items: [
216
- {
217
- title: "The loop",
218
- body: "Submission, acknowledgment, progress, launch. Four moments every person gets to feel heard.",
219
- },
220
- {
221
- title: "Instant alerts",
222
- body: "The moment someone votes or comments on their idea, social proof brings them back.",
223
- },
224
- {
225
- title: "Launch alerts",
226
- body: "The note that tells a person the thing they asked for just shipped. Nothing builds loyalty faster.",
227
- },
228
- {
229
- title: "Weekly digest",
230
- body: "The top ideas across your boards, delivered every week, with a one-click way to weigh in.",
231
- },
232
- ],
233
- },
234
-
235
- customers: {
236
- eyebrow: "Customers",
237
- title: "Teams that ship with Acme.",
238
- body: "A few words from the people who run their work in Acme every day.",
239
- quotes: [
240
- {
241
- quote:
242
- "The whole team sees the same work, so we spend less time in status meetings.",
243
- name: "Daniel Reyes",
244
- role: "Founder, Globex",
245
- },
246
- {
247
- quote:
248
- "We replaced five disconnected tools with one place to plan the work.",
249
- name: "Hannah Brooks",
250
- role: "Founder, OpenLane",
251
- },
252
- {
253
- quote:
254
- "People can follow their ideas from submission to launch, which helps us keep them involved.",
255
- name: "Marcus Bell",
256
- role: "Cofounder, Initech",
257
- },
258
- ],
259
- },
260
-
261
- gettingStarted: {
262
- eyebrow: "Get started",
263
- headline: "Up and running in 60 seconds.",
264
- body: "Start with an email and a workspace name. No credit card or sales call required.",
265
- steps: [
266
- {
267
- title: "Create a workspace",
268
- body: "Enter an email and choose a workspace name.",
269
- },
270
- {
271
- title: "Invite your team",
272
- body: "Add teammates, share the board URL, or link it from your site. Work starts flowing in.",
273
- },
274
- {
275
- title: "Watch the loop start",
276
- body: "People add ideas, votes pile up, you ship, and everyone hears about it and comes back with more.",
277
- },
278
- ],
155
+ "We dropped our Monday status meeting. Everyone opens the overview, sees what is due this week, and gets to work.",
156
+ name: "Priya Raman",
157
+ role: "Engineering lead, Fieldnote",
279
158
  },
280
159
 
281
160
  pricing: {
282
- eyebrow: "Pricing",
283
- headline: "Simple pricing. Every plan.",
284
- body: "Start free. Try Pro free for two weeks, and pay yearly to save.",
161
+ headline: "Pricing",
162
+ body: `Start free. Pro removes the project limit and starts with a ${TRIAL_DAYS}-day free trial.`,
285
163
  // Derived from lib/plans.ts, the catalog the Billing tab and the server
286
164
  // cap read, so marketing and billing can't disagree on a price.
287
165
  plans: PLANS.map((p) => ({
@@ -295,213 +173,145 @@ export const siteConfig: SiteConfig = {
295
173
  })),
296
174
  },
297
175
 
298
- team: {
299
- eyebrow: "The team",
300
- headline: "Built by people who use it every day.",
301
- body: "Acme is built by a small team that got tired of clunky, overpriced tools. Every feature earns its place by being something worth using every day.",
302
- items: [
303
- {
304
- title: "A small team",
305
- body: "A small team decides what is worth building and ships it.",
306
- },
307
- {
308
- title: "Design first",
309
- body: "Beautiful software makes people want to use it. Every screen is built with that in mind.",
310
- },
311
- {
312
- title: "Ships every week",
313
- body: "Updates go out weekly, often based on work posted directly to our own board.",
314
- },
315
- {
316
- title: "Customer funded",
317
- body: "We optimize for your renewal, not an exit. If Acme works for you, it works for us.",
318
- },
319
- ],
320
- },
321
-
322
176
  finalCta: {
323
- eyebrow: "Start building",
324
- headline: "Stop losing momentum to busywork.",
325
- bodyLead: "Plan, decide, and ship in ",
326
- highlight: "one shared workspace",
327
- bodyTail: ".",
328
- cta: "Start building with Acme",
329
- footnote: "Free to start · No credit card · Cancel anytime",
177
+ headline: "Set up your workspace",
178
+ body: "Create an account, name your workspace, and add your first project. Sample projects are one click away if you want to look around first.",
179
+ cta: "Create a free account",
330
180
  },
331
181
 
332
182
  faq: {
333
- eyebrow: "Questions",
334
- headline: "Frequently asked.",
183
+ headline: "Questions",
335
184
  items: [
336
185
  {
337
- q: "Is Acme a fit for my team?",
338
- a: "Acme works for any team that plans and ships work together — product, design, engineering, or ops.",
186
+ q: "What counts toward the free plan's limit?",
187
+ a: `Active projects. A free workspace can have ${FREE_PROJECT_LIMIT} at a time. Archived projects don't count, and tasks and members are unlimited on every plan.`,
188
+ },
189
+ {
190
+ q: "How does the Pro trial work?",
191
+ a: `Pro starts with ${TRIAL_DAYS} days free. Checkout asks for a card, and you are charged when the trial ends unless you cancel from Billing first.`,
339
192
  },
340
193
  {
341
- q: "What about migrating from another tool?",
342
- a: "Import your existing projects and pick up where you left off.",
194
+ q: "Who can see a workspace's projects?",
195
+ a: "Only its members. Each workspace's projects and tasks are stored separately, and people outside it can't read or change them.",
343
196
  },
344
197
  {
345
- q: "Is there an API or a way to script this?",
346
- a: "Yes — every action in Acme is available over a typed API and an MCP server.",
198
+ q: "What can each role do?",
199
+ a: "Owners and admins invite people, change roles, and manage billing. Members create and edit projects and tasks.",
347
200
  },
348
201
  {
349
- q: "Do you offer SSO?",
350
- a: "SSO and audit logging are included on the Business plan.",
202
+ q: "Can I belong to more than one workspace?",
203
+ a: "Yes. Switch between them from the menu at the top of the sidebar.",
351
204
  },
352
205
  ],
353
206
  },
354
207
 
355
208
  products: [
356
209
  {
357
- slug: "projects",
358
- icon: "▤",
359
- title: "Projects",
360
- tagline: "Plan and track every initiative.",
361
- eyebrow: "Projects",
362
- headline: "Plan every project in one place.",
363
- summary:
364
- "Give your team one place to plan the work, see what is in flight, and keep every project moving toward done.",
365
- mockupUrl: "acme.app/projects",
366
- mockupLabel: "Projects board",
367
- features: [
368
- { title: "Flexible views", body: "See the work as a board, a list, or a timeline — whatever fits the team." },
369
- { title: "Milestones", body: "Group work into milestones so everyone knows what ships next." },
370
- { title: "Dependencies", body: "Link related work so blockers surface before they bite." },
371
- { title: "Custom fields", body: "Track the details that matter to your team, your way." },
372
- { title: "Templates", body: "Start new projects from a template instead of a blank page." },
373
- { title: "Saved filters", body: "Slice the work by owner, status, or label in a single click." },
374
- ],
375
- },
376
- {
377
- slug: "tasks",
378
- icon: "✓",
379
- title: "Tasks",
380
- tagline: "Assign, prioritize, and finish work.",
381
- eyebrow: "Tasks",
382
- headline: "Turn plans into finished work.",
210
+ slug: "boards",
211
+ icon: KanbanSquare,
212
+ title: "Task boards",
213
+ tagline: "A board with four columns for every project.",
214
+ headline: "A board for every project",
383
215
  summary:
384
- "Break projects into tasks, assign owners, and watch progress update in real time across every screen.",
385
- mockupUrl: "acme.app/tasks",
386
- mockupLabel: "Task list",
216
+ "Tasks sit in four columns: To do, In progress, In review, and Done. Give each one a priority, an owner, and a due date, and change its status right from the card.",
217
+ screenshot: "/screenshots/board.png",
218
+ screenshotAlt: "A project board with tasks in To do, In progress, In review, and Done",
219
+ crop: { left: 0.17, top: 0.07, width: 0.82, ratio: 2 },
220
+ onLanding: true,
387
221
  features: [
388
- { title: "Assignees and due dates", body: "Every task has a clear owner and a clear deadline." },
389
- { title: "Subtasks", body: "Break big tasks into small, checkable steps." },
390
- { title: "Priorities", body: "Sort by what matters most so the right work happens first." },
391
- { title: "Comments", body: "Discuss the work where it lives, with full context attached." },
392
- { title: "My work", body: "A personal view of everything on your plate, across projects." },
393
- { title: "Recurring tasks", body: "Set it once and the task comes back when it should." },
222
+ { title: "Four statuses", body: "To do, In progress, In review, and Done, in that order on every board." },
223
+ { title: "Priorities", body: "Urgent, high, medium, or low. Urgent work sorts to the top of its column." },
224
+ { title: "Owners and due dates", body: "Assign a teammate and a date. Overdue tasks turn red." },
225
+ { title: "Live changes", body: "When a teammate moves a card, it moves on your screen too." },
394
226
  ],
395
227
  },
396
228
  {
397
- slug: "docs",
398
- icon: "≡",
399
- title: "Docs",
400
- tagline: "Write and share team knowledge.",
401
- eyebrow: "Docs",
402
- headline: "Keep what your team knows in one place.",
229
+ slug: "overview",
230
+ icon: LayoutGrid,
231
+ title: "Overview",
232
+ tagline: "What is due, and how each project is going.",
233
+ headline: "See what is due this week",
403
234
  summary:
404
- "Write docs, notes, and specs alongside the work, so the context never lives in just one person's head.",
405
- mockupUrl: "acme.app/docs",
406
- mockupLabel: "Doc editor",
235
+ "The overview lists open tasks by due date, shows progress for each project, and lists what the team finished recently. Filter to the tasks assigned to you.",
236
+ screenshot: "/screenshots/overview.png",
237
+ screenshotAlt: "The overview with open tasks by due date and project progress",
238
+ crop: { left: 0.195, top: 0.3, width: 0.77, ratio: 16 / 9 },
239
+ onLanding: true,
407
240
  features: [
408
- { title: "Rich editor", body: "Headings, checklists, tables, and embeds in a clean editor." },
409
- { title: "Linked to work", body: "Connect a doc to the project or task it describes." },
410
- { title: "Real-time co-editing", body: "Write together, with changes syncing as you type." },
411
- { title: "Version history", body: "Roll back to any earlier version in a click." },
412
- { title: "Templates", body: "Spin up specs, briefs, and notes from reusable templates." },
413
- { title: "Instant search", body: "Find any doc by title or content in milliseconds." },
241
+ { title: "Up next", body: "Open tasks across every project, earliest due date first." },
242
+ { title: "Assigned to me", body: "One click narrows the list to your own work." },
243
+ { title: "Project progress", body: "Done and total tasks for each active project." },
244
+ { title: "Weekly count", body: "Tasks completed in the last seven days." },
414
245
  ],
415
246
  },
416
247
  {
417
- slug: "automations",
418
- icon: "⟳",
419
- title: "Automations",
420
- tagline: "Automate the busywork.",
421
- eyebrow: "Automations",
422
- headline: "Let the routine work run itself.",
248
+ slug: "projects",
249
+ icon: FolderKanban,
250
+ title: "Projects",
251
+ tagline: "Every project with its progress.",
252
+ headline: "Progress for every project",
423
253
  summary:
424
- "Build simple rules that move work forward automatically, so your team spends its time on what actually matters.",
425
- mockupUrl: "acme.app/automations",
426
- mockupLabel: "Automation builder",
254
+ "Each project shows its open tasks and a progress bar. Archive a finished project to keep the list short, and restore it when you need it again.",
255
+ screenshot: "/screenshots/projects.png",
256
+ screenshotAlt: "The projects list with progress bars and open task counts",
257
+ crop: { left: 0.27, top: 0.1, width: 0.7, ratio: 16 / 7 },
258
+ onLanding: false,
427
259
  features: [
428
- { title: "Rules", body: "When this happens, do that — no code required." },
429
- { title: "Scheduled runs", body: "Kick off routine work on a schedule you set." },
430
- { title: "Webhooks", body: "Trigger automations from anything that can send a request." },
431
- { title: "Run history", body: "See exactly what ran, when, and why." },
260
+ { title: "Progress bars", body: "The share of each project's tasks that are done." },
261
+ { title: "Archive and restore", body: "Archived projects keep their tasks and leave the active list." },
262
+ { title: "Descriptions", body: "A line under each name that says what the project delivers." },
263
+ { title: "Delete with tasks", body: "Deleting a project removes its tasks with it." },
432
264
  ],
433
265
  },
434
266
  {
435
- slug: "analytics",
436
- icon: "◔",
437
- title: "Analytics",
438
- tagline: "Measure what actually matters.",
439
- eyebrow: "Analytics",
440
- headline: "See how the work is really going.",
267
+ slug: "members",
268
+ icon: Users,
269
+ title: "Members and roles",
270
+ tagline: "Invite your team and set who can do what.",
271
+ headline: "Workspaces, members, and roles",
441
272
  summary:
442
- "Track throughput, cycle time, and progress across projects, so you can spot what is stuck before it slips.",
443
- mockupUrl: "acme.app/analytics",
444
- mockupLabel: "Analytics dashboard",
273
+ "Invite people by email. Owners and admins manage members and billing, and members work on projects and tasks. A workspace's data is visible only to its members.",
274
+ screenshot: "/screenshots/members.png",
275
+ screenshotAlt: "The members page with four members and two pending invitations",
276
+ crop: { left: 0.3, top: 0.07, width: 0.54, ratio: 16 / 10 },
277
+ onLanding: true,
445
278
  features: [
446
- { title: "Dashboards", body: "Build views that answer the questions your team asks most." },
447
- { title: "Cycle time", body: "See how long work takes from start to done." },
448
- { title: "Throughput", body: "Track how much ships each week, by team or project." },
449
- { title: "Exports", body: "Send any view to CSV or your warehouse." },
279
+ { title: "Email invites", body: "Invitees get a link that adds them to the workspace." },
280
+ { title: "Three roles", body: "Owner, admin, and member, changeable at any time." },
281
+ { title: "Many workspaces", body: "One account can belong to several workspaces." },
282
+ { title: "Private by default", body: "People outside a workspace can't read its projects or tasks." },
450
283
  ],
451
284
  },
452
285
  ],
453
286
 
287
+ resourcesMenu: [
288
+ { icon: BookOpen, title: "Docs", desc: "Set up and use Acme.", href: "/resources/docs" },
289
+ { icon: History, title: "Changelog", desc: "What changed, week by week.", href: "/resources/changelog" },
290
+ { icon: Code2, title: "API reference", desc: "Read and write your workspace from code.", href: "/resources/api" },
291
+ { icon: LifeBuoy, title: "Contact", desc: "Talk to the team behind Acme.", href: "/company/contact" },
292
+ ],
293
+
454
294
  solutions: [
455
295
  {
456
296
  slug: "startups",
457
297
  navLabel: "For startups",
458
- eyebrow: "Solutions",
459
- title: "Move fast without losing the thread.",
460
- summary:
461
- "Keep a small team aligned as everything changes weekly. Acme gives you one place to plan, build, and ship before the next pivot.",
298
+ title: "Keep a small team on the same page",
299
+ summary: "One workspace for every project, with the owner and due date of each task in plain view.",
462
300
  sections: [
463
- { title: "One workspace", body: "Keep projects, tasks, and docs together instead of stitching together separate apps." },
464
- { title: "Set up in minutes", body: "Invite the team and start working the same day." },
465
- { title: "Grows with you", body: "The same workspace works at five people and at fifty." },
301
+ { title: "Set up in minutes", body: "Name the workspace, invite the team, and add a project." },
302
+ { title: "Free to start", body: `Up to ${FREE_PROJECT_LIMIT} active projects on the free plan.` },
303
+ { title: "Room to grow", body: "Pro removes the project limit when you need more." },
466
304
  ],
467
305
  },
468
306
  {
469
307
  slug: "agencies",
470
308
  navLabel: "For agencies",
471
- eyebrow: "Solutions",
472
- title: "Run every client like clockwork.",
473
- summary:
474
- "Give each client their own space, keep the work organized, and show progress without a status meeting.",
309
+ title: "One workspace per client",
310
+ summary: "Keep each client's projects in a separate workspace and switch between them from the sidebar.",
475
311
  sections: [
476
- { title: "A space per client", body: "Separate workspaces keep every engagement tidy and private." },
477
- { title: "Shareable views", body: "Send clients a read-only view of exactly what is in flight." },
478
- { title: "Reusable templates", body: "Start every new engagement from a proven playbook." },
479
- ],
480
- },
481
- {
482
- slug: "enterprise",
483
- navLabel: "For enterprise",
484
- eyebrow: "Solutions",
485
- title: "Scale without the chaos.",
486
- summary:
487
- "Bring hundreds of people into one system of record, with the controls and visibility a larger org needs.",
488
- sections: [
489
- { title: "SSO and roles", body: "Single sign-on and granular roles keep access where it belongs." },
490
- { title: "Audit log", body: "A complete record of who changed what, and when." },
491
- { title: "Rollups", body: "See progress across teams and departments in one view." },
492
- ],
493
- },
494
- {
495
- slug: "teams",
496
- navLabel: "For teams",
497
- eyebrow: "Solutions",
498
- title: "Match Acme to your workflow.",
499
- summary:
500
- "Custom fields and statuses adapt Acme to product, design, marketing, and support workflows.",
501
- sections: [
502
- { title: "Your workflow", body: "Custom statuses and fields match the way your team already works." },
503
- { title: "Cross-team work", body: "Hand work between teams without it falling through a crack." },
504
- { title: "Less status-chasing", body: "Everyone sees the same live picture, so updates write themselves." },
312
+ { title: "Separate data", body: "A client's workspace is visible only to the people you invite to it." },
313
+ { title: "Invite the client", body: "Add client contacts as members so they can follow the board." },
314
+ { title: "Archive finished work", body: "Archived projects keep their history out of the active list." },
505
315
  ],
506
316
  },
507
317
  ],
@@ -510,61 +320,34 @@ export const siteConfig: SiteConfig = {
510
320
  {
511
321
  slug: "docs",
512
322
  navLabel: "Docs",
513
- eyebrow: "Resources",
514
- title: "Documentation.",
515
- summary: "Set up Acme, invite your team, and configure projects, automations, and integrations.",
323
+ title: "Documentation",
324
+ summary: "How to set up a workspace, invite your team, and run projects in Acme.",
516
325
  sections: [
517
- { title: "Getting started", body: "Create a workspace, invite your team, and ship your first project." },
518
- { title: "Guides", body: "Deep dives on projects, tasks, docs, automations, and analytics." },
519
- { title: "API", body: "Build on the typed Acme API and webhooks." },
520
- ],
521
- },
522
- {
523
- slug: "guides",
524
- navLabel: "Guides",
525
- eyebrow: "Resources",
526
- title: "Guides and playbooks.",
527
- summary: "Practical walkthroughs for getting the most out of Acme.",
528
- sections: [
529
- { title: "Run a sprint", body: "Plan, track, and review a two-week cycle in Acme." },
530
- { title: "Automate intake", body: "Route incoming work to the right team automatically." },
531
- { title: "Report to leadership", body: "Build a dashboard that answers the questions you get asked." },
326
+ { title: "Getting started", body: "Create a workspace, invite your team, and add your first project." },
327
+ { title: "Boards", body: "Statuses, priorities, owners, and due dates." },
328
+ { title: "Billing", body: "Plans, the Pro trial, and invoices." },
532
329
  ],
533
330
  },
534
331
  {
535
332
  slug: "changelog",
536
333
  navLabel: "Changelog",
537
- eyebrow: "Resources",
538
- title: "What's new.",
539
- summary: "Every improvement we ship, in one place.",
334
+ title: "Changelog",
335
+ summary: "What we shipped, newest first.",
540
336
  sections: [
541
- { title: "This week", body: "Faster search, a redesigned task list, and new automation triggers." },
542
- { title: "Last week", body: "Timeline view for projects and CSV export for analytics." },
543
- { title: "Earlier", body: "Webhooks, custom fields, and version history for docs." },
337
+ { title: "This week", body: "An Up next list on the overview, sorted by due date." },
338
+ { title: "Last week", body: "Archive and restore for projects." },
339
+ { title: "Earlier", body: "Task boards with priorities and due dates." },
544
340
  ],
545
341
  },
546
342
  {
547
343
  slug: "api",
548
344
  navLabel: "API reference",
549
- eyebrow: "Resources",
550
- title: "API reference.",
551
- summary: "A typed REST API and webhooks for everything in Acme.",
345
+ title: "API reference",
346
+ summary: "Read and write your workspace's projects and tasks over HTTP.",
552
347
  sections: [
553
- { title: "Authentication", body: "API keys scoped to a workspace, revocable at any time." },
554
- { title: "Resources", body: "Projects, tasks, docs, and automations, all over the same API." },
555
- { title: "Webhooks", body: "Subscribe to events and react to changes in real time." },
556
- ],
557
- },
558
- {
559
- slug: "status",
560
- navLabel: "Status",
561
- eyebrow: "Resources",
562
- title: "System status.",
563
- summary: "Live status for every Acme service.",
564
- sections: [
565
- { title: "API", body: "Operational — 99.99% over the last 90 days." },
566
- { title: "Web app", body: "Operational — no incidents this week." },
567
- { title: "Webhooks", body: "Operational — delivering within seconds." },
348
+ { title: "Authentication", body: "Requests carry a session token scoped to one workspace." },
349
+ { title: "Projects and tasks", body: "List, create, and update them with the same checks the app uses." },
350
+ { title: "Live updates", body: "Subscribe to changes over a WebSocket." },
568
351
  ],
569
352
  },
570
353
  ],
@@ -573,92 +356,63 @@ export const siteConfig: SiteConfig = {
573
356
  {
574
357
  slug: "about",
575
358
  navLabel: "About",
576
- eyebrow: "Company",
577
- title: "About Acme.",
578
- summary: "We build the workspace we always wanted: fast, focused, and a pleasure to use.",
359
+ title: "About Acme",
360
+ summary: "A small team building a fast, focused place to track work.",
579
361
  sections: [
580
- { title: "Our mission", body: "Help teams do their best work without fighting their tools." },
581
- { title: "How we work", body: "Small team, weekly releases, every decision close to the user." },
582
- { title: "Where we are", body: "Remote-first, with people across a dozen time zones." },
583
- ],
584
- },
585
- {
586
- slug: "blog",
587
- navLabel: "Blog",
588
- eyebrow: "Company",
589
- title: "The Acme blog.",
590
- summary: "Notes on building Acme, and on building product in general.",
591
- sections: [
592
- { title: "Why one tool beats ten", body: "The hidden cost of stitching your stack together." },
593
- { title: "Shipping weekly", body: "How a small team keeps a steady release cadence." },
594
- { title: "Designing for focus", body: "The principles behind the Acme interface." },
595
- ],
596
- },
597
- {
598
- slug: "careers",
599
- navLabel: "Careers",
600
- eyebrow: "Company",
601
- title: "Work at Acme.",
602
- summary: "We are a small team that ships a lot. If that sounds good, come build with us.",
603
- sections: [
604
- { title: "Engineering", body: "Full-stack engineers who care about craft and speed." },
605
- { title: "Design", body: "Product designers who sweat the details." },
606
- { title: "Support", body: "People who love helping customers succeed." },
362
+ { title: "What we build", body: "Project and task tracking for teams of two to fifty." },
363
+ { title: "How we work", body: "Small team, weekly releases." },
364
+ { title: "Where we are", body: "Remote, across several time zones." },
607
365
  ],
608
366
  },
609
367
  {
610
368
  slug: "contact",
611
369
  navLabel: "Contact",
612
- eyebrow: "Company",
613
- title: "Get in touch.",
614
- summary: "Contact the Acme team about sales, support, or press.",
370
+ title: "Contact",
371
+ summary: "Reach the Acme team about sales, support, or press.",
615
372
  sections: [
616
- { title: "Sales", body: "Talk through whether Acme is a fit for your team." },
617
- { title: "Support", body: "Get help from a human, usually within a few hours." },
618
- { title: "Press", body: "Logos, screenshots, and company facts for the press." },
373
+ { title: "Sales", body: "hello@acme.example" },
374
+ { title: "Support", body: "support@acme.example, answered within one business day." },
375
+ { title: "Press", body: "press@acme.example" },
619
376
  ],
620
377
  },
621
378
  {
622
379
  slug: "privacy",
623
380
  navLabel: "Privacy",
624
- eyebrow: "Company",
625
- title: "Privacy.",
626
- summary: "How Acme handles your data, in plain language.",
381
+ title: "Privacy",
382
+ summary: "How Acme handles your data.",
627
383
  sections: [
628
- { title: "What we collect", body: "Only what we need to run the product and support you." },
629
- { title: "How we use it", body: "To operate Acme — never sold, never rented." },
630
- { title: "Your control", body: "Export or delete your data at any time." },
384
+ { title: "What we collect", body: "Your account details and the content you add to your workspaces." },
385
+ { title: "How we use it", body: "To run Acme for you. We don't sell it." },
386
+ { title: "Your control", body: "Delete your account or a workspace at any time from Settings." },
631
387
  ],
632
388
  },
633
389
  {
634
390
  slug: "terms",
635
391
  navLabel: "Terms",
636
- eyebrow: "Company",
637
- title: "Terms of Service.",
638
- summary: "The rules for using Acme, in plain language.",
392
+ title: "Terms of Service",
393
+ summary: "The rules for using Acme.",
639
394
  sections: [
640
- { title: "Using Acme", body: "Use it for lawful work; don't abuse the service or other customers." },
641
- { title: "Your content", body: "You own your data — you grant us only what's needed to run the product for you." },
642
- { title: "Changes & cancellation", body: "Cancel anytime; we give notice before any material change to these terms." },
395
+ { title: "Using Acme", body: "Use it for lawful work, and don't abuse the service or other customers." },
396
+ { title: "Your content", body: "You own your data. You grant us only what we need to run the product for you." },
397
+ { title: "Changes and cancellation", body: "Cancel any time. We give notice before any material change to these terms." },
643
398
  ],
644
399
  },
645
400
  ],
646
401
 
647
- // Generic, made-up competitors so the template ships no real brand names.
402
+ // Made-up competitors, so the template ships no real brand names. Replace
403
+ // them with real comparisons, or delete the entries to drop the pages.
648
404
  comparisons: [
649
405
  {
650
406
  slug: "beacon",
651
407
  navLabel: "Acme vs Beacon",
652
408
  competitor: "Beacon",
653
409
  title: "Acme vs Beacon",
654
- summary:
655
- "Beacon separates projects, docs, and automation across products. Acme keeps them in one workspace.",
410
+ summary: "Beacon is built for large programs. Acme is built for small teams that want to start the same day.",
656
411
  rows: [
657
- { dim: "Projects, tasks, and docs", acme: "In one workspace", them: "Separate products" },
658
- { dim: "Real-time sync", acme: "Built in", them: "Add-on" },
659
- { dim: "Automations", acme: "Included", them: "Higher tier" },
660
- { dim: "Typed API", acme: "Yes", them: "Partial" },
661
- { dim: "Setup time", acme: "Minutes", them: "Hours" },
412
+ { dim: "Setup", acme: "One form and you're in", them: "Guided onboarding call" },
413
+ { dim: "Live updates", acme: "Every screen, within a second", them: "On refresh" },
414
+ { dim: "Free plan", acme: `${FREE_PROJECT_LIMIT} active projects`, them: "14-day trial only" },
415
+ { dim: "Members", acme: "Unlimited on every plan", them: "Priced per seat" },
662
416
  ],
663
417
  },
664
418
  {
@@ -666,36 +420,19 @@ export const siteConfig: SiteConfig = {
666
420
  navLabel: "Acme vs Orbit",
667
421
  competitor: "Orbit",
668
422
  title: "Acme vs Orbit",
669
- summary:
670
- "Orbit requires more setup and administration. Acme focuses on same-day setup and a smaller operational footprint.",
671
- rows: [
672
- { dim: "Time to first project", acme: "Same day", them: "Onboarding required" },
673
- { dim: "Speed", acme: "Instant, real-time", them: "Page reloads" },
674
- { dim: "Per-seat pricing", acme: "No surprises", them: "Adds up fast" },
675
- { dim: "Analytics", acme: "Built in", them: "Separate tool" },
676
- { dim: "Learning curve", acme: "Gentle", them: "Steep" },
677
- ],
678
- },
679
- {
680
- slug: "tempo",
681
- navLabel: "Acme vs Tempo",
682
- competitor: "Tempo",
683
- title: "Acme vs Tempo",
684
- summary:
685
- "Tempo centers management reporting. Acme gives the whole team a shared view of daily work.",
423
+ summary: "Orbit is a spreadsheet with task features. Acme is a task board with the essentials and nothing else.",
686
424
  rows: [
687
- { dim: "Designed for", acme: "The whole team", them: "Managers" },
688
- { dim: "Daily driver", acme: "Yes", them: "Reporting layer" },
689
- { dim: "Docs included", acme: "Yes", them: "No" },
690
- { dim: "Automations", acme: "Included", them: "Limited" },
691
- { dim: "Self-serve", acme: "Yes", them: "Sales-led" },
425
+ { dim: "Main view", acme: "Board per project", them: "Grid" },
426
+ { dim: "Priorities", acme: "Built in", them: "Custom column" },
427
+ { dim: "Due-date warnings", acme: "Built in", them: "Formula" },
428
+ { dim: "Members", acme: "Unlimited on every plan", them: "Priced per seat" },
692
429
  ],
693
430
  },
694
431
  ],
695
432
  };
696
433
 
697
- /* ------------------- back-compat exports + helpers ---------------- */
698
- // Existing imports (`@/lib/products`, `@/lib/site`) keep working via these.
434
+ /* ------------------------- lookups + helpers ---------------------- */
435
+ // `@/lib/products` and `@/lib/site` re-export these.
699
436
 
700
437
  export const PRODUCTS = siteConfig.products;
701
438
  export function productBySlug(slug: string): Product | undefined {