What changed
- New package
apps/web-start(@phaseo/web-start). It is the whole website rebuilt on TanStack Start 1.169 and running on Cloudflare Workers.apps/webis untouched, and nothing in this PR changes production. - Every route is ported: 347 route files, covering all pages, layouts, API route handlers, OG images,
robots.txtandsitemap.xml.- The preview runs at https://phaseo-web-start-preview.danielbutler500.workers.dev (workers.dev only, no custom domain).
- New CI matrix entry
web-start, which runstypecheckandbuildfor the package.
Commit 9d16fb8b9d copies apps/web/src verbatim. To review only the port, use git diff 9d16fb8b9d HEAD -- apps/web-start/src (793 files, +13.8K/−3.3K), plus the files outside src.
Why
-
Cost. We want to know whether the site can leave Vercel for Workers at a lower cost without losing speed, and which framework makes that cheapest.
-
Earlier measurements on 2026-10-30 (same shared components, same live data, mean CPU per render):
Framework 1× page 4× page vinext 37 ms 128 ms OpenNext 22 ms 46 ms TanStack Start 9 ms 22 ms -
The alternatives didn't hold up on the full app.
- vinext still needed 220–280 ms CPU per page after optimising.
- OpenNext could not deploy at all: 113.7 MiB against the 64 MiB Worker limit.
-
This PR answers the question with the real app: the measured cost and speed are in Before and after below.
How
- Next.js compatibility layer (
src/compat). Vite aliases pointnext/link,next/navigation,next/image,next/dynamic,next/headers,next/server,next/og,next-intl,next-intl/server,flags/nextand others at small shims. The copied components therefore mostly run unchanged. - Data loading. The 252 async server components became plain SSR:
- Data comes through
createServerFnin*.functions.ts, read withuseSuspenseQuery. setupRouterSsrQueryIntegrationstreams the results to the browser.- Route loaders prefetch, and handle redirects and not-founds before render.
- Data comes through
- Generated routes (
scripts/codemods/generate-routes.mjs) wrap each Next page or layout and run itsgenerateMetadatain a server function.- Catch-all segments become
$.tsxfiles. A$/index.tsxsplat matches an empty tail and shadowed the model page. - Redirect-only pages redirect in
beforeLoad.
- Catch-all segments become
- Request middleware (
src/lib/start/requestMiddleware.ts,session.ts) replacesnext.config.mjsredirects/headers andsrc/proxy.ts. It covers:- locale negotiation;
- the Supabase session refresh;
- proxies for
/api/_web|account|chat|internal,/docsand/ingest; - markdown negotiation and the blog preview gate.
- Server actions.
"use server"modules become POST stubs to/api/server-actions. The endpoint checks the Origin and only calls registered exports. - Build plugins (
build/phaseo-plugins.ts):- blog MDX is compiled at build time;
src/contentis served from static assets through an fs shim;- the Geist font for OG images is inlined.
- Worker memory. A Worker isolate holds every uploaded module's source within its 128 MB, and any file with one non-Latin1 character costs 2 bytes per character. The first deploy needed about 81 MB for source alone and took about 2 s to first byte. The fixes:
- translations load from static assets;
- Shiki and the docs search index stay out of the server bundle;
- server chunks escape non-Latin1 text where that is smaller.
- Trade-off: we return real 404s for unknown models and providers. Next streamed those as 200 with a not-found page.
Before and after
Method: 300 requests replaying the production page and locale mix at 1 request/s (seed 9). CPU comes from wrangler tail, and first byte is measured client-side from London. vinext was measured the same way on 2026-10-30, and the Vercel figure comes from that same session.
| Metric | vinext on Workers (optimised) | TanStack Start on Workers (this PR) | Change |
|---|---|---|---|
| Mean CPU per page | 220–280 ms (3 runs) | 104 ms | about −55% |
| Median CPU per page | 165–217 ms | 70 ms | about −60% |
| p90 CPU per page | – | 257 ms | – |
| Median first byte | 139–182 ms (Vercel: 84 ms, cached) | 141 ms | about the same as vinext |
| p90 first byte | – | 566 ms | – |
| Errors | 0 / ~900 | 0 / 300 (294 × 200, 6 × 404 retired providers) | – |
| Server bundle | 21.8 MB | 29.6 MB (11.5 MB → 6.8 MB gzip after trimming) | – |
| Estimated isolate source memory | – | 80.7 MB → 29.8 MB after trimming | −63% |
Median CPU by page type: models 90 ms, rankings 153 ms, tools 285 ms, home 58 ms, api-providers 47 ms, benchmarks 31 ms, compare 28 ms, chat 17 ms.
Verification
pnpm --filter @phaseo/web-start typecheck: clean.vite build: passes with and without the local env file, as CI will run it.- Parity against https://phaseo.app (
scripts/parity-check.mjs, Playwright: status, title, visible text, console and page errors, error screen):- 50 of 58 sitemap route shapes, plus 11 of 12 extra locale checks (zh-Hans, ar-SA, ja, hi, fr-FR, de-DE, es-ES, pt-BR), match.
- The remaining differences are all explained:
/pricing(and its locale versions) is missing the Enterprise section. It is behind a Statsig gate, and the Statsig server key is not set on the preview Worker.- Three methodology pages log missing-message errors. Prod has the same bug: phaseo.app shows raw translation keys as section headings.
/chat/imagehas a " | Phaseo" title suffix that prod omits because of a quirk in Next's title templates.- Unknown models and providers return a real 404 instead of 200.
- Spot checks with curl: the redirects match prod, including retired model sub-paths,
/docs,/en-GB/*, the social links,/chat/audioand/gateway/usage?tab=.sitemap.xmllists the same 2,745 URLs as prod. - Not verified:
- Signed-in flows (settings, billing, server actions with a session) on the preview, since its workers.dev address is not an allowed auth origin.
- Admin and internal pages.
- Real browsers other than Playwright Chromium.
- The web Jest suite, which is not configured for
apps/web-start.
- Review: sol-loop, 2 rounds with GPT-6.1 Sol. Round 1 found one blocker: unscoped account query keys would have made the session listener clear the cache and reload the page. It is fixed in
39ae0203c8, and round 2 approved. - No changeset:
@phaseo/web-startis private and not published.
Reviewed with sol-loop: 2 rounds with gpt-6.1-sol on high. Sol verdict: approved
Model: Claude Opus 5.5 (effort unknown) · Harness: Claude Code in T3 Code
🤖 Generated with Claude Code
Activity
36Codex Review Summary
This comment shows the latest Codex review activity on this pull request.
| Review | Status | Commit | Review trigger |
|---|---|---|---|
| 📝 Code Review | ✅ Completed 2026-10-30T22:41:37.490762Z | 39ae020 | PR opened |
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review" or "@codex security review".
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.
Dependency Review
The following issues were found:- ✅ 0 vulnerable package(s)
- ✅ 0 package(s) with incompatible licenses
- ✅ 0 package(s) with invalid SPDX license definitions
- ⚠️ 2 package(s) with unknown licenses.
License Issues
apps/web-start/package.json
| Package | Version | License | Issue Type |
| @phaseo/app-kit | workspace:* | Null | Unknown License |
| @phaseo/ui | workspace:* | Null | Unknown License |
OpenSSF Scorecard
Scorecard details
| Package | Version | Score | Details | |||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| npm/katex | 0.16.47 | :green_circle: 4.3 | Details
| |||||||||||||||||||||||||||||||||||||||||||||
| npm/@1password/save-button | ^1.3.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@base-ui/react | ^1.3.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@cloudflare/vite-plugin | ^1.65.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@dnd-kit/core | ^6.3.1 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@dnd-kit/sortable | ^10.0.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@dnd-kit/utilities | ^3.2.2 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@dqbd/tiktoken | ^1.0.22 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@eslint/eslintrc | ^3 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@flags-sdk/statsig | ^0.2.5 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@fontsource-variable/montserrat | 5.3.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@fontsource-variable/noto-sans-arabic | 5.3.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@fontsource-variable/noto-sans-devanagari | 5.3.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@fontsource-variable/noto-sans-jp | 5.3.1 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@fontsource-variable/noto-sans-sc | 5.3.1 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@formatjs/icu-messageformat-parser | 3.5.21 | :green_circle: 4.2 | Details
| |||||||||||||||||||||||||||||||||||||||||||||
| npm/@hookform/resolvers | ^5.7.1 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@mdx-js/mdx | 3.1.1 | :green_circle: 4.4 | Details
| |||||||||||||||||||||||||||||||||||||||||||||
| npm/@number-flow/react | ^0.6.2 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@octokit/rest | ^22.0.1 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@openuidev/react-lang | 0.3.2 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@phaseo/app-kit | workspace:* | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@phaseo/ui | workspace:* | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@playwright/test | ^1.62.1 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@react-three/drei | ^10.7.9 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@react-three/fiber | ^9.6.1 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@rive-app/react-webgl2 | ^4.36.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@shadcn/react | 0.3.1 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@shikijs/colorized-brackets | ^4.3.1 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@statsig/js-client | ^3.33.5 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@statsig/react-bindings | ^3.33.5 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@statsig/session-replay | ^3.33.5 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@statsig/web-analytics | ^3.33.5 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@streamdown/math | ^1.0.2 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@stripe/react-stripe-js | ^6.3.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@stripe/stripe-js | ^9.7.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@supabase/ssr | ^0.12.7 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@supabase/supabase-js | ^2.112.4 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@tailwindcss/vite | 4.3.3 | :green_circle: 7 | Details
| |||||||||||||||||||||||||||||||||||||||||||||
| npm/@tanstack/react-query | 5.104.5 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@tanstack/react-router | 1.170.46 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@tanstack/react-router-ssr-query | 1.167.3 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@tanstack/react-start | 1.169.4 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@tanstack/react-table | ^8.21.3 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@tanstack/react-virtual | ^3.14.6 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@types/jest | ^30.0.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@types/node | ^26 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@types/react | 19.3.0 | :green_circle: 6.6 | Details
| |||||||||||||||||||||||||||||||||||||||||||||
| npm/@types/react-dom | 19.3.0 | :green_circle: 6.6 | Details
| |||||||||||||||||||||||||||||||||||||||||||||
| npm/@types/three | ^0.184.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@typescript/native | catalog: | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@upstash/ratelimit | ^2.0.6 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@upstash/redis | ^1.39.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@vercel/og | 1.0.3 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/@vitejs/plugin-react | 6.1.2 | :green_circle: 7.4 | Details
| |||||||||||||||||||||||||||||||||||||||||||||
| npm/@xyflow/react | ^12.11.1 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/ai | ^6.0.168 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/ajv | ^8.20.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/ajv-formats | ^3.0.1 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/baseline-browser-mapping | ^2.9.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/cheerio | ^1.1.2 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/class-variance-authority | ^0.7.1 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/cmdk | ^1.1.1 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/cn | ^0.2.4 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/date-fns | ^4.4.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/dotenv | ^17.4.2 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/drizzle-kit | ^0.31.11 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/echarts | ^6.1.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/echarts-for-react | ^3.0.2 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/embla-carousel-react | ^8.6.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/eslint | ^10.13.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/fast-xml-parser | ^5.11.2 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/flags | ^4.1.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/fuse.js | ^7.5.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/glicko2 | ^1.2.1 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/google-play-scraper | ^10.0.1 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/html-to-image | 1.11.13 | :green_circle: 3.4 | Details
| |||||||||||||||||||||||||||||||||||||||||||||
| npm/i18n-iso-countries | ^7.14.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/input-otp | ^1.4.2 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/jest | 30.2.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/jest-environment-jsdom | 30.5.2 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/jest-environment-node | 30.4.1 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/js-yaml | ^4.2.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/jspdf | ^4.2.1 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/jspdf-autotable | ^5.0.8 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/jszip | ^3.10.1 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/lucide-react | ^1.17.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/motion | ^13.1.1 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/nanoid | ^6.0.1 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/next-themes | ^0.4.6 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/nuqs | ^2.10.1 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/obscenity | ^0.4.6 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/octokit | ^5.0.5 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/postcss | ^8 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/postgres | ^3.4.9 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/posthog-js | ^1.372.10 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/posthog-node | ^5.28.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/react | 19.3.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/react-day-picker | ^10.0.1 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/react-dom | 19.3.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/react-fast-marquee | ^1.6.5 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/react-hook-form | ^7.81.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/react-markdown | ^10.1.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/react-resizable-panels | ^4.12.4 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/recharts | ^3.10.1 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/rehype-raw | ^7.0.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/rehype-sanitize | ^6.0.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/remark-breaks | ^4.0.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/remark-gfm | ^4.0.1 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/resend | ^6.12.4 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/shadcn | ^4.12.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/shiki | ^4.4.3 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/sonner | ^2.0.7 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/streamdown | ^2.5.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/stripe | ^22.1.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/tailwindcss | ^4 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/tailwindcss-animate | ^1.0.7 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/thinking-orbs | 0.3.1 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/three | ^0.184.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/tokenlens | ^1.3.1 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/tsx | ^4.23.13 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/tw-animate-css | ^1.4.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/typescript | catalog: | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/typescript-eslint | ^8.60.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/use-intl | 4.13.7 | :green_circle: 4.2 | Details
| |||||||||||||||||||||||||||||||||||||||||||||
| npm/use-stick-to-bottom | ^1.1.6 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/vaul | ^1.1.2 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/vite | 8.3.4 | :green_circle: 6.5 | Details
| |||||||||||||||||||||||||||||||||||||||||||||
| npm/wrangler | ^4.152.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/ws | ^8.21.0 | Unknown | Unknown | |||||||||||||||||||||||||||||||||||||||||||||
| npm/zod | ^4.6.7 | Unknown | Unknown |
Scanned Files
- apps/web-start/package.json
Closing: this was an experiment to measure whether the website could move to Cloudflare Workers. The measurements are in the description above, and the branch stays as a reference.
The latest updates on your projects. Learn more about Vercel for GitHub.