availsync 0.1.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 (460) hide show
  1. package/.adal/skills/stripe-best-practices/SKILL.md +42 -0
  2. package/.adal/skills/stripe-best-practices/references/billing.md +36 -0
  3. package/.adal/skills/stripe-best-practices/references/connect.md +48 -0
  4. package/.adal/skills/stripe-best-practices/references/payments.md +79 -0
  5. package/.adal/skills/stripe-best-practices/references/security.md +109 -0
  6. package/.adal/skills/stripe-best-practices/references/treasury.md +16 -0
  7. package/.adal/skills/stripe-projects/SKILL.md +139 -0
  8. package/.adal/skills/upgrade-stripe/SKILL.md +185 -0
  9. package/.agents/skills/stripe-best-practices/SKILL.md +42 -0
  10. package/.agents/skills/stripe-best-practices/references/billing.md +36 -0
  11. package/.agents/skills/stripe-best-practices/references/connect.md +48 -0
  12. package/.agents/skills/stripe-best-practices/references/payments.md +79 -0
  13. package/.agents/skills/stripe-best-practices/references/security.md +109 -0
  14. package/.agents/skills/stripe-best-practices/references/treasury.md +16 -0
  15. package/.agents/skills/stripe-projects/SKILL.md +139 -0
  16. package/.agents/skills/upgrade-stripe/SKILL.md +185 -0
  17. package/.augment/skills/stripe-best-practices/SKILL.md +42 -0
  18. package/.augment/skills/stripe-best-practices/references/billing.md +36 -0
  19. package/.augment/skills/stripe-best-practices/references/connect.md +48 -0
  20. package/.augment/skills/stripe-best-practices/references/payments.md +79 -0
  21. package/.augment/skills/stripe-best-practices/references/security.md +109 -0
  22. package/.augment/skills/stripe-best-practices/references/treasury.md +16 -0
  23. package/.augment/skills/stripe-projects/SKILL.md +139 -0
  24. package/.augment/skills/upgrade-stripe/SKILL.md +185 -0
  25. package/.bob/skills/stripe-best-practices/SKILL.md +42 -0
  26. package/.bob/skills/stripe-best-practices/references/billing.md +36 -0
  27. package/.bob/skills/stripe-best-practices/references/connect.md +48 -0
  28. package/.bob/skills/stripe-best-practices/references/payments.md +79 -0
  29. package/.bob/skills/stripe-best-practices/references/security.md +109 -0
  30. package/.bob/skills/stripe-best-practices/references/treasury.md +16 -0
  31. package/.bob/skills/stripe-projects/SKILL.md +139 -0
  32. package/.bob/skills/upgrade-stripe/SKILL.md +185 -0
  33. package/.claude/settings.local.json +7 -0
  34. package/.claude/skills/stripe-best-practices/SKILL.md +42 -0
  35. package/.claude/skills/stripe-best-practices/references/billing.md +36 -0
  36. package/.claude/skills/stripe-best-practices/references/connect.md +48 -0
  37. package/.claude/skills/stripe-best-practices/references/payments.md +79 -0
  38. package/.claude/skills/stripe-best-practices/references/security.md +109 -0
  39. package/.claude/skills/stripe-best-practices/references/treasury.md +16 -0
  40. package/.claude/skills/stripe-projects/SKILL.md +139 -0
  41. package/.claude/skills/upgrade-stripe/SKILL.md +185 -0
  42. package/.codebuddy/skills/stripe-best-practices/SKILL.md +42 -0
  43. package/.codebuddy/skills/stripe-best-practices/references/billing.md +36 -0
  44. package/.codebuddy/skills/stripe-best-practices/references/connect.md +48 -0
  45. package/.codebuddy/skills/stripe-best-practices/references/payments.md +79 -0
  46. package/.codebuddy/skills/stripe-best-practices/references/security.md +109 -0
  47. package/.codebuddy/skills/stripe-best-practices/references/treasury.md +16 -0
  48. package/.codebuddy/skills/stripe-projects/SKILL.md +139 -0
  49. package/.codebuddy/skills/upgrade-stripe/SKILL.md +185 -0
  50. package/.commandcode/skills/stripe-best-practices/SKILL.md +42 -0
  51. package/.commandcode/skills/stripe-best-practices/references/billing.md +36 -0
  52. package/.commandcode/skills/stripe-best-practices/references/connect.md +48 -0
  53. package/.commandcode/skills/stripe-best-practices/references/payments.md +79 -0
  54. package/.commandcode/skills/stripe-best-practices/references/security.md +109 -0
  55. package/.commandcode/skills/stripe-best-practices/references/treasury.md +16 -0
  56. package/.commandcode/skills/stripe-projects/SKILL.md +139 -0
  57. package/.commandcode/skills/upgrade-stripe/SKILL.md +185 -0
  58. package/.continue/skills/stripe-best-practices/SKILL.md +42 -0
  59. package/.continue/skills/stripe-best-practices/references/billing.md +36 -0
  60. package/.continue/skills/stripe-best-practices/references/connect.md +48 -0
  61. package/.continue/skills/stripe-best-practices/references/payments.md +79 -0
  62. package/.continue/skills/stripe-best-practices/references/security.md +109 -0
  63. package/.continue/skills/stripe-best-practices/references/treasury.md +16 -0
  64. package/.continue/skills/stripe-projects/SKILL.md +139 -0
  65. package/.continue/skills/upgrade-stripe/SKILL.md +185 -0
  66. package/.cortex/skills/stripe-best-practices/SKILL.md +42 -0
  67. package/.cortex/skills/stripe-best-practices/references/billing.md +36 -0
  68. package/.cortex/skills/stripe-best-practices/references/connect.md +48 -0
  69. package/.cortex/skills/stripe-best-practices/references/payments.md +79 -0
  70. package/.cortex/skills/stripe-best-practices/references/security.md +109 -0
  71. package/.cortex/skills/stripe-best-practices/references/treasury.md +16 -0
  72. package/.cortex/skills/stripe-projects/SKILL.md +139 -0
  73. package/.cortex/skills/upgrade-stripe/SKILL.md +185 -0
  74. package/.crush/skills/stripe-best-practices/SKILL.md +42 -0
  75. package/.crush/skills/stripe-best-practices/references/billing.md +36 -0
  76. package/.crush/skills/stripe-best-practices/references/connect.md +48 -0
  77. package/.crush/skills/stripe-best-practices/references/payments.md +79 -0
  78. package/.crush/skills/stripe-best-practices/references/security.md +109 -0
  79. package/.crush/skills/stripe-best-practices/references/treasury.md +16 -0
  80. package/.crush/skills/stripe-projects/SKILL.md +139 -0
  81. package/.crush/skills/upgrade-stripe/SKILL.md +185 -0
  82. package/.env.example +20 -0
  83. package/.factory/skills/stripe-best-practices/SKILL.md +42 -0
  84. package/.factory/skills/stripe-best-practices/references/billing.md +36 -0
  85. package/.factory/skills/stripe-best-practices/references/connect.md +48 -0
  86. package/.factory/skills/stripe-best-practices/references/payments.md +79 -0
  87. package/.factory/skills/stripe-best-practices/references/security.md +109 -0
  88. package/.factory/skills/stripe-best-practices/references/treasury.md +16 -0
  89. package/.factory/skills/stripe-projects/SKILL.md +139 -0
  90. package/.factory/skills/upgrade-stripe/SKILL.md +185 -0
  91. package/.goose/skills/stripe-best-practices/SKILL.md +42 -0
  92. package/.goose/skills/stripe-best-practices/references/billing.md +36 -0
  93. package/.goose/skills/stripe-best-practices/references/connect.md +48 -0
  94. package/.goose/skills/stripe-best-practices/references/payments.md +79 -0
  95. package/.goose/skills/stripe-best-practices/references/security.md +109 -0
  96. package/.goose/skills/stripe-best-practices/references/treasury.md +16 -0
  97. package/.goose/skills/stripe-projects/SKILL.md +139 -0
  98. package/.goose/skills/upgrade-stripe/SKILL.md +185 -0
  99. package/.iflow/skills/stripe-best-practices/SKILL.md +42 -0
  100. package/.iflow/skills/stripe-best-practices/references/billing.md +36 -0
  101. package/.iflow/skills/stripe-best-practices/references/connect.md +48 -0
  102. package/.iflow/skills/stripe-best-practices/references/payments.md +79 -0
  103. package/.iflow/skills/stripe-best-practices/references/security.md +109 -0
  104. package/.iflow/skills/stripe-best-practices/references/treasury.md +16 -0
  105. package/.iflow/skills/stripe-projects/SKILL.md +139 -0
  106. package/.iflow/skills/upgrade-stripe/SKILL.md +185 -0
  107. package/.junie/skills/stripe-best-practices/SKILL.md +42 -0
  108. package/.junie/skills/stripe-best-practices/references/billing.md +36 -0
  109. package/.junie/skills/stripe-best-practices/references/connect.md +48 -0
  110. package/.junie/skills/stripe-best-practices/references/payments.md +79 -0
  111. package/.junie/skills/stripe-best-practices/references/security.md +109 -0
  112. package/.junie/skills/stripe-best-practices/references/treasury.md +16 -0
  113. package/.junie/skills/stripe-projects/SKILL.md +139 -0
  114. package/.junie/skills/upgrade-stripe/SKILL.md +185 -0
  115. package/.kilocode/skills/stripe-best-practices/SKILL.md +42 -0
  116. package/.kilocode/skills/stripe-best-practices/references/billing.md +36 -0
  117. package/.kilocode/skills/stripe-best-practices/references/connect.md +48 -0
  118. package/.kilocode/skills/stripe-best-practices/references/payments.md +79 -0
  119. package/.kilocode/skills/stripe-best-practices/references/security.md +109 -0
  120. package/.kilocode/skills/stripe-best-practices/references/treasury.md +16 -0
  121. package/.kilocode/skills/stripe-projects/SKILL.md +139 -0
  122. package/.kilocode/skills/upgrade-stripe/SKILL.md +185 -0
  123. package/.kiro/skills/stripe-best-practices/SKILL.md +42 -0
  124. package/.kiro/skills/stripe-best-practices/references/billing.md +36 -0
  125. package/.kiro/skills/stripe-best-practices/references/connect.md +48 -0
  126. package/.kiro/skills/stripe-best-practices/references/payments.md +79 -0
  127. package/.kiro/skills/stripe-best-practices/references/security.md +109 -0
  128. package/.kiro/skills/stripe-best-practices/references/treasury.md +16 -0
  129. package/.kiro/skills/stripe-projects/SKILL.md +139 -0
  130. package/.kiro/skills/upgrade-stripe/SKILL.md +185 -0
  131. package/.kode/skills/stripe-best-practices/SKILL.md +42 -0
  132. package/.kode/skills/stripe-best-practices/references/billing.md +36 -0
  133. package/.kode/skills/stripe-best-practices/references/connect.md +48 -0
  134. package/.kode/skills/stripe-best-practices/references/payments.md +79 -0
  135. package/.kode/skills/stripe-best-practices/references/security.md +109 -0
  136. package/.kode/skills/stripe-best-practices/references/treasury.md +16 -0
  137. package/.kode/skills/stripe-projects/SKILL.md +139 -0
  138. package/.kode/skills/upgrade-stripe/SKILL.md +185 -0
  139. package/.mcpjam/skills/stripe-best-practices/SKILL.md +42 -0
  140. package/.mcpjam/skills/stripe-best-practices/references/billing.md +36 -0
  141. package/.mcpjam/skills/stripe-best-practices/references/connect.md +48 -0
  142. package/.mcpjam/skills/stripe-best-practices/references/payments.md +79 -0
  143. package/.mcpjam/skills/stripe-best-practices/references/security.md +109 -0
  144. package/.mcpjam/skills/stripe-best-practices/references/treasury.md +16 -0
  145. package/.mcpjam/skills/stripe-projects/SKILL.md +139 -0
  146. package/.mcpjam/skills/upgrade-stripe/SKILL.md +185 -0
  147. package/.mux/skills/stripe-best-practices/SKILL.md +42 -0
  148. package/.mux/skills/stripe-best-practices/references/billing.md +36 -0
  149. package/.mux/skills/stripe-best-practices/references/connect.md +48 -0
  150. package/.mux/skills/stripe-best-practices/references/payments.md +79 -0
  151. package/.mux/skills/stripe-best-practices/references/security.md +109 -0
  152. package/.mux/skills/stripe-best-practices/references/treasury.md +16 -0
  153. package/.mux/skills/stripe-projects/SKILL.md +139 -0
  154. package/.mux/skills/upgrade-stripe/SKILL.md +185 -0
  155. package/.neovate/skills/stripe-best-practices/SKILL.md +42 -0
  156. package/.neovate/skills/stripe-best-practices/references/billing.md +36 -0
  157. package/.neovate/skills/stripe-best-practices/references/connect.md +48 -0
  158. package/.neovate/skills/stripe-best-practices/references/payments.md +79 -0
  159. package/.neovate/skills/stripe-best-practices/references/security.md +109 -0
  160. package/.neovate/skills/stripe-best-practices/references/treasury.md +16 -0
  161. package/.neovate/skills/stripe-projects/SKILL.md +139 -0
  162. package/.neovate/skills/upgrade-stripe/SKILL.md +185 -0
  163. package/.nixpacksignore +14 -0
  164. package/.openhands/skills/stripe-best-practices/SKILL.md +42 -0
  165. package/.openhands/skills/stripe-best-practices/references/billing.md +36 -0
  166. package/.openhands/skills/stripe-best-practices/references/connect.md +48 -0
  167. package/.openhands/skills/stripe-best-practices/references/payments.md +79 -0
  168. package/.openhands/skills/stripe-best-practices/references/security.md +109 -0
  169. package/.openhands/skills/stripe-best-practices/references/treasury.md +16 -0
  170. package/.openhands/skills/stripe-projects/SKILL.md +139 -0
  171. package/.openhands/skills/upgrade-stripe/SKILL.md +185 -0
  172. package/.pi/skills/stripe-best-practices/SKILL.md +42 -0
  173. package/.pi/skills/stripe-best-practices/references/billing.md +36 -0
  174. package/.pi/skills/stripe-best-practices/references/connect.md +48 -0
  175. package/.pi/skills/stripe-best-practices/references/payments.md +79 -0
  176. package/.pi/skills/stripe-best-practices/references/security.md +109 -0
  177. package/.pi/skills/stripe-best-practices/references/treasury.md +16 -0
  178. package/.pi/skills/stripe-projects/SKILL.md +139 -0
  179. package/.pi/skills/upgrade-stripe/SKILL.md +185 -0
  180. package/.pochi/skills/stripe-best-practices/SKILL.md +42 -0
  181. package/.pochi/skills/stripe-best-practices/references/billing.md +36 -0
  182. package/.pochi/skills/stripe-best-practices/references/connect.md +48 -0
  183. package/.pochi/skills/stripe-best-practices/references/payments.md +79 -0
  184. package/.pochi/skills/stripe-best-practices/references/security.md +109 -0
  185. package/.pochi/skills/stripe-best-practices/references/treasury.md +16 -0
  186. package/.pochi/skills/stripe-projects/SKILL.md +139 -0
  187. package/.pochi/skills/upgrade-stripe/SKILL.md +185 -0
  188. package/.qoder/skills/stripe-best-practices/SKILL.md +42 -0
  189. package/.qoder/skills/stripe-best-practices/references/billing.md +36 -0
  190. package/.qoder/skills/stripe-best-practices/references/connect.md +48 -0
  191. package/.qoder/skills/stripe-best-practices/references/payments.md +79 -0
  192. package/.qoder/skills/stripe-best-practices/references/security.md +109 -0
  193. package/.qoder/skills/stripe-best-practices/references/treasury.md +16 -0
  194. package/.qoder/skills/stripe-projects/SKILL.md +139 -0
  195. package/.qoder/skills/upgrade-stripe/SKILL.md +185 -0
  196. package/.qwen/skills/stripe-best-practices/SKILL.md +42 -0
  197. package/.qwen/skills/stripe-best-practices/references/billing.md +36 -0
  198. package/.qwen/skills/stripe-best-practices/references/connect.md +48 -0
  199. package/.qwen/skills/stripe-best-practices/references/payments.md +79 -0
  200. package/.qwen/skills/stripe-best-practices/references/security.md +109 -0
  201. package/.qwen/skills/stripe-best-practices/references/treasury.md +16 -0
  202. package/.qwen/skills/stripe-projects/SKILL.md +139 -0
  203. package/.qwen/skills/upgrade-stripe/SKILL.md +185 -0
  204. package/.roo/skills/stripe-best-practices/SKILL.md +42 -0
  205. package/.roo/skills/stripe-best-practices/references/billing.md +36 -0
  206. package/.roo/skills/stripe-best-practices/references/connect.md +48 -0
  207. package/.roo/skills/stripe-best-practices/references/payments.md +79 -0
  208. package/.roo/skills/stripe-best-practices/references/security.md +109 -0
  209. package/.roo/skills/stripe-best-practices/references/treasury.md +16 -0
  210. package/.roo/skills/stripe-projects/SKILL.md +139 -0
  211. package/.roo/skills/upgrade-stripe/SKILL.md +185 -0
  212. package/.trae/skills/stripe-best-practices/SKILL.md +42 -0
  213. package/.trae/skills/stripe-best-practices/references/billing.md +36 -0
  214. package/.trae/skills/stripe-best-practices/references/connect.md +48 -0
  215. package/.trae/skills/stripe-best-practices/references/payments.md +79 -0
  216. package/.trae/skills/stripe-best-practices/references/security.md +109 -0
  217. package/.trae/skills/stripe-best-practices/references/treasury.md +16 -0
  218. package/.trae/skills/stripe-projects/SKILL.md +139 -0
  219. package/.trae/skills/upgrade-stripe/SKILL.md +185 -0
  220. package/.vibe/skills/stripe-best-practices/SKILL.md +42 -0
  221. package/.vibe/skills/stripe-best-practices/references/billing.md +36 -0
  222. package/.vibe/skills/stripe-best-practices/references/connect.md +48 -0
  223. package/.vibe/skills/stripe-best-practices/references/payments.md +79 -0
  224. package/.vibe/skills/stripe-best-practices/references/security.md +109 -0
  225. package/.vibe/skills/stripe-best-practices/references/treasury.md +16 -0
  226. package/.vibe/skills/stripe-projects/SKILL.md +139 -0
  227. package/.vibe/skills/upgrade-stripe/SKILL.md +185 -0
  228. package/.windsurf/skills/stripe-best-practices/SKILL.md +42 -0
  229. package/.windsurf/skills/stripe-best-practices/references/billing.md +36 -0
  230. package/.windsurf/skills/stripe-best-practices/references/connect.md +48 -0
  231. package/.windsurf/skills/stripe-best-practices/references/payments.md +79 -0
  232. package/.windsurf/skills/stripe-best-practices/references/security.md +109 -0
  233. package/.windsurf/skills/stripe-best-practices/references/treasury.md +16 -0
  234. package/.windsurf/skills/stripe-projects/SKILL.md +139 -0
  235. package/.windsurf/skills/upgrade-stripe/SKILL.md +185 -0
  236. package/.zencoder/skills/stripe-best-practices/SKILL.md +42 -0
  237. package/.zencoder/skills/stripe-best-practices/references/billing.md +36 -0
  238. package/.zencoder/skills/stripe-best-practices/references/connect.md +48 -0
  239. package/.zencoder/skills/stripe-best-practices/references/payments.md +79 -0
  240. package/.zencoder/skills/stripe-best-practices/references/security.md +109 -0
  241. package/.zencoder/skills/stripe-best-practices/references/treasury.md +16 -0
  242. package/.zencoder/skills/stripe-projects/SKILL.md +139 -0
  243. package/.zencoder/skills/upgrade-stripe/SKILL.md +185 -0
  244. package/AUDIT.md +95 -0
  245. package/BLOCKERS.md +0 -0
  246. package/COOLIFY.md +51 -0
  247. package/MCP_SETUP.md +23 -0
  248. package/PRODUCTION_CHECKLIST.md +246 -0
  249. package/README.md +47 -0
  250. package/ROADMAP.md +91 -0
  251. package/docs/superpowers/plans/2026-05-11-availsync-frontend-sales-flow.md +2445 -0
  252. package/frontend/.env.example +2 -0
  253. package/frontend/app/admin/layout.tsx +13 -0
  254. package/frontend/app/admin/page.tsx +747 -0
  255. package/frontend/app/app/activity/page.tsx +257 -0
  256. package/frontend/app/app/agents/[agentId]/page.tsx +21 -0
  257. package/frontend/app/app/agents/page.tsx +1155 -0
  258. package/frontend/app/app/audit/page.tsx +225 -0
  259. package/frontend/app/app/availability/page.tsx +840 -0
  260. package/frontend/app/app/holds/page.tsx +262 -0
  261. package/frontend/app/app/layout.tsx +19 -0
  262. package/frontend/app/app/onboarding/page.tsx +10 -0
  263. package/frontend/app/app/onboarding/verify/page.tsx +309 -0
  264. package/frontend/app/app/page.tsx +508 -0
  265. package/frontend/app/app/settings/page.tsx +399 -0
  266. package/frontend/app/app/work/page.tsx +426 -0
  267. package/frontend/app/changelog/page.tsx +93 -0
  268. package/frontend/app/checkout/page.tsx +25 -0
  269. package/frontend/app/docs/api/page.tsx +157 -0
  270. package/frontend/app/docs/page.tsx +296 -0
  271. package/frontend/app/docs/pilot/page.tsx +127 -0
  272. package/frontend/app/docs/quickstart/page.tsx +318 -0
  273. package/frontend/app/docs/reliability/page.tsx +78 -0
  274. package/frontend/app/docs/sdk/node/page.tsx +166 -0
  275. package/frontend/app/globals.css +57 -0
  276. package/frontend/app/icon.png +0 -0
  277. package/frontend/app/layout.tsx +87 -0
  278. package/frontend/app/login/page.tsx +14 -0
  279. package/frontend/app/page.tsx +47 -0
  280. package/frontend/app/pricing/page.tsx +66 -0
  281. package/frontend/app/privacy/page.tsx +52 -0
  282. package/frontend/app/robots.ts +26 -0
  283. package/frontend/app/security/page.tsx +74 -0
  284. package/frontend/app/signup/page.tsx +14 -0
  285. package/frontend/app/sitemap.ts +14 -0
  286. package/frontend/app/terms/page.tsx +51 -0
  287. package/frontend/components/brand/AvailsyncLogo.tsx +56 -0
  288. package/frontend/components/checkout/CheckoutClient.tsx +100 -0
  289. package/frontend/components/dashboard/AgentForm.tsx +59 -0
  290. package/frontend/components/dashboard/AppShell.tsx +291 -0
  291. package/frontend/components/dashboard/AvailabilityChecker.tsx +117 -0
  292. package/frontend/components/dashboard/AvailabilityWindowForm.tsx +40 -0
  293. package/frontend/components/dashboard/HoldForm.tsx +133 -0
  294. package/frontend/components/dashboard/MetricCard.tsx +10 -0
  295. package/frontend/components/login/LoginForm.tsx +95 -0
  296. package/frontend/components/marketing/AgentCoordinationStory.tsx +1530 -0
  297. package/frontend/components/marketing/Faq.tsx +41 -0
  298. package/frontend/components/marketing/Hero.tsx +73 -0
  299. package/frontend/components/marketing/HowItWorks.tsx +28 -0
  300. package/frontend/components/marketing/ObserveModeTeaser.tsx +41 -0
  301. package/frontend/components/marketing/PricingTeaser.tsx +23 -0
  302. package/frontend/components/marketing/ProblemSolution.tsx +36 -0
  303. package/frontend/components/marketing/SiteFooter.tsx +59 -0
  304. package/frontend/components/marketing/SiteHeader.tsx +45 -0
  305. package/frontend/components/marketing/UseCases.tsx +27 -0
  306. package/frontend/components/onboarding/OnboardingClient.tsx +278 -0
  307. package/frontend/components/pricing/PricingCards.tsx +65 -0
  308. package/frontend/components/privacy/CookieConsent.tsx +230 -0
  309. package/frontend/components/privacy/CookieSettingsButton.tsx +15 -0
  310. package/frontend/components/seo/JsonLd.tsx +10 -0
  311. package/frontend/components/signup/SignupForm.tsx +55 -0
  312. package/frontend/components/ui/Badge.tsx +23 -0
  313. package/frontend/components/ui/Button.tsx +37 -0
  314. package/frontend/components/ui/Card.tsx +11 -0
  315. package/frontend/components/ui/ConfirmDialog.tsx +77 -0
  316. package/frontend/components/ui/EmptyState.tsx +24 -0
  317. package/frontend/components/ui/Input.tsx +14 -0
  318. package/frontend/components/ui/KeyDisplay.tsx +49 -0
  319. package/frontend/components/ui/Select.tsx +14 -0
  320. package/frontend/components/ui/Skeleton.tsx +24 -0
  321. package/frontend/components/ui/Tabs.tsx +19 -0
  322. package/frontend/components/ui/Textarea.tsx +14 -0
  323. package/frontend/components/ui/Toast.tsx +78 -0
  324. package/frontend/components/waitlist/WaitlistDialog.tsx +128 -0
  325. package/frontend/lib/api.ts +1282 -0
  326. package/frontend/lib/billing.ts +6 -0
  327. package/frontend/lib/cookieConsent.ts +113 -0
  328. package/frontend/lib/format.ts +16 -0
  329. package/frontend/lib/plans.ts +62 -0
  330. package/frontend/lib/schemas.ts +108 -0
  331. package/frontend/lib/seo.ts +376 -0
  332. package/frontend/lib/setupGuides.ts +630 -0
  333. package/frontend/lib/storage.ts +30 -0
  334. package/frontend/next-env.d.ts +6 -0
  335. package/frontend/next.config.mjs +13 -0
  336. package/frontend/package-lock.json +14409 -0
  337. package/frontend/package.json +41 -0
  338. package/frontend/playwright.config.ts +20 -0
  339. package/frontend/postcss.config.mjs +8 -0
  340. package/frontend/public/.gitkeep +0 -0
  341. package/frontend/public/brand/availsync-logo-board.png +0 -0
  342. package/frontend/public/brand/availsync-logo-dark.png +0 -0
  343. package/frontend/public/brand/availsync-mark-dark.png +0 -0
  344. package/frontend/public/brand/availsync-wordmark-dark.png +0 -0
  345. package/frontend/public/marketing/hero-agent-coordination.png +0 -0
  346. package/frontend/tailwind.config.ts +53 -0
  347. package/frontend/tests/smoke.spec.ts +89 -0
  348. package/frontend/tsconfig.json +23 -0
  349. package/jest.config.js +7 -0
  350. package/nixpacks.toml +11 -0
  351. package/package.json +53 -0
  352. package/packages/mcp/LICENSE +21 -0
  353. package/packages/mcp/README.md +60 -0
  354. package/packages/mcp/jest.config.cjs +8 -0
  355. package/packages/mcp/package.json +54 -0
  356. package/packages/mcp/src/helpers.ts +38 -0
  357. package/packages/mcp/src/index.test.ts +60 -0
  358. package/packages/mcp/src/index.ts +387 -0
  359. package/packages/mcp/tsconfig.json +20 -0
  360. package/packages/mcp/tsconfig.test.json +12 -0
  361. package/packages/node/LICENSE +21 -0
  362. package/packages/node/README.md +120 -0
  363. package/packages/node/jest.config.cjs +8 -0
  364. package/packages/node/package.json +46 -0
  365. package/packages/node/src/index.test.ts +360 -0
  366. package/packages/node/src/index.ts +402 -0
  367. package/packages/node/tsconfig.json +20 -0
  368. package/packages/node/tsconfig.test.json +12 -0
  369. package/plan.md +923 -0
  370. package/skills/stripe-best-practices/SKILL.md +42 -0
  371. package/skills/stripe-best-practices/references/billing.md +36 -0
  372. package/skills/stripe-best-practices/references/connect.md +48 -0
  373. package/skills/stripe-best-practices/references/payments.md +79 -0
  374. package/skills/stripe-best-practices/references/security.md +109 -0
  375. package/skills/stripe-best-practices/references/treasury.md +16 -0
  376. package/skills/stripe-projects/SKILL.md +139 -0
  377. package/skills/upgrade-stripe/SKILL.md +185 -0
  378. package/skills-lock.json +20 -0
  379. package/src/core/availability.ts +178 -0
  380. package/src/core/conflict.ts +209 -0
  381. package/src/core/work.ts +490 -0
  382. package/src/db/client.ts +17 -0
  383. package/src/db/migrations/001_init.sql +88 -0
  384. package/src/db/migrations/002_stripe.sql +2 -0
  385. package/src/db/migrations/003_workspace_auth.sql +19 -0
  386. package/src/db/migrations/004_agent_mcp_status.sql +2 -0
  387. package/src/db/migrations/005_hold_event_actor.sql +4 -0
  388. package/src/db/migrations/006_agent_activity.sql +35 -0
  389. package/src/db/migrations/007_work_coordination.sql +60 -0
  390. package/src/db/migrations/008_work_claim_leases.sql +20 -0
  391. package/src/db/migrations/009_billing_subscription_state.sql +23 -0
  392. package/src/db/migrations/010_agent_api_key_prefix.sql +10 -0
  393. package/src/db/migrations/011_org_verified_and_work_event_retention.sql +11 -0
  394. package/src/db/migrations/012_agent_enforcement_mode.sql +12 -0
  395. package/src/db/migrations/013_support_tickets.sql +21 -0
  396. package/src/db/migrations/014_paid_plan_waitlist.sql +23 -0
  397. package/src/db/migrations/015_agent_last_seen.sql +2 -0
  398. package/src/db/migrations.ts +164 -0
  399. package/src/db/run-migrations.ts +13 -0
  400. package/src/index.ts +183 -0
  401. package/src/lib/activity.ts +137 -0
  402. package/src/lib/apiKeys.ts +32 -0
  403. package/src/lib/appInfo.ts +26 -0
  404. package/src/lib/billingConfig.ts +3 -0
  405. package/src/lib/env.ts +75 -0
  406. package/src/lib/logger.ts +8 -0
  407. package/src/lib/plans.ts +204 -0
  408. package/src/mcp/server.js +5 -0
  409. package/src/mcp/server.ts +350 -0
  410. package/src/middleware/auth.ts +342 -0
  411. package/src/middleware/requestId.ts +16 -0
  412. package/src/routes/account.ts +168 -0
  413. package/src/routes/activity.ts +126 -0
  414. package/src/routes/admin.ts +514 -0
  415. package/src/routes/audit.ts +68 -0
  416. package/src/routes/auth.ts +203 -0
  417. package/src/routes/availability.ts +325 -0
  418. package/src/routes/billing.ts +406 -0
  419. package/src/routes/conflicts.ts +131 -0
  420. package/src/routes/holds.ts +437 -0
  421. package/src/routes/mcp.ts +57 -0
  422. package/src/routes/metrics.ts +39 -0
  423. package/src/routes/onboarding.ts +273 -0
  424. package/src/routes/orgs.ts +981 -0
  425. package/src/routes/preferences.ts +132 -0
  426. package/src/routes/session.ts +16 -0
  427. package/src/routes/support.ts +77 -0
  428. package/src/routes/value.ts +186 -0
  429. package/src/routes/waitlist.ts +63 -0
  430. package/src/routes/work.ts +1578 -0
  431. package/src/server.ts +36 -0
  432. package/src/types/index.ts +109 -0
  433. package/tests/integration/activity.route.test.ts +103 -0
  434. package/tests/integration/admin.route.test.ts +143 -0
  435. package/tests/integration/agent-keys.route.test.ts +237 -0
  436. package/tests/integration/availability.route.test.ts +125 -0
  437. package/tests/integration/billing.route.test.ts +393 -0
  438. package/tests/integration/conflicts.route.test.ts +131 -0
  439. package/tests/integration/flows.test.ts +154 -0
  440. package/tests/integration/helpers.ts +134 -0
  441. package/tests/integration/holds.route.test.ts +185 -0
  442. package/tests/integration/metrics.route.test.ts +100 -0
  443. package/tests/integration/onboarding.verify.route.test.ts +163 -0
  444. package/tests/integration/preferences.route.test.ts +53 -0
  445. package/tests/integration/session.route.test.ts +97 -0
  446. package/tests/integration/system.route.test.ts +92 -0
  447. package/tests/integration/value.route.test.ts +235 -0
  448. package/tests/integration/work.route.test.ts +745 -0
  449. package/tests/setup.ts +4 -0
  450. package/tests/smoke.sh +62 -0
  451. package/tests/unit/auth.test.ts +114 -0
  452. package/tests/unit/availability.test.ts +149 -0
  453. package/tests/unit/conflict.test.ts +118 -0
  454. package/tests/unit/env.test.ts +69 -0
  455. package/tests/unit/migrations.test.ts +135 -0
  456. package/tests/unit/request-id.test.ts +37 -0
  457. package/tmp-mobile-agents.png +0 -0
  458. package/tmp-next-mobile.err.log +10 -0
  459. package/tmp-next-mobile.log +5 -0
  460. package/tsconfig.json +16 -0
@@ -0,0 +1,157 @@
1
+ import type { Metadata } from 'next';
2
+ import { SiteHeader } from '@/components/marketing/SiteHeader';
3
+ import { SiteFooter } from '@/components/marketing/SiteFooter';
4
+ import { JsonLd } from '@/components/seo/JsonLd';
5
+ import { Button } from '@/components/ui/Button';
6
+ import { webPageSchema } from '@/lib/seo';
7
+
8
+ export const metadata: Metadata = {
9
+ title: 'API Reference',
10
+ description:
11
+ 'Pragmatic Availsync v1 API reference for work guardrails, activity, billing status, value health, and MCP heartbeat.',
12
+ alternates: {
13
+ canonical: '/docs/api',
14
+ },
15
+ };
16
+
17
+ const endpoints = [
18
+ {
19
+ group: 'Automation guardrail',
20
+ auth: 'Agent API key or workspace session',
21
+ rows: [
22
+ ['POST /v1/work/run/start', 'Start a guarded run. Returns proceed or skip_run. In observe mode it proceeds and may include shadow_decision.'],
23
+ ['POST /v1/work/run/extend', 'Extend an active claim lease while the agent is still working.'],
24
+ ['POST /v1/work/run/finish', 'Release a run claim. Safe to call more than once.'],
25
+ ],
26
+ },
27
+ {
28
+ group: 'Lower-level work coordination',
29
+ auth: 'Agent API key or workspace session',
30
+ rows: [
31
+ ['POST /v1/work/check', 'Preview whether a repo or project resource is available. Does not mutate claims.'],
32
+ ['POST /v1/work/claim', 'Create an enforcing work claim, or return 409 when blocked. Supports Idempotency-Key.'],
33
+ ['POST /v1/work/claims/:claim_id/extend', 'Extend a specific claim.'],
34
+ ['DELETE /v1/work/claims/:claim_id', 'Release a specific claim.'],
35
+ ['GET /v1/work/claims', 'List current and recent claims. Agent keys only see their own claims.'],
36
+ ],
37
+ },
38
+ {
39
+ group: 'Activity and value',
40
+ auth: 'Workspace session unless noted',
41
+ rows: [
42
+ ['GET /v1/activity', 'List runtime traffic metadata. Workspace users can filter by agent, status, type, and date.'],
43
+ ['POST /v1/activity/usage', 'Agent-key endpoint for reporting optional token usage or external run metadata.'],
44
+ ['GET /v1/value/health', 'Dashboard value summary and agent health for the current workspace.'],
45
+ ],
46
+ },
47
+ {
48
+ group: 'Billing and setup',
49
+ auth: 'Workspace session',
50
+ rows: [
51
+ ['GET /v1/billing/status', 'Current plan, limits, usage, and upgrade hints.'],
52
+ ['POST /v1/orgs/:org_id/agents/:agent_id/test-connection', 'Read-only setup readiness check for one agent.'],
53
+ ['POST /v1/orgs/:org_id/agents/:agent_id/setup-test', 'Dashboard-run validation flow. Does not require the raw API key.'],
54
+ ],
55
+ },
56
+ {
57
+ group: 'MCP',
58
+ auth: 'Agent API key',
59
+ rows: [
60
+ ['POST /v1/mcp/heartbeat', 'MCP clients use this to report online status. SDK and REST traffic use last_seen_at instead.'],
61
+ ],
62
+ },
63
+ ];
64
+
65
+ const responseNotes = [
66
+ ['proceed', 'The agent can run. A claim may exist in enforce mode; observe mode can proceed without a claim.'],
67
+ ['skip_run', 'Another active claim has priority. Scheduled jobs should exit cleanly with the reason.'],
68
+ ['already_finished', 'Finish was called for a claim that is already released or expired. Treat as success.'],
69
+ ['plan_limit_reached', 'HTTP 402. The workspace hit a plan limit such as agents, protected resources, active claims, or monthly API calls.'],
70
+ ];
71
+
72
+ export default function ApiReferencePage() {
73
+ return (
74
+ <>
75
+ <JsonLd data={webPageSchema('/docs/api', 'Availsync API Reference', metadata.description as string)} />
76
+ <SiteHeader />
77
+ <main className="min-h-screen bg-bg">
78
+ <section className="mx-auto max-w-6xl px-4 py-16">
79
+ <p className="text-label uppercase text-text-tertiary">API reference</p>
80
+ <h1 className="mt-3 max-w-4xl text-5xl font-semibold text-text-primary">
81
+ Availsync v1 API reference.
82
+ </h1>
83
+ <p className="mt-5 max-w-3xl text-heading leading-7 text-text-secondary">
84
+ Use the Node SDK or MCP package for most pilots. Use the REST API directly when you
85
+ need to integrate another runtime, language, or workflow engine.
86
+ </p>
87
+ <div className="mt-8 flex flex-wrap gap-3">
88
+ <Button href="/docs/sdk/node">Node SDK</Button>
89
+ <Button href="/docs/quickstart" variant="secondary">Quickstart</Button>
90
+ <Button href="/docs/reliability" variant="secondary">Reliability</Button>
91
+ </div>
92
+
93
+ <section className="mt-12 rounded border border-border bg-surface p-5">
94
+ <h2 className="text-heading font-semibold text-text-primary">Authentication</h2>
95
+ <p className="mt-2 text-body leading-6 text-text-secondary">
96
+ Agent calls use <code>Authorization: Bearer API_KEY</code>. Workspace dashboard calls
97
+ use the login session cookie. Raw API keys are shown once at create or rotation time,
98
+ then never returned again.
99
+ </p>
100
+ <pre className="mt-4 overflow-auto rounded border border-border bg-bg p-4 text-sm text-text-secondary">
101
+ {`Authorization: Bearer AVAILSYNC_API_KEY
102
+ Content-Type: application/json
103
+ Idempotency-Key: optional-stable-key`}
104
+ </pre>
105
+ </section>
106
+
107
+ <section className="mt-12 grid gap-4">
108
+ {endpoints.map((section) => (
109
+ <div className="rounded border border-border bg-surface p-5" key={section.group}>
110
+ <div className="flex flex-wrap items-start justify-between gap-3">
111
+ <h2 className="text-heading font-semibold text-text-primary">{section.group}</h2>
112
+ <span className="rounded border border-border bg-bg px-3 py-1 font-mono text-label text-text-tertiary">
113
+ {section.auth}
114
+ </span>
115
+ </div>
116
+ <div className="mt-4 grid gap-2">
117
+ {section.rows.map(([endpoint, body]) => (
118
+ <div className="grid gap-2 rounded border border-border bg-bg p-3 md:grid-cols-[260px_1fr]" key={endpoint}>
119
+ <code className="font-mono text-sm text-text-primary">{endpoint}</code>
120
+ <p className="text-body leading-6 text-text-secondary">{body}</p>
121
+ </div>
122
+ ))}
123
+ </div>
124
+ </div>
125
+ ))}
126
+ </section>
127
+
128
+ <section className="mt-12 grid gap-4 lg:grid-cols-2">
129
+ <div className="rounded border border-border bg-surface p-5">
130
+ <h2 className="text-heading font-semibold text-text-primary">Common response actions</h2>
131
+ <div className="mt-4 space-y-3">
132
+ {responseNotes.map(([action, body]) => (
133
+ <div className="rounded border border-border bg-bg p-3" key={action}>
134
+ <code className="font-mono text-sm text-text-primary">{action}</code>
135
+ <p className="mt-1 text-body leading-6 text-text-secondary">{body}</p>
136
+ </div>
137
+ ))}
138
+ </div>
139
+ </div>
140
+ <div className="rounded border border-border bg-surface p-5">
141
+ <h2 className="text-heading font-semibold text-text-primary">Failure policy</h2>
142
+ <p className="mt-2 text-body leading-6 text-text-secondary">
143
+ The API returns structured errors with <code>error</code>, optional <code>message</code>,
144
+ and <code>request_id</code>. The SDK throws for network and API failures so your
145
+ automation can choose fail-closed in enforce mode or fail-open in observe mode.
146
+ </p>
147
+ <div className="mt-5">
148
+ <Button href="/docs/reliability" variant="secondary">Read reliability guidance</Button>
149
+ </div>
150
+ </div>
151
+ </section>
152
+ </section>
153
+ </main>
154
+ <SiteFooter />
155
+ </>
156
+ );
157
+ }
@@ -0,0 +1,296 @@
1
+ import type { Metadata } from 'next';
2
+ import { SiteHeader } from '@/components/marketing/SiteHeader';
3
+ import { SiteFooter } from '@/components/marketing/SiteFooter';
4
+ import { JsonLd } from '@/components/seo/JsonLd';
5
+ import { Button } from '@/components/ui/Button';
6
+ import { docsPageSchema } from '@/lib/seo';
7
+
8
+ export const metadata: Metadata = {
9
+ title: 'API Docs',
10
+ description:
11
+ 'Read the Availsync docs for AI agent coordination, repo claims, observe mode, MCP setup, API reference, and reliability.',
12
+ alternates: {
13
+ canonical: '/docs',
14
+ },
15
+ };
16
+
17
+ const coreConcepts = [
18
+ [
19
+ 'Workspace',
20
+ 'The admin account for your team. Humans log in with email and password, manage agents, billing, rules, and logs.',
21
+ ],
22
+ [
23
+ 'Agent',
24
+ 'A runtime identity for a coding agent, MCP client, scheduling tool, cron job, or server automation.',
25
+ ],
26
+ [
27
+ 'Agent API key',
28
+ 'A one-time secret used by agents only. It is scoped to one agent and should live in MCP, server, or automation env vars.',
29
+ ],
30
+ [
31
+ 'Work claim',
32
+ 'A lease on a protected repo or project. It stops another agent from working on the same resource at the same time.',
33
+ ],
34
+ [
35
+ 'Enforce vs observe',
36
+ 'Enforce stops conflicting runs. Observe lets the run continue, creates no lease, and records what Availsync would have blocked.',
37
+ ],
38
+ [
39
+ 'Availability hold',
40
+ 'A secondary scheduling primitive for reserving a time window before an agent books a meeting, release, focus block, or other scheduled action.',
41
+ ],
42
+ [
43
+ 'Activity vs Audit',
44
+ 'Activity shows runtime traffic. Audit shows governance events: holds, conflicts, work claims, releases, and actors.',
45
+ ],
46
+ ];
47
+
48
+ const flows = [
49
+ {
50
+ title: 'Coding agents on the same repo',
51
+ body: 'Use @availsync/node@alpha or work/run/start before an automation begins. Enforce mode returns skip_run when blocked; observe mode proceeds and records what would have happened.',
52
+ steps: ['Install SDK', 'Start run', 'Extend lease when claimed', 'Finish run when claimed'],
53
+ },
54
+ {
55
+ title: 'Dashboard setup validation',
56
+ body: 'Run the dashboard setup test first to confirm the backend flow works, then connect the real Node SDK, public MCP package, or REST client.',
57
+ steps: ['Run setup test', 'Copy config', 'Connect client', 'Verify Activity'],
58
+ },
59
+ {
60
+ title: 'Scheduling agents before booking',
61
+ body: 'Secondary flow: ask for availability, preview the conflict, then create a hold only when the slot is safe.',
62
+ steps: ['Check availability', 'Preview conflict', 'Create hold', 'Release hold'],
63
+ },
64
+ ];
65
+
66
+ const resourceScopes = [
67
+ {
68
+ title: 'Repo-level guardrail',
69
+ example: 'repo:owner/name',
70
+ body:
71
+ 'Safest default. Only one active agent can work in the repo at a time, so shared files and context cannot change underneath another guarded run.',
72
+ bestFor: 'Use for new agents, scheduled automations, deploy work, migrations, and any repo where agents may touch shared files.',
73
+ },
74
+ {
75
+ title: 'Project-level guardrail',
76
+ example: 'project:homepage',
77
+ body:
78
+ 'Advanced mode. Different projects can run in parallel, but Availsync only blocks conflicts on the same project key.',
79
+ bestFor:
80
+ 'Use only when work streams are truly independent. If homepage depends on product-catalog, protect them with the same repo-level resource.',
81
+ },
82
+ ];
83
+
84
+ const apiSections = [
85
+ {
86
+ title: 'Workspace auth',
87
+ endpoints: ['POST /v1/auth/signup', 'POST /v1/auth/login', 'POST /v1/auth/logout', 'GET /v1/session'],
88
+ body: 'Used by humans in the dashboard. Sessions are stored in secure httpOnly cookies.',
89
+ },
90
+ {
91
+ title: 'Work coordination',
92
+ endpoints: ['@availsync/node@alpha', '@availsync/mcp@alpha', 'POST /v1/work/run/start', 'POST /v1/work/run/extend', 'POST /v1/work/run/finish'],
93
+ body: 'The default runtime path for coding agents and automations that need repo or project guardrails. Use the SDK or MCP package first; use REST directly when you need lower-level control.',
94
+ },
95
+ {
96
+ title: 'Scheduling coordination',
97
+ endpoints: ['GET /v1/availability', 'POST /v1/conflicts/check', 'POST /v1/holds', 'DELETE /v1/holds/:hold_id'],
98
+ body: 'Used by agents that also need to check time windows and reserve slots before booking downstream systems.',
99
+ },
100
+ {
101
+ title: 'Activity and diagnostics',
102
+ endpoints: ['GET /v1/activity', 'POST /v1/activity/usage', 'GET /health'],
103
+ body: 'Used to confirm real traffic, debug setup, and inspect system health without exposing secrets.',
104
+ },
105
+ ];
106
+
107
+ const securityNotes = [
108
+ 'Dashboard users authenticate with email and password. Agent API keys are not dashboard logins.',
109
+ 'Raw API keys are shown once after create or rotation, then never returned again.',
110
+ 'Agent API keys are one-time secrets. Store them only in your agent, MCP, or server environment.',
111
+ 'Agent keys are scoped to one agent by default and cannot manage workspace agents.',
112
+ 'Blocked automations should skip with a clear reason, not wait or retry forever.',
113
+ 'Observe-only agents do not create active leases, so they measure risk but do not protect the repo yet.',
114
+ ];
115
+
116
+ export default function DocsPage() {
117
+ return (
118
+ <>
119
+ <JsonLd data={docsPageSchema()} />
120
+ <SiteHeader />
121
+ <main className="min-h-screen bg-bg">
122
+ <section className="mx-auto max-w-6xl px-4 py-16">
123
+ <p className="text-label uppercase text-text-tertiary">Docs</p>
124
+ <h1 className="mt-3 max-w-4xl text-5xl font-semibold text-text-primary">
125
+ Availsync API docs
126
+ </h1>
127
+ <p className="mt-5 max-w-3xl text-heading leading-7 text-text-secondary">
128
+ Availsync is the pre-flight coordination layer your agents check before they claim a
129
+ repo, edit a project, start a release, run an automation, or book a downstream slot.
130
+ </p>
131
+ <p className="mt-4 max-w-3xl text-body leading-6 text-text-primary">
132
+ Every integrated agent checks in before it acts.
133
+ </p>
134
+ <div className="mt-8 flex flex-wrap gap-3">
135
+ <Button href="/docs/pilot">Pilot in 10 minutes</Button>
136
+ <Button href="/docs/sdk/node" variant="secondary">
137
+ Node SDK
138
+ </Button>
139
+ <Button href="/docs/quickstart" variant="secondary">
140
+ MCP setup
141
+ </Button>
142
+ <Button href="/docs/api" variant="secondary">
143
+ API reference
144
+ </Button>
145
+ <Button href="/docs/reliability" variant="secondary">
146
+ Reliability
147
+ </Button>
148
+ <Button href="/pricing" variant="secondary">
149
+ View plans
150
+ </Button>
151
+ </div>
152
+
153
+ <section className="mt-14">
154
+ <p className="text-label uppercase text-text-tertiary">Core model</p>
155
+ <h2 className="mt-2 text-3xl font-semibold text-text-primary">
156
+ The pieces agents work with
157
+ </h2>
158
+ <div className="mt-6 grid gap-4 md:grid-cols-2">
159
+ {coreConcepts.map(([title, body]) => (
160
+ <div className="rounded border border-border bg-surface p-5" key={title}>
161
+ <h3 className="text-heading font-semibold text-text-primary">{title}</h3>
162
+ <p className="mt-2 text-body leading-6 text-text-secondary">{body}</p>
163
+ </div>
164
+ ))}
165
+ </div>
166
+ </section>
167
+
168
+ <section className="mt-16">
169
+ <p className="text-label uppercase text-text-tertiary">Runtime flows</p>
170
+ <h2 className="mt-2 text-3xl font-semibold text-text-primary">
171
+ What agents should do before they act
172
+ </h2>
173
+ <div className="mt-6 grid gap-4 lg:grid-cols-3">
174
+ {flows.map((flow) => (
175
+ <div className="rounded border border-border bg-surface p-5" key={flow.title}>
176
+ <h3 className="text-heading font-semibold text-text-primary">{flow.title}</h3>
177
+ <p className="mt-2 min-h-24 text-body leading-6 text-text-secondary">{flow.body}</p>
178
+ <div className="mt-5 space-y-2">
179
+ {flow.steps.map((step, index) => (
180
+ <div className="flex items-center gap-2 text-body text-text-secondary" key={step}>
181
+ <span className="flex h-6 w-6 shrink-0 items-center justify-center rounded border border-border bg-bg font-mono text-label text-text-tertiary">
182
+ {index + 1}
183
+ </span>
184
+ {step}
185
+ </div>
186
+ ))}
187
+ </div>
188
+ </div>
189
+ ))}
190
+ </div>
191
+ </section>
192
+
193
+ <section className="mt-16">
194
+ <p className="text-label uppercase text-text-tertiary">Resource scope</p>
195
+ <h2 className="mt-2 text-3xl font-semibold text-text-primary">
196
+ Choose safety or parallelism intentionally
197
+ </h2>
198
+ <p className="mt-3 max-w-3xl text-body leading-6 text-text-secondary">
199
+ Availsync blocks simultaneous work on the same resource. Different resources can run
200
+ in parallel, so choose resource keys based on how much safety the agent needs.
201
+ </p>
202
+ <div className="mt-6 grid gap-4 md:grid-cols-2">
203
+ {resourceScopes.map((scope) => (
204
+ <div className="rounded border border-border bg-surface p-5" key={scope.title}>
205
+ <h3 className="text-heading font-semibold text-text-primary">{scope.title}</h3>
206
+ <code className="mt-3 block rounded border border-border bg-bg px-3 py-2 font-mono text-sm text-text-secondary">
207
+ {scope.example}
208
+ </code>
209
+ <p className="mt-3 text-body leading-6 text-text-secondary">{scope.body}</p>
210
+ <p className="mt-3 text-body leading-6 text-text-tertiary">{scope.bestFor}</p>
211
+ </div>
212
+ ))}
213
+ </div>
214
+ <div className="mt-4 rounded border border-warning/40 bg-warning/10 p-4 text-body leading-6 text-text-secondary">
215
+ Availsync does not yet infer dependencies between different resources. For example,
216
+ it will not automatically know that <code>project:homepage</code> depends on{' '}
217
+ <code>project:product-catalog</code>. Use repo-level scope when that dependency
218
+ matters during the same run.
219
+ </div>
220
+ </section>
221
+
222
+ <section className="mt-16">
223
+ <p className="text-label uppercase text-text-tertiary">API map</p>
224
+ <h2 className="mt-2 text-3xl font-semibold text-text-primary">
225
+ Main endpoint groups
226
+ </h2>
227
+ <div className="mt-6 grid gap-4 md:grid-cols-2">
228
+ {apiSections.map((section) => (
229
+ <div className="rounded border border-border bg-surface p-5" key={section.title}>
230
+ <h3 className="text-heading font-semibold text-text-primary">{section.title}</h3>
231
+ <p className="mt-2 text-body leading-6 text-text-secondary">{section.body}</p>
232
+ <div className="mt-4 space-y-2">
233
+ {section.endpoints.map((endpoint) => (
234
+ <code
235
+ className="block rounded border border-border bg-bg px-3 py-2 font-mono text-sm text-text-secondary"
236
+ key={endpoint}
237
+ >
238
+ {endpoint}
239
+ </code>
240
+ ))}
241
+ </div>
242
+ </div>
243
+ ))}
244
+ </div>
245
+ </section>
246
+
247
+ <section className="mt-16 rounded border border-border bg-surface p-6">
248
+ <p className="text-label uppercase text-text-tertiary">Plan limits</p>
249
+ <h2 className="mt-2 text-3xl font-semibold text-text-primary">
250
+ How usage limits are counted
251
+ </h2>
252
+ <div className="mt-5 grid gap-3 text-body leading-6 text-text-secondary md:grid-cols-3">
253
+ <div className="rounded border border-border bg-bg p-4">
254
+ A protected resource is each unique <code>(resource_type, resource_key)</code> saved
255
+ in the workspace. Releasing a claim does not remove the resource.
256
+ </div>
257
+ <div className="rounded border border-border bg-bg p-4">
258
+ An active work claim is a claim with <code>status='active'</code> and{' '}
259
+ <code>expires_at</code> still in the future.
260
+ </div>
261
+ <div className="rounded border border-border bg-bg p-4">
262
+ On Free, you can create up to 3 agents, but only 1 work claim can be active at the
263
+ same time.
264
+ </div>
265
+ </div>
266
+ </section>
267
+
268
+ <section className="mt-16 grid gap-5 rounded border border-border bg-surface p-6 lg:grid-cols-[1fr_1.2fr]">
269
+ <div>
270
+ <p className="text-label uppercase text-text-tertiary">Recommended path</p>
271
+ <h2 className="mt-2 text-3xl font-semibold text-text-primary">
272
+ Start with the pilot guide, use Docs as the map
273
+ </h2>
274
+ <p className="mt-3 text-body leading-6 text-text-secondary">
275
+ The shortest proof-of-value path is: run verification, install the Node SDK, use
276
+ observe mode, then confirm real traffic in Activity. Quickstart keeps MCP, REST,
277
+ shell, Codex, and OpenClaw examples for teams that need those integration paths.
278
+ </p>
279
+ <div className="mt-5">
280
+ <Button href="/docs/pilot">Open pilot guide</Button>
281
+ </div>
282
+ </div>
283
+ <div className="space-y-3">
284
+ {securityNotes.map((note) => (
285
+ <div className="rounded border border-border bg-bg px-4 py-3 text-body leading-6 text-text-secondary" key={note}>
286
+ {note}
287
+ </div>
288
+ ))}
289
+ </div>
290
+ </section>
291
+ </section>
292
+ </main>
293
+ <SiteFooter />
294
+ </>
295
+ );
296
+ }
@@ -0,0 +1,127 @@
1
+ import type { Metadata } from 'next';
2
+ import { SiteHeader } from '@/components/marketing/SiteHeader';
3
+ import { SiteFooter } from '@/components/marketing/SiteFooter';
4
+ import { JsonLd } from '@/components/seo/JsonLd';
5
+ import { Button } from '@/components/ui/Button';
6
+ import { pilotPageSchema } from '@/lib/seo';
7
+
8
+ export const metadata: Metadata = {
9
+ title: 'Pilot in 10 minutes',
10
+ description:
11
+ 'Run a self-serve Availsync pilot: verify setup, install the Node SDK, switch to observe mode, and confirm real agent traffic.',
12
+ alternates: {
13
+ canonical: '/docs/pilot',
14
+ },
15
+ };
16
+
17
+ const steps = [
18
+ {
19
+ title: 'Start free',
20
+ body: 'Create a workspace and agent. The free plan includes 3 agents, 2 protected resources, and 1 active work claim.',
21
+ cta: 'Create workspace',
22
+ href: '/signup',
23
+ },
24
+ {
25
+ title: 'Run verification',
26
+ body: 'Use the dashboard verification flow to see Availsync resolve a real conflict between two agents without touching your repo.',
27
+ cta: 'Open verification',
28
+ href: '/app/onboarding/verify',
29
+ },
30
+ {
31
+ title: 'Switch the pilot agent to Observe',
32
+ body: 'Observe mode lets the automation run normally while Availsync records what it would have blocked.',
33
+ cta: 'Open agents',
34
+ href: '/app/agents',
35
+ },
36
+ {
37
+ title: 'Install the Node SDK',
38
+ body: 'Add @availsync/node@alpha to the automation project and wrap the repo work with withClaim.',
39
+ cta: 'Read SDK docs',
40
+ href: '/docs/sdk/node',
41
+ },
42
+ {
43
+ title: 'Run one guarded repo task',
44
+ body: 'Use resource repo:owner/repo as the safe default. Blocked enforce-mode runs should exit with skip_run.',
45
+ cta: 'Open quickstart',
46
+ href: '/docs/quickstart',
47
+ },
48
+ {
49
+ title: 'Confirm value',
50
+ body: 'Check Activity for real runtime calls and Overview for blocked or would-have-blocked work runs.',
51
+ cta: 'Open dashboard',
52
+ href: '/app',
53
+ },
54
+ ];
55
+
56
+ const successSignals = [
57
+ 'Activity shows client @availsync/node or your MCP/client name.',
58
+ 'Overview shows real API calls, not only setup tests.',
59
+ 'Observe mode shows would-have-blocked runs when conflicts would happen.',
60
+ 'Enforce mode returns skip_run before a second agent touches the same repo.',
61
+ ];
62
+
63
+ export default function PilotPage() {
64
+ return (
65
+ <>
66
+ <JsonLd data={pilotPageSchema()} />
67
+ <SiteHeader />
68
+ <main className="min-h-screen bg-bg">
69
+ <section className="mx-auto max-w-5xl px-4 py-16">
70
+ <p className="text-label uppercase text-text-tertiary">Pilot guide</p>
71
+ <h1 className="mt-3 max-w-4xl text-5xl font-semibold text-text-primary">
72
+ Pilot Availsync in 10 minutes.
73
+ </h1>
74
+ <p className="mt-5 max-w-3xl text-heading leading-7 text-text-secondary">
75
+ This is the self-serve path for first users: verify the product, run in observe mode,
76
+ then turn on enforcement once the dashboard proves value.
77
+ </p>
78
+ <div className="mt-8 flex flex-wrap gap-3">
79
+ <Button href="/signup">Start free</Button>
80
+ <Button href="/docs/sdk/node" variant="secondary">
81
+ Read SDK docs
82
+ </Button>
83
+ </div>
84
+
85
+ <section className="mt-12 grid gap-4">
86
+ {steps.map((step, index) => (
87
+ <div className="grid gap-4 rounded border border-border bg-surface p-5 md:grid-cols-[72px_1fr_auto] md:items-center" key={step.title}>
88
+ <div className="flex h-12 w-12 items-center justify-center rounded border border-border bg-bg font-mono text-heading text-text-primary">
89
+ {index + 1}
90
+ </div>
91
+ <div>
92
+ <h2 className="text-heading font-semibold text-text-primary">{step.title}</h2>
93
+ <p className="mt-1 text-body leading-6 text-text-secondary">{step.body}</p>
94
+ </div>
95
+ <Button href={step.href} variant={index === 0 ? 'primary' : 'secondary'}>
96
+ {step.cta}
97
+ </Button>
98
+ </div>
99
+ ))}
100
+ </section>
101
+
102
+ <section className="mt-14 rounded border border-border bg-surface p-6">
103
+ <p className="text-label uppercase text-text-tertiary">Success criteria</p>
104
+ <h2 className="mt-2 text-3xl font-semibold text-text-primary">What a good pilot looks like</h2>
105
+ <div className="mt-5 grid gap-3 md:grid-cols-2">
106
+ {successSignals.map((signal) => (
107
+ <div className="rounded border border-border bg-bg p-4 text-body leading-6 text-text-secondary" key={signal}>
108
+ {signal}
109
+ </div>
110
+ ))}
111
+ </div>
112
+ </section>
113
+
114
+ <section className="mt-14 rounded border border-warning/40 bg-warning/10 p-5">
115
+ <h2 className="text-heading font-semibold text-text-primary">Scope for the first pilot</h2>
116
+ <p className="mt-2 text-body leading-6 text-text-secondary">
117
+ Use repo-level resources for the first pilot. Availsync blocks simultaneous work on
118
+ the same resource, but it does not yet infer dependencies between separate project
119
+ keys or sync external calendar providers.
120
+ </p>
121
+ </section>
122
+ </section>
123
+ </main>
124
+ <SiteFooter />
125
+ </>
126
+ );
127
+ }