A market needs two apps that disagree
Belbeis is a city in Sharqia. The idea was a local marketplace, and the moment you take that seriously the problem changes shape: a marketplace is not one app with two screens. It is two applications with opposed interests meeting at a shared backend. The buyer wants the lowest price. The seller wants the highest. Both need to believe the other is real.
I built both.
- Buyer —
applicationId "com.erots.marketbelbeis", 38 source files - Seller —
com.erots.marketbelbeis.android.seller, 25 source files
The seller’s package sits inside the buyer’s namespace. That was not a convention I had read about; it is just how it felt — one system that happened to need two installs.
What the histories say
The two repositories disagree about how they were made, and the disagreement is the interesting part.
The buyer app has 12 commits across eight months, 2021-01-16 to 2021-09-22,
running Initial commit → update Navigation 1.0 → Update 1.9. Real
iteration, versioned by hand.
The seller app has one commit: SEIAM V 1.0, 2021-09-22 at 16:55
The file I left in
The clearest evidence of where this stopped is a file still sitting in the shipped source tree:
app/src/main/java/com/erots/marketbelbeis/ui/main/test.java 3,164 bytesThird-largest file in the project. Named test.java. In ui.main, next to MainActivity. It is not a test — the real test stubs are the untouched ExampleUnitTest.java and ExampleInstrumentedTest.java that Android Studio generates. test.java is a scratchpad I opened, used, and never deleted. There is a whole home/test_frag/ package beside it for the same reason.
Both apps are real in their feature breadth — cart, favourites, categories, Room caching, Facebook login on the buyer; product posting, orders, store profile, dashboard, a chat stub on the seller. Neither ever reached a checkout or a payment. It stopped being built before it could be used.
A small, exact record of speed
The buyer app’s colors.xml contains this:
<color name="purple_500">#2196F3</color>#2196F3 is Material Blue 500. The name says purple because that is what the Android Studio template called it, and I replaced the value without renaming the key. The seller app’s Gradle file declares Navigation Component twice, the same two lines verbatim.
Neither of those breaks anything. Both are the fingerprint of a project moving
faster than its own labels — which is also why it has a test.java in it, and
why it stopped.
What carried forward
The shape. Three years later I worked on Dinamo — a driver app and a rider app against one backend, two brands from one codebase — and then on Taxi Al Arab, the same structure again at production scale. I had built that shape before, badly, for a town in Sharqia, and knowing it in advance is the entire value of this project.