Frontend development
Most front ends we are asked to look at were not built badly. They were built quickly, by several people, each bringing a component library, a state manager and a way of fetching data. The result is an app that is slow on a mid-range phone, awkward with a keyboard, and takes a week to change one screen. We work inside that codebase, make it fast and usable, and leave behind a design system your team will actually reach for.
Four ways this arrives.
We measure on real devices and real traffic first, not a lab score on a fast laptop. The fix is usually less JavaScript: a smaller bundle, images sized for the screen, and third-party scripts that stop blocking the first render.
A procurement checklist, a customer complaint, or a letter from a lawyer. We fix the causes rather than the line items: real buttons, labelled forms, focus that lands somewhere sensible, and automated checks in CI so it stays fixed.
Global state that everything reads, no types, and three versions of the same modal. We add TypeScript file by file, put tests on the flows that make money, and move shared pieces into one component library as screens are touched.
Usually for search visibility or first-load speed. We move it route by route behind the same URLs, so the old app keeps serving while the new one takes over, and nobody has to sign off a risky weekend cut-over.
A Next.js web app with five operational dashboards and Tableau reports rendered in place, without a second login.
Read the write-up →Asked on nearly every call.
Do we need to move to Next.js?+
Not always. If the app sits behind a login and nobody finds it through search, a well-built React single-page app on Vite is simpler to host and easier to reason about. Next.js earns its keep when first load and search visibility matter, or when you want rendering close to the data. We will tell you which case you are before anyone rewrites a route.
Can you work from our Figma files?+
Yes, and we will ask questions about them. Designs rarely show the loading state, the empty state, the error, or what happens when a name is twice as long as the mock-up assumed. We raise those early and propose something, rather than inventing it quietly in code and leaving your designer to find out in review.
Will you build us a design system?+
We will build the one your product needs, which is usually smaller than people expect: design tokens, the components you actually use, and Storybook to show them. We extract it from the screens you already have rather than designing it in isolation, because a component library nobody migrates to is just a second way of doing things.
How do you handle accessibility?+
We build to WCAG 2.2 AA by default, test with a keyboard and a screen reader, and run automated checks in CI so regressions are caught before they ship. Automated tools find only part of the problem, so we also test the key journeys by hand: sign-up, checkout, and anything a user does every day.
Do you only do the front end, or the API as well?+
Either. A lot of front-end pain is really an API shaped for a different screen, and when that is the case we can fix both sides. If your backend team owns the API, we write down what the front end needs from it and agree the contract with them, rather than working around it in the browser.