Karaman Mobile
City news, local discovery and food ordering in one mobile experience.


- Project
- Karaman.com
- Our role
- Design · Software development
- Platforms
- iOS · Android
01 / Behind the product
A real need. A considered solution.
Challenge
Karaman.com already had user accounts, restaurants and an API; the mobile app had to deliver the city portal and food ordering in one experience without rebuilding any of that. The client would build for the stores from their own Expo and Firebase accounts, so no secret could live in the source.
Approach
A monorepo: an Expo SDK 55 app plus shared packages (API client, types, utilities). A bridge Edge Function maps the karaman.com JWT to a Supabase profile while keeping the site’s real email. Ordering supports iyzico, Garanti POS and cash on delivery; a successful online payment does not count as restaurant approval, so orders start as pending. Delivery zones are validated server-side as PostGIS polygons and commission is computed on the order total. Push reaches guests too, through account-independent device registration and category preferences. The production profile refuses to build with mock data.
Result
Delivered in September 2026 with source, setup instructions and server release notes; the restaurant and admin panels share the same Supabase project. News, tourist places, on-duty pharmacies, weather and transport schedules on the city side; restaurants, order tracking and campaigns on the ordering side.
02 / Inside the product
The experience, on screen.
Open a screen to explore the details.02 images
03 / Scope & details
The details make the experience.
- 01
An identity flow bridging Karaman.com accounts
- 02
iyzico, Garanti POS and cash on delivery
- 03
Delivery zones validated with PostGIS
- 04
Push that reaches guests; weather, on-duty pharmacies, transport schedules
Technology
INSIDE THE PRODUCT
The engineering behind the interface.
Systems we built and concrete problems we addressed in this project.
The identity bridge
The bridge-session Edge Function validates the karaman.com JWT and maps it to a Supabase profile; the site’s real email is used and synthetic profile emails were cleaned up. No Karaman API key lives in the app; calls go through karaman-proxy.
Payment and order state
create-order opens the order as pending; iyzico-webhook and garanti-webhook process payment without standing in for restaurant approval. Status transitions are bound to the authorised role and a single history record, verified by a local database test under the restaurant role.
Delivery zones and commission
Zones live in PostGIS through the geography_helpers and delivery_zone_rpc migrations, with the server validating a proper Polygon. Commission is a rate on the order total (200 TL × 10% = 20 TL), with a correction migration for pending commissions.
Your idea could be next.
What could we build for you?
From a first release to a growing platform. Let’s plan the design, development and launch together.
From Türkiye to the US, UK, Australia and everywhere in between.