← All work

A leadership author's company

Leadership exercises on phone, desktop and web, shipped from one codebase for launch

A leadership author's company had a working web prototype built in Lovable and a Google Play deadline. We planned a native rebuild, tested it against wrapping the existing code in the first week, and packaged the client's own codebase for iOS, Android, Windows, macOS and Linux.

EdTechLeadership practice appModernized a live product

Phone: Lover exercise "End Relationships Well" with Your Notes and Complete button

The challenge

A leadership practice app existed only as a web prototype on Supabase, and the launch needed a Google Play submission, with terms and privacy documents, by a fixed date.

What we did

We tested a React Native rebuild against wrapping the web code, chose the wrap, packaged it with Capacitor for phones and Electron for desktops, and kept the client's Supabase.

The outcome

One codebase now runs on web, iOS, Android, Windows, macOS and Linux with accounts and progress synced, and the Android app went to Google Play for the launch.

Platforms
Web, iOS, Android, Windows, macOS, Linux
Codebase
One, the client's own, no rewrite
Sync
Accounts and progress on every device
Release
Android app submitted to Google Play

The starting point

A leadership development app from a leadership author's company. Each day a user gets a short practice exercise, completes or skips it, writes reflections and reviews their history.

What had to change

The product existed only as a web prototype built in Lovable with Supabase behind it. The client needed real apps on phones and desktops, with progress in sync, and a launch that depended on a Google Play submission.

What could not break

  • The Google Play submission had to go in on the client's deadline
  • Accounts and progress stay in the client's own Supabase organization
  • The same features on web, phone and desktop, from one codebase
  • Everything released under the client's own store account and brand

The calls we made

Our first plan was a full native rebuild; we tested whether the working prototype needed rebuilding at all before committing to it.

  1. 01

    Wrap the code, do not rewrite it

    In the first week we built a React Native prototype and tested Capacitor on the existing web code side by side. The wrap kept every feature and left one codebase to maintain, so we chose it.

    Ruled out

    Our own first plan: a React Native rebuild with a new Node.js and PostgreSQL backend on AWS.

  2. 02

    Keep the data layer the client owns

    Supabase already held accounts, exercises and progress in the client's own organization, so every platform signs in and syncs through it and no user data had to move.

    Ruled out

    The separate backend in that first plan.

  3. 03

    Android first, desktop second

    The launch depended on the Google Play submission, so phone builds, local notifications and the store release came first, and the Electron desktop builds followed once the store build was in.

How the system fits together

same codesame codeas beforebuildsbuildssign in, syncsign in, syncsign in, syncAndroid releaseWeb codebaseReact, TypeScript andVite, built in LovableCapacitor wrapperLocal notifications, appname and iconElectron packagingDesktop builds from thesame codeiOS and Android appsDaily exercise,reflections, historyDesktop appsWindows, macOS and LinuxWeb appThe client's existing webappSupabaseAuth and progress, in theclient's organizationGoogle PlayClient's own developeraccount
Client's existing systemBuilt by DaticsData storeOutside serviceOne web codebase feeds every platform, and all of them sign in and sync through the client's own Supabase.

What we built

01

iOS and Android apps

The web codebase wrapped with Capacitor, with local notifications for the daily exercise and the store's app name and icon.

02

Desktop apps

Windows, macOS and Linux builds packaged with Electron from the same code.

03

Fixes for packaged builds

Issues that appeared only once packaged, such as images on the history page, clearing history and the first Android builds, fixed once in the shared code.

04

Store release and handoff

Android builds released through the client's own Google Play developer account, then project documentation so the client can keep releasing.

How it works

The user signs in

Accounts run on the client's Supabase, so the same login works on every device.

The daily exercise arrives

A local notification on the phone points the user to the day's exercise.

They act and reflect

The user completes or skips the exercise and writes notes.

Progress follows them

History saves to Supabase and shows up on web, phone and desktop.

A closer look

What changed

One codebase now runs as a web app, iOS and Android apps and Windows, macOS and Linux desktop apps, with accounts and progress synced. The client kept the code it already had, and the Android app went to Google Play for the launch.

Six, from one codebase
Platforms
Android app submitted to Google Play
Store

Under the hood

Datics role
Modernized a live product
Packaging
Capacitor for iOS and Android, Electron for Windows, macOS and Linux, all from one React, TypeScript and Vite codebase.
Data
Supabase authentication and database in the client's own organization.
Device features
Local notifications for the daily exercise on phones.

Data and retrieval

Supabase

Apps and APIs

React

Also in the stack

TypeScriptViteCapacitorElectron

How it shipped

  1. Test both paths

    A React Native prototype and a Capacitor wrap of the existing code, side by side, and a decision for the wrap.

  2. Phones

    iOS and Android builds, cosmetic fixes, local notifications and the first Android package.

  3. Store release

    Fixes found in the packaged builds, then the Android app submitted to Google Play with its terms and privacy documents.

  4. Desktop and handoff

    Electron builds for Windows, macOS and Linux, the final app name and icon, refreshed store builds and project documentation.

In the client's accounts

The client invited us into its Supabase organization and its Google Play developer account, so the data, the apps and the store listing stayed in its name.

Paced by the launch

Each step was planned backward from the store submission, and we stayed in constant contact with the client while the deadline closed in.

What this unlocked

With one codebase and the documentation we handed over, the client can change the app once and release it to every platform.

Have a product with the same kind of constraints?

Tell us what already exists and what you want it to do. We will tell you what it takes.

Book a 30-minute Product Review