Atmora Tech

Engineering

The interface layer,
treated as engineering

Frontend is where most enterprise applications accumulate their debt, because it is the layer everyone edits and nobody owns. We take ownership of it: one component library, budgets that fail builds, and rendering decisions written down.

Overview

Design systems, rendering and accessibility owned by people who measure the result.

Symptoms first. Four button components, three date pickers, a bundle that grew 40 per cent in a year, and one screen nobody will touch because its state lives in five places at once. None of that is a design problem. It is missing engineering discipline at the interface layer, and it compounds quietly until delivery slows.

The fix is unglamorous. Audit what already exists, consolidate onto one component library with documented states, put type checking and lint rules where they block a merge, and make bundle size visible on every single pull request. Teams stop arguing about style once the tooling holds the opinion on their behalf.

We work inside your repositories and inside your review process. If the outcome is that your own engineers ship confidently without us in the room, the engagement worked. A frontend team that has to book a vendor in order to change a single form field is a liability rather than a service you are buying.

41%
reduction in critical-path bundle size after consolidation
46 from 118
components remaining after design system consolidation
9 defects
WCAG 2.2 AA issues left at re-audit, down from 214

Capabilities

What this covers

Six areas we staff properly. If your problem sits outside them, the honest note at the foot of this page says so.

  • Design system implementation

    Tokens, primitives and composite components built against your design source, with every interactive state, empty state and error state specified rather than improvised screen by screen.

  • State and data architecture

    Clear ownership of server cache, form state and ephemeral interface state, using TanStack Query alongside a small local store, so no value ends up with two homes that slowly drift apart.

  • Bundle and rendering optimisation

    Route-level code splitting, dependency substitution and a considered hydration strategy, decided with a profiler open. We report before and after in kilobytes and milliseconds, not adjectives.

  • Accessibility remediation

    Audit against WCAG 2.2 AA, a defect list prioritised by user impact, and fixes landed with regression tests so the same focus trap does not quietly reappear in next year's redesign.

  • Framework migration

    Incremental moves off AngularJS, Vue 2 or an in-house framework, running old and new side by side behind a routing shim so the business never waits on a single big-bang switch.

  • Frontend platform and tooling

    Build pipelines, a preview environment per pull request, visual regression tests and lint rules encoding your conventions, so review time goes on behaviour instead of formatting arguments.

Deliverables

What you get

  • Consolidated component library documented in Storybook
  • Written state ownership model and data-fetching conventions
  • Bundle analysis with before and after figures for each route
  • Accessibility audit, prioritised defect list and regression tests
  • Preview environments generated for every pull request
  • Migration plan built from reversible steps behind a routing shim

Stack

What we build it with

  • TypeScript
  • React
  • Vue 3
  • Next.js
  • Vite
  • Storybook
  • TanStack Query
  • Tailwind CSS
  • Radix UI
  • Playwright
  • axe-core
  • Chromatic

Process

How the engagement runs

Two-week increments against a written definition of done. You can stop at any increment boundary and keep everything built so far.

  1. Audit

    A fortnight measuring what you have: duplicate components, bundle composition, accessibility defects, and the screens your own engineers quietly avoid editing.

  2. Consolidate

    One component library, one styling approach, one data-fetching pattern. Duplicates get deleted rather than deprecated, and the codemods to migrate call sites ship with them.

  3. Gate it

    Type checking, lint rules, bundle budgets and axe-core checks move into CI. The standard becomes enforceable instead of a document nobody reopens after onboarding.

  4. Ship features through the new path

    Real feature work proves the system out. Anything the library cannot express is a gap to close, not a licence for another one-off component.

  5. Hand the keys over

    Your engineers own the library, with contribution guidelines, a review rota, and a deprecation policy giving consumers two releases of notice before anything is removed.

When this is the wrong engagement

If your product is one screen maintained by two developers, a design system and component library will cost more to maintain than the duplication they were brought in to remove.

FAQ

Questions we get asked

Is this the same as UI/UX design?

No. Design decides what the interface should be; frontend engineering makes it real, fast, accessible and maintainable. We work from your designers' output, or alongside our own design practice, but we do not sell interface engineering as a substitute for research and design work.

Can you improve an existing codebase rather than rewriting it?

That is most of what we do. Rewrites are often a way to avoid understanding the current system, and they stall the moment the business needs a feature mid-flight. Consolidation, codemods and strangling one route at a time keep delivery running while the foundation changes underneath.

How do you stop the design system from being ignored?

By making the supported path the easy one and the unsupported path visible. Components ship with documentation and examples, lint rules flag raw values where a token exists, and visual regression tests catch drift. Adoption is a tooling problem far more often than a discipline problem.

Do you work in our repository or a separate one?

Yours. We use your branching model, your review process and your CI, and our pull requests go through the same approvals as everyone else's. Working in a parallel repository just postpones an integration event, which is precisely the risk you are paying us to remove.

Start a project

Tell us what is
breaking.

We reply within one working day, and the first call is with an engineer who would actually work on it — not an account manager. If we are not the right studio for the problem, we will say so on that call.

Start a project