@vasfal/vellum 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -0
- package/.next/app-path-routes-manifest.json +15 -0
- package/.next/build/56416d4ae4ce586f.js +6 -0
- package/.next/build/56416d4ae4ce586f.js.map +5 -0
- package/.next/build/chunks/[root-of-the-server]__0oj80bi._.js +206 -0
- package/.next/build/chunks/[root-of-the-server]__0oj80bi._.js.map +8 -0
- package/.next/build/chunks/[root-of-the-server]__1f933tp._.js +500 -0
- package/.next/build/chunks/[root-of-the-server]__1f933tp._.js.map +11 -0
- package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_0b7xl6g._.js +13 -0
- package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_0b7xl6g._.js.map +5 -0
- package/.next/build/chunks/[turbopack]_runtime.js +890 -0
- package/.next/build/chunks/[turbopack]_runtime.js.map +11 -0
- package/.next/build/chunks/node_modules_20v-8wl._.js +6832 -0
- package/.next/build/chunks/node_modules_20v-8wl._.js.map +47 -0
- package/.next/build/package.json +1 -0
- package/.next/build-manifest.json +21 -0
- package/.next/cache/.previewinfo +1 -0
- package/.next/cache/.rscinfo +1 -0
- package/.next/cache/.tsbuildinfo +1 -0
- package/.next/diagnostics/build-diagnostics.json +6 -0
- package/.next/diagnostics/framework.json +1 -0
- package/.next/diagnostics/route-bundle-stats.json +111 -0
- package/.next/export-marker.json +6 -0
- package/.next/fallback-build-manifest.json +13 -0
- package/.next/images-manifest.json +68 -0
- package/.next/next-minimal-server.js.nft.json +1 -0
- package/.next/next-server.js.nft.json +1 -0
- package/.next/package.json +1 -0
- package/.next/prerender-manifest.json +186 -0
- package/.next/required-server-files.js +334 -0
- package/.next/required-server-files.json +334 -0
- package/.next/routes-manifest.json +126 -0
- package/.next/server/app/(app)/page/app-paths-manifest.json +3 -0
- package/.next/server/app/(app)/page/build-manifest.json +17 -0
- package/.next/server/app/(app)/page/next-font-manifest.json +11 -0
- package/.next/server/app/(app)/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/(app)/page/server-reference-manifest.json +4 -0
- package/.next/server/app/(app)/page.js +15 -0
- package/.next/server/app/(app)/page.js.map +5 -0
- package/.next/server/app/(app)/page.js.nft.json +1 -0
- package/.next/server/app/(app)/page_client-reference-manifest.js +3 -0
- package/.next/server/app/(app)/session/[name]/page/app-paths-manifest.json +3 -0
- package/.next/server/app/(app)/session/[name]/page/build-manifest.json +17 -0
- package/.next/server/app/(app)/session/[name]/page/next-font-manifest.json +11 -0
- package/.next/server/app/(app)/session/[name]/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/(app)/session/[name]/page/server-reference-manifest.json +4 -0
- package/.next/server/app/(app)/session/[name]/page.js +15 -0
- package/.next/server/app/(app)/session/[name]/page.js.map +5 -0
- package/.next/server/app/(app)/session/[name]/page.js.nft.json +1 -0
- package/.next/server/app/(app)/session/[name]/page_client-reference-manifest.js +3 -0
- package/.next/server/app/(app)/settings/key/page/app-paths-manifest.json +3 -0
- package/.next/server/app/(app)/settings/key/page/build-manifest.json +17 -0
- package/.next/server/app/(app)/settings/key/page/next-font-manifest.json +11 -0
- package/.next/server/app/(app)/settings/key/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/(app)/settings/key/page/server-reference-manifest.json +4 -0
- package/.next/server/app/(app)/settings/key/page.js +15 -0
- package/.next/server/app/(app)/settings/key/page.js.map +5 -0
- package/.next/server/app/(app)/settings/key/page.js.nft.json +1 -0
- package/.next/server/app/(app)/settings/key/page_client-reference-manifest.js +3 -0
- package/.next/server/app/_global-error/page/app-paths-manifest.json +3 -0
- package/.next/server/app/_global-error/page/build-manifest.json +17 -0
- package/.next/server/app/_global-error/page/next-font-manifest.json +6 -0
- package/.next/server/app/_global-error/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/_global-error/page/server-reference-manifest.json +4 -0
- package/.next/server/app/_global-error/page.js +9 -0
- package/.next/server/app/_global-error/page.js.map +5 -0
- package/.next/server/app/_global-error/page.js.nft.json +1 -0
- package/.next/server/app/_global-error/page_client-reference-manifest.js +3 -0
- package/.next/server/app/_global-error.html +1 -0
- package/.next/server/app/_global-error.meta +15 -0
- package/.next/server/app/_global-error.rsc +14 -0
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_full.segment.rsc +14 -0
- package/.next/server/app/_global-error.segments/_head.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_index.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
- package/.next/server/app/_not-found/page/app-paths-manifest.json +3 -0
- package/.next/server/app/_not-found/page/build-manifest.json +17 -0
- package/.next/server/app/_not-found/page/next-font-manifest.json +11 -0
- package/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/_not-found/page/server-reference-manifest.json +4 -0
- package/.next/server/app/_not-found/page.js +13 -0
- package/.next/server/app/_not-found/page.js.map +5 -0
- package/.next/server/app/_not-found/page.js.nft.json +1 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +3 -0
- package/.next/server/app/_not-found.html +1 -0
- package/.next/server/app/_not-found.meta +16 -0
- package/.next/server/app/_not-found.rsc +18 -0
- package/.next/server/app/_not-found.segments/_full.segment.rsc +18 -0
- package/.next/server/app/_not-found.segments/_head.segment.rsc +6 -0
- package/.next/server/app/_not-found.segments/_index.segment.rsc +7 -0
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -0
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +5 -0
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/api/analyze/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/analyze/route/build-manifest.json +9 -0
- package/.next/server/app/api/analyze/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/analyze/route.js +9 -0
- package/.next/server/app/api/analyze/route.js.map +5 -0
- package/.next/server/app/api/analyze/route.js.nft.json +1 -0
- package/.next/server/app/api/analyze/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/key/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/key/route/build-manifest.json +9 -0
- package/.next/server/app/api/key/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/key/route.js +8 -0
- package/.next/server/app/api/key/route.js.map +5 -0
- package/.next/server/app/api/key/route.js.nft.json +1 -0
- package/.next/server/app/api/key/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/key-status/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/key-status/route/build-manifest.json +9 -0
- package/.next/server/app/api/key-status/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/key-status/route.js +7 -0
- package/.next/server/app/api/key-status/route.js.map +5 -0
- package/.next/server/app/api/key-status/route.js.nft.json +1 -0
- package/.next/server/app/api/key-status/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/models/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/models/route/build-manifest.json +9 -0
- package/.next/server/app/api/models/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/models/route.js +7 -0
- package/.next/server/app/api/models/route.js.map +5 -0
- package/.next/server/app/api/models/route.js.nft.json +1 -0
- package/.next/server/app/api/models/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/revise/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/revise/route/build-manifest.json +9 -0
- package/.next/server/app/api/revise/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/revise/route.js +8 -0
- package/.next/server/app/api/revise/route.js.map +5 -0
- package/.next/server/app/api/revise/route.js.nft.json +1 -0
- package/.next/server/app/api/revise/route_client-reference-manifest.js +3 -0
- package/.next/server/app/icon.svg/route/app-paths-manifest.json +3 -0
- package/.next/server/app/icon.svg/route/build-manifest.json +9 -0
- package/.next/server/app/icon.svg/route.js +7 -0
- package/.next/server/app/icon.svg/route.js.map +5 -0
- package/.next/server/app/icon.svg/route.js.nft.json +1 -0
- package/.next/server/app/icon.svg.body +7 -0
- package/.next/server/app/icon.svg.meta +1 -0
- package/.next/server/app/index.html +1 -0
- package/.next/server/app/index.meta +15 -0
- package/.next/server/app/index.rsc +31 -0
- package/.next/server/app/index.segments/!KGFwcCk/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/index.segments/!KGFwcCk.segment.rsc +10 -0
- package/.next/server/app/index.segments/_full.segment.rsc +31 -0
- package/.next/server/app/index.segments/_head.segment.rsc +6 -0
- package/.next/server/app/index.segments/_index.segment.rsc +7 -0
- package/.next/server/app/index.segments/_tree.segment.rsc +4 -0
- package/.next/server/app/record-test/page/app-paths-manifest.json +3 -0
- package/.next/server/app/record-test/page/build-manifest.json +17 -0
- package/.next/server/app/record-test/page/next-font-manifest.json +11 -0
- package/.next/server/app/record-test/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/record-test/page/server-reference-manifest.json +4 -0
- package/.next/server/app/record-test/page.js +14 -0
- package/.next/server/app/record-test/page.js.map +5 -0
- package/.next/server/app/record-test/page.js.nft.json +1 -0
- package/.next/server/app/record-test/page_client-reference-manifest.js +3 -0
- package/.next/server/app/record-test.html +7 -0
- package/.next/server/app/record-test.meta +15 -0
- package/.next/server/app/record-test.rsc +24 -0
- package/.next/server/app/record-test.segments/_full.segment.rsc +24 -0
- package/.next/server/app/record-test.segments/_head.segment.rsc +6 -0
- package/.next/server/app/record-test.segments/_index.segment.rsc +7 -0
- package/.next/server/app/record-test.segments/_tree.segment.rsc +4 -0
- package/.next/server/app/record-test.segments/record-test/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/record-test.segments/record-test.segment.rsc +5 -0
- package/.next/server/app/settings/key.html +1 -0
- package/.next/server/app/settings/key.meta +17 -0
- package/.next/server/app/settings/key.rsc +35 -0
- package/.next/server/app/settings/key.segments/!KGFwcCk/settings/key/__PAGE__.segment.rsc +8 -0
- package/.next/server/app/settings/key.segments/!KGFwcCk/settings/key.segment.rsc +5 -0
- package/.next/server/app/settings/key.segments/!KGFwcCk/settings.segment.rsc +5 -0
- package/.next/server/app/settings/key.segments/!KGFwcCk.segment.rsc +10 -0
- package/.next/server/app/settings/key.segments/_full.segment.rsc +35 -0
- package/.next/server/app/settings/key.segments/_head.segment.rsc +6 -0
- package/.next/server/app/settings/key.segments/_index.segment.rsc +7 -0
- package/.next/server/app/settings/key.segments/_tree.segment.rsc +4 -0
- package/.next/server/app/styleguide/page/app-paths-manifest.json +3 -0
- package/.next/server/app/styleguide/page/build-manifest.json +17 -0
- package/.next/server/app/styleguide/page/next-font-manifest.json +11 -0
- package/.next/server/app/styleguide/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/styleguide/page/server-reference-manifest.json +4 -0
- package/.next/server/app/styleguide/page.js +15 -0
- package/.next/server/app/styleguide/page.js.map +5 -0
- package/.next/server/app/styleguide/page.js.nft.json +1 -0
- package/.next/server/app/styleguide/page_client-reference-manifest.js +3 -0
- package/.next/server/app/styleguide.html +1 -0
- package/.next/server/app/styleguide.meta +15 -0
- package/.next/server/app/styleguide.rsc +72 -0
- package/.next/server/app/styleguide.segments/_full.segment.rsc +72 -0
- package/.next/server/app/styleguide.segments/_head.segment.rsc +6 -0
- package/.next/server/app/styleguide.segments/_index.segment.rsc +7 -0
- package/.next/server/app/styleguide.segments/_tree.segment.rsc +4 -0
- package/.next/server/app/styleguide.segments/styleguide/__PAGE__.segment.rsc +60 -0
- package/.next/server/app/styleguide.segments/styleguide.segment.rsc +5 -0
- package/.next/server/app-paths-manifest.json +15 -0
- package/.next/server/chunks/[externals]__1l0bqbz._.js +3 -0
- package/.next/server/chunks/[externals]__1l0bqbz._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__00u0a0m._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__00u0a0m._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__02oblj7._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__02oblj7._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__04dzkv1._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__04dzkv1._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__081zp1m._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__081zp1m._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0dkua3v._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0dkua3v._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0ezil_h._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0ezil_h._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0ww_12a._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0ww_12a._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0x-kpif._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0x-kpif._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__15bjnu5._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__15bjnu5._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1kmbnvv._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1kmbnvv._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1kp4vwc._.js +14 -0
- package/.next/server/chunks/[root-of-the-server]__1kp4vwc._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1lbd3kd._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1lbd3kd._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1ra6psc._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1ra6psc._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1zn977r._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1zn977r._.js.map +1 -0
- package/.next/server/chunks/[turbopack]_runtime.js +903 -0
- package/.next/server/chunks/[turbopack]_runtime.js.map +11 -0
- package/.next/server/chunks/_04h1cv_._.js +185 -0
- package/.next/server/chunks/_04h1cv_._.js.map +1 -0
- package/.next/server/chunks/_0pqmhjh._.js +185 -0
- package/.next/server/chunks/_0pqmhjh._.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_analyze_route_actions_0lx-23h.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_analyze_route_actions_0lx-23h.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_key-status_route_actions_1qgztm2.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_key-status_route_actions_1qgztm2.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_key_route_actions_15n2qsb.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_key_route_actions_15n2qsb.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_models_route_actions_1h6mkqp.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_models_route_actions_1h6mkqp.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_revise_route_actions_19kk3m-.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_revise_route_actions_19kk3m-.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_icon_svg_route_actions_1r2h_ub.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_icon_svg_route_actions_1r2h_ub.js.map +1 -0
- package/.next/server/chunks/node_modules_0x51oh_._.js +10 -0
- package/.next/server/chunks/node_modules_0x51oh_._.js.map +1 -0
- package/.next/server/chunks/node_modules_19bvt3l._.js +6 -0
- package/.next/server/chunks/node_modules_19bvt3l._.js.map +1 -0
- package/.next/server/chunks/node_modules_1_-az43._.js +16 -0
- package/.next/server/chunks/node_modules_1_-az43._.js.map +1 -0
- package/.next/server/chunks/node_modules_1t2pqct._.js +10 -0
- package/.next/server/chunks/node_modules_1t2pqct._.js.map +1 -0
- package/.next/server/chunks/node_modules_next_08s853w._.js +13 -0
- package/.next/server/chunks/node_modules_next_08s853w._.js.map +1 -0
- package/.next/server/chunks/node_modules_node-fetch_src_index_1gf-_pn.js +3 -0
- package/.next/server/chunks/node_modules_node-fetch_src_index_1gf-_pn.js.map +1 -0
- package/.next/server/chunks/ssr/[externals]__1l0bqbz._.js +3 -0
- package/.next/server/chunks/ssr/[externals]__1l0bqbz._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__06ync7f._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__06ync7f._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0hml-pd._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0hml-pd._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0ntia6u._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0ntia6u._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0sdpd0o._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0sdpd0o._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0w2pa_y._.js +33 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0w2pa_y._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__10y0-wv._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__10y0-wv._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__11_7weu._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__11_7weu._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1_stkwn._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1_stkwn._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1dky4g0._.js +33 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1dky4g0._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1k6ey-q._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1k6ey-q._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1la73u1._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1la73u1._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1nshnxm._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1nshnxm._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1pssg49._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1pssg49._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1q6zd30._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1q6zd30._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1qlmg27._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1qlmg27._.js.map +1 -0
- package/.next/server/chunks/ssr/[turbopack]_runtime.js +903 -0
- package/.next/server/chunks/ssr/[turbopack]_runtime.js.map +11 -0
- package/.next/server/chunks/ssr/_01pksvc._.js +78 -0
- package/.next/server/chunks/ssr/_01pksvc._.js.map +1 -0
- package/.next/server/chunks/ssr/_03lgii8._.js +3 -0
- package/.next/server/chunks/ssr/_03lgii8._.js.map +1 -0
- package/.next/server/chunks/ssr/_05tft_r._.js +3 -0
- package/.next/server/chunks/ssr/_05tft_r._.js.map +1 -0
- package/.next/server/chunks/ssr/_06gt995._.js +3 -0
- package/.next/server/chunks/ssr/_06gt995._.js.map +1 -0
- package/.next/server/chunks/ssr/_0jrh37c._.js +46 -0
- package/.next/server/chunks/ssr/_0jrh37c._.js.map +1 -0
- package/.next/server/chunks/ssr/_0kw6yq_._.js +3 -0
- package/.next/server/chunks/ssr/_0kw6yq_._.js.map +1 -0
- package/.next/server/chunks/ssr/_0l3c05z._.js +3 -0
- package/.next/server/chunks/ssr/_0l3c05z._.js.map +1 -0
- package/.next/server/chunks/ssr/_0n-ojw-._.js +3 -0
- package/.next/server/chunks/ssr/_0n-ojw-._.js.map +1 -0
- package/.next/server/chunks/ssr/_0t6a1ln._.js +6 -0
- package/.next/server/chunks/ssr/_0t6a1ln._.js.map +1 -0
- package/.next/server/chunks/ssr/_0td-xk-._.js +3 -0
- package/.next/server/chunks/ssr/_0td-xk-._.js.map +1 -0
- package/.next/server/chunks/ssr/_0y92f-y._.js +46 -0
- package/.next/server/chunks/ssr/_0y92f-y._.js.map +1 -0
- package/.next/server/chunks/ssr/_1b6au28._.js +3 -0
- package/.next/server/chunks/ssr/_1b6au28._.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_(app)_page_actions_1gxdy57.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_(app)_page_actions_1gxdy57.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_(app)_session_[name]_page_actions_115d_ja.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_(app)_session_[name]_page_actions_115d_ja.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_(app)_settings_key_page_actions_1jsc3or.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_(app)_settings_key_page_actions_1jsc3or.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app__global-error_page_actions_0zi5s8-.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app__global-error_page_actions_0zi5s8-.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app__not-found_page_actions_0pt47yr.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app__not-found_page_actions_0pt47yr.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_record-test_page_actions_0a_yofw.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_record-test_page_actions_0a_yofw.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_styleguide_page_actions_174h7x7.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_styleguide_page_actions_174h7x7.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_0el53_h._.js +10 -0
- package/.next/server/chunks/ssr/node_modules_0el53_h._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_0h91jdk._.js +33 -0
- package/.next/server/chunks/ssr/node_modules_0h91jdk._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_1fxqp22._.js +10 -0
- package/.next/server/chunks/ssr/node_modules_1fxqp22._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_1loo6j7._.js +6 -0
- package/.next/server/chunks/ssr/node_modules_1loo6j7._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_1pvqj0r._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_1pvqj0r._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_0uboya6._.js +6 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_0uboya6._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_172hvm-._.js +19 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_172hvm-._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_0wpq8j3._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_0wpq8j3._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_0symwr9.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_0symwr9.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0-o-goa.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0-o-goa.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0l_sp0x.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0l_sp0x.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0_q50sh.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0_q50sh.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0_xbpm0.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0_xbpm0.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_119i6eu.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_119i6eu.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_14nl2rs.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_14nl2rs.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_18u8k23.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_18u8k23.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19--w_z.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19--w_z.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1_iwj0a.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1_iwj0a.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_node-fetch_src_index_1e0t9p6.js +3 -0
- package/.next/server/chunks/ssr/node_modules_node-fetch_src_index_1e0t9p6.js.map +1 -0
- package/.next/server/chunks/ssr/src_19oqe9t._.js +3 -0
- package/.next/server/chunks/ssr/src_19oqe9t._.js.map +1 -0
- package/.next/server/chunks/ssr/src_app_record-test_page_tsx_08-2bld._.js +9 -0
- package/.next/server/chunks/ssr/src_app_record-test_page_tsx_08-2bld._.js.map +1 -0
- package/.next/server/chunks/ssr/src_components_app-sidebar_tsx_1xx2k53._.js +3 -0
- package/.next/server/chunks/ssr/src_components_app-sidebar_tsx_1xx2k53._.js.map +1 -0
- package/.next/server/chunks/ssr/src_components_settings_key-setup_tsx_0jxhnpa._.js +3 -0
- package/.next/server/chunks/ssr/src_components_settings_key-setup_tsx_0jxhnpa._.js.map +1 -0
- package/.next/server/chunks/ssr/src_components_ui_0lq7ewx._.js +3 -0
- package/.next/server/chunks/ssr/src_components_ui_0lq7ewx._.js.map +1 -0
- package/.next/server/functions-config-manifest.json +10 -0
- package/.next/server/interception-route-rewrite-manifest.js +1 -0
- package/.next/server/middleware-build-manifest.js +21 -0
- package/.next/server/middleware-manifest.json +6 -0
- package/.next/server/next-font-manifest.js +1 -0
- package/.next/server/next-font-manifest.json +31 -0
- package/.next/server/pages/404.html +1 -0
- package/.next/server/pages/500.html +1 -0
- package/.next/server/pages-manifest.json +4 -0
- package/.next/server/prefetch-hints.json +1 -0
- package/.next/server/server-reference-manifest.js +1 -0
- package/.next/server/server-reference-manifest.json +5 -0
- package/.next/static/CIZxngYjzUw1Kb0KrE473/_buildManifest.js +11 -0
- package/.next/static/CIZxngYjzUw1Kb0KrE473/_clientMiddlewareManifest.js +1 -0
- package/.next/static/CIZxngYjzUw1Kb0KrE473/_ssgManifest.js +1 -0
- package/.next/static/chunks/05-c3ty_6dwfk.js +1 -0
- package/.next/static/chunks/07-hzktxqjvzd.js +4 -0
- package/.next/static/chunks/09bn0buuu6k2x.js +1 -0
- package/.next/static/chunks/0cz1d0mv5g_q7.js +1 -0
- package/.next/static/chunks/0kkimqpuecvfn.js +1 -0
- package/.next/static/chunks/0mk1g55o6kl1e.js +2 -0
- package/.next/static/chunks/0ul837-9k0zx_.js +63 -0
- package/.next/static/chunks/0wpges32btt_p.js +1 -0
- package/.next/static/chunks/18qo-4_hfuwko.js +1 -0
- package/.next/static/chunks/1_dsevxz78b97.js +1 -0
- package/.next/static/chunks/2-oqhnxovgl_2.js +44 -0
- package/.next/static/chunks/2et_7fxuzt9cq.js +31 -0
- package/.next/static/chunks/2im7c515bo69p.js +1 -0
- package/.next/static/chunks/2merpuxt1zcvf.js +1 -0
- package/.next/static/chunks/2qb8lge1e2sv2.js +1 -0
- package/.next/static/chunks/2sj0gufu0lojq.css +3 -0
- package/.next/static/chunks/2zloaj9ja_vpy.js +1 -0
- package/.next/static/chunks/3rvy2rc9d_hwt.js +1 -0
- package/.next/static/chunks/3uci2qhsbp444.js +50 -0
- package/.next/static/chunks/3yao5u25-bf0g.js +1 -0
- package/.next/static/chunks/41_0qs6kjmoek.js +1 -0
- package/.next/static/chunks/4395sbjm36lbl.js +1 -0
- package/.next/static/chunks/turbopack-2cevjmbuh84ft.js +1 -0
- package/.next/static/media/1bffadaabf893a1e-s.3-6t-g6q0vh0a.woff2 +0 -0
- package/.next/static/media/2bbe8d2671613f1f-s.0k62hbripvv8p.woff2 +0 -0
- package/.next/static/media/2c55a0e60120577a-s.0-dom-5bn10r2.woff2 +0 -0
- package/.next/static/media/4fa387ec64143e14-s.2tuy5pz7dlieh.woff2 +0 -0
- package/.next/static/media/5476f68d60460930-s.2uwcyprjm3xu3.woff2 +0 -0
- package/.next/static/media/5ce348bf30bf5439-s.31988l_ccedte.woff2 +0 -0
- package/.next/static/media/6306c77e7c8268e4-s.2dbetqa9o8jxf.woff2 +0 -0
- package/.next/static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2 +0 -0
- package/.next/static/media/7d817b4c03b0c5f1-s.1uyisp29ctx0d.woff2 +0 -0
- package/.next/static/media/83afe278b6a6bb3c-s.p.2bn3s6zvc0dyp.woff2 +0 -0
- package/.next/static/media/9c72aa0f40e4eef8-s.1y4-pdgsjb-pw.woff2 +0 -0
- package/.next/static/media/ad66f9afd8947f86-s.3lvt2whj97whp.woff2 +0 -0
- package/.next/static/media/bbc41e54d2fcbd21-s.1rgnod-3esatf.woff2 +0 -0
- package/.next/static/media/icon.2_sgat73yt9an.svg +7 -0
- package/.next/trace +1 -0
- package/.next/trace-build +1 -0
- package/.next/turbopack +0 -0
- package/.next/types/cache-life.d.ts +145 -0
- package/.next/types/routes.d.ts +81 -0
- package/.next/types/validator.ts +160 -0
- package/LICENSE +21 -0
- package/README.md +146 -0
- package/bin/vellum.mjs +193 -0
- package/next.config.ts +19 -0
- package/package.json +72 -0
- package/public/file.svg +1 -0
- package/public/globe.svg +1 -0
- package/public/next.svg +1 -0
- package/public/vercel.svg +1 -0
- package/public/window.svg +1 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
// This file is generated automatically by Next.js
|
|
2
|
+
// Do not edit this file manually
|
|
3
|
+
// This file validates that all pages and layouts export the correct types
|
|
4
|
+
|
|
5
|
+
import type { AppRoutes, LayoutRoutes, ParamMap, AppRouteHandlerRoutes } from "./routes.js"
|
|
6
|
+
import type { ResolvingMetadata, ResolvingViewport } from "next/types.js"
|
|
7
|
+
import type { NextRequest } from 'next/server.js'
|
|
8
|
+
|
|
9
|
+
type AppPageConfig<Route extends AppRoutes = AppRoutes> = {
|
|
10
|
+
default: React.ComponentType<{ params: Promise<ParamMap[Route]> } & any> | ((props: { params: Promise<ParamMap[Route]> } & any) => React.ReactNode | Promise<React.ReactNode> | never | void | Promise<void>)
|
|
11
|
+
generateStaticParams?: (props: { params: ParamMap[Route] }) => Promise<any[]> | any[]
|
|
12
|
+
generateMetadata?: (
|
|
13
|
+
props: { params: Promise<ParamMap[Route]> } & any,
|
|
14
|
+
parent: ResolvingMetadata
|
|
15
|
+
) => Promise<any> | any
|
|
16
|
+
generateViewport?: (
|
|
17
|
+
props: { params: Promise<ParamMap[Route]> } & any,
|
|
18
|
+
parent: ResolvingViewport
|
|
19
|
+
) => Promise<any> | any
|
|
20
|
+
metadata?: any
|
|
21
|
+
viewport?: any
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
type LayoutConfig<Route extends LayoutRoutes = LayoutRoutes> = {
|
|
25
|
+
default: React.ComponentType<LayoutProps<Route>> | ((props: LayoutProps<Route>) => React.ReactNode | Promise<React.ReactNode> | never | void | Promise<void>)
|
|
26
|
+
generateStaticParams?: (props: { params: ParamMap[Route] }) => Promise<any[]> | any[]
|
|
27
|
+
generateMetadata?: (
|
|
28
|
+
props: { params: Promise<ParamMap[Route]> } & any,
|
|
29
|
+
parent: ResolvingMetadata
|
|
30
|
+
) => Promise<any> | any
|
|
31
|
+
generateViewport?: (
|
|
32
|
+
props: { params: Promise<ParamMap[Route]> } & any,
|
|
33
|
+
parent: ResolvingViewport
|
|
34
|
+
) => Promise<any> | any
|
|
35
|
+
metadata?: any
|
|
36
|
+
viewport?: any
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRoutes> = {
|
|
40
|
+
GET?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
|
|
41
|
+
POST?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
|
|
42
|
+
PUT?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
|
|
43
|
+
PATCH?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
|
|
44
|
+
DELETE?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
|
|
45
|
+
HEAD?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
|
|
46
|
+
OPTIONS?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
// Validate ../../src/app/(app)/page.tsx
|
|
51
|
+
{
|
|
52
|
+
type __IsExpected<Specific extends AppPageConfig<"/">> = Specific
|
|
53
|
+
const handler = {} as typeof import("../../src/app/(app)/page.js")
|
|
54
|
+
type __Check = __IsExpected<typeof handler>
|
|
55
|
+
// @ts-ignore
|
|
56
|
+
type __Unused = __Check
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Validate ../../src/app/(app)/session/[name]/page.tsx
|
|
60
|
+
{
|
|
61
|
+
type __IsExpected<Specific extends AppPageConfig<"/session/[name]">> = Specific
|
|
62
|
+
const handler = {} as typeof import("../../src/app/(app)/session/[name]/page.js")
|
|
63
|
+
type __Check = __IsExpected<typeof handler>
|
|
64
|
+
// @ts-ignore
|
|
65
|
+
type __Unused = __Check
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Validate ../../src/app/(app)/settings/key/page.tsx
|
|
69
|
+
{
|
|
70
|
+
type __IsExpected<Specific extends AppPageConfig<"/settings/key">> = Specific
|
|
71
|
+
const handler = {} as typeof import("../../src/app/(app)/settings/key/page.js")
|
|
72
|
+
type __Check = __IsExpected<typeof handler>
|
|
73
|
+
// @ts-ignore
|
|
74
|
+
type __Unused = __Check
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Validate ../../src/app/record-test/page.tsx
|
|
78
|
+
{
|
|
79
|
+
type __IsExpected<Specific extends AppPageConfig<"/record-test">> = Specific
|
|
80
|
+
const handler = {} as typeof import("../../src/app/record-test/page.js")
|
|
81
|
+
type __Check = __IsExpected<typeof handler>
|
|
82
|
+
// @ts-ignore
|
|
83
|
+
type __Unused = __Check
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Validate ../../src/app/styleguide/page.tsx
|
|
87
|
+
{
|
|
88
|
+
type __IsExpected<Specific extends AppPageConfig<"/styleguide">> = Specific
|
|
89
|
+
const handler = {} as typeof import("../../src/app/styleguide/page.js")
|
|
90
|
+
type __Check = __IsExpected<typeof handler>
|
|
91
|
+
// @ts-ignore
|
|
92
|
+
type __Unused = __Check
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Validate ../../src/app/api/analyze/route.ts
|
|
96
|
+
{
|
|
97
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/analyze">> = Specific
|
|
98
|
+
const handler = {} as typeof import("../../src/app/api/analyze/route.js")
|
|
99
|
+
type __Check = __IsExpected<typeof handler>
|
|
100
|
+
// @ts-ignore
|
|
101
|
+
type __Unused = __Check
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Validate ../../src/app/api/key-status/route.ts
|
|
105
|
+
{
|
|
106
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/key-status">> = Specific
|
|
107
|
+
const handler = {} as typeof import("../../src/app/api/key-status/route.js")
|
|
108
|
+
type __Check = __IsExpected<typeof handler>
|
|
109
|
+
// @ts-ignore
|
|
110
|
+
type __Unused = __Check
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Validate ../../src/app/api/key/route.ts
|
|
114
|
+
{
|
|
115
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/key">> = Specific
|
|
116
|
+
const handler = {} as typeof import("../../src/app/api/key/route.js")
|
|
117
|
+
type __Check = __IsExpected<typeof handler>
|
|
118
|
+
// @ts-ignore
|
|
119
|
+
type __Unused = __Check
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Validate ../../src/app/api/models/route.ts
|
|
123
|
+
{
|
|
124
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/models">> = Specific
|
|
125
|
+
const handler = {} as typeof import("../../src/app/api/models/route.js")
|
|
126
|
+
type __Check = __IsExpected<typeof handler>
|
|
127
|
+
// @ts-ignore
|
|
128
|
+
type __Unused = __Check
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Validate ../../src/app/api/revise/route.ts
|
|
132
|
+
{
|
|
133
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/revise">> = Specific
|
|
134
|
+
const handler = {} as typeof import("../../src/app/api/revise/route.js")
|
|
135
|
+
type __Check = __IsExpected<typeof handler>
|
|
136
|
+
// @ts-ignore
|
|
137
|
+
type __Unused = __Check
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
// Validate ../../src/app/(app)/layout.tsx
|
|
145
|
+
{
|
|
146
|
+
type __IsExpected<Specific extends LayoutConfig<"/">> = Specific
|
|
147
|
+
const handler = {} as typeof import("../../src/app/(app)/layout.js")
|
|
148
|
+
type __Check = __IsExpected<typeof handler>
|
|
149
|
+
// @ts-ignore
|
|
150
|
+
type __Unused = __Check
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// Validate ../../src/app/layout.tsx
|
|
154
|
+
{
|
|
155
|
+
type __IsExpected<Specific extends LayoutConfig<"/">> = Specific
|
|
156
|
+
const handler = {} as typeof import("../../src/app/layout.js")
|
|
157
|
+
type __Check = __IsExpected<typeof handler>
|
|
158
|
+
// @ts-ignore
|
|
159
|
+
type __Unused = __Check
|
|
160
|
+
}
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Vasyl Falach
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# Vellum
|
|
2
|
+
|
|
3
|
+
> Think out loud over your screen. Vellum turns the recording into a structured report — every point you made, timestamped, screenshotted, and sorted into tasks.
|
|
4
|
+
|
|
5
|
+
The best reviews happen out loud: you point at something and say what's wrong with it — then it vanishes into a screen recording nobody rewatches. Vellum keeps the substance instead. Talk through the work, and get back a clean, actionable report — problems, ideas, questions, and decisions, each linked to the exact moment and frame it came from. It runs entirely on your machine, under your own API key: no account, no cloud.
|
|
6
|
+
|
|
7
|
+
Built for design and product reviews — the analysis is tuned for critiquing UI, checking a build against its design, and reviewing docs — but the mechanic works for any spoken walkthrough of a screen.
|
|
8
|
+
|
|
9
|
+
<picture>
|
|
10
|
+
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/hero-dark.png">
|
|
11
|
+
<img alt="Vellum turns a spoken design review into a structured report — the recording on the left, extracted tasks with timestamps, categories, and priorities on the right" src="docs/assets/hero-light.png">
|
|
12
|
+
</picture>
|
|
13
|
+
|
|
14
|
+
<!-- A short demo GIF of the record → report loop can go here later — see docs/assets/README.md -->
|
|
15
|
+
|
|
16
|
+
## Before you start — is this for you?
|
|
17
|
+
|
|
18
|
+
Vellum is deliberately narrow. It's a good fit if:
|
|
19
|
+
|
|
20
|
+
- You're on a **Chromium browser** (Chrome, Edge, Arc, Brave). Recording and the floating controls use APIs Firefox and Safari don't support.
|
|
21
|
+
- You're comfortable getting a **free Google AI Studio API key** and pasting it in once. Analysis runs on Gemini under *your* key — there's no hosted service.
|
|
22
|
+
- You want a **single-user, local** tool. Recordings live on your disk; nothing syncs to a cloud.
|
|
23
|
+
|
|
24
|
+
If you need meeting transcription, multi-user collaboration, or a hosted app, Vellum isn't that — see [Scope](#scope).
|
|
25
|
+
|
|
26
|
+
## Install and run
|
|
27
|
+
|
|
28
|
+
Vellum runs entirely on your machine. The web app is the tool; the `vellum` command just launches it.
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# Requires Node.js 20+
|
|
32
|
+
npx @vasfal/vellum ui
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
That starts the local app and opens it in your browser. On first launch it walks you through pasting your Gemini key (stored in `~/.vellum/.env`, never sent anywhere but Google's API at analyze time) and picking a workspace folder for your recordings.
|
|
36
|
+
|
|
37
|
+
<details>
|
|
38
|
+
<summary>Or run from source (for development)</summary>
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
git clone https://github.com/vasfal/vellum.git
|
|
42
|
+
cd vellum
|
|
43
|
+
npm install
|
|
44
|
+
npm run dev # starts on http://localhost:4270
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
For a global command from a local checkout: `npm link`, then `vellum ui`.
|
|
48
|
+
</details>
|
|
49
|
+
|
|
50
|
+
## Setting your API key
|
|
51
|
+
|
|
52
|
+
Analysis runs on Google Gemini under *your* key — there's no hosted service and no account. A key is free from [Google AI Studio](https://aistudio.google.com/apikey).
|
|
53
|
+
|
|
54
|
+
**In the app (recommended).** On first launch Vellum shows a prompt to paste your key, validates it, and saves it. You can change or remove it later from the sidebar. This is the path most people should use — no files, no restart.
|
|
55
|
+
|
|
56
|
+
<!-- screenshot: in-app key setup -->
|
|
57
|
+
|
|
58
|
+
**Power users / CLI.** If you'd rather not use the form, Vellum reads the key from the environment, in this order of precedence:
|
|
59
|
+
|
|
60
|
+
1. An exported `GEMINI_API_KEY` environment variable (wins over everything below).
|
|
61
|
+
2. `~/.vellum/.env` — the file the in-app form writes to. The launcher (`vellum ui`) loads it at every boot.
|
|
62
|
+
3. `.env.local` in a source checkout — copy [`.env.example`](.env.example) to `.env.local` and fill in `GEMINI_API_KEY`. Read by `npm run dev`.
|
|
63
|
+
|
|
64
|
+
`.env.example` also documents the optional `GEMINI_MODEL` and `GEMINI_FALLBACK_MODELS` overrides.
|
|
65
|
+
|
|
66
|
+
**Where the key lives.** It's stored only in `~/.vellum/.env` on your machine, written with `0600` permissions (readable by you alone). Vellum never logs it, never echoes it back, and never sends it anywhere but Google's Gemini API at analyze time. See [Privacy](#privacy).
|
|
67
|
+
|
|
68
|
+
## How it works
|
|
69
|
+
|
|
70
|
+
1. **Record** — click *New recording*, pick a screen or window, and talk through your review. Floating controls stay above your other windows.
|
|
71
|
+
2. **Stop** — the recording is saved to your workspace folder as `recording.webm`.
|
|
72
|
+
3. **Analyze** — click *Analyze*. Vellum uploads the recording to Gemini (under your key), which watches it and pulls out what you said and pointed at.
|
|
73
|
+
4. **Review** — a few minutes later you get a report: extracted tasks, each with a timestamp, a screenshot of the moment, a category, and a priority. Edit, comment, and re-run as you like.
|
|
74
|
+
|
|
75
|
+
## What goes into the report
|
|
76
|
+
|
|
77
|
+
For each task Vellum extracts:
|
|
78
|
+
|
|
79
|
+
- A descriptive title and a description with on-screen context
|
|
80
|
+
- A timestamp linking back to the moment in the video
|
|
81
|
+
- A screenshot of the relevant frame
|
|
82
|
+
- A category: `problem` / `idea` / `question` / `decision` / `followup` / `praise`
|
|
83
|
+
- A priority guess
|
|
84
|
+
|
|
85
|
+
Each session is tagged with a `review_type` (UI design, dev-vs-design, documentation, mixed) so the analysis adapts to the kind of review it is.
|
|
86
|
+
|
|
87
|
+
## Privacy
|
|
88
|
+
|
|
89
|
+
- Recordings live on your local filesystem, in the folder you choose.
|
|
90
|
+
- Only the analyze step sends video to Google (the Gemini API), under your own key.
|
|
91
|
+
- Your API key stays in `~/.vellum/.env` on your machine — it never leaves the local server.
|
|
92
|
+
- No telemetry, no analytics, no servers anyone else controls.
|
|
93
|
+
|
|
94
|
+
## Your files
|
|
95
|
+
|
|
96
|
+
Each session is a self-contained folder in your workspace:
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
~/vellum-sessions/
|
|
100
|
+
├── .vellum-workspace.json ← marks this folder as a Vellum workspace
|
|
101
|
+
└── 2026-05-19-onboarding-review/
|
|
102
|
+
├── recording.webm ← the raw recording
|
|
103
|
+
├── report.md ← the Markdown report
|
|
104
|
+
├── tasks.json ← structured Gemini output, for re-rendering
|
|
105
|
+
└── screenshots/
|
|
106
|
+
├── 00-03-42.png
|
|
107
|
+
└── ...
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Re-running analysis keeps your history — the latest report is always `report.md`, and previous runs are archived alongside it. Back up a session by copying its folder; share one by zipping it.
|
|
111
|
+
|
|
112
|
+
## Scope
|
|
113
|
+
|
|
114
|
+
**What Vellum does:** single-user design and product reviews · screen + microphone recording · AI analysis and task extraction · Markdown reports with embedded screenshots.
|
|
115
|
+
|
|
116
|
+
**What it doesn't (and isn't trying to):** meeting transcription · multi-user collaboration · live sharing · cloud sync · recording other people's screens · system-audio capture (microphone only).
|
|
117
|
+
|
|
118
|
+
## Troubleshooting
|
|
119
|
+
|
|
120
|
+
**The folder picker or floating controls don't work** — you need a Chromium-based browser. The File System Access and Document Picture-in-Picture APIs aren't in Firefox or Safari.
|
|
121
|
+
|
|
122
|
+
**Analysis takes a long time** — Gemini's File API is slower on the first upload of a long video. A 30-minute recording usually finishes in 3–5 minutes; 10+ minutes means something's wrong — check the terminal.
|
|
123
|
+
|
|
124
|
+
**The recording is silent** — grant the browser microphone permission and watch the audio meter while you talk.
|
|
125
|
+
|
|
126
|
+
**Gemini returned odd tasks** — usually poor recording quality (mumbled audio, blank screen). The prompt is tuned for design reviews; other kinds of review may need tuning.
|
|
127
|
+
|
|
128
|
+
## Contributing
|
|
129
|
+
|
|
130
|
+
Issues and pull requests are welcome — there are templates for both. If you're developing Vellum rather than just using it, start with:
|
|
131
|
+
|
|
132
|
+
- [`ARCHITECTURE.md`](ARCHITECTURE.md) — the current locked state of the system
|
|
133
|
+
- [`DECISIONS.md`](DECISIONS.md) — the architecture decision log
|
|
134
|
+
- [`SCENARIOS.md`](SCENARIOS.md) — the core user scenarios the product supports
|
|
135
|
+
|
|
136
|
+
Vellum is developed with AI assistance; the architecture docs above are the source of truth for how it fits together.
|
|
137
|
+
|
|
138
|
+
## License
|
|
139
|
+
|
|
140
|
+
[MIT](LICENSE).
|
|
141
|
+
|
|
142
|
+
## Acknowledgements
|
|
143
|
+
|
|
144
|
+
Built with Next.js, Tailwind, shadcn/ui, Google Gemini, and ffmpeg.
|
|
145
|
+
|
|
146
|
+
The name *Vellum* refers to the thin parchment medieval scribes wrote on — a surface for holding thought.
|
package/bin/vellum.mjs
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Vellum launcher (TASK-62): `vellum ui` boots the local web app and opens a
|
|
3
|
+
// browser at it. Written as plain ESM on purpose — it runs straight from a
|
|
4
|
+
// published npm package with no tsx/TypeScript step at runtime. The Next app
|
|
5
|
+
// itself is the built `.next` that ships in the tarball; this file is just the
|
|
6
|
+
// front door.
|
|
7
|
+
|
|
8
|
+
import { spawn } from "node:child_process";
|
|
9
|
+
import { createServer } from "node:net";
|
|
10
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
11
|
+
import { fileURLToPath } from "node:url";
|
|
12
|
+
import { dirname, join } from "node:path";
|
|
13
|
+
import { homedir, platform } from "node:os";
|
|
14
|
+
import { createRequire } from "node:module";
|
|
15
|
+
|
|
16
|
+
const require = createRequire(import.meta.url);
|
|
17
|
+
// The package root is the parent of bin/ — where `.next`, `public`, and
|
|
18
|
+
// next.config.ts live, both in a published tarball and in a dev checkout.
|
|
19
|
+
const packageRoot = join(dirname(fileURLToPath(import.meta.url)), "..");
|
|
20
|
+
|
|
21
|
+
const [command = "ui"] = process.argv.slice(2);
|
|
22
|
+
|
|
23
|
+
switch (command) {
|
|
24
|
+
case "ui":
|
|
25
|
+
await runUi();
|
|
26
|
+
break;
|
|
27
|
+
case "analyze":
|
|
28
|
+
// Reserved for TASK-53. Named here so `vellum analyze` fails with a human
|
|
29
|
+
// hint instead of an "unknown command", since docs will mention it.
|
|
30
|
+
console.error(
|
|
31
|
+
"`vellum analyze` isn't available yet — analyze from the web app for now:\n vellum ui\n(The terminal analyze command lands in TASK-53.)",
|
|
32
|
+
);
|
|
33
|
+
process.exit(1);
|
|
34
|
+
break;
|
|
35
|
+
case "-v":
|
|
36
|
+
case "--version":
|
|
37
|
+
console.log(readVersion());
|
|
38
|
+
break;
|
|
39
|
+
case "-h":
|
|
40
|
+
case "--help":
|
|
41
|
+
printHelp();
|
|
42
|
+
break;
|
|
43
|
+
default:
|
|
44
|
+
console.error(`Unknown command: ${command}\n`);
|
|
45
|
+
printHelp();
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
async function runUi() {
|
|
50
|
+
// Load the home-config key (TASK-64 writes it here) so the server sees it. A
|
|
51
|
+
// real process.env value wins, so a dev checkout with .env.local or an
|
|
52
|
+
// exported GEMINI_API_KEY still works.
|
|
53
|
+
loadHomeEnv();
|
|
54
|
+
|
|
55
|
+
const nextBin = require.resolve("next/dist/bin/next");
|
|
56
|
+
|
|
57
|
+
// A production build must exist for `next start`. It ships prebuilt in the
|
|
58
|
+
// published tarball; a dev checkout builds once on first run.
|
|
59
|
+
if (!existsSync(join(packageRoot, ".next"))) {
|
|
60
|
+
console.log("First run — building Vellum (one time, ~a minute)…\n");
|
|
61
|
+
await runToCompletion(nextBin, ["build"]);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const port = await freePort(4270);
|
|
65
|
+
const url = `http://localhost:${port}`;
|
|
66
|
+
|
|
67
|
+
const server = spawn(process.execPath, [nextBin, "start", "-p", String(port)], {
|
|
68
|
+
cwd: packageRoot,
|
|
69
|
+
stdio: ["ignore", "inherit", "inherit"],
|
|
70
|
+
env: { ...process.env, NODE_ENV: "production" },
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
// Stop the server cleanly on Ctrl-C so a stray port isn't left held.
|
|
74
|
+
const stop = () => {
|
|
75
|
+
server.kill("SIGINT");
|
|
76
|
+
process.exit(0);
|
|
77
|
+
};
|
|
78
|
+
process.on("SIGINT", stop);
|
|
79
|
+
process.on("SIGTERM", stop);
|
|
80
|
+
server.on("exit", (code) => process.exit(code ?? 0));
|
|
81
|
+
|
|
82
|
+
await waitForServer(url);
|
|
83
|
+
console.log(`\nVellum is running at ${url} — opening your browser.`);
|
|
84
|
+
console.log("Leave this terminal open; press Ctrl-C to stop.\n");
|
|
85
|
+
openBrowser(url);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** Load ~/.vellum/.env into process.env without overriding real env vars. */
|
|
89
|
+
function loadHomeEnv() {
|
|
90
|
+
const envPath = join(homedir(), ".vellum", ".env");
|
|
91
|
+
if (!existsSync(envPath)) return;
|
|
92
|
+
for (const line of readFileSync(envPath, "utf8").split("\n")) {
|
|
93
|
+
const trimmed = line.trim();
|
|
94
|
+
if (!trimmed || trimmed.startsWith("#")) continue;
|
|
95
|
+
const eq = trimmed.indexOf("=");
|
|
96
|
+
if (eq === -1) continue;
|
|
97
|
+
const key = trimmed.slice(0, eq).trim();
|
|
98
|
+
let value = trimmed.slice(eq + 1).trim();
|
|
99
|
+
if (
|
|
100
|
+
(value.startsWith('"') && value.endsWith('"')) ||
|
|
101
|
+
(value.startsWith("'") && value.endsWith("'"))
|
|
102
|
+
) {
|
|
103
|
+
value = value.slice(1, -1);
|
|
104
|
+
}
|
|
105
|
+
if (key && !(key in process.env)) process.env[key] = value;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/** Prefer `preferred`; fall back to an OS-assigned free port if it's taken. */
|
|
110
|
+
function freePort(preferred) {
|
|
111
|
+
return new Promise((resolve) => {
|
|
112
|
+
const probe = createServer();
|
|
113
|
+
probe.once("error", () => resolve(ephemeralPort()));
|
|
114
|
+
probe.listen(preferred, () => probe.close(() => resolve(preferred)));
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function ephemeralPort() {
|
|
119
|
+
return new Promise((resolve, reject) => {
|
|
120
|
+
const probe = createServer();
|
|
121
|
+
probe.once("error", reject);
|
|
122
|
+
probe.listen(0, () => {
|
|
123
|
+
const { port } = probe.address();
|
|
124
|
+
probe.close(() => resolve(port));
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/** Poll until the server answers (any HTTP response counts), then return. */
|
|
130
|
+
async function waitForServer(url, timeoutMs = 60_000) {
|
|
131
|
+
const start = Date.now();
|
|
132
|
+
while (Date.now() - start < timeoutMs) {
|
|
133
|
+
try {
|
|
134
|
+
await fetch(url, { method: "HEAD" });
|
|
135
|
+
return;
|
|
136
|
+
} catch {
|
|
137
|
+
await sleep(300);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
throw new Error(`Vellum didn't become ready at ${url} within 60s.`);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
function openBrowser(url) {
|
|
144
|
+
const os = platform();
|
|
145
|
+
const [cmd, args] =
|
|
146
|
+
os === "darwin"
|
|
147
|
+
? ["open", [url]]
|
|
148
|
+
: os === "win32"
|
|
149
|
+
? ["cmd", ["/c", "start", "", url]]
|
|
150
|
+
: ["xdg-open", [url]];
|
|
151
|
+
try {
|
|
152
|
+
spawn(cmd, args, { stdio: "ignore", detached: true }).unref();
|
|
153
|
+
} catch {
|
|
154
|
+
// Non-fatal: the URL is already printed for the user to click.
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/** Spawn `node <script> <args>` and resolve on a clean exit, reject otherwise. */
|
|
159
|
+
function runToCompletion(script, args) {
|
|
160
|
+
return new Promise((resolve, reject) => {
|
|
161
|
+
const child = spawn(process.execPath, [script, ...args], {
|
|
162
|
+
cwd: packageRoot,
|
|
163
|
+
stdio: "inherit",
|
|
164
|
+
env: { ...process.env, NODE_ENV: "production" },
|
|
165
|
+
});
|
|
166
|
+
child.on("exit", (code) =>
|
|
167
|
+
code === 0 ? resolve() : reject(new Error(`\`next ${args[0]}\` exited with code ${code}.`)),
|
|
168
|
+
);
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
function sleep(ms) {
|
|
173
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
function readVersion() {
|
|
177
|
+
const pkg = JSON.parse(readFileSync(join(packageRoot, "package.json"), "utf8"));
|
|
178
|
+
return pkg.version ?? "unknown";
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
function printHelp() {
|
|
182
|
+
console.log(`Vellum — record a design review, get a structured report.
|
|
183
|
+
|
|
184
|
+
Usage:
|
|
185
|
+
vellum ui Launch the local web app and open it in your browser
|
|
186
|
+
vellum analyze (coming soon) Analyze a recording from the terminal
|
|
187
|
+
|
|
188
|
+
vellum --version Print the installed version
|
|
189
|
+
vellum --help Show this help
|
|
190
|
+
|
|
191
|
+
The web app runs entirely on your machine. Recordings never leave your disk;
|
|
192
|
+
only the analyze step sends video to Google Gemini, under your own API key.`);
|
|
193
|
+
}
|
package/next.config.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { NextConfig } from "next";
|
|
2
|
+
|
|
3
|
+
const nextConfig: NextConfig = {
|
|
4
|
+
// ffmpeg-static resolves its binary via a __dirname-relative path. Bundling it
|
|
5
|
+
// (Turbopack's default for server code) relocates that path into the build
|
|
6
|
+
// output, so getFfmpegPath() can't find the real binary and /api/analyze's
|
|
7
|
+
// screenshot stage fails. Keeping it external leaves the require() running
|
|
8
|
+
// from node_modules, where the path stays correct. Same reasoning for the
|
|
9
|
+
// Gemini SDK's native/file deps — exclude the packages the API route spawns
|
|
10
|
+
// or streams from disk. (ADR-014: the analyze route runs the Node pipeline.)
|
|
11
|
+
serverExternalPackages: ["ffmpeg-static"],
|
|
12
|
+
|
|
13
|
+
// Vellum is a focused, single-window desktop tool; the floating Next.js dev
|
|
14
|
+
// indicator overlaps the app chrome and reads as noise in an otherwise clean
|
|
15
|
+
// monochrome shell (ADR-004). Hide it — this only affects dev, not the build.
|
|
16
|
+
devIndicators: false,
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export default nextConfig;
|
package/package.json
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@vasfal/vellum",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"publishConfig": {
|
|
6
|
+
"access": "public"
|
|
7
|
+
},
|
|
8
|
+
"description": "Think out loud over your screen; Vellum turns the recording into a structured report with timestamps, screenshots, and extracted tasks. Local-first, bring-your-own Gemini key.",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/vasfal/vellum.git"
|
|
12
|
+
},
|
|
13
|
+
"homepage": "https://github.com/vasfal/vellum#readme",
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/vasfal/vellum/issues"
|
|
16
|
+
},
|
|
17
|
+
"bin": {
|
|
18
|
+
"vellum": "bin/vellum.mjs"
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"bin",
|
|
22
|
+
".next",
|
|
23
|
+
"public",
|
|
24
|
+
"next.config.ts"
|
|
25
|
+
],
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=20"
|
|
28
|
+
},
|
|
29
|
+
"scripts": {
|
|
30
|
+
"dev": "next dev -p 4270",
|
|
31
|
+
"build": "next build",
|
|
32
|
+
"start": "next start",
|
|
33
|
+
"prepack": "rm -rf .next && next build",
|
|
34
|
+
"lint": "eslint",
|
|
35
|
+
"upload": "tsx --env-file-if-exists=.env.local scripts/upload-video.ts",
|
|
36
|
+
"analyze": "tsx --env-file-if-exists=.env.local scripts/analyze-video.ts",
|
|
37
|
+
"cli": "tsx --env-file-if-exists=.env.local scripts/cli.ts",
|
|
38
|
+
"validate:schema": "tsx scripts/validate-schema.ts",
|
|
39
|
+
"extract": "tsx scripts/extract-frames.ts",
|
|
40
|
+
"report": "tsx scripts/write-report.ts"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@base-ui/react": "^1.6.0",
|
|
44
|
+
"@google/genai": "^2.10.0",
|
|
45
|
+
"class-variance-authority": "^0.7.1",
|
|
46
|
+
"clsx": "^2.1.1",
|
|
47
|
+
"ffmpeg-static": "^5.3.0",
|
|
48
|
+
"lucide-react": "^1.22.0",
|
|
49
|
+
"next": "16.2.9",
|
|
50
|
+
"next-themes": "^0.4.6",
|
|
51
|
+
"react": "19.2.4",
|
|
52
|
+
"react-dom": "19.2.4",
|
|
53
|
+
"react-markdown": "^10.1.0",
|
|
54
|
+
"remark-gfm": "^4.0.1",
|
|
55
|
+
"shadcn": "^4.12.0",
|
|
56
|
+
"sonner": "^2.0.7",
|
|
57
|
+
"tailwind-merge": "^3.6.0",
|
|
58
|
+
"tw-animate-css": "^1.4.0",
|
|
59
|
+
"zod": "^4.4.3"
|
|
60
|
+
},
|
|
61
|
+
"devDependencies": {
|
|
62
|
+
"@tailwindcss/postcss": "^4",
|
|
63
|
+
"@types/node": "^20.19.43",
|
|
64
|
+
"@types/react": "^19",
|
|
65
|
+
"@types/react-dom": "^19",
|
|
66
|
+
"eslint": "^9",
|
|
67
|
+
"eslint-config-next": "16.2.9",
|
|
68
|
+
"tailwindcss": "^4",
|
|
69
|
+
"tsx": "^4.22.4",
|
|
70
|
+
"typescript": "^5"
|
|
71
|
+
}
|
|
72
|
+
}
|
package/public/file.svg
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 13.5V5.41a1 1 0 0 0-.3-.7L9.8.29A1 1 0 0 0 9.08 0H1.5v13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5m-1.5 0v-7H8v-5H3v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1M9.5 5V2.12L12.38 5zM5.13 5h-.62v1.25h2.12V5zm-.62 3h7.12v1.25H4.5zm.62 3h-.62v1.25h7.12V11z" clip-rule="evenodd" fill="#666" fill-rule="evenodd"/></svg>
|
package/public/globe.svg
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g clip-path="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.27 14.1a6.5 6.5 0 0 0 3.67-3.45q-1.24.21-2.7.34-.31 1.83-.97 3.1M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.48-1.52a7 7 0 0 1-.96 0H7.5a4 4 0 0 1-.84-1.32q-.38-.89-.63-2.08a40 40 0 0 0 3.92 0q-.25 1.2-.63 2.08a4 4 0 0 1-.84 1.31zm2.94-4.76q1.66-.15 2.95-.43a7 7 0 0 0 0-2.58q-1.3-.27-2.95-.43a18 18 0 0 1 0 3.44m-1.27-3.54a17 17 0 0 1 0 3.64 39 39 0 0 1-4.3 0 17 17 0 0 1 0-3.64 39 39 0 0 1 4.3 0m1.1-1.17q1.45.13 2.69.34a6.5 6.5 0 0 0-3.67-3.44q.65 1.26.98 3.1M8.48 1.5l.01.02q.41.37.84 1.31.38.89.63 2.08a40 40 0 0 0-3.92 0q.25-1.2.63-2.08a4 4 0 0 1 .85-1.32 7 7 0 0 1 .96 0m-2.75.4a6.5 6.5 0 0 0-3.67 3.44 29 29 0 0 1 2.7-.34q.31-1.83.97-3.1M4.58 6.28q-1.66.16-2.95.43a7 7 0 0 0 0 2.58q1.3.27 2.95.43a18 18 0 0 1 0-3.44m.17 4.71q-1.45-.12-2.69-.34a6.5 6.5 0 0 0 3.67 3.44q-.65-1.27-.98-3.1" fill="#666"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"/></clipPath></defs></svg>
|
package/public/next.svg
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1155 1000"><path d="m577.3 0 577.4 1000H0z" fill="#fff"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 2.5h13v10a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1zM0 1h16v11.5a2.5 2.5 0 0 1-2.5 2.5h-11A2.5 2.5 0 0 1 0 12.5zm3.75 4.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5M7 4.75a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0m1.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5" fill="#666"/></svg>
|