Skip to content
Book a call

Consumer · Consumer reference app

Bloomcatch

Three platforms, two stores, one release command.

Role
Mobile + release engineering
Duration
7 months
Team
2 from our side
Sector
Consumer reference app
bloomcatch — identify flow
bloomcatch — plant reference
bloomcatch — chrome extension

The situation

Plant identification and reference for iOS and Android, with a companion Chrome extension sharing the same catalogue and account.

A small team shipping to three platforms, where the cost of releasing was starting to determine how often they were willing to release.

The problem

Releasing meant a long manual sequence per platform: bump versions, build, sign, screenshot, upload, fill in metadata. Hours of careful clicking, and every step a place to make a mistake at the end of a long day.

The predictable consequence is batching. Releases get bigger and rarer, which makes each one riskier, which makes the team even less willing to ship.

What we built

  1. 01

    One React Native codebase, three targets

    iOS, Android, and the extension sharing catalogue, identification, and account logic rather than three drifting implementations.

  2. 02

    Fastlane over the whole release

    Versioning, signing, building, screenshots, and store metadata as code. The pipeline builds from a clean checkout, so it cannot depend on one laptop's state.

  3. 03

    Push and analytics wired once

    Notification handling and event tracking behind a single interface, so adding a campaign does not mean touching platform code twice.

  4. 04

    CI on every branch

    Build and test on push, so a broken release candidate is found on a pull request rather than during submission.

React NativeFastlaneCI/CDPushChrome extensionNode

The outcome

Release cycle cut from a manual multi-hour process to a single automated command across both stores.

Shipping stopped being an event that needed scheduling. Smaller, more frequent releases followed, which is the actual benefit — the saved hours are secondary.