@leanspec/ui 0.2.5 → 0.2.6-dev.20251125010539

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 (695) 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/node_modules/.pnpm/source-map@0.8.0-beta.0/node_modules/source-map/package.json +95 -0
  17. package/.next/standalone/node_modules/.pnpm/tiktoken@1.0.22/node_modules/tiktoken/tiktoken_bg.wasm +0 -0
  18. package/.next/standalone/packages/ui/.next/BUILD_ID +1 -1
  19. package/.next/standalone/packages/ui/.next/app-path-routes-manifest.json +13 -1
  20. package/.next/standalone/packages/ui/.next/build-manifest.json +6 -6
  21. package/.next/standalone/packages/ui/.next/prerender-manifest.json +6 -6
  22. package/.next/standalone/packages/ui/.next/required-server-files.json +4 -4
  23. package/.next/standalone/packages/ui/.next/routes-manifest.json +96 -3
  24. package/.next/standalone/packages/ui/.next/server/app/_global-error/page/build-manifest.json +4 -4
  25. package/.next/standalone/packages/ui/.next/server/app/_global-error/page.js +1 -1
  26. package/.next/standalone/packages/ui/.next/server/app/_global-error/page.js.nft.json +1 -1
  27. package/.next/standalone/packages/ui/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  28. package/.next/standalone/packages/ui/.next/server/app/_global-error.html +2 -2
  29. package/.next/standalone/packages/ui/.next/server/app/_global-error.rsc +1 -1
  30. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  31. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  32. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  33. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  34. package/.next/standalone/packages/ui/.next/server/app/_not-found/page/build-manifest.json +4 -4
  35. package/.next/standalone/packages/ui/.next/server/app/_not-found/page.js +3 -3
  36. package/.next/standalone/packages/ui/.next/server/app/_not-found/page.js.nft.json +1 -1
  37. package/.next/standalone/packages/ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  38. package/.next/standalone/packages/ui/.next/server/app/_not-found.html +2 -2
  39. package/.next/standalone/packages/ui/.next/server/app/_not-found.rsc +21 -20
  40. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_full.segment.rsc +21 -20
  41. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_index.segment.rsc +26 -25
  42. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
  43. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  44. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_tree.segment.rsc +6 -6
  45. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/[id]/route/app-paths-manifest.json +3 -0
  46. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/[id]/route/build-manifest.json +11 -0
  47. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/[id]/route.js +6 -0
  48. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/[id]/route.js.nft.json +1 -0
  49. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/[id]/route_client-reference-manifest.js +2 -0
  50. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/discover/route/app-paths-manifest.json +3 -0
  51. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/discover/route/build-manifest.json +11 -0
  52. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/discover/route/server-reference-manifest.json +4 -0
  53. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/discover/route.js +6 -0
  54. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/discover/route.js.map +5 -0
  55. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/discover/route.js.nft.json +1 -0
  56. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/discover/route_client-reference-manifest.js +2 -0
  57. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route/app-paths-manifest.json +3 -0
  58. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route/build-manifest.json +11 -0
  59. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route/server-reference-manifest.json +4 -0
  60. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route.js +6 -0
  61. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route.js.map +5 -0
  62. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route.js.nft.json +1 -0
  63. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route_client-reference-manifest.js +2 -0
  64. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/route/app-paths-manifest.json +3 -0
  65. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/route/build-manifest.json +11 -0
  66. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/route/server-reference-manifest.json +4 -0
  67. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/route.js +6 -0
  68. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/route.js.map +5 -0
  69. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/route.js.nft.json +1 -0
  70. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/route_client-reference-manifest.js +2 -0
  71. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route/app-paths-manifest.json +3 -0
  72. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route/build-manifest.json +11 -0
  73. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route/server-reference-manifest.json +4 -0
  74. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route.js +8 -0
  75. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route.js.map +5 -0
  76. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route.js.nft.json +1 -0
  77. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route_client-reference-manifest.js +2 -0
  78. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route/app-paths-manifest.json +3 -0
  79. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route/build-manifest.json +11 -0
  80. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route/server-reference-manifest.json +4 -0
  81. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route.js +9 -0
  82. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route.js.map +5 -0
  83. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route.js.nft.json +1 -0
  84. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route_client-reference-manifest.js +2 -0
  85. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route/app-paths-manifest.json +3 -0
  86. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route/build-manifest.json +11 -0
  87. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route/server-reference-manifest.json +4 -0
  88. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route.js +8 -0
  89. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route.js.map +5 -0
  90. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route.js.nft.json +1 -0
  91. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route_client-reference-manifest.js +2 -0
  92. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/route.js +4 -2
  93. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/route.js.nft.json +1 -1
  94. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route/app-paths-manifest.json +3 -0
  95. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route/build-manifest.json +11 -0
  96. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route/server-reference-manifest.json +4 -0
  97. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route.js +8 -0
  98. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route.js.map +5 -0
  99. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route.js.nft.json +1 -0
  100. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route_client-reference-manifest.js +2 -0
  101. package/.next/standalone/packages/ui/.next/server/app/api/projects/route.js +3 -2
  102. package/.next/standalone/packages/ui/.next/server/app/api/projects/route.js.nft.json +1 -1
  103. package/.next/standalone/packages/ui/.next/server/app/api/revalidate/route.js +4 -2
  104. package/.next/standalone/packages/ui/.next/server/app/api/revalidate/route.js.nft.json +1 -1
  105. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/dependency-graph/route.js +4 -2
  106. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/dependency-graph/route.js.nft.json +1 -1
  107. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/route.js +4 -2
  108. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/route.js.nft.json +1 -1
  109. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route/app-paths-manifest.json +3 -0
  110. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route/build-manifest.json +11 -0
  111. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route/server-reference-manifest.json +4 -0
  112. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route.js +8 -0
  113. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route.js.map +5 -0
  114. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route.js.nft.json +1 -0
  115. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route_client-reference-manifest.js +2 -0
  116. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/subspecs/[file]/route.js +4 -2
  117. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/subspecs/[file]/route.js.nft.json +1 -1
  118. package/.next/standalone/packages/ui/.next/server/app/api/stats/route.js +4 -2
  119. package/.next/standalone/packages/ui/.next/server/app/api/stats/route.js.nft.json +1 -1
  120. package/.next/standalone/packages/ui/.next/server/app/page/build-manifest.json +4 -4
  121. package/.next/standalone/packages/ui/.next/server/app/page.js +3 -3
  122. package/.next/standalone/packages/ui/.next/server/app/page.js.nft.json +1 -1
  123. package/.next/standalone/packages/ui/.next/server/app/page_client-reference-manifest.js +1 -1
  124. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page/app-paths-manifest.json +3 -0
  125. package/.next/standalone/packages/ui/.next/server/app/{board → projects/[projectId]}/page/build-manifest.json +4 -4
  126. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page/server-reference-manifest.json +4 -0
  127. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page.js +21 -0
  128. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page.js.map +5 -0
  129. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page.js.nft.json +1 -0
  130. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page_client-reference-manifest.js +2 -0
  131. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page/app-paths-manifest.json +3 -0
  132. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page/build-manifest.json +18 -0
  133. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page/next-font-manifest.json +6 -0
  134. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page/react-loadable-manifest.json +1 -0
  135. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page/server-reference-manifest.json +4 -0
  136. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page.js +21 -0
  137. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page.js.map +5 -0
  138. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page.js.nft.json +1 -0
  139. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page_client-reference-manifest.js +2 -0
  140. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page/app-paths-manifest.json +3 -0
  141. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page/build-manifest.json +18 -0
  142. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page/next-font-manifest.json +6 -0
  143. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page/react-loadable-manifest.json +1 -0
  144. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page/server-reference-manifest.json +4 -0
  145. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page.js +20 -0
  146. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page.js.map +5 -0
  147. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page.js.nft.json +1 -0
  148. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page_client-reference-manifest.js +2 -0
  149. package/.next/standalone/packages/ui/.next/server/app/projects/page/app-paths-manifest.json +3 -0
  150. package/.next/standalone/packages/ui/.next/server/app/projects/page/build-manifest.json +18 -0
  151. package/.next/standalone/packages/ui/.next/server/app/projects/page/next-font-manifest.json +6 -0
  152. package/.next/standalone/packages/ui/.next/server/app/projects/page/react-loadable-manifest.json +1 -0
  153. package/.next/standalone/packages/ui/.next/server/app/projects/page/server-reference-manifest.json +4 -0
  154. package/.next/standalone/packages/ui/.next/server/app/{board → projects}/page.js +9 -10
  155. package/.next/standalone/packages/ui/.next/server/app/projects/page.js.map +5 -0
  156. package/.next/standalone/packages/ui/.next/server/app/projects/page.js.nft.json +1 -0
  157. package/.next/standalone/packages/ui/.next/server/app/projects/page_client-reference-manifest.js +2 -0
  158. package/.next/standalone/packages/ui/.next/server/app/projects.html +2 -0
  159. package/.next/standalone/packages/ui/.next/server/app/{board.meta → projects.meta} +3 -3
  160. package/.next/standalone/packages/ui/.next/server/app/projects.rsc +34 -0
  161. package/.next/standalone/packages/ui/.next/server/app/projects.segments/_full.segment.rsc +34 -0
  162. package/.next/standalone/packages/ui/.next/server/app/projects.segments/_index.segment.rsc +27 -0
  163. package/.next/standalone/packages/ui/.next/server/app/{board.segments → projects.segments}/_tree.segment.rsc +3 -3
  164. package/.next/standalone/packages/ui/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +9 -0
  165. package/.next/standalone/packages/ui/.next/server/app/projects.segments/projects.segment.rsc +4 -0
  166. package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page/build-manifest.json +4 -4
  167. package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page.js +5 -5
  168. package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page.js.nft.json +1 -1
  169. package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page_client-reference-manifest.js +1 -1
  170. package/.next/standalone/packages/ui/.next/server/app/specs/page/build-manifest.json +4 -4
  171. package/.next/standalone/packages/ui/.next/server/app/specs/page.js +3 -3
  172. package/.next/standalone/packages/ui/.next/server/app/specs/page.js.nft.json +1 -1
  173. package/.next/standalone/packages/ui/.next/server/app/specs/page_client-reference-manifest.js +1 -1
  174. package/.next/standalone/packages/ui/.next/server/app/stats/page/build-manifest.json +4 -4
  175. package/.next/standalone/packages/ui/.next/server/app/stats/page.js +3 -3
  176. package/.next/standalone/packages/ui/.next/server/app/stats/page.js.nft.json +1 -1
  177. package/.next/standalone/packages/ui/.next/server/app/stats/page_client-reference-manifest.js +1 -1
  178. package/.next/standalone/packages/ui/.next/server/app-paths-manifest.json +13 -1
  179. package/.next/standalone/packages/ui/.next/server/chunks/6681a__next-internal_server_app_api_projects_[id]_specs_[spec]_route_actions_d018d9e0.js +3 -0
  180. package/.next/standalone/packages/ui/.next/server/chunks/730ea_ui__next-internal_server_app_api_local-projects_[id]_route_actions_664abe9c.js +3 -0
  181. package/.next/standalone/packages/ui/.next/server/chunks/730ea_ui__next-internal_server_app_api_local-projects_discover_route_actions_e6ec3fa7.js +3 -0
  182. package/.next/standalone/packages/ui/.next/server/chunks/730ea_ui__next-internal_server_app_api_projects_[id]_stats_route_actions_a0bb04a8.js +3 -0
  183. package/.next/standalone/packages/ui/.next/server/chunks/730ea_ui__next-internal_server_app_api_specs_[id]_status_route_actions_5d700407.js +3 -0
  184. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0fbfea15._.js +3 -0
  185. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__126dea7b._.js +3 -0
  186. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__1f037512._.js +3 -0
  187. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__3559376c._.js +21 -0
  188. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__548e27d4._.js +3 -0
  189. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__65667b70._.js +3 -0
  190. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__675a763e._.js +3 -0
  191. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__803d07f0._.js +3 -0
  192. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__8075fe29._.js +3 -0
  193. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__8233e09b._.js +3 -0
  194. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__84cdc14a._.js +3 -0
  195. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__9ce722b4._.js +3 -0
  196. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__a2d7cbed._.js +3 -0
  197. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__aa677b0d._.js +3 -0
  198. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__ac744182._.js +3 -0
  199. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__bb9fca84._.js +4 -0
  200. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__bdc3963a._.js +3 -0
  201. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__f5c6d6b8._.js +3 -0
  202. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__fb91986f._.js +3 -0
  203. package/.next/standalone/packages/ui/.next/server/chunks/e0876_tiktoken_3efea2dc._.js +3 -0
  204. package/.next/standalone/packages/ui/.next/server/chunks/f825c_server_app_api_local-projects_list-directory_route_actions_d620ec1a.js +3 -0
  205. package/.next/standalone/packages/ui/.next/server/chunks/f825c_server_app_api_projects_[id]_specs_[spec]_status_route_actions_e9f1bdc5.js +3 -0
  206. package/.next/standalone/packages/ui/.next/server/chunks/node_modules__pnpm_731b55aa._.js +3 -0
  207. package/.next/standalone/packages/ui/.next/server/chunks/packages_ui__next-internal_server_app_api_local-projects_route_actions_9142d5ad.js +3 -0
  208. package/.next/standalone/packages/ui/.next/server/chunks/packages_ui__next-internal_server_app_api_projects_[id]_route_actions_bff49675.js +3 -0
  209. package/.next/standalone/packages/ui/.next/server/chunks/packages_ui_src_lib_db_index_ts_556307fa._.js +64 -5
  210. package/.next/standalone/packages/ui/.next/server/chunks/packages_ui_src_lib_specs_sources_database-source_ts_0bd881ee._.js +3 -0
  211. package/.next/standalone/packages/ui/.next/server/chunks/packages_ui_src_lib_specs_sources_database-source_ts_baa0160d._.js +3 -0
  212. package/.next/standalone/packages/ui/.next/server/chunks/ssr/38a22_sonner_dist_index_mjs_207730fe._.js +3 -0
  213. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{_a5b58449._.js → 6e9bd_next_dist_df5dcbe9._.js} +2 -2
  214. package/.next/standalone/packages/ui/.next/server/chunks/ssr/730ea_ui__next-internal_server_app_projects_[projectId]_specs_page_actions_82e32fe4.js +3 -0
  215. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__01bfc8ff._.js +3 -0
  216. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__1d0c2012._.js +1 -1
  217. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__4ec37765._.js +3 -0
  218. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__1af33d49._.js → [root-of-the-server]__50122e7e._.js} +2 -2
  219. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__5382b397._.js +3 -0
  220. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__73f60f12._.js +7 -0
  221. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__7f55abaa._.js +1 -1
  222. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__88a691ee._.js +3 -0
  223. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__a7ae8552._.js +7 -0
  224. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__bdbbba01._.js +3 -0
  225. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__c592f5d1._.js +3 -0
  226. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__cc589a54._.js +3 -0
  227. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__ec5b96a5._.js +3 -0
  228. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__e5891e5a._.js → [root-of-the-server]__fd80e4dd._.js} +2 -2
  229. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_000dd317._.js +1 -1
  230. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_196b5a83._.js +3 -0
  231. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_39562b2a._.js +4 -0
  232. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_3b617676._.js +1 -1
  233. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_4129cc0f._.js +3 -0
  234. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_6174313a._.js +3 -0
  235. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_6e4dd8b6._.js +3 -0
  236. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_85effc18._.js +4 -0
  237. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_ad8c1e99._.js +1 -1
  238. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_bae6d2b8._.js +4 -0
  239. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_c2f54661._.js +5 -0
  240. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_e1889307._.js +3 -0
  241. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{_4f2c4868._.js → _fdd7780b._.js} +3 -3
  242. package/.next/standalone/packages/ui/.next/server/chunks/ssr/f825c_server_app_projects_[projectId]_specs_[specId]_page_actions_22d9c35e.js +3 -0
  243. package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_af9d3830._.js +3 -0
  244. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui__next-internal_server_app_projects_[projectId]_page_actions_f2986585.js +3 -0
  245. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui__next-internal_server_app_projects_page_actions_715940ea.js +3 -0
  246. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_loading_tsx_9304a706._.js +3 -0
  247. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_projects_[projectId]_be242d6c._.js +3 -0
  248. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_projects_[projectId]_project-context-syncer_tsx_7954ea3b._.js +3 -0
  249. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_projects_page_tsx_6e166c8e._.js +3 -0
  250. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_specs_specs-client_tsx_0bb8f8f8._.js +3 -0
  251. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_components_specs-nav-sidebar_tsx_8237ed13._.js +3 -0
  252. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_components_ui_select_tsx_7e21d40f._.js +3 -0
  253. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_lib_specs_sources_database-source_ts_f7186c2a._.js +60 -1
  254. package/.next/standalone/packages/ui/.next/server/middleware-build-manifest.js +4 -4
  255. package/.next/standalone/packages/ui/.next/server/pages/404.html +2 -2
  256. package/.next/standalone/packages/ui/.next/server/pages/500.html +2 -2
  257. package/.next/standalone/packages/ui/.next/server/server-reference-manifest.js +1 -1
  258. package/.next/standalone/packages/ui/.next/server/server-reference-manifest.json +1 -1
  259. package/.next/standalone/packages/ui/.next/static/chunks/07f48b316e895080.js +1 -0
  260. package/.next/standalone/packages/ui/.next/static/chunks/0a7be410b438418a.js +1 -0
  261. package/.next/standalone/packages/ui/.next/static/chunks/1089ca88f6bef846.js +1 -0
  262. package/.next/standalone/packages/ui/.next/static/chunks/17471c87082c392c.js +5 -0
  263. package/.next/standalone/packages/ui/.next/static/chunks/220ba5cb8fe4dd69.js +1 -0
  264. package/.next/standalone/packages/ui/.next/static/chunks/35ccd3286e538bd2.js +1 -0
  265. package/.next/standalone/packages/ui/.next/static/chunks/571033caca823138.js +1 -0
  266. package/.next/standalone/packages/ui/.next/static/chunks/5a6fc30cd64085b4.css +1 -0
  267. package/.next/standalone/packages/ui/.next/static/chunks/843e1dfdc28e1385.js +1 -0
  268. package/.next/standalone/packages/ui/.next/static/chunks/9dad7fd31627df80.js +1 -0
  269. package/.next/standalone/packages/ui/.next/static/chunks/{f2151fb88f8fc70a.js → a055d4b2866ff8d4.js} +1 -1
  270. package/.next/standalone/packages/ui/.next/static/chunks/afb7c5a4255f4081.js +3 -0
  271. package/.next/standalone/packages/ui/.next/static/chunks/{c557ac675be79771.js → b760a3a9c2c8be28.js} +1 -1
  272. package/.next/standalone/packages/ui/.next/static/chunks/dcdd95180149fa10.js +1 -0
  273. package/.next/standalone/packages/ui/.next/static/chunks/f9db24028d8c058e.js +1 -0
  274. package/.next/standalone/packages/ui/.next/static/chunks/fb640f50455ba34f.js +1 -0
  275. package/.next/standalone/packages/ui/.next/static/chunks/{turbopack-7450632b40b2e378.js → turbopack-b9690cacbf9fe48c.js} +1 -1
  276. package/.next/standalone/packages/ui/bin/ui.js +17 -7
  277. package/.next/standalone/packages/ui/package.json +4 -2
  278. package/.next/standalone/packages/ui/server.js +1 -1
  279. package/.next/standalone/packages/ui/src/app/api/local-projects/[id]/route.ts +117 -0
  280. package/.next/standalone/packages/ui/src/app/api/local-projects/discover/route.ts +41 -0
  281. package/.next/standalone/packages/ui/src/app/api/local-projects/list-directory/route.ts +38 -0
  282. package/.next/standalone/packages/ui/src/app/api/local-projects/route.ts +63 -0
  283. package/.next/standalone/packages/ui/src/app/api/projects/[id]/route.ts +97 -0
  284. package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/[spec]/route.ts +38 -0
  285. package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/[spec]/status/route.ts +97 -0
  286. package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/route.ts +7 -0
  287. package/.next/standalone/packages/ui/{dist/standalone/packages/web/src/app/api → src/app/api/projects/[id]}/stats/route.ts +7 -7
  288. package/.next/standalone/packages/ui/src/app/api/projects/route.ts +48 -1
  289. package/.next/standalone/packages/ui/src/app/api/specs/[id]/status/route.ts +122 -0
  290. package/.next/standalone/packages/ui/src/app/dashboard-client.tsx +67 -6
  291. package/.next/standalone/packages/ui/src/app/globals.css +37 -0
  292. package/.next/standalone/packages/ui/src/app/layout.tsx +18 -14
  293. package/.next/standalone/packages/ui/src/app/not-found.tsx +1 -1
  294. package/.next/standalone/packages/ui/src/app/projects/[projectId]/layout.tsx +18 -0
  295. package/.next/standalone/packages/ui/src/app/projects/[projectId]/page.tsx +10 -0
  296. package/.next/standalone/packages/ui/src/app/projects/[projectId]/project-context-syncer.tsx +16 -0
  297. package/.next/standalone/packages/ui/{dist/standalone/packages/web/src/app/specs/[id] → src/app/projects/[projectId]/specs/[specId]}/page.tsx +7 -16
  298. package/.next/standalone/packages/ui/src/app/projects/[projectId]/specs/page.tsx +20 -0
  299. package/.next/standalone/packages/ui/src/app/projects/page.tsx +156 -0
  300. package/.next/standalone/packages/ui/src/app/specs/page.tsx +2 -2
  301. package/.next/standalone/packages/ui/src/app/specs/specs-client.tsx +495 -223
  302. package/.next/standalone/packages/ui/src/components/create-project-dialog.tsx +139 -0
  303. package/.next/standalone/packages/ui/src/components/directory-picker.tsx +191 -0
  304. package/.next/standalone/packages/ui/src/components/main-sidebar.tsx +4 -0
  305. package/.next/standalone/packages/ui/src/components/project-switcher.tsx +139 -0
  306. package/.next/standalone/packages/ui/src/components/spec-detail-client.tsx +71 -27
  307. package/.next/standalone/packages/ui/src/components/table-of-contents.tsx +56 -37
  308. package/.next/standalone/packages/ui/src/components/ui/dropdown-menu.tsx +200 -0
  309. package/.next/standalone/packages/ui/src/components/ui/popover.tsx +31 -0
  310. package/.next/standalone/packages/ui/src/contexts/project-context.tsx +229 -0
  311. package/.next/standalone/packages/ui/src/lib/db/index.ts +100 -0
  312. package/.next/standalone/packages/ui/src/lib/db/service-queries.ts +23 -0
  313. package/.next/standalone/packages/ui/src/lib/projects/index.ts +7 -0
  314. package/.next/standalone/packages/ui/src/lib/projects/registry.ts +467 -0
  315. package/.next/standalone/packages/ui/src/lib/projects/types.ts +37 -0
  316. package/.next/standalone/packages/ui/src/lib/specs/service.ts +13 -1
  317. package/.next/standalone/packages/ui/src/lib/specs/sources/filesystem-source.ts +46 -6
  318. package/.next/standalone/packages/ui/src/lib/specs/sources/multi-project-source.ts +258 -0
  319. package/.next/standalone/packages/ui/tsconfig.json +2 -1
  320. package/.next/standalone/packages/ui/tsconfig.tsbuildinfo +1 -1
  321. package/.next/standalone/packages/ui/vitest.config.ts +1 -0
  322. package/.next/static/chunks/07f48b316e895080.js +1 -0
  323. package/.next/static/chunks/0a7be410b438418a.js +1 -0
  324. package/.next/static/chunks/1089ca88f6bef846.js +1 -0
  325. package/.next/static/chunks/17471c87082c392c.js +5 -0
  326. package/.next/static/chunks/220ba5cb8fe4dd69.js +1 -0
  327. package/.next/static/chunks/35ccd3286e538bd2.js +1 -0
  328. package/.next/static/chunks/571033caca823138.js +1 -0
  329. package/.next/static/chunks/5a6fc30cd64085b4.css +1 -0
  330. package/.next/static/chunks/843e1dfdc28e1385.js +1 -0
  331. package/.next/static/chunks/9dad7fd31627df80.js +1 -0
  332. package/.next/static/chunks/{f2151fb88f8fc70a.js → a055d4b2866ff8d4.js} +1 -1
  333. package/.next/static/chunks/afb7c5a4255f4081.js +3 -0
  334. package/.next/static/chunks/{c557ac675be79771.js → b760a3a9c2c8be28.js} +1 -1
  335. package/.next/static/chunks/dcdd95180149fa10.js +1 -0
  336. package/.next/static/chunks/f9db24028d8c058e.js +1 -0
  337. package/.next/static/chunks/fb640f50455ba34f.js +1 -0
  338. package/.next/static/chunks/{turbopack-7450632b40b2e378.js → turbopack-b9690cacbf9fe48c.js} +1 -1
  339. package/bin/ui.js +17 -7
  340. package/package.json +4 -2
  341. 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
  342. package/.next/standalone/packages/ui/.next/server/app/board/page/app-paths-manifest.json +0 -3
  343. package/.next/standalone/packages/ui/.next/server/app/board/page.js.nft.json +0 -1
  344. package/.next/standalone/packages/ui/.next/server/app/board/page_client-reference-manifest.js +0 -2
  345. package/.next/standalone/packages/ui/.next/server/app/board.html +0 -1
  346. package/.next/standalone/packages/ui/.next/server/app/board.rsc +0 -41
  347. package/.next/standalone/packages/ui/.next/server/app/board.segments/_full.segment.rsc +0 -41
  348. package/.next/standalone/packages/ui/.next/server/app/board.segments/_index.segment.rsc +0 -26
  349. package/.next/standalone/packages/ui/.next/server/app/board.segments/board/__PAGE__.segment.rsc +0 -9
  350. package/.next/standalone/packages/ui/.next/server/app/board.segments/board.segment.rsc +0 -8
  351. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__003ee184._.js +0 -3
  352. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__21119265._.js +0 -3
  353. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__482b093a._.js +0 -21
  354. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__6ec5cafb._.js +0 -3
  355. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__7acaa6ec._.js +0 -3
  356. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__a2c55ffb._.js +0 -3
  357. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__d169fe70._.js +0 -3
  358. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__f4ea2112._.js +0 -3
  359. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__3fffdda5._.js +0 -3
  360. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__4b343655._.js +0 -3
  361. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__68015eee._.js +0 -3
  362. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__b161f033._.js +0 -7
  363. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__b50fa24c._.js +0 -7
  364. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__c65aedd0._.js +0 -3
  365. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__eefaabd3._.js +0 -3
  366. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_64a39e38._.js +0 -3
  367. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_66209e84._.js +0 -3
  368. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_a527620e._.js +0 -3
  369. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_d7e4bd50._.js +0 -5
  370. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_f8b2190a._.js +0 -3
  371. package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_b8ff10b9._.js +0 -3
  372. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui__next-internal_server_app_board_page_actions_c5a3cb3c.js +0 -3
  373. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_board_loading_tsx_03dfd70d._.js +0 -3
  374. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_board_page_tsx_9415dc46._.js +0 -3
  375. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_components_ui_input_tsx_190a7701._.js +0 -3
  376. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_d725c10c._.js +0 -3
  377. package/.next/standalone/packages/ui/.next/static/chunks/107411d1a2f4b31d.js +0 -1
  378. package/.next/standalone/packages/ui/.next/static/chunks/17ac52d909def83e.js +0 -1
  379. package/.next/standalone/packages/ui/.next/static/chunks/212881511f73fc12.js +0 -5
  380. package/.next/standalone/packages/ui/.next/static/chunks/5057c3e1e7e13ca3.js +0 -1
  381. package/.next/standalone/packages/ui/.next/static/chunks/5d646f493d4c6928.js +0 -1
  382. package/.next/standalone/packages/ui/.next/static/chunks/88f695d32910a4ac.js +0 -1
  383. package/.next/standalone/packages/ui/.next/static/chunks/aa47b212786d8695.js +0 -1
  384. package/.next/standalone/packages/ui/.next/static/chunks/ae04dcd433be6dab.js +0 -1
  385. package/.next/standalone/packages/ui/.next/static/chunks/c210559fdfe60fef.js +0 -1
  386. package/.next/standalone/packages/ui/.next/static/chunks/df1731c03abf1aee.css +0 -1
  387. package/.next/standalone/packages/ui/.next/static/chunks/e237e00fd3a84178.js +0 -3
  388. package/.next/standalone/packages/ui/dist/standalone/packages/web/README.md +0 -196
  389. package/.next/standalone/packages/ui/dist/standalone/packages/web/components.json +0 -20
  390. package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/0000_reflective_thena.sql +0 -59
  391. package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/0001_fresh_carmella_unuscione.sql +0 -1
  392. package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/meta/0000_snapshot.json +0 -427
  393. package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/meta/0001_snapshot.json +0 -436
  394. package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/meta/_journal.json +0 -20
  395. package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle.config.ts +0 -10
  396. package/.next/standalone/packages/ui/dist/standalone/packages/web/eslint.config.mjs +0 -18
  397. package/.next/standalone/packages/ui/dist/standalone/packages/web/leanspec.db +0 -0
  398. package/.next/standalone/packages/ui/dist/standalone/packages/web/next.config.ts +0 -7
  399. package/.next/standalone/packages/ui/dist/standalone/packages/web/package.json +0 -83
  400. package/.next/standalone/packages/ui/dist/standalone/packages/web/postcss.config.mjs +0 -8
  401. package/.next/standalone/packages/ui/dist/standalone/packages/web/public/f864aa7e7061c0600e35cf3d879b27cf.txt +0 -1
  402. package/.next/standalone/packages/ui/dist/standalone/packages/web/public/favicon.ico +0 -0
  403. package/.next/standalone/packages/ui/dist/standalone/packages/web/public/file.svg +0 -1
  404. package/.next/standalone/packages/ui/dist/standalone/packages/web/public/github-mark-white.svg +0 -1
  405. package/.next/standalone/packages/ui/dist/standalone/packages/web/public/github-mark.svg +0 -1
  406. package/.next/standalone/packages/ui/dist/standalone/packages/web/public/globe.svg +0 -1
  407. package/.next/standalone/packages/ui/dist/standalone/packages/web/public/icon.svg +0 -7
  408. package/.next/standalone/packages/ui/dist/standalone/packages/web/public/logo-dark-bg.svg +0 -17
  409. package/.next/standalone/packages/ui/dist/standalone/packages/web/public/logo-with-bg.svg +0 -17
  410. package/.next/standalone/packages/ui/dist/standalone/packages/web/public/logo.svg +0 -17
  411. package/.next/standalone/packages/ui/dist/standalone/packages/web/public/next.svg +0 -1
  412. package/.next/standalone/packages/ui/dist/standalone/packages/web/public/vercel.svg +0 -1
  413. package/.next/standalone/packages/ui/dist/standalone/packages/web/public/window.svg +0 -1
  414. package/.next/standalone/packages/ui/dist/standalone/packages/web/server.js +0 -44
  415. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/projects/[id]/specs/route.ts +0 -23
  416. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/projects/route.ts +0 -19
  417. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/revalidate/route.ts +0 -63
  418. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/dependency-graph/route.test.ts +0 -51
  419. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/dependency-graph/route.ts +0 -171
  420. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/route.ts +0 -36
  421. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/subspecs/[file]/route.ts +0 -46
  422. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/board/board-client.tsx +0 -162
  423. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/board/loading.tsx +0 -43
  424. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/board/page.tsx +0 -18
  425. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/dashboard-client.tsx +0 -364
  426. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/error.tsx +0 -43
  427. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/globals.css +0 -531
  428. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/home-client.tsx +0 -277
  429. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/layout.tsx +0 -70
  430. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/loading.tsx +0 -87
  431. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/not-found.tsx +0 -27
  432. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/page.tsx +0 -18
  433. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/specs/[id]/loading.tsx +0 -5
  434. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/specs/page.tsx +0 -18
  435. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/specs/specs-client.tsx +0 -425
  436. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/stats/page.tsx +0 -18
  437. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/stats/stats-client.tsx +0 -283
  438. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/back-to-top.tsx +0 -46
  439. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/empty-state.tsx +0 -52
  440. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/main-sidebar.tsx +0 -175
  441. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/markdown-link.test.ts +0 -96
  442. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/markdown-link.tsx +0 -95
  443. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/navigation.tsx +0 -210
  444. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/priority-badge.tsx +0 -53
  445. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/quick-search.tsx +0 -180
  446. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/skeletons.tsx +0 -119
  447. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-dependency-graph.tsx +0 -369
  448. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-detail-client.tsx +0 -372
  449. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-detail-loading-shell.tsx +0 -42
  450. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-detail-wrapper.tsx +0 -70
  451. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-metadata.tsx +0 -136
  452. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-sidebar.tsx +0 -127
  453. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-timeline.tsx +0 -186
  454. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/specs-nav-sidebar.tsx +0 -561
  455. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/status-badge.tsx +0 -53
  456. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/sub-spec-tabs.tsx +0 -143
  457. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/table-of-contents.tsx +0 -130
  458. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/theme-provider.tsx +0 -11
  459. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/theme-toggle.tsx +0 -37
  460. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/avatar.tsx +0 -50
  461. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/badge.tsx +0 -36
  462. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/breadcrumb.tsx +0 -110
  463. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/button.tsx +0 -57
  464. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/card.tsx +0 -76
  465. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/command.tsx +0 -153
  466. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/dialog.tsx +0 -122
  467. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/input.tsx +0 -24
  468. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/select.tsx +0 -159
  469. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/separator.tsx +0 -31
  470. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/skeleton.tsx +0 -15
  471. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/tabs.tsx +0 -55
  472. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/toast.tsx +0 -30
  473. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/tooltip.tsx +0 -32
  474. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/date-utils.ts +0 -76
  475. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/index.ts +0 -42
  476. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/migrate.ts +0 -18
  477. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/queries.ts +0 -114
  478. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/schema.ts +0 -123
  479. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/seed.ts +0 -156
  480. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/service-queries.ts +0 -216
  481. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/dependency-graph.ts +0 -105
  482. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/service.ts +0 -120
  483. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/sources/database-source.ts +0 -94
  484. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/sources/filesystem-source.ts +0 -249
  485. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/types.ts +0 -55
  486. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/stores/specs-sidebar-store.ts +0 -152
  487. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/sub-specs.ts +0 -171
  488. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/utils.ts +0 -17
  489. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/types/specs.ts +0 -18
  490. package/.next/standalone/packages/ui/dist/standalone/packages/web/tailwind.config.ts +0 -58
  491. package/.next/standalone/packages/ui/dist/standalone/packages/web/tsconfig.json +0 -34
  492. package/.next/standalone/packages/ui/dist/standalone/packages/web/tsconfig.tsbuildinfo +0 -1
  493. package/.next/standalone/packages/ui/dist/standalone/packages/web/vitest.config.ts +0 -14
  494. package/.next/standalone/packages/ui/dist/standalone/specs/014-complete-custom-frontmatter/README.md +0 -175
  495. package/.next/standalone/packages/ui/dist/standalone/specs/016-github-action/README.md +0 -317
  496. package/.next/standalone/packages/ui/dist/standalone/specs/017-vscode-extension/README.md +0 -261
  497. package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/CLI-DESIGN.md +0 -380
  498. package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/CONFIGURATION-EXAMPLES.md +0 -230
  499. package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/CONFIGURATION.md +0 -285
  500. package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/IMPLEMENTATION.md +0 -358
  501. package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/README.md +0 -303
  502. package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/TESTING.md +0 -368
  503. package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/VALIDATION-RULES.md +0 -327
  504. package/.next/standalone/packages/ui/dist/standalone/specs/024-pattern-aware-list-grouping/README.md +0 -117
  505. package/.next/standalone/packages/ui/dist/standalone/specs/025-template-config-updates/README.md +0 -73
  506. package/.next/standalone/packages/ui/dist/standalone/specs/026-init-pattern-selection/README.md +0 -109
  507. package/.next/standalone/packages/ui/dist/standalone/specs/034-copilot-slash-commands/README.md +0 -107
  508. package/.next/standalone/packages/ui/dist/standalone/specs/035-live-specs-showcase/ARCHITECTURE.md +0 -244
  509. package/.next/standalone/packages/ui/dist/standalone/specs/035-live-specs-showcase/IMPLEMENTATION.md +0 -429
  510. package/.next/standalone/packages/ui/dist/standalone/specs/035-live-specs-showcase/README.md +0 -306
  511. package/.next/standalone/packages/ui/dist/standalone/specs/036-pm-integrations/README.md +0 -158
  512. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DEMO-AI-ASSISTED.md +0 -359
  513. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DEMO-FULL-LIFECYCLE.md +0 -86
  514. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DEMO-REAL-FEATURE.md +0 -437
  515. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DEMO-SCRIPT.md +0 -365
  516. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DOGFOODING-FINAL.md +0 -203
  517. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DOGFOODING-SESSION-2025-11-06.md +0 -174
  518. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DOGFOODING-SUMMARY.md +0 -156
  519. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/IMPLEMENTATION.md +0 -183
  520. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/MARKETING.md +0 -229
  521. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/NEXT-STEPS-DEMO.md +0 -243
  522. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/README.md +0 -217
  523. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/SESSION-2025-11-06.md +0 -166
  524. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/TESTING.md +0 -126
  525. package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/ACTUAL-IMPLEMENTATION.md +0 -108
  526. package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/DESIGN.md +0 -382
  527. package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/IMPLEMENTATION.md +0 -144
  528. package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/RATIONALE.md +0 -146
  529. package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/README.md +0 -208
  530. package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/TESTING.md +0 -182
  531. package/.next/standalone/packages/ui/dist/standalone/specs/047-git-backfill-timestamps/README.md +0 -314
  532. package/.next/standalone/packages/ui/dist/standalone/specs/048-spec-complexity-analysis/FINDINGS.md +0 -113
  533. package/.next/standalone/packages/ui/dist/standalone/specs/048-spec-complexity-analysis/GUIDELINES.md +0 -237
  534. package/.next/standalone/packages/ui/dist/standalone/specs/048-spec-complexity-analysis/README.md +0 -149
  535. package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/ANALYSIS-COMPARISONS.md +0 -175
  536. package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/ANALYSIS-CONSTRAINTS.md +0 -254
  537. package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/FIRST-PRINCIPLES.md +0 -376
  538. package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/OPERATIONALIZATION-ROADMAP.md +0 -240
  539. package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/OPERATIONALIZATION-TOOLS.md +0 -175
  540. package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/README.md +0 -374
  541. package/.next/standalone/packages/ui/dist/standalone/specs/051-docs-system-prompt-principles/README.md +0 -339
  542. package/.next/standalone/packages/ui/dist/standalone/specs/052-branding-assets/README.md +0 -128
  543. package/.next/standalone/packages/ui/dist/standalone/specs/053-spec-assets-philosophy/README.md +0 -97
  544. package/.next/standalone/packages/ui/dist/standalone/specs/054-validate-output-lint-style/DESIGN-DECISIONS.md +0 -93
  545. package/.next/standalone/packages/ui/dist/standalone/specs/054-validate-output-lint-style/OUTPUT-FORMAT-SPEC.md +0 -146
  546. package/.next/standalone/packages/ui/dist/standalone/specs/054-validate-output-lint-style/README.md +0 -175
  547. package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/ANALYSIS-PART1.md +0 -397
  548. package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/ANALYSIS-PART2.md +0 -342
  549. package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/ANALYSIS.md +0 -44
  550. package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/CHANGES.md +0 -150
  551. package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/CONCERNS-ANALYSIS.md +0 -351
  552. package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/DOCS-ALIGNMENT-ANALYSIS.md +0 -238
  553. package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/README.md +0 -280
  554. package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/REDESIGN-DRAFT.md +0 -372
  555. package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/REDESIGN-REFINED.md +0 -466
  556. package/.next/standalone/packages/ui/dist/standalone/specs/056-docs-site-accuracy-audit/AUDIT-RESULTS.md +0 -178
  557. package/.next/standalone/packages/ui/dist/standalone/specs/056-docs-site-accuracy-audit/README.md +0 -174
  558. package/.next/standalone/packages/ui/dist/standalone/specs/057-docs-validation-comprehensive/README.md +0 -295
  559. package/.next/standalone/packages/ui/dist/standalone/specs/057-docs-validation-comprehensive/VALIDATION-RESULTS.md +0 -487
  560. package/.next/standalone/packages/ui/dist/standalone/specs/058-docs-overview-polish/ANALYSIS.md +0 -241
  561. package/.next/standalone/packages/ui/dist/standalone/specs/058-docs-overview-polish/DESIGN.md +0 -279
  562. package/.next/standalone/packages/ui/dist/standalone/specs/058-docs-overview-polish/IMPLEMENTATION.md +0 -642
  563. package/.next/standalone/packages/ui/dist/standalone/specs/058-docs-overview-polish/NOTES.md +0 -125
  564. package/.next/standalone/packages/ui/dist/standalone/specs/058-docs-overview-polish/README.md +0 -286
  565. package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/ARCHITECTURE.md +0 -392
  566. package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/COMMANDS.md +0 -1002
  567. package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/CONTEXT-ENGINEERING.md +0 -411
  568. package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/IMPLEMENTATION.md +0 -812
  569. package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/README.md +0 -504
  570. package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/TESTING.md +0 -724
  571. package/.next/standalone/packages/ui/dist/standalone/specs/060-core-concepts-coherence/README.md +0 -125
  572. package/.next/standalone/packages/ui/dist/standalone/specs/061-ai-assisted-spec-writing/README.md +0 -299
  573. package/.next/standalone/packages/ui/dist/standalone/specs/062-docs-info-architecture-v2/IMPLEMENTATION-PLAN.md +0 -174
  574. package/.next/standalone/packages/ui/dist/standalone/specs/062-docs-info-architecture-v2/PAGE-SPECIFICATIONS.md +0 -265
  575. package/.next/standalone/packages/ui/dist/standalone/specs/062-docs-info-architecture-v2/PROBLEM-ANALYSIS.md +0 -36
  576. package/.next/standalone/packages/ui/dist/standalone/specs/062-docs-info-architecture-v2/README.md +0 -243
  577. package/.next/standalone/packages/ui/dist/standalone/specs/062-docs-info-architecture-v2/SOLUTION-DESIGN.md +0 -82
  578. package/.next/standalone/packages/ui/dist/standalone/specs/063-migration-from-existing-tools/DESIGN.md +0 -338
  579. package/.next/standalone/packages/ui/dist/standalone/specs/063-migration-from-existing-tools/EXAMPLES.md +0 -354
  580. package/.next/standalone/packages/ui/dist/standalone/specs/063-migration-from-existing-tools/IMPLEMENTATION.md +0 -189
  581. package/.next/standalone/packages/ui/dist/standalone/specs/063-migration-from-existing-tools/README.md +0 -119
  582. package/.next/standalone/packages/ui/dist/standalone/specs/064-docs-site-zh-translation/README.md +0 -170
  583. package/.next/standalone/packages/ui/dist/standalone/specs/065-v03-planning/README.md +0 -158
  584. package/.next/standalone/packages/ui/dist/standalone/specs/066-context-economy-thresholds-refinement/README.md +0 -842
  585. package/.next/standalone/packages/ui/dist/standalone/specs/067-monorepo-core-extraction/README.md +0 -358
  586. package/.next/standalone/packages/ui/dist/standalone/specs/068-live-specs-ux-enhancements/DESIGN.md +0 -444
  587. package/.next/standalone/packages/ui/dist/standalone/specs/068-live-specs-ux-enhancements/README.md +0 -357
  588. package/.next/standalone/packages/ui/dist/standalone/specs/069-token-counting-utils/README.md +0 -551
  589. package/.next/standalone/packages/ui/dist/standalone/specs/070-mcp-token-counting-tool/README.md +0 -372
  590. package/.next/standalone/packages/ui/dist/standalone/specs/071-simplified-token-validation/README.md +0 -489
  591. package/.next/standalone/packages/ui/dist/standalone/specs/072-ai-agent-first-use-workflow/README.md +0 -287
  592. package/.next/standalone/packages/ui/dist/standalone/specs/073-template-engine-agents-md/README.md +0 -323
  593. package/.next/standalone/packages/ui/dist/standalone/specs/074-content-at-creation/README.md +0 -136
  594. package/.next/standalone/packages/ui/dist/standalone/specs/075-intelligent-search-engine/README.md +0 -399
  595. package/.next/standalone/packages/ui/dist/standalone/specs/076-programmatic-spec-relationships/README.md +0 -301
  596. package/.next/standalone/packages/ui/dist/standalone/specs/077-archiving-strategy/README.md +0 -235
  597. package/.next/standalone/packages/ui/dist/standalone/specs/078-sub-spec-template-system/README.md +0 -303
  598. package/.next/standalone/packages/ui/dist/standalone/specs/079-cli-alphabetical-organization/README.md +0 -196
  599. package/.next/standalone/packages/ui/dist/standalone/specs/080-mcp-server-modular-architecture/README.md +0 -388
  600. package/.next/standalone/packages/ui/dist/standalone/specs/081-web-app-ux-redesign/README.md +0 -825
  601. package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/DATABASE.md +0 -111
  602. package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/DEPLOYMENT.md +0 -69
  603. package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/FILESYSTEM.md +0 -77
  604. package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/IMPLEMENTATION.md +0 -184
  605. package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/README.md +0 -501
  606. package/.next/standalone/packages/ui/dist/standalone/specs/083-web-navigation-performance/README.md +0 -490
  607. package/.next/standalone/packages/ui/dist/standalone/specs/084-sub-spec-visibility-in-tools/README.md +0 -389
  608. package/.next/standalone/packages/ui/dist/standalone/specs/085-cli-relationship-commands/README.md +0 -920
  609. package/.next/standalone/packages/ui/dist/standalone/specs/086-template-component-deduplication/README.md +0 -146
  610. package/.next/standalone/packages/ui/dist/standalone/specs/087-cli-ui-command/README.md +0 -421
  611. package/.next/standalone/packages/ui/dist/standalone/specs/088-core-concepts-terminology-only/README.md +0 -106
  612. package/.next/standalone/packages/ui/dist/standalone/specs/089-sdd-practical-tutorials/README.md +0 -126
  613. package/.next/standalone/packages/ui/dist/standalone/specs/090-leanspec-sdd-case-studies/README.md +0 -131
  614. package/.next/standalone/packages/ui/dist/standalone/specs/091-chinese-localization-strategy/README.md +0 -254
  615. package/.next/standalone/packages/ui/dist/standalone/specs/092-docs-site-submodule-migration/README.md +0 -152
  616. package/.next/standalone/packages/ui/dist/standalone/specs/093-spec-detail-ui-improvements/README.md +0 -65
  617. package/.next/standalone/packages/ui/dist/standalone/specs/094-ai-chatbot-web-integration/README.md +0 -332
  618. package/.next/standalone/packages/ui/dist/standalone/specs/095-pr-migration-verification/README.md +0 -339
  619. package/.next/standalone/packages/ui/dist/standalone/specs/096-docs-beginner-first-reorg/README.md +0 -399
  620. package/.next/standalone/packages/ui/dist/standalone/specs/097-dag-visualization-library/README.md +0 -525
  621. package/.next/standalone/packages/ui/dist/standalone/specs/098-github-multi-project-integration/README.md +0 -387
  622. package/.next/standalone/packages/ui/dist/standalone/specs/099-enhanced-dependency-commands-cli-mcp/README.md +0 -613
  623. package/.next/standalone/packages/ui/dist/standalone/specs/100-release-process-typecheck-failure/README.md +0 -266
  624. package/.next/standalone/packages/ui/dist/standalone/specs/101-sidebar-scroll-position-drift/README.md +0 -100
  625. package/.next/standalone/packages/ui/dist/standalone/specs/102-mcp-wrapper-package/README.md +0 -172
  626. package/.next/standalone/packages/ui/dist/standalone/specs/archived/001-typescript-cli-migration/README.md +0 -37
  627. package/.next/standalone/packages/ui/dist/standalone/specs/archived/002-template-system-redesign/README.md +0 -60
  628. package/.next/standalone/packages/ui/dist/standalone/specs/archived/003-init-system-redesign/README.md +0 -113
  629. package/.next/standalone/packages/ui/dist/standalone/specs/archived/004-existing-project-integration/README.md +0 -69
  630. package/.next/standalone/packages/ui/dist/standalone/specs/archived/004-existing-project-integration/SUMMARY.md +0 -112
  631. package/.next/standalone/packages/ui/dist/standalone/specs/archived/005-structured-frontmatter/README.md +0 -229
  632. package/.next/standalone/packages/ui/dist/standalone/specs/archived/006-pm-visualization-tools/README.md +0 -406
  633. package/.next/standalone/packages/ui/dist/standalone/specs/archived/007-system-prompt-updates/README.md +0 -168
  634. package/.next/standalone/packages/ui/dist/standalone/specs/archived/008-commander-migration/README.md +0 -174
  635. package/.next/standalone/packages/ui/dist/standalone/specs/archived/009-cli-ux-enhancement/README.md +0 -212
  636. package/.next/standalone/packages/ui/dist/standalone/specs/archived/010-commands-refactor/README.md +0 -249
  637. package/.next/standalone/packages/ui/dist/standalone/specs/archived/011-test-results/README.md +0 -60
  638. package/.next/standalone/packages/ui/dist/standalone/specs/archived/011-test-results/TEST_SUMMARY.md +0 -139
  639. package/.next/standalone/packages/ui/dist/standalone/specs/archived/012-sub-spec-files/README.md +0 -722
  640. package/.next/standalone/packages/ui/dist/standalone/specs/archived/013-custom-spec-templates/README.md +0 -413
  641. package/.next/standalone/packages/ui/dist/standalone/specs/archived/015-npm-publishing/README.md +0 -255
  642. package/.next/standalone/packages/ui/dist/standalone/specs/archived/019-readme-improvement/README.md +0 -252
  643. package/.next/standalone/packages/ui/dist/standalone/specs/archived/020-documentation-website/README.md +0 -253
  644. package/.next/standalone/packages/ui/dist/standalone/specs/archived/021-docusaurus-vercel-migration/README.md +0 -612
  645. package/.next/standalone/packages/ui/dist/standalone/specs/archived/022-flexible-folder-structure/README.md +0 -794
  646. package/.next/standalone/packages/ui/dist/standalone/specs/archived/023-folder-structure-improvements/DESIGN.md +0 -834
  647. package/.next/standalone/packages/ui/dist/standalone/specs/archived/023-folder-structure-improvements/README.md +0 -255
  648. package/.next/standalone/packages/ui/dist/standalone/specs/archived/027-cli-ui-ux-optimization/README.md +0 -454
  649. package/.next/standalone/packages/ui/dist/standalone/specs/archived/028-cli-ui-modernization/README.md +0 -172
  650. package/.next/standalone/packages/ui/dist/standalone/specs/archived/029-visualization-improvements/IMPLEMENTATION.md +0 -152
  651. package/.next/standalone/packages/ui/dist/standalone/specs/archived/029-visualization-improvements/README.md +0 -95
  652. package/.next/standalone/packages/ui/dist/standalone/specs/archived/030-created-date-format-bug/README.md +0 -87
  653. package/.next/standalone/packages/ui/dist/standalone/specs/archived/031-gantt-ux-improvements/README.md +0 -230
  654. package/.next/standalone/packages/ui/dist/standalone/specs/archived/032-console-log-chalk-security/README.md +0 -89
  655. package/.next/standalone/packages/ui/dist/standalone/specs/archived/033-mcp-server/README.md +0 -89
  656. package/.next/standalone/packages/ui/dist/standalone/specs/archived/037-docs-overhaul/README.md +0 -166
  657. package/.next/standalone/packages/ui/dist/standalone/specs/archived/038-flat-structure-migration/README.md +0 -276
  658. package/.next/standalone/packages/ui/dist/standalone/specs/archived/038-mcp-frontmatter-bug-fix/README.md +0 -122
  659. package/.next/standalone/packages/ui/dist/standalone/specs/archived/039-simplify-viewer-commands/README.md +0 -198
  660. package/.next/standalone/packages/ui/dist/standalone/specs/archived/039-template-variable-sync/README.md +0 -192
  661. package/.next/standalone/packages/ui/dist/standalone/specs/archived/040-spec-viewer-commands/README.md +0 -171
  662. package/.next/standalone/packages/ui/dist/standalone/specs/archived/042-mcp-error-handling/README.md +0 -200
  663. package/.next/standalone/packages/ui/dist/standalone/specs/archived/044-spec-relationships-clarity/README.md +0 -317
  664. package/.next/standalone/packages/ui/dist/standalone/specs/archived/046-stats-dashboard-refactor/DESIGN.md +0 -276
  665. package/.next/standalone/packages/ui/dist/standalone/specs/archived/046-stats-dashboard-refactor/IMPLEMENTATION.md +0 -241
  666. package/.next/standalone/packages/ui/dist/standalone/specs/archived/046-stats-dashboard-refactor/README.md +0 -139
  667. package/.next/standalone/packages/ui/dist/standalone/specs/archived/046-stats-dashboard-refactor/TESTING.md +0 -328
  668. package/.next/standalone/packages/ui/dist/standalone/specs/archived/050-tool-redesign-first-principles/README.md +0 -400
  669. package/.next/standalone/packages/ui/package.json.backup +0 -119
  670. package/.next/standalone/packages/ui/src/app/board/board-client.tsx +0 -162
  671. package/.next/standalone/packages/ui/src/app/board/loading.tsx +0 -43
  672. package/.next/standalone/packages/ui/src/app/board/page.tsx +0 -18
  673. package/.next/static/chunks/107411d1a2f4b31d.js +0 -1
  674. package/.next/static/chunks/17ac52d909def83e.js +0 -1
  675. package/.next/static/chunks/212881511f73fc12.js +0 -5
  676. package/.next/static/chunks/5057c3e1e7e13ca3.js +0 -1
  677. package/.next/static/chunks/5d646f493d4c6928.js +0 -1
  678. package/.next/static/chunks/88f695d32910a4ac.js +0 -1
  679. package/.next/static/chunks/aa47b212786d8695.js +0 -1
  680. package/.next/static/chunks/ae04dcd433be6dab.js +0 -1
  681. package/.next/static/chunks/c210559fdfe60fef.js +0 -1
  682. package/.next/static/chunks/df1731c03abf1aee.css +0 -1
  683. package/.next/static/chunks/e237e00fd3a84178.js +0 -3
  684. /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
  685. /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
  686. /package/.next/standalone/packages/ui/.next/server/app/{board/page → api/local-projects/[id]/route}/server-reference-manifest.json +0 -0
  687. /package/.next/standalone/packages/ui/.next/server/app/{board/page.js.map → api/local-projects/[id]/route.js.map} +0 -0
  688. /package/.next/standalone/packages/ui/.next/server/app/{board → projects/[projectId]}/page/next-font-manifest.json +0 -0
  689. /package/.next/standalone/packages/ui/.next/server/app/{board → projects/[projectId]}/page/react-loadable-manifest.json +0 -0
  690. /package/.next/standalone/packages/ui/.next/static/{mY96Srm2xq4N3LlCirdvZ → WJi9opx4ShY8zt8yBFo4r}/_buildManifest.js +0 -0
  691. /package/.next/standalone/packages/ui/.next/static/{mY96Srm2xq4N3LlCirdvZ → WJi9opx4ShY8zt8yBFo4r}/_clientMiddlewareManifest.json +0 -0
  692. /package/.next/standalone/packages/ui/.next/static/{mY96Srm2xq4N3LlCirdvZ → WJi9opx4ShY8zt8yBFo4r}/_ssgManifest.js +0 -0
  693. /package/.next/static/{mY96Srm2xq4N3LlCirdvZ → WJi9opx4ShY8zt8yBFo4r}/_buildManifest.js +0 -0
  694. /package/.next/static/{mY96Srm2xq4N3LlCirdvZ → WJi9opx4ShY8zt8yBFo4r}/_clientMiddlewareManifest.json +0 -0
  695. /package/.next/static/{mY96Srm2xq4N3LlCirdvZ → WJi9opx4ShY8zt8yBFo4r}/_ssgManifest.js +0 -0
@@ -1,6 +1,7 @@
1
1
  'use client';
2
2
 
3
- import { useState, useMemo, useEffect, useRef } from 'react';
3
+ import { useState, useMemo, useEffect, useRef, useCallback } from 'react';
4
+ import type { DragEvent } from 'react';
4
5
  import Link from 'next/link';
5
6
  import { useSearchParams, useRouter } from 'next/navigation';
6
7
  import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
@@ -14,28 +15,82 @@ import {
14
15
  SelectTrigger,
15
16
  SelectValue
16
17
  } from '@/components/ui/select';
17
- import {
18
- Search,
19
- CheckCircle2,
20
- PlayCircle,
18
+ import {
19
+ Search,
20
+ CheckCircle2,
21
+ PlayCircle,
21
22
  Clock,
22
23
  Archive,
23
24
  LayoutGrid,
24
- List as ListIcon
25
+ List as ListIcon,
26
+ FileText,
27
+ GitBranch,
28
+ Maximize2,
29
+ Minimize2
25
30
  } from 'lucide-react';
26
31
  import { StatusBadge } from '@/components/status-badge';
27
32
  import { PriorityBadge } from '@/components/priority-badge';
28
33
  import { cn } from '@/lib/utils';
34
+ import { formatRelativeTime } from '@/lib/date-utils';
35
+ import { toast } from '@/components/ui/toast';
36
+
37
+ type SpecStatus = 'planned' | 'in-progress' | 'complete' | 'archived';
38
+
39
+ const STATUS_CONFIG: Record<SpecStatus, {
40
+ icon: typeof Clock;
41
+ title: string;
42
+ colorClass: string;
43
+ bgClass: string;
44
+ borderClass: string;
45
+ }> = {
46
+ 'planned': {
47
+ icon: Clock,
48
+ title: 'Planned',
49
+ colorClass: 'text-blue-600 dark:text-blue-400',
50
+ bgClass: 'bg-blue-50 dark:bg-blue-900/20',
51
+ borderClass: 'border-blue-200 dark:border-blue-800'
52
+ },
53
+ 'in-progress': {
54
+ icon: PlayCircle,
55
+ title: 'In Progress',
56
+ colorClass: 'text-orange-600 dark:text-orange-400',
57
+ bgClass: 'bg-orange-50 dark:bg-orange-900/20',
58
+ borderClass: 'border-orange-200 dark:border-orange-800'
59
+ },
60
+ 'complete': {
61
+ icon: CheckCircle2,
62
+ title: 'Complete',
63
+ colorClass: 'text-green-600 dark:text-green-400',
64
+ bgClass: 'bg-green-50 dark:bg-green-900/20',
65
+ borderClass: 'border-green-200 dark:border-green-800'
66
+ },
67
+ 'archived': {
68
+ icon: Archive,
69
+ title: 'Archived',
70
+ colorClass: 'text-gray-600 dark:text-gray-400',
71
+ bgClass: 'bg-gray-50 dark:bg-gray-900/20',
72
+ borderClass: 'border-gray-200 dark:border-gray-800'
73
+ }
74
+ };
75
+
76
+ const BOARD_STATUSES: SpecStatus[] = ['planned', 'in-progress', 'complete', 'archived'];
77
+
78
+ interface SpecRelationships {
79
+ dependsOn: string[];
80
+ related: string[];
81
+ }
29
82
 
30
83
  interface Spec {
31
84
  id: string;
32
85
  specNumber: number | null;
33
86
  specName: string;
34
87
  title: string | null;
35
- status: string | null;
88
+ status: SpecStatus | null;
36
89
  priority: string | null;
37
90
  tags: string[] | null;
38
91
  updatedAt: Date | null;
92
+ subSpecsCount?: number;
93
+ relationships?: SpecRelationships;
39
94
  }
40
95
 
41
96
  interface Stats {
@@ -47,40 +102,98 @@ interface Stats {
47
102
  interface SpecsClientProps {
48
103
  initialSpecs: Spec[];
49
104
  initialStats: Stats;
105
+ projectId?: string;
50
106
  }
51
107
 
52
108
  type ViewMode = 'list' | 'board';
53
109
  type SortBy = 'id-desc' | 'id-asc' | 'updated-desc' | 'title-asc';
54
110
 
55
- export function SpecsClient({ initialSpecs }: SpecsClientProps) {
111
+ export function SpecsClient({ initialSpecs, projectId }: SpecsClientProps) {
56
112
  const searchParams = useSearchParams();
57
113
  const router = useRouter();
58
-
114
+
115
+ const [specs, setSpecs] = useState<Spec[]>(initialSpecs);
116
+ const [pendingSpecIds, setPendingSpecIds] = useState<Record<string, boolean>>({});
59
117
  const [searchQuery, setSearchQuery] = useState('');
60
- const [statusFilter, setStatusFilter] = useState<string>('all');
118
+ const [statusFilter, setStatusFilter] = useState<'all' | SpecStatus>('all');
61
119
  const [priorityFilter, setPriorityFilter] = useState<string>('all');
62
120
  const [sortBy, setSortBy] = useState<SortBy>('id-desc');
121
+ const [showArchivedBoard, setShowArchivedBoard] = useState(false); // Start collapsed
122
+ const [isWideMode, setIsWideMode] = useState(false);
63
123
  const [viewMode, setViewMode] = useState<ViewMode>(() => {
64
124
  // Initialize from URL or localStorage
65
125
  const urlView = searchParams.get('view');
66
126
  if (urlView === 'board' || urlView === 'list') return urlView;
67
-
127
+
68
128
  if (typeof window !== 'undefined') {
69
129
  const stored = localStorage.getItem('specs-view-mode');
70
130
  if (stored === 'board' || stored === 'list') return stored;
71
131
  }
72
132
  return 'list';
73
133
  });
74
-
134
+
75
135
  const isFirstRender = useRef(true);
76
136
 
137
+ useEffect(() => {
138
+ setSpecs(initialSpecs);
139
+ }, [initialSpecs]);
140
+
141
+ const handleStatusChange = useCallback(async (spec: Spec, nextStatus: SpecStatus) => {
142
+ if (spec.status === nextStatus) {
143
+ return;
144
+ }
145
+
146
+ const previousStatus = spec.status;
147
+ setPendingSpecIds((prev) => ({ ...prev, [spec.id]: true }));
148
+ setSpecs((prev) => prev.map(item => item.id === spec.id ? { ...item, status: nextStatus } : item));
149
+
150
+ try {
151
+ const url = projectId
152
+ ? `/api/projects/${projectId}/specs/${encodeURIComponent(spec.specName)}/status`
153
+ : `/api/specs/${encodeURIComponent(spec.specName)}/status`;
154
+
155
+ const response = await fetch(url, {
156
+ method: 'PATCH',
157
+ headers: {
158
+ 'Content-Type': 'application/json',
159
+ },
160
+ body: JSON.stringify({ status: nextStatus }),
161
+ });
162
+
163
+ if (!response.ok) {
164
+ const message = await response.text();
165
+ throw new Error(message || 'Failed to update spec status');
166
+ }
167
+
168
+ const displayName = spec.specNumber ? `#${spec.specNumber}` : spec.specName;
169
+ toast.success(`Moved ${displayName} to ${STATUS_CONFIG[nextStatus].title}`);
170
+ } catch (error) {
171
+ console.error('Failed to update spec status', error);
172
+ setSpecs((prev) => prev.map(item => item.id === spec.id ? { ...item, status: previousStatus } : item));
173
+ toast.error('Unable to update status. Please try again.');
174
+ } finally {
175
+ setPendingSpecIds((prev) => {
176
+ const next = { ...prev };
177
+ delete next[spec.id];
178
+ return next;
179
+ });
180
+ }
181
+ }, []);
182
+
183
+ // Auto-show archived column when filtering by archived status in board view
184
+ useEffect(() => {
185
+ if (statusFilter === 'archived' && viewMode === 'board') {
186
+ setShowArchivedBoard(true);
187
+ }
188
+ }, [statusFilter, viewMode]);
189
+
77
190
  // Update URL when view mode changes (skip on initial mount)
78
191
  useEffect(() => {
79
192
  if (isFirstRender.current) {
80
193
  isFirstRender.current = false;
81
194
  return;
82
195
  }
83
-
196
+
84
197
  const current = new URLSearchParams(window.location.search);
85
198
  if (viewMode === 'board') {
86
199
  current.set('view', 'board');
@@ -90,7 +203,7 @@ export function SpecsClient({ initialSpecs }: SpecsClientProps) {
90
203
  const search = current.toString();
91
204
  const query = search ? `?${search}` : '';
92
205
  router.replace(`/specs${query}`, { scroll: false });
93
-
206
+
94
207
  // Persist to localStorage
95
208
  if (typeof window !== 'undefined') {
96
209
  localStorage.setItem('specs-view-mode', viewMode);
@@ -98,147 +211,170 @@ export function SpecsClient({ initialSpecs }: SpecsClientProps) {
98
211
  }, [viewMode, router]);
99
212
 
100
213
  const filteredAndSortedSpecs = useMemo(() => {
101
- const specs = initialSpecs.filter(spec => {
214
+ const filtered = specs.filter(spec => {
102
215
  const matchesSearch = !searchQuery ||
103
216
  spec.title?.toLowerCase().includes(searchQuery.toLowerCase()) ||
104
217
  spec.specName.toLowerCase().includes(searchQuery.toLowerCase()) ||
105
218
  spec.tags?.some(tag => tag.toLowerCase().includes(searchQuery.toLowerCase()));
106
219
 
107
- const matchesStatus = statusFilter === 'all' || spec.status === statusFilter;
220
+ const matchesStatus = statusFilter === 'all'
221
+ ? (viewMode === 'list' ? spec.status !== 'archived' : true)
222
+ : spec.status === statusFilter;
108
223
  const matchesPriority = priorityFilter === 'all' || spec.priority === priorityFilter;
109
224
 
110
225
  return matchesSearch && matchesStatus && matchesPriority;
111
226
  });
112
227
 
228
+ const sorted = [...filtered];
229
+
113
230
  // Sort
114
231
  switch (sortBy) {
115
232
  case 'id-desc':
116
- specs.sort((a, b) => (b.specNumber || 0) - (a.specNumber || 0));
233
+ sorted.sort((a, b) => (b.specNumber || 0) - (a.specNumber || 0));
117
234
  break;
118
235
  case 'id-asc':
119
- specs.sort((a, b) => (a.specNumber || 0) - (b.specNumber || 0));
236
+ sorted.sort((a, b) => (a.specNumber || 0) - (b.specNumber || 0));
120
237
  break;
121
238
  case 'updated-desc':
122
- specs.sort((a, b) => {
239
+ sorted.sort((a, b) => {
123
240
  if (!a.updatedAt) return 1;
124
241
  if (!b.updatedAt) return -1;
125
242
  return b.updatedAt.getTime() - a.updatedAt.getTime();
126
243
  });
127
244
  break;
128
245
  case 'title-asc':
129
- specs.sort((a, b) => {
246
+ sorted.sort((a, b) => {
130
247
  const titleA = (a.title || a.specName).toLowerCase();
131
248
  const titleB = (b.title || b.specName).toLowerCase();
132
249
  return titleA.localeCompare(titleB);
133
250
  });
134
251
  break;
135
252
  }
136
-
137
- return specs;
138
- }, [initialSpecs, searchQuery, statusFilter, priorityFilter, sortBy]);
253
+ return sorted;
254
+ }, [specs, searchQuery, statusFilter, priorityFilter, sortBy, viewMode]);
139
255
 
140
256
  return (
141
- <div className="min-h-screen bg-background p-8">
142
- <div className="max-w-7xl mx-auto">
143
- <div className="mb-8">
144
- <h1 className="text-4xl font-bold tracking-tight">Specifications</h1>
145
- <p className="text-muted-foreground mt-2">
146
- {viewMode === 'board' ? 'Kanban board view' : 'Browse all specifications'}
147
- </p>
148
- </div>
257
+ <div className="h-[calc(100vh-3.5rem)] flex flex-col overflow-hidden bg-background p-4">
258
+ <div className={cn(
259
+ "flex flex-col h-full mx-auto transition-all duration-300",
260
+ isWideMode ? "w-full" : "max-w-7xl w-full"
261
+ )}>
262
+ {/* Unified Compact Header */}
263
+ <div className="flex-none mb-4">
264
+ <div className="flex flex-col gap-4">
265
+ <div className="flex items-center justify-between gap-4">
266
+ <div>
267
+ <h1 className="text-2xl font-bold tracking-tight">Specifications</h1>
268
+ <p className="text-sm text-muted-foreground">
269
+ {filteredAndSortedSpecs.length} specs
270
+ </p>
271
+ </div>
149
272
 
150
- {/* Filters and View Switcher */}
151
- <div className="flex flex-col gap-4 mb-6">
152
- <div className="flex flex-col sm:flex-row gap-4">
153
- {/* Search */}
154
- <div className="flex-1 relative">
155
- <Search className="absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" />
156
- <Input
157
- placeholder="Search specs..."
158
- value={searchQuery}
159
- onChange={(e) => setSearchQuery(e.target.value)}
160
- className="pl-10"
161
- />
273
+ <div className="flex items-center gap-2">
274
+ <div className="flex items-center gap-2 bg-muted/50 p-1 rounded-lg">
275
+ <Button
276
+ variant={viewMode === 'list' ? 'secondary' : 'ghost'}
277
+ size="sm"
278
+ onClick={() => setViewMode('list')}
279
+ className="h-8 px-2 lg:px-3"
280
+ >
281
+ <ListIcon className="h-4 w-4 lg:mr-2" />
282
+ <span className="hidden lg:inline">List</span>
283
+ </Button>
284
+ <Button
285
+ variant={viewMode === 'board' ? 'secondary' : 'ghost'}
286
+ size="sm"
287
+ onClick={() => setViewMode('board')}
288
+ className="h-8 px-2 lg:px-3"
289
+ >
290
+ <LayoutGrid className="h-4 w-4 lg:mr-2" />
291
+ <span className="hidden lg:inline">Board</span>
292
+ </Button>
293
+ </div>
294
+
295
+ <Button
296
+ variant="ghost"
297
+ size="icon"
298
+ onClick={() => setIsWideMode(!isWideMode)}
299
+ className="h-10 w-10 text-muted-foreground hover:text-foreground"
300
+ title={isWideMode ? "Exit wide mode" : "Enter wide mode"}
301
+ >
302
+ {isWideMode ? <Minimize2 className="h-4 w-4" /> : <Maximize2 className="h-4 w-4" />}
303
+ </Button>
304
+ </div>
162
305
  </div>
163
306
 
164
- {/* Status Filter */}
165
- <Select value={statusFilter} onValueChange={setStatusFilter}>
166
- <SelectTrigger className="w-full sm:w-[180px]">
167
- <SelectValue placeholder="Status" />
168
- </SelectTrigger>
169
- <SelectContent>
170
- <SelectItem value="all">All Status</SelectItem>
171
- <SelectItem value="planned">Planned</SelectItem>
172
- <SelectItem value="in-progress">In Progress</SelectItem>
173
- <SelectItem value="complete">Complete</SelectItem>
174
- <SelectItem value="archived">Archived</SelectItem>
175
- </SelectContent>
176
- </Select>
177
-
178
- {/* Priority Filter */}
179
- <Select value={priorityFilter} onValueChange={setPriorityFilter}>
180
- <SelectTrigger className="w-full sm:w-[180px]">
181
- <SelectValue placeholder="Priority" />
182
- </SelectTrigger>
183
- <SelectContent>
184
- <SelectItem value="all">All Priority</SelectItem>
185
- <SelectItem value="critical">Critical</SelectItem>
186
- <SelectItem value="high">High</SelectItem>
187
- <SelectItem value="medium">Medium</SelectItem>
188
- <SelectItem value="low">Low</SelectItem>
189
- </SelectContent>
190
- </Select>
191
- </div>
307
+ <div className="flex items-center gap-2 overflow-x-auto pb-2">
308
+ <div className="relative flex-1 min-w-[200px] max-w-md">
309
+ <Search className="absolute left-2.5 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" />
310
+ <Input
311
+ placeholder="Search specs..."
312
+ value={searchQuery}
313
+ onChange={(e) => setSearchQuery(e.target.value)}
314
+ className="pl-9 h-9"
315
+ />
316
+ </div>
192
317
 
193
- <div className="flex flex-col sm:flex-row justify-between gap-4">
194
- {/* Sort Controls */}
195
- <Select value={sortBy} onValueChange={(v) => setSortBy(v as SortBy)}>
196
- <SelectTrigger className="w-full sm:w-[220px]">
197
- <SelectValue placeholder="Sort by" />
198
- </SelectTrigger>
199
- <SelectContent>
200
- <SelectItem value="id-desc">Newest First (ID ↓)</SelectItem>
201
- <SelectItem value="id-asc">Oldest First (ID ↑)</SelectItem>
202
- <SelectItem value="updated-desc">Recently Updated</SelectItem>
203
- <SelectItem value="title-asc">Title (A-Z)</SelectItem>
204
- </SelectContent>
205
- </Select>
206
-
207
- {/* View Mode Switcher */}
208
- <div className="flex gap-2">
209
- <Button
210
- variant={viewMode === 'list' ? 'default' : 'outline'}
211
- size="sm"
212
- onClick={() => setViewMode('list')}
213
- className="flex items-center gap-2"
214
- >
215
- <ListIcon className="h-4 w-4" />
216
- List
217
- </Button>
218
- <Button
219
- variant={viewMode === 'board' ? 'default' : 'outline'}
220
- size="sm"
221
- onClick={() => setViewMode('board')}
222
- className="flex items-center gap-2"
223
- >
224
- <LayoutGrid className="h-4 w-4" />
225
- Board
226
- </Button>
318
+ <Select value={statusFilter} onValueChange={(value) => setStatusFilter(value as SpecStatus | 'all')}>
319
+ <SelectTrigger className="w-[140px] h-9">
320
+ <SelectValue placeholder="Status" />
321
+ </SelectTrigger>
322
+ <SelectContent>
323
+ <SelectItem value="all">All Status</SelectItem>
324
+ <SelectItem value="planned">Planned</SelectItem>
325
+ <SelectItem value="in-progress">In Progress</SelectItem>
326
+ <SelectItem value="complete">Complete</SelectItem>
327
+ <SelectItem value="archived">Archived</SelectItem>
328
+ </SelectContent>
329
+ </Select>
330
+
331
+ <Select value={priorityFilter} onValueChange={setPriorityFilter}>
332
+ <SelectTrigger className="w-[140px] h-9">
333
+ <SelectValue placeholder="Priority" />
334
+ </SelectTrigger>
335
+ <SelectContent>
336
+ <SelectItem value="all">All Priority</SelectItem>
337
+ <SelectItem value="critical">Critical</SelectItem>
338
+ <SelectItem value="high">High</SelectItem>
339
+ <SelectItem value="medium">Medium</SelectItem>
340
+ <SelectItem value="low">Low</SelectItem>
341
+ </SelectContent>
342
+ </Select>
343
+
344
+ <Select value={sortBy} onValueChange={(v) => setSortBy(v as SortBy)}>
345
+ <SelectTrigger className="w-[180px] h-9">
346
+ <SelectValue placeholder="Sort by" />
347
+ </SelectTrigger>
348
+ <SelectContent>
349
+ <SelectItem value="id-desc">Newest First</SelectItem>
350
+ <SelectItem value="id-asc">Oldest First</SelectItem>
351
+ <SelectItem value="updated-desc">Recently Updated</SelectItem>
352
+ <SelectItem value="title-asc">Title (A-Z)</SelectItem>
353
+ </SelectContent>
354
+ </Select>
227
355
  </div>
228
356
  </div>
229
357
  </div>
230
358
 
231
- {/* Results count */}
232
- <div className="text-sm text-muted-foreground mb-4">
233
- Showing {filteredAndSortedSpecs.length} of {initialSpecs.length} specs
359
+ {/* Content Area */}
360
+ <div className={cn(
361
+ "flex-1 min-h-0",
362
+ viewMode === 'board' ? "overflow-x-auto overflow-y-hidden" : "overflow-y-auto"
363
+ )}>
364
+ {viewMode === 'list' ? (
365
+ <div className="w-full">
366
+ <ListView specs={filteredAndSortedSpecs} />
367
+ </div>
368
+ ) : (
369
+ <BoardView
370
+ specs={filteredAndSortedSpecs}
371
+ onStatusChange={handleStatusChange}
372
+ pendingSpecIds={pendingSpecIds}
373
+ showArchived={showArchivedBoard}
374
+ onToggleArchived={() => setShowArchivedBoard(!showArchivedBoard)}
375
+ />
376
+ )}
234
377
  </div>
235
-
236
- {/* Content based on view mode */}
237
- {viewMode === 'list' ? (
238
- <ListView specs={filteredAndSortedSpecs} />
239
- ) : (
240
- <BoardView specs={filteredAndSortedSpecs} />
241
- )}
242
378
  </div>
243
379
  </div>
244
380
  );
@@ -246,7 +382,7 @@ export function SpecsClient({ initialSpecs }: SpecsClientProps) {
246
382
 
247
383
  function ListView({ specs }: { specs: Spec[] }) {
248
384
  return (
249
- <div className="grid grid-cols-1 gap-4">
385
+ <div className="grid grid-cols-1 gap-4 pb-8">
250
386
  {specs.map(spec => {
251
387
  const priorityColors = {
252
388
  'critical': 'border-l-red-500',
@@ -255,10 +391,12 @@ function ListView({ specs }: { specs: Spec[] }) {
255
391
  'low': 'border-l-gray-400'
256
392
  };
257
393
  const borderColor = priorityColors[spec.priority as keyof typeof priorityColors] || 'border-l-gray-300';
394
+ const hasDependencies = spec.relationships && (spec.relationships.dependsOn.length > 0 || spec.relationships.related.length > 0);
395
+ const hasSubSpecs = !!(spec.subSpecsCount && spec.subSpecsCount > 0);
258
396
 
259
397
  return (
260
- <Card
261
- key={spec.id}
398
+ <Card
399
+ key={spec.id}
262
400
  className={cn(
263
401
  "hover:shadow-lg transition-all duration-150 hover:scale-[1.01] border-l-4 cursor-pointer",
264
402
  borderColor
@@ -269,12 +407,18 @@ function ListView({ specs }: { specs: Spec[] }) {
269
407
  <div className="flex items-start justify-between gap-4">
270
408
  <div className="flex-1 min-w-0">
271
409
  <Link href={`/specs/${spec.specNumber || spec.id}`}>
272
- <CardTitle className="text-lg font-semibold hover:text-primary transition-colors">
273
- {spec.specNumber ? `#${spec.specNumber.toString().padStart(3, '0')}` : spec.specName}
274
- {' '}
410
+ <CardTitle className="text-lg font-semibold hover:text-primary transition-colors flex items-center">
411
+ {spec.specNumber ? (
412
+ <span className="font-mono text-base font-normal text-muted-foreground mr-3">
413
+ #{spec.specNumber.toString().padStart(3, '0')}
414
+ </span>
415
+ ) : null}
275
416
  {spec.title || spec.specName}
276
417
  </CardTitle>
277
418
  </Link>
419
+ {spec.title && spec.title !== spec.specName && (
420
+ <p className="text-xs font-mono text-muted-foreground mt-1.5 truncate">{spec.specName}</p>
421
+ )}
278
422
  </div>
279
423
  <div className="flex gap-2 shrink-0">
280
424
  {spec.status && <StatusBadge status={spec.status} />}
@@ -282,17 +426,51 @@ function ListView({ specs }: { specs: Spec[] }) {
282
426
  </div>
283
427
  </div>
284
428
  </CardHeader>
285
- {spec.tags && spec.tags.length > 0 && (
286
- <CardContent>
287
- <div className="flex flex-wrap gap-2">
429
+
430
+ <CardContent className="flex items-center justify-between gap-4 pt-0">
431
+ {/* Metadata (Left) */}
432
+ <div className="flex items-center gap-4 text-sm text-muted-foreground flex-wrap">
433
+ {(spec.updatedAt || hasSubSpecs || hasDependencies) ? (
434
+ <>
435
+ {spec.updatedAt && (
436
+ <div className="flex items-center gap-1.5">
437
+ <Clock className="h-3.5 w-3.5" />
438
+ <span>Updated {formatRelativeTime(spec.updatedAt)}</span>
439
+ </div>
440
+ )}
441
+ {hasSubSpecs && (
442
+ <div className="flex items-center gap-1.5">
443
+ <FileText className="h-3.5 w-3.5" />
444
+ <span>+{spec.subSpecsCount} files</span>
445
+ </div>
446
+ )}
447
+ {hasDependencies && (
448
+ <div className="flex items-center gap-1.5">
449
+ <GitBranch className="h-3.5 w-3.5" />
450
+ <span>
451
+ {spec.relationships!.dependsOn.length > 0 && `${spec.relationships!.dependsOn.length} deps`}
452
+ {spec.relationships!.dependsOn.length > 0 && spec.relationships!.related.length > 0 && ', '}
453
+ {spec.relationships!.related.length > 0 && `${spec.relationships!.related.length} related`}
454
+ </span>
455
+ </div>
456
+ )}
457
+ </>
458
+ ) : (
459
+ <span className="invisible">No metadata</span> /* Keep height consistent */
460
+ )}
461
+ </div>
462
+
463
+ {/* Tags (Right) */}
464
+ {spec.tags && spec.tags.length > 0 && (
465
+ <div className="flex flex-wrap gap-2 justify-end shrink-0">
288
466
  {spec.tags.map(tag => (
289
- <Badge key={tag} variant="secondary">
467
+ <Badge key={tag} variant="outline" className="text-xs font-mono text-muted-foreground hover:text-foreground transition-colors">
290
468
  {tag}
291
469
  </Badge>
292
470
  ))}
293
471
  </div>
294
- </CardContent>
295
- )}
472
+ )}
473
+ </CardContent>
296
474
  </Card>
297
475
  );
298
476
  })}
@@ -300,123 +478,217 @@ function ListView({ specs }: { specs: Spec[] }) {
300
478
  );
301
479
  }
302
480
 
303
- function BoardView({ specs }: { specs: Spec[] }) {
481
+ interface BoardViewProps {
482
+ specs: Spec[];
483
+ onStatusChange: (spec: Spec, status: SpecStatus) => void;
484
+ pendingSpecIds: Record<string, boolean>;
485
+ showArchived: boolean;
486
+ onToggleArchived: () => void;
487
+ }
488
+
489
+ function BoardView({ specs, onStatusChange, pendingSpecIds, showArchived, onToggleArchived }: BoardViewProps) {
490
+ const [draggingId, setDraggingId] = useState<string | null>(null);
491
+ const [activeDropZone, setActiveDropZone] = useState<SpecStatus | null>(null);
492
+
304
493
  const columns = useMemo(() => {
305
- const statusConfig = {
306
- 'planned': {
307
- icon: Clock,
308
- title: 'Planned',
309
- colorClass: 'text-blue-600 dark:text-blue-400',
310
- bgClass: 'bg-blue-50 dark:bg-blue-900/20',
311
- borderClass: 'border-blue-200 dark:border-blue-800'
312
- },
313
- 'in-progress': {
314
- icon: PlayCircle,
315
- title: 'In Progress',
316
- colorClass: 'text-orange-600 dark:text-orange-400',
317
- bgClass: 'bg-orange-50 dark:bg-orange-900/20',
318
- borderClass: 'border-orange-200 dark:border-orange-800'
319
- },
320
- 'complete': {
321
- icon: CheckCircle2,
322
- title: 'Complete',
323
- colorClass: 'text-green-600 dark:text-green-400',
324
- bgClass: 'bg-green-50 dark:bg-green-900/20',
325
- borderClass: 'border-green-200 dark:border-green-800'
326
- },
327
- 'archived': {
328
- icon: Archive,
329
- title: 'Archived',
330
- colorClass: 'text-gray-600 dark:text-gray-400',
331
- bgClass: 'bg-gray-50 dark:bg-gray-900/20',
332
- borderClass: 'border-gray-200 dark:border-gray-800'
333
- }
334
- };
335
-
336
- const statuses = ['planned', 'in-progress', 'complete', 'archived'] as const;
337
-
338
- return statuses.map(status => ({
494
+ // Always show all columns, including archived (it will be rendered as collapsed bar when showArchived=false)
495
+ return BOARD_STATUSES.map(status => ({
339
496
  status,
340
- config: statusConfig[status],
497
+ config: STATUS_CONFIG[status],
341
498
  specs: specs.filter(spec => spec.status === status),
342
499
  }));
343
500
  }, [specs]);
344
501
 
502
+ const specLookup = useMemo(() => {
503
+ const map = new Map<string, Spec>();
504
+ specs.forEach(spec => map.set(spec.id, spec));
505
+ return map;
506
+ }, [specs]);
507
+
508
+ const handleDragStart = useCallback((specId: string, event: DragEvent<HTMLDivElement>) => {
509
+ event.dataTransfer.setData('text/plain', specId);
510
+ event.dataTransfer.effectAllowed = 'move';
511
+ setDraggingId(specId);
512
+ }, []);
513
+
514
+ const handleDragEnd = useCallback(() => {
515
+ setDraggingId(null);
516
+ setActiveDropZone(null);
517
+ }, []);
518
+
519
+ const handleDragOver = useCallback((status: SpecStatus, event: DragEvent<HTMLDivElement>) => {
520
+ if (!draggingId) return;
521
+ event.preventDefault();
522
+ event.dataTransfer.dropEffect = 'move';
523
+ setActiveDropZone(status);
524
+ }, [draggingId]);
525
+
526
+ const handleDragLeave = useCallback((status: SpecStatus, event: DragEvent<HTMLDivElement>) => {
527
+ if (!draggingId) return;
528
+ const related = event.relatedTarget as Node | null;
529
+ if (!related || !event.currentTarget.contains(related)) {
530
+ setActiveDropZone((current) => (current === status ? null : current));
531
+ }
532
+ }, [draggingId]);
533
+
534
+ const handleDrop = useCallback((status: SpecStatus, event: DragEvent<HTMLDivElement>) => {
535
+ event.preventDefault();
536
+ const draggedId = event.dataTransfer.getData('text/plain') || draggingId;
537
+ if (!draggedId) {
538
+ handleDragEnd();
539
+ return;
540
+ }
541
+
542
+ const spec = specLookup.get(draggedId);
543
+ if (spec && spec.status !== status) {
544
+ onStatusChange(spec, status);
545
+ }
546
+
547
+ handleDragEnd();
548
+ }, [draggingId, handleDragEnd, onStatusChange, specLookup]);
549
+
345
550
  return (
346
- <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6">
551
+ <div className="flex gap-6 h-full pb-2">
347
552
  {columns.map(column => {
348
553
  const Icon = column.config.icon;
554
+ const isArchivedColumn = column.status === 'archived';
555
+
349
556
  return (
350
- <div key={column.status} className="flex flex-col">
557
+ <div key={column.status} className={cn(
558
+ "flex flex-col h-full flex-1 min-w-[280px]",
559
+ isArchivedColumn && !showArchived && "w-14 min-w-[3.5rem] flex-none flex-shrink-0"
560
+ )}>
351
561
  <div className={cn(
352
- "sticky top-14 z-40 mb-4 p-3 rounded-lg border-2 bg-background",
562
+ 'flex-none mb-4 rounded-lg border-2 bg-background transition-all',
353
563
  column.config.bgClass,
354
- column.config.borderClass
355
- )}>
564
+ column.config.borderClass,
565
+ isArchivedColumn ? 'cursor-pointer hover:opacity-80' : '',
566
+ isArchivedColumn && !showArchived ? 'py-6 px-2' : 'p-3'
567
+ )}
568
+ onClick={isArchivedColumn ? onToggleArchived : undefined}
569
+ >
356
570
  <h2 className={cn(
357
- "text-lg font-semibold flex items-center gap-2",
358
- column.config.colorClass
571
+ 'text-lg font-semibold flex items-center gap-2',
572
+ column.config.colorClass,
573
+ isArchivedColumn && !showArchived && 'flex-col text-sm gap-3'
359
574
  )}>
360
575
  <Icon className="h-5 w-5" />
361
- {column.config.title}
362
- <Badge variant="outline" className="ml-auto">{column.specs.length}</Badge>
576
+ {isArchivedColumn && !showArchived ? (
577
+ <>
578
+ <span className="vertical-text text-sm whitespace-nowrap">
579
+ {column.config.title}
580
+ </span>
581
+ <Badge variant="outline" className="text-xs">{column.specs.length}</Badge>
582
+ </>
583
+ ) : (
584
+ <>
585
+ {column.config.title}
586
+ <Badge variant="outline" className="ml-auto">{column.specs.length}</Badge>
587
+ </>
588
+ )}
363
589
  </h2>
364
590
  </div>
365
591
 
366
- <div className="space-y-3 flex-1">
367
- {column.specs.map(spec => {
368
- const priorityColors = {
369
- 'critical': 'border-l-red-500',
370
- 'high': 'border-l-orange-500',
371
- 'medium': 'border-l-blue-500',
372
- 'low': 'border-l-gray-400'
373
- };
374
- const borderColor = priorityColors[spec.priority as keyof typeof priorityColors] || 'border-l-gray-300';
375
-
376
- return (
377
- <Card
378
- key={spec.id}
379
- className={cn(
380
- "hover:shadow-lg transition-all duration-150 hover:scale-[1.02] border-l-4 cursor-pointer",
381
- borderColor
382
- )}
383
- onClick={() => window.location.href = `/specs/${spec.specNumber || spec.id}`}
384
- >
385
- <CardHeader className="pb-3">
386
- <Link href={`/specs/${spec.specNumber || spec.id}`}>
387
- <CardTitle className="text-sm font-medium hover:text-primary transition-colors">
388
- {spec.specNumber ? `#${spec.specNumber}` : spec.specName}
389
- </CardTitle>
390
- </Link>
391
- </CardHeader>
392
- <CardContent className="space-y-2">
393
- <p className="text-sm text-muted-foreground line-clamp-2">
394
- {spec.title || spec.specName}
395
- </p>
396
-
397
- <div className="flex items-center gap-2 flex-wrap">
398
- {spec.priority && <PriorityBadge priority={spec.priority} />}
399
-
400
- {spec.tags && spec.tags.length > 0 && (
401
- <>
402
- {spec.tags.slice(0, 2).map(tag => (
403
- <Badge key={tag} variant="outline" className="text-xs">
404
- {tag}
405
- </Badge>
406
- ))}
407
- {spec.tags.length > 2 && (
408
- <Badge variant="outline" className="text-xs">
409
- +{spec.tags.length - 2}
410
- </Badge>
592
+ {(!isArchivedColumn || showArchived) && (
593
+ <div
594
+ className={cn(
595
+ 'space-y-3 flex-1 rounded-xl border border-transparent p-1 transition-colors overflow-y-auto min-h-0',
596
+ draggingId && 'border-dashed border-muted-foreground/40',
597
+ draggingId && activeDropZone === column.status && 'bg-muted/40 border-primary/50'
598
+ )}
599
+ onDragOver={(event) => handleDragOver(column.status, event)}
600
+ onDragLeave={(event) => handleDragLeave(column.status, event)}
601
+ onDrop={(event) => handleDrop(column.status, event)}
602
+ >
603
+ {column.specs.map(spec => {
604
+ const priorityColors = {
605
+ 'critical': 'border-l-red-500',
606
+ 'high': 'border-l-orange-500',
607
+ 'medium': 'border-l-blue-500',
608
+ 'low': 'border-l-gray-400'
609
+ };
610
+ const borderColor = priorityColors[spec.priority as keyof typeof priorityColors] || 'border-l-gray-300';
611
+ const isUpdating = Boolean(pendingSpecIds[spec.id]);
612
+
613
+ return (
614
+ <Card
615
+ key={spec.id}
616
+ draggable={!isUpdating}
617
+ onDragStart={(event) => {
618
+ if (isUpdating) {
619
+ event.preventDefault();
620
+ return;
621
+ }
622
+ handleDragStart(spec.id, event);
623
+ }}
624
+ onDragEnd={handleDragEnd}
625
+ aria-disabled={isUpdating}
626
+ className={cn(
627
+ 'relative hover:shadow-lg transition-all duration-150 hover:scale-[1.02] border-l-4 cursor-pointer group flex flex-col',
628
+ borderColor,
629
+ isUpdating && 'opacity-60 cursor-wait'
630
+ )}
631
+ onClick={() => window.location.href = `/specs/${spec.specNumber || spec.id}`}
632
+ >
633
+ {isUpdating && (
634
+ <div className="absolute inset-0 rounded-lg bg-background/80 flex items-center justify-center text-xs font-medium z-10">
635
+ Updating...
636
+ </div>
637
+ )}
638
+ <CardHeader className="p-4 pb-2 space-y-1.5">
639
+ <div className="flex items-center justify-between">
640
+ <span className="font-mono text-xs text-muted-foreground/70 group-hover:text-primary/60 transition-colors">
641
+ {spec.specNumber ? `#${spec.specNumber}` : ''}
642
+ </span>
643
+ </div>
644
+ <Link href={`/specs/${spec.specNumber || spec.id}`} className="block">
645
+ <CardTitle className="text-sm font-semibold leading-snug hover:text-primary transition-colors line-clamp-3">
646
+ {spec.title || spec.specName}
647
+ </CardTitle>
648
+ </Link>
649
+ </CardHeader>
650
+ <CardContent className="p-4 pt-2 flex-1 flex flex-col justify-end">
651
+ <div className="flex flex-col gap-3">
652
+ {spec.title && spec.title !== spec.specName && (
653
+ <p className="text-xs font-mono text-muted-foreground truncate opacity-70">
654
+ {spec.specName}
655
+ </p>
656
+ )}
657
+
658
+ <div className="flex items-center justify-between gap-2 pt-1">
659
+ {spec.priority ? <PriorityBadge priority={spec.priority} /> : <div />}
660
+
661
+ {spec.tags && spec.tags.length > 0 && (
662
+ <div className="flex flex-wrap gap-1 justify-end">
663
+ {spec.tags.slice(0, 2).map(tag => (
664
+ <Badge key={tag} variant="outline" className="text-[10px] px-1.5 h-5 font-mono text-muted-foreground/80">
665
+ {tag}
666
+ </Badge>
667
+ ))}
668
+ {spec.tags.length > 2 && (
669
+ <Badge variant="outline" className="text-[10px] px-1.5 h-5 font-mono text-muted-foreground/80">
670
+ +{spec.tags.length - 2}
671
+ </Badge>
672
+ )}
673
+ </div>
411
674
  )}
412
- </>
413
- )}
414
- </div>
675
+ </div>
676
+ </div>
677
+ </CardContent>
678
+ </Card>
679
+ );
680
+ })}
681
+
682
+ {column.specs.length === 0 && (
683
+ <Card className="border-dashed border-gray-300 dark:border-gray-700 bg-transparent">
684
+ <CardContent className="py-8 text-center">
685
+ <Icon className={cn('mx-auto h-8 w-8 mb-2', column.config.colorClass, 'opacity-50')} />
686
+ <p className="text-sm text-muted-foreground">Drop here to move specs</p>
415
687
  </CardContent>
416
688
  </Card>
417
- );
418
- })}
419
- </div>
689
+ )}
690
+ </div>
691
+ )}
420
692
  </div>
421
693
  );
422
694
  })}