@leanspec/ui 0.2.7 → 0.2.8

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 (356) hide show
  1. package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64 → @img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64}/README.md +2 -2
  2. package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64 → @img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64}/lib/glib-2.0/include/glibconfig.h +9 -8
  3. package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64/lib/libvips-cpp.8.17.3.dylib → @img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64/lib/libvips-cpp.so.8.17.3} +0 -0
  4. package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64 → @img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64}/package.json +11 -5
  5. package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/README.md +46 -0
  6. package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/glib-2.0/include/glibconfig.h +221 -0
  7. package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/index.js +1 -0
  8. package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  9. package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/package.json +42 -0
  10. package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/versions.json +30 -0
  11. package/.next/standalone/node_modules/.pnpm/@img+sharp-linux-x64@0.34.5/node_modules/@img/sharp-linux-x64/lib/sharp-linux-x64.node +0 -0
  12. package/.next/standalone/node_modules/.pnpm/{@img+sharp-darwin-arm64@0.34.5/node_modules/@img/sharp-darwin-arm64 → @img+sharp-linux-x64@0.34.5/node_modules/@img/sharp-linux-x64}/package.json +13 -7
  13. package/.next/standalone/node_modules/.pnpm/@img+sharp-linuxmusl-x64@0.34.5/node_modules/@img/sharp-linuxmusl-x64/lib/sharp-linuxmusl-x64.node +0 -0
  14. package/.next/standalone/node_modules/.pnpm/@img+sharp-linuxmusl-x64@0.34.5/node_modules/@img/sharp-linuxmusl-x64/package.json +46 -0
  15. package/.next/standalone/node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/build/Release/better_sqlite3.node +0 -0
  16. package/.next/standalone/packages/ui/.next/BUILD_ID +1 -1
  17. package/.next/standalone/packages/ui/.next/app-path-routes-manifest.json +2 -0
  18. package/.next/standalone/packages/ui/.next/build-manifest.json +2 -2
  19. package/.next/standalone/packages/ui/.next/prerender-manifest.json +3 -3
  20. package/.next/standalone/packages/ui/.next/required-server-files.json +4 -4
  21. package/.next/standalone/packages/ui/.next/routes-manifest.json +12 -0
  22. package/.next/standalone/packages/ui/.next/server/app/_global-error.html +2 -2
  23. package/.next/standalone/packages/ui/.next/server/app/_global-error.rsc +1 -1
  24. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  25. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  26. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  27. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  28. package/.next/standalone/packages/ui/.next/server/app/_not-found/page.js +1 -1
  29. package/.next/standalone/packages/ui/.next/server/app/_not-found/page.js.nft.json +1 -1
  30. package/.next/standalone/packages/ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  31. package/.next/standalone/packages/ui/.next/server/app/_not-found.html +2 -2
  32. package/.next/standalone/packages/ui/.next/server/app/_not-found.rsc +18 -18
  33. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_full.segment.rsc +18 -18
  34. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_index.segment.rsc +11 -11
  35. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
  36. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  37. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_tree.segment.rsc +6 -6
  38. package/.next/standalone/packages/ui/.next/server/app/api/context/route/app-paths-manifest.json +3 -0
  39. package/.next/standalone/packages/ui/.next/server/app/api/context/route/build-manifest.json +11 -0
  40. package/.next/standalone/packages/ui/.next/server/app/api/context/route/server-reference-manifest.json +4 -0
  41. package/.next/standalone/packages/ui/.next/server/app/api/context/route.js +8 -0
  42. package/.next/standalone/packages/ui/.next/server/app/api/context/route.js.map +5 -0
  43. package/.next/standalone/packages/ui/.next/server/app/api/context/route.js.nft.json +1 -0
  44. package/.next/standalone/packages/ui/.next/server/app/api/context/route_client-reference-manifest.js +2 -0
  45. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/[id]/route.js.nft.json +1 -1
  46. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/discover/route.js.nft.json +1 -1
  47. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route.js.nft.json +1 -1
  48. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/route.js.nft.json +1 -1
  49. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route.js.nft.json +1 -1
  50. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route.js.nft.json +1 -1
  51. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route.js.nft.json +1 -1
  52. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/route.js.nft.json +1 -1
  53. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route.js.nft.json +1 -1
  54. package/.next/standalone/packages/ui/.next/server/app/api/projects/route.js.nft.json +1 -1
  55. package/.next/standalone/packages/ui/.next/server/app/api/revalidate/route.js.nft.json +1 -1
  56. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/dependency-graph/route.js.nft.json +1 -1
  57. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/route.js.nft.json +1 -1
  58. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route.js.nft.json +1 -1
  59. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/subspecs/[file]/route.js.nft.json +1 -1
  60. package/.next/standalone/packages/ui/.next/server/app/api/stats/route.js.nft.json +1 -1
  61. package/.next/standalone/packages/ui/.next/server/app/context/page/app-paths-manifest.json +3 -0
  62. package/.next/standalone/packages/ui/.next/server/app/context/page/build-manifest.json +18 -0
  63. package/.next/standalone/packages/ui/.next/server/app/context/page/next-font-manifest.json +6 -0
  64. package/.next/standalone/packages/ui/.next/server/app/context/page/react-loadable-manifest.json +1 -0
  65. package/.next/standalone/packages/ui/.next/server/app/context/page/server-reference-manifest.json +4 -0
  66. package/.next/standalone/packages/ui/.next/server/app/context/page.js +19 -0
  67. package/.next/standalone/packages/ui/.next/server/app/context/page.js.map +5 -0
  68. package/.next/standalone/packages/ui/.next/server/app/context/page.js.nft.json +1 -0
  69. package/.next/standalone/packages/ui/.next/server/app/context/page_client-reference-manifest.js +2 -0
  70. package/.next/standalone/packages/ui/.next/server/app/page.js +1 -1
  71. package/.next/standalone/packages/ui/.next/server/app/page.js.nft.json +1 -1
  72. package/.next/standalone/packages/ui/.next/server/app/page_client-reference-manifest.js +1 -1
  73. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page.js +1 -1
  74. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page.js.nft.json +1 -1
  75. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page_client-reference-manifest.js +1 -1
  76. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page.js +1 -1
  77. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page.js.nft.json +1 -1
  78. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page_client-reference-manifest.js +1 -1
  79. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page.js +1 -1
  80. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page.js.nft.json +1 -1
  81. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page_client-reference-manifest.js +1 -1
  82. package/.next/standalone/packages/ui/.next/server/app/projects/page.js +1 -1
  83. package/.next/standalone/packages/ui/.next/server/app/projects/page.js.nft.json +1 -1
  84. package/.next/standalone/packages/ui/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  85. package/.next/standalone/packages/ui/.next/server/app/projects.html +2 -2
  86. package/.next/standalone/packages/ui/.next/server/app/projects.rsc +12 -12
  87. package/.next/standalone/packages/ui/.next/server/app/projects.segments/_full.segment.rsc +12 -12
  88. package/.next/standalone/packages/ui/.next/server/app/projects.segments/_index.segment.rsc +9 -9
  89. package/.next/standalone/packages/ui/.next/server/app/projects.segments/_tree.segment.rsc +3 -3
  90. package/.next/standalone/packages/ui/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +2 -2
  91. package/.next/standalone/packages/ui/.next/server/app/projects.segments/projects.segment.rsc +1 -1
  92. package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page.js +1 -1
  93. package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page.js.nft.json +1 -1
  94. package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page_client-reference-manifest.js +1 -1
  95. package/.next/standalone/packages/ui/.next/server/app/specs/page.js +1 -1
  96. package/.next/standalone/packages/ui/.next/server/app/specs/page.js.nft.json +1 -1
  97. package/.next/standalone/packages/ui/.next/server/app/specs/page_client-reference-manifest.js +1 -1
  98. package/.next/standalone/packages/ui/.next/server/app/stats/page.js +1 -1
  99. package/.next/standalone/packages/ui/.next/server/app/stats/page.js.nft.json +1 -1
  100. package/.next/standalone/packages/ui/.next/server/app/stats/page_client-reference-manifest.js +1 -1
  101. package/.next/standalone/packages/ui/.next/server/app-paths-manifest.json +2 -0
  102. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__3559376c._.js +2 -2
  103. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__65667b70._.js +1 -1
  104. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__803d07f0._.js +1 -1
  105. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__84cdc14a._.js +1 -1
  106. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__8a9ab1a3._.js +3 -0
  107. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__bdc3963a._.js +1 -1
  108. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__f5c6d6b8._.js +1 -1
  109. package/.next/standalone/packages/ui/.next/server/chunks/packages_ui__next-internal_server_app_api_context_route_actions_dead6daa.js +3 -0
  110. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__12b4eb41._.js +3 -0
  111. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__69a0d63a._.js +3 -0
  112. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__6e739186._.js +7 -0
  113. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__a4c56419._.js +7 -0
  114. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__b6632d78._.js +3 -0
  115. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__daee3355._.js +1 -1
  116. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__5382b397._.js → [root-of-the-server]__ead1539c._.js} +2 -2
  117. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_000dd317._.js +1 -1
  118. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_0f9ffe32._.js +1 -1
  119. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_28fe1532._.js +5 -0
  120. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_315f3b3a._.js +3 -0
  121. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_959ad3d8._.js +4 -0
  122. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_9dcf102b._.js +3 -0
  123. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{_497c8b73._.js → _b397e94a._.js} +2 -2
  124. package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_8272a49c._.js +3 -0
  125. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui__next-internal_server_app_context_page_actions_1a062d48.js +3 -0
  126. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_context_context-client_tsx_4ba99a62._.js +12 -0
  127. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_specs_specs-client_tsx_0bb8f8f8._.js +1 -1
  128. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_components_specs-nav-sidebar_tsx_8237ed13._.js +1 -1
  129. package/.next/standalone/packages/ui/.next/server/pages/404.html +2 -2
  130. package/.next/standalone/packages/ui/.next/server/pages/500.html +2 -2
  131. package/.next/standalone/packages/ui/.next/server/server-reference-manifest.js +1 -1
  132. package/.next/standalone/packages/ui/.next/server/server-reference-manifest.json +1 -1
  133. package/.next/standalone/packages/ui/.next/static/chunks/1eb8283995f370c6.js +1 -0
  134. package/.next/standalone/packages/ui/.next/static/chunks/336e8e8fc6b0fba8.js +1 -0
  135. package/.next/standalone/packages/ui/.next/static/chunks/37a1236ed50645a6.js +1 -0
  136. package/.next/standalone/packages/ui/.next/static/chunks/9d84ba08a41145ec.js +5 -0
  137. package/.next/standalone/packages/ui/.next/static/chunks/c4b1faff3361a749.js +1 -0
  138. package/.next/standalone/packages/ui/.next/static/chunks/{294dea6dbec43ca6.js → d7420d2a867e57b5.js} +1 -1
  139. package/.next/{static/chunks/cca4441cde342ae3.js → standalone/packages/ui/.next/static/chunks/dae403679aae65f4.js} +1 -1
  140. package/.next/standalone/packages/ui/.next/static/chunks/efded9da04c960d8.js +1 -0
  141. package/.next/standalone/packages/ui/.next/static/chunks/f382932f1a5d6359.js +10 -0
  142. package/.next/standalone/packages/ui/.next/static/chunks/f43b6e43b4da1a32.css +1 -0
  143. package/.next/standalone/packages/ui/.next/static/chunks/f6dd06e6d22d2d12.js +3 -0
  144. package/.next/standalone/packages/ui/dist/BUILD_ID +1 -0
  145. package/.next/standalone/packages/ui/dist/standalone/packages/web/package.json +1 -9
  146. package/.next/standalone/packages/ui/dist/standalone/packages/web/server.js +1 -1
  147. package/.next/standalone/packages/ui/dist/standalone/specs/035-live-specs-showcase/README.md +3 -7
  148. package/.next/standalone/packages/ui/dist/standalone/specs/072-ai-agent-first-use-workflow/README.md +3 -5
  149. package/.next/standalone/packages/ui/dist/standalone/specs/081-web-app-ux-redesign/README.md +1 -2
  150. package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/README.md +3 -8
  151. package/.next/standalone/packages/ui/dist/standalone/specs/087-cli-ui-command/README.md +259 -73
  152. package/.next/standalone/packages/ui/dist/standalone/specs/088-core-concepts-terminology-only/README.md +3 -5
  153. package/.next/standalone/packages/ui/dist/standalone/specs/089-sdd-practical-tutorials/README.md +3 -5
  154. package/.next/standalone/packages/ui/dist/standalone/specs/090-leanspec-sdd-case-studies/README.md +3 -5
  155. package/.next/standalone/packages/ui/dist/standalone/specs/091-chinese-localization-strategy/README.md +23 -33
  156. package/.next/standalone/packages/ui/dist/standalone/specs/092-docs-site-submodule-migration/README.md +3 -7
  157. package/.next/standalone/packages/ui/dist/standalone/specs/093-spec-detail-ui-improvements/README.md +14 -25
  158. package/.next/standalone/packages/ui/dist/static/chunks/0c19c69aa7625475.js +1 -0
  159. package/.next/standalone/packages/ui/dist/static/chunks/116800b03245a1e5.js +1 -0
  160. package/.next/standalone/packages/ui/dist/static/chunks/15843a3d7584e314.js +1 -0
  161. package/.next/standalone/packages/ui/dist/static/chunks/19e80edf527aef5c.js +1 -0
  162. package/.next/standalone/packages/ui/dist/static/chunks/465954d5af3284a9.js +1 -0
  163. package/.next/standalone/packages/ui/dist/static/chunks/5abeeb89f1412a80.js +3 -0
  164. package/.next/standalone/packages/ui/dist/static/chunks/5c2072ad938de8ed.js +1 -0
  165. package/.next/standalone/packages/ui/dist/static/chunks/6a05a93ec8fa7b83.js +1 -0
  166. package/.next/standalone/packages/ui/dist/static/chunks/778e42188e450b39.css +1 -0
  167. package/.next/standalone/packages/ui/dist/static/chunks/a02c1f50ff00204f.js +1 -0
  168. package/.next/standalone/packages/ui/dist/static/chunks/a45464b9776dd88e.js +1 -0
  169. package/.next/standalone/packages/ui/dist/static/chunks/a6dad97d9634a72d.js +1 -0
  170. package/.next/standalone/packages/ui/dist/static/chunks/b0ea0ac61604f843.js +1 -0
  171. package/.next/standalone/packages/ui/dist/static/chunks/c06e85b449720194.js +1 -0
  172. package/.next/standalone/packages/ui/dist/static/chunks/c557ac675be79771.js +1 -0
  173. package/.next/standalone/packages/ui/dist/static/chunks/cad005a57ffbb2d3.js +1 -0
  174. package/.next/standalone/packages/ui/dist/static/chunks/cdf6fe33bc65efbc.js +1 -0
  175. package/.next/standalone/packages/ui/dist/static/chunks/d12ed5dbe44caed7.js +1 -0
  176. package/.next/standalone/packages/ui/dist/static/chunks/d1ebe5c1a344f4ca.js +5 -0
  177. package/.next/standalone/packages/ui/dist/static/chunks/d42cf1682bc46652.js +1 -0
  178. package/.next/standalone/packages/ui/dist/static/chunks/dde5d8bddd7fbfcf.js +1 -0
  179. package/.next/standalone/packages/ui/dist/static/chunks/ebd89051637b9a47.js +4 -0
  180. package/.next/standalone/packages/ui/dist/static/chunks/ec82875d18b29f47.js +2 -0
  181. package/.next/standalone/packages/ui/dist/static/chunks/f0b701df9769bcc5.js +19 -0
  182. package/.next/standalone/packages/ui/dist/static/chunks/turbopack-1c09a99f4c9e28d3.js +3 -0
  183. package/.next/standalone/packages/ui/package.json +3 -1
  184. package/.next/standalone/packages/ui/server.js +1 -1
  185. package/.next/standalone/packages/ui/src/app/api/context/route.ts +22 -0
  186. package/.next/standalone/packages/ui/src/app/context/context-client.tsx +371 -0
  187. package/.next/standalone/packages/ui/src/app/context/page.tsx +17 -0
  188. package/.next/standalone/packages/ui/src/app/globals.css +16 -16
  189. package/.next/standalone/packages/ui/src/app/layout.tsx +4 -7
  190. package/.next/standalone/packages/ui/src/components/context-file-viewer.tsx +291 -0
  191. package/.next/standalone/packages/ui/src/components/main-sidebar.tsx +10 -1
  192. package/.next/standalone/packages/ui/src/components/spec-detail-client.tsx +181 -134
  193. package/.next/standalone/packages/ui/src/components/spec-detail-wrapper.tsx +20 -0
  194. package/.next/standalone/packages/ui/src/components/specs-nav-sidebar.tsx +3 -2
  195. package/.next/standalone/packages/ui/src/components/ui/accordion.tsx +58 -0
  196. package/.next/standalone/packages/ui/src/lib/db/service-queries.ts +172 -3
  197. package/.next/standalone/packages/ui/src/lib/specs/types.ts +44 -0
  198. package/.next/standalone/packages/ui/tsconfig.tsbuildinfo +1 -1
  199. package/.next/static/-Mn9iD4O5f_khGd1P3kmB/_buildManifest.js +11 -0
  200. package/.next/static/-Mn9iD4O5f_khGd1P3kmB/_clientMiddlewareManifest.json +1 -0
  201. package/.next/static/-Mn9iD4O5f_khGd1P3kmB/_ssgManifest.js +1 -0
  202. package/.next/static/chunks/1eb8283995f370c6.js +1 -0
  203. package/.next/static/chunks/336e8e8fc6b0fba8.js +1 -0
  204. package/.next/static/chunks/37a1236ed50645a6.js +1 -0
  205. package/.next/static/chunks/9d84ba08a41145ec.js +5 -0
  206. package/.next/static/chunks/c4b1faff3361a749.js +1 -0
  207. package/.next/static/chunks/{294dea6dbec43ca6.js → d7420d2a867e57b5.js} +1 -1
  208. package/.next/{standalone/packages/ui/.next/static/chunks/cca4441cde342ae3.js → static/chunks/dae403679aae65f4.js} +1 -1
  209. package/.next/static/chunks/efded9da04c960d8.js +1 -0
  210. package/.next/static/chunks/f382932f1a5d6359.js +10 -0
  211. package/.next/static/chunks/f43b6e43b4da1a32.css +1 -0
  212. package/.next/static/chunks/f6dd06e6d22d2d12.js +3 -0
  213. package/package.json +4 -2
  214. package/.next/standalone/node_modules/.pnpm/@img+sharp-darwin-arm64@0.34.5/node_modules/@img/sharp-darwin-arm64/lib/sharp-darwin-arm64.node +0 -0
  215. package/.next/standalone/node_modules/.pnpm/source-map@0.8.0-beta.0/node_modules/source-map/package.json +0 -95
  216. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__1d0c2012._.js +0 -3
  217. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__73f60f12._.js +0 -7
  218. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__a7ae8552._.js +0 -7
  219. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_14118969._.js +0 -3
  220. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_4129cc0f._.js +0 -3
  221. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_c2f54661._.js +0 -5
  222. package/.next/standalone/packages/ui/.next/static/chunks/16ff9833ae1bb3ae.js +0 -1
  223. package/.next/standalone/packages/ui/.next/static/chunks/2204c0f16b23ec4c.js +0 -3
  224. package/.next/standalone/packages/ui/.next/static/chunks/7590e65bcaa41e8b.js +0 -1
  225. package/.next/standalone/packages/ui/.next/static/chunks/b6976cf6c48996e5.js +0 -1
  226. package/.next/standalone/packages/ui/.next/static/chunks/b845813463167db0.js +0 -5
  227. package/.next/standalone/packages/ui/.next/static/chunks/bd9893e28f8f6a9a.css +0 -1
  228. package/.next/standalone/packages/ui/.next/static/chunks/d784d84d5b880e48.js +0 -1
  229. package/.next/standalone/packages/ui/dist/standalone/packages/web/components.json +0 -20
  230. package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/0000_reflective_thena.sql +0 -59
  231. package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/0001_fresh_carmella_unuscione.sql +0 -1
  232. package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/meta/0000_snapshot.json +0 -427
  233. package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/meta/0001_snapshot.json +0 -436
  234. package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/meta/_journal.json +0 -20
  235. package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle.config.ts +0 -10
  236. package/.next/standalone/packages/ui/dist/standalone/packages/web/eslint.config.mjs +0 -18
  237. package/.next/standalone/packages/ui/dist/standalone/packages/web/next.config.ts +0 -7
  238. package/.next/standalone/packages/ui/dist/standalone/packages/web/postcss.config.mjs +0 -8
  239. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/projects/[id]/specs/route.ts +0 -23
  240. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/projects/route.ts +0 -19
  241. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/revalidate/route.ts +0 -63
  242. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/dependency-graph/route.test.ts +0 -51
  243. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/dependency-graph/route.ts +0 -171
  244. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/route.ts +0 -36
  245. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/subspecs/[file]/route.ts +0 -46
  246. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/stats/route.ts +0 -19
  247. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/board/board-client.tsx +0 -162
  248. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/board/loading.tsx +0 -43
  249. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/board/page.tsx +0 -18
  250. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/dashboard-client.tsx +0 -364
  251. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/error.tsx +0 -43
  252. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/globals.css +0 -531
  253. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/home-client.tsx +0 -277
  254. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/layout.tsx +0 -70
  255. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/loading.tsx +0 -87
  256. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/not-found.tsx +0 -27
  257. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/page.tsx +0 -18
  258. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/specs/[id]/loading.tsx +0 -5
  259. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/specs/[id]/page.tsx +0 -43
  260. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/specs/page.tsx +0 -18
  261. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/specs/specs-client.tsx +0 -425
  262. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/stats/page.tsx +0 -18
  263. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/stats/stats-client.tsx +0 -283
  264. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/back-to-top.tsx +0 -46
  265. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/empty-state.tsx +0 -52
  266. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/main-sidebar.tsx +0 -175
  267. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/markdown-link.test.ts +0 -96
  268. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/markdown-link.tsx +0 -95
  269. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/navigation.tsx +0 -210
  270. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/priority-badge.tsx +0 -53
  271. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/quick-search.tsx +0 -180
  272. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/skeletons.tsx +0 -119
  273. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-dependency-graph.tsx +0 -369
  274. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-detail-client.tsx +0 -372
  275. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-detail-loading-shell.tsx +0 -42
  276. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-detail-wrapper.tsx +0 -70
  277. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-metadata.tsx +0 -136
  278. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-sidebar.tsx +0 -127
  279. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-timeline.tsx +0 -186
  280. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/specs-nav-sidebar.tsx +0 -561
  281. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/status-badge.tsx +0 -53
  282. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/sub-spec-tabs.tsx +0 -143
  283. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/table-of-contents.tsx +0 -130
  284. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/theme-provider.tsx +0 -11
  285. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/theme-toggle.tsx +0 -37
  286. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/avatar.tsx +0 -50
  287. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/badge.tsx +0 -36
  288. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/breadcrumb.tsx +0 -110
  289. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/button.tsx +0 -57
  290. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/card.tsx +0 -76
  291. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/command.tsx +0 -153
  292. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/dialog.tsx +0 -122
  293. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/input.tsx +0 -24
  294. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/select.tsx +0 -159
  295. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/separator.tsx +0 -31
  296. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/skeleton.tsx +0 -15
  297. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/tabs.tsx +0 -55
  298. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/toast.tsx +0 -30
  299. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/tooltip.tsx +0 -32
  300. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/date-utils.ts +0 -76
  301. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/index.ts +0 -42
  302. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/migrate.ts +0 -18
  303. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/queries.ts +0 -114
  304. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/schema.ts +0 -123
  305. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/seed.ts +0 -156
  306. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/service-queries.ts +0 -216
  307. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/dependency-graph.ts +0 -105
  308. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/service.ts +0 -120
  309. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/sources/database-source.ts +0 -94
  310. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/sources/filesystem-source.ts +0 -249
  311. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/types.ts +0 -55
  312. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/stores/specs-sidebar-store.ts +0 -152
  313. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/sub-specs.ts +0 -171
  314. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/utils.ts +0 -17
  315. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/types/specs.ts +0 -18
  316. package/.next/standalone/packages/ui/dist/standalone/packages/web/tailwind.config.ts +0 -58
  317. package/.next/standalone/packages/ui/dist/standalone/packages/web/tsconfig.json +0 -34
  318. package/.next/standalone/packages/ui/dist/standalone/packages/web/tsconfig.tsbuildinfo +0 -1
  319. package/.next/standalone/packages/ui/dist/standalone/packages/web/vitest.config.ts +0 -14
  320. package/.next/standalone/packages/ui/dist/standalone/specs/094-ai-chatbot-web-integration/README.md +0 -332
  321. package/.next/standalone/packages/ui/dist/standalone/specs/095-pr-migration-verification/README.md +0 -339
  322. package/.next/standalone/packages/ui/dist/standalone/specs/096-docs-beginner-first-reorg/README.md +0 -399
  323. package/.next/standalone/packages/ui/dist/standalone/specs/097-dag-visualization-library/README.md +0 -525
  324. package/.next/standalone/packages/ui/dist/standalone/specs/098-github-multi-project-integration/README.md +0 -387
  325. package/.next/standalone/packages/ui/dist/standalone/specs/099-enhanced-dependency-commands-cli-mcp/README.md +0 -613
  326. package/.next/standalone/packages/ui/dist/standalone/specs/100-release-process-typecheck-failure/README.md +0 -266
  327. package/.next/standalone/packages/ui/dist/standalone/specs/101-sidebar-scroll-position-drift/README.md +0 -100
  328. package/.next/standalone/packages/ui/dist/standalone/specs/102-mcp-wrapper-package/README.md +0 -172
  329. package/.next/static/chunks/16ff9833ae1bb3ae.js +0 -1
  330. package/.next/static/chunks/2204c0f16b23ec4c.js +0 -3
  331. package/.next/static/chunks/7590e65bcaa41e8b.js +0 -1
  332. package/.next/static/chunks/b6976cf6c48996e5.js +0 -1
  333. package/.next/static/chunks/b845813463167db0.js +0 -5
  334. package/.next/static/chunks/bd9893e28f8f6a9a.css +0 -1
  335. package/.next/static/chunks/d784d84d5b880e48.js +0 -1
  336. /package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64 → @img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64}/lib/index.js +0 -0
  337. /package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64 → @img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64}/versions.json +0 -0
  338. /package/.next/standalone/packages/ui/.next/static/{6nq7WNafPv5Bf_7mWgRQ- → -Mn9iD4O5f_khGd1P3kmB}/_buildManifest.js +0 -0
  339. /package/.next/standalone/packages/ui/.next/static/{6nq7WNafPv5Bf_7mWgRQ- → -Mn9iD4O5f_khGd1P3kmB}/_clientMiddlewareManifest.json +0 -0
  340. /package/.next/standalone/packages/ui/.next/static/{6nq7WNafPv5Bf_7mWgRQ- → -Mn9iD4O5f_khGd1P3kmB}/_ssgManifest.js +0 -0
  341. /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/f864aa7e7061c0600e35cf3d879b27cf.txt +0 -0
  342. /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/favicon.ico +0 -0
  343. /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/file.svg +0 -0
  344. /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/github-mark-white.svg +0 -0
  345. /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/github-mark.svg +0 -0
  346. /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/globe.svg +0 -0
  347. /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/icon.svg +0 -0
  348. /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/logo-dark-bg.svg +0 -0
  349. /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/logo-with-bg.svg +0 -0
  350. /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/logo.svg +0 -0
  351. /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/next.svg +0 -0
  352. /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/vercel.svg +0 -0
  353. /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/window.svg +0 -0
  354. /package/.next/{static/6nq7WNafPv5Bf_7mWgRQ- → standalone/packages/ui/dist/static/4ZnYN1WbN4LGJQOwP6FkT}/_buildManifest.js +0 -0
  355. /package/.next/{static/6nq7WNafPv5Bf_7mWgRQ- → standalone/packages/ui/dist/static/4ZnYN1WbN4LGJQOwP6FkT}/_clientMiddlewareManifest.json +0 -0
  356. /package/.next/{static/6nq7WNafPv5Bf_7mWgRQ- → standalone/packages/ui/dist/static/4ZnYN1WbN4LGJQOwP6FkT}/_ssgManifest.js +0 -0
@@ -1,364 +0,0 @@
1
- 'use client';
2
-
3
- import Link from 'next/link';
4
- import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
5
- import { Button } from '@/components/ui/button';
6
- import {
7
- FileText,
8
- CheckCircle2,
9
- PlayCircle,
10
- Clock,
11
- LayoutGrid,
12
- List,
13
- TrendingUp,
14
- Calendar
15
- } from 'lucide-react';
16
- import { StatusBadge } from '@/components/status-badge';
17
- import { PriorityBadge } from '@/components/priority-badge';
18
- import { Badge } from '@/components/ui/badge';
19
- import { extractH1Title } from '@/lib/utils';
20
-
21
- interface Spec {
22
- id: string;
23
- specNumber: number | null;
24
- specName: string;
25
- title: string | null;
26
- status: string | null;
27
- priority: string | null;
28
- tags: string[] | null;
29
- createdAt: Date | null;
30
- updatedAt: Date | null;
31
- contentMd?: string;
32
- }
33
-
34
- interface Stats {
35
- totalSpecs: number;
36
- completionRate: number;
37
- specsByStatus: { status: string; count: number }[];
38
- }
39
-
40
- interface DashboardClientProps {
41
- initialSpecs: Spec[];
42
- initialStats: Stats;
43
- }
44
-
45
- function formatRelativeTime(date: Date | null): string {
46
- if (!date) return 'Unknown';
47
-
48
- const now = new Date();
49
- const diffMs = now.getTime() - date.getTime();
50
- const diffHours = Math.floor(diffMs / (1000 * 60 * 60));
51
- const diffDays = Math.floor(diffHours / 24);
52
-
53
- if (diffHours < 1) return 'Just now';
54
- if (diffHours < 24) return `${diffHours} hour${diffHours > 1 ? 's' : ''} ago`;
55
- if (diffDays < 7) return `${diffDays} day${diffDays > 1 ? 's' : ''} ago`;
56
- if (diffDays < 30) return `${Math.floor(diffDays / 7)} week${Math.floor(diffDays / 7) > 1 ? 's' : ''} ago`;
57
- return date.toLocaleDateString();
58
- }
59
-
60
- function SpecListItem({ spec }: { spec: Spec }) {
61
- // Extract H1 title from content if available, fallback to title or name
62
- const h1Title = spec.contentMd ? extractH1Title(spec.contentMd) : null;
63
- const displayTitle = h1Title || spec.title || spec.specName;
64
-
65
- return (
66
- <Link
67
- href={`/specs/${spec.specNumber}`}
68
- className="block p-3 rounded-lg hover:bg-accent transition-colors"
69
- title={spec.specName} /* Show name as tooltip */
70
- >
71
- <div className="flex items-start justify-between gap-2">
72
- <div className="flex-1 min-w-0">
73
- <div className="flex items-center gap-2 mb-1">
74
- {spec.specNumber && (
75
- <span className="text-sm font-mono text-muted-foreground shrink-0">
76
- #{spec.specNumber.toString().padStart(3, '0')}
77
- </span>
78
- )}
79
- <h4 className="text-sm font-medium truncate">
80
- {displayTitle}
81
- </h4>
82
- </div>
83
- {/* Show spec name as secondary if it differs from title */}
84
- {displayTitle !== spec.specName && (
85
- <div className="text-xs text-muted-foreground mb-1">
86
- {spec.specName}
87
- </div>
88
- )}
89
- {spec.tags && spec.tags.length > 0 && (
90
- <div className="flex flex-wrap gap-1">
91
- {spec.tags.slice(0, 3).map(tag => (
92
- <Badge key={tag} variant="secondary" className="text-xs">
93
- {tag}
94
- </Badge>
95
- ))}
96
- </div>
97
- )}
98
- </div>
99
- <div className="flex flex-col items-end gap-1 shrink-0">
100
- {spec.status && <StatusBadge status={spec.status} className="text-xs scale-90" />}
101
- {spec.priority && <PriorityBadge priority={spec.priority} className="text-xs scale-90" />}
102
- </div>
103
- </div>
104
- </Link>
105
- );
106
- }
107
-
108
- function ActivityItem({ spec, action, time }: { spec: Spec; action: string; time: Date | null }) {
109
- const h1Title = spec.contentMd ? extractH1Title(spec.contentMd) : null;
110
- const displayTitle = h1Title || spec.title || spec.specName;
111
-
112
- return (
113
- <div className="flex items-start gap-3 py-2">
114
- <div className="w-2 h-2 rounded-full bg-primary mt-2 shrink-0" />
115
- <div className="flex-1 min-w-0">
116
- <p className="text-sm">
117
- <Link
118
- href={`/specs/${spec.specNumber}`}
119
- className="font-medium hover:underline"
120
- title={spec.specName}
121
- >
122
- #{spec.specNumber?.toString().padStart(3, '0')} {displayTitle}
123
- </Link>
124
- {' '}
125
- <span className="text-muted-foreground">{action}</span>
126
- </p>
127
- <p className="text-xs text-muted-foreground mt-0.5">
128
- {formatRelativeTime(time)}
129
- </p>
130
- </div>
131
- </div>
132
- );
133
- }
134
-
135
- export function DashboardClient({ initialSpecs, initialStats }: DashboardClientProps) {
136
- const stats = initialStats;
137
-
138
- // Get specs by status
139
- const inProgressSpecs = initialSpecs
140
- .filter(spec => spec.status === 'in-progress')
141
- .sort((a, b) => (b.specNumber || 0) - (a.specNumber || 0))
142
- .slice(0, 5);
143
-
144
- const plannedSpecs = initialSpecs
145
- .filter(spec => spec.status === 'planned')
146
- .sort((a, b) => (b.specNumber || 0) - (a.specNumber || 0))
147
- .slice(0, 5);
148
-
149
- const recentlyAdded = initialSpecs
150
- .sort((a, b) => {
151
- if (!a.createdAt) return 1;
152
- if (!b.createdAt) return -1;
153
- return b.createdAt.getTime() - a.createdAt.getTime();
154
- })
155
- .slice(0, 5);
156
-
157
- const recentActivity = initialSpecs
158
- .filter(spec => spec.updatedAt)
159
- .sort((a, b) => {
160
- if (!a.updatedAt) return 1;
161
- if (!b.updatedAt) return -1;
162
- return b.updatedAt.getTime() - a.updatedAt.getTime();
163
- })
164
- .slice(0, 10);
165
-
166
- const completeCount = stats.specsByStatus.find(s => s.status === 'complete')?.count || 0;
167
-
168
- return (
169
- <div className="min-h-screen bg-background p-4 sm:p-8">
170
- <div className="max-w-7xl mx-auto space-y-6 sm:space-y-8">
171
- {/* Header */}
172
- <div>
173
- <h1 className="text-3xl sm:text-4xl font-bold tracking-tight">Dashboard</h1>
174
- <p className="text-muted-foreground mt-2">
175
- Project overview and recent activity
176
- </p>
177
- </div>
178
-
179
- {/* Stats Cards */}
180
- <div className="grid grid-cols-2 lg:grid-cols-4 gap-3 sm:gap-4">
181
- {/* Total Specs */}
182
- <Card className="relative overflow-hidden">
183
- <div className="absolute inset-0 bg-gradient-to-br from-blue-500/10 to-transparent" />
184
- <CardHeader className="relative pb-3">
185
- <div className="flex items-center justify-between">
186
- <CardTitle className="text-sm font-medium text-muted-foreground">
187
- Total Specs
188
- </CardTitle>
189
- <FileText className="h-5 w-5 text-blue-600" />
190
- </div>
191
- </CardHeader>
192
- <CardContent className="relative">
193
- <div className="text-3xl font-bold">{stats.totalSpecs}</div>
194
- </CardContent>
195
- </Card>
196
-
197
- {/* In Progress */}
198
- <Card className="relative overflow-hidden">
199
- <div className="absolute inset-0 bg-gradient-to-br from-orange-500/10 to-transparent" />
200
- <CardHeader className="relative pb-3">
201
- <div className="flex items-center justify-between">
202
- <CardTitle className="text-sm font-medium text-muted-foreground">
203
- In Progress
204
- </CardTitle>
205
- <PlayCircle className="h-5 w-5 text-orange-600" />
206
- </div>
207
- </CardHeader>
208
- <CardContent className="relative">
209
- <div className="text-3xl font-bold">
210
- {stats.specsByStatus.find(s => s.status === 'in-progress')?.count || 0}
211
- </div>
212
- </CardContent>
213
- </Card>
214
-
215
- {/* Completed */}
216
- <Card className="relative overflow-hidden">
217
- <div className="absolute inset-0 bg-gradient-to-br from-green-500/10 to-transparent" />
218
- <CardHeader className="relative pb-3">
219
- <div className="flex items-center justify-between">
220
- <CardTitle className="text-sm font-medium text-muted-foreground">
221
- Completed
222
- </CardTitle>
223
- <CheckCircle2 className="h-5 w-5 text-green-600" />
224
- </div>
225
- </CardHeader>
226
- <CardContent className="relative">
227
- <div className="text-3xl font-bold">{completeCount}</div>
228
- <p className="text-xs text-muted-foreground mt-1 flex items-center gap-1">
229
- <TrendingUp className="h-3 w-3" />
230
- {stats.completionRate.toFixed(1)}% completion rate
231
- </p>
232
- </CardContent>
233
- </Card>
234
-
235
- {/* Planned */}
236
- <Card className="relative overflow-hidden">
237
- <div className="absolute inset-0 bg-gradient-to-br from-purple-500/10 to-transparent" />
238
- <CardHeader className="relative pb-3">
239
- <div className="flex items-center justify-between">
240
- <CardTitle className="text-sm font-medium text-muted-foreground">
241
- Planned
242
- </CardTitle>
243
- <Clock className="h-5 w-5 text-purple-600" />
244
- </div>
245
- </CardHeader>
246
- <CardContent className="relative">
247
- <div className="text-3xl font-bold">
248
- {stats.specsByStatus.find(s => s.status === 'planned')?.count || 0}
249
- </div>
250
- </CardContent>
251
- </Card>
252
- </div>
253
-
254
- {/* Main Content Grid */}
255
- <div className="grid grid-cols-1 lg:grid-cols-3 gap-4 sm:gap-6">
256
- {/* Recently Added */}
257
- <Card>
258
- <CardHeader>
259
- <CardTitle className="text-lg flex items-center gap-2">
260
- <Calendar className="h-5 w-5 text-blue-600" />
261
- Recently Added
262
- </CardTitle>
263
- </CardHeader>
264
- <CardContent className="space-y-1">
265
- {recentlyAdded.slice(0, 5).map(spec => (
266
- <SpecListItem key={spec.id} spec={spec} />
267
- ))}
268
- </CardContent>
269
- </Card>
270
-
271
- {/* Planned Specs */}
272
- <Card>
273
- <CardHeader>
274
- <CardTitle className="text-lg flex items-center gap-2">
275
- <Clock className="h-5 w-5 text-purple-600" />
276
- Planned ({plannedSpecs.length})
277
- </CardTitle>
278
- </CardHeader>
279
- <CardContent className="space-y-1">
280
- {plannedSpecs.length > 0 ? (
281
- plannedSpecs.map(spec => (
282
- <SpecListItem key={spec.id} spec={spec} />
283
- ))
284
- ) : (
285
- <p className="text-sm text-muted-foreground py-4 text-center">
286
- No planned specs
287
- </p>
288
- )}
289
- </CardContent>
290
- </Card>
291
-
292
- {/* In Progress Specs */}
293
- <Card>
294
- <CardHeader>
295
- <CardTitle className="text-lg flex items-center gap-2">
296
- <PlayCircle className="h-5 w-5 text-orange-600" />
297
- In Progress ({inProgressSpecs.length})
298
- </CardTitle>
299
- </CardHeader>
300
- <CardContent className="space-y-1">
301
- {inProgressSpecs.length > 0 ? (
302
- inProgressSpecs.map(spec => (
303
- <SpecListItem key={spec.id} spec={spec} />
304
- ))
305
- ) : (
306
- <p className="text-sm text-muted-foreground py-4 text-center">
307
- No specs in progress
308
- </p>
309
- )}
310
- </CardContent>
311
- </Card>
312
- </div>
313
-
314
- {/* Activity Timeline */}
315
- <Card>
316
- <CardHeader>
317
- <CardTitle className="text-lg">Recent Activity</CardTitle>
318
- </CardHeader>
319
- <CardContent>
320
- <div className="border-l-2 border-muted pl-4 space-y-1">
321
- {recentActivity.map(spec => (
322
- <ActivityItem
323
- key={spec.id}
324
- spec={spec}
325
- action="updated"
326
- time={spec.updatedAt}
327
- />
328
- ))}
329
- </div>
330
- </CardContent>
331
- </Card>
332
-
333
- {/* Quick Actions */}
334
- <Card>
335
- <CardHeader>
336
- <CardTitle className="text-lg">Quick Actions</CardTitle>
337
- </CardHeader>
338
- <CardContent>
339
- <div className="flex flex-wrap gap-3">
340
- <Button asChild>
341
- <Link href="/specs">
342
- <List className="h-4 w-4 mr-2" />
343
- View All Specs
344
- </Link>
345
- </Button>
346
- <Button variant="outline" asChild>
347
- <Link href="/specs?view=board">
348
- <LayoutGrid className="h-4 w-4 mr-2" />
349
- Board View
350
- </Link>
351
- </Button>
352
- <Button variant="outline" asChild>
353
- <Link href="/stats">
354
- <TrendingUp className="h-4 w-4 mr-2" />
355
- View Stats
356
- </Link>
357
- </Button>
358
- </div>
359
- </CardContent>
360
- </Card>
361
- </div>
362
- </div>
363
- );
364
- }
@@ -1,43 +0,0 @@
1
- 'use client';
2
-
3
- import { useEffect } from 'react';
4
- import { Button } from '@/components/ui/button';
5
-
6
- export default function Error({
7
- error,
8
- reset,
9
- }: {
10
- error: Error & { digest?: string };
11
- reset: () => void;
12
- }) {
13
- useEffect(() => {
14
- // Log the error to an error reporting service
15
- console.error('Application error:', error);
16
- }, [error]);
17
-
18
- return (
19
- <div className="min-h-screen bg-background flex items-center justify-center px-4">
20
- <div className="text-center space-y-6 max-w-md">
21
- <div className="space-y-2">
22
- <h1 className="text-6xl font-bold text-destructive">500</h1>
23
- <h2 className="text-2xl font-semibold">Something went wrong!</h2>
24
- <p className="text-muted-foreground">
25
- An unexpected error occurred. Please try again or contact support if the problem persists.
26
- </p>
27
- {error.digest && (
28
- <p className="text-xs text-muted-foreground font-mono bg-muted px-3 py-2 rounded">
29
- Error ID: {error.digest}
30
- </p>
31
- )}
32
- </div>
33
-
34
- <div className="flex gap-4 justify-center">
35
- <Button onClick={reset}>Try Again</Button>
36
- <Button variant="outline" onClick={() => window.location.href = '/'}>
37
- Go Home
38
- </Button>
39
- </div>
40
- </div>
41
- </div>
42
- );
43
- }