Skip to content
Book a call

Consumer · Consumer reference app

Blumcatch

Three platforms, two stores, one release command.

Role
Mobile + release engineering
Duration
7 months
Team
2 from our side
Sector
Consumer reference app
Identify
Match
Monstera deliciosa
96%confidence
blumcatch — identify flow
MonsteraSave
Lightindirect
Waterweekly
Toxicitypets
My plants12
Monstera deliciosaok
Ficus lyratadue
Sansevieriaok
Calatheaok
Pothosdue
blumcatch — plant reference
chrome extension
any page
Blumcatch
Ficus lyrata
91%saved
blumcatch — chrome extension

Interface illustrations, not screenshots — the client's product is under agreement.

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.