Arc’teryx mobile app

Cross-platform app for outdoor equipment stor

Maintenance and new features

  • app
  • front-end
  • devops
  • React
  • React Native
  • GraphQL
  • Typescript
  • Styled Components
  • multilingual
  • Apply

I was brought in to Apply Digital to help with maintenance and development of new features for the existing Arc’teryx mobile app.

It’s built with React Native but with no framework like Expo. There was some documentation but incomplete, outdated, and scattered, and as I got set up I did my best to update the documentation, hopefully meaning the next new developer on the project will have a head start.

Code linting was set up on this project but was not actually used by any of the developers, and not enforced at CI, because it had been neglected so long that there were hundreds of warnings and errors. After getting the project running, the first thing I did was to fix all of the trivial errors and warnings, then adjust the ruleset and add some “ignore” annotations so that it could pass, then enable it in CI. From there, I gradually fixed more and more of the issues, and tightened the ruleset back up. After this I felt much more confident making changes in this large codebase.

I was initially tasked with making changes to the product detail page, to match a newly refined set of designs. Some of this was completed, but before too long, I was asked to help the rest of the small team with the larger changes they were working on.

One was replacing their old customer engagement platform, which was changing from Leanplum to Braze.

Another was replacing their identity and access management platform, which was changing from Forgerock to Auth0.

Meanwhile, they had freshly changed build/CI platforms, from Appcenter to Bitrise, and there were still some issues.

That’s obviously a lot of changes to do at once, along with feature flagging, and I was able to help the team complete the changes. There were some hairy code merges from some long-running feature branches, but I was able to help with those too.

I also helped build a “brochure mode” feature, a “forced upgrade” feature, did a lot of refactoring, and provided various bugfixes.

Update in early 2026

I was hired again in the last quarter of 2025 to do some more work on this app.

This time, the back-end team were unifying various separate APIs into one, and so the web and mobile teams were to update their codebases to talk to the new API. This was not quite as easy as it sounds, given that they worked in slightly different ways and we were to keep the old implementations working, switched by feature flags.

There was a lot of searching the codebase for usages of particular functionality, lots of refactoring to add strong types and make it flexible enough for the API changes. At some point I found myself updating a test to match and then realizing this test was part of the test suite for an imported but diverged library, a test suite which had not been maintained and was not part of CI. Things had diverged so far that it was time to cut this out. I took that opportunity to also clear out other unused parts of the imported library and of the app itself. This changeset ended up removing over 200,000 lines of code from the repository!