
Philipp Steinrötter
788 posts

Philipp Steinrötter
@psteinroe
cofounder @hellomateode • hacking on a postgres language server • os hobbyists • postgres fan








I was a 10x engineer. Now I'm useless.














we were still on next 14 and decided to switch to @tan_stack instead of upgrading. results: • hmr: 2–10s → almost instant • fixed several long-standing issues during migration because it nudges you toward better patterns • vercel bill: $800 → $0 thanks @tannerlinsley! 🏝️

let me try to remember the steps: preparational work made sure every page was a single "app" component upgraded all dependencies that were at risk of causing cjs issues created an empty app with the root + routing + i18n + auth setup to learn patterns and document them set up tanstack start mcp, /agent-browser, and a custom skill based on the migration guide in the tanstack docs did a few days of dry runs to see where coding agents struggled and created a messy tasks document for the actual migration (~1 day by 1 person with codex pro and claude max) applied the next2tanstack codemod for the mechanical pieces (route file structure, next/link, next/image, next/use-client) and fixed some of the things it missed migrated all routes. 95% of them were just a hoc + a single app component, so this was basically a one-shot handled the remaining next-specific migrations (next/lazy, next/script, next/image → unpic/react) migrated off nuqs (no tanstack adapter yet) removed or replaced the remaining next-specific packages then fixing the things that broke, mostly server/client boundaries for the few things we do on the server dependencies that do not support esm, or should not run during ssr, were causing crashes. most of them were fixed quickly by upgrading to the latest version, using a vite plugin, or switching to clientonly / lazy imports we did ~2 days of reviewing and testing, and had our support team work in the new app for a day until we were confident enough to release it. it was quite messy, and this approach was really only possible because of coding agents, weekend work, and a small committed team. in larger teams (we are 6 devs), i would first wrap the next/ apis and do it incrementally.










