prism0x2a 0.7.1 → 0.7.2

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 (300) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-path-routes-manifest.json +1 -0
  3. package/.next/standalone/.next/build-manifest.json +3 -3
  4. package/.next/standalone/.next/prerender-manifest.json +24 -0
  5. package/.next/standalone/.next/required-server-files.json +1 -1
  6. package/.next/standalone/.next/routes-manifest.json +6 -0
  7. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  12. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  13. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  16. package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  17. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  18. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  19. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  20. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  21. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  22. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  23. package/.next/standalone/.next/server/app/amber/capabilities/[id]/page_client-reference-manifest.js +1 -1
  24. package/.next/standalone/.next/server/app/amber/capabilities/page_client-reference-manifest.js +1 -1
  25. package/.next/standalone/.next/server/app/amber/capabilities.html +1 -1
  26. package/.next/standalone/.next/server/app/amber/capabilities.rsc +3 -3
  27. package/.next/standalone/.next/server/app/amber/capabilities.segments/_full.segment.rsc +3 -3
  28. package/.next/standalone/.next/server/app/amber/capabilities.segments/_head.segment.rsc +1 -1
  29. package/.next/standalone/.next/server/app/amber/capabilities.segments/_index.segment.rsc +2 -2
  30. package/.next/standalone/.next/server/app/amber/capabilities.segments/_tree.segment.rsc +2 -2
  31. package/.next/standalone/.next/server/app/amber/capabilities.segments/amber/capabilities/__PAGE__.segment.rsc +2 -2
  32. package/.next/standalone/.next/server/app/amber/capabilities.segments/amber/capabilities.segment.rsc +1 -1
  33. package/.next/standalone/.next/server/app/amber/capabilities.segments/amber.segment.rsc +1 -1
  34. package/.next/standalone/.next/server/app/amber/coverage/page_client-reference-manifest.js +1 -1
  35. package/.next/standalone/.next/server/app/amber/coverage.html +1 -1
  36. package/.next/standalone/.next/server/app/amber/coverage.rsc +3 -3
  37. package/.next/standalone/.next/server/app/amber/coverage.segments/_full.segment.rsc +3 -3
  38. package/.next/standalone/.next/server/app/amber/coverage.segments/_head.segment.rsc +1 -1
  39. package/.next/standalone/.next/server/app/amber/coverage.segments/_index.segment.rsc +2 -2
  40. package/.next/standalone/.next/server/app/amber/coverage.segments/_tree.segment.rsc +2 -2
  41. package/.next/standalone/.next/server/app/amber/coverage.segments/amber/coverage/__PAGE__.segment.rsc +2 -2
  42. package/.next/standalone/.next/server/app/amber/coverage.segments/amber/coverage.segment.rsc +1 -1
  43. package/.next/standalone/.next/server/app/amber/coverage.segments/amber.segment.rsc +1 -1
  44. package/.next/standalone/.next/server/app/amber/files/page_client-reference-manifest.js +1 -1
  45. package/.next/standalone/.next/server/app/amber/files.html +1 -1
  46. package/.next/standalone/.next/server/app/amber/files.rsc +3 -3
  47. package/.next/standalone/.next/server/app/amber/files.segments/_full.segment.rsc +3 -3
  48. package/.next/standalone/.next/server/app/amber/files.segments/_head.segment.rsc +1 -1
  49. package/.next/standalone/.next/server/app/amber/files.segments/_index.segment.rsc +2 -2
  50. package/.next/standalone/.next/server/app/amber/files.segments/_tree.segment.rsc +2 -2
  51. package/.next/standalone/.next/server/app/amber/files.segments/amber/files/__PAGE__.segment.rsc +2 -2
  52. package/.next/standalone/.next/server/app/amber/files.segments/amber/files.segment.rsc +1 -1
  53. package/.next/standalone/.next/server/app/amber/files.segments/amber.segment.rsc +1 -1
  54. package/.next/standalone/.next/server/app/amber/page_client-reference-manifest.js +1 -1
  55. package/.next/standalone/.next/server/app/amber.html +1 -1
  56. package/.next/standalone/.next/server/app/amber.rsc +3 -3
  57. package/.next/standalone/.next/server/app/amber.segments/_full.segment.rsc +3 -3
  58. package/.next/standalone/.next/server/app/amber.segments/_head.segment.rsc +1 -1
  59. package/.next/standalone/.next/server/app/amber.segments/_index.segment.rsc +2 -2
  60. package/.next/standalone/.next/server/app/amber.segments/_tree.segment.rsc +2 -2
  61. package/.next/standalone/.next/server/app/amber.segments/amber/__PAGE__.segment.rsc +2 -2
  62. package/.next/standalone/.next/server/app/amber.segments/amber.segment.rsc +1 -1
  63. package/.next/standalone/.next/server/app/api/amber/scan/route.js.nft.json +1 -1
  64. package/.next/standalone/.next/server/app/api/blue/scan/route.js.nft.json +1 -1
  65. package/.next/standalone/.next/server/app/api/green/cross-layer/route.js.nft.json +1 -1
  66. package/.next/standalone/.next/server/app/api/green/queries/[id]/run/route.js.nft.json +1 -1
  67. package/.next/standalone/.next/server/app/api/monorepo/route.js.nft.json +1 -1
  68. package/.next/standalone/.next/server/app/blue/page_client-reference-manifest.js +1 -1
  69. package/.next/standalone/.next/server/app/blue/recommendations/[id]/page_client-reference-manifest.js +1 -1
  70. package/.next/standalone/.next/server/app/blue/recommendations/page_client-reference-manifest.js +1 -1
  71. package/.next/standalone/.next/server/app/blue/recommendations.html +1 -1
  72. package/.next/standalone/.next/server/app/blue/recommendations.rsc +3 -3
  73. package/.next/standalone/.next/server/app/blue/recommendations.segments/_full.segment.rsc +3 -3
  74. package/.next/standalone/.next/server/app/blue/recommendations.segments/_head.segment.rsc +1 -1
  75. package/.next/standalone/.next/server/app/blue/recommendations.segments/_index.segment.rsc +2 -2
  76. package/.next/standalone/.next/server/app/blue/recommendations.segments/_tree.segment.rsc +2 -2
  77. package/.next/standalone/.next/server/app/blue/recommendations.segments/blue/recommendations/__PAGE__.segment.rsc +2 -2
  78. package/.next/standalone/.next/server/app/blue/recommendations.segments/blue/recommendations.segment.rsc +1 -1
  79. package/.next/standalone/.next/server/app/blue/recommendations.segments/blue.segment.rsc +1 -1
  80. package/.next/standalone/.next/server/app/blue/sessions/[id]/page_client-reference-manifest.js +1 -1
  81. package/.next/standalone/.next/server/app/blue/sessions/page_client-reference-manifest.js +1 -1
  82. package/.next/standalone/.next/server/app/blue/sessions.html +1 -1
  83. package/.next/standalone/.next/server/app/blue/sessions.rsc +3 -3
  84. package/.next/standalone/.next/server/app/blue/sessions.segments/_full.segment.rsc +3 -3
  85. package/.next/standalone/.next/server/app/blue/sessions.segments/_head.segment.rsc +1 -1
  86. package/.next/standalone/.next/server/app/blue/sessions.segments/_index.segment.rsc +2 -2
  87. package/.next/standalone/.next/server/app/blue/sessions.segments/_tree.segment.rsc +2 -2
  88. package/.next/standalone/.next/server/app/blue/sessions.segments/blue/sessions/__PAGE__.segment.rsc +2 -2
  89. package/.next/standalone/.next/server/app/blue/sessions.segments/blue/sessions.segment.rsc +1 -1
  90. package/.next/standalone/.next/server/app/blue/sessions.segments/blue.segment.rsc +1 -1
  91. package/.next/standalone/.next/server/app/blue.html +1 -1
  92. package/.next/standalone/.next/server/app/blue.rsc +3 -3
  93. package/.next/standalone/.next/server/app/blue.segments/_full.segment.rsc +3 -3
  94. package/.next/standalone/.next/server/app/blue.segments/_head.segment.rsc +1 -1
  95. package/.next/standalone/.next/server/app/blue.segments/_index.segment.rsc +2 -2
  96. package/.next/standalone/.next/server/app/blue.segments/_tree.segment.rsc +2 -2
  97. package/.next/standalone/.next/server/app/blue.segments/blue/__PAGE__.segment.rsc +2 -2
  98. package/.next/standalone/.next/server/app/blue.segments/blue.segment.rsc +1 -1
  99. package/.next/standalone/.next/server/app/green/cross-layer/page_client-reference-manifest.js +1 -1
  100. package/.next/standalone/.next/server/app/green/cross-layer.html +1 -1
  101. package/.next/standalone/.next/server/app/green/cross-layer.rsc +3 -3
  102. package/.next/standalone/.next/server/app/green/cross-layer.segments/_full.segment.rsc +3 -3
  103. package/.next/standalone/.next/server/app/green/cross-layer.segments/_head.segment.rsc +1 -1
  104. package/.next/standalone/.next/server/app/green/cross-layer.segments/_index.segment.rsc +2 -2
  105. package/.next/standalone/.next/server/app/green/cross-layer.segments/_tree.segment.rsc +2 -2
  106. package/.next/standalone/.next/server/app/green/cross-layer.segments/green/cross-layer/__PAGE__.segment.rsc +2 -2
  107. package/.next/standalone/.next/server/app/green/cross-layer.segments/green/cross-layer.segment.rsc +1 -1
  108. package/.next/standalone/.next/server/app/green/cross-layer.segments/green.segment.rsc +1 -1
  109. package/.next/standalone/.next/server/app/green/insights/[id]/page_client-reference-manifest.js +1 -1
  110. package/.next/standalone/.next/server/app/green/insights/page_client-reference-manifest.js +1 -1
  111. package/.next/standalone/.next/server/app/green/insights.html +1 -1
  112. package/.next/standalone/.next/server/app/green/insights.rsc +3 -3
  113. package/.next/standalone/.next/server/app/green/insights.segments/_full.segment.rsc +3 -3
  114. package/.next/standalone/.next/server/app/green/insights.segments/_head.segment.rsc +1 -1
  115. package/.next/standalone/.next/server/app/green/insights.segments/_index.segment.rsc +2 -2
  116. package/.next/standalone/.next/server/app/green/insights.segments/_tree.segment.rsc +2 -2
  117. package/.next/standalone/.next/server/app/green/insights.segments/green/insights/__PAGE__.segment.rsc +2 -2
  118. package/.next/standalone/.next/server/app/green/insights.segments/green/insights.segment.rsc +1 -1
  119. package/.next/standalone/.next/server/app/green/insights.segments/green.segment.rsc +1 -1
  120. package/.next/standalone/.next/server/app/green/page_client-reference-manifest.js +1 -1
  121. package/.next/standalone/.next/server/app/green/queries/[id]/page_client-reference-manifest.js +1 -1
  122. package/.next/standalone/.next/server/app/green/queries/page_client-reference-manifest.js +1 -1
  123. package/.next/standalone/.next/server/app/green/queries.html +1 -1
  124. package/.next/standalone/.next/server/app/green/queries.rsc +3 -3
  125. package/.next/standalone/.next/server/app/green/queries.segments/_full.segment.rsc +3 -3
  126. package/.next/standalone/.next/server/app/green/queries.segments/_head.segment.rsc +1 -1
  127. package/.next/standalone/.next/server/app/green/queries.segments/_index.segment.rsc +2 -2
  128. package/.next/standalone/.next/server/app/green/queries.segments/_tree.segment.rsc +2 -2
  129. package/.next/standalone/.next/server/app/green/queries.segments/green/queries/__PAGE__.segment.rsc +2 -2
  130. package/.next/standalone/.next/server/app/green/queries.segments/green/queries.segment.rsc +1 -1
  131. package/.next/standalone/.next/server/app/green/queries.segments/green.segment.rsc +1 -1
  132. package/.next/standalone/.next/server/app/green.html +1 -1
  133. package/.next/standalone/.next/server/app/green.rsc +3 -3
  134. package/.next/standalone/.next/server/app/green.segments/_full.segment.rsc +3 -3
  135. package/.next/standalone/.next/server/app/green.segments/_head.segment.rsc +1 -1
  136. package/.next/standalone/.next/server/app/green.segments/_index.segment.rsc +2 -2
  137. package/.next/standalone/.next/server/app/green.segments/_tree.segment.rsc +2 -2
  138. package/.next/standalone/.next/server/app/green.segments/green/__PAGE__.segment.rsc +2 -2
  139. package/.next/standalone/.next/server/app/green.segments/green.segment.rsc +1 -1
  140. package/.next/standalone/.next/server/app/index.html +1 -1
  141. package/.next/standalone/.next/server/app/index.rsc +3 -3
  142. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  143. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +3 -3
  144. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  145. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
  146. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  147. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  148. package/.next/standalone/.next/server/app/pricing/page/app-paths-manifest.json +3 -0
  149. package/.next/standalone/.next/server/app/pricing/page/build-manifest.json +16 -0
  150. package/.next/standalone/.next/server/app/pricing/page/next-font-manifest.json +10 -0
  151. package/.next/standalone/.next/server/app/pricing/page/react-loadable-manifest.json +1 -0
  152. package/.next/standalone/.next/server/app/pricing/page/server-reference-manifest.json +4 -0
  153. package/.next/standalone/.next/server/app/pricing/page.js +14 -0
  154. package/.next/standalone/.next/server/app/pricing/page.js.map +5 -0
  155. package/.next/standalone/.next/server/app/pricing/page.js.nft.json +1 -0
  156. package/.next/standalone/.next/server/app/pricing/page_client-reference-manifest.js +3 -0
  157. package/.next/standalone/.next/server/app/pricing.html +1 -0
  158. package/.next/standalone/.next/server/app/pricing.meta +15 -0
  159. package/.next/standalone/.next/server/app/pricing.rsc +21 -0
  160. package/.next/standalone/.next/server/app/pricing.segments/_full.segment.rsc +21 -0
  161. package/.next/standalone/.next/server/app/pricing.segments/_head.segment.rsc +6 -0
  162. package/.next/standalone/.next/server/app/pricing.segments/_index.segment.rsc +5 -0
  163. package/.next/standalone/.next/server/app/pricing.segments/_tree.segment.rsc +3 -0
  164. package/.next/standalone/.next/server/app/pricing.segments/pricing/__PAGE__.segment.rsc +9 -0
  165. package/.next/standalone/.next/server/app/pricing.segments/pricing.segment.rsc +5 -0
  166. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  167. package/.next/standalone/.next/server/app/settings.html +2 -2
  168. package/.next/standalone/.next/server/app/settings.rsc +3 -3
  169. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +3 -3
  170. package/.next/standalone/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  171. package/.next/standalone/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  172. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  173. package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  174. package/.next/standalone/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  175. package/.next/standalone/.next/server/app-paths-manifest.json +1 -0
  176. package/.next/standalone/.next/server/chunks/[root-of-the-server]__08rxe0c._.js +1 -1
  177. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0es1n-0._.js +3 -0
  178. package/.next/standalone/.next/server/chunks/ssr/_0a2egyj._.js +1 -1
  179. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_pricing_page_actions_0gvv0qw.js +3 -0
  180. package/.next/standalone/.next/server/chunks/ssr/app_amber_capabilities_[id]_page_tsx_12~.miw._.js +1 -1
  181. package/.next/standalone/.next/server/chunks/ssr/app_amber_capabilities_page_tsx_0.t9mpr._.js +1 -1
  182. package/.next/standalone/.next/server/chunks/ssr/app_amber_coverage_page_tsx_01yia_n._.js +1 -1
  183. package/.next/standalone/.next/server/chunks/ssr/app_amber_files_page_tsx_00pdkc~._.js +1 -1
  184. package/.next/standalone/.next/server/chunks/ssr/app_amber_page_tsx_0ihx6zl._.js +1 -1
  185. package/.next/standalone/.next/server/chunks/ssr/app_blue_page_tsx_0zg5eg-._.js +1 -1
  186. package/.next/standalone/.next/server/chunks/ssr/app_blue_recommendations_[id]_page_tsx_10zzlnx._.js +1 -1
  187. package/.next/standalone/.next/server/chunks/ssr/app_blue_recommendations_page_tsx_08w-50l._.js +1 -1
  188. package/.next/standalone/.next/server/chunks/ssr/app_blue_sessions_[id]_page_tsx_0_~w1xj._.js +1 -1
  189. package/.next/standalone/.next/server/chunks/ssr/app_blue_sessions_page_tsx_0kbuf.c._.js +1 -1
  190. package/.next/standalone/.next/server/chunks/ssr/app_green_cross-layer_page_tsx_0a80o-~._.js +1 -1
  191. package/.next/standalone/.next/server/chunks/ssr/app_green_insights_[id]_page_tsx_0se6uk1._.js +1 -1
  192. package/.next/standalone/.next/server/chunks/ssr/app_green_insights_page_tsx_04g8_lf._.js +1 -1
  193. package/.next/standalone/.next/server/chunks/ssr/app_green_page_tsx_10g2g6w._.js +1 -1
  194. package/.next/standalone/.next/server/chunks/ssr/app_green_queries_[id]_page_tsx_0hg.qma._.js +1 -1
  195. package/.next/standalone/.next/server/chunks/ssr/app_green_queries_page_tsx_0.p0r7z._.js +1 -1
  196. package/.next/standalone/.next/server/chunks/ssr/app_page_tsx_0es_sk2._.js +1 -1
  197. package/.next/standalone/.next/server/chunks/ssr/app_pricing_page_tsx_0uxncj9._.js +3 -0
  198. package/.next/standalone/.next/server/chunks/ssr/app_settings_page_tsx_0~q~t-v._.js +1 -1
  199. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_09d0h78.js +4 -0
  200. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  201. package/.next/standalone/.next/server/next-font-manifest.js +1 -1
  202. package/.next/standalone/.next/server/next-font-manifest.json +3 -0
  203. package/.next/standalone/.next/server/pages/404.html +1 -1
  204. package/.next/standalone/.next/server/pages/500.html +1 -1
  205. package/.next/standalone/.next/static/chunks/{084jj1qvspd5q.js → 0-nogwaahf00r.js} +1 -1
  206. package/.next/standalone/.next/static/chunks/{060eaovbkat-h.js → 0-ozct-0~_~y0.js} +1 -1
  207. package/.next/{static/chunks/0z5b7hbocrn0k.js → standalone/.next/static/chunks/0043va.q9c120.js} +1 -1
  208. package/.next/standalone/.next/static/{static/chunks/13gu~y8285gmc.js → chunks/0062k_6y6ie8k.js} +1 -1
  209. package/.next/standalone/.next/static/chunks/{0~fd5.2v15..-.js → 01x6uo5zvt23j.js} +1 -1
  210. package/.next/standalone/.next/static/chunks/03f4g06bhu.q-.js +1 -0
  211. package/.next/standalone/.next/static/chunks/06ciexs8mfsoh.js +1 -0
  212. package/.next/standalone/.next/static/{static/chunks/0bn7nidxp0z1s.js → chunks/06lbhw~p794rn.js} +1 -1
  213. package/.next/standalone/.next/static/{static/chunks/0pzddagh.5c96.js → chunks/0921_~z_rxr9h.js} +1 -1
  214. package/.next/standalone/.next/static/chunks/{025srq69s.4vw.js → 0_uy4bqezjrpu.js} +1 -1
  215. package/.next/standalone/.next/static/chunks/0aqr1e8db8tr2.js +1 -0
  216. package/.next/{static/chunks/0r_f617o--_ew.js → standalone/.next/static/chunks/0gtjarbzj_b0s.js} +1 -1
  217. package/.next/standalone/.next/static/chunks/0i826dpus7xfj.js +1 -0
  218. package/.next/standalone/.next/static/chunks/0l.f7bl92nc~2.css +2 -0
  219. package/.next/{static/chunks/040ishla0m-l2.js → standalone/.next/static/chunks/0mtsra7dpsxy_.js} +1 -1
  220. package/.next/{static/chunks/03pm.ery8hgop.js → standalone/.next/static/chunks/0nc15zt~yfrj3.js} +1 -1
  221. package/.next/{static/chunks/154-kyu.ej3ea.js → standalone/.next/static/chunks/0ptkiyk6p_hgq.js} +1 -1
  222. package/.next/standalone/.next/static/{static/chunks/05dd-x8ti6pfs.js → chunks/0vsoyv8nkj.rx.js} +1 -1
  223. package/.next/{static/chunks/0xyj3.tdpvqe4.js → standalone/.next/static/chunks/0zpu7b02c6huw.js} +1 -1
  224. package/.next/standalone/.next/static/chunks/{0vuk.7e07_u10.js → 10ibvf69namr1.js} +1 -1
  225. package/.next/standalone/.next/static/{static/chunks/0ck1t6t3dy~gs.js → chunks/1655x4_8fq5li.js} +1 -1
  226. package/.next/standalone/.next/static/static/chunks/{084jj1qvspd5q.js → 0-nogwaahf00r.js} +1 -1
  227. package/.next/{static/chunks/060eaovbkat-h.js → standalone/.next/static/static/chunks/0-ozct-0~_~y0.js} +1 -1
  228. package/.next/standalone/.next/static/static/chunks/{0z5b7hbocrn0k.js → 0043va.q9c120.js} +1 -1
  229. package/.next/{static/chunks/13gu~y8285gmc.js → standalone/.next/static/static/chunks/0062k_6y6ie8k.js} +1 -1
  230. package/.next/{static/chunks/0~fd5.2v15..-.js → standalone/.next/static/static/chunks/01x6uo5zvt23j.js} +1 -1
  231. package/.next/standalone/.next/static/static/chunks/03f4g06bhu.q-.js +1 -0
  232. package/.next/standalone/.next/static/static/chunks/06ciexs8mfsoh.js +1 -0
  233. package/.next/{static/chunks/0bn7nidxp0z1s.js → standalone/.next/static/static/chunks/06lbhw~p794rn.js} +1 -1
  234. package/.next/standalone/.next/static/{chunks/0pzddagh.5c96.js → static/chunks/0921_~z_rxr9h.js} +1 -1
  235. package/.next/{static/chunks/025srq69s.4vw.js → standalone/.next/static/static/chunks/0_uy4bqezjrpu.js} +1 -1
  236. package/.next/standalone/.next/static/static/chunks/0aqr1e8db8tr2.js +1 -0
  237. package/.next/standalone/.next/static/static/chunks/{0r_f617o--_ew.js → 0gtjarbzj_b0s.js} +1 -1
  238. package/.next/standalone/.next/static/static/chunks/0i826dpus7xfj.js +1 -0
  239. package/.next/standalone/.next/static/static/chunks/0l.f7bl92nc~2.css +2 -0
  240. package/.next/standalone/.next/static/static/chunks/{040ishla0m-l2.js → 0mtsra7dpsxy_.js} +1 -1
  241. package/.next/standalone/.next/static/{chunks/03pm.ery8hgop.js → static/chunks/0nc15zt~yfrj3.js} +1 -1
  242. package/.next/standalone/.next/static/static/chunks/{154-kyu.ej3ea.js → 0ptkiyk6p_hgq.js} +1 -1
  243. package/.next/{static/chunks/05dd-x8ti6pfs.js → standalone/.next/static/static/chunks/0vsoyv8nkj.rx.js} +1 -1
  244. package/.next/standalone/.next/static/{chunks/0xyj3.tdpvqe4.js → static/chunks/0zpu7b02c6huw.js} +1 -1
  245. package/.next/standalone/.next/static/static/chunks/{0vuk.7e07_u10.js → 10ibvf69namr1.js} +1 -1
  246. package/.next/{static/chunks/0ck1t6t3dy~gs.js → standalone/.next/static/static/chunks/1655x4_8fq5li.js} +1 -1
  247. package/.next/standalone/CHANGELOG.md +12 -0
  248. package/.next/standalone/app/pricing/page.tsx +289 -0
  249. package/.next/standalone/app/settings/page.tsx +8 -4
  250. package/.next/standalone/components/PrismDock.tsx +1 -0
  251. package/.next/standalone/components/pricing/BillingToggle.tsx +53 -0
  252. package/.next/standalone/components/pricing/FeatureList.tsx +19 -0
  253. package/.next/standalone/components/pricing/PricingCard.tsx +120 -0
  254. package/.next/standalone/package.json +1 -1
  255. package/.next/standalone/server.js +1 -1
  256. package/.next/standalone/tsconfig.tsbuildinfo +1 -1
  257. package/.next/static/chunks/{084jj1qvspd5q.js → 0-nogwaahf00r.js} +1 -1
  258. package/.next/{standalone/.next/static/static/chunks/060eaovbkat-h.js → static/chunks/0-ozct-0~_~y0.js} +1 -1
  259. package/.next/{standalone/.next/static/chunks/0z5b7hbocrn0k.js → static/chunks/0043va.q9c120.js} +1 -1
  260. package/.next/{standalone/.next/static/chunks/13gu~y8285gmc.js → static/chunks/0062k_6y6ie8k.js} +1 -1
  261. package/.next/{standalone/.next/static/static/chunks/0~fd5.2v15..-.js → static/chunks/01x6uo5zvt23j.js} +1 -1
  262. package/.next/static/chunks/03f4g06bhu.q-.js +1 -0
  263. package/.next/static/chunks/06ciexs8mfsoh.js +1 -0
  264. package/.next/{standalone/.next/static/chunks/0bn7nidxp0z1s.js → static/chunks/06lbhw~p794rn.js} +1 -1
  265. package/.next/static/chunks/{0pzddagh.5c96.js → 0921_~z_rxr9h.js} +1 -1
  266. package/.next/{standalone/.next/static/static/chunks/025srq69s.4vw.js → static/chunks/0_uy4bqezjrpu.js} +1 -1
  267. package/.next/static/chunks/0aqr1e8db8tr2.js +1 -0
  268. package/.next/{standalone/.next/static/chunks/0r_f617o--_ew.js → static/chunks/0gtjarbzj_b0s.js} +1 -1
  269. package/.next/static/chunks/0i826dpus7xfj.js +1 -0
  270. package/.next/static/chunks/0l.f7bl92nc~2.css +2 -0
  271. package/.next/{standalone/.next/static/chunks/040ishla0m-l2.js → static/chunks/0mtsra7dpsxy_.js} +1 -1
  272. package/.next/{standalone/.next/static/static/chunks/03pm.ery8hgop.js → static/chunks/0nc15zt~yfrj3.js} +1 -1
  273. package/.next/{standalone/.next/static/chunks/154-kyu.ej3ea.js → static/chunks/0ptkiyk6p_hgq.js} +1 -1
  274. package/.next/{standalone/.next/static/chunks/05dd-x8ti6pfs.js → static/chunks/0vsoyv8nkj.rx.js} +1 -1
  275. package/.next/{standalone/.next/static/static/chunks/0xyj3.tdpvqe4.js → static/chunks/0zpu7b02c6huw.js} +1 -1
  276. package/.next/static/chunks/{0vuk.7e07_u10.js → 10ibvf69namr1.js} +1 -1
  277. package/.next/{standalone/.next/static/chunks/0ck1t6t3dy~gs.js → static/chunks/1655x4_8fq5li.js} +1 -1
  278. package/CHANGELOG.md +12 -0
  279. package/package.json +1 -1
  280. package/.next/standalone/.next/static/chunks/0-u-st8-.soco.js +0 -1
  281. package/.next/standalone/.next/static/chunks/07bef4gh~ubvq.js +0 -1
  282. package/.next/standalone/.next/static/chunks/07~.mame73grt.js +0 -1
  283. package/.next/standalone/.next/static/chunks/0ddo77uynla4l.css +0 -2
  284. package/.next/standalone/.next/static/static/chunks/0-u-st8-.soco.js +0 -1
  285. package/.next/standalone/.next/static/static/chunks/07bef4gh~ubvq.js +0 -1
  286. package/.next/standalone/.next/static/static/chunks/07~.mame73grt.js +0 -1
  287. package/.next/standalone/.next/static/static/chunks/0ddo77uynla4l.css +0 -2
  288. package/.next/static/chunks/0-u-st8-.soco.js +0 -1
  289. package/.next/static/chunks/07bef4gh~ubvq.js +0 -1
  290. package/.next/static/chunks/07~.mame73grt.js +0 -1
  291. package/.next/static/chunks/0ddo77uynla4l.css +0 -2
  292. /package/.next/standalone/.next/static/{NZmaO_6ZZEbF4JCKrJtF0 → W2AhxwlOVhsTt-b4T3Mjc}/_buildManifest.js +0 -0
  293. /package/.next/standalone/.next/static/{NZmaO_6ZZEbF4JCKrJtF0 → W2AhxwlOVhsTt-b4T3Mjc}/_clientMiddlewareManifest.js +0 -0
  294. /package/.next/standalone/.next/static/{NZmaO_6ZZEbF4JCKrJtF0 → W2AhxwlOVhsTt-b4T3Mjc}/_ssgManifest.js +0 -0
  295. /package/.next/standalone/.next/static/static/{NZmaO_6ZZEbF4JCKrJtF0 → W2AhxwlOVhsTt-b4T3Mjc}/_buildManifest.js +0 -0
  296. /package/.next/standalone/.next/static/static/{NZmaO_6ZZEbF4JCKrJtF0 → W2AhxwlOVhsTt-b4T3Mjc}/_clientMiddlewareManifest.js +0 -0
  297. /package/.next/standalone/.next/static/static/{NZmaO_6ZZEbF4JCKrJtF0 → W2AhxwlOVhsTt-b4T3Mjc}/_ssgManifest.js +0 -0
  298. /package/.next/static/{NZmaO_6ZZEbF4JCKrJtF0 → W2AhxwlOVhsTt-b4T3Mjc}/_buildManifest.js +0 -0
  299. /package/.next/static/{NZmaO_6ZZEbF4JCKrJtF0 → W2AhxwlOVhsTt-b4T3Mjc}/_clientMiddlewareManifest.js +0 -0
  300. /package/.next/static/{NZmaO_6ZZEbF4JCKrJtF0 → W2AhxwlOVhsTt-b4T3Mjc}/_ssgManifest.js +0 -0
@@ -0,0 +1,289 @@
1
+ "use client";
2
+
3
+ import { useState } from "react";
4
+ import { PrismDock } from "@/components/PrismDock";
5
+ import { BillingToggle } from "@/components/pricing/BillingToggle";
6
+ import { PricingCard, type PricingCardProps } from "@/components/pricing/PricingCard";
7
+ import { useLicense } from "@/lib/prism/hooks/useLicense";
8
+ import { useTargetPath } from "@/lib/prism/hooks/useTargetPath";
9
+ import type { LicenseTier } from "@/lib/prism/license/types";
10
+
11
+ // ─── Plan definitions ──────────────────────────────────────────────────────────
12
+
13
+ type PlanDef = Omit<PricingCardProps, "yearly" | "isCurrent"> & { tier: LicenseTier };
14
+
15
+ const PRISM_PLANS: PlanDef[] = [
16
+ {
17
+ tier: "free",
18
+ name: "Free",
19
+ tagline: "For individuals exploring the tool",
20
+ monthlyPrice: 0,
21
+ yearlyMonthlyPrice: 0,
22
+ checkoutUrl: null,
23
+ accentColor: "rgb(148,163,184)",
24
+ accentBg: "rgba(148,163,184,0.08)",
25
+ accentBorder: "rgba(148,163,184,0.2)",
26
+ features: [
27
+ "Up to 250 LOC scanned",
28
+ "Single-file insights",
29
+ "Basic LLM queries",
30
+ ],
31
+ },
32
+ {
33
+ tier: "pro",
34
+ name: "Pro",
35
+ tagline: "For professional developers",
36
+ monthlyPrice: 39,
37
+ yearlyMonthlyPrice: 32,
38
+ checkoutUrl: "https://prism0x2a.lemonsqueezy.com/checkout/buy/a9097951-5d54-438c-89ef-3e093d88f6c6",
39
+ highlighted: true,
40
+ accentColor: "rgb(96,165,250)",
41
+ accentBg: "rgba(59,130,246,0.12)",
42
+ accentBorder: "rgba(59,130,246,0.35)",
43
+ features: [
44
+ "Unlimited LOC",
45
+ "Monorepo support",
46
+ "Aggregate scan",
47
+ "Cross-workspace insights",
48
+ "LLM insights",
49
+ "Custom queries",
50
+ ],
51
+ },
52
+ {
53
+ tier: "team",
54
+ name: "Team",
55
+ tagline: "For engineering teams",
56
+ monthlyPrice: 99,
57
+ yearlyMonthlyPrice: 82,
58
+ unit: "dev",
59
+ checkoutUrl: "https://prism0x2a.lemonsqueezy.com/checkout/buy/ddcff26c-303a-4993-a7a7-73129b150a97",
60
+ accentColor: "rgb(52,211,153)",
61
+ accentBg: "rgba(52,211,153,0.1)",
62
+ accentBorder: "rgba(52,211,153,0.3)",
63
+ features: [
64
+ "Everything in Pro",
65
+ "Cross-layer context",
66
+ "Auto insights",
67
+ "Team sync",
68
+ "CI integration",
69
+ "Priority support",
70
+ ],
71
+ },
72
+ ];
73
+
74
+ const FORGE_PLAN: PlanDef = {
75
+ tier: "forge-pro",
76
+ name: "forge0x2B Pro",
77
+ tagline: "Unlimited AI generation for forge users",
78
+ monthlyPrice: 29,
79
+ yearlyMonthlyPrice: 24,
80
+ checkoutUrl: "https://prism0x2a.lemonsqueezy.com/checkout/buy/21c1146e-9fea-4c32-a4fc-c5a5e64215e7",
81
+ accentColor: "rgb(244,114,182)",
82
+ accentBg: "rgba(236,72,153,0.12)",
83
+ accentBorder: "rgba(236,72,153,0.3)",
84
+ features: [
85
+ "Unlimited forge generation",
86
+ "Unlimited forge generation (AI)",
87
+ "No prism0x2A features",
88
+ ],
89
+ };
90
+
91
+ const SPECTRUM_PLAN: PlanDef = {
92
+ tier: "spectrum",
93
+ name: "Spectrum 0x55",
94
+ tagline: "prism Pro + forge Pro — the full stack",
95
+ monthlyPrice: 49,
96
+ yearlyMonthlyPrice: 41,
97
+ checkoutUrl: "https://prism0x2a.lemonsqueezy.com/checkout/buy/64d25b45-7c4a-410d-b4aa-7504f98ab5f7",
98
+ highlighted: true,
99
+ accentColor: "rgb(167,139,250)",
100
+ accentBg: "rgba(99,102,241,0.15)",
101
+ accentBorder: "rgba(167,139,250,0.35)",
102
+ features: [
103
+ "Everything in prism Pro",
104
+ "Everything in forge Pro",
105
+ "Best value bundle",
106
+ ],
107
+ };
108
+
109
+ const FAQ: { q: string; a: string }[] = [
110
+ {
111
+ q: "What is the difference between Pro and Team?",
112
+ a: "Pro gives one developer unlimited scans, LLM insights, and monorepo support. Team adds cross-layer context, auto insights, CI integration, and team sync — billed per developer seat.",
113
+ },
114
+ {
115
+ q: "What is Spectrum 0x55?",
116
+ a: "Spectrum 0x55 bundles prism0x2A Pro and forge0x2B Pro at a discounted price. You get all prism features plus unlimited AI generation in forge — for €49/mo instead of €68/mo.",
117
+ },
118
+ {
119
+ q: "Can I switch plans?",
120
+ a: "Yes — manage your subscription at any time via your Lemonsqueezy billing portal. Upgrades take effect immediately; downgrades apply at the next billing cycle.",
121
+ },
122
+ {
123
+ q: "Is there a free trial?",
124
+ a: "The Free tier is available indefinitely. Paid plans are billed monthly or yearly with no trial period, but you can cancel at any time.",
125
+ },
126
+ {
127
+ q: "How does offline grace period work?",
128
+ a: "prism validates your license once every 30 days. If it cannot reach Lemonsqueezy, you continue working for a 7-day grace period before features are restricted.",
129
+ },
130
+ ];
131
+
132
+ // ─── Page ──────────────────────────────────────────────────────────────────────
133
+
134
+ export default function PricingPage() {
135
+ const [yearly, setYearly] = useState(false);
136
+ const { tq } = useTargetPath();
137
+ const { license } = useLicense(tq);
138
+ const currentTier = license?.tier ?? "free";
139
+
140
+ return (
141
+ <div className="flex flex-col min-h-screen" style={{ background: "var(--bg-app)" }}>
142
+ <PrismDock />
143
+
144
+ <main className="flex-1 flex flex-col items-center px-6 pt-32 pb-24 gap-16">
145
+
146
+ {/* Hero */}
147
+ <div className="text-center flex flex-col items-center gap-4 max-w-xl">
148
+ <h1 className="text-4xl font-bold text-slate-100 tracking-tight">
149
+ Simple, transparent pricing
150
+ </h1>
151
+ <p className="text-slate-400 text-base leading-relaxed">
152
+ Start free. Upgrade when your codebase grows. Cancel anytime.
153
+ </p>
154
+ <BillingToggle yearly={yearly} onChange={setYearly} />
155
+ </div>
156
+
157
+ {/* prism plans */}
158
+ <section className="w-full max-w-4xl flex flex-col gap-6">
159
+ <h2 className="text-xs font-semibold text-slate-500 uppercase tracking-widest">
160
+ prism<span className="font-mono">0x2A</span> — Code intelligence
161
+ </h2>
162
+ <div className="grid grid-cols-1 sm:grid-cols-3 gap-4">
163
+ {PRISM_PLANS.map((plan) => (
164
+ <PricingCard
165
+ key={plan.tier}
166
+ {...plan}
167
+ yearly={yearly}
168
+ isCurrent={currentTier === plan.tier}
169
+ />
170
+ ))}
171
+ </div>
172
+ </section>
173
+
174
+ {/* forge + spectrum */}
175
+ <section className="w-full max-w-4xl flex flex-col gap-6">
176
+ <h2 className="text-xs font-semibold text-slate-500 uppercase tracking-widest">
177
+ forge<span className="font-mono">0x2B</span> + bundles
178
+ </h2>
179
+ <div className="grid grid-cols-1 sm:grid-cols-2 gap-4">
180
+ <PricingCard
181
+ {...FORGE_PLAN}
182
+ yearly={yearly}
183
+ isCurrent={currentTier === "forge-pro"}
184
+ />
185
+ <div className="relative">
186
+ <div
187
+ className="absolute -top-3 left-1/2 -translate-x-1/2 text-xs px-3 py-0.5 rounded-full font-semibold z-10"
188
+ style={{
189
+ background: "linear-gradient(90deg, rgba(59,130,246,0.2), rgba(236,72,153,0.2))",
190
+ color: "rgb(167,139,250)",
191
+ border: "1px solid rgba(167,139,250,0.3)",
192
+ }}
193
+ >
194
+ Best value
195
+ </div>
196
+ <PricingCard
197
+ {...SPECTRUM_PLAN}
198
+ yearly={yearly}
199
+ isCurrent={currentTier === "spectrum"}
200
+ />
201
+ </div>
202
+ </div>
203
+ </section>
204
+
205
+ {/* Tier comparison callout */}
206
+ <section className="w-full max-w-4xl">
207
+ <div
208
+ className="rounded-xl p-6 flex flex-col gap-4"
209
+ style={{
210
+ background: "var(--surface-panel)",
211
+ border: "1px solid var(--border-default)",
212
+ }}
213
+ >
214
+ <h2 className="text-xs font-semibold text-slate-500 uppercase tracking-widest">
215
+ Tier feature map
216
+ </h2>
217
+ <div className="overflow-x-auto">
218
+ <table className="w-full text-xs text-slate-400 border-collapse">
219
+ <thead>
220
+ <tr className="border-b" style={{ borderColor: "rgba(51,65,85,0.4)" }}>
221
+ <th className="text-left py-2 pr-4 font-medium text-slate-300 w-1/3">Feature</th>
222
+ <th className="py-2 px-2 font-medium text-slate-400">Free</th>
223
+ <th className="py-2 px-2 font-medium text-sky-400">Pro</th>
224
+ <th className="py-2 px-2 font-medium text-emerald-400">Team</th>
225
+ <th className="py-2 px-2 font-medium text-violet-400">Spectrum</th>
226
+ <th className="py-2 px-2 font-medium text-pink-400">forge Pro</th>
227
+ </tr>
228
+ </thead>
229
+ <tbody>
230
+ {[
231
+ ["Unlimited LOC", false, true, true, true, false],
232
+ ["Monorepo support", false, true, true, true, false],
233
+ ["Aggregate scan", false, true, true, true, false],
234
+ ["LLM insights", false, true, true, true, false],
235
+ ["Custom queries", false, true, true, true, false],
236
+ ["Cross-layer context", false, false, true, false, false],
237
+ ["Auto insights", false, false, true, false, false],
238
+ ["Team sync / CI", false, false, true, false, false],
239
+ ["forge unlimited gen.", false, false, false, true, true ],
240
+ ].map(([label, free, pro, team, spectrum, forge]) => (
241
+ <tr key={String(label)} className="border-b" style={{ borderColor: "rgba(51,65,85,0.2)" }}>
242
+ <td className="py-2 pr-4 text-slate-400">{String(label)}</td>
243
+ {[free, pro, team, spectrum, forge].map((v, i) => (
244
+ <td key={i} className="py-2 px-2 text-center">
245
+ {v ? (
246
+ <span style={{ color: ["rgb(71,85,105)","rgb(96,165,250)","rgb(52,211,153)","rgb(167,139,250)","rgb(244,114,182)"][i] }}>✦</span>
247
+ ) : (
248
+ <span className="text-slate-700">–</span>
249
+ )}
250
+ </td>
251
+ ))}
252
+ </tr>
253
+ ))}
254
+ </tbody>
255
+ </table>
256
+ </div>
257
+ </div>
258
+ </section>
259
+
260
+ {/* FAQ */}
261
+ <section className="w-full max-w-2xl flex flex-col gap-4">
262
+ <h2 className="text-xs font-semibold text-slate-500 uppercase tracking-widest">FAQ</h2>
263
+ <div className="flex flex-col gap-3">
264
+ {FAQ.map(({ q, a }) => (
265
+ <details
266
+ key={q}
267
+ className="group rounded-xl px-5 py-4"
268
+ style={{
269
+ background: "var(--surface-panel)",
270
+ border: "1px solid var(--border-default)",
271
+ }}
272
+ >
273
+ <summary className="text-sm font-medium text-slate-300 cursor-pointer list-none flex items-center justify-between gap-2">
274
+ {q}
275
+ <span className="text-slate-600 group-open:rotate-180 transition-transform text-xs">▼</span>
276
+ </summary>
277
+ <p className="mt-3 text-sm text-slate-500 leading-relaxed">{a}</p>
278
+ </details>
279
+ ))}
280
+ </div>
281
+ </section>
282
+ </main>
283
+
284
+ <footer className="text-center py-4 text-xs text-slate-600">
285
+ <span className="font-mono">0x2A = 42.</span> The answer to all questions.
286
+ </footer>
287
+ </div>
288
+ );
289
+ }
@@ -1,6 +1,7 @@
1
1
  "use client";
2
2
 
3
3
  import { useState, useEffect, useCallback } from "react";
4
+ import Link from "next/link";
4
5
  import { ANTHROPIC_MODELS, type PrismConfig } from "@/lib/prism/configSchema";
5
6
  import { PrismDock } from "@/components/PrismDock";
6
7
  import { useLicense } from "@/lib/prism/hooks/useLicense";
@@ -666,18 +667,21 @@ export default function SettingsPage() {
666
667
  >
667
668
  Activate
668
669
  </button>
670
+ <Link
671
+ href="/pricing"
672
+ className="text-xs text-indigo-400 hover:text-indigo-300 transition-colors"
673
+ >
674
+ View Plans →
675
+ </Link>
669
676
  <a
670
677
  href="https://prism0x2a.lemonsqueezy.com"
671
678
  target="_blank"
672
679
  rel="noopener noreferrer"
673
- className="text-xs text-indigo-400 hover:text-indigo-300 transition-colors"
680
+ className="text-xs text-slate-500 hover:text-slate-400 transition-colors"
674
681
  >
675
682
  Get a license →
676
683
  </a>
677
684
  </div>
678
- <p className="text-xs text-slate-600">
679
- Pro $39/mo · Team $99/dev/mo · Spectrum 0x55 $49/mo (bundle)
680
- </p>
681
685
  </div>
682
686
  )}
683
687
 
@@ -11,6 +11,7 @@ const NAV = [
11
11
  { href: "/blue", label: "BLUE", color: "rgb(59,130,246)" },
12
12
  { href: "/amber", label: "AMBER", color: "rgb(251,191,36)" },
13
13
  { href: "/green", label: "GREEN", color: "rgb(52,211,153)" },
14
+ { href: "/pricing", label: "Plans", color: "rgb(167,139,250)" },
14
15
  { href: "/settings", label: "⚙", color: undefined },
15
16
  ] as const;
16
17
 
@@ -0,0 +1,53 @@
1
+ "use client";
2
+
3
+ interface BillingToggleProps {
4
+ yearly: boolean;
5
+ onChange: (yearly: boolean) => void;
6
+ }
7
+
8
+ export function BillingToggle({ yearly, onChange }: BillingToggleProps) {
9
+ return (
10
+ <div className="flex items-center gap-3">
11
+ <button
12
+ onClick={() => onChange(false)}
13
+ className="text-sm font-medium transition-colors"
14
+ style={{ color: yearly ? "rgba(148,163,184,0.6)" : "rgb(226,232,240)" }}
15
+ >
16
+ Monthly
17
+ </button>
18
+
19
+ <button
20
+ onClick={() => onChange(!yearly)}
21
+ className="relative w-11 h-6 rounded-full transition-colors"
22
+ style={{
23
+ background: yearly ? "rgb(99,102,241)" : "rgba(51,65,85,0.6)",
24
+ border: "1px solid rgba(71,85,105,0.5)",
25
+ }}
26
+ aria-label="Toggle billing period"
27
+ >
28
+ <span
29
+ className="absolute top-0.5 w-5 h-5 rounded-full transition-transform"
30
+ style={{
31
+ left: "2px",
32
+ background: "rgb(226,232,240)",
33
+ transform: yearly ? "translateX(20px)" : "translateX(0)",
34
+ }}
35
+ />
36
+ </button>
37
+
38
+ <button
39
+ onClick={() => onChange(true)}
40
+ className="text-sm font-medium transition-colors flex items-center gap-1.5"
41
+ style={{ color: yearly ? "rgb(226,232,240)" : "rgba(148,163,184,0.6)" }}
42
+ >
43
+ Yearly
44
+ <span
45
+ className="text-xs px-1.5 py-0.5 rounded-full font-semibold"
46
+ style={{ background: "rgba(52,211,153,0.15)", color: "rgb(52,211,153)" }}
47
+ >
48
+ −17%
49
+ </span>
50
+ </button>
51
+ </div>
52
+ );
53
+ }
@@ -0,0 +1,19 @@
1
+ interface FeatureListProps {
2
+ features: string[];
3
+ dimmed?: boolean;
4
+ }
5
+
6
+ export function FeatureList({ features, dimmed }: FeatureListProps) {
7
+ return (
8
+ <ul className="flex flex-col gap-2">
9
+ {features.map((f) => (
10
+ <li key={f} className="flex items-start gap-2 text-sm" style={{ color: dimmed ? "rgba(148,163,184,0.5)" : "rgb(148,163,184)" }}>
11
+ <span className="mt-0.5 flex-shrink-0" style={{ color: dimmed ? "rgba(71,85,105,0.5)" : "rgb(71,85,105)" }}>
12
+
13
+ </span>
14
+ {f}
15
+ </li>
16
+ ))}
17
+ </ul>
18
+ );
19
+ }
@@ -0,0 +1,120 @@
1
+ import Link from "next/link";
2
+ import { FeatureList } from "./FeatureList";
3
+ import type { LicenseTier } from "@/lib/prism/license/types";
4
+
5
+ export interface PricingCardProps {
6
+ tier: LicenseTier;
7
+ name: string;
8
+ tagline: string;
9
+ monthlyPrice: number;
10
+ yearlyMonthlyPrice: number;
11
+ yearly: boolean;
12
+ unit?: string;
13
+ checkoutUrl: string | null;
14
+ features: string[];
15
+ highlighted?: boolean;
16
+ isCurrent?: boolean;
17
+ accentColor: string;
18
+ accentBg: string;
19
+ accentBorder: string;
20
+ }
21
+
22
+ export function PricingCard({
23
+ name,
24
+ tagline,
25
+ monthlyPrice,
26
+ yearlyMonthlyPrice,
27
+ yearly,
28
+ unit,
29
+ checkoutUrl,
30
+ features,
31
+ highlighted,
32
+ isCurrent,
33
+ accentColor,
34
+ accentBg,
35
+ accentBorder,
36
+ }: PricingCardProps) {
37
+ const displayPrice = yearly ? yearlyMonthlyPrice : monthlyPrice;
38
+ const isFree = monthlyPrice === 0;
39
+
40
+ return (
41
+ <div
42
+ className="relative flex flex-col rounded-2xl p-6 gap-5"
43
+ style={{
44
+ background: highlighted ? "var(--surface-elevated)" : "var(--surface-panel)",
45
+ border: highlighted ? `1px solid ${accentBorder}` : "1px solid var(--border-default)",
46
+ boxShadow: highlighted
47
+ ? `0 0 0 1px ${accentBorder}, 0 4px 24px rgba(15,23,42,.2), inset 0 1px 0 rgba(255,255,255,.06)`
48
+ : "0 1px 2px rgba(15,23,42,.05), 0 4px 16px rgba(15,23,42,.08), inset 0 1px 0 rgba(255,255,255,.04)",
49
+ }}
50
+ >
51
+ {highlighted && (
52
+ <div
53
+ className="absolute -top-px left-6 right-6 h-px rounded-full"
54
+ style={{ background: `linear-gradient(90deg, transparent, ${accentColor}, transparent)` }}
55
+ />
56
+ )}
57
+
58
+ {isCurrent && (
59
+ <span
60
+ className="absolute top-4 right-4 text-xs px-2 py-0.5 rounded-full font-semibold"
61
+ style={{ background: accentBg, color: accentColor, border: `1px solid ${accentBorder}` }}
62
+ >
63
+ Current plan
64
+ </span>
65
+ )}
66
+
67
+ {/* Header */}
68
+ <div className="flex flex-col gap-1">
69
+ <h3 className="text-base font-semibold" style={{ color: accentColor }}>{name}</h3>
70
+ <p className="text-xs text-slate-500">{tagline}</p>
71
+ </div>
72
+
73
+ {/* Price */}
74
+ <div className="flex items-end gap-1.5">
75
+ {isFree ? (
76
+ <span className="text-3xl font-bold text-slate-100">Free</span>
77
+ ) : (
78
+ <>
79
+ <span className="text-3xl font-bold text-slate-100">€{displayPrice}</span>
80
+ <span className="text-sm text-slate-500 mb-1">/mo{unit ? ` /${unit}` : ""}</span>
81
+ </>
82
+ )}
83
+ </div>
84
+ {!isFree && yearly && (
85
+ <p className="text-xs text-slate-500 -mt-3">
86
+ billed €{displayPrice * 12}/yr — save €{(monthlyPrice - yearlyMonthlyPrice) * 12}/yr
87
+ </p>
88
+ )}
89
+
90
+ {/* CTA */}
91
+ {isFree ? (
92
+ <div
93
+ className="text-center py-2 rounded-lg text-sm font-semibold text-slate-500"
94
+ style={{ background: "rgba(51,65,85,0.2)", border: "1px solid rgba(51,65,85,0.3)" }}
95
+ >
96
+ {isCurrent ? "Your current plan" : "No payment needed"}
97
+ </div>
98
+ ) : checkoutUrl ? (
99
+ <Link
100
+ href={checkoutUrl}
101
+ target="_blank"
102
+ rel="noopener noreferrer"
103
+ className="text-center py-2.5 rounded-lg text-sm font-semibold transition-all"
104
+ style={{
105
+ background: isCurrent ? "transparent" : accentBg,
106
+ color: isCurrent ? accentColor : accentColor,
107
+ border: `1px solid ${accentBorder}`,
108
+ }}
109
+ >
110
+ {isCurrent ? "Manage subscription →" : "Get started →"}
111
+ </Link>
112
+ ) : null}
113
+
114
+ {/* Features */}
115
+ <div className="pt-1 border-t" style={{ borderColor: "var(--border-default)" }}>
116
+ <FeatureList features={features} />
117
+ </div>
118
+ </div>
119
+ );
120
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prism0x2a",
3
- "version": "0.7.1",
3
+ "version": "0.7.2",
4
4
  "description": "prism0x2A — local-first code intelligence dashboard. Powered by prismlens.",
5
5
  "private": false,
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -9,7 +9,7 @@ const currentPort = parseInt(process.env.PORT, 10) || 3000
9
9
  const hostname = process.env.HOSTNAME || '0.0.0.0'
10
10
 
11
11
  let keepAliveTimeout = parseInt(process.env.KEEP_ALIVE_TIMEOUT, 10)
12
- const nextConfig = {"env":{"NEXT_PUBLIC_PRISM_VERSION":"0.7.1"},"webpack":null,"typescript":{"ignoreBuildErrors":false},"typedRoutes":false,"distDir":"./.next","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.ts","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"poweredByHeader":true,"compress":true,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":14400,"formats":["image/webp"],"maximumRedirects":3,"maximumResponseBody":50000000,"dangerouslyAllowLocalIP":false,"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"attachment","localPatterns":[{"pathname":"**","search":""}],"remotePatterns":[],"qualities":[75],"unoptimized":false,"customCacheHandler":false},"devIndicators":{"position":"bottom-left"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"excludeDefaultMomentLocales":true,"reactProductionProfiling":false,"reactStrictMode":null,"reactMaxHeadersLength":6000,"httpAgentOptions":{"keepAlive":true},"logging":{"serverFunctions":true,"browserToTerminal":"warn"},"compiler":{},"expireTime":31536000,"staticPageGenerationTimeout":60,"output":"standalone","modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"outputFileTracingRoot":"/Users/schuldes/prism-dashboard","cacheComponents":false,"cacheLife":{"default":{"stale":300,"revalidate":900,"expire":4294967294},"seconds":{"stale":30,"revalidate":1,"expire":60},"minutes":{"stale":300,"revalidate":60,"expire":3600},"hours":{"stale":300,"revalidate":3600,"expire":86400},"days":{"stale":300,"revalidate":86400,"expire":604800},"weeks":{"stale":300,"revalidate":604800,"expire":2592000},"max":{"stale":300,"revalidate":2592000,"expire":31536000}},"cacheHandlers":{},"experimental":{"appNewScrollHandler":false,"useSkewCookie":false,"cssChunking":true,"multiZoneDraftMode":false,"appNavFailHandling":false,"prerenderEarlyExit":true,"serverMinification":true,"linkNoTouchStart":false,"caseSensitiveRoutes":false,"cachedNavigations":false,"partialFallbacks":false,"dynamicOnHover":false,"varyParams":false,"prefetchInlining":false,"preloadEntriesOnStart":true,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","proxyPrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":10,"memoryBasedWorkersCount":false,"imgOptConcurrency":null,"imgOptTimeoutInSeconds":7,"imgOptMaxInputPixels":268402689,"imgOptSequentialRead":null,"imgOptSkipMetadata":null,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"swcTraceProfiling":false,"forceSwcTransforms":false,"largePageDataBytes":128000,"typedEnv":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"authInterrupts":false,"webpackMemoryOptimizations":false,"optimizeServerReact":true,"strictRouteTypes":false,"viewTransition":false,"removeUncaughtErrorAndRejectionListeners":false,"validateRSCRequestHeaders":false,"staleTimes":{"dynamic":0,"static":300},"reactDebugChannel":true,"serverComponentsHmrCache":true,"staticGenerationMaxConcurrency":8,"staticGenerationMinPagesPerWorker":25,"transitionIndicator":false,"gestureTransition":false,"inlineCss":false,"useCache":false,"globalNotFound":false,"browserDebugInfoInTerminal":"warn","lockDistDir":true,"proxyClientMaxBodySize":10485760,"hideLogsAfterAbort":false,"mcpServer":true,"turbopackFileSystemCacheForDev":true,"turbopackFileSystemCacheForBuild":false,"turbopackInferModuleSideEffects":true,"turbopackPluginRuntimeStrategy":"childProcesses","optimizePackageImports":["lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","effect","@effect/schema","@effect/platform","@effect/platform-node","@effect/platform-browser","@effect/platform-bun","@effect/sql","@effect/sql-mssql","@effect/sql-mysql2","@effect/sql-pg","@effect/sql-sqlite-node","@effect/sql-sqlite-bun","@effect/sql-sqlite-wasm","@effect/sql-sqlite-react-native","@effect/rpc","@effect/rpc-http","@effect/typeclass","@effect/experimental","@effect/opentelemetry","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"trustHostHeader":false,"isExperimentalCompile":false},"htmlLimitedBots":"[\\w-]+-Google|Google-[\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight","bundlePagesRouterDependencies":false,"configFileName":"next.config.ts","turbopack":{"root":"/Users/schuldes/prism-dashboard"},"distDirRoot":".next"}
12
+ const nextConfig = {"env":{"NEXT_PUBLIC_PRISM_VERSION":"0.7.2"},"webpack":null,"typescript":{"ignoreBuildErrors":false},"typedRoutes":false,"distDir":"./.next","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.ts","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"poweredByHeader":true,"compress":true,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":14400,"formats":["image/webp"],"maximumRedirects":3,"maximumResponseBody":50000000,"dangerouslyAllowLocalIP":false,"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"attachment","localPatterns":[{"pathname":"**","search":""}],"remotePatterns":[],"qualities":[75],"unoptimized":false,"customCacheHandler":false},"devIndicators":{"position":"bottom-left"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"excludeDefaultMomentLocales":true,"reactProductionProfiling":false,"reactStrictMode":null,"reactMaxHeadersLength":6000,"httpAgentOptions":{"keepAlive":true},"logging":{"serverFunctions":true,"browserToTerminal":"warn"},"compiler":{},"expireTime":31536000,"staticPageGenerationTimeout":60,"output":"standalone","modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"outputFileTracingRoot":"/Users/schuldes/prism-dashboard","cacheComponents":false,"cacheLife":{"default":{"stale":300,"revalidate":900,"expire":4294967294},"seconds":{"stale":30,"revalidate":1,"expire":60},"minutes":{"stale":300,"revalidate":60,"expire":3600},"hours":{"stale":300,"revalidate":3600,"expire":86400},"days":{"stale":300,"revalidate":86400,"expire":604800},"weeks":{"stale":300,"revalidate":604800,"expire":2592000},"max":{"stale":300,"revalidate":2592000,"expire":31536000}},"cacheHandlers":{},"experimental":{"appNewScrollHandler":false,"useSkewCookie":false,"cssChunking":true,"multiZoneDraftMode":false,"appNavFailHandling":false,"prerenderEarlyExit":true,"serverMinification":true,"linkNoTouchStart":false,"caseSensitiveRoutes":false,"cachedNavigations":false,"partialFallbacks":false,"dynamicOnHover":false,"varyParams":false,"prefetchInlining":false,"preloadEntriesOnStart":true,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","proxyPrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":10,"memoryBasedWorkersCount":false,"imgOptConcurrency":null,"imgOptTimeoutInSeconds":7,"imgOptMaxInputPixels":268402689,"imgOptSequentialRead":null,"imgOptSkipMetadata":null,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"swcTraceProfiling":false,"forceSwcTransforms":false,"largePageDataBytes":128000,"typedEnv":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"authInterrupts":false,"webpackMemoryOptimizations":false,"optimizeServerReact":true,"strictRouteTypes":false,"viewTransition":false,"removeUncaughtErrorAndRejectionListeners":false,"validateRSCRequestHeaders":false,"staleTimes":{"dynamic":0,"static":300},"reactDebugChannel":true,"serverComponentsHmrCache":true,"staticGenerationMaxConcurrency":8,"staticGenerationMinPagesPerWorker":25,"transitionIndicator":false,"gestureTransition":false,"inlineCss":false,"useCache":false,"globalNotFound":false,"browserDebugInfoInTerminal":"warn","lockDistDir":true,"proxyClientMaxBodySize":10485760,"hideLogsAfterAbort":false,"mcpServer":true,"turbopackFileSystemCacheForDev":true,"turbopackFileSystemCacheForBuild":false,"turbopackInferModuleSideEffects":true,"turbopackPluginRuntimeStrategy":"childProcesses","optimizePackageImports":["lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","effect","@effect/schema","@effect/platform","@effect/platform-node","@effect/platform-browser","@effect/platform-bun","@effect/sql","@effect/sql-mssql","@effect/sql-mysql2","@effect/sql-pg","@effect/sql-sqlite-node","@effect/sql-sqlite-bun","@effect/sql-sqlite-wasm","@effect/sql-sqlite-react-native","@effect/rpc","@effect/rpc-http","@effect/typeclass","@effect/experimental","@effect/opentelemetry","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"trustHostHeader":false,"isExperimentalCompile":false},"htmlLimitedBots":"[\\w-]+-Google|Google-[\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight","bundlePagesRouterDependencies":false,"configFileName":"next.config.ts","turbopack":{"root":"/Users/schuldes/prism-dashboard"},"distDirRoot":".next"}
13
13
 
14
14
  process.env.__NEXT_PRIVATE_STANDALONE_CONFIG = JSON.stringify(nextConfig)
15
15