all notes
2026-07-05Naman Barkiya

ONETAPP build postmortem: four calls, three cuts, ten weeks.

ONETAPP is a cross-platform gaming rewards platform — Electron desktop app, landing site, user panel, and admin dashboard — built from concept to live cohort in ten weeks, with three features cut in week one (mobile, social leaderboard, publisher API) because none had users to validate them at launch.

A concept and no codebase to a live gaming rewards platform in ten weeks. These are the four calls that defined the build — and the three features that did not ship.

ONETAPP is a cross-platform desktop gaming rewards platform — landing site, Electron app, user panel, admin dashboard — shipped from concept to live cohort in ten weeks. We were given a one-line brief and a blank repo. These are the four decisions that defined the build and the three features that did not make it.

The founder's problem was real: gamers complete challenges across titles — Steam achievements, in-game tasks, competitive placements — with no single system to recognise that value and convert it into real-world rewards. The market had loyalty programs and gaming peripheral sponsors, but nothing that treated the completion itself as the asset.

Why desktop-first and not mobile?

The brief did not specify platform. The founder assumed mobile. We spent the first three days of week one challenging that assumption.

Gaming is a desktop activity. Gamers sit at a desk, have their Steam client open, and leave it running in the background. A background app that tracked challenge completion without requiring the user to navigate to a separate tab — that was the product. A mobile companion could come later. Starting on mobile would have inverted the use case.

We proposed Electron as the shell, with a React frontend on our standard stack and Postgres on Supabase. The founder took two days to sign off. We started building in week two.

That call was right. Every piece of user research run after launch confirmed it: users kept the app open during sessions. It never competed with the game for attention. A browser tab would have been closed.

What was in scope from day one?

Four surfaces in ten weeks:

We cut two mobile builds, a social leaderboard, and a publisher API. None of those cuts happened under pressure. They were made in week one, in the scope session, before a line of code was written.

Which features did we cut, and why?

Mobile app. The brief mentioned it. We removed it after the platform decision. Building Electron and React Native simultaneously would have halved the quality of both. If the desktop launch proves the hypothesis, mobile is the second engagement.

Social leaderboard. The founder wanted a public leaderboard comparing all users across challenges. We declined for one reason: a leaderboard's value is determined by volume, and at launch there is no volume. A leaderboard with forty entries reads as abandoned — which is worse than no leaderboard at all. We built the data infrastructure. The UI ships when there is enough activity for it to read as alive.

Publisher API. The long-term vision includes game publishers adding challenges directly through an API, removing the need to maintain the catalog manually. That is a real product need — and a six-week build with no users yet to validate it. We documented the intended schema and deferred the build entirely.

The cuts are not concessions. A feature deferred until it has users to validate it is not a feature removed. A feature built at launch that no one uses is scope that slowed everything else. Four of forty-two features we have deferred across builds have never been rebuilt — the users those features were meant for never appeared.

What shipped on day one?

Landing site live. Electron binaries signed and packaged for macOS and Windows. User panel behind authentication. Admin dashboard running on production. The founder's initial cohort of thirty-two users were invited before our final commit landed.

We hit the ten-week date. The only internal deadline we missed was the leaderboard data backfill — which was never on the external scope.

What would we do differently?

Two things.

First, the challenge library took three weeks because we underestimated how editorial it was. The founder needed to configure challenges with custom rules, completion conditions, and reward tiers. That is a configurable CMS, not a data table. We should have spec'd the admin challenge flow in week one, not week four.

Second, we over-built the Electron packaging pipeline too early. Getting macOS and Windows code-signing working correctly took two and a half days — it should have been one — because we automated the signing ceremony before the binaries were stable. The rule: build the packaging pipeline once the app is stable, not before.


What does this build confirm?

The scope decisions behind ONETAPP follow the same principle we apply on every build: the MVP too big test that asks each proposed feature to earn its place before we write a line.


Written 2026-07-05 by Naman Barkiya.

FAQ

Questions this usually surfaces.

How long does it take to build a cross-platform desktop app MVP?
A cross-platform desktop app using Electron with a full backend typically takes eight to twelve weeks for the first shippable version — similar to a web app MVP, with extra time for platform-specific signing and packaging. ONETAPP shipped in ten weeks: landing site, desktop app, user panel, and admin dashboard. The variable is scope, not platform. Cut to the minimum surfaces that prove the hypothesis.
Should I build mobile or desktop first for a gaming product?
Build where your user is already sitting. For a gaming app, that is desktop — users have Steam open, the game running, and the app in the background. A background Electron app competes with nothing. A browser tab or mobile app asks the user to leave the game to interact with your product, which they will not do during a session. The platform decision should follow the use case, not the founder's preferred device.
When should you cut a feature from an MVP?
Cut it in week one, in the scope session, before you write a line of code. The cheapest cut is the one made before the feature is built. A feature earns its place in the first build if it is necessary to prove the core hypothesis. If it only makes sense after users exist — a leaderboard, a publisher API, a social layer — defer it, build the data infrastructure to support it later, and ship without it.