hehe.software

For teams shipping on both phones

One codebase for iOS and Android, in React Native or Flutter

hehe.software offers cross-platform app development in React Native or Flutter, with shared workflows and the platform-specific work scoped explicitly. We work remotely from Vancouver with businesses and agencies across Canada and the United States, including on products we did not build. Email mwe@hehe.software or use the contact form with what you need; a defined sub-project, white-label or credited, is welcome.

Email us

React Native & Flutter, properly.

Native iOS and Android, or one codebase for both.

01

When a shared interface fits

React Native uses JavaScript or TypeScript with native components; Flutter uses Dart and its widget system. We start from a workflow someone can complete on the target devices, including empty and failed states.

A shared interface can suit lists, forms, bookings and account workflows used on both phones. Native code may still be needed for device integrations, widgets or extensions. An offline SQLite dataset alone does not determine the framework: data size, query behaviour, synchronisation and device testing matter. We compare the difficult requirements before choosing native or shared-code implementation.

02

Typical jobs

A new app scope includes its main screens, validation, network failures and permissions. Push notifications, tablet layouts and backend work are listed explicitly when they belong in the release.

Existing-project repairs can cover release-only crashes, broken deep links, incompatible dependencies or native integrations that behave differently on each platform. We reproduce the fault before deciding whether to repair a module or change the wider architecture.

Sharing screens does not remove native integration, release or maintenance work. We confirm purchase rules for the product and storefront, then test the agreed provider’s successful, failed and recovery paths. Reading cached data and synchronising offline edits are separate requirements.

03

From the first email to handoff

Send the job, who uses it, both stores or one first, and a date tied to an event. Named screens are a fixed-price project. A bug we can reproduce is hourly. No screens yet, or React Native, Flutter, and native still open, means paid discovery. You keep the write-up if you stop.

Your business controls the repository and store accounts. We agree access, ownership and handoff terms, then provide test builds for the target platforms before submission. Release instructions and required settings are documented. Store approval remains a separate step.

04

Expo, React Native, and Flutter

React Native work can use Expo or an existing native project. The scope identifies the build workflow and any native integrations. We use a development or release build suitable for testing those integrations, rather than assuming a preview environment covers every feature.

An appropriately configured React Native update service can deliver compatible JavaScript and asset changes without a new store binary, subject to store policies. Native-code, permission and SDK changes need a compatible new build. Flutter work uses Dart and supported platform integrations. Where a package cannot cover a required device API, the scope identifies the native module and its tests.

Both stacks call your API. Building a backend, or the same account in a browser, is a separate quote. A new app gets one way to hold state and one way to navigate, written down. An existing app keeps what it has, unless that is the bug. Accessibility, when you ask, means we implement the technical side of WCAG: names on controls, type that scales, and a screen-reader path. We do not certify compliance.

05

Who it suits

Write if you can describe the screens and you want a React Native developer or a Flutter developer to build them, extend them, or continue a repository that stalled. An agency can send that slice under its name or with a credit. Your own developer can keep the API or a native module while we take the shared screens.

If the brief is still open, paid discovery can turn it into a defined feature list and acceptance checks. If you already have a developer or agency, we can take a bounded part of the work and agree how it joins the wider project. Share the target date so we can assess capacity and dependencies before committing.

06

What we have shipped, and what to send

Our nine published App Store products use native Swift and SwiftUI. Tifo includes Apple TV, Moonflower includes a Safari extension, and ICD Atlas uses offline reference data. They demonstrate native integration and release work. A React Native or Flutter project should be judged through its own prototype, repository and builds on both target platforms.

Send the version-one job, the audience, both phones or which is first, and who will maintain the app. Designs, an API note, or a repository help if you have them. Say whether a purchase is used inside the app. We can agree who owns the Apple and Google accounts before a password is shared.

Ways to work with us

Built by us

Nine apps of our own are live on the App Store. These are a few — built, shipped and maintained by us.

Questions

When should we choose React Native or Flutter?

A shared codebase can fit when iOS and Android support the same product workflows and the maintenance team can work in that stack. Device integrations, offline behaviour and platform-specific screens still need investigation. We can use paid discovery to compare the difficult requirements before you commit.

Will one codebase remove platform-specific work?

It can share much of the interface and application logic, but signing, store releases and device testing remain separate. Some features need Swift or Kotlin modules, and widgets or extensions need their own scope. The quote identifies those parts rather than treating two releases as one test.

Can you work with our developer or agency?

Yes. An agency can hire the cross-platform work as a sub-project, white-label or credited. Your developer can keep the API or a native module while we take the shared screens, or the reverse. Before any editing, we agree who merges and who submits.

Do you maintain the app after it ships?

Hourly work covers a crash, a review note, or a small change, including on an app we did not build, once it compiles. A monthly retainer covers dependency updates, a new operating system, and a resubmission. We write that coverage down first. A shared language does not retire the iOS or Android project.

How do quotes work, and how do you choose the stack?

Email mwe@hehe.software or use the contact form. Pricing is quote-only: we scope the work, then send a fixed quote or an hourly estimate, and we do not publish prices. An open brief, or an open choice between React Native, Flutter, and native, is paid discovery, and you keep the scope if you stop. We suggest React Native when maintainers know React and the screens match, Flutter when they will work in Dart and want one custom interface, and native Swift or Kotlin when a platform API is the product.

Tell us what needs doing.

A short email is enough: what you have, what’s wrong or missing, and when you need it. We reply with questions or a plan.

mwe@hehe.software