tombeckenham Profile Banner
Tom Beckenham Profile
Tom Beckenham

@tombeckenham

Followers
755
Following
969
Media
97
Statuses
2K

Founder, Engineer and fixer. Contributor to @loggipop, @flow_blockchain Wallet. Ex founder @commapayments, @specle

Sydney, New South Wales
Joined September 2008
Don't wanna be here? Send us removal request.
@tombeckenham
Tom Beckenham
4 days
You can read more about the whole journey here
Tweet card summary image
medium.com
Using Claude Code to rapidly rebuild a legacy frontend
0
0
0
@tombeckenham
Tom Beckenham
4 days
Unfortunately, I didn't get to see the whole site go live. The exercise taught me that businesses no longer have to put up with poorly functioning legacy codebases that teams are too scared to touch. A complete rewrite does not have to shut down your business.
1
0
0
@tombeckenham
Tom Beckenham
4 days
We could take the analysis from the first set of agents, and with a carefully crafted set of rules, recreate whole pages with @claudeai and easily test that it worked in the same way as the old site.
1
0
0
@tombeckenham
Tom Beckenham
4 days
As we weren't changing any functionality, and used the same backend, we could work on any page we liked - using the old site and existing data. Being able to work on pages without relying on others being created first unlocked parallel velocity
1
0
0
@tombeckenham
Tom Beckenham
4 days
The data design approach was to work backwards from the API calls made on submitting actions then use the same types generated from heyapi as local state.
1
0
0
@tombeckenham
Tom Beckenham
4 days
The stack I chose used @bunjavascript, @vite_js, @tan_stack query, router, and form, @UntitledUI over shadcn, and heyapi created by @mrlubos. Open API codegen saved us a tonne of time.
1
0
2
@tombeckenham
Tom Beckenham
4 days
I set the project up as a client side only React app. We already had multiple backend servers, and the last thing we wanted was another one. I’ve also found limited benefit in using SSR given how amazing the @tan_stack client side tools are.
1
0
0
@tombeckenham
Tom Beckenham
4 days
The better approach was to have Claude analyze the code, then describe the functionality and content of the old site textually. It described components and what they did rather than how they looked. Claude then made better choices when creating new pages.
1
0
0
@tombeckenham
Tom Beckenham
4 days
My first approach was to use Playwright MCP to click around to recreate the experience. This worked “ok”, but when I tried using the using screenshots to prompt Claude to create a version in React, it was hard to prevent it from recreating the old UI pixel by pixel.
1
0
0
@tombeckenham
Tom Beckenham
4 days
A lot of knowledge is stored in legacy code bases – years of small adjustments that evolve the product. It sounds easy, but properly replicating functionality is hard in a rewrite.
2
0
5
@tombeckenham
Tom Beckenham
11 days
This is how @DrizzleORM describes itself in the docs "Drizzle is a good friend who’s there for you when necessary and doesn’t bother when you need some space."
0
0
2
@tombeckenham
Tom Beckenham
17 days
This is a great addition. Before this I was creating specialised agents (like a Tanstack Form specialist) as rules became too long. Skills will replace that. Awesome work @adocomplete
@adocomplete
Ado
17 days
We're launching Claude Agent Skills, a filesystem-based approach to extending Claude's capabilities. Progressive disclosure means agents load only relevant context. Bundle instructions, scripts, and resources in a folder. Claude discovers and executes what it needs.
0
0
0
@tombeckenham
Tom Beckenham
23 days
Bun is a beautiful piece of engineering. On top of that, @jarredsumner and the team properly listen to the community and target what’s important. It’s going to get bigger and bigger over the coming years
@bunjavascript
Bun
23 days
Introducing Bun v1.3 https://t.co/GdwAaLh5wD
0
0
2
@tombeckenham
Tom Beckenham
24 days
The next stage would be to fully analyse the current app page by page and scaffold the new one.
0
0
0
@tombeckenham
Tom Beckenham
24 days
Success would be defined as: ✅ Every bit of functionality from the old app was in the new ✅ The new code was clean, lightweight, and performant ✅ Having extensive storybook and test coverage
1
0
1
@tombeckenham
Tom Beckenham
24 days
The plan was: - Split the new app from Express. Keep using it for auth - Use the latest API given it had an OpenAPI spec - don't change the backend - Recreate the whole app with a modern component library - Leverage AI as much as we possibly could to build it.
1
0
0
@tombeckenham
Tom Beckenham
24 days
The frontend itself was split into 5 apps - a mix of Angular and Vue.js. If a refactor takes too long, business pressures get in the way. It was clear that if we were going to succeed, we had to keep the project short, defined, with clear outcomes.
1
0
1
@tombeckenham
Tom Beckenham
24 days
However, there were 3 versions of API - the oldest of which talked to a “second backend” on the express server itself.
1
0
0
@tombeckenham
Tom Beckenham
24 days
Looking at the codebase it was a tale of broken dreams - all working together in beautiful harmony. 😇 At the heart of it was an Express server that: - “Served” the frontend - Handled auth - Proxy’d API calls to the backend 👇
1
0
1
@tombeckenham
Tom Beckenham
25 days
Finally
@maxmarchione
Max Marchione
26 days
overheard in sf: australia is very in right now
0
0
1